@mk-co/neox-cli 2.0.12 → 2.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli/main.js +102 -102
  2. package/package.json +1 -1
package/dist/cli/main.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import*as Je from'fs';import Je__default,{realpathSync,readlinkSync,readdirSync,readdir as readdir$1,lstatSync,readFileSync,createReadStream,existsSync,mkdirSync,writeFileSync}from'fs';import*as he from'path';import he__default,{dirname,join,win32,posix}from'path';import*as gi from'os';import gi__default,{homedir,tmpdir,platform}from'os';import {spawn,fork,spawnSync,execSync}from'child_process';import {EventEmitter}from'events';import {execa,execaSync}from'execa';import*as Se from'fs/promises';import Se__default,{realpath,readlink,readdir,lstat,readFile}from'fs/promises';import {fileURLToPath,URL as URL$1}from'url';import Ie from'chalk';import {performance as performance$1}from'perf_hooks';import*as ip from'readline';import ip__default from'readline';import Rc from'prompts';import I,{createContext,forwardRef,useContext,useState,useEffect,useMemo,useRef,PureComponent,useLayoutEffect}from'react';import Rh,{Stream}from'stream';import Qt,{cwd}from'process';import {throttle}from'es-toolkit/compat';import wn from'ansi-escapes';import ns from'is-in-ci';import Hx from'auto-bind';import {onExit}from'signal-exit';import qx from'patch-console';import {NoEventPriority,DefaultEventPriority,LegacyRoot}from'react-reconciler/constants.js';import ye from'yoga-layout';import IC from'wrap-ansi';import GC from'react-reconciler';import SC from'widest-line';import sr from'slice-ansi';import Wi from'string-width';import {styledCharsFromTokens,tokenize,styledCharsToString}from'@alcalzone/ansi-tokenize';import Zi from'cli-cursor';import gg from'stack-utils';import {Buffer as Buffer$1}from'buffer';import ET from'ajv';import er,{randomUUID,createHash,randomBytes}from'crypto';import {StringDecoder}from'string_decoder';import iy from'fast-glob';import zk from'puppeteer-core';import*as Hf from'net';import {Marked}from'marked';import {markedTerminal}from'marked-terminal';import {Box,Text}from'ink';import vl from'ink-spinner';import CI from'axios';import wA from'http';var fC=Object.create;var ji=Object.defineProperty;var yC=Object.getOwnPropertyDescriptor;var bC=Object.getOwnPropertyNames;var vC=Object.getPrototypeOf,CC=Object.prototype.hasOwnProperty;var Mm=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var Qe=(s,e)=>()=>(s&&(e=s(s=0)),e);var lo=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),Vr=(s,e)=>{for(var t in e)ji(s,t,{get:e[t],enumerable:true});},Pm=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of bC(e))!CC.call(s,r)&&r!==t&&ji(s,r,{get:()=>e[r],enumerable:!(n=yC(e,r))||n.enumerable});return s};var Rm=(s,e,t)=>(t=s!=null?fC(vC(s)):{},Pm(ji(t,"default",{value:s,enumerable:true}),s)),Nc=s=>Pm(ji({},"__esModule",{value:true}),s);var Gi={};Vr(Gi,{cliHealthMonitor:()=>Ht,cliLogger:()=>p,debugLog:()=>oe,generateCurlCommand:()=>Fn,installCrashHandler:()=>Fc,logCurlCommand:()=>Bc});function Fn(s,e,t,n=true){let r=["curl -X POST \\"];r.push(` '${s}' \\`);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)}`);}r.push(` -H '${i}: ${l}' \\`);}let o=JSON.stringify(t);return r.push(` -d '${TC(o)}'`),r.join(`
2
+ import*as Je from'fs';import Je__default,{realpathSync,readlinkSync,readdirSync,readdir as readdir$1,lstatSync,readFileSync,createReadStream,existsSync,mkdirSync,writeFileSync}from'fs';import*as he from'path';import he__default,{dirname,join,win32,posix}from'path';import*as gi from'os';import gi__default,{homedir,tmpdir,platform}from'os';import {spawn,fork,spawnSync,execSync}from'child_process';import {EventEmitter}from'events';import {execa,execaSync}from'execa';import*as Se from'fs/promises';import Se__default,{realpath,readlink,readdir,lstat,readFile}from'fs/promises';import {fileURLToPath,URL as URL$1}from'url';import Ie from'chalk';import {performance as performance$1}from'perf_hooks';import*as ip from'readline';import ip__default from'readline';import Rc from'prompts';import I,{createContext,forwardRef,useContext,useState,useEffect,useMemo,useRef,PureComponent,useLayoutEffect}from'react';import Rh,{Stream}from'stream';import Qt,{cwd}from'process';import {throttle}from'es-toolkit/compat';import wn from'ansi-escapes';import ns from'is-in-ci';import Hx from'auto-bind';import {onExit}from'signal-exit';import qx from'patch-console';import {NoEventPriority,DefaultEventPriority,LegacyRoot}from'react-reconciler/constants.js';import ye from'yoga-layout';import IC from'wrap-ansi';import GC from'react-reconciler';import SC from'widest-line';import sr from'slice-ansi';import Wi from'string-width';import {styledCharsFromTokens,tokenize,styledCharsToString}from'@alcalzone/ansi-tokenize';import Zi from'cli-cursor';import gg from'stack-utils';import {Buffer as Buffer$1}from'buffer';import ET from'ajv';import er,{randomUUID,createHash,randomBytes}from'crypto';import {StringDecoder}from'string_decoder';import iy from'fast-glob';import zk from'puppeteer-core';import*as Hf from'net';import {Marked}from'marked';import {markedTerminal}from'marked-terminal';import {Box,Text}from'ink';import vl from'ink-spinner';import xI from'axios';import kA from'http';var fC=Object.create;var ji=Object.defineProperty;var yC=Object.getOwnPropertyDescriptor;var bC=Object.getOwnPropertyNames;var vC=Object.getPrototypeOf,CC=Object.prototype.hasOwnProperty;var Mm=(s=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(s,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):s)(function(s){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+s+'" is not supported')});var Qe=(s,e)=>()=>(s&&(e=s(s=0)),e);var lo=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),Vr=(s,e)=>{for(var t in e)ji(s,t,{get:e[t],enumerable:true});},Pm=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of bC(e))!CC.call(s,r)&&r!==t&&ji(s,r,{get:()=>e[r],enumerable:!(n=yC(e,r))||n.enumerable});return s};var Rm=(s,e,t)=>(t=s!=null?fC(vC(s)):{},Pm(ji(t,"default",{value:s,enumerable:true}),s)),Nc=s=>Pm(ji({},"__esModule",{value:true}),s);var Gi={};Vr(Gi,{cliHealthMonitor:()=>Ht,cliLogger:()=>p,debugLog:()=>oe,generateCurlCommand:()=>Fn,installCrashHandler:()=>Fc,logCurlCommand:()=>Bc});function Fn(s,e,t,n=true){let r=["curl -X POST \\"];r.push(` '${s}' \\`);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)}`);}r.push(` -H '${i}: ${l}' \\`);}let o=JSON.stringify(t);return r.push(` -d '${TC(o)}'`),r.join(`
3
3
  `)}function TC(s){return s.replace(/'/g,"'\\''")}function Bc(s,e,t){if(process.env.CLI_DEBUG!=="1")return;let n=Fn(s,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 oe(s,e,t){if(process.env.CLI_DEBUG==="1"&&(p.debug(s,e,t),process.env.CLI_DEBUG_CONSOLE==="1")){let n=s?`[${s}]`:"";t!==void 0?console.log(n,e,t):console.log(n,e);}}function Fc(){process.on("uncaughtException",s=>{p.error("CRASH","Uncaught Exception",{name:s.name,message:s.message,stack:s.stack}),setTimeout(()=>process.exit(1),100);}),process.on("unhandledRejection",s=>{p.error("CRASH","Unhandled Rejection",{reason:s instanceof Error?{name:s.name,message:s.message,stack:s.stack}:s});});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 Oc,p,$c,Ht,Z=Qe(()=>{Oc=class{logDir;enabled=true;initialized=false;writeStream=null;currentLogFile=null;backpressured=false;constructor(){this.logDir=he__default.join(gi__default.homedir(),".neox","logs");}init(){if(!this.initialized)try{Je__default.existsSync(this.logDir)||Je__default.mkdirSync(this.logDir,{recursive:!0}),this.initialized=!0;}catch{this.enabled=false;}}getLogFilePath(){let e=new Date().toISOString().split("T")[0];return he__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=Je__default.createWriteStream(e,{flags:"a"}),this.currentLogFile=e),this.writeStream}formatLocalTime(){let e=new Date,t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=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}-${r} ${o}:${i}:${a}.${l}`}formatMessage(e,t,n,r){let o=this.formatLocalTime(),i=e.toUpperCase().padEnd(5),a=t?`[${t}]`:"",l=`${o} ${i} ${a} ${n}`;if(r!==void 0)try{let c=this.safeStringify(r);l+=` ${c}`;}catch{l+=" [Serialization Error]";}return l+`
6
- `}safeStringify(e){let t=new WeakSet;return JSON.stringify(e,(n,r)=>{if(typeof r=="object"&&r!==null){if(t.has(r))return "[Circular]";t.add(r);}return n==="parser"||n==="socket"||n==="_httpMessage"||n==="req"||n==="res"?"[Omitted]":r&&r.type==="Buffer"&&Array.isArray(r.data)?"[Buffer]":typeof r=="function"?"[Function]":r instanceof Error?{name:r.name,message:r.message,stack:r.stack}:r})}write(e,t,n,r){if(!this.enabled)return;let o=this.ensureStream();if(!o||this.backpressured&&e==="debug")return;let i=this.formatMessage(e,t,n,r);!o.write(i)&&!this.backpressured&&(this.backpressured=true,o.once("drain",()=>{this.backpressured=false;}));}debug(e,t,n){this.write("debug",e,t,n);}info(e,t,n){this.write("info",e,t,n);}warn(e,t,n){this.write("warn",e,t,n);}error(e,t,n){this.write("error",e,t,n);}log(e,...t){let n=t.map(r=>{if(typeof r=="string")return r;try{return this.safeStringify(r)}catch{return String(r)}}).join(" ");this.write("info",e,n);}setEnabled(e){this.enabled=e;}getLogDir(){return this.logDir}getCurrentLogFile(){return this.currentLogFile}close(){this.writeStream&&(this.writeStream.end(),this.writeStream=null,this.currentLogFile=null);}},p=new Oc;$c=class{intervalId=null;lastHeartbeat=Date.now();heartbeatCount=0;stdinPausedCount=0;enabled=false;pid=process.pid;start(e=5e3){if(!(this.intervalId||process.env.CLI_DEBUG!=="1")){if(!process.stdin.isTTY){p.debug("HEALTH",`Skipping health monitor in non-TTY process (pid=${this.pid})`);return}this.enabled=true,this.lastHeartbeat=Date.now(),this.heartbeatCount=0,this.stdinPausedCount=0,p.info("HEALTH",`Health monitor started (interval: ${e}ms, pid=${this.pid})`),this.intervalId=setInterval(()=>{this.checkHealth();},e),this.intervalId.unref();}}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null,this.enabled=false,p.info("HEALTH","Health monitor stopped"));}stdinDestroyedCount=0;checkHealth(){let e=Date.now(),t=e-this.lastHeartbeat;this.lastHeartbeat=e,this.heartbeatCount++;let n=this.getStdinState();if(n.isPaused?this.stdinPausedCount++:this.stdinPausedCount=0,n.destroyed){if(this.stdinDestroyedCount++,this.stdinDestroyedCount>=3){p.warn("HEALTH",`[pid=${this.pid}] stdin destroyed for ${this.stdinDestroyedCount} checks, exiting to avoid zombie process`),this.stop(),setTimeout(()=>{process.exit(0);},100);return}}else this.stdinDestroyedCount=0;p.debug("HEALTH",`[pid=${this.pid}] Heartbeat #${this.heartbeatCount}`,{elapsed:`${t}ms`,stdin:n,stdinPausedCount:this.stdinPausedCount}),this.stdinPausedCount>=3&&p.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F stdin has been paused for ${this.stdinPausedCount} consecutive checks!`,{stdin:n}),t>1e4&&p.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F Event loop delay detected: ${t}ms (expected ~5000ms)`);}getStdinState(){let e=process.stdin;return {isPaused:typeof e.isPaused=="function"?e.isPaused():false,isTTY:!!e.isTTY,isRaw:!!e.isRaw,readable:e.readable,destroyed:e.destroyed}}logStdinState(e){if(process.env.CLI_DEBUG!=="1")return;let t=this.getStdinState();p.debug("STDIN",`[${e}] stdin state`,t);}logInkState(e,t){process.env.CLI_DEBUG==="1"&&p.debug("INK",`[${e}]`,t);}},Ht=new $c;});var jm={};Vr(jm,{default:()=>jC});var jC,Gm=Qe(()=>{jC={};});var Jm=lo((aR,qC)=>{qC.exports={single:{topLeft:"\u250C",top:"\u2500",topRight:"\u2510",right:"\u2502",bottomRight:"\u2518",bottom:"\u2500",bottomLeft:"\u2514",left:"\u2502"},double:{topLeft:"\u2554",top:"\u2550",topRight:"\u2557",right:"\u2551",bottomRight:"\u255D",bottom:"\u2550",bottomLeft:"\u255A",left:"\u2551"},round:{topLeft:"\u256D",top:"\u2500",topRight:"\u256E",right:"\u2502",bottomRight:"\u256F",bottom:"\u2500",bottomLeft:"\u2570",left:"\u2502"},bold:{topLeft:"\u250F",top:"\u2501",topRight:"\u2513",right:"\u2503",bottomRight:"\u251B",bottom:"\u2501",bottomLeft:"\u2517",left:"\u2503"},singleDouble:{topLeft:"\u2553",top:"\u2500",topRight:"\u2556",right:"\u2551",bottomRight:"\u255C",bottom:"\u2500",bottomLeft:"\u2559",left:"\u2551"},doubleSingle:{topLeft:"\u2552",top:"\u2550",topRight:"\u2555",right:"\u2502",bottomRight:"\u255B",bottom:"\u2550",bottomLeft:"\u2558",left:"\u2502"},classic:{topLeft:"+",top:"-",topRight:"+",right:"|",bottomRight:"+",bottom:"-",bottomLeft:"+",left:"|"},arrow:{topLeft:"\u2198",top:"\u2193",topRight:"\u2199",right:"\u2190",bottomRight:"\u2196",bottom:"\u2191",bottomLeft:"\u2197",left:"\u2192"}};});var Ym=lo((lR,Qc)=>{var Vm=Jm();Qc.exports=Vm;Qc.exports.default=Vm;});var Tg={};Vr(Tg,{hasClipboardImage:()=>bg,imageFileToBase64:()=>Ox,imageFileToBase64Data:()=>xg,pasteImageAsBase64:()=>cu,saveClipboardImage:()=>vg,tryPasteClipboardImage:()=>Cg});function Ax(){if(process.platform!=="darwin")return null;if(yg)return au;yg=true;let s=he.join(gi.tmpdir(),"neox-clipboard-tool");if(Je.existsSync(s))return au=s,s;let e=`
6
+ `}safeStringify(e){let t=new WeakSet;return JSON.stringify(e,(n,r)=>{if(typeof r=="object"&&r!==null){if(t.has(r))return "[Circular]";t.add(r);}return n==="parser"||n==="socket"||n==="_httpMessage"||n==="req"||n==="res"?"[Omitted]":r&&r.type==="Buffer"&&Array.isArray(r.data)?"[Buffer]":typeof r=="function"?"[Function]":r instanceof Error?{name:r.name,message:r.message,stack:r.stack}:r})}write(e,t,n,r){if(!this.enabled)return;let o=this.ensureStream();if(!o||this.backpressured&&e==="debug")return;let i=this.formatMessage(e,t,n,r);!o.write(i)&&!this.backpressured&&(this.backpressured=true,o.once("drain",()=>{this.backpressured=false;}));}debug(e,t,n){this.write("debug",e,t,n);}info(e,t,n){this.write("info",e,t,n);}warn(e,t,n){this.write("warn",e,t,n);}error(e,t,n){this.write("error",e,t,n);}log(e,...t){let n=t.map(r=>{if(typeof r=="string")return r;try{return this.safeStringify(r)}catch{return String(r)}}).join(" ");this.write("info",e,n);}setEnabled(e){this.enabled=e;}getLogDir(){return this.logDir}getCurrentLogFile(){return this.currentLogFile}close(){this.writeStream&&(this.writeStream.end(),this.writeStream=null,this.currentLogFile=null);}},p=new Oc;$c=class{intervalId=null;lastHeartbeat=Date.now();heartbeatCount=0;stdinPausedCount=0;enabled=false;pid=process.pid;start(e=5e3){if(!(this.intervalId||process.env.CLI_DEBUG!=="1")){if(!process.stdin.isTTY){p.debug("HEALTH",`Skipping health monitor in non-TTY process (pid=${this.pid})`);return}this.enabled=true,this.lastHeartbeat=Date.now(),this.heartbeatCount=0,this.stdinPausedCount=0,p.info("HEALTH",`Health monitor started (interval: ${e}ms, pid=${this.pid})`),this.intervalId=setInterval(()=>{this.checkHealth();},e),this.intervalId.unref();}}stop(){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null,this.enabled=false,p.info("HEALTH","Health monitor stopped"));}stdinDestroyedCount=0;checkHealth(){let e=Date.now(),t=e-this.lastHeartbeat;this.lastHeartbeat=e,this.heartbeatCount++;let n=this.getStdinState();if(n.isPaused?this.stdinPausedCount++:this.stdinPausedCount=0,n.destroyed){if(this.stdinDestroyedCount++,this.stdinDestroyedCount>=3){p.warn("HEALTH",`[pid=${this.pid}] stdin destroyed for ${this.stdinDestroyedCount} checks, exiting to avoid zombie process`),this.stop(),setTimeout(()=>{process.exit(0);},100);return}}else this.stdinDestroyedCount=0;p.debug("HEALTH",`[pid=${this.pid}] Heartbeat #${this.heartbeatCount}`,{elapsed:`${t}ms`,stdin:n,stdinPausedCount:this.stdinPausedCount}),this.stdinPausedCount>=3&&p.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F stdin has been paused for ${this.stdinPausedCount} consecutive checks!`,{stdin:n}),t>1e4&&p.warn("HEALTH",`[pid=${this.pid}] \u26A0\uFE0F Event loop delay detected: ${t}ms (expected ~5000ms)`);}getStdinState(){let e=process.stdin;return {isPaused:typeof e.isPaused=="function"?e.isPaused():false,isTTY:!!e.isTTY,isRaw:!!e.isRaw,readable:e.readable,destroyed:e.destroyed}}logStdinState(e){if(process.env.CLI_DEBUG!=="1")return;let t=this.getStdinState();p.debug("STDIN",`[${e}] stdin state`,t);}logInkState(e,t){process.env.CLI_DEBUG==="1"&&p.debug("INK",`[${e}]`,t);}},Ht=new $c;});var jm={};Vr(jm,{default:()=>jC});var jC,Gm=Qe(()=>{jC={};});var Jm=lo((lR,qC)=>{qC.exports={single:{topLeft:"\u250C",top:"\u2500",topRight:"\u2510",right:"\u2502",bottomRight:"\u2518",bottom:"\u2500",bottomLeft:"\u2514",left:"\u2502"},double:{topLeft:"\u2554",top:"\u2550",topRight:"\u2557",right:"\u2551",bottomRight:"\u255D",bottom:"\u2550",bottomLeft:"\u255A",left:"\u2551"},round:{topLeft:"\u256D",top:"\u2500",topRight:"\u256E",right:"\u2502",bottomRight:"\u256F",bottom:"\u2500",bottomLeft:"\u2570",left:"\u2502"},bold:{topLeft:"\u250F",top:"\u2501",topRight:"\u2513",right:"\u2503",bottomRight:"\u251B",bottom:"\u2501",bottomLeft:"\u2517",left:"\u2503"},singleDouble:{topLeft:"\u2553",top:"\u2500",topRight:"\u2556",right:"\u2551",bottomRight:"\u255C",bottom:"\u2500",bottomLeft:"\u2559",left:"\u2551"},doubleSingle:{topLeft:"\u2552",top:"\u2550",topRight:"\u2555",right:"\u2502",bottomRight:"\u255B",bottom:"\u2550",bottomLeft:"\u2558",left:"\u2502"},classic:{topLeft:"+",top:"-",topRight:"+",right:"|",bottomRight:"+",bottom:"-",bottomLeft:"+",left:"|"},arrow:{topLeft:"\u2198",top:"\u2193",topRight:"\u2199",right:"\u2190",bottomRight:"\u2196",bottom:"\u2191",bottomLeft:"\u2197",left:"\u2192"}};});var Ym=lo((cR,Qc)=>{var Vm=Jm();Qc.exports=Vm;Qc.exports.default=Vm;});var Tg={};Vr(Tg,{hasClipboardImage:()=>bg,imageFileToBase64:()=>Ox,imageFileToBase64Data:()=>xg,pasteImageAsBase64:()=>cu,saveClipboardImage:()=>vg,tryPasteClipboardImage:()=>Cg});function Ax(){if(process.platform!=="darwin")return null;if(yg)return au;yg=true;let s=he.join(gi.tmpdir(),"neox-clipboard-tool");if(Je.existsSync(s))return au=s,s;let e=`
7
7
  import Cocoa
8
8
  let pb = NSPasteboard.general
9
9
  if let image = pb.readObjects(forClasses: [NSImage.self], options: nil)?.first as? NSImage {
@@ -30,26 +30,26 @@ if ($img) {
30
30
  $img.Save("${e.replace(/\\/g,"\\\\")}")
31
31
  Write-Host "OK"
32
32
  }
33
- `;if(execSync(`powershell -command "${t}"`,{encoding:"utf-8",timeout:5e3}).includes("OK")&&Je.existsSync(e))return p.info("CLIPBOARD",`\u2713 Saved clipboard image to ${e}`),e}catch(t){p.debug("CLIPBOARD","Failed to save clipboard image",{error:t});}return null}function Nx(){try{return execSync("xclip -selection clipboard -t TARGETS -o 2>/dev/null | grep -i png",{encoding:"utf-8",timeout:2e3}),!0}catch{return false}}async function Lx(){let s=gi.tmpdir(),e=he.join(s,`neox-clipboard-${Date.now()}.png`);try{if(execSync(`xclip -selection clipboard -t image/png -o > "${e}"`,{timeout:5e3,shell:"/bin/bash"}),Je.existsSync(e)&&Je.statSync(e).size>0)return p.info("CLIPBOARD",`\u2713 Saved clipboard image to ${e}`),e}catch(t){p.debug("CLIPBOARD","Failed to save clipboard image",{error:t});}return null}async function Cg(){return bg()?vg():null}function Ox(s){try{let e=Je.readFileSync(s),t=he.extname(s).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 r=e.toString("base64");return `data:${n};base64,${r}`}catch(e){return p.error("CLIPBOARD","Failed to convert image to base64",{error:e,imagePath:s}),null}}function xg(s){try{let e=Je.readFileSync(s),t=he.extname(s).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 r=e.toString("base64");return {mediaType:n,data:r}}catch(e){return p.error("CLIPBOARD","Failed to convert image to base64",{error:e,imagePath:s}),null}}async function cu(){let s=await Cg();if(!s)return null;let e=xg(s);if(!e)return null;let t=he.basename(s);try{Je.unlinkSync(s);}catch{}return {...e,name:t}}var au,yg,uu=Qe(()=>{Z();au=null,yg=false;});var zg=lo((aO,Hg)=>{var Gg=Mm("fs"),yu=Mm("path"),Wg=yu.join(__dirname,"path.txt");function wT(){let s;if(Gg.existsSync(Wg)&&(s=Gg.readFileSync(Wg,"utf-8")),process.env.ELECTRON_OVERRIDE_DIST_PATH)return yu.join(process.env.ELECTRON_OVERRIDE_DIST_PATH,s||"electron");if(s)return yu.join(__dirname,"dist",s);throw new Error("Electron failed to install correctly, please delete node_modules/electron and try installing again")}Hg.exports=wT();});var rh=lo((l$,nh)=>{nh.exports=eh;function eh(s,e,t){s instanceof RegExp&&(s=Zg(s,t)),e instanceof RegExp&&(e=Zg(e,t));var n=th(s,e,t);return n&&{start:n[0],end:n[1],pre:t.slice(0,n[0]),body:t.slice(n[0]+s.length,n[1]),post:t.slice(n[1]+e.length)}}function Zg(s,e){var t=e.match(s);return t?t[0]:null}eh.range=th;function th(s,e,t){var n,r,o,i,a,l=t.indexOf(s),c=t.indexOf(e,l+1),u=l;if(l>=0&&c>0){if(s===e)return [l,c];for(n=[],o=t.length;u>=0&&!a;)u==l?(n.push(u),l=t.indexOf(s,u+1)):n.length==1?a=[n.pop(),c]:(r=n.pop(),r<o&&(o=r,i=c),c=t.indexOf(e,u+1)),u=l<c&&l>=0?l:c;n.length&&(a=[o,i]);}return a}});var dh=lo((c$,uh)=>{var sh=rh();uh.exports=qT;var oh="\0SLASH"+Math.random()+"\0",ih="\0OPEN"+Math.random()+"\0",Eu="\0CLOSE"+Math.random()+"\0",ah="\0COMMA"+Math.random()+"\0",lh="\0PERIOD"+Math.random()+"\0";function Iu(s){return parseInt(s,10)==s?parseInt(s,10):s.charCodeAt(0)}function HT(s){return s.split("\\\\").join(oh).split("\\{").join(ih).split("\\}").join(Eu).split("\\,").join(ah).split("\\.").join(lh)}function zT(s){return s.split(oh).join("\\").split(ih).join("{").split(Eu).join("}").split(ah).join(",").split(lh).join(".")}function ch(s){if(!s)return [""];var e=[],t=sh("{","}",s);if(!t)return s.split(",");var n=t.pre,r=t.body,o=t.post,i=n.split(",");i[i.length-1]+="{"+r+"}";var a=ch(o);return o.length&&(i[i.length-1]+=a.shift(),i.push.apply(i,a)),e.push.apply(e,i),e}function qT(s){return s?(s.substr(0,2)==="{}"&&(s="\\{\\}"+s.substr(2)),Ao(HT(s),true).map(zT)):[]}function KT(s){return "{"+s+"}"}function JT(s){return /^-?0\d/.test(s)}function VT(s,e){return s<=e}function YT(s,e){return s>=e}function Ao(s,e){var t=[],n=sh("{","}",s);if(!n)return [s];var r=n.pre,o=n.post.length?Ao(n.post,false):[""];if(/\$$/.test(n.pre))for(var i=0;i<o.length;i++){var a=r+"{"+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(/,(?!,).*\}/)?(s=n.pre+"{"+n.body+Eu+n.post,Ao(s)):[s];var m;if(u)m=n.body.split(/\.\./);else if(m=ch(n.body),m.length===1&&(m=Ao(m[0],false).map(KT),m.length===1))return o.map(function(M){return n.pre+m[0]+M});var g;if(u){var h=Iu(m[0]),f=Iu(m[1]),v=Math.max(m[0].length,m[1].length),b=m.length==3?Math.abs(Iu(m[2])):1,C=VT,T=f<h;T&&(b*=-1,C=YT);var w=m.some(JT);g=[];for(var E=h;C(E,f);E+=b){var N;if(c)N=String.fromCharCode(E),N==="\\"&&(N="");else if(N=String(E),w){var D=v-N.length;if(D>0){var $=new Array(D+1).join("0");E<0?N="-"+$+N.slice(1):N=$+N;}}g.push(N);}}else {g=[];for(var k=0;k<m.length;k++)g.push.apply(g,Ao(m[k],false));}for(var k=0;k<g.length;k++)for(var i=0;i<o.length;i++){var a=r+g[k]+o[i];(!e||u||a)&&t.push(a);}}return t}});var Ef={};Vr(Ef,{WriteLockManager:()=>oi,getGlobalWriteLockManager:()=>sl,resetGlobalWriteLockManager:()=>If});function sl(){return Ms||(Ms=new oi),Ms}function If(){Ms&&(Ms.destroy(),Ms=null);}var oi,Ms,ol=Qe(()=>{Z();oi=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 r=n??this.defaultTimeout,o=this.normalizePath(e),i=Date.now(),a=this.tryAcquire(o,t);return a.success?a:this.waitForLock(o,t,r,i)}tryAcquire(e,t){let n=this.normalizePath(e),r=this.locks.get(n);if(r)if(Date.now()>r.expiresAt)p.warn("WRITE_LOCK",`Lock expired for ${n}`,{previousHolder:r.agentId}),this.locks.delete(n);else return r.agentId===t?(r.expiresAt=Date.now()+this.lockTTL,{success:true,waitTime:0}):{success:false,heldBy:r.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,r){return new Promise(o=>{let i=setTimeout(()=>{this.removeFromQueue(e,t),o({success:false,heldBy:this.locks.get(e)?.agentId,waitTime:Date.now()-r});},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()-r});},timeoutId:i}),p.debug("WRITE_LOCK",`Waiting for lock: ${e}`,{agentId:t});})}release(e,t){let n=this.normalizePath(e),r=this.locks.get(n);return r?r.agentId!==t?(p.warn("WRITE_LOCK","Cannot release lock held by another agent",{path:n,holder:r.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[r,o]of n)o.agentId===e&&(this.locks.delete(r),this.emit("lock_released",{path:r,agentId:e}),this.processWaitQueue(r),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 r=this.tryAcquire(e,n.agentId);n.resolve(r),t.length===0&&this.waitQueues.delete(e);}removeFromQueue(e,t){let n=this.waitQueues.get(e);if(!n)return;let r=n.findIndex(o=>o.agentId===t);r!==-1&&(clearTimeout(n[r].timeoutId),n.splice(r,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,r]of t)e>r.expiresAt&&(p.warn("WRITE_LOCK",`Cleaning up expired lock: ${n}`,{agentId:r.agentId,expiredAt:new Date(r.expiresAt).toISOString()}),this.locks.delete(n),this.emit("lock_expired",{path:n,agentId:r.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,r=Array.from(this.waitQueues.values());for(let o of r)n+=o.length;return {activeLocks:this.locks.size,waitingRequests:n,locksByAgent:e}}},Ms=null;});function Kf(s,e){return {...s,...e,PATH:s.PATH||e.PATH||"",JAVA_HOME:s.JAVA_HOME||e.JAVA_HOME||"",MAVEN_HOME:s.MAVEN_HOME||e.MAVEN_HOME||"",M2_HOME:s.M2_HOME||e.M2_HOME||"",NODE_PATH:s.NODE_PATH||e.NODE_PATH||"",GOPATH:s.GOPATH||e.GOPATH||"",CARGO_HOME:s.CARGO_HOME||e.CARGO_HOME||"",RUSTUP_HOME:s.RUSTUP_HOME||e.RUSTUP_HOME||"",PYENV_ROOT:s.PYENV_ROOT||e.PYENV_ROOT||"",CONDA_PREFIX:s.CONDA_PREFIX||e.CONDA_PREFIX||""}}function Jf(s){let e={};for(let t of s.split(`
33
+ `;if(execSync(`powershell -command "${t}"`,{encoding:"utf-8",timeout:5e3}).includes("OK")&&Je.existsSync(e))return p.info("CLIPBOARD",`\u2713 Saved clipboard image to ${e}`),e}catch(t){p.debug("CLIPBOARD","Failed to save clipboard image",{error:t});}return null}function Nx(){try{return execSync("xclip -selection clipboard -t TARGETS -o 2>/dev/null | grep -i png",{encoding:"utf-8",timeout:2e3}),!0}catch{return false}}async function Lx(){let s=gi.tmpdir(),e=he.join(s,`neox-clipboard-${Date.now()}.png`);try{if(execSync(`xclip -selection clipboard -t image/png -o > "${e}"`,{timeout:5e3,shell:"/bin/bash"}),Je.existsSync(e)&&Je.statSync(e).size>0)return p.info("CLIPBOARD",`\u2713 Saved clipboard image to ${e}`),e}catch(t){p.debug("CLIPBOARD","Failed to save clipboard image",{error:t});}return null}async function Cg(){return bg()?vg():null}function Ox(s){try{let e=Je.readFileSync(s),t=he.extname(s).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 r=e.toString("base64");return `data:${n};base64,${r}`}catch(e){return p.error("CLIPBOARD","Failed to convert image to base64",{error:e,imagePath:s}),null}}function xg(s){try{let e=Je.readFileSync(s),t=he.extname(s).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 r=e.toString("base64");return {mediaType:n,data:r}}catch(e){return p.error("CLIPBOARD","Failed to convert image to base64",{error:e,imagePath:s}),null}}async function cu(){let s=await Cg();if(!s)return null;let e=xg(s);if(!e)return null;let t=he.basename(s);try{Je.unlinkSync(s);}catch{}return {...e,name:t}}var au,yg,uu=Qe(()=>{Z();au=null,yg=false;});var zg=lo((lO,Hg)=>{var Gg=Mm("fs"),yu=Mm("path"),Wg=yu.join(__dirname,"path.txt");function wT(){let s;if(Gg.existsSync(Wg)&&(s=Gg.readFileSync(Wg,"utf-8")),process.env.ELECTRON_OVERRIDE_DIST_PATH)return yu.join(process.env.ELECTRON_OVERRIDE_DIST_PATH,s||"electron");if(s)return yu.join(__dirname,"dist",s);throw new Error("Electron failed to install correctly, please delete node_modules/electron and try installing again")}Hg.exports=wT();});var rh=lo((c$,nh)=>{nh.exports=eh;function eh(s,e,t){s instanceof RegExp&&(s=Zg(s,t)),e instanceof RegExp&&(e=Zg(e,t));var n=th(s,e,t);return n&&{start:n[0],end:n[1],pre:t.slice(0,n[0]),body:t.slice(n[0]+s.length,n[1]),post:t.slice(n[1]+e.length)}}function Zg(s,e){var t=e.match(s);return t?t[0]:null}eh.range=th;function th(s,e,t){var n,r,o,i,a,l=t.indexOf(s),c=t.indexOf(e,l+1),u=l;if(l>=0&&c>0){if(s===e)return [l,c];for(n=[],o=t.length;u>=0&&!a;)u==l?(n.push(u),l=t.indexOf(s,u+1)):n.length==1?a=[n.pop(),c]:(r=n.pop(),r<o&&(o=r,i=c),c=t.indexOf(e,u+1)),u=l<c&&l>=0?l:c;n.length&&(a=[o,i]);}return a}});var dh=lo((u$,uh)=>{var sh=rh();uh.exports=qT;var oh="\0SLASH"+Math.random()+"\0",ih="\0OPEN"+Math.random()+"\0",Eu="\0CLOSE"+Math.random()+"\0",ah="\0COMMA"+Math.random()+"\0",lh="\0PERIOD"+Math.random()+"\0";function Iu(s){return parseInt(s,10)==s?parseInt(s,10):s.charCodeAt(0)}function HT(s){return s.split("\\\\").join(oh).split("\\{").join(ih).split("\\}").join(Eu).split("\\,").join(ah).split("\\.").join(lh)}function zT(s){return s.split(oh).join("\\").split(ih).join("{").split(Eu).join("}").split(ah).join(",").split(lh).join(".")}function ch(s){if(!s)return [""];var e=[],t=sh("{","}",s);if(!t)return s.split(",");var n=t.pre,r=t.body,o=t.post,i=n.split(",");i[i.length-1]+="{"+r+"}";var a=ch(o);return o.length&&(i[i.length-1]+=a.shift(),i.push.apply(i,a)),e.push.apply(e,i),e}function qT(s){return s?(s.substr(0,2)==="{}"&&(s="\\{\\}"+s.substr(2)),Ao(HT(s),true).map(zT)):[]}function KT(s){return "{"+s+"}"}function JT(s){return /^-?0\d/.test(s)}function VT(s,e){return s<=e}function YT(s,e){return s>=e}function Ao(s,e){var t=[],n=sh("{","}",s);if(!n)return [s];var r=n.pre,o=n.post.length?Ao(n.post,false):[""];if(/\$$/.test(n.pre))for(var i=0;i<o.length;i++){var a=r+"{"+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(/,(?!,).*\}/)?(s=n.pre+"{"+n.body+Eu+n.post,Ao(s)):[s];var m;if(u)m=n.body.split(/\.\./);else if(m=ch(n.body),m.length===1&&(m=Ao(m[0],false).map(KT),m.length===1))return o.map(function(M){return n.pre+m[0]+M});var g;if(u){var h=Iu(m[0]),f=Iu(m[1]),v=Math.max(m[0].length,m[1].length),b=m.length==3?Math.abs(Iu(m[2])):1,C=VT,T=f<h;T&&(b*=-1,C=YT);var w=m.some(JT);g=[];for(var E=h;C(E,f);E+=b){var N;if(c)N=String.fromCharCode(E),N==="\\"&&(N="");else if(N=String(E),w){var D=v-N.length;if(D>0){var $=new Array(D+1).join("0");E<0?N="-"+$+N.slice(1):N=$+N;}}g.push(N);}}else {g=[];for(var k=0;k<m.length;k++)g.push.apply(g,Ao(m[k],false));}for(var k=0;k<g.length;k++)for(var i=0;i<o.length;i++){var a=r+g[k]+o[i];(!e||u||a)&&t.push(a);}}return t}});var Ef={};Vr(Ef,{WriteLockManager:()=>oi,getGlobalWriteLockManager:()=>sl,resetGlobalWriteLockManager:()=>If});function sl(){return Ms||(Ms=new oi),Ms}function If(){Ms&&(Ms.destroy(),Ms=null);}var oi,Ms,ol=Qe(()=>{Z();oi=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 r=n??this.defaultTimeout,o=this.normalizePath(e),i=Date.now(),a=this.tryAcquire(o,t);return a.success?a:this.waitForLock(o,t,r,i)}tryAcquire(e,t){let n=this.normalizePath(e),r=this.locks.get(n);if(r)if(Date.now()>r.expiresAt)p.warn("WRITE_LOCK",`Lock expired for ${n}`,{previousHolder:r.agentId}),this.locks.delete(n);else return r.agentId===t?(r.expiresAt=Date.now()+this.lockTTL,{success:true,waitTime:0}):{success:false,heldBy:r.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,r){return new Promise(o=>{let i=setTimeout(()=>{this.removeFromQueue(e,t),o({success:false,heldBy:this.locks.get(e)?.agentId,waitTime:Date.now()-r});},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()-r});},timeoutId:i}),p.debug("WRITE_LOCK",`Waiting for lock: ${e}`,{agentId:t});})}release(e,t){let n=this.normalizePath(e),r=this.locks.get(n);return r?r.agentId!==t?(p.warn("WRITE_LOCK","Cannot release lock held by another agent",{path:n,holder:r.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[r,o]of n)o.agentId===e&&(this.locks.delete(r),this.emit("lock_released",{path:r,agentId:e}),this.processWaitQueue(r),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 r=this.tryAcquire(e,n.agentId);n.resolve(r),t.length===0&&this.waitQueues.delete(e);}removeFromQueue(e,t){let n=this.waitQueues.get(e);if(!n)return;let r=n.findIndex(o=>o.agentId===t);r!==-1&&(clearTimeout(n[r].timeoutId),n.splice(r,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,r]of t)e>r.expiresAt&&(p.warn("WRITE_LOCK",`Cleaning up expired lock: ${n}`,{agentId:r.agentId,expiredAt:new Date(r.expiresAt).toISOString()}),this.locks.delete(n),this.emit("lock_expired",{path:n,agentId:r.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,r=Array.from(this.waitQueues.values());for(let o of r)n+=o.length;return {activeLocks:this.locks.size,waitingRequests:n,locksByAgent:e}}},Ms=null;});function Kf(s,e){return {...s,...e,PATH:s.PATH||e.PATH||"",JAVA_HOME:s.JAVA_HOME||e.JAVA_HOME||"",MAVEN_HOME:s.MAVEN_HOME||e.MAVEN_HOME||"",M2_HOME:s.M2_HOME||e.M2_HOME||"",NODE_PATH:s.NODE_PATH||e.NODE_PATH||"",GOPATH:s.GOPATH||e.GOPATH||"",CARGO_HOME:s.CARGO_HOME||e.CARGO_HOME||"",RUSTUP_HOME:s.RUSTUP_HOME||e.RUSTUP_HOME||"",PYENV_ROOT:s.PYENV_ROOT||e.PYENV_ROOT||"",CONDA_PREFIX:s.CONDA_PREFIX||e.CONDA_PREFIX||""}}function Jf(s){let e={};for(let t of s.split(`
34
34
  `)){let n=t.indexOf("=");if(n>0){let r=t.substring(0,n),o=t.substring(n+1);e[r]=o;}}return e}async function Vf(){if(At)return;let s={...process.env};if(process.platform==="win32"){At=s;return}try{let e=process.env.SHELL||"/bin/zsh";p.debug("SHELL","Preloading shell environment asynchronously...");let t=await execa(e,["-lc","env"],{encoding:"utf8",timeout:5e3,reject:!1,stdin:"ignore",stdout:"pipe",stderr:"ignore"});if(t.stdout){let n=Jf(t.stdout);At=Kf(n,s),p.debug("SHELL","Preloaded shell environment successfully",{pathLength:At.PATH?.length});}else At=s;}catch(e){p.warn("SHELL","Failed to preload shell environment",{error:e}),At=s;}}function ai(){if(At)return At;process.env.CLI_DEBUG==="1"&&p.warn("SHELL","\u26A0\uFE0F getShellEnv() cache miss - this should not happen! Call preloadShellEnv() during init.");let s={...process.env};if(process.platform==="win32")return At=s,At;try{let e=process.env.SHELL||"/bin/zsh",t=execaSync(e,["-ilc","env"],{encoding:"utf8",timeout:5e3,reject:!1});if(t.stdout){let n=Jf(t.stdout);At=Kf(n,s),process.env.CLI_DEBUG==="1"&&p.debug("SHELL","Loaded shell environment (sync fallback), PATH length:",{pathLength:At.PATH?.length});}else At=s;}catch(e){p.warn("SHELL","Failed to load shell environment",{error:e}),At=s;}return At}var At,Ed=Qe(()=>{Z();At=null;});function v0(){let s=process.platform;if(s==="darwin")return he__default.join(gi__default.homedir(),"Library","Application Support","Neox");if(s==="win32")return he__default.join(process.env.APPDATA||he__default.join(gi__default.homedir(),"AppData","Roaming"),"Neox");{let e=process.env.XDG_CONFIG_HOME||he__default.join(gi__default.homedir(),".config");return he__default.join(e,"neox")}}var Xf,Rd,Yf,Dd,on,ul=Qe(()=>{Z();Xf=v0(),Rd=he__default.join(Xf,"token-usage.json"),Yf=3e3,Dd=class{stats=null;directoriesReady;saveDebounceTimer=null;constructor(){this.directoriesReady=this.ensureDirectories();}async ensureDirectories(){await Se__default.mkdir(Xf,{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 Se__default.readFile(Rd,"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=`${Rd}.${Date.now()}.tmp`;await Se__default.writeFile(e,JSON.stringify(this.stats,null,2),"utf-8"),await Se__default.rename(e,Rd),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>Yf&&(t.records=t.records.slice(-Yf)),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 r=t.providers[e.provider];r.totalRequests++,e.success?r.successRequests++:r.failedRequests++,r.totalInputTokens+=e.inputTokens,r.totalOutputTokens+=e.outputTokens,r.totalTokens+=e.totalTokens,r.totalCachedTokens+=e.cachedTokens||0,r.totalOpenaiCachedTokens+=e.openaiCachedTokens||0,r.totalAnthropicCacheReadTokens+=e.anthropicCacheReadTokens||0,r.totalAnthropicCacheCreationTokens+=e.anthropicCacheCreationTokens||0,r.totalAnthropicCacheCreation5mTokens+=e.anthropicCacheCreation5mTokens||0,r.totalAnthropicCacheCreation1hTokens+=e.anthropicCacheCreation1hTokens||0,r.lastRequestTime=e.timestamp;let o=r.avgDuration*(r.totalRequests-1)+e.duration;r.avgDuration=Math.round(o/r.totalRequests),r.models[e.model]||(r.models[e.model]={requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cachedTokens:0});let i=r.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(r=>r.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),r=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:r,totalOpenaiCachedTokens:o,totalAnthropicCacheReadTokens:i,totalAnthropicCacheCreationTokens:t.reduce((a,l)=>a+l.totalAnthropicCacheCreationTokens,0),cacheHitRate:n>0?r/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});}},on=new Dd;});function R(s){process.stdout.write(s+`
35
- `);}var yn=Qe(()=>{});function H_(){if(Fs)return Fs;try{let s=[join(Qd,"../package.json"),join(Qd,"../../package.json"),join(Qd,"../../../package.json")];for(let e of s)try{let t=JSON.parse(readFileSync(e,"utf-8"));if(t.version)return Fs=t.version,Fs}catch{continue}throw new Error("package.json not found")}catch{Fs="2.0.9";}return Fs}var W_,Qd,Fs,Cl,Zd=Qe(()=>{W_=fileURLToPath(import.meta.url),Qd=dirname(W_),Fs=null;Cl=H_();});var Z_,eI,tI,nI,rI,sI,oI,np,Dt,br=Qe(()=>{Z_={"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}}},eI={"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"}},tI={"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"}},nI={"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"}},rI={"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"}},sI={"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"}},oI={"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"}},np=class{models=new Map;constructor(){this.registerModels(Z_),this.registerModels(eI),this.registerModels(tI),this.registerModels(nI),this.registerModels(rI),this.registerModels(sI),this.registerModels(oI);}registerModels(e){for(let[t,n]of Object.entries(e))if(this.models.set(t,n),n.aliases)for(let r of n.aliases)this.models.set(r,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}},Dt=new np;});var Mi,yc,wr,Xt,bc,MA,nr,x,Gt=Qe(()=>{Zd();Mi=Cl,yc=["/help","/exit","/quit","/mode","/mode ask","/mode agent","/collab","/collab single","/collab collab","/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"],wr={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"},Xt={openai:"OpenAI (Chat)","openai-responses":"OpenAI (Responses)",anthropic:"Anthropic","anthropic-openai":"Anthropic (OpenAI Format)",doubao:"\u8C46\u5305 (Doubao)",gemini:"Google Gemini",kimi:"Kimi (Moonshot)"},bc={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp"},MA=()=>{let s=process.env.COLORFGBG;if(s){let t=s.split(";");if(t.length>1){let n=parseInt(t[1]);return n<8||isNaN(n)}}process.env.TERM_PROGRAM;return true},nr=MA(),x={primary:s=>nr?Ie.cyan(s):Ie.blue(s),success:s=>nr?Ie.green(s):Ie.green(s),error:s=>nr?Ie.red(s):Ie.red(s),warning:s=>nr?Ie.yellow(s):Ie.yellow(s),info:s=>nr?Ie.blueBright(s):Ie.blue(s),dim:s=>nr?Ie.gray(s):Ie.gray(s),highlight:s=>nr?Ie.white.bold(s):Ie.black.bold(s),code:s=>nr?Ie.magenta(s):Ie.magenta(s),text:s=>nr?Ie.white(s):Ie.black(s)};});function vc(s){let t=Date.now()-s.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),o=Math.floor(t/864e5);return n<1?"just now":n<60?`${n}m ago`:r<24?`${r}h ago`:o===1?"yesterday":`${o} days ago`}function ev(s){return s<1e3?`${s}ms`:s<6e4?`${(s/1e3).toFixed(1)}s`:s<36e5?`${Math.floor(s/6e4)}m ${Math.floor(s%6e4/1e3)}s`:`${Math.floor(s/36e5)}h ${Math.floor(s%36e5/6e4)}m`}function Pi(s){return !s||s.length===0?"":` [${s.join(", ")}]`}function tv(s){if(!s||Object.keys(s).length===0)return "";let e=Object.entries(s);if(e.length===0)return "";let t=e.slice(0,2).map(([r,o])=>{let i=String(o);return i.length>30&&(i=i.substring(0,27)+"..."),`${r}=${i}`}),n=e.length>2?`, +${e.length-2}`:"";return Ie.dim(` (${t.join(", ")}${n})`)}var nv=Qe(()=>{});function rv(s,e){let t=e.trim();if(!t.startsWith("/"))return [];let n=/\s$/.test(e),r=t.split(/\s+/);if(r.length===0)return [];let o=r[0],i=r.slice(1),a=s.providerStore.getProviders().map(g=>g.id),l=s.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=yc.filter(h=>h.startsWith(t)&&h!==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(v=>`${f}${v}`)}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],v=s.providerStore.getProvider(f);if(v){let C=m();return (v.models||[]).map(T=>`${C}${T.name}`)}if(l.length===0)return [];let b=h.length===1?`${t} `:m();return l.map(C=>`${b}${C}`)}case "remove":case "delete":case "default":{if(l.length===0)return [];let f=h.length===0?`${t} `:m();return l.map(v=>`${f}${v}`)}default:return []}}default:return []}}var sv=Qe(()=>{Gt();});function RA(s){let e=s.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 ov(s){if(!s)return "";let e=[],t=[],n=[];if((s.pattern||s.query)&&e.push(s.pattern||s.query),Array.isArray(s.keywords)&&e.push(...s.keywords),Array.isArray(s.queries))for(let o of s.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 r=[];return e.length>0&&r.push(e.join(" OR ")),t.length>0&&r.push(`AND ${t.join(" + ")}`),n.length>0&&r.push(`NOT ${n.join(" + ")}`),r.join(" ")}function kr(s,e,t,n){if(!s)return;console.error(`[DEBUG] handleToolCallStart: toolName="${e}", sourceLabel="${n}", argsKeys=${JSON.stringify(Object.keys(t))}`);let r=e.toLowerCase();if(r==="web_search"||r.includes("websearch")){s.addWebSearchResult({query:t.query||t.q||"",status:"searching",sourceLabel:n});return}if(r==="web_fetch"||r.includes("webfetch")){s.addWebFetchResult({url:t.url||"",status:"fetching",sourceLabel:n});return}if(r==="readfile"||r==="read"){s.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(r==="search"||r==="grep"){let o=ov(t)||t.pattern||t.query||"",i=t.mode||"content",a=Array.isArray(t.keywords)?false:Array.isArray(t.queries)?t.queries.some(c=>c?.regex!==false):true,l=t.path||t.file_path||".";i==="files"?s.addSearchFilesResult({pattern:o,path:l,status:"searching",sourceLabel:n}):s.addSearchResult({pattern:o,filePath:l,contextLines:t.context_lines,mode:i,regex:a,caseInsensitive:t.case_insensitive,status:"searching",sourceLabel:n});return}if(r==="search_files"||r==="glob"){s.addSearchFilesResult({pattern:t.pattern||"",path:t.path,status:"searching",sourceLabel:n});return}if(r==="show_tree"||r==="list_directory"||r==="smart_tree"){s.addShowTreeResult({path:t.directory||t.path||".",maxDepth:t.max_depth,mode:t.mode,status:"loading",sourceLabel:n});return}if(r==="execute_bash"||r==="execute_shell"||r==="bash"){s.addCommandExecResult({command:t.command||t.code||"",cwd:t.cwd,timeout:t.timeout,background:t.run_in_background,status:"running",sourceLabel:n});return}if(r==="execute_python"||r==="execute_js"||r==="execute_javascript"){s.addCodeExecResult({toolName:e,code:t.code,cwd:t.cwd,status:"running",sourceLabel:n});return}if(r==="debug_in_browser"){s.addBrowserDebugResult({url:t.url||"auto",status:"detecting",sourceLabel:n});return}if(r==="write_file"||r==="write"){let o=t.file_path||t.path||"",i=t.content||"";s.addWriteFileCall(o,i,n);return}if(r==="edit_file"||r==="edit"){let o=t.file_path||t.path||"",i=t.old_string||t.old||"",a=t.new_string||t.new||"",l=t.start_line;s.addEditFileCall(o,i,a,l,n);return}s.addToolCall(e,t);}function On(s,e,t,n,r,o){if(!s)return;let i=e.toLowerCase();if(i==="edit_file"||i==="edit"){try{let a=JSON.parse(t);a.status==="success"?s.addEditFileResult({filePath:a.file_path||r?.file_path||"",status:"completed",summary:a.summary||"Edit completed successfully",replacements:a.metadata?.replacements||1,sourceLabel:o}):a.status==="already_done"?s.addEditFileResult({filePath:a.file_path||r?.file_path||"",status:"completed",summary:a.summary||"Edit already applied",alreadyDone:!0,sourceLabel:o}):s.addEditFileResult({filePath:a.file_path||r?.file_path||"",status:"error",error:a.summary||a.error||"Edit failed",sourceLabel:o});}catch{n?s.addEditFileResult({filePath:r?.file_path||"",status:"completed",summary:"Edit completed",sourceLabel:o}):s.addEditFileResult({filePath:r?.file_path||"",status:"error",error:t,sourceLabel:o});}return}if(i==="web_search"||i.includes("websearch")){if(n)try{let a=DA(t);s.addWebSearchResult({query:r?.query||r?.q||"",results:a,status:"completed",sourceLabel:o});}catch{s.addWebSearchResult({query:r?.query||r?.q||"",status:"completed",sourceLabel:o});}else s.addWebSearchResult({query:r?.query||"",status:"error",error:t,sourceLabel:o});return}if(i==="web_fetch"||i.includes("webfetch")){n?s.addWebFetchResult({url:r?.url||"",contentLength:t.length,contentPreview:t.slice(0,500),status:"completed",sourceLabel:o}):s.addWebFetchResult({url:r?.url||"",status:"error",error:t,sourceLabel:o});return}if(i==="readfile"||i==="read"){if(n){let a=t.split(`
36
- `);s.addReadFileResult({filePath:r?.path||r?.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 s.addReadFileResult({filePath:r?.path||r?.file_path||"",status:"error",error:t,sourceLabel:o});return}if(i==="search"){let a=RA(t),l=a?.content&&typeof a.content=="string"?a.content:t,c=a?.metadata,u=r?.mode==="files"||c?.mode==="files",d=ov(r)||r?.pattern||r?.query||"",m=c?.mode||r?.mode||(u?"files":"content"),g=c?.regex??(Array.isArray(r?.keywords)?false:Array.isArray(r?.queries)?r.queries.some(b=>b?.regex!==false):true),h=r?.case_insensitive,f=r?.path||r?.file_path||c?.path||"",v=c?.command;if(n)if(u){let b=c?.files||l.split(`
37
- `).filter(C=>C.trim().startsWith(" ")).map(C=>C.trim());s.addSearchFilesResult({pattern:d,path:f,fileCount:b.length,files:b.slice(0,30),status:"completed",mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o});}else {let b=NA(l),C=LA(l),T=C.entries.length>0?OA(C.entries):void 0;s.addSearchResult({pattern:d,filePath:f,matchCount:C.matchCount??b.length,details:T,status:"completed",mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o});}else u?s.addSearchFilesResult({pattern:d,path:f,status:"error",error:l,mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o}):s.addSearchResult({pattern:d,filePath:f,status:"error",error:l,mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o});return}if(i==="search_files"||i==="glob"){if(n){let a=t.split(`
38
- `).filter(l=>l.trim());s.addSearchFilesResult({pattern:r?.pattern||"",path:r?.path,fileCount:a.length,files:a.slice(0,30),status:"completed",sourceLabel:o});}else s.addSearchFilesResult({pattern:r?.pattern||"",status:"error",error:t,sourceLabel:o});return}if(i==="show_tree"||i==="list_directory"||i==="smart_tree"){n?s.addShowTreeResult({path:r?.directory||r?.path||".",mode:r?.mode,maxDepth:r?.max_depth,content:t,totalChars:t.length,status:"completed",sourceLabel:o}):s.addShowTreeResult({path:r?.directory||r?.path||".",mode:r?.mode,maxDepth:r?.max_depth,status:"error",error:t,sourceLabel:o});return}if(i==="execute_bash"||i==="execute_shell"||i==="bash"){n?s.addCommandExecResult({command:r?.command||r?.code||"",cwd:r?.cwd,output:t,exitCode:0,status:"completed",sourceLabel:o}):s.addCommandExecResult({command:r?.command||r?.code||"",cwd:r?.cwd,output:t,status:"error",error:t,sourceLabel:o});return}if(i==="execute_python"||i==="execute_js"||i==="execute_javascript"){n?s.addCodeExecResult({toolName:e,code:r?.code,output:t,exitCode:0,status:"completed",sourceLabel:o}):s.addCodeExecResult({toolName:e,code:r?.code,status:"error",error:t,sourceLabel:o});return}if(i==="debug_in_browser"){if(n)try{let a=JSON.parse(t);s.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{s.addToolResult(t,false);}else s.addBrowserDebugResult({url:"unknown",status:"error",error:t,sourceLabel:o});return}n?s.addToolResult(t,false):s.addToolError(e,t);}function DA(s){let e=[];try{let r=JSON.parse(s);if(Array.isArray(r))return r.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=s.split(`
39
- `),n={};for(let r of t){let o=r.match(/^(?:[]\s*)?\d+\.\s*(.+)$/);if(o){n.title&&n.url&&e.push(n),n={title:o[1].trim()};continue}let i=r.match(/^🔗\s*(.+)$/)||r.match(/^https?:\/\/\S+/);if(i&&n.title){let l=i[1]||i[0];n.url=l.trim();try{n.hostname=new URL(n.url).hostname;}catch{n.hostname=n.url;}continue}let a=r.match(/^[.]\s*(.+)$/);a&&n.title&&(n.description=a[1].trim());}return n.title&&n.url&&e.push(n),e}function NA(s){let e=[],t=s.split(`
40
- `);for(let n of t){let r=n.match(/^([▶▸► ])\s*(\d+)\s*│\s*(.*)$/);if(r){e.push({lineNumber:parseInt(r[2],10),content:r[3],isMatch:r[1]!==" "});continue}let o=n.match(/^[^:]+:(\d+):(.*)$/);o&&e.push({lineNumber:parseInt(o[1],10),content:o[2],isMatch:true});}return e}function LA(s){let e=s.split(`
41
- `),t={entries:[]};for(let n of e){let r=n.match(/^文件:\s*(\d+)\s+已搜索,\s*(\d+)\s+有匹配/);if(r){t.filesSearched=parseInt(r[1],10),t.filesWithMatches=parseInt(r[2],10);continue}let o=n.match(/^匹配:\s*(\d+)/);if(o){t.matchCount=parseInt(o[1],10);continue}let i=n.match(/^▸\s*\[([^\]]+)\]\s+(.+)\s+\((\d+)\s*处\)/);if(i){t.entries.push({module:i[1].trim(),path:i[2].trim(),count:parseInt(i[3],10)});continue}let a=n.match(/^\s*\[([^\]]+)\]\s+(.+?):\s*(\d+)/);a&&t.entries.push({module:a[1].trim(),path:a[2].trim(),count:parseInt(a[3],10)});}return t}function OA(s){let e=[];for(let n=0;n<s.length;n++){if(e.length>=20){e.push(`... +${s.length-e.length} more files`);break}let r=s[n],o=r.module?`[${r.module}] ${r.path} (${r.count} \u5904)`:`${r.path} (${r.count} \u5904)`;e.push(o);}return e.join(`
42
- `)}var um=Qe(()=>{});function iv(s){let e=0;for(let t of s){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)}function BA(s){let e=s.trim();if(!e.startsWith("{")||!e.endsWith("}"))return null;try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t.type;return typeof n!="string"||!$A.has(n)?null:t}catch{return null}}function FA(s){let e=[];if(typeof s.summary=="string"&&s.summary.trim()&&e.push(s.summary.trim()),typeof s.file_path=="string"&&s.file_path.trim()&&e.push(`Path: ${s.file_path}`),typeof s.verify_hint=="string"&&s.verify_hint.trim()&&e.push(`Verify: ${s.verify_hint}`),s.status==="error"){let t=typeof s.error=="string"?s.error.trim():"";t&&(e.length===0||!e[0].includes(t))&&e.push(`Error: ${t}`);}return e.length?e.join(`
43
- `):void 0}function UA(s,e,t){let n=typeof e=="string"&&e.trim()?e.trim():void 0;if(!s||typeof s!="string")return n;let r=BA(s);if(r)return FA(r)||n;let o=t?`${s}
35
+ `);}var yn=Qe(()=>{});function z_(){if(Fs)return Fs;try{let s=[join(Qd,"../package.json"),join(Qd,"../../package.json"),join(Qd,"../../../package.json")];for(let e of s)try{let t=JSON.parse(readFileSync(e,"utf-8"));if(t.version)return Fs=t.version,Fs}catch{continue}throw new Error("package.json not found")}catch{Fs="2.0.9";}return Fs}var H_,Qd,Fs,Cl,Zd=Qe(()=>{H_=fileURLToPath(import.meta.url),Qd=dirname(H_),Fs=null;Cl=z_();});var eI,tI,nI,rI,sI,oI,iI,np,Dt,br=Qe(()=>{eI={"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}}},tI={"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"}},nI={"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"}},rI={"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"}},sI={"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"}},oI={"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"}},iI={"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"}},np=class{models=new Map;constructor(){this.registerModels(eI),this.registerModels(tI),this.registerModels(nI),this.registerModels(rI),this.registerModels(sI),this.registerModels(oI),this.registerModels(iI);}registerModels(e){for(let[t,n]of Object.entries(e))if(this.models.set(t,n),n.aliases)for(let r of n.aliases)this.models.set(r,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}},Dt=new np;});var Mi,yc,wr,Xt,bc,PA,nr,x,Gt=Qe(()=>{Zd();Mi=Cl,yc=["/help","/exit","/quit","/mode","/mode ask","/mode agent","/collab","/collab single","/collab collab","/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"],wr={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"},Xt={openai:"OpenAI (Chat)","openai-responses":"OpenAI (Responses)",anthropic:"Anthropic","anthropic-openai":"Anthropic (OpenAI Format)",doubao:"\u8C46\u5305 (Doubao)",gemini:"Google Gemini",kimi:"Kimi (Moonshot)"},bc={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".webp":"image/webp"},PA=()=>{let s=process.env.COLORFGBG;if(s){let t=s.split(";");if(t.length>1){let n=parseInt(t[1]);return n<8||isNaN(n)}}process.env.TERM_PROGRAM;return true},nr=PA(),x={primary:s=>nr?Ie.cyan(s):Ie.blue(s),success:s=>nr?Ie.green(s):Ie.green(s),error:s=>nr?Ie.red(s):Ie.red(s),warning:s=>nr?Ie.yellow(s):Ie.yellow(s),info:s=>nr?Ie.blueBright(s):Ie.blue(s),dim:s=>nr?Ie.gray(s):Ie.gray(s),highlight:s=>nr?Ie.white.bold(s):Ie.black.bold(s),code:s=>nr?Ie.magenta(s):Ie.magenta(s),text:s=>nr?Ie.white(s):Ie.black(s)};});function vc(s){let t=Date.now()-s.getTime(),n=Math.floor(t/6e4),r=Math.floor(t/36e5),o=Math.floor(t/864e5);return n<1?"just now":n<60?`${n}m ago`:r<24?`${r}h ago`:o===1?"yesterday":`${o} days ago`}function ev(s){return s<1e3?`${s}ms`:s<6e4?`${(s/1e3).toFixed(1)}s`:s<36e5?`${Math.floor(s/6e4)}m ${Math.floor(s%6e4/1e3)}s`:`${Math.floor(s/36e5)}h ${Math.floor(s%36e5/6e4)}m`}function Pi(s){return !s||s.length===0?"":` [${s.join(", ")}]`}function tv(s){if(!s||Object.keys(s).length===0)return "";let e=Object.entries(s);if(e.length===0)return "";let t=e.slice(0,2).map(([r,o])=>{let i=String(o);return i.length>30&&(i=i.substring(0,27)+"..."),`${r}=${i}`}),n=e.length>2?`, +${e.length-2}`:"";return Ie.dim(` (${t.join(", ")}${n})`)}var nv=Qe(()=>{});function rv(s,e){let t=e.trim();if(!t.startsWith("/"))return [];let n=/\s$/.test(e),r=t.split(/\s+/);if(r.length===0)return [];let o=r[0],i=r.slice(1),a=s.providerStore.getProviders().map(g=>g.id),l=s.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=yc.filter(h=>h.startsWith(t)&&h!==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(v=>`${f}${v}`)}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],v=s.providerStore.getProvider(f);if(v){let C=m();return (v.models||[]).map(T=>`${C}${T.name}`)}if(l.length===0)return [];let b=h.length===1?`${t} `:m();return l.map(C=>`${b}${C}`)}case "remove":case "delete":case "default":{if(l.length===0)return [];let f=h.length===0?`${t} `:m();return l.map(v=>`${f}${v}`)}default:return []}}default:return []}}var sv=Qe(()=>{Gt();});function DA(s){let e=s.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 ov(s){if(!s)return "";let e=[],t=[],n=[];if((s.pattern||s.query)&&e.push(s.pattern||s.query),Array.isArray(s.keywords)&&e.push(...s.keywords),Array.isArray(s.queries))for(let o of s.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 r=[];return e.length>0&&r.push(e.join(" OR ")),t.length>0&&r.push(`AND ${t.join(" + ")}`),n.length>0&&r.push(`NOT ${n.join(" + ")}`),r.join(" ")}function kr(s,e,t,n){if(!s)return;console.error(`[DEBUG] handleToolCallStart: toolName="${e}", sourceLabel="${n}", argsKeys=${JSON.stringify(Object.keys(t))}`);let r=e.toLowerCase();if(r==="web_search"||r.includes("websearch")){s.addWebSearchResult({query:t.query||t.q||"",status:"searching",sourceLabel:n});return}if(r==="web_fetch"||r.includes("webfetch")){s.addWebFetchResult({url:t.url||"",status:"fetching",sourceLabel:n});return}if(r==="readfile"||r==="read"){s.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(r==="search"||r==="grep"){let o=ov(t)||t.pattern||t.query||"",i=t.mode||"content",a=Array.isArray(t.keywords)?false:Array.isArray(t.queries)?t.queries.some(c=>c?.regex!==false):true,l=t.path||t.file_path||".";i==="files"?s.addSearchFilesResult({pattern:o,path:l,status:"searching",sourceLabel:n}):s.addSearchResult({pattern:o,filePath:l,contextLines:t.context_lines,mode:i,regex:a,caseInsensitive:t.case_insensitive,status:"searching",sourceLabel:n});return}if(r==="search_files"||r==="glob"){s.addSearchFilesResult({pattern:t.pattern||"",path:t.path,status:"searching",sourceLabel:n});return}if(r==="show_tree"||r==="list_directory"||r==="smart_tree"){s.addShowTreeResult({path:t.directory||t.path||".",maxDepth:t.max_depth,mode:t.mode,status:"loading",sourceLabel:n});return}if(r==="execute_bash"||r==="execute_shell"||r==="bash"){s.addCommandExecResult({command:t.command||t.code||"",cwd:t.cwd,timeout:t.timeout,background:t.run_in_background,status:"running",sourceLabel:n});return}if(r==="execute_python"||r==="execute_js"||r==="execute_javascript"){s.addCodeExecResult({toolName:e,code:t.code,cwd:t.cwd,status:"running",sourceLabel:n});return}if(r==="debug_in_browser"){s.addBrowserDebugResult({url:t.url||"auto",status:"detecting",sourceLabel:n});return}if(r==="write_file"||r==="write"){let o=t.file_path||t.path||"",i=t.content||"";s.addWriteFileCall(o,i,n);return}if(r==="edit_file"||r==="edit"){let o=t.file_path||t.path||"",i=t.old_string||t.old||"",a=t.new_string||t.new||"",l=t.start_line;s.addEditFileCall(o,i,a,l,n);return}s.addToolCall(e,t);}function On(s,e,t,n,r,o){if(!s)return;let i=e.toLowerCase();if(i==="edit_file"||i==="edit"){try{let a=JSON.parse(t);a.status==="success"?s.addEditFileResult({filePath:a.file_path||r?.file_path||"",status:"completed",summary:a.summary||"Edit completed successfully",replacements:a.metadata?.replacements||1,sourceLabel:o}):a.status==="already_done"?s.addEditFileResult({filePath:a.file_path||r?.file_path||"",status:"completed",summary:a.summary||"Edit already applied",alreadyDone:!0,sourceLabel:o}):s.addEditFileResult({filePath:a.file_path||r?.file_path||"",status:"error",error:a.summary||a.error||"Edit failed",sourceLabel:o});}catch{n?s.addEditFileResult({filePath:r?.file_path||"",status:"completed",summary:"Edit completed",sourceLabel:o}):s.addEditFileResult({filePath:r?.file_path||"",status:"error",error:t,sourceLabel:o});}return}if(i==="web_search"||i.includes("websearch")){if(n)try{let a=NA(t);s.addWebSearchResult({query:r?.query||r?.q||"",results:a,status:"completed",sourceLabel:o});}catch{s.addWebSearchResult({query:r?.query||r?.q||"",status:"completed",sourceLabel:o});}else s.addWebSearchResult({query:r?.query||"",status:"error",error:t,sourceLabel:o});return}if(i==="web_fetch"||i.includes("webfetch")){n?s.addWebFetchResult({url:r?.url||"",contentLength:t.length,contentPreview:t.slice(0,500),status:"completed",sourceLabel:o}):s.addWebFetchResult({url:r?.url||"",status:"error",error:t,sourceLabel:o});return}if(i==="readfile"||i==="read"){if(n){let a=t.split(`
36
+ `);s.addReadFileResult({filePath:r?.path||r?.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 s.addReadFileResult({filePath:r?.path||r?.file_path||"",status:"error",error:t,sourceLabel:o});return}if(i==="search"){let a=DA(t),l=a?.content&&typeof a.content=="string"?a.content:t,c=a?.metadata,u=r?.mode==="files"||c?.mode==="files",d=ov(r)||r?.pattern||r?.query||"",m=c?.mode||r?.mode||(u?"files":"content"),g=c?.regex??(Array.isArray(r?.keywords)?false:Array.isArray(r?.queries)?r.queries.some(b=>b?.regex!==false):true),h=r?.case_insensitive,f=r?.path||r?.file_path||c?.path||"",v=c?.command;if(n)if(u){let b=c?.files||l.split(`
37
+ `).filter(C=>C.trim().startsWith(" ")).map(C=>C.trim());s.addSearchFilesResult({pattern:d,path:f,fileCount:b.length,files:b.slice(0,30),status:"completed",mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o});}else {let b=LA(l),C=OA(l),T=C.entries.length>0?$A(C.entries):void 0;s.addSearchResult({pattern:d,filePath:f,matchCount:C.matchCount??b.length,details:T,status:"completed",mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o});}else u?s.addSearchFilesResult({pattern:d,path:f,status:"error",error:l,mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o}):s.addSearchResult({pattern:d,filePath:f,status:"error",error:l,mode:m,strategy:c?.strategy,regex:g,caseInsensitive:h,command:v,sourceLabel:o});return}if(i==="search_files"||i==="glob"){if(n){let a=t.split(`
38
+ `).filter(l=>l.trim());s.addSearchFilesResult({pattern:r?.pattern||"",path:r?.path,fileCount:a.length,files:a.slice(0,30),status:"completed",sourceLabel:o});}else s.addSearchFilesResult({pattern:r?.pattern||"",status:"error",error:t,sourceLabel:o});return}if(i==="show_tree"||i==="list_directory"||i==="smart_tree"){n?s.addShowTreeResult({path:r?.directory||r?.path||".",mode:r?.mode,maxDepth:r?.max_depth,content:t,totalChars:t.length,status:"completed",sourceLabel:o}):s.addShowTreeResult({path:r?.directory||r?.path||".",mode:r?.mode,maxDepth:r?.max_depth,status:"error",error:t,sourceLabel:o});return}if(i==="execute_bash"||i==="execute_shell"||i==="bash"){n?s.addCommandExecResult({command:r?.command||r?.code||"",cwd:r?.cwd,output:t,exitCode:0,status:"completed",sourceLabel:o}):s.addCommandExecResult({command:r?.command||r?.code||"",cwd:r?.cwd,output:t,status:"error",error:t,sourceLabel:o});return}if(i==="execute_python"||i==="execute_js"||i==="execute_javascript"){n?s.addCodeExecResult({toolName:e,code:r?.code,output:t,exitCode:0,status:"completed",sourceLabel:o}):s.addCodeExecResult({toolName:e,code:r?.code,status:"error",error:t,sourceLabel:o});return}if(i==="debug_in_browser"){if(n)try{let a=JSON.parse(t);s.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{s.addToolResult(t,false);}else s.addBrowserDebugResult({url:"unknown",status:"error",error:t,sourceLabel:o});return}n?s.addToolResult(t,false):s.addToolError(e,t);}function NA(s){let e=[];try{let r=JSON.parse(s);if(Array.isArray(r))return r.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=s.split(`
39
+ `),n={};for(let r of t){let o=r.match(/^(?:[]\s*)?\d+\.\s*(.+)$/);if(o){n.title&&n.url&&e.push(n),n={title:o[1].trim()};continue}let i=r.match(/^🔗\s*(.+)$/)||r.match(/^https?:\/\/\S+/);if(i&&n.title){let l=i[1]||i[0];n.url=l.trim();try{n.hostname=new URL(n.url).hostname;}catch{n.hostname=n.url;}continue}let a=r.match(/^[.]\s*(.+)$/);a&&n.title&&(n.description=a[1].trim());}return n.title&&n.url&&e.push(n),e}function LA(s){let e=[],t=s.split(`
40
+ `);for(let n of t){let r=n.match(/^([▶▸► ])\s*(\d+)\s*│\s*(.*)$/);if(r){e.push({lineNumber:parseInt(r[2],10),content:r[3],isMatch:r[1]!==" "});continue}let o=n.match(/^[^:]+:(\d+):(.*)$/);o&&e.push({lineNumber:parseInt(o[1],10),content:o[2],isMatch:true});}return e}function OA(s){let e=s.split(`
41
+ `),t={entries:[]};for(let n of e){let r=n.match(/^文件:\s*(\d+)\s+已搜索,\s*(\d+)\s+有匹配/);if(r){t.filesSearched=parseInt(r[1],10),t.filesWithMatches=parseInt(r[2],10);continue}let o=n.match(/^匹配:\s*(\d+)/);if(o){t.matchCount=parseInt(o[1],10);continue}let i=n.match(/^▸\s*\[([^\]]+)\]\s+(.+)\s+\((\d+)\s*处\)/);if(i){t.entries.push({module:i[1].trim(),path:i[2].trim(),count:parseInt(i[3],10)});continue}let a=n.match(/^\s*\[([^\]]+)\]\s+(.+?):\s*(\d+)/);a&&t.entries.push({module:a[1].trim(),path:a[2].trim(),count:parseInt(a[3],10)});}return t}function $A(s){let e=[];for(let n=0;n<s.length;n++){if(e.length>=20){e.push(`... +${s.length-e.length} more files`);break}let r=s[n],o=r.module?`[${r.module}] ${r.path} (${r.count} \u5904)`:`${r.path} (${r.count} \u5904)`;e.push(o);}return e.join(`
42
+ `)}var um=Qe(()=>{});function iv(s){let e=0;for(let t of s){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)}function FA(s){let e=s.trim();if(!e.startsWith("{")||!e.endsWith("}"))return null;try{let t=JSON.parse(e);if(!t||typeof t!="object")return null;let n=t.type;return typeof n!="string"||!BA.has(n)?null:t}catch{return null}}function UA(s){let e=[];if(typeof s.summary=="string"&&s.summary.trim()&&e.push(s.summary.trim()),typeof s.file_path=="string"&&s.file_path.trim()&&e.push(`Path: ${s.file_path}`),typeof s.verify_hint=="string"&&s.verify_hint.trim()&&e.push(`Verify: ${s.verify_hint}`),s.status==="error"){let t=typeof s.error=="string"?s.error.trim():"";t&&(e.length===0||!e[0].includes(t))&&e.push(`Error: ${t}`);}return e.length?e.join(`
43
+ `):void 0}function jA(s,e,t){let n=typeof e=="string"&&e.trim()?e.trim():void 0;if(!s||typeof s!="string")return n;let r=FA(s);if(r)return UA(r)||n;let o=t?`${s}
44
44
  ...(truncated)`:s;return n?`${n}
45
45
 
46
- ${o}`:o}function dm(s){let e=false;return t=>{if(process.env.CLI_DEBUG==="1"&&p.debug("EVENT",`Received event: type=${t.type}`),!s.uiController){process.env.CLI_DEBUG==="1"&&p.debug("EVENT"," -> SKIPPED: no uiController!");return}switch(process.env.CLI_DEBUG==="1"&&(t.type==="log"?p.debug("EVENT",` log message: "${t.message?.substring(0,50)}..."`):t.type==="text"&&p.debug("EVENT",` text delta: "${t.delta?.substring(0,30)}..."`)),t.type){case "status":if(t.message.includes(" lines)...")){let n=Date.now(),r=s._lastStatusTime||0;if(n-r<100)break;s._lastStatusTime=n;}s.uiController.updateStatus(t.message,t.status);break;case "log":t.level==="error"?p.error("AGENT",t.message,t.detail?{detail:t.detail}:void 0):t.level==="warn"?p.warn("AGENT",t.message,t.detail?{detail:t.detail}:void 0):p.info("AGENT",t.message,t.detail?{detail:t.detail}:void 0),s.uiController.addInfo(t.message,t.detail);break;case "compacting":p.info("AGENT",`[Compacting] ${t.message}`,t.detail?{detail:t.detail}:void 0),s.uiController.addCompacting(t.message,t.detail);break;case "thinking":e=false;break;case "reasoning":if(s.uiController.addReasoningDelta(t.delta),s.setStreamingTokenCount&&s.getStreamingTokenCount&&t.delta){let n=s.getStreamingTokenCount(),r=iv(t.delta);s.setStreamingTokenCount(n+r),s.uiController.updateTaskTokens(n+r);}break;case "reasoning_complete":s.uiController.completeReasoningStreaming();break;case "text":if(process.env.CLI_DEBUG==="1"&&p.debug("EVENT",` text delta received: "${t.delta?.substring(0,50)}..." (len=${t.delta?.length})`),s.uiController.addTextDelta(t.delta),s.setStreamingTokenCount&&s.getStreamingTokenCount&&t.delta){let n=s.getStreamingTokenCount(),r=iv(t.delta);s.setStreamingTokenCount(n+r),s.uiController.updateTaskTokens(n+r);}break;case "text_complete":process.env.CLI_DEBUG==="1"&&p.debug("EVENT"," text_complete received"),s.uiController.completeReasoningStreaming(),s.uiController.completeTextStreaming();break;case "tool_call_start":{s.uiController.completeTextStreaming(),s.uiController.completeReasoningStreaming(),s.currentStreamingTool={name:t.name,totalChars:0};let n=t.toolId||`${t.name}_${Math.floor(Date.now())}_${Math.random().toString(36).slice(2,7)}`;s.toolIdToName.set(n,t.name),s.toolIdToArgs&&s.toolIdToArgs.set(n,t.args||{}),s.lastToolCallArgs.set(t.name,t.args||{}),GA(s.uiController,n,t.name,t.args||{},{targetPath:t.targetPath,description:t.description});break}case "tool_call_delta":process.env.CLI_DEBUG&&p.debug("EVENT",`tool_call_delta: ${t.name} +${t.argumentsDelta.length} chars`),(!s.currentStreamingTool||s.currentStreamingTool.name!==t.name)&&(s.currentStreamingTool={name:t.name,totalChars:0}),s.currentStreamingTool.totalChars+=t.argumentsDelta.length,s.uiController.updateStatus(`Streaming: ${t.name} (${s.currentStreamingTool.totalChars} chars)`,"tool_call");break;case "tool_call_end":{s.currentStreamingTool=void 0;let n=t.toolId,r=(t.name||"").toLowerCase(),i=r==="readfile"||r==="search"?t.summary:UA(typeof t.output=="string"?t.output:void 0,t.summary,t.outputTruncated);n&&s.uiController.getRunningToolLogId(n)&&s.uiController.completeToolCall(n,{success:t.success,duration:t.duration,resultLength:t.resultLength,outputTruncated:t.outputTruncated,summary:i,error:t.success?void 0:i||t.output||t.summary}),n&&s.toolIdToName.delete(n),s.uiController.updateStatus(t.success?`${t.name} \u2192 ${t.resultLength||0}B`:`${t.name}: Error`,t.success?"tool_result":"error");break}case "tool_output":{let n=t.toolId,r;if(n&&s.toolIdToArgs&&(r=s.toolIdToArgs.get(n)),!r){for(let[a,l]of s.toolIdToName.entries())if(l===t.name&&s.toolIdToArgs&&(r=s.toolIdToArgs.get(a),r))break}r||(r=s.lastToolCallArgs.get(t.name));let o=t.name.toLowerCase();if(av(o))On(s.uiController,t.name,t.output,t.success,r);else {let a;for(let[l,c]of s.toolIdToName.entries())if(c===t.name){a=l;break}a&&s.uiController.getRunningToolLogId(a)?s.uiController.updateToolCallOutput(a,t.output,{truncated:t.output.length>2e3}):On(s.uiController,t.name,t.output,t.success,r);}n&&s.toolIdToArgs&&s.toolIdToArgs.delete(n),s.lastToolCallArgs.delete(t.name);break}case "file_stream":if(t.isComplete)s.uiController.completeCodeGenerationPreview(t.filePath,t.content);else {let n=t.content.split(`
46
+ ${o}`:o}function dm(s){let e=false;return t=>{if(process.env.CLI_DEBUG==="1"&&p.debug("EVENT",`Received event: type=${t.type}`),!s.uiController){process.env.CLI_DEBUG==="1"&&p.debug("EVENT"," -> SKIPPED: no uiController!");return}switch(process.env.CLI_DEBUG==="1"&&(t.type==="log"?p.debug("EVENT",` log message: "${t.message?.substring(0,50)}..."`):t.type==="text"&&p.debug("EVENT",` text delta: "${t.delta?.substring(0,30)}..."`)),t.type){case "status":if(t.message.includes(" lines)...")){let n=Date.now(),r=s._lastStatusTime||0;if(n-r<100)break;s._lastStatusTime=n;}s.uiController.updateStatus(t.message,t.status);break;case "log":t.level==="error"?p.error("AGENT",t.message,t.detail?{detail:t.detail}:void 0):t.level==="warn"?p.warn("AGENT",t.message,t.detail?{detail:t.detail}:void 0):p.info("AGENT",t.message,t.detail?{detail:t.detail}:void 0),s.uiController.addInfo(t.message,t.detail);break;case "compacting":p.info("AGENT",`[Compacting] ${t.message}`,t.detail?{detail:t.detail}:void 0),s.uiController.addCompacting(t.message,t.detail);break;case "thinking":e=false;break;case "reasoning":if(s.uiController.addReasoningDelta(t.delta),s.setStreamingTokenCount&&s.getStreamingTokenCount&&t.delta){let n=s.getStreamingTokenCount(),r=iv(t.delta);s.setStreamingTokenCount(n+r),s.uiController.updateTaskTokens(n+r);}break;case "reasoning_complete":s.uiController.completeReasoningStreaming();break;case "text":if(process.env.CLI_DEBUG==="1"&&p.debug("EVENT",` text delta received: "${t.delta?.substring(0,50)}..." (len=${t.delta?.length})`),s.uiController.addTextDelta(t.delta),s.setStreamingTokenCount&&s.getStreamingTokenCount&&t.delta){let n=s.getStreamingTokenCount(),r=iv(t.delta);s.setStreamingTokenCount(n+r),s.uiController.updateTaskTokens(n+r);}break;case "text_complete":process.env.CLI_DEBUG==="1"&&p.debug("EVENT"," text_complete received"),s.uiController.completeReasoningStreaming(),s.uiController.completeTextStreaming();break;case "tool_call_start":{s.uiController.completeTextStreaming(),s.uiController.completeReasoningStreaming(),s.currentStreamingTool={name:t.name,totalChars:0};let n=t.toolId||`${t.name}_${Math.floor(Date.now())}_${Math.random().toString(36).slice(2,7)}`;s.toolIdToName.set(n,t.name),s.toolIdToArgs&&s.toolIdToArgs.set(n,t.args||{}),s.lastToolCallArgs.set(t.name,t.args||{}),WA(s.uiController,n,t.name,t.args||{},{targetPath:t.targetPath,description:t.description});break}case "tool_call_delta":process.env.CLI_DEBUG&&p.debug("EVENT",`tool_call_delta: ${t.name} +${t.argumentsDelta.length} chars`),(!s.currentStreamingTool||s.currentStreamingTool.name!==t.name)&&(s.currentStreamingTool={name:t.name,totalChars:0}),s.currentStreamingTool.totalChars+=t.argumentsDelta.length,s.uiController.updateStatus(`Streaming: ${t.name} (${s.currentStreamingTool.totalChars} chars)`,"tool_call");break;case "tool_call_end":{s.currentStreamingTool=void 0;let n=t.toolId,r=(t.name||"").toLowerCase(),i=r==="readfile"||r==="search"?t.summary:jA(typeof t.output=="string"?t.output:void 0,t.summary,t.outputTruncated);n&&s.uiController.getRunningToolLogId(n)&&s.uiController.completeToolCall(n,{success:t.success,duration:t.duration,resultLength:t.resultLength,outputTruncated:t.outputTruncated,summary:i,error:t.success?void 0:i||t.output||t.summary}),n&&s.toolIdToName.delete(n),s.uiController.updateStatus(t.success?`${t.name} \u2192 ${t.resultLength||0}B`:`${t.name}: Error`,t.success?"tool_result":"error");break}case "tool_output":{let n=t.toolId,r;if(n&&s.toolIdToArgs&&(r=s.toolIdToArgs.get(n)),!r){for(let[a,l]of s.toolIdToName.entries())if(l===t.name&&s.toolIdToArgs&&(r=s.toolIdToArgs.get(a),r))break}r||(r=s.lastToolCallArgs.get(t.name));let o=t.name.toLowerCase();if(av(o))On(s.uiController,t.name,t.output,t.success,r);else {let a;for(let[l,c]of s.toolIdToName.entries())if(c===t.name){a=l;break}a&&s.uiController.getRunningToolLogId(a)?s.uiController.updateToolCallOutput(a,t.output,{truncated:t.output.length>2e3}):On(s.uiController,t.name,t.output,t.success,r);}n&&s.toolIdToArgs&&s.toolIdToArgs.delete(n),s.lastToolCallArgs.delete(t.name);break}case "file_stream":if(t.isComplete)s.uiController.completeCodeGenerationPreview(t.filePath,t.content);else {let n=t.content.split(`
47
47
  `).length;s.uiController.updateStatus(`Generating ${t.filePath} (${n} lines)...`,"tool_call");}break;case "edit_file_stream":t.isComplete&&s.uiController.startEditFile(t.filePath,t.language||"",t.oldString,t.newString,t.startLine,t.description,t.hunks);break;case "write_file_stream":t.isComplete&&s.uiController.startWriteFile(t.filePath,t.language||"",t.content,t.description);break;case "token_usage":{let n={input:t.sessionPromptTokens,output:t.sessionCompletionTokens};s.setRuntimeTokens(n.input,n.output);let r=t.promptTokens+t.completionTokens;s.uiController?.updateTaskTokens(r,true),process.env.CLI_DEBUG&&p.debug("MAIN",`token_usage: sessionPrompt=${t.sessionPromptTokens}, sessionCompletion=${t.sessionCompletionTokens}`);let o={cachedTokens:t.cachedTokens,openaiCachedTokens:t.openaiCachedTokens,anthropicCacheReadTokens:t.anthropicCacheReadTokens,anthropicCacheCreationTokens:t.anthropicCacheCreationTokens},i={promptTokens:t.promptTokens,completionTokens:t.completionTokens,tokensUsed:t.totalTokens};if(s.pushTokenStats(n.input,n.output,i,o),s.provider&&s.model){Date.now()-(t.duration||0);(s.tokenUsage??on).recordUsage({timestamp:Date.now(),provider:s.provider,model:s.model,inputTokens:t.promptTokens||0,outputTokens:t.completionTokens||0,totalTokens:(t.promptTokens||0)+(t.completionTokens||0),cachedTokens:o.cachedTokens||0,openaiCachedTokens:o.openaiCachedTokens||0,anthropicCacheReadTokens:o.anthropicCacheReadTokens||0,anthropicCacheCreationTokens:o.anthropicCacheCreationTokens||0,duration:t.duration||0,success:true,sessionId:s.sessionId,requestType:"chat"}).catch(c=>{p.warn("RUNTIME_EVENTS","Failed to record token usage:",c);});}break}case "memory_snapshot":{let n=s.getRuntimeTokens();process.env.CLI_DEBUG&&(p.debug("MAIN","memory_snapshot received:"),p.debug("MAIN",` tokensUsed=${t.snapshot.tokensUsed}, contextWindow=${t.snapshot.profile.contextWindow}`),p.debug("MAIN",` pressure=${t.snapshot.pressure}, state=${t.snapshot.state}`),p.debug("MAIN",` runtimeInputTokens=${n.input}, runtimeOutputTokens=${n.output}`)),s.pushTokenStats(n.input,n.output,t.snapshot);break}case "checkpoint":s.uiController.addInfo(t.auto?`\u21BB Checkpoint: ${t.id} (auto-created before turn)`:`\u21BB Checkpoint: ${t.id}`);break;case "run_result":{s.uiController.completeReasoningStreaming(),s.uiController.completeTextStreaming();let n=t.iterations??0,r=t.toolCalls??0,o=t.durationMs??0,i=t.totalTokens??0,a=(o/1e3).toFixed(1),l=[`iterations: ${n}`,`tools: ${r}`,`duration: ${a}s`,`tokens: ${i}`];s.uiController.addInfo("\u2713 Run completed",l.join(" ")),s.uiController.updateStatus("Complete!","complete");break}case "stream_retry":{try{"finalizeStreamingState"in s.uiController?s.uiController.finalizeStreamingState():"completeReasoningStreaming"in s.uiController&&(s.uiController.completeReasoningStreaming(),s.uiController.completeTextStreaming());}catch(i){process.env.CLI_DEBUG==="1"&&p.debug("EVENT","Error completing streaming during retry",{error:i});}s.uiController.resetStreamingState&&s.uiController.resetStreamingState();let n=t.delayMs>=1e3?`${(t.delayMs/1e3).toFixed(1)}s`:`${t.delayMs}ms`,r="",o="";t.isRateLimit?(r=`\u23F3 API \u901F\u7387\u9650\u5236\uFF0C${n} \u540E\u91CD\u8BD5 (${t.attempt}/${t.maxRetries})`,o=`Rate limited, retrying in ${n}...`):t.isStreamTimeout?(r=`\u23F1\uFE0F Stream \u8D85\u65F6\uFF0C${n} \u540E\u91CD\u8BD5 (${t.attempt}/${t.maxRetries})`,o=`Timeout, retrying in ${n}...`):t.isNetworkError?(r=`\u{1F504} \u7F51\u7EDC\u4E2D\u65AD\uFF0C${n} \u540E\u91CD\u8FDE (${t.attempt}/${t.maxRetries})`,o=`Reconnecting in ${n}...`):(r=`\u{1F504} ${n} \u540E\u91CD\u8BD5 (${t.attempt}/${t.maxRetries})`,o=`Retrying in ${n}...`),s.uiController.addInfo(r,t.error),s.uiController.updateStatus(o,"thinking");break}case "stream_recovered":{let n=`\u2713 \u91CD\u8BD5 ${t.attempt}/${t.maxRetries}\uFF0C\u6B63\u5728\u91CD\u8FDE...`;s.uiController.addInfo(n),s.uiController.updateStatus("Reconnecting...","thinking");break}case "error_classified":e=true,s.uiController.addError(`${t.category}: ${t.code}`,`${t.message}${t.suggestion?`
48
48
  \u{1F4A1} Suggestion: ${t.suggestion}`:""}
49
49
  Retryable: ${t.retryable}`);break;case "plan_update":p.info("RUNTIME_EVENTS","\u{1F525} Handling plan_update event",{hasExplanation:!!t.explanation,planSteps:t.plan?.length}),t.plan&&"showPlanUpdate"in s.uiController?(p.info("RUNTIME_EVENTS","\u2705 Calling showPlanUpdate"),s.uiController.showPlanUpdate(t.explanation,t.plan)):p.warn("RUNTIME_EVENTS","\u274C Cannot show plan update",{hasPlan:!!t.plan,hasMethod:"showPlanUpdate"in s.uiController});break;case "error":if(s.uiController.completeReasoningStreaming(),s.uiController.completeTextStreaming(),!e){let n=t.message.split(`
50
50
  `),r=n[0],o=n.length>1?n.slice(1).join(`
51
51
  `):void 0;s.uiController.addError(r,o);}s.uiController.updateStatus(t.message.split(`
52
- `)[0],"error"),e=false;break}}}function av(s){return jA.has(s)||s.includes("websearch")||s.includes("webfetch")}function GA(s,e,t,n,r){if(!s)return;let o=t.toLowerCase();if(av(o)){kr(s,t,n);return}s.startToolCallWithId(e,t,n,r);}var $A,jA,lv=Qe(()=>{um();Z();ul();$A=new Set(["ephemeral","contextual","summarized"]);jA=new Set(["web_search","websearch","web_fetch","webfetch","readfile","search","search_files","glob","show_tree","list_directory","smart_tree","execute_bash","execute_shell","bash","execute_python","execute_js","execute_javascript","debug_in_browser","edit_file","edit"]);});function WA(s,e){let t=he.basename(e,he.extname(e))||"structured_output";return s&&typeof s=="object"&&s.schema&&typeof s.schema=="object"?{name:s.name||t,description:s.description,schema:s.schema,strict:s.strict??true}:{name:s?.title||t,schema:s||{},strict:true}}function cv(s){let e=s||process.env.CD_OUTPUT_SCHEMA||process.env.NEOX_OUTPUT_SCHEMA;if(!e)return;let t=he.isAbsolute(e)?e:he.resolve(process.cwd(),e);try{let n=Je.readFileSync(t,"utf-8"),r=JSON.parse(n),o=WA(r,t);return p.info("SCHEMA",`Structured output schema loaded: ${o.name}`),o}catch(n){throw p.error("SCHEMA",`Failed to load structured output schema from ${e}: ${n.message}`),n}}async function uv(s,e){let t="structured-output-example.schema.json",n=he.resolve(s,e||t),r={name:"TaskSummary",description:"\u793A\u4F8B\uFF1A\u4EFB\u52A1\u603B\u7ED3 Schema\uFF0C\u53EF\u4F5C\u4E3A\u81EA\u5B9A\u4E49 Schema \u7684\u8D77\u70B9",schema:{type:"object",properties:{status:{type:"string",enum:["ok","needs_attention","error"],description:"\u672C\u6B21\u4EFB\u52A1\u7684\u6700\u7EC8\u72B6\u6001"},summary:{type:"string",description:"\u5BF9\u4EFB\u52A1\u7684\u7B80\u8981\u603B\u7ED3\uFF0C1-3 \u53E5\u8BDD"},steps:{type:"array",description:"\u6267\u884C\u6B65\u9AA4\u5217\u8868",items:{type:"object",properties:{title:{type:"string"},result:{type:"string"}},required:["title"],additionalProperties:false}},next_actions:{type:"array",description:"\u9700\u8981\u8DDF\u8FDB\u7684\u52A8\u4F5C",items:{type:"string"}}},required:["status","summary"],additionalProperties:false},strict:true};try{await Je.promises.writeFile(n,JSON.stringify(r,null,2),"utf-8"),R(""),R(x.success(`[v] \u793A\u4F8B Schema \u5DF2\u751F\u6210: ${n}`)),R(x.dim("\u4F7F\u7528\u65B9\u5F0F:")),R(x.dim(" 1. \u6839\u636E\u9700\u8981\u4FEE\u6539\u5B57\u6BB5/\u63CF\u8FF0")),R(x.dim(` 2. \u542F\u52A8 CLI: neox --output-schema ${e||t}`)),R(x.dim(" 3. CLI \u4F1A\u5F3A\u5236\u8F93\u51FA\u7B26\u5408\u8BE5 Schema \u7684 JSON")),R(""),R(x.highlight("\u793A\u4F8B\u7ED3\u6784 (\u6458\u5F55):")),R(x.dim(JSON.stringify(r.schema,null,2)));}catch(o){R(x.error(`[x] \u751F\u6210\u793A\u4F8B Schema \u5931\u8D25: ${o.message}`));}}var dv=Qe(()=>{Z();Gt();yn();});var to=Qe(()=>{nv();sv();lv();dv();});function wc(s){let e=Dt.getAllModels();switch(s){case "openai":case "openai-responses":return e.filter(t=>t.provider==="openai").sort((t,n)=>t.releaseDate&&n.releaseDate?n.releaseDate.localeCompare(t.releaseDate):(n.scores?.coding??0)-(t.scores?.coding??0)).map(t=>t.id);case "anthropic":case "anthropic-openai":return e.filter(t=>t.provider==="anthropic").sort((t,n)=>t.releaseDate&&n.releaseDate?n.releaseDate.localeCompare(t.releaseDate):(n.scores?.coding??0)-(t.scores?.coding??0)).map(t=>t.id);case "gemini":return e.filter(t=>t.provider==="gemini").map(t=>t.id);case "doubao":return e.filter(t=>t.provider==="doubao").map(t=>t.id);case "kimi":return e.filter(t=>t.provider==="kimi").map(t=>t.id);default:return []}}var hm=Qe(()=>{br();});var Ic={};Vr(Ic,{applyProviderChange:()=>kc,handleInteractiveProviderSelection:()=>bm,handleProviderAddCommand:()=>Sc,handleProviderDefaultCommand:()=>ym,handleProviderDeleteCommand:()=>fm,handleProviderEditCommand:()=>_c,showProviderOptions:()=>Li});function Li(s){let e=s.getProviders();if(e.length===0){s.logInfo("No providers configured","Use /provider add to create one.");return}let n=s.getDefaultProvider()?.id,o=`${e.map((i,a)=>{let l=[];i.id===s.providerId&&l.push("current"),i.id===n&&l.push("default");let c=Xt[i.protocol]||"OpenAI",u=i.models.length>0?i.models.map(m=>m.name).join(", "):"none",d=i.baseUrl||wr[i.protocol];return [`${a+1}. ${i.name}${Pi(l)}`,` id: ${i.id}`,` protocol: ${c}`,` base url: ${d}`,` models: ${u}`].join(`
52
+ `)[0],"error"),e=false;break}}}function av(s){return GA.has(s)||s.includes("websearch")||s.includes("webfetch")}function WA(s,e,t,n,r){if(!s)return;let o=t.toLowerCase();if(av(o)){kr(s,t,n);return}s.startToolCallWithId(e,t,n,r);}var BA,GA,lv=Qe(()=>{um();Z();ul();BA=new Set(["ephemeral","contextual","summarized"]);GA=new Set(["web_search","websearch","web_fetch","webfetch","readfile","search","search_files","glob","show_tree","list_directory","smart_tree","execute_bash","execute_shell","bash","execute_python","execute_js","execute_javascript","debug_in_browser","edit_file","edit"]);});function HA(s,e){let t=he.basename(e,he.extname(e))||"structured_output";return s&&typeof s=="object"&&s.schema&&typeof s.schema=="object"?{name:s.name||t,description:s.description,schema:s.schema,strict:s.strict??true}:{name:s?.title||t,schema:s||{},strict:true}}function cv(s){let e=s||process.env.CD_OUTPUT_SCHEMA||process.env.NEOX_OUTPUT_SCHEMA;if(!e)return;let t=he.isAbsolute(e)?e:he.resolve(process.cwd(),e);try{let n=Je.readFileSync(t,"utf-8"),r=JSON.parse(n),o=HA(r,t);return p.info("SCHEMA",`Structured output schema loaded: ${o.name}`),o}catch(n){throw p.error("SCHEMA",`Failed to load structured output schema from ${e}: ${n.message}`),n}}async function uv(s,e){let t="structured-output-example.schema.json",n=he.resolve(s,e||t),r={name:"TaskSummary",description:"\u793A\u4F8B\uFF1A\u4EFB\u52A1\u603B\u7ED3 Schema\uFF0C\u53EF\u4F5C\u4E3A\u81EA\u5B9A\u4E49 Schema \u7684\u8D77\u70B9",schema:{type:"object",properties:{status:{type:"string",enum:["ok","needs_attention","error"],description:"\u672C\u6B21\u4EFB\u52A1\u7684\u6700\u7EC8\u72B6\u6001"},summary:{type:"string",description:"\u5BF9\u4EFB\u52A1\u7684\u7B80\u8981\u603B\u7ED3\uFF0C1-3 \u53E5\u8BDD"},steps:{type:"array",description:"\u6267\u884C\u6B65\u9AA4\u5217\u8868",items:{type:"object",properties:{title:{type:"string"},result:{type:"string"}},required:["title"],additionalProperties:false}},next_actions:{type:"array",description:"\u9700\u8981\u8DDF\u8FDB\u7684\u52A8\u4F5C",items:{type:"string"}}},required:["status","summary"],additionalProperties:false},strict:true};try{await Je.promises.writeFile(n,JSON.stringify(r,null,2),"utf-8"),R(""),R(x.success(`[v] \u793A\u4F8B Schema \u5DF2\u751F\u6210: ${n}`)),R(x.dim("\u4F7F\u7528\u65B9\u5F0F:")),R(x.dim(" 1. \u6839\u636E\u9700\u8981\u4FEE\u6539\u5B57\u6BB5/\u63CF\u8FF0")),R(x.dim(` 2. \u542F\u52A8 CLI: neox --output-schema ${e||t}`)),R(x.dim(" 3. CLI \u4F1A\u5F3A\u5236\u8F93\u51FA\u7B26\u5408\u8BE5 Schema \u7684 JSON")),R(""),R(x.highlight("\u793A\u4F8B\u7ED3\u6784 (\u6458\u5F55):")),R(x.dim(JSON.stringify(r.schema,null,2)));}catch(o){R(x.error(`[x] \u751F\u6210\u793A\u4F8B Schema \u5931\u8D25: ${o.message}`));}}var dv=Qe(()=>{Z();Gt();yn();});var to=Qe(()=>{nv();sv();lv();dv();});function wc(s){let e=Dt.getAllModels();switch(s){case "openai":case "openai-responses":return e.filter(t=>t.provider==="openai").sort((t,n)=>t.releaseDate&&n.releaseDate?n.releaseDate.localeCompare(t.releaseDate):(n.scores?.coding??0)-(t.scores?.coding??0)).map(t=>t.id);case "anthropic":case "anthropic-openai":return e.filter(t=>t.provider==="anthropic").sort((t,n)=>t.releaseDate&&n.releaseDate?n.releaseDate.localeCompare(t.releaseDate):(n.scores?.coding??0)-(t.scores?.coding??0)).map(t=>t.id);case "gemini":return e.filter(t=>t.provider==="gemini").map(t=>t.id);case "doubao":return e.filter(t=>t.provider==="doubao").map(t=>t.id);case "kimi":return e.filter(t=>t.provider==="kimi").map(t=>t.id);default:return []}}var hm=Qe(()=>{br();});var Ic={};Vr(Ic,{applyProviderChange:()=>kc,handleInteractiveProviderSelection:()=>bm,handleProviderAddCommand:()=>Sc,handleProviderDefaultCommand:()=>ym,handleProviderDeleteCommand:()=>fm,handleProviderEditCommand:()=>_c,showProviderOptions:()=>Li});function Li(s){let e=s.getProviders();if(e.length===0){s.logInfo("No providers configured","Use /provider add to create one.");return}let n=s.getDefaultProvider()?.id,o=`${e.map((i,a)=>{let l=[];i.id===s.providerId&&l.push("current"),i.id===n&&l.push("default");let c=Xt[i.protocol]||"OpenAI",u=i.models.length>0?i.models.map(m=>m.name).join(", "):"none",d=i.baseUrl||wr[i.protocol];return [`${a+1}. ${i.name}${Pi(l)}`,` id: ${i.id}`,` protocol: ${c}`,` base url: ${d}`,` models: ${u}`].join(`
53
53
  `)}).join(`
54
54
 
55
55
  `)}
@@ -60,16 +60,16 @@ Commands:
60
60
  /provider edit <id> edit provider
61
61
  /provider remove <id> remove provider
62
62
  /provider default <id> set default provider`;s.logInfo("Available providers",o);}async function kc(s,e){if(!e){Li(s);return}let t=s.getProvider(e)||s.getProviders().find(n=>n.protocol===e);if(!t){s.logInfo("Provider not found",`Unknown provider "${e}".`);return}if(t.id===s.providerId){s.logInfo("Provider unchanged",`${t.name} is already active.`);return}try{let n=s.resolveModel(t.id);if(!n)throw new Error(`Provider "${t.name}" does not have any models configured.`);s.setLastSelectedModel(t.id,n),s.setDefaultProvider(t.id),await s.applyProviderState({providerId:t.id,provider:t.protocol,model:n,providerSettings:t}),s.updateProviderDisplay(s.getProviderDisplayName(),n),s.logInfo("Provider updated",`Provider: ${s.getProviderDisplayName()}
63
- Model: ${n}`);}catch(n){s.logInfo("Failed to switch provider",n.message);}}function oM(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(0)}K`:`${s}`}function iM(s){let e=wc(s);return p.debug("PROVIDER_ADD","Getting model suggestions",{protocol:s,count:e.length}),e.slice(0,20).map(t=>{let n=Dt.getModel(t);if(!n)return {label:t,value:t,description:void 0};let r=oM(n.maxInputTokens),o=[];n.supportsVision&&o.push("\u{1F441}\uFE0F"),n.supportsThinking&&o.push("\u{1F4AD}");let i=o.length>0?`${o.join(" ")} `:"";return {label:n.id,value:n.id,description:`${n.displayName} ${i}(${r} ctx)`}})}async function Sc(s){try{s.logInfo("\u6DFB\u52A0\u65B0\u7684 Provider","\u8BF7\u6309\u6B65\u9AA4\u5B8C\u6210\u914D\u7F6E"),s.logInfo("Step 1/4","Provider \u540D\u79F0\u548C\u5730\u5740");let e=await s.promptText("Provider \u663E\u793A\u540D\u79F0",{allowEmpty:!1,hint:"\u4F8B\u5982: OpenAI, Claude API, \u79C1\u6709\u4EE3\u7406"}),t=await s.promptSelect("\u534F\u8BAE\u683C\u5F0F",[{label:"OpenAI (Chat Completions)",value:"openai",description:"GPT-4, GPT-4o \u7B49\u6807\u51C6\u6A21\u578B"},{label:"OpenAI (Responses API)",value:"openai-responses",description:"o3, o4-mini \u7B49\u63A8\u7406\u6A21\u578B"},{label:"Kimi (Moonshot)",value:"kimi",description:"Kimi OpenAI \u517C\u5BB9\u534F\u8BAE"},{label:"Anthropic (Claude)",value:"anthropic",description:"Claude \u539F\u751F\u683C\u5F0F"},{label:"Anthropic (OpenAI \u683C\u5F0F)",value:"anthropic-openai",description:"\u4EE3\u7406\u670D\u52A1\u5E38\u7528"},{label:"\u8C46\u5305 (Doubao)",value:"doubao",description:"\u706B\u5C71\u65B9\u821F\u8C46\u5305\uFF0C\u652F\u6301\u6DF1\u5EA6\u601D\u8003"},{label:"Google Gemini",value:"gemini",description:"Gemini 2.5 \u7CFB\u5217"}],"anthropic"),n=wr[t],r=await s.promptText("Base URL",{defaultValue:n,hint:"\u76F4\u63A5\u56DE\u8F66\u4F7F\u7528\u9ED8\u8BA4\u503C\uFF0C\u6216\u8F93\u5165\u81EA\u5B9A\u4E49\u4EE3\u7406\u5730\u5740"});s.logInfo("Step 2/4","\u9009\u62E9\u6A21\u578B");let o=iM(t),i=[],a="";if(o.length>0){let g=[...o,{label:"\u81EA\u5B9A\u4E49\u6A21\u578B\u540D\u79F0",value:"__custom__",description:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D\u79F0"}],h=await s.promptSelect("\u9009\u62E9\u9ED8\u8BA4\u6A21\u578B",g,o[0]?.value);if(h==="__custom__"?a=await s.promptText("\u8F93\u5165\u6A21\u578B\u540D\u79F0",{allowEmpty:!1}):a=h,i.push(a),await s.promptYesNo("\u662F\u5426\u6DFB\u52A0\u66F4\u591A\u6A21\u578B?",!1)){let v=await s.promptText("\u8F93\u5165\u66F4\u591A\u6A21\u578B\u540D\u79F0",{allowEmpty:!0,hint:"\u591A\u4E2A\u6A21\u578B\u7528\u9017\u53F7\u5206\u9694\uFF0C\u4F8B\u5982: gpt-4o,gpt-4-turbo"});if(v.trim()){let b=v.split(",").map(C=>C.trim()).filter(C=>C);for(let C of b)i.includes(C)||i.push(C);}}}else {a=await s.promptText("\u8F93\u5165\u9ED8\u8BA4\u6A21\u578B\u540D\u79F0",{allowEmpty:!1}),i.push(a);let g=await s.promptText("\u8F93\u5165\u66F4\u591A\u6A21\u578B\u540D\u79F0 (\u53EF\u9009)",{allowEmpty:!0,hint:"\u591A\u4E2A\u6A21\u578B\u7528\u9017\u53F7\u5206\u9694"});if(g.trim()){let h=g.split(",").map(f=>f.trim()).filter(f=>f);for(let f of h)i.includes(f)||i.push(f);}}s.logInfo("Step 3/4","API \u5BC6\u94A5");let l=await s.promptText("API Key",{allowEmpty:!1,hint:"\u8F93\u5165\u4F60\u7684 API \u5BC6\u94A5\u6216 Token"});s.logInfo("Step 4/4","\u786E\u8BA4\u914D\u7F6E");let c=[`\u540D\u79F0: ${e}`,`\u534F\u8BAE: ${Xt[t]}`,`\u5730\u5740: ${r}`,`\u6A21\u578B: ${i.join(", ")}`,`\u9ED8\u8BA4: ${a}`].join(`
63
+ Model: ${n}`);}catch(n){s.logInfo("Failed to switch provider",n.message);}}function iM(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(0)}K`:`${s}`}function aM(s){let e=wc(s);return p.debug("PROVIDER_ADD","Getting model suggestions",{protocol:s,count:e.length}),e.slice(0,20).map(t=>{let n=Dt.getModel(t);if(!n)return {label:t,value:t,description:void 0};let r=iM(n.maxInputTokens),o=[];n.supportsVision&&o.push("\u{1F441}\uFE0F"),n.supportsThinking&&o.push("\u{1F4AD}");let i=o.length>0?`${o.join(" ")} `:"";return {label:n.id,value:n.id,description:`${n.displayName} ${i}(${r} ctx)`}})}async function Sc(s){try{s.logInfo("\u6DFB\u52A0\u65B0\u7684 Provider","\u8BF7\u6309\u6B65\u9AA4\u5B8C\u6210\u914D\u7F6E"),s.logInfo("Step 1/4","Provider \u540D\u79F0\u548C\u5730\u5740");let e=await s.promptText("Provider \u663E\u793A\u540D\u79F0",{allowEmpty:!1,hint:"\u4F8B\u5982: OpenAI, Claude API, \u79C1\u6709\u4EE3\u7406"}),t=await s.promptSelect("\u534F\u8BAE\u683C\u5F0F",[{label:"OpenAI (Chat Completions)",value:"openai",description:"GPT-4, GPT-4o \u7B49\u6807\u51C6\u6A21\u578B"},{label:"OpenAI (Responses API)",value:"openai-responses",description:"o3, o4-mini \u7B49\u63A8\u7406\u6A21\u578B"},{label:"Kimi (Moonshot)",value:"kimi",description:"Kimi OpenAI \u517C\u5BB9\u534F\u8BAE"},{label:"Anthropic (Claude)",value:"anthropic",description:"Claude \u539F\u751F\u683C\u5F0F"},{label:"Anthropic (OpenAI \u683C\u5F0F)",value:"anthropic-openai",description:"\u4EE3\u7406\u670D\u52A1\u5E38\u7528"},{label:"\u8C46\u5305 (Doubao)",value:"doubao",description:"\u706B\u5C71\u65B9\u821F\u8C46\u5305\uFF0C\u652F\u6301\u6DF1\u5EA6\u601D\u8003"},{label:"Google Gemini",value:"gemini",description:"Gemini 2.5 \u7CFB\u5217"}],"anthropic"),n=wr[t],r=await s.promptText("Base URL",{defaultValue:n,hint:"\u76F4\u63A5\u56DE\u8F66\u4F7F\u7528\u9ED8\u8BA4\u503C\uFF0C\u6216\u8F93\u5165\u81EA\u5B9A\u4E49\u4EE3\u7406\u5730\u5740"});s.logInfo("Step 2/4","\u9009\u62E9\u6A21\u578B");let o=aM(t),i=[],a="";if(o.length>0){let g=[...o,{label:"\u81EA\u5B9A\u4E49\u6A21\u578B\u540D\u79F0",value:"__custom__",description:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D\u79F0"}],h=await s.promptSelect("\u9009\u62E9\u9ED8\u8BA4\u6A21\u578B",g,o[0]?.value);if(h==="__custom__"?a=await s.promptText("\u8F93\u5165\u6A21\u578B\u540D\u79F0",{allowEmpty:!1}):a=h,i.push(a),await s.promptYesNo("\u662F\u5426\u6DFB\u52A0\u66F4\u591A\u6A21\u578B?",!1)){let v=await s.promptText("\u8F93\u5165\u66F4\u591A\u6A21\u578B\u540D\u79F0",{allowEmpty:!0,hint:"\u591A\u4E2A\u6A21\u578B\u7528\u9017\u53F7\u5206\u9694\uFF0C\u4F8B\u5982: gpt-4o,gpt-4-turbo"});if(v.trim()){let b=v.split(",").map(C=>C.trim()).filter(C=>C);for(let C of b)i.includes(C)||i.push(C);}}}else {a=await s.promptText("\u8F93\u5165\u9ED8\u8BA4\u6A21\u578B\u540D\u79F0",{allowEmpty:!1}),i.push(a);let g=await s.promptText("\u8F93\u5165\u66F4\u591A\u6A21\u578B\u540D\u79F0 (\u53EF\u9009)",{allowEmpty:!0,hint:"\u591A\u4E2A\u6A21\u578B\u7528\u9017\u53F7\u5206\u9694"});if(g.trim()){let h=g.split(",").map(f=>f.trim()).filter(f=>f);for(let f of h)i.includes(f)||i.push(f);}}s.logInfo("Step 3/4","API \u5BC6\u94A5");let l=await s.promptText("API Key",{allowEmpty:!1,hint:"\u8F93\u5165\u4F60\u7684 API \u5BC6\u94A5\u6216 Token"});s.logInfo("Step 4/4","\u786E\u8BA4\u914D\u7F6E");let c=[`\u540D\u79F0: ${e}`,`\u534F\u8BAE: ${Xt[t]}`,`\u5730\u5740: ${r}`,`\u6A21\u578B: ${i.join(", ")}`,`\u9ED8\u8BA4: ${a}`].join(`
64
64
  `);s.logInfo("\u914D\u7F6E\u9884\u89C8",c);let u=await s.promptYesNo("\u8BBE\u4E3A\u9ED8\u8BA4 Provider?",s.getProviderCount()===0),d=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,32),m=s.addProvider({id:d||void 0,name:e,protocol:t,apiKey:l,baseUrl:r,defaultModel:a,models:i,setAsDefault:u});s.setLastSelectedModel(m.id,m.defaultModel||a),await s.applyProviderState({providerId:m.id,provider:m.protocol,model:m.defaultModel||a,providerSettings:m}),s.updateProviderDisplay(s.getProviderDisplayName(),m.defaultModel||a),s.logInfo("\u2713 Provider \u521B\u5EFA\u6210\u529F",[`Provider: ${s.getProviderDisplayName()}`,`Model: ${m.defaultModel||a}`,`ID: ${m.id}`].join(`
65
65
  `)),Li(s);}catch(e){e.message==="cancelled"?s.logInfo("\u5DF2\u53D6\u6D88","Provider \u8BBE\u7F6E\u5DF2\u53D6\u6D88"):s.logInfo("\u521B\u5EFA\u5931\u8D25",e.message);}}async function _c(s,e){let t=s.getProviderByIdentifier(e);if(!t&&(t=await s.selectProviderFromList("Select provider to view/edit"),!t)||!t)return;let n=t,r=n.id;try{let o=!0;for(;o;){let i=n.id===s.providerId,a=[`\u{1F4E6} Provider: ${n.name}${i?" (current)":""}`,`\u{1F194} ID: ${n.id}`,`\u{1F50C} Protocol: ${Xt[n.protocol]||n.protocol}`,`\u{1F310} Base URL: ${n.baseUrl||wr[n.protocol]}`,`\u{1F511} API Key: ${n.apiKey||"(not set)"}`,`\u{1F3AF} Default Model: ${n.defaultModel||"(none)"}`,`\u{1F4CB} All Models: ${n.models.map(u=>u.name).join(", ")||"(none)"}`].join(`
66
- `);s.logInfo("Provider Configuration",a);let l=[{label:"\u2B05\uFE0F Back (Cancel)",value:"done",description:"\u8FD4\u56DE\u4E0A\u7EA7\u83DC\u5355 (ESC)"},{label:"\u270F\uFE0F Edit Provider ID",value:"edit_id",description:`\u5F53\u524D: ${n.id}`},{label:"\u270F\uFE0F Edit Provider Name",value:"edit_name",description:`\u5F53\u524D: ${n.name}`},{label:"\u270F\uFE0F Edit Protocol",value:"edit_protocol",description:`\u5F53\u524D: ${Xt[n.protocol]}`},{label:"\u270F\uFE0F Edit Base URL",value:"edit_base_url",description:`\u5F53\u524D: ${n.baseUrl||wr[n.protocol]}`},{label:"\u270F\uFE0F Edit API Key",value:"edit_api_key",description:n.apiKey?"\u5DF2\u8BBE\u7F6E":"\u672A\u8BBE\u7F6E"},{label:"\u270F\uFE0F Edit Default Model",value:"edit_model",description:`\u5F53\u524D: ${n.defaultModel||"(none)"}`}];switch(i||l.push({label:"\u{1F504} Switch to this provider",value:"switch",description:"\u5C06\u6B64 provider \u8BBE\u4E3A\u5F53\u524D\u4F7F\u7528\u7684"}),l.push({label:"\u{1F5D1}\uFE0F Delete this provider",value:"delete",description:i?"\u5220\u9664\u5F53\u524D provider (\u4F1A\u5207\u6362\u5230\u5176\u4ED6 provider)":"\u5220\u9664\u6B64 provider"}),await s.promptSelect("What would you like to do?",l,"done")){case "done":o=!1;break;case "edit_id":{let u=await s.promptText(`Edit Provider ID (current: ${n.id})`,{defaultValue:n.id,hint:"\u4EC5\u9650\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26\uFF08-\uFF09\uFF0C\u6700\u957F 48 \u4E2A\u5B57\u7B26"});if(u.trim()&&u.trim()!==n.id){let d=s.renameProvider(n.id,u.trim());n=d,r===s.providerId&&(await s.applyProviderState({providerId:d.id,provider:d.protocol,model:s.model,providerSettings:d}),s.updateProviderDisplay(s.getProviderDisplayName(),s.model)),s.logInfo("\u2713 Provider ID updated",`New ID: ${n.id}`);}break}case "edit_name":{let u=await s.promptText(`Edit Provider Name (current: ${n.name})`,{defaultValue:n.name});u.trim()&&u.trim()!==n.name&&(n=s.updateProvider(n.id,{name:u.trim()}),s.logInfo("\u2713 Provider name updated",`New name: ${n.name}`));break}case "edit_protocol":{let u=[{label:"OpenAI (Chat Completions)",value:"openai",description:"GPT-4, GPT-3.5 \u7B49\u6807\u51C6\u6A21\u578B"},{label:"OpenAI (Responses API)",value:"openai-responses",description:"GPT-5, o3 \u7B49\u652F\u6301\u63A8\u7406\u7684\u6A21\u578B"},{label:"Kimi (Moonshot)",value:"kimi",description:"Kimi OpenAI \u517C\u5BB9\u534F\u8BAE"},{label:"Anthropic (Claude)",value:"anthropic",description:"Claude \u539F\u751F\u683C\u5F0F"},{label:"Anthropic (OpenAI \u683C\u5F0F)",value:"anthropic-openai",description:"\u4F7F\u7528 OpenAI \u517C\u5BB9\u683C\u5F0F\u8C03\u7528 Claude"},{label:"\u8C46\u5305 (Doubao)",value:"doubao",description:"\u706B\u5C71\u65B9\u821F\u8C46\u5305\u6A21\u578B\uFF0C\u652F\u6301\u6DF1\u5EA6\u601D\u8003"},{label:"Google Gemini",value:"gemini",description:"Gemini 2.5 \u7CFB\u5217"}],d=await s.promptSelect(`Edit Protocol (current: ${Xt[n.protocol]})`,u,n.protocol);d!==n.protocol&&(n=s.updateProvider(n.id,{protocol:d}),s.logInfo("\u2713 Protocol updated",`New protocol: ${Xt[d]}`));break}case "edit_base_url":{let u=n.baseUrl||wr[n.protocol],d=await s.promptText(`Edit Base URL (current: ${u})`,{defaultValue:u});d.trim()&&d.trim()!==u&&(n=s.updateProvider(n.id,{baseUrl:d.trim()}),s.logInfo("\u2713 Base URL updated",`New URL: ${n.baseUrl}`));break}case "edit_api_key":{let u=await s.promptText(n.apiKey?`Edit API Key (current: ${n.apiKey})`:"Edit API Key (not set)",{defaultValue:n.apiKey||"",hint:"\u5B8C\u6574\u7684 API \u5BC6\u94A5"});u.trim()&&u.trim()!==n.apiKey&&(n=s.updateProvider(n.id,{apiKey:u.trim()}),s.logInfo("\u2713 API Key updated","New key has been saved"));break}case "edit_model":{if(n.models.length===0){s.logInfo("No models configured","Use /model add to add models first");break}let u=n.models.map(m=>({label:m.name,value:m.name})),d=await s.promptSelect(`Edit Default Model (current: ${n.defaultModel||"(none)"})`,u,n.defaultModel||n.models[0].name);d!==n.defaultModel&&(n=s.updateProvider(n.id,{defaultModel:d}),s.logInfo("\u2713 Default model updated",`New model: ${d}`),n.id===s.providerId&&(s.setLastSelectedModel(s.providerId,d),await s.applyProviderState({providerId:n.id,provider:n.protocol,model:d,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),d)));break}case "switch":{let u=s.resolveModel(n.id);if(!u){s.logInfo("Cannot switch","This provider has no models configured");break}s.setLastSelectedModel(n.id,u),s.setDefaultProvider(n.id),await s.applyProviderState({providerId:n.id,provider:n.protocol,model:u,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),u),s.logInfo("\u2713 Provider switched",`Now using: ${n.name} / ${u}`);break}case "delete":{if(s.getProviderCount()<=1){s.logInfo("Cannot delete","At least one provider is required");break}if(!await s.promptConfirmKeyword(`Type DELETE to remove provider "${n.name}"`,"delete")){s.logInfo("Deletion cancelled");break}let d=n.id===s.providerId;if(s.deleteProvider(n.id),s.refreshProviderSettings(),d){let m=s.getDefaultProvider();if(m){let g=s.resolveModel(m.id);g&&(s.setLastSelectedModel(m.id,g),await s.applyProviderState({providerId:m.id,provider:m.protocol,model:g,providerSettings:m}),s.updateProviderDisplay(s.getProviderDisplayName(),g),s.logInfo("\u2713 Provider deleted",`Removed ${n.name}. Switched to ${m.name}.`));}}else s.logInfo("\u2713 Provider deleted",`Removed ${n.name}.`);o=!1;break}}}s.logInfo("\u2713 Done",`Provider: ${n.name}`);}catch(o){o.message==="cancelled"?s.logInfo("Cancelled","Provider not modified"):s.logInfo("Failed to update provider",o.message);}}async function fm(s,e){let t=s.getProviderByIdentifier(e);if(!(!t&&(t=await s.selectProviderFromList("Select provider to delete"),!t))){if(s.getProviderCount()<=1){s.logInfo("Cannot delete provider","At least one provider is required.");return}try{if(!await s.promptConfirmKeyword(`Type DELETE to remove provider "${t.name}"`,"delete")){s.logInfo("Deletion cancelled","Provider was not removed.");return}let r=t.id===s.providerId;if(s.deleteProvider(t.id),s.refreshProviderSettings(),r){let o=s.getDefaultProvider();if(!o){s.logInfo("Provider deleted",`Removed ${t.name}. Add a new provider with /provider add.`);return}let i=s.resolveModel(o.id);if(!i){s.logInfo("Provider deleted",`Removed ${t.name}. Configure models for ${o.name} via /model add.`);return}s.setLastSelectedModel(o.id,i),await s.applyProviderState({providerId:o.id,provider:o.protocol,model:i,providerSettings:o}),s.updateProviderDisplay(s.getProviderDisplayName(),i);}s.logInfo("Provider deleted",`Removed ${t.name}.`);}catch(n){n.message==="cancelled"?s.logInfo("Deletion cancelled"):s.logInfo("Failed to delete provider",n.message);}}}async function ym(s,e){let t=s.getProviderByIdentifier(e);if(!(!t&&(t=await s.selectProviderFromList("Select provider to set as default"),!t)))try{s.setDefaultProvider(t.id),s.logInfo("Default provider updated",`${t.name} is now the default provider.`);}catch(n){s.logInfo("Failed to set default provider",n.message);}}async function bm(s){let e=s.getProviders();if(!e||e.length===0){s.logInfo("No providers configured","Use /provider add to create one.");return}try{let t=await s.selectProviderFromList("Select provider to view/edit");if(!t)return;if(t.id==="__add__"){await Sc(s);return}await _c(s,t.id);}catch(t){t.message==="cancelled"?s.logInfo("Selection cancelled"):s.logInfo("Selection failed",t.message);}}var Oi=Qe(()=>{Gt();to();br();hm();Z();});var oC={};Vr(oC,{runExecuteShellWorker:()=>uP});function Sm(s,e){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
66
+ `);s.logInfo("Provider Configuration",a);let l=[{label:"\u2B05\uFE0F Back (Cancel)",value:"done",description:"\u8FD4\u56DE\u4E0A\u7EA7\u83DC\u5355 (ESC)"},{label:"\u270F\uFE0F Edit Provider ID",value:"edit_id",description:`\u5F53\u524D: ${n.id}`},{label:"\u270F\uFE0F Edit Provider Name",value:"edit_name",description:`\u5F53\u524D: ${n.name}`},{label:"\u270F\uFE0F Edit Protocol",value:"edit_protocol",description:`\u5F53\u524D: ${Xt[n.protocol]}`},{label:"\u270F\uFE0F Edit Base URL",value:"edit_base_url",description:`\u5F53\u524D: ${n.baseUrl||wr[n.protocol]}`},{label:"\u270F\uFE0F Edit API Key",value:"edit_api_key",description:n.apiKey?"\u5DF2\u8BBE\u7F6E":"\u672A\u8BBE\u7F6E"},{label:"\u270F\uFE0F Edit Default Model",value:"edit_model",description:`\u5F53\u524D: ${n.defaultModel||"(none)"}`}];switch(i||l.push({label:"\u{1F504} Switch to this provider",value:"switch",description:"\u5C06\u6B64 provider \u8BBE\u4E3A\u5F53\u524D\u4F7F\u7528\u7684"}),l.push({label:"\u{1F5D1}\uFE0F Delete this provider",value:"delete",description:i?"\u5220\u9664\u5F53\u524D provider (\u4F1A\u5207\u6362\u5230\u5176\u4ED6 provider)":"\u5220\u9664\u6B64 provider"}),await s.promptSelect("What would you like to do?",l,"done")){case "done":o=!1;break;case "edit_id":{let u=await s.promptText(`Edit Provider ID (current: ${n.id})`,{defaultValue:n.id,hint:"\u4EC5\u9650\u5C0F\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26\uFF08-\uFF09\uFF0C\u6700\u957F 48 \u4E2A\u5B57\u7B26"});if(u.trim()&&u.trim()!==n.id){let d=s.renameProvider(n.id,u.trim());n=d,r===s.providerId&&(await s.applyProviderState({providerId:d.id,provider:d.protocol,model:s.model,providerSettings:d}),s.updateProviderDisplay(s.getProviderDisplayName(),s.model)),s.logInfo("\u2713 Provider ID updated",`New ID: ${n.id}`);}break}case "edit_name":{let u=await s.promptText(`Edit Provider Name (current: ${n.name})`,{defaultValue:n.name});u.trim()&&u.trim()!==n.name&&(n=s.updateProvider(n.id,{name:u.trim()}),s.logInfo("\u2713 Provider name updated",`New name: ${n.name}`));break}case "edit_protocol":{let u=[{label:"OpenAI (Chat Completions)",value:"openai",description:"GPT-4, GPT-3.5 \u7B49\u6807\u51C6\u6A21\u578B"},{label:"OpenAI (Responses API)",value:"openai-responses",description:"GPT-5, o3 \u7B49\u652F\u6301\u63A8\u7406\u7684\u6A21\u578B"},{label:"Kimi (Moonshot)",value:"kimi",description:"Kimi OpenAI \u517C\u5BB9\u534F\u8BAE"},{label:"Anthropic (Claude)",value:"anthropic",description:"Claude \u539F\u751F\u683C\u5F0F"},{label:"Anthropic (OpenAI \u683C\u5F0F)",value:"anthropic-openai",description:"\u4F7F\u7528 OpenAI \u517C\u5BB9\u683C\u5F0F\u8C03\u7528 Claude"},{label:"\u8C46\u5305 (Doubao)",value:"doubao",description:"\u706B\u5C71\u65B9\u821F\u8C46\u5305\u6A21\u578B\uFF0C\u652F\u6301\u6DF1\u5EA6\u601D\u8003"},{label:"Google Gemini",value:"gemini",description:"Gemini 2.5 \u7CFB\u5217"}],d=await s.promptSelect(`Edit Protocol (current: ${Xt[n.protocol]})`,u,n.protocol);d!==n.protocol&&(n=s.updateProvider(n.id,{protocol:d}),s.logInfo("\u2713 Protocol updated",`New protocol: ${Xt[d]}`));break}case "edit_base_url":{let u=n.baseUrl||wr[n.protocol],d=await s.promptText(`Edit Base URL (current: ${u})`,{defaultValue:u});d.trim()&&d.trim()!==u&&(n=s.updateProvider(n.id,{baseUrl:d.trim()}),s.logInfo("\u2713 Base URL updated",`New URL: ${n.baseUrl}`));break}case "edit_api_key":{let u=await s.promptText(n.apiKey?`Edit API Key (current: ${n.apiKey})`:"Edit API Key (not set)",{defaultValue:n.apiKey||"",hint:"\u5B8C\u6574\u7684 API \u5BC6\u94A5"});u.trim()&&u.trim()!==n.apiKey&&(n=s.updateProvider(n.id,{apiKey:u.trim()}),s.logInfo("\u2713 API Key updated","New key has been saved"));break}case "edit_model":{if(n.models.length===0){s.logInfo("No models configured","Use /model add to add models first");break}let u=n.models.map(m=>({label:m.name,value:m.name})),d=await s.promptSelect(`Edit Default Model (current: ${n.defaultModel||"(none)"})`,u,n.defaultModel||n.models[0].name);d!==n.defaultModel&&(n=s.updateProvider(n.id,{defaultModel:d}),s.logInfo("\u2713 Default model updated",`New model: ${d}`),n.id===s.providerId&&(s.setLastSelectedModel(s.providerId,d),await s.applyProviderState({providerId:n.id,provider:n.protocol,model:d,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),d)));break}case "switch":{let u=s.resolveModel(n.id);if(!u){s.logInfo("Cannot switch","This provider has no models configured");break}s.setLastSelectedModel(n.id,u),s.setDefaultProvider(n.id),await s.applyProviderState({providerId:n.id,provider:n.protocol,model:u,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),u),s.logInfo("\u2713 Provider switched",`Now using: ${n.name} / ${u}`);break}case "delete":{if(s.getProviderCount()<=1){s.logInfo("Cannot delete","At least one provider is required");break}if(!await s.promptConfirmKeyword(`Type DELETE to remove provider "${n.name}"`,"delete")){s.logInfo("Deletion cancelled");break}let d=n.id===s.providerId;if(s.deleteProvider(n.id),s.refreshProviderSettings(),d){let m=s.getDefaultProvider();if(m){let g=s.resolveModel(m.id);g&&(s.setLastSelectedModel(m.id,g),await s.applyProviderState({providerId:m.id,provider:m.protocol,model:g,providerSettings:m}),s.updateProviderDisplay(s.getProviderDisplayName(),g),s.logInfo("\u2713 Provider deleted",`Removed ${n.name}. Switched to ${m.name}.`));}}else s.logInfo("\u2713 Provider deleted",`Removed ${n.name}.`);o=!1;break}}}s.logInfo("\u2713 Done",`Provider: ${n.name}`);}catch(o){o.message==="cancelled"?s.logInfo("Cancelled","Provider not modified"):s.logInfo("Failed to update provider",o.message);}}async function fm(s,e){let t=s.getProviderByIdentifier(e);if(!(!t&&(t=await s.selectProviderFromList("Select provider to delete"),!t))){if(s.getProviderCount()<=1){s.logInfo("Cannot delete provider","At least one provider is required.");return}try{if(!await s.promptConfirmKeyword(`Type DELETE to remove provider "${t.name}"`,"delete")){s.logInfo("Deletion cancelled","Provider was not removed.");return}let r=t.id===s.providerId;if(s.deleteProvider(t.id),s.refreshProviderSettings(),r){let o=s.getDefaultProvider();if(!o){s.logInfo("Provider deleted",`Removed ${t.name}. Add a new provider with /provider add.`);return}let i=s.resolveModel(o.id);if(!i){s.logInfo("Provider deleted",`Removed ${t.name}. Configure models for ${o.name} via /model add.`);return}s.setLastSelectedModel(o.id,i),await s.applyProviderState({providerId:o.id,provider:o.protocol,model:i,providerSettings:o}),s.updateProviderDisplay(s.getProviderDisplayName(),i);}s.logInfo("Provider deleted",`Removed ${t.name}.`);}catch(n){n.message==="cancelled"?s.logInfo("Deletion cancelled"):s.logInfo("Failed to delete provider",n.message);}}}async function ym(s,e){let t=s.getProviderByIdentifier(e);if(!(!t&&(t=await s.selectProviderFromList("Select provider to set as default"),!t)))try{s.setDefaultProvider(t.id),s.logInfo("Default provider updated",`${t.name} is now the default provider.`);}catch(n){s.logInfo("Failed to set default provider",n.message);}}async function bm(s){let e=s.getProviders();if(!e||e.length===0){s.logInfo("No providers configured","Use /provider add to create one.");return}try{let t=await s.selectProviderFromList("Select provider to view/edit");if(!t)return;if(t.id==="__add__"){await Sc(s);return}await _c(s,t.id);}catch(t){t.message==="cancelled"?s.logInfo("Selection cancelled"):s.logInfo("Selection failed",t.message);}}var Oi=Qe(()=>{Gt();to();br();hm();Z();});var oC={};Vr(oC,{runExecuteShellWorker:()=>dP});function Sm(s,e){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
67
67
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
68
68
  \u25B8 \u6267\u884C\u547D\u4EE4: ${e}
69
69
  \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
70
70
 
71
71
  \u26A0 \u547D\u4EE4\u88AB\u7528\u6237\u4E2D\u65AD
72
- \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}}function rP(s,e,t,n){let r=n.length>3e3?n.slice(0,3e3)+`
72
+ \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}}function sP(s,e,t,n){let r=n.length>3e3?n.slice(0,3e3)+`
73
73
  ... (\u8F93\u51FA\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD)`:n,o=t?`\u2022 \u8FDB\u7A0B ID (PID): ${t}
74
74
  `:"";return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
75
75
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
@@ -91,14 +91,14 @@ ${r||"(\u6682\u65E0\u8F93\u51FA)"}
91
91
  - /processes - \u67E5\u770B\u6240\u6709\u540E\u53F0\u8FDB\u7A0B\u72B6\u6001
92
92
  - /kill ${t??"<pid>"} - \u7EC8\u6B62\u6B64\u8FDB\u7A0B
93
93
  - lsof -i :\u7AEF\u53E3\u53F7 - \u68C0\u67E5\u7AEF\u53E3\u5360\u7528
94
- \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:true,pid:t}}function sP(s,e,t){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
94
+ \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:true,pid:t}}function oP(s,e,t){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
95
95
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
96
96
  \u25B8 \u6267\u884C\u547D\u4EE4: ${e}
97
97
  \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
98
98
 
99
99
  \u2717 \u540E\u53F0\u542F\u52A8\u5931\u8D25:
100
100
  ${t}
101
- \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:true}}function oP(s,e,t,n,r){let o=`\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
101
+ \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:true}}function iP(s,e,t,n,r){let o=`\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
102
102
  `;return o+=`\u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
103
103
  `,o+=`\u25B8 \u6267\u884C\u547D\u4EE4: ${e}
104
104
  `,o+=`\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
@@ -115,7 +115,7 @@ ${r}
115
115
 
116
116
  `),!n&&!r&&(o+=`(\u65E0\u8F93\u51FA)
117
117
 
118
- `),o+="\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",{success:true,output:o,background:false,exitCode:t}}function iP(s,e){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
118
+ `),o+="\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",{success:true,output:o,background:false,exitCode:t}}function aP(s,e){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
119
119
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
120
120
  \u25B8 \u6267\u884C\u547D\u4EE4: ${e}
121
121
  \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
@@ -126,7 +126,7 @@ ${r}
126
126
  1. \u8FD9\u53EF\u80FD\u662F\u4E00\u4E2A\u957F\u671F\u8FD0\u884C\u7684\u8FDB\u7A0B\uFF08\u5F00\u53D1\u670D\u52A1\u5668\u7B49\uFF09
127
127
  2. \u4F7F\u7528 background=true \u53C2\u6570\u5728\u540E\u53F0\u8FD0\u884C: {"command": "${e}", "background": true}
128
128
  3. \u6216\u8005\u4F7F\u7528\u66F4\u5177\u4F53\u7684\u547D\u4EE4\u51CF\u5C11\u6267\u884C\u65F6\u95F4
129
- \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}}function aP(s,e,t,n,r){let o=r.length>3e3?r.slice(0,3e3)+`
129
+ \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}}function lP(s,e,t,n,r){let o=r.length>3e3?r.slice(0,3e3)+`
130
130
  ... (\u8F93\u51FA\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD)`:r,i=t?`\u2022 \u8FDB\u7A0B ID (PID): ${t}
131
131
  `:"";return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
132
132
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
@@ -143,7 +143,7 @@ ${o||"(\u6682\u65E0\u8F93\u51FA)"}
143
143
  - \u53EF\u4EE5\u7A0D\u540E\u4F7F\u7528 /processes \u67E5\u770B\u8FDB\u7A0B\u72B6\u6001
144
144
  - \u5982\u9700\u7EC8\u6B62\uFF0C\u4F7F\u7528 /kill ${t??"<pid>"}
145
145
  - \u5982\u679C\u8FD9\u662F\u957F\u671F\u8FD0\u884C\u7684\u670D\u52A1\uFF0C\u4E0B\u6B21\u8BF7\u4F7F\u7528 background=true
146
- \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,pid:t}}function lP(s,e,t){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
146
+ \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,pid:t}}function cP(s,e,t){return {success:true,output:`\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
147
147
  \u25B8 \u5DE5\u4F5C\u76EE\u5F55: ${s}
148
148
  \u25B8 \u6267\u884C\u547D\u4EE4: ${e}
149
149
  \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
@@ -159,7 +159,7 @@ ${t.stderr?`\u25E6 \u9519\u8BEF\u4FE1\u606F:
159
159
  ${t.stderr}
160
160
 
161
161
  `:""}
162
- \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}}function Kr(s){if(s)try{process.kill(-s,"SIGTERM");}catch{try{process.kill(s,"SIGTERM");}catch{}}}async function cP(s){let{command:e,background:t,workspaceRoot:n}=s;if(Ui=false,t)try{let i=execa(e,{shell:!0,cwd:n,detached:!0,stdio:["ignore","pipe","pipe"],env:ai()});Bn=i,i.unref();let a=i.pid,l=[],c=8e3;i.stdout?.on("data",g=>{l.push(g.toString());}),i.stderr?.on("data",g=>{l.push(g.toString());});let u=new Promise((g,h)=>{let f=setTimeout(()=>{clearInterval(v),g();},c),v=setInterval(()=>{Ui&&(clearTimeout(f),clearInterval(v),h(new Error("Command interrupted by user")));},50);v.unref?.();});try{await u;}catch{return Kr(a),Sm(n,e)}let d=l.join(""),m=rP(n,e,a,d);return i.on("exit",g=>{Bn=null,process.send&&a&&process.send({type:"background_exit",pid:a,exitCode:g??0}),process.exit(0);}),m}catch(i){return sP(n,e,i.message)}let r=1e4,o=12e4;try{let i=execa(e,{shell:!0,cwd:n,reject:!1,env:ai()});Bn=i;let a=i.pid,l=Date.now(),c=[],u=[];i.stdout?.on("data",C=>{c.push(C.toString());}),i.stderr?.on("data",C=>{u.push(C.toString());});let d=i.then(C=>({type:"completed",result:C})),m=new Promise(C=>{setTimeout(()=>{C({type:"early_return"});},r).unref?.();}),g=new Promise(C=>{setTimeout(()=>{C({type:"hard_timeout"});},o).unref?.();}),h=new Promise(C=>{let T=setInterval(()=>{Ui&&(clearInterval(T),C({type:"aborted"}));},100);T.unref?.();}),f=await Promise.race([d,m,h]);if(f.type==="aborted")return a&&Kr(a),Bn=null,Sm(n,e);if(f.type==="completed")return Bn=null,oP(n,e,f.result.exitCode??0,c.join(""),u.join(""));let v=Math.floor((Date.now()-l)/1e3),b=c.join("")+u.join("");return setImmediate(async()=>{let C=await Promise.race([d,g,h]);if(C.type==="aborted"?a&&Kr(a):C.type==="hard_timeout"&&a&&Kr(a),Bn=null,process.send&&a){let T=C.type==="completed"?C.result:null;process.send({type:"background_exit",pid:a,exitCode:T?.exitCode??(C.type==="hard_timeout"?-1:0)});}}),aP(n,e,a,v,b)}catch(i){return Ui?(i?.pid&&Kr(i.pid),Sm(n,e)):i?.timedOut?iP(n,e):lP(n,e,i)}}async function uP(){process.env[nP]==="execute_shell"&&(process.on("message",async s=>{if(!(!s||typeof s!="object")){if(s.type==="abort"){Ui=true,Bn?.pid&&Kr(Bn.pid);return}if(s.type==="execute_shell")try{let e=await cP(s.payload);process.send&&process.send({type:"result",...e}),e.background||process.exit(0);}catch(e){let t={success:false,output:`execute_shell worker failed: ${e?.message||e}`,background:false};process.send&&process.send({type:"result",...t}),process.exit(1);}}}),process.on("disconnect",()=>{Bn?.pid&&Kr(Bn.pid),process.exit(1);}),process.send&&process.send({type:"ready",pid:process.pid}));}var nP,Bn,Ui,iC=Qe(()=>{Ed();nP="NEOX_WORKER",Bn=null,Ui=false;});Z();Z();var Gc=class{lastCheck=performance$1.now();interval=null;config;stats={currentDelay:0,averageDelay:0,maxDelay:0,warnCount:0,criticalCount:0};delayHistory=[];maxHistorySize=60;recoveryCallbacks=[];lastRecoveryTime=0;recoveryCooldown=1e4;suspendThreshold=3e4;constructor(e){this.config={checkInterval:e?.checkInterval??1e3,warnThreshold:e?.warnThreshold??5e3,criticalThreshold:e?.criticalThreshold??1e4,autoRecover:e?.autoRecover??true};}start(){if(this.interval){p.warn("EVENT_LOOP","Monitor already started");return}this.lastCheck=performance$1.now(),this.interval=setInterval(()=>{this.check();},this.config.checkInterval),this.interval.unref(),p.info("EVENT_LOOP",`Monitor started (check interval: ${this.config.checkInterval}ms)`);}stop(){this.interval&&(clearInterval(this.interval),this.interval=null,p.info("EVENT_LOOP","Monitor stopped"));}check(){let e=performance$1.now(),t=this.config.checkInterval,r=e-this.lastCheck-t;if(r>this.suspendThreshold){p.info("EVENT_LOOP",`\u{1F6CC} System suspend/resume detected (${Math.round(r/1e3)}s gap), triggering recovery`,{suspendDuration:Math.round(r/1e3)}),this.lastCheck=e,this.delayHistory=[],this.triggerSuspendRecovery();return}this.stats.currentDelay=r,this.delayHistory.push(r),this.delayHistory.length>this.maxHistorySize&&this.delayHistory.shift(),this.stats.averageDelay=this.delayHistory.reduce((o,i)=>o+i,0)/this.delayHistory.length,r>this.stats.maxDelay&&(this.stats.maxDelay=r),r>this.config.criticalThreshold?this.handleCriticalDelay(r):r>this.config.warnThreshold&&this.handleWarning(r),this.lastCheck=e;}handleWarning(e){this.stats.warnCount++,p.warn("EVENT_LOOP",`Event loop delay detected: ${Math.round(e)}ms (expected ~${this.config.checkInterval}ms)`,{currentDelay:Math.round(e),averageDelay:Math.round(this.stats.averageDelay),maxDelay:Math.round(this.stats.maxDelay)});}handleCriticalDelay(e){this.stats.criticalCount++,p.error("EVENT_LOOP",`\u{1F6A8} CRITICAL: Severe event loop delay detected: ${Math.round(e)}ms`,{currentDelay:Math.round(e),averageDelay:Math.round(this.stats.averageDelay),maxDelay:Math.round(this.stats.maxDelay),criticalCount:this.stats.criticalCount}),this.config.autoRecover&&this.triggerRecovery();}triggerRecovery(){let e=Date.now();if(e-this.lastRecoveryTime<this.recoveryCooldown){p.debug("EVENT_LOOP",`Recovery skipped (cooldown: ${Math.round((this.recoveryCooldown-(e-this.lastRecoveryTime))/1e3)}s)`);return}this.lastRecoveryTime=e,p.warn("EVENT_LOOP","\u{1F504} Triggering emergency recovery callbacks");for(let t of this.recoveryCallbacks)try{t(this.getStats());}catch(n){p.error("EVENT_LOOP","Recovery callback failed",{error:n});}global.gc&&(p.debug("EVENT_LOOP","Running forced GC"),global.gc()),this.forceStdinRecovery();}triggerSuspendRecovery(){p.info("EVENT_LOOP","\u{1F504} Triggering suspend recovery");for(let e of this.recoveryCallbacks)try{e(this.getStats());}catch(t){p.error("EVENT_LOOP","Recovery callback failed",{error:t});}this.forceStdinRecovery(),this.lastRecoveryTime=Date.now();}forceStdinRecovery(){try{if(!process.stdin.isTTY){p.warn("EVENT_LOOP","stdin is not a TTY, cannot recover");return}let e=process.stdin.isPaused?.(),t=process.stdin.isRaw;p.info("EVENT_LOOP","Attempting stdin recovery",{wasPaused:e,wasRaw:t,destroyed:process.stdin.destroyed}),e&&(process.stdin.resume(),p.info("EVENT_LOOP","\u2713 stdin resumed")),!process.stdin.destroyed&&!t&&(process.stdin.setRawMode(!0),p.info("EVENT_LOOP","\u2713 raw mode restored")),p.info("EVENT_LOOP","\u2713 stdin recovery completed");}catch(e){p.error("EVENT_LOOP","stdin recovery failed",{error:e});}}onRecovery(e){this.recoveryCallbacks.push(e);}getStats(){return {...this.stats}}resetStats(){this.stats={currentDelay:0,averageDelay:0,maxDelay:0,warnCount:0,criticalCount:0},this.delayHistory=[],p.info("EVENT_LOOP","Statistics reset");}},jc=null;function wC(s){return jc||(jc=new Gc(s)),jc}function Nm(s){let e=wC(s);return e.start(),e}Z();function kC(){let s={useInputWorker:process.env.NEOX_EXPERIMENTAL_INPUT_WORKER!=="0",useStreamProcessor:process.env.NEOX_EXPERIMENTAL_STREAM_PROCESSOR!=="0",eventLoopMonitoring:process.env.NEOX_EVENT_LOOP_MONITORING!=="0",debug:process.env.CLI_DEBUG==="1"};return s.debug&&p.info("EXPERIMENTAL","Loaded configuration",s),s}var Wc=null;function Lm(){return Wc||(Wc=kC()),Wc}var Om=new Map,_C=s=>{if(s.length===0)return {width:0,height:0};let e=Om.get(s);if(e)return e;let t=SC(s),n=s.split(`
162
+ \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}}function Kr(s){if(s)try{process.kill(-s,"SIGTERM");}catch{try{process.kill(s,"SIGTERM");}catch{}}}async function uP(s){let{command:e,background:t,workspaceRoot:n}=s;if(Ui=false,t)try{let i=execa(e,{shell:!0,cwd:n,detached:!0,stdio:["ignore","pipe","pipe"],env:ai()});Bn=i,i.unref();let a=i.pid,l=[],c=8e3;i.stdout?.on("data",g=>{l.push(g.toString());}),i.stderr?.on("data",g=>{l.push(g.toString());});let u=new Promise((g,h)=>{let f=setTimeout(()=>{clearInterval(v),g();},c),v=setInterval(()=>{Ui&&(clearTimeout(f),clearInterval(v),h(new Error("Command interrupted by user")));},50);v.unref?.();});try{await u;}catch{return Kr(a),Sm(n,e)}let d=l.join(""),m=sP(n,e,a,d);return i.on("exit",g=>{Bn=null,process.send&&a&&process.send({type:"background_exit",pid:a,exitCode:g??0}),process.exit(0);}),m}catch(i){return oP(n,e,i.message)}let r=1e4,o=12e4;try{let i=execa(e,{shell:!0,cwd:n,reject:!1,env:ai()});Bn=i;let a=i.pid,l=Date.now(),c=[],u=[];i.stdout?.on("data",C=>{c.push(C.toString());}),i.stderr?.on("data",C=>{u.push(C.toString());});let d=i.then(C=>({type:"completed",result:C})),m=new Promise(C=>{setTimeout(()=>{C({type:"early_return"});},r).unref?.();}),g=new Promise(C=>{setTimeout(()=>{C({type:"hard_timeout"});},o).unref?.();}),h=new Promise(C=>{let T=setInterval(()=>{Ui&&(clearInterval(T),C({type:"aborted"}));},100);T.unref?.();}),f=await Promise.race([d,m,h]);if(f.type==="aborted")return a&&Kr(a),Bn=null,Sm(n,e);if(f.type==="completed")return Bn=null,iP(n,e,f.result.exitCode??0,c.join(""),u.join(""));let v=Math.floor((Date.now()-l)/1e3),b=c.join("")+u.join("");return setImmediate(async()=>{let C=await Promise.race([d,g,h]);if(C.type==="aborted"?a&&Kr(a):C.type==="hard_timeout"&&a&&Kr(a),Bn=null,process.send&&a){let T=C.type==="completed"?C.result:null;process.send({type:"background_exit",pid:a,exitCode:T?.exitCode??(C.type==="hard_timeout"?-1:0)});}}),lP(n,e,a,v,b)}catch(i){return Ui?(i?.pid&&Kr(i.pid),Sm(n,e)):i?.timedOut?aP(n,e):cP(n,e,i)}}async function dP(){process.env[rP]==="execute_shell"&&(process.on("message",async s=>{if(!(!s||typeof s!="object")){if(s.type==="abort"){Ui=true,Bn?.pid&&Kr(Bn.pid);return}if(s.type==="execute_shell")try{let e=await uP(s.payload);process.send&&process.send({type:"result",...e}),e.background||process.exit(0);}catch(e){let t={success:false,output:`execute_shell worker failed: ${e?.message||e}`,background:false};process.send&&process.send({type:"result",...t}),process.exit(1);}}}),process.on("disconnect",()=>{Bn?.pid&&Kr(Bn.pid),process.exit(1);}),process.send&&process.send({type:"ready",pid:process.pid}));}var rP,Bn,Ui,iC=Qe(()=>{Ed();rP="NEOX_WORKER",Bn=null,Ui=false;});Z();Z();var Gc=class{lastCheck=performance$1.now();interval=null;config;stats={currentDelay:0,averageDelay:0,maxDelay:0,warnCount:0,criticalCount:0};delayHistory=[];maxHistorySize=60;recoveryCallbacks=[];lastRecoveryTime=0;recoveryCooldown=1e4;suspendThreshold=3e4;constructor(e){this.config={checkInterval:e?.checkInterval??1e3,warnThreshold:e?.warnThreshold??5e3,criticalThreshold:e?.criticalThreshold??1e4,autoRecover:e?.autoRecover??true};}start(){if(this.interval){p.warn("EVENT_LOOP","Monitor already started");return}this.lastCheck=performance$1.now(),this.interval=setInterval(()=>{this.check();},this.config.checkInterval),this.interval.unref(),p.info("EVENT_LOOP",`Monitor started (check interval: ${this.config.checkInterval}ms)`);}stop(){this.interval&&(clearInterval(this.interval),this.interval=null,p.info("EVENT_LOOP","Monitor stopped"));}check(){let e=performance$1.now(),t=this.config.checkInterval,r=e-this.lastCheck-t;if(r>this.suspendThreshold){p.info("EVENT_LOOP",`\u{1F6CC} System suspend/resume detected (${Math.round(r/1e3)}s gap), triggering recovery`,{suspendDuration:Math.round(r/1e3)}),this.lastCheck=e,this.delayHistory=[],this.triggerSuspendRecovery();return}this.stats.currentDelay=r,this.delayHistory.push(r),this.delayHistory.length>this.maxHistorySize&&this.delayHistory.shift(),this.stats.averageDelay=this.delayHistory.reduce((o,i)=>o+i,0)/this.delayHistory.length,r>this.stats.maxDelay&&(this.stats.maxDelay=r),r>this.config.criticalThreshold?this.handleCriticalDelay(r):r>this.config.warnThreshold&&this.handleWarning(r),this.lastCheck=e;}handleWarning(e){this.stats.warnCount++,p.warn("EVENT_LOOP",`Event loop delay detected: ${Math.round(e)}ms (expected ~${this.config.checkInterval}ms)`,{currentDelay:Math.round(e),averageDelay:Math.round(this.stats.averageDelay),maxDelay:Math.round(this.stats.maxDelay)});}handleCriticalDelay(e){this.stats.criticalCount++,p.error("EVENT_LOOP",`\u{1F6A8} CRITICAL: Severe event loop delay detected: ${Math.round(e)}ms`,{currentDelay:Math.round(e),averageDelay:Math.round(this.stats.averageDelay),maxDelay:Math.round(this.stats.maxDelay),criticalCount:this.stats.criticalCount}),this.config.autoRecover&&this.triggerRecovery();}triggerRecovery(){let e=Date.now();if(e-this.lastRecoveryTime<this.recoveryCooldown){p.debug("EVENT_LOOP",`Recovery skipped (cooldown: ${Math.round((this.recoveryCooldown-(e-this.lastRecoveryTime))/1e3)}s)`);return}this.lastRecoveryTime=e,p.warn("EVENT_LOOP","\u{1F504} Triggering emergency recovery callbacks");for(let t of this.recoveryCallbacks)try{t(this.getStats());}catch(n){p.error("EVENT_LOOP","Recovery callback failed",{error:n});}global.gc&&(p.debug("EVENT_LOOP","Running forced GC"),global.gc()),this.forceStdinRecovery();}triggerSuspendRecovery(){p.info("EVENT_LOOP","\u{1F504} Triggering suspend recovery");for(let e of this.recoveryCallbacks)try{e(this.getStats());}catch(t){p.error("EVENT_LOOP","Recovery callback failed",{error:t});}this.forceStdinRecovery(),this.lastRecoveryTime=Date.now();}forceStdinRecovery(){try{if(!process.stdin.isTTY){p.warn("EVENT_LOOP","stdin is not a TTY, cannot recover");return}let e=process.stdin.isPaused?.(),t=process.stdin.isRaw;p.info("EVENT_LOOP","Attempting stdin recovery",{wasPaused:e,wasRaw:t,destroyed:process.stdin.destroyed}),e&&(process.stdin.resume(),p.info("EVENT_LOOP","\u2713 stdin resumed")),!process.stdin.destroyed&&!t&&(process.stdin.setRawMode(!0),p.info("EVENT_LOOP","\u2713 raw mode restored")),p.info("EVENT_LOOP","\u2713 stdin recovery completed");}catch(e){p.error("EVENT_LOOP","stdin recovery failed",{error:e});}}onRecovery(e){this.recoveryCallbacks.push(e);}getStats(){return {...this.stats}}resetStats(){this.stats={currentDelay:0,averageDelay:0,maxDelay:0,warnCount:0,criticalCount:0},this.delayHistory=[],p.info("EVENT_LOOP","Statistics reset");}},jc=null;function wC(s){return jc||(jc=new Gc(s)),jc}function Nm(s){let e=wC(s);return e.start(),e}Z();function kC(){let s={useInputWorker:process.env.NEOX_EXPERIMENTAL_INPUT_WORKER!=="0",useStreamProcessor:process.env.NEOX_EXPERIMENTAL_STREAM_PROCESSOR!=="0",eventLoopMonitoring:process.env.NEOX_EVENT_LOOP_MONITORING!=="0",debug:process.env.CLI_DEBUG==="1"};return s.debug&&p.info("EXPERIMENTAL","Loaded configuration",s),s}var Wc=null;function Lm(){return Wc||(Wc=kC()),Wc}var Om=new Map,_C=s=>{if(s.length===0)return {width:0,height:0};let e=Om.get(s);if(e)return e;let t=SC(s),n=s.split(`
163
163
  `).length,r={width:t,height:n};return Om.set(s,r),r},Hc=_C;function Hi(s,e,t){if(s.charAt(e)===" ")return e;let n=t?1:-1;for(let r=0;r<=3;r++){let o=e+r*n;if(s.charAt(o)===" ")return o}return e}function zc(s,e,t={}){let{position:n="end",space:r=false,preferTruncationOnSpace:o=false}=t,{truncationCharacter:i="\u2026"}=t;if(typeof s!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof s}`);if(typeof e!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof e}`);if(e<1)return "";let a=Wi(s);if(a<=e)return s;if(e===1)return i;let l={ESC:27,LEFT_BRACKET:91,LETTER_M:109},c=h=>h>=48&&h<=57||h===59;function u(h){let f=0;for(;f+2<h.length&&h.codePointAt(f)===l.ESC&&h.codePointAt(f+1)===l.LEFT_BRACKET;){let v=f+2;for(;v<h.length&&c(h.codePointAt(v));)v++;if(v<h.length&&h.codePointAt(v)===l.LETTER_M){f=v+1;continue}break}return f}function d(h){let f=h.length;for(;f>1&&h.codePointAt(f-1)===l.LETTER_M;){let v=f-2;for(;v>=0&&c(h.codePointAt(v));)v--;if(v>=1&&h.codePointAt(v-1)===l.ESC&&h.codePointAt(v)===l.LEFT_BRACKET){f=v-1;continue}break}return f}function m(h,f){let v=d(h);return v===h.length?h+f:h.slice(0,v)+f+h.slice(v)}function g(h,f){let v=u(f);return v===0?h+f:f.slice(0,v)+h+f.slice(v)}if(n==="start"){if(o){let f=Hi(s,a-e+1,true),v=sr(s,f,a).trim();return g(i,v)}r&&(i+=" ");let h=sr(s,a-e+Wi(i),a);return g(i,h)}if(n==="middle"){r&&(i=` ${i} `);let h=Math.floor(e/2);if(o){let f=Hi(s,h),v=Hi(s,a-(e-h)+1,true);return sr(s,0,f)+i+sr(s,v,a).trim()}return sr(s,0,h)+i+sr(s,a-(e-h)+Wi(i),a)}if(n==="end"){if(o){let f=Hi(s,e-1),v=sr(s,0,f);return m(v,i)}r&&(i=` ${i}`);let h=sr(s,0,e-Wi(i));return m(h,i)}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${n}`)}var $m={},EC=(s,e,t)=>{let n=s+String(e)+String(t),r=$m[n];if(r)return r;let o=s;if(t==="wrap"&&(o=IC(s,e,{trim:false,hard:true})),t.startsWith("truncate")){let i="end";t==="truncate-middle"&&(i="middle"),t==="truncate-start"&&(i="start"),o=zc(s,e,{position:i});}return $m[n]=o,o},zi=EC;var Bm=s=>{let e="";for(let t=0;t<s.childNodes.length;t++){let n=s.childNodes[t];if(n===void 0)continue;let r="";n.nodeName==="#text"?r=n.nodeValue:((n.nodeName==="ink-text"||n.nodeName==="ink-virtual-text")&&(r=Bm(n)),r.length>0&&typeof n.internal_transform=="function"&&(r=n.internal_transform(r,t))),e+=r;}return e},co=Bm;var qi=s=>{let e={nodeName:s,style:{},attributes:{},childNodes:[],parentNode:void 0,yogaNode:s==="ink-virtual-text"?void 0:ye.Node.create(),internal_accessibility:{}};return s==="ink-text"&&e.yogaNode?.setMeasureFunc(MC.bind(null,e)),e},Ki=(s,e)=>{e.parentNode&&uo(e.parentNode,e),e.parentNode=s,s.childNodes.push(e),e.yogaNode&&s.yogaNode?.insertChild(e.yogaNode,s.yogaNode.getChildCount()),(s.nodeName==="ink-text"||s.nodeName==="ink-virtual-text")&&Ji(s);},qc=(s,e,t)=>{e.parentNode&&uo(e.parentNode,e),e.parentNode=s;let n=s.childNodes.indexOf(t);if(n>=0){s.childNodes.splice(n,0,e),e.yogaNode&&s.yogaNode?.insertChild(e.yogaNode,n);return}s.childNodes.push(e),e.yogaNode&&s.yogaNode?.insertChild(e.yogaNode,s.yogaNode.getChildCount()),(s.nodeName==="ink-text"||s.nodeName==="ink-virtual-text")&&Ji(s);},uo=(s,e)=>{e.yogaNode&&e.parentNode?.yogaNode?.removeChild(e.yogaNode),e.parentNode=void 0;let t=s.childNodes.indexOf(e);t>=0&&s.childNodes.splice(t,1),(s.nodeName==="ink-text"||s.nodeName==="ink-virtual-text")&&Ji(s);},Kc=(s,e,t)=>{if(e==="internal_accessibility"){s.internal_accessibility=t;return}s.attributes[e]=t;},Jc=(s,e)=>{s.style=e;},Fm=s=>{let e={nodeName:"#text",nodeValue:s,yogaNode:void 0,parentNode:void 0,style:{}};return po(e,s),e},MC=function(s,e){let t=s.nodeName==="#text"?s.nodeValue:co(s),n=Hc(t);if(n.width<=e||n.width>=1&&e>0&&e<1)return n;let r=s.style?.textWrap??"wrap",o=zi(t,e,r);return Hc(o)},Um=s=>{if(s?.parentNode)return s.yogaNode??Um(s.parentNode)},Ji=s=>{Um(s)?.markDirty();},po=(s,e)=>{typeof e!="string"&&(e=String(e)),s.nodeValue=e,Ji(s);};var RC=(s,e)=>{"position"in e&&s.setPositionType(e.position==="absolute"?ye.POSITION_TYPE_ABSOLUTE:ye.POSITION_TYPE_RELATIVE);},DC=(s,e)=>{"margin"in e&&s.setMargin(ye.EDGE_ALL,e.margin??0),"marginX"in e&&s.setMargin(ye.EDGE_HORIZONTAL,e.marginX??0),"marginY"in e&&s.setMargin(ye.EDGE_VERTICAL,e.marginY??0),"marginLeft"in e&&s.setMargin(ye.EDGE_START,e.marginLeft||0),"marginRight"in e&&s.setMargin(ye.EDGE_END,e.marginRight||0),"marginTop"in e&&s.setMargin(ye.EDGE_TOP,e.marginTop||0),"marginBottom"in e&&s.setMargin(ye.EDGE_BOTTOM,e.marginBottom||0);},NC=(s,e)=>{"padding"in e&&s.setPadding(ye.EDGE_ALL,e.padding??0),"paddingX"in e&&s.setPadding(ye.EDGE_HORIZONTAL,e.paddingX??0),"paddingY"in e&&s.setPadding(ye.EDGE_VERTICAL,e.paddingY??0),"paddingLeft"in e&&s.setPadding(ye.EDGE_LEFT,e.paddingLeft||0),"paddingRight"in e&&s.setPadding(ye.EDGE_RIGHT,e.paddingRight||0),"paddingTop"in e&&s.setPadding(ye.EDGE_TOP,e.paddingTop||0),"paddingBottom"in e&&s.setPadding(ye.EDGE_BOTTOM,e.paddingBottom||0);},LC=(s,e)=>{"flexGrow"in e&&s.setFlexGrow(e.flexGrow??0),"flexShrink"in e&&s.setFlexShrink(typeof e.flexShrink=="number"?e.flexShrink:1),"flexWrap"in e&&(e.flexWrap==="nowrap"&&s.setFlexWrap(ye.WRAP_NO_WRAP),e.flexWrap==="wrap"&&s.setFlexWrap(ye.WRAP_WRAP),e.flexWrap==="wrap-reverse"&&s.setFlexWrap(ye.WRAP_WRAP_REVERSE)),"flexDirection"in e&&(e.flexDirection==="row"&&s.setFlexDirection(ye.FLEX_DIRECTION_ROW),e.flexDirection==="row-reverse"&&s.setFlexDirection(ye.FLEX_DIRECTION_ROW_REVERSE),e.flexDirection==="column"&&s.setFlexDirection(ye.FLEX_DIRECTION_COLUMN),e.flexDirection==="column-reverse"&&s.setFlexDirection(ye.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in e&&(typeof e.flexBasis=="number"?s.setFlexBasis(e.flexBasis):typeof e.flexBasis=="string"?s.setFlexBasisPercent(Number.parseInt(e.flexBasis,10)):s.setFlexBasis(Number.NaN)),"alignItems"in e&&((e.alignItems==="stretch"||!e.alignItems)&&s.setAlignItems(ye.ALIGN_STRETCH),e.alignItems==="flex-start"&&s.setAlignItems(ye.ALIGN_FLEX_START),e.alignItems==="center"&&s.setAlignItems(ye.ALIGN_CENTER),e.alignItems==="flex-end"&&s.setAlignItems(ye.ALIGN_FLEX_END)),"alignSelf"in e&&((e.alignSelf==="auto"||!e.alignSelf)&&s.setAlignSelf(ye.ALIGN_AUTO),e.alignSelf==="flex-start"&&s.setAlignSelf(ye.ALIGN_FLEX_START),e.alignSelf==="center"&&s.setAlignSelf(ye.ALIGN_CENTER),e.alignSelf==="flex-end"&&s.setAlignSelf(ye.ALIGN_FLEX_END)),"justifyContent"in e&&((e.justifyContent==="flex-start"||!e.justifyContent)&&s.setJustifyContent(ye.JUSTIFY_FLEX_START),e.justifyContent==="center"&&s.setJustifyContent(ye.JUSTIFY_CENTER),e.justifyContent==="flex-end"&&s.setJustifyContent(ye.JUSTIFY_FLEX_END),e.justifyContent==="space-between"&&s.setJustifyContent(ye.JUSTIFY_SPACE_BETWEEN),e.justifyContent==="space-around"&&s.setJustifyContent(ye.JUSTIFY_SPACE_AROUND),e.justifyContent==="space-evenly"&&s.setJustifyContent(ye.JUSTIFY_SPACE_EVENLY));},OC=(s,e)=>{"width"in e&&(typeof e.width=="number"?s.setWidth(e.width):typeof e.width=="string"?s.setWidthPercent(Number.parseInt(e.width,10)):s.setWidthAuto()),"height"in e&&(typeof e.height=="number"?s.setHeight(e.height):typeof e.height=="string"?s.setHeightPercent(Number.parseInt(e.height,10)):s.setHeightAuto()),"minWidth"in e&&(typeof e.minWidth=="string"?s.setMinWidthPercent(Number.parseInt(e.minWidth,10)):s.setMinWidth(e.minWidth??0)),"minHeight"in e&&(typeof e.minHeight=="string"?s.setMinHeightPercent(Number.parseInt(e.minHeight,10)):s.setMinHeight(e.minHeight??0));},$C=(s,e)=>{"display"in e&&s.setDisplay(e.display==="flex"?ye.DISPLAY_FLEX:ye.DISPLAY_NONE);},BC=(s,e)=>{if("borderStyle"in e){let t=e.borderStyle?1:0;e.borderTop!==false&&s.setBorder(ye.EDGE_TOP,t),e.borderBottom!==false&&s.setBorder(ye.EDGE_BOTTOM,t),e.borderLeft!==false&&s.setBorder(ye.EDGE_LEFT,t),e.borderRight!==false&&s.setBorder(ye.EDGE_RIGHT,t);}},FC=(s,e)=>{"gap"in e&&s.setGap(ye.GUTTER_ALL,e.gap??0),"columnGap"in e&&s.setGap(ye.GUTTER_COLUMN,e.columnGap??0),"rowGap"in e&&s.setGap(ye.GUTTER_ROW,e.rowGap??0);},UC=(s,e={})=>{RC(s,e),DC(s,e),NC(s,e),LC(s,e),OC(s,e),$C(s,e),BC(s,e),FC(s,e);},Vc=UC;if(Qt.env.DEV==="true")try{await Promise.resolve().then(()=>(Gm(),jm));}catch(s){if(s.code==="ERR_MODULE_NOT_FOUND")console.warn(`
164
164
  The environment variable DEV is set to true, so Ink tried to import \`react-devtools-core\`,
165
165
  but this failed as it was not installed. Debugging with React Devtools requires it.
@@ -1641,7 +1641,7 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1641
1641
  \u25B8 [${Re}] ${Ne} (${te.matchCount} \u5904)`),le.push("\u2500".repeat(50));let De=-10;for(let ke of te.matches){if(ee>=m)break;G++,G%X===0&&await T(),ke.lineNum>De+1&&De>0&&le.push(" \u2504\u2504\u2504");let Y=ke.isMatch?"\u25B6":" ";le.push(`${Y}${String(ke.lineNum).padStart(5)} \u2502 ${ke.line}`),De=ke.lineNum,ke.isMatch&&ee++;}}}return ue.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"')):ve.length>0&&(le.push(""),le.push("\u{1F4A1} \u6279\u91CF\u8BFB\u53D6:"),ve.slice(0,3).forEach(G=>{le.push(` readfile(path="${G.file}", anchor_lines=[${G.anchor_lines.join(",")}], num_lines=${G.num_lines})`);})),JSON.stringify(Oe("search","success",ue.length>0?`search "${K}" (${se} matches)`:`search "${K}" (no matches)`,le.join(`
1642
1642
  `),{metadata:{mode:"content",strategy:de?"rg":"fallback",regex:P.some(G=>G.regex),case_insensitive:u,path:$,resolved_from:N,queries:P,matches:L,read_hints:ve,files_with_matches:ae,command:V.length>0?V[0]:void 0}}))}catch(f){return JSON.stringify(Oe("search","error",`search failed: ${f.message}`,void 0,{error:f.message}))}}},c_={name:pl.name,description:pl.description,parameters:pl.parameters,permission:{category:"read",allowInAskMode:true},async function(s){return Qf(s)}},cy=[N0,F0,W0,H0,z0,U0,j0,G0,J0,V0,Y0,X0,Q0,Z0,n_,r_,s_,q0,K0,Lf,o_,l_,id,ad,ld,Gf,c_];async function Ls(s,e){e&&_0(e);let t=e?.capabilities??ht.capabilities,n=nt(),r=[...cy];if(s&&r.push(Wf(s)),n.webSearch?.enabled&&r.push(wd),n.javaDebug?.enabled)try{let c=await Id(n.javaDebug?.jarPath);r.push(...c),Be.info("TOOLS",`Java Debug \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){Be.error("TOOLS",`Java Debug \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`),Be.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=Xu(s);r.push(...c),Be.info("TOOLS",`readfile \u5DE5\u5177\u5DF2\u542F\u7528 (${c.length} \u4E2A\u5DE5\u5177)`);}catch(c){Be.error("TOOLS",`readfile \u5DE5\u5177\u52A0\u8F7D\u5931\u8D25: ${c.message}`);}let o=typeof process<"u"&&process.type==="renderer";t?.terminal&&o&&r.push(...nl()),t?.editor&&o&&r.push(...rl());let i=E0(r,t),a=n.enabledTools||{};return i.filter(c=>a[c.name]!==false)}yn();var uy=({version:s,provider:e,model:t,workDir:n})=>{let r=(f,v=40)=>{if(f.length<=v)return f;let b=f.split("/");return b.length<=2?f.slice(0,v-3)+"...":"~/"+b.slice(-2).join("/")},o=(f,v=38)=>f.length<=v?f:f.slice(0,v-3)+"...",i=r(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,v,b,C)=>I.createElement(y,null,I.createElement(y,{color:u},"\u2502"),I.createElement(y,null," "),f,I.createElement(y,null,m(l-1-v)),I.createElement(y,{color:u},"\u2502"),I.createElement(y,null," "),b,I.createElement(y,null,m(c-1-C)),I.createElement(y,{color:u},"\u2502")),h=(f,v)=>I.createElement(y,null,I.createElement(y,{color:u},"\u2502"),I.createElement(y,null," "),f,I.createElement(y,null,m(l-1-v)),I.createElement(y,{color:u},"\u251C","\u2500".repeat(c),"\u2524"));return I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{color:u},"\u256D"+"\u2500".repeat(l)+"\u252C"+"\u2500".repeat(c)+"\u256E"),g(I.createElement(I.Fragment,null,I.createElement(y,{bold:true,color:"cyan"},"Neox"),I.createElement(y,{color:"gray"}," v",s)),6+s.length,I.createElement(y,{color:"yellow",bold:true},"Tips for getting started"),24),g(I.createElement(y,{color:"gray"},"Welcome! Enjoy!"),15,I.createElement(y,null,"Type your message to start"),26),g(I.createElement(y,null," "),1,I.createElement(y,null,"/help or ? for commands"),23),g(I.createElement(y,{color:d[0].c},d[0].t),d[0].t.length,I.createElement(y,null,"Press ? to see all shortcuts"),28),g(I.createElement(y,{color:d[1].c},d[1].t),d[1].t.length,I.createElement(y,null," "),1),h(I.createElement(y,{color:d[2].c},d[2].t),d[2].t.length),g(I.createElement(y,{color:d[3].c},d[3].t),d[3].t.length,I.createElement(y,{color:"blue",bold:true},"What is Neox?"),13),g(I.createElement(y,{color:d[4].c},d[4].t),d[4].t.length,I.createElement(y,null,"Your intelligent coding assistant"),33),g(I.createElement(y,null," "),1,I.createElement(y,null,"Multi-agent collaboration support"),33),g(I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan"},"Provider"),I.createElement(y,null," ",e)),9+e.length,I.createElement(y,null,"Smart context management"),24),g(I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan"},"Model "),I.createElement(y,null," ",a)),9+a.length,I.createElement(y,null," "),1),g(I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan"},"Path "),I.createElement(y,{color:"gray"}," ",i)),9+i.length,I.createElement(y,null," "),1),I.createElement(y,{color:u},"\u2570"+"\u2500".repeat(l)+"\u2534"+"\u2500".repeat(c)+"\u256F"))};function Mt(s){let e=0,t=s.length;for(;e<t&&s[e].trim()==="";)e+=1;for(;t>e&&s[t-1].trim()==="";)t-=1;return s.slice(e,t)}var dy=({message:s,timestamp:e})=>{let t="",n=0;if(typeof s.content=="string")t=s.content;else if(Array.isArray(s.content))for(let o of s.content)o.type==="text"?t+=o.text:o.type==="image_url"&&n++;let r=Mt(t.split(`
1643
1643
  `));return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"green",bold:true},"\u25B6 You"),n>0&&I.createElement(y,{dimColor:true}," \u{1F4CE} ",n," image",n>1?"s":"")),r.map((o,i)=>I.createElement(S,{key:i},I.createElement(y,{dimColor:true},i===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap"},o))))};var py=({message:s,timestamp:e,sourceLabel:t,sourceType:n})=>{let r="";if(typeof s.content=="string")r=s.content;else if(Array.isArray(s.content))for(let l of s.content)l.type==="text"&&(r+=l.text);let o=Mt(r.split(`
1644
- `)),i=s.role==="assistant",a=t||"Supervisor";return i?I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"magenta",bold:true},"\u25CF ",a)),o.map((l,c)=>I.createElement(S,{key:c},I.createElement(y,{dimColor:true},c===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap"},l)))):I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"magenta",bold:true},"\u25B6 ",a)),o.map((l,c)=>I.createElement(S,{key:c},I.createElement(y,{dimColor:true},c===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap"},l))))};var Fd=new Marked,bn=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"]}},emoji:false,reflowText:false,width:80});bn.renderer.heading;bn.renderer.heading=function(s){let e=s.depth||1,t=s.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
1644
+ `)),i=s.role==="assistant",a=t||"Supervisor";return i?I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"magenta",bold:true},"\u25CF ",a)),o.map((l,c)=>I.createElement(S,{key:c},I.createElement(y,{dimColor:true},c===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap"},l)))):I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"magenta",bold:true},"\u25B6 ",a)),o.map((l,c)=>I.createElement(S,{key:c},I.createElement(y,{dimColor:true},c===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap"},l))))};function h_(s){let e=0;for(let t of s){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 Fd=new Marked,bn=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:h_},emoji:false,reflowText:false,width:80});bn.renderer.heading;bn.renderer.heading=function(s){let e=s.depth||1,t=s.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
1645
1645
 
1646
1646
  `};bn.renderer.strong=function(s){return `\x1B[1m${s.text||""}\x1B[0m`};bn.renderer.em=function(s){return `\x1B[3m${s.text||""}\x1B[0m`};bn.renderer.codespan=function(s){return `\x1B[32m\`${s.text||""}\`\x1B[0m`};bn.renderer.link=function(s){let e=s.href||"";return `\x1B[4m\x1B[34m${s.text||""}\x1B[0m (${e})`};bn.renderer.listitem=function(s){let e="";return this.parser&&s.tokens?e=this.parser.parseInline(s.tokens):e=s.text||"",` \u2022 ${e}
1647
1647
  `};bn.renderer.blockquote=function(s){let e="";return this.parser&&s.tokens?e=this.parser.parse(s.tokens):e=s.text||"",e.split(`
@@ -1650,8 +1650,8 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1650
1650
  `};bn.renderer.hr=function(){return "\u2500".repeat(40)+`
1651
1651
  `};bn.renderer.paragraph=function(s){let e="";return this.parser&&s.tokens?e=this.parser.parseInline(s.tokens):e=s.text||"",`${e}
1652
1652
 
1653
- `};Fd.use(bn);function h_(s){let e=s.split(`
1654
- `),t=-1,n=false,r=0;for(let l=0;l<e.length;l++){let c=e[l].trim();if(c.includes("|"))t===-1&&(t=l),/^\|?[\s\-:|]+\|[\s\-:|]*\|?$/.test(c)?n=true:n&&r++;else if(t!==-1&&c==="")break}if(t===-1)return {hasTable:false,isComplete:true,tableStart:-1};let i=e[e.length-1].trim().includes("|");return {hasTable:true,isComplete:n&&r>=1&&!i,tableStart:t}}function f_(s,e=false){try{if(e){let n=h_(s);if(n.hasTable&&!n.isComplete){let r=s.split(`
1653
+ `};Fd.use(bn);function f_(s){let e=s.split(`
1654
+ `),t=-1,n=false,r=0;for(let l=0;l<e.length;l++){let c=e[l].trim();if(c.includes("|"))t===-1&&(t=l),/^\|?[\s\-:|]+\|[\s\-:|]*\|?$/.test(c)?n=true:n&&r++;else if(t!==-1&&c==="")break}if(t===-1)return {hasTable:false,isComplete:true,tableStart:-1};let i=e[e.length-1].trim().includes("|");return {hasTable:true,isComplete:n&&r>=1&&!i,tableStart:t}}function y_(s,e=false){try{if(e){let n=f_(s);if(n.hasTable&&!n.isComplete){let r=s.split(`
1655
1655
  `),o=r.slice(0,n.tableStart).join(`
1656
1656
  `),i=r.slice(n.tableStart).join(`
1657
1657
  `),a="";if(o.trim()){let l=Fd.parse(o);typeof l=="string"&&(a=l.trim()+`
@@ -1661,7 +1661,7 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1661
1661
 
1662
1662
  `).replace(/\n{2}/g,`
1663
1663
 
1664
- `).trim():s}catch{return s}}var hl=({content:s,streaming:e=false})=>{let[t,n]=useState(true);if(useEffect(()=>{if(!e){n(false);return}let a=setInterval(()=>{n(l=>!l);},800);return ()=>clearInterval(a)},[e]),!s)return null;let r=s.trim();if(!r)return null;let i=useMemo(()=>f_(r,e),[r,e]).split(`
1664
+ `).trim():s}catch{return s}}var hl=({content:s,streaming:e=false})=>{let[t,n]=useState(true);if(useEffect(()=>{if(!e){n(false);return}let a=setInterval(()=>{n(l=>!l);},800);return ()=>clearInterval(a)},[e]),!s)return null;let r=s.trim();if(!r)return null;let i=useMemo(()=>y_(r,e),[r,e]).split(`
1665
1665
  `);return I.createElement(S,{flexDirection:"column",flexShrink:1,paddingY:0},i.map((a,l)=>{let c=l===i.length-1;a.trim()==="";return I.createElement(S,{key:l,marginBottom:0,minHeight:1},I.createElement(y,{wrap:"wrap"},a||" "),e&&c&&t&&I.createElement(y,{color:"cyan"},"\u258A"))}))};var my=({message:s,streaming:e=false,timestamp:t,sourceLabel:n})=>{let r="",o=[];if(typeof s.content=="string")r=s.content;else if(Array.isArray(s.content)){for(let u of s.content)if(u.type==="text")r+=u.text;else if(u.type==="tool_use"){let d=u;o.push({id:d.id,name:d.name,input:d.input});}}let i=Mt(r.split(`
1666
1666
  `)),a=i.length>0;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"cyan",bold:true},"\u25C6 Assistant"),n&&I.createElement(y,{color:"magenta",bold:true}," (",n,")"),e&&I.createElement(y,{color:"yellow"}," \u2026")),a&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(S,{flexGrow:1},I.createElement(hl,{content:i.join(`
1667
1667
  `),streaming:e}))),o.map((u,d)=>I.createElement(S,{key:u.id,flexDirection:"column"},I.createElement(S,null,I.createElement(y,{dimColor:true},d===0&&!a?"\u2514\u2500 ":" "),I.createElement(y,{color:"yellow",wrap:"wrap"},"\u25B6 ",u.name)),I.createElement(S,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true,wrap:"wrap"},JSON.stringify(u.input).slice(0,80),"...")))))};var Ud=({message:s,toolName:e,timestamp:t})=>{let n="",r=false;if(Array.isArray(s.content)){for(let d of s.content)if(d.type==="tool_result"){let m=d;n=typeof m.content=="string"?m.content:JSON.stringify(m.content,null,2),r=m.is_error||false;break}}else typeof s.content=="string"&&(n=s.content);let o=1e3,i=n.length>o?n.slice(0,o)+`
@@ -1670,18 +1670,18 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1670
1670
  `));return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:r?"red":"blue",bold:true},r?"\u2717":"\u2713"," ",r?"Error":"Result"),e&&I.createElement(y,{dimColor:true}," (",e,")")),a.map((d,m)=>I.createElement(S,{key:m},I.createElement(y,{dimColor:true},m===0?"\u2514\u2500 ":" "),I.createElement(y,{color:r?"red":void 0,dimColor:!r,wrap:"wrap"},d))))};var Os=({text:s,details:e,type:t="info",timestamp:n,sourceLabel:r})=>{let o={info:{icon:"\u25CF",color:"blue"},error:{icon:"\u2717",color:"red"},warning:{icon:"\u26A0",color:"yellow"},success:{icon:"\u2713",color:"green"},queued_message:{icon:"\u2728",color:"magenta"}},{icon:i,color:a}=o[t];if(!(e&&e.trim().length>0))return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:a,bold:true},i," ",t),r&&I.createElement(y,{dimColor:true}," (",r,")")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{wrap:"wrap"},s)));let c=Mt(s.split(`
1671
1671
  `)),u=Mt(e.split(`
1672
1672
  `));[...c,...u];return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:a,bold:true},i," ",t),r&&I.createElement(y,{dimColor:true}," (",r,")")),c.map((m,g)=>I.createElement(S,{key:`text-${g}`},I.createElement(y,{dimColor:true},g===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap"},m))),u.map((m,g)=>I.createElement(S,{key:`detail-${g}`},I.createElement(y,{color:"gray"}," "),I.createElement(y,{wrap:"wrap"},m))))};var gy=({content:s,streaming:e=false,collapsed:t=false,type:n="thinking",timestamp:r,sourceLabel:o})=>{let i=t&&s.length>200?s.slice(0,200)+"...":s,a=Mt(i.split(`
1673
- `)),l=n==="reasoning",c=l?"magenta":"cyan",u=l?"\u25D0":"\u25CF",d=l?"Reasoning":"Thinking",m=t&&s.length>200;a.length+(m?1:0);return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:c,bold:true},u," ",d),o&&I.createElement(y,{dimColor:true}," (",o,")"),e&&I.createElement(y,{color:"yellow"}," \u2026")),a.map((h,f)=>I.createElement(S,{key:f},I.createElement(y,{dimColor:true},f===0?"\u2514\u2500 ":" "),I.createElement(y,{color:"white",wrap:"wrap"},h))),m&&I.createElement(S,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:"yellow",italic:true,wrap:"wrap"},"[Truncated - ",s.length," chars total]")))};var fl={tool_call:{icon:"\u25B6",color:"yellow",prefix:"Tool"},tool_result:{icon:"\u2713",color:"green",prefix:"Result"},tool_error:{icon:"\u2717",color:"red",prefix:"Error"},file_update:{icon:"\u270E",color:"blue",prefix:"Edit"},command_exec:{icon:"$",color:"yellow",prefix:"Shell"},command_running:{icon:"\u23F3",color:"cyan",prefix:"Shell"},code_exec:{icon:"\u03BB",color:"yellow",prefix:"Code"},web_search:{icon:"\u2315",color:"cyan",prefix:"Search"},web_fetch:{icon:"\u21E3",color:"cyan",prefix:"Fetch"},readfile:{icon:"\u2263",color:"cyan",prefix:"Read"},search:{icon:"\u2387",color:"cyan",prefix:"Grep"},search_files:{icon:"\u27D0",color:"cyan",prefix:"Glob"},show_tree:{icon:"\u2301",color:"cyan",prefix:"Tree"},browser_debug:{icon:"\u25CD",color:"cyan",prefix:"Browser"},compacting:{icon:"\u{1F5DC}",color:"magenta",prefix:"Compact"},todo:{icon:"\u2610",color:"magenta",prefix:"Todo"},task:{icon:"\u26A1",color:"yellow",prefix:"Task"},notebook:{icon:"\u{1F4D3}",color:"blue",prefix:"Notebook"},ask_user:{icon:"\u2753",color:"green",prefix:"Ask"},network_analysis:{icon:"\u25CE",color:"cyan",prefix:"Analysis"},network_mode_select:{icon:"\u2699",color:"blue",prefix:"Mode"},network_bidding:{icon:"\u2696",color:"yellow",prefix:"Bidding"},network_negotiation:{icon:"\u21C6",color:"magenta",prefix:"Negotiate"},network_dag:{icon:"\u229E",color:"blue",prefix:"DAG"},network_node_start:{icon:"\u25B6",color:"blue",prefix:"Node"},network_node_complete:{icon:"\u2713",color:"green",prefix:"Node"},network_node_fail:{icon:"\u2717",color:"red",prefix:"Node"},network_replan:{icon:"\u21BB",color:"yellow",prefix:"Replan"},network_peer_review:{icon:"\u2605",color:"magenta",prefix:"Review"},network_progress:{icon:"\u25C8",color:"blue",prefix:"Progress"},ccb_review:{icon:"\u2696",color:"cyan",prefix:"CCB"}};function y_(s){let e=s.match(/^(\s*\d+\s+)([-+]) (.*)$/);if(e){let[,t,n,r]=e;if(n==="-")return {color:"red",bgColor:"bgRed",text:`${t}- ${r}`};if(n==="+")return {color:"green",bgColor:"bgGreen",text:`${t}+ ${r}`}}return s.startsWith("\u2500\u2500\u2500")||s.startsWith("\u2500\u2500\u2500 old:")||s.startsWith("+++")||s.startsWith("+++ new:")?{color:"gray",text:s}:{text:s}}function b_(s){let e=0,t=0;for(let n of s)/^\s*\d+\s\+ /.test(n)?e+=1:/^\s*\d+\s- /.test(n)&&(t+=1);return {added:e,removed:t}}function v_(s){let e=s.match(/^(Editing|Writing|Creating|Updating|Updated)\s+(.+)$/i);if(!e)return {action:"Edited",target:s};let t=e[1].toLowerCase(),n=e[2];return {action:{editing:"Edited",writing:"Wrote",creating:"Created",updating:"Updated",updated:"Updated"}[t]||"Edited",target:n}}var hy=({type:s,message:e,details:t,timestamp:n,isStreaming:r=false,sourceLabel:o})=>{let i=fl[s]||fl.tool_call,a=s==="file_update",l=s==="readfile",c=s==="show_tree",u=t?Mt(t.split(`
1673
+ `)),l=n==="reasoning",c=l?"magenta":"cyan",u=l?"\u25D0":"\u25CF",d=l?"Reasoning":"Thinking",m=t&&s.length>200;a.length+(m?1:0);return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:c,bold:true},u," ",d),o&&I.createElement(y,{dimColor:true}," (",o,")"),e&&I.createElement(y,{color:"yellow"}," \u2026")),a.map((h,f)=>I.createElement(S,{key:f},I.createElement(y,{dimColor:true},f===0?"\u2514\u2500 ":" "),I.createElement(y,{color:"white",wrap:"wrap"},h))),m&&I.createElement(S,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:"yellow",italic:true,wrap:"wrap"},"[Truncated - ",s.length," chars total]")))};var fl={tool_call:{icon:"\u25B6",color:"yellow",prefix:"Tool"},tool_result:{icon:"\u2713",color:"green",prefix:"Result"},tool_error:{icon:"\u2717",color:"red",prefix:"Error"},file_update:{icon:"\u270E",color:"blue",prefix:"Edit"},command_exec:{icon:"$",color:"yellow",prefix:"Shell"},command_running:{icon:"\u23F3",color:"cyan",prefix:"Shell"},code_exec:{icon:"\u03BB",color:"yellow",prefix:"Code"},web_search:{icon:"\u2315",color:"cyan",prefix:"Search"},web_fetch:{icon:"\u21E3",color:"cyan",prefix:"Fetch"},readfile:{icon:"\u2263",color:"cyan",prefix:"Read"},search:{icon:"\u2387",color:"cyan",prefix:"Grep"},search_files:{icon:"\u27D0",color:"cyan",prefix:"Glob"},show_tree:{icon:"\u2301",color:"cyan",prefix:"Tree"},browser_debug:{icon:"\u25CD",color:"cyan",prefix:"Browser"},compacting:{icon:"\u{1F5DC}",color:"magenta",prefix:"Compact"},todo:{icon:"\u2610",color:"magenta",prefix:"Todo"},task:{icon:"\u26A1",color:"yellow",prefix:"Task"},notebook:{icon:"\u{1F4D3}",color:"blue",prefix:"Notebook"},ask_user:{icon:"\u2753",color:"green",prefix:"Ask"},network_analysis:{icon:"\u25CE",color:"cyan",prefix:"Analysis"},network_mode_select:{icon:"\u2699",color:"blue",prefix:"Mode"},network_bidding:{icon:"\u2696",color:"yellow",prefix:"Bidding"},network_negotiation:{icon:"\u21C6",color:"magenta",prefix:"Negotiate"},network_dag:{icon:"\u229E",color:"blue",prefix:"DAG"},network_node_start:{icon:"\u25B6",color:"blue",prefix:"Node"},network_node_complete:{icon:"\u2713",color:"green",prefix:"Node"},network_node_fail:{icon:"\u2717",color:"red",prefix:"Node"},network_replan:{icon:"\u21BB",color:"yellow",prefix:"Replan"},network_peer_review:{icon:"\u2605",color:"magenta",prefix:"Review"},network_progress:{icon:"\u25C8",color:"blue",prefix:"Progress"},ccb_review:{icon:"\u2696",color:"cyan",prefix:"CCB"}};function b_(s){let e=s.match(/^(\s*\d+\s+)([-+]) (.*)$/);if(e){let[,t,n,r]=e;if(n==="-")return {color:"red",bgColor:"bgRed",text:`${t}- ${r}`};if(n==="+")return {color:"green",bgColor:"bgGreen",text:`${t}+ ${r}`}}return s.startsWith("\u2500\u2500\u2500")||s.startsWith("\u2500\u2500\u2500 old:")||s.startsWith("+++")||s.startsWith("+++ new:")?{color:"gray",text:s}:{text:s}}function v_(s){let e=0,t=0;for(let n of s)/^\s*\d+\s\+ /.test(n)?e+=1:/^\s*\d+\s- /.test(n)&&(t+=1);return {added:e,removed:t}}function C_(s){let e=s.match(/^(Editing|Writing|Creating|Updating|Updated)\s+(.+)$/i);if(!e)return {action:"Edited",target:s};let t=e[1].toLowerCase(),n=e[2];return {action:{editing:"Edited",writing:"Wrote",creating:"Created",updating:"Updated",updated:"Updated"}[t]||"Edited",target:n}}var hy=({type:s,message:e,details:t,timestamp:n,isStreaming:r=false,sourceLabel:o})=>{let i=fl[s]||fl.tool_call,a=s==="file_update",l=s==="readfile",c=s==="show_tree",u=t?Mt(t.split(`
1674
1674
  `)):[],m=(()=>{if(!t)return null;try{if(u.length>0&&u[0]==="args:")return JSON.parse(u.slice(1).join(`
1675
1675
  `));let b=u.join(`
1676
- `);if(b.startsWith("{"))return JSON.parse(b)}catch{}return null})(),g=()=>{if(!l||!m)return null;let b=m.file_path||m.path||"",C=m.offset,T=m.limit,w=b;if(C!==void 0||T!==void 0){let E=[];C!==void 0&&E.push(`offset: ${C}`),T!==void 0&&E.push(`limit: ${T}`),w+=` (${E.join(", ")})`;}return w},h=()=>{if(!c||!t)return null;let b=t.trim();if(b.startsWith("{")&&b.endsWith("}"))try{let T=JSON.parse(b);if(T&&typeof T=="object"&&!Array.isArray(T)){let w=[];if(typeof T.path=="string"&&T.path.trim()&&w.push(`\u{1F4C1} ${T.path.trim()}`),Array.isArray(T.project_types)&&T.project_types.length>0){let E=T.project_types.slice(0,4).join(", "),N=T.project_types.length>4?` (+${T.project_types.length-4})`:"";w.push(`\u{1F4E6} ${E}${N}`);}if(Array.isArray(T.root_dirs)&&T.root_dirs.length>0){let E=T.root_dirs.slice(0,6).join(", "),N=T.root_dirs.length>6?` (+${T.root_dirs.length-6})`:"";w.push(`\u{1F4C2} ${E}${N}`);}if(Array.isArray(T.modules)&&T.modules.length>0){let E=T.modules.slice(0,6).join(", "),N=T.modules.length>6?` (+${T.modules.length-6})`:"";w.push(`\u{1F527} ${E}${N}`);}if(Array.isArray(T.config_files)&&T.config_files.length>0){let E=T.config_files.slice(0,4).join(", "),N=T.config_files.length>4?` (+${T.config_files.length-4})`:"";w.push(`\u2699\uFE0F ${E}${N}`);}if(typeof T.tip=="string"&&T.tip.trim()){let E=T.tip.trim();w.push(`\u{1F4A1} ${E.length>60?E.slice(0,57)+"...":E}`);}if(typeof T.error=="string"&&T.error.trim()&&w.push(`\u274C ${T.error.trim()}`),w.length>0)return w.slice(0,5)}}catch{}let C=u.filter(T=>T.trim().length>0);return C.length>0?C.some(w=>w.includes("\u251C")||w.includes("\u2514")||w.includes("\u2502"))?C.slice(0,5).map(w=>w.length>80?w.slice(0,77)+"...":w):C.slice(0,3).map(w=>w.length>100?w.slice(0,97)+"...":w):null},v=(()=>{if(!t)return [e];let b=g();if(b)return [b];if(l&&e)return u.length>0?[e,...u]:[e];let C=h();if(C)return C;if(m){let T=Object.keys(m);return T.length===0?[e]:T.map(w=>{let E=m[w],N=typeof E=="string"?E:JSON.stringify(E),D=N.length>100?N.substring(0,97)+"...":N;return `${w}: ${D}`})}return u.length>0?u.filter(w=>w.trim().length>0).slice(0,3).map(w=>w.length>100?w.substring(0,97)+"...":w):[e]})();return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,a?(()=>{let{added:b,removed:C}=b_(u),{action:T,target:w}=v_(e);return I.createElement(I.Fragment,null,I.createElement(y,{color:"blue",bold:true},"\u2022 ",T),o&&I.createElement(y,{color:"magenta",bold:true}," (",o,")"),I.createElement(y,{color:"cyan"}," ",w),(b>0||C>0)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"green"},"+",b),I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:"red"},"-",C),I.createElement(y,{dimColor:true},")")))})():I.createElement(I.Fragment,null,I.createElement(y,{color:i.color,bold:true},i.icon," ",i.prefix),o&&I.createElement(y,{color:"magenta",bold:true}," (",o,")"),r&&I.createElement(y,{color:"yellow"}," \u2026"))),!a&&v.map((b,C)=>I.createElement(S,{key:C},I.createElement(y,{dimColor:true},C===0?"\u2514\u2500 ":" "),I.createElement(y,{dimColor:true,wrap:"wrap"},b))),a&&u.map((b,C)=>{let T=y_(b),w=!!T.bgColor,E=w?T.bgColor==="bgRed"?"#67000d":"#00441b":void 0,N=w?"#ffffff":T.color;return I.createElement(S,{key:C},I.createElement(y,{dimColor:true},C===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap",color:N,backgroundColor:E,dimColor:T.color==="gray"},T.text))}))};var fy=({event:s,timestamp:e,sourceLabel:t})=>{let{explanation:n,plan:r}=s,o=r.length,i=r.filter(l=>l.status==="completed").length,a=o>0?Math.round(i/o*100):0;return I.createElement(Box,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(Box,null,I.createElement(Text,{bold:true,color:"magenta"},"\u25CF Plan"),t&&I.createElement(Text,{color:"blue"}," (",t,")"),I.createElement(Text,{dimColor:true}," (",a,"% complete, ",i,"/",o,")")),n&&I.createElement(Box,null,I.createElement(Text,{dimColor:true},"\u251C\u2500 "),I.createElement(Text,{italic:true,dimColor:true},n)),r.map((l,c)=>{let u=c===r.length-1;return I.createElement(Box,{key:c},I.createElement(Text,{dimColor:true},u?"\u2514\u2500 ":"\u251C\u2500 "),C_(l.status),I.createElement(Text,null," "),x_(l.step,l.status))}))};function C_(s){switch(s){case "completed":return I.createElement(Text,{color:"green"},"\u2714");case "in_progress":return I.createElement(Text,{color:"cyan",bold:true},"\u25A1");case "pending":return I.createElement(Text,{dimColor:true},"\u25A1")}}function x_(s,e){switch(e){case "completed":return I.createElement(Text,{dimColor:true,strikethrough:true,wrap:"wrap"},s);case "in_progress":return I.createElement(Text,{color:"cyan",bold:true,wrap:"wrap"},s);case "pending":return I.createElement(Text,{dimColor:true,wrap:"wrap"},s)}}var T_={idle:{icon:"\u25CB",color:"gray"},running:{icon:"\u25CF",color:"green"},waiting:{icon:"\u25D0",color:"yellow"},completed:{icon:"\u2713",color:"blue"},error:{icon:"\u2717",color:"red"}},yy=({agentId:s,agentIndex:e,status:t,task:n,progress:r,message:o,error:i,model:a,roleId:l})=>{let{icon:c,color:u}=T_[t],d=r!==void 0?w_(r):null,m;return i?m=i:o?m=o:n?m=n:m=k_(t),I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:u,bold:true},c," Agent-",e),l&&I.createElement(y,{color:"cyan",bold:true}," [",l,"]"),a&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{dimColor:true},a),I.createElement(y,{dimColor:true},")")),d&&I.createElement(I.Fragment,null,I.createElement(y,null," "),I.createElement(y,{dimColor:true},d),I.createElement(y,{dimColor:true}," ",r,"%"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:t==="error"?"red":void 0,wrap:"wrap"},m)))};function w_(s){let t=Math.round(s/100*10),n=10-t;return "\u2588".repeat(t)+"\u2591".repeat(n)}function k_(s){switch(s){case "idle":return "\u5C31\u7EEA";case "running":return "\u6267\u884C\u4E2D...";case "waiting":return "\u7B49\u5F85\u4E2D...";case "completed":return "\u5DF2\u5B8C\u6210";case "error":return "\u6267\u884C\u5931\u8D25";default:return s}}function S_(s,e){let t=[],n=new Set(e),r=new Map,o=0;for(let c of s){let u=c.level;r.has(u)||r.set(u,[]),r.get(u).push(c),o=Math.max(o,u);}let i=new Map,a=(c,u=20)=>c.length<=u?c:c.slice(0,u-2)+"..",l=c=>{let u=c.id.match(/(\d+)$/);return u?`T${u[1]}`:c.id.slice(0,4)};for(let c=0;c<=o;c++){let u=r.get(c)||[];u.forEach((d,m)=>{i.set(d.id,{level:c,index:m});}),c===0?t.push(`\u250C\u2500 Level ${c} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`):t.push(`\u251C\u2500 Level ${c} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`);for(let d of u){let m=l(d),g=n.has(d.id),h=a(d.description,35),f=d.agentId.split("-")[0],v="";d.dependencies.length>0&&(v=` \u2190 [${d.dependencies.map(T=>{let w=s.find(E=>E.id===T);return w?l(w):T.slice(0,4)}).join(",")}]`);let b=g?"\u2605":"\u25CB";t.push(`\u2502 ${b} [${m}] ${h} (${f})${v}`);}}return t.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),t.push(" \u2605 \u5173\u952E\u8DEF\u5F84 \u25CB \u666E\u901A\u8282\u70B9 \u2190 \u4F9D\u8D56\u5173\u7CFB"),t}var jd={network_decompose:{icon:"\u25CE",color:"cyan",prefix:"Decompose"},network_progress:{icon:"\u25C8",color:"blue",prefix:"Progress"},network_task:{icon:"\u2713",color:"green",prefix:"Task"},network_task_fail:{icon:"\u2717",color:"red",prefix:"Task"},network_route:{icon:"\u2192",color:"magenta",prefix:"Route"},network_analysis:{icon:"\u25CE",color:"cyan",prefix:"Analysis"},network_mode_select:{icon:"\u2699",color:"blue",prefix:"Mode"},network_agent_bid:{icon:"\u2696",color:"yellow",prefix:"Bid"},network_bidding:{icon:"\u2696",color:"yellow",prefix:"Bidding"},network_negotiation:{icon:"\u21C6",color:"magenta",prefix:"Negotiate"},network_negotiation_message:{icon:"\u{1F4AC}",color:"cyan",prefix:"Agent"},network_dag:{icon:"\u229E",color:"blue",prefix:"DAG"},network_node_start:{icon:"\u25B6",color:"blue",prefix:"Node"},network_node_complete:{icon:"\u2713",color:"green",prefix:"Node"},network_node_fail:{icon:"\u2717",color:"red",prefix:"Node"},network_replan:{icon:"\u21BB",color:"yellow",prefix:"Replan"},network_peer_review:{icon:"\u2605",color:"magenta",prefix:"Review"}},by=({type:s,text:e,details:t,networkCompleted:n,networkTotal:r,networkRunning:o,networkFailed:i,networkPending:a,isComplete:l,networkAnalysis:c,networkModeSelect:u,networkAgentBid:d,networkBidding:m,networkNegotiation:g,networkNegotiationMessage:h,networkDAG:f,networkNode:v,networkReplan:b,networkPeerReview:C,sourceLabel:T})=>{let E=s==="network_task"&&!l?jd.network_task_fail:jd[s]||jd.network_decompose,N=()=>{if(s!=="network_progress"||r===void 0||n===void 0)return null;let k=15,M=Math.floor(n/r*k),_=o?Math.min(Math.floor(o/r*k),k-M):0,P=k-M-_,j=Math.round(n/r*100);return I.createElement(I.Fragment,null,I.createElement(y,null," "),I.createElement(y,{color:"green"},"\u2588".repeat(M)),I.createElement(y,{color:"yellow"},"\u2593".repeat(_)),I.createElement(y,{color:"gray"},"\u2591".repeat(P)),I.createElement(y,{color:"white"}," ",j,"%"),i!==void 0&&i>0&&I.createElement(y,{color:"red"}," (",i," \u5931\u8D25)"))},$=(()=>{let k=[];switch(s){case "network_progress":{let M=[];o!==void 0&&o>0&&M.push(`\u8FD0\u884C: ${o}`),a!==void 0&&a>0&&M.push(`\u5F85\u6267\u884C: ${a}`),i!==void 0&&i>0&&M.push(`\u5931\u8D25: ${i}`),M.length>0&&k.push(M.join(", "));break}case "network_analysis":{if(c){if(k.push(`\u590D\u6742\u5EA6: ${c.complexity}/10`),c.ambiguity!==void 0&&k.push(`\u6A21\u7CCA\u5EA6: ${c.ambiguity}/10`),k.push(`\u9884\u8BA1 Agent \u6570: ${c.estimatedAgents}`),c.priority){let M={low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8",critical:"\u7D27\u6025"};k.push(`\u4F18\u5148\u7EA7: ${M[c.priority]||c.priority}`);}c.estimatedTokens&&k.push(`\u9884\u4F30 Token: ${(c.estimatedTokens/1e3).toFixed(1)}K`),c.requiredCapabilities.length>0&&k.push(`\u6240\u9700\u80FD\u529B: ${c.requiredCapabilities.join(", ")}`),c.optionalCapabilities&&c.optionalCapabilities.length>0&&k.push(`\u53EF\u9009\u80FD\u529B: ${c.optionalCapabilities.join(", ")}`);}break}case "network_mode_select":{if(u){let M={collaborative:"\u534F\u4F5C\u6A21\u5F0F",competitive:"\u7ADE\u4E89\u6A21\u5F0F",hierarchical:"\u5C42\u7EA7\u6A21\u5F0F"};if(k.push(`\u9009\u62E9: ${M[u.mode]||u.mode}`),k.push(`\u539F\u56E0: ${u.reason}`),u.rawAnalysis){let _=u.rawAnalysis.replace(/```json[\s\S]*?```/g,"").replace(/\{[\s\S]*\}/g,"").trim();_&&_.split(`
1677
- `).filter(P=>P.trim()).forEach(P=>{k.push(P.trim());});}}break}case "network_agent_bid":{if(d){let M=d.participate?"\u2713":"\u2717",_=d.participate?"\u53C2\u4E0E\u7ADE\u6807":"\u653E\u5F03\u7ADE\u6807",P=d.capabilityScore!==void 0?`\u5339\u914D\u5EA6: ${(d.capabilityScore*100).toFixed(0)}%`:"",j=d.confidence!==void 0?`\u7F6E\u4FE1\u5EA6: ${(d.confidence*100).toFixed(0)}%`:"";k.push(`${M} ${d.agentName}: ${_}`),P&&k.push(P),j&&k.push(j),d.reason&&k.push(`\u539F\u56E0: ${d.reason}`);}break}case "network_bidding":{m&&(k.push(`\u6536\u5230\u7ADE\u6807: ${m.totalBids} \u4E2A`),m.selectedAgents.length>0&&k.push(`\u9009\u4E2D: ${m.selectedAgents.join(", ")}`),m.topBid&&k.push(`\u6700\u9AD8\u7F6E\u4FE1\u5EA6: ${m.topBid.agentId} (${(m.topBid.confidence*100).toFixed(0)}%)`));break}case "network_negotiation":{if(g){let M={started:"\u8FDB\u884C\u4E2D",voting:"\u6295\u7968\u4E2D",consensus:"\u5DF2\u8FBE\u6210\u5171\u8BC6",failed:"\u534F\u5546\u5931\u8D25"};k.push(`\u72B6\u6001: ${M[g.status]||g.status}`),k.push(`\u53C2\u4E0E\u8005: ${g.participants.join(", ")}`),g.rounds&&k.push(`\u8F6E\u6B21: ${g.rounds}`);}break}case "network_negotiation_message":{if(h){let M={support:"\u652F\u6301",concern:"\u62C5\u5FE7",counter:"\u53CD\u5BF9",question:"\u63D0\u95EE"};k.push(`\u7C7B\u578B: ${M[h.type]||h.type}`),k.push(`\u8F6E\u6B21: ${h.round}`);let _=h.content;_&&_.length>300?k.push(`\u5185\u5BB9: ${_.slice(0,300)}...`):_&&k.push(`\u5185\u5BB9: ${_}`);}break}case "network_dag":{if(f&&(k.push(`\u8282\u70B9: ${f.nodeCount} \u2502 \u5C42\u7EA7: ${f.levelCount} \u2502 \u5E76\u884C: ${f.maxParallelism} \u2502 \u9884\u4F30: ${Math.round(f.estimatedTime/1e3)}s`),f.nodes&&f.nodes.length>0)){k.push("");let M=S_(f.nodes,f.criticalPath);k.push(...M);}break}case "network_node_start":case "network_node_complete":case "network_node_fail":{v&&(v.description&&k.push(v.description),s==="network_node_complete"&&v.output&&k.push(`\u8F93\u51FA: ${v.output.slice(0,80)}${v.output.length>80?"...":""}`),s==="network_node_fail"&&v.error&&k.push(`\u9519\u8BEF: ${v.error}`),v.duration&&k.push(`\u8017\u65F6: ${Math.round(v.duration/1e3)}s`));break}case "network_replan":{b&&(k.push(`\u89E6\u53D1: ${b.trigger}`),k.push(`\u539F\u56E0: ${b.reason}`),b.affectedNodes.length>0&&k.push(`\u5F71\u54CD\u8282\u70B9: ${b.affectedNodes.join(", ")}`));break}case "network_peer_review":{C&&(k.push(`\u8BC4\u5BA1\u8005: ${C.reviewers.join(", ")}`),k.push(`\u5E73\u5747\u8BC4\u5206: ${C.averageScore.toFixed(1)}/5`),C.summary&&k.push(C.summary));break}default:t&&k.push(t);}return k})();return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:E.color,bold:true},"\u2022 ",E.icon," ",E.prefix),T&&I.createElement(y,{color:"magenta",bold:true}," (",T,")"),N()),I.createElement(S,null,I.createElement(y,{dimColor:true},$.length>0?"\u251C\u2500 ":"\u2514\u2500 "),I.createElement(y,{wrap:"wrap"},e)),$.map((k,M)=>I.createElement(S,{key:M},I.createElement(y,{color:"gray"},M===$.length-1?"\u2514\u2500 ":"\u251C\u2500 "),I.createElement(y,{wrap:"wrap"},k))))};var __={collab_spawn:{icon:"\u{1F680}",color:"cyan",label:"spawn_agent"},collab_delegate:{icon:"\u{1F4CB}",color:"yellow",label:"delegate_task"},collab_query:{icon:"\u{1F50D}",color:"blue",label:"query_agent"},collab_message:{icon:"\u{1F4AC}",color:"magenta",label:"send_message"},collab_wait:{icon:"\u23F3",color:"yellow",label:"wait_result"},collab_terminate:{icon:"\u{1F6D1}",color:"red",label:"terminate_agent"}},vy=({type:s,text:e,details:t,timestamp:n,toolName:r,targetAgentId:o,taskId:i,result:a,sourceLabel:l})=>{let c=__[s]||{icon:"\u{1F527}",color:"blue",label:"collab"},u=a==="success"?"green":a==="error"?"red":"yellow",d=a==="success"?"\u2713":a==="error"?"\u2717":"\u2026",m=o||i;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,null,c.icon," "),I.createElement(y,{color:c.color,bold:true},r||c.label),l&&I.createElement(y,{dimColor:true}," (",l,")"),a&&I.createElement(y,{color:u}," ",d)),m&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),o&&I.createElement(y,null,I.createElement(y,{dimColor:true},"Agent: "),I.createElement(y,{color:"cyan"},o)),i&&I.createElement(y,null,I.createElement(y,{dimColor:true}," Task: "),I.createElement(y,{color:"yellow"},i))),I.createElement(S,null,I.createElement(y,{dimColor:true},m?" ":"\u2514\u2500 "),I.createElement(y,{wrap:"wrap"},e)),t&&I.createElement(S,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true,wrap:"wrap"},t)))};var bl=(s,e=10)=>{let t=Math.min(Math.max(Math.round(s),0),e),n=e-t;return I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan"},"\u2588".repeat(t)),I.createElement(y,{color:"gray"},"\u2591".repeat(n)),I.createElement(y,null," ",s))},Cy=({analysis:s})=>{let{intent:e,complexity:t,routing:n}=s,r={simple:"\u7B80\u5355 \u2192 \u76F4\u63A5\u6267\u884C",standard:"\u6807\u51C6 \u2192 CCB \u8BC4\u5BA1",complex:"\u590D\u6742 \u2192 \u5B8C\u6574 CCB"}[n.path]||n.path;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"cyan",bold:true},"\u2022 \u25CE \u4EFB\u52A1\u5206\u6790")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white",bold:true},"\u610F\u56FE: "),I.createElement(y,{wrap:"wrap"},e.summary)),e.domain.length>0&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white",bold:true},"\u9886\u57DF: "),I.createElement(y,{color:"yellow"},e.domain.join(", "))),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white",bold:true},"\u590D\u6742\u5EA6: "),I.createElement(y,{color:t.score>=7?"red":t.score>=4?"yellow":"green"},t.score,"/10")),I.createElement(S,{flexDirection:"column"},I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u251C\u2500 "),I.createElement(y,null,"\u8303\u56F4: "),bl(t.dimensions.scopeSize)),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u251C\u2500 "),I.createElement(y,null,"\u6280\u672F\u6DF1\u5EA6: "),bl(t.dimensions.technicalDepth)),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u251C\u2500 "),I.createElement(y,null,"\u4F9D\u8D56\u5EA6: "),bl(t.dimensions.interdependency)),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u2514\u2500 "),I.createElement(y,null,"\u6A21\u7CCA\u5EA6: "),bl(t.dimensions.ambiguity))),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"white",bold:true},"\u8DEF\u7531: "),I.createElement(y,{color:"magenta"},r),n.needsCCB&&I.createElement(y,{color:"yellow"}," (\u9700\u8981 CCB \u8BC4\u5BA1)")))};var Gd=new Marked;Gd.use(markedTerminal({heading:s=>`\x1B[1m\x1B[36m${s}\x1B[0m`,listitem:s=>` \u2022 ${s}`,strong:s=>`\x1B[1m${s}\x1B[0m`,em:s=>`\x1B[3m${s}\x1B[0m`,codespan:s=>`\x1B[32m\`${s}\`\x1B[0m`,paragraph:s=>`${s}`,emoji:false,reflowText:false,width:100}));Gd.use({async:false});function Ty(s){if(!s)return "";try{let e=Gd.parse(s);return typeof e=="string"?e.replace(/\n{3,}/g,`
1676
+ `);if(b.startsWith("{"))return JSON.parse(b)}catch{}return null})(),g=()=>{if(!l||!m)return null;let b=m.file_path||m.path||"",C=m.offset,T=m.limit,w=b;if(C!==void 0||T!==void 0){let E=[];C!==void 0&&E.push(`offset: ${C}`),T!==void 0&&E.push(`limit: ${T}`),w+=` (${E.join(", ")})`;}return w},h=()=>{if(!c||!t)return null;let b=t.trim();if(b.startsWith("{")&&b.endsWith("}"))try{let T=JSON.parse(b);if(T&&typeof T=="object"&&!Array.isArray(T)){let w=[];if(typeof T.path=="string"&&T.path.trim()&&w.push(`\u{1F4C1} ${T.path.trim()}`),Array.isArray(T.project_types)&&T.project_types.length>0){let E=T.project_types.slice(0,4).join(", "),N=T.project_types.length>4?` (+${T.project_types.length-4})`:"";w.push(`\u{1F4E6} ${E}${N}`);}if(Array.isArray(T.root_dirs)&&T.root_dirs.length>0){let E=T.root_dirs.slice(0,6).join(", "),N=T.root_dirs.length>6?` (+${T.root_dirs.length-6})`:"";w.push(`\u{1F4C2} ${E}${N}`);}if(Array.isArray(T.modules)&&T.modules.length>0){let E=T.modules.slice(0,6).join(", "),N=T.modules.length>6?` (+${T.modules.length-6})`:"";w.push(`\u{1F527} ${E}${N}`);}if(Array.isArray(T.config_files)&&T.config_files.length>0){let E=T.config_files.slice(0,4).join(", "),N=T.config_files.length>4?` (+${T.config_files.length-4})`:"";w.push(`\u2699\uFE0F ${E}${N}`);}if(typeof T.tip=="string"&&T.tip.trim()){let E=T.tip.trim();w.push(`\u{1F4A1} ${E.length>60?E.slice(0,57)+"...":E}`);}if(typeof T.error=="string"&&T.error.trim()&&w.push(`\u274C ${T.error.trim()}`),w.length>0)return w.slice(0,5)}}catch{}let C=u.filter(T=>T.trim().length>0);return C.length>0?C.some(w=>w.includes("\u251C")||w.includes("\u2514")||w.includes("\u2502"))?C.slice(0,5).map(w=>w.length>80?w.slice(0,77)+"...":w):C.slice(0,3).map(w=>w.length>100?w.slice(0,97)+"...":w):null},v=(()=>{if(!t)return [e];let b=g();if(b)return [b];if(l&&e)return u.length>0?[e,...u]:[e];let C=h();if(C)return C;if(m){let T=Object.keys(m);return T.length===0?[e]:T.map(w=>{let E=m[w],N=typeof E=="string"?E:JSON.stringify(E),D=N.length>100?N.substring(0,97)+"...":N;return `${w}: ${D}`})}return u.length>0?u.filter(w=>w.trim().length>0).slice(0,3).map(w=>w.length>100?w.substring(0,97)+"...":w):[e]})();return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,a?(()=>{let{added:b,removed:C}=v_(u),{action:T,target:w}=C_(e);return I.createElement(I.Fragment,null,I.createElement(y,{color:"blue",bold:true},"\u2022 ",T),o&&I.createElement(y,{color:"magenta",bold:true}," (",o,")"),I.createElement(y,{color:"cyan"}," ",w),(b>0||C>0)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"green"},"+",b),I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:"red"},"-",C),I.createElement(y,{dimColor:true},")")))})():I.createElement(I.Fragment,null,I.createElement(y,{color:i.color,bold:true},i.icon," ",i.prefix),o&&I.createElement(y,{color:"magenta",bold:true}," (",o,")"),r&&I.createElement(y,{color:"yellow"}," \u2026"))),!a&&v.map((b,C)=>I.createElement(S,{key:C},I.createElement(y,{dimColor:true},C===0?"\u2514\u2500 ":" "),I.createElement(y,{dimColor:true,wrap:"wrap"},b))),a&&u.map((b,C)=>{let T=b_(b),w=!!T.bgColor,E=w?T.bgColor==="bgRed"?"#67000d":"#00441b":void 0,N=w?"#ffffff":T.color;return I.createElement(S,{key:C},I.createElement(y,{dimColor:true},C===0?"\u2514\u2500 ":" "),I.createElement(y,{wrap:"wrap",color:N,backgroundColor:E,dimColor:T.color==="gray"},T.text))}))};var fy=({event:s,timestamp:e,sourceLabel:t})=>{let{explanation:n,plan:r}=s,o=r.length,i=r.filter(l=>l.status==="completed").length,a=o>0?Math.round(i/o*100):0;return I.createElement(Box,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(Box,null,I.createElement(Text,{bold:true,color:"magenta"},"\u25CF Plan"),t&&I.createElement(Text,{color:"blue"}," (",t,")"),I.createElement(Text,{dimColor:true}," (",a,"% complete, ",i,"/",o,")")),n&&I.createElement(Box,null,I.createElement(Text,{dimColor:true},"\u251C\u2500 "),I.createElement(Text,{italic:true,dimColor:true},n)),r.map((l,c)=>{let u=c===r.length-1;return I.createElement(Box,{key:c},I.createElement(Text,{dimColor:true},u?"\u2514\u2500 ":"\u251C\u2500 "),x_(l.status),I.createElement(Text,null," "),T_(l.step,l.status))}))};function x_(s){switch(s){case "completed":return I.createElement(Text,{color:"green"},"\u2714");case "in_progress":return I.createElement(Text,{color:"cyan",bold:true},"\u25A1");case "pending":return I.createElement(Text,{dimColor:true},"\u25A1")}}function T_(s,e){switch(e){case "completed":return I.createElement(Text,{dimColor:true,strikethrough:true,wrap:"wrap"},s);case "in_progress":return I.createElement(Text,{color:"cyan",bold:true,wrap:"wrap"},s);case "pending":return I.createElement(Text,{dimColor:true,wrap:"wrap"},s)}}var w_={idle:{icon:"\u25CB",color:"gray"},running:{icon:"\u25CF",color:"green"},waiting:{icon:"\u25D0",color:"yellow"},completed:{icon:"\u2713",color:"blue"},error:{icon:"\u2717",color:"red"}},yy=({agentId:s,agentIndex:e,status:t,task:n,progress:r,message:o,error:i,model:a,roleId:l})=>{let{icon:c,color:u}=w_[t],d=r!==void 0?k_(r):null,m;return i?m=i:o?m=o:n?m=n:m=S_(t),I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:u,bold:true},c," Agent-",e),l&&I.createElement(y,{color:"cyan",bold:true}," [",l,"]"),a&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{dimColor:true},a),I.createElement(y,{dimColor:true},")")),d&&I.createElement(I.Fragment,null,I.createElement(y,null," "),I.createElement(y,{dimColor:true},d),I.createElement(y,{dimColor:true}," ",r,"%"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:t==="error"?"red":void 0,wrap:"wrap"},m)))};function k_(s){let t=Math.round(s/100*10),n=10-t;return "\u2588".repeat(t)+"\u2591".repeat(n)}function S_(s){switch(s){case "idle":return "\u5C31\u7EEA";case "running":return "\u6267\u884C\u4E2D...";case "waiting":return "\u7B49\u5F85\u4E2D...";case "completed":return "\u5DF2\u5B8C\u6210";case "error":return "\u6267\u884C\u5931\u8D25";default:return s}}function __(s,e){let t=[],n=new Set(e),r=new Map,o=0;for(let c of s){let u=c.level;r.has(u)||r.set(u,[]),r.get(u).push(c),o=Math.max(o,u);}let i=new Map,a=(c,u=20)=>c.length<=u?c:c.slice(0,u-2)+"..",l=c=>{let u=c.id.match(/(\d+)$/);return u?`T${u[1]}`:c.id.slice(0,4)};for(let c=0;c<=o;c++){let u=r.get(c)||[];u.forEach((d,m)=>{i.set(d.id,{level:c,index:m});}),c===0?t.push(`\u250C\u2500 Level ${c} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`):t.push(`\u251C\u2500 Level ${c} \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`);for(let d of u){let m=l(d),g=n.has(d.id),h=a(d.description,35),f=d.agentId.split("-")[0],v="";d.dependencies.length>0&&(v=` \u2190 [${d.dependencies.map(T=>{let w=s.find(E=>E.id===T);return w?l(w):T.slice(0,4)}).join(",")}]`);let b=g?"\u2605":"\u25CB";t.push(`\u2502 ${b} [${m}] ${h} (${f})${v}`);}}return t.push("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),t.push(" \u2605 \u5173\u952E\u8DEF\u5F84 \u25CB \u666E\u901A\u8282\u70B9 \u2190 \u4F9D\u8D56\u5173\u7CFB"),t}var jd={network_decompose:{icon:"\u25CE",color:"cyan",prefix:"Decompose"},network_progress:{icon:"\u25C8",color:"blue",prefix:"Progress"},network_task:{icon:"\u2713",color:"green",prefix:"Task"},network_task_fail:{icon:"\u2717",color:"red",prefix:"Task"},network_route:{icon:"\u2192",color:"magenta",prefix:"Route"},network_analysis:{icon:"\u25CE",color:"cyan",prefix:"Analysis"},network_mode_select:{icon:"\u2699",color:"blue",prefix:"Mode"},network_agent_bid:{icon:"\u2696",color:"yellow",prefix:"Bid"},network_bidding:{icon:"\u2696",color:"yellow",prefix:"Bidding"},network_negotiation:{icon:"\u21C6",color:"magenta",prefix:"Negotiate"},network_negotiation_message:{icon:"\u{1F4AC}",color:"cyan",prefix:"Agent"},network_dag:{icon:"\u229E",color:"blue",prefix:"DAG"},network_node_start:{icon:"\u25B6",color:"blue",prefix:"Node"},network_node_complete:{icon:"\u2713",color:"green",prefix:"Node"},network_node_fail:{icon:"\u2717",color:"red",prefix:"Node"},network_replan:{icon:"\u21BB",color:"yellow",prefix:"Replan"},network_peer_review:{icon:"\u2605",color:"magenta",prefix:"Review"}},by=({type:s,text:e,details:t,networkCompleted:n,networkTotal:r,networkRunning:o,networkFailed:i,networkPending:a,isComplete:l,networkAnalysis:c,networkModeSelect:u,networkAgentBid:d,networkBidding:m,networkNegotiation:g,networkNegotiationMessage:h,networkDAG:f,networkNode:v,networkReplan:b,networkPeerReview:C,sourceLabel:T})=>{let E=s==="network_task"&&!l?jd.network_task_fail:jd[s]||jd.network_decompose,N=()=>{if(s!=="network_progress"||r===void 0||n===void 0)return null;let k=15,M=Math.floor(n/r*k),_=o?Math.min(Math.floor(o/r*k),k-M):0,P=k-M-_,j=Math.round(n/r*100);return I.createElement(I.Fragment,null,I.createElement(y,null," "),I.createElement(y,{color:"green"},"\u2588".repeat(M)),I.createElement(y,{color:"yellow"},"\u2593".repeat(_)),I.createElement(y,{color:"gray"},"\u2591".repeat(P)),I.createElement(y,{color:"white"}," ",j,"%"),i!==void 0&&i>0&&I.createElement(y,{color:"red"}," (",i," \u5931\u8D25)"))},$=(()=>{let k=[];switch(s){case "network_progress":{let M=[];o!==void 0&&o>0&&M.push(`\u8FD0\u884C: ${o}`),a!==void 0&&a>0&&M.push(`\u5F85\u6267\u884C: ${a}`),i!==void 0&&i>0&&M.push(`\u5931\u8D25: ${i}`),M.length>0&&k.push(M.join(", "));break}case "network_analysis":{if(c){if(k.push(`\u590D\u6742\u5EA6: ${c.complexity}/10`),c.ambiguity!==void 0&&k.push(`\u6A21\u7CCA\u5EA6: ${c.ambiguity}/10`),k.push(`\u9884\u8BA1 Agent \u6570: ${c.estimatedAgents}`),c.priority){let M={low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8",critical:"\u7D27\u6025"};k.push(`\u4F18\u5148\u7EA7: ${M[c.priority]||c.priority}`);}c.estimatedTokens&&k.push(`\u9884\u4F30 Token: ${(c.estimatedTokens/1e3).toFixed(1)}K`),c.requiredCapabilities.length>0&&k.push(`\u6240\u9700\u80FD\u529B: ${c.requiredCapabilities.join(", ")}`),c.optionalCapabilities&&c.optionalCapabilities.length>0&&k.push(`\u53EF\u9009\u80FD\u529B: ${c.optionalCapabilities.join(", ")}`);}break}case "network_mode_select":{if(u){let M={collaborative:"\u534F\u4F5C\u6A21\u5F0F",competitive:"\u7ADE\u4E89\u6A21\u5F0F",hierarchical:"\u5C42\u7EA7\u6A21\u5F0F"};if(k.push(`\u9009\u62E9: ${M[u.mode]||u.mode}`),k.push(`\u539F\u56E0: ${u.reason}`),u.rawAnalysis){let _=u.rawAnalysis.replace(/```json[\s\S]*?```/g,"").replace(/\{[\s\S]*\}/g,"").trim();_&&_.split(`
1677
+ `).filter(P=>P.trim()).forEach(P=>{k.push(P.trim());});}}break}case "network_agent_bid":{if(d){let M=d.participate?"\u2713":"\u2717",_=d.participate?"\u53C2\u4E0E\u7ADE\u6807":"\u653E\u5F03\u7ADE\u6807",P=d.capabilityScore!==void 0?`\u5339\u914D\u5EA6: ${(d.capabilityScore*100).toFixed(0)}%`:"",j=d.confidence!==void 0?`\u7F6E\u4FE1\u5EA6: ${(d.confidence*100).toFixed(0)}%`:"";k.push(`${M} ${d.agentName}: ${_}`),P&&k.push(P),j&&k.push(j),d.reason&&k.push(`\u539F\u56E0: ${d.reason}`);}break}case "network_bidding":{m&&(k.push(`\u6536\u5230\u7ADE\u6807: ${m.totalBids} \u4E2A`),m.selectedAgents.length>0&&k.push(`\u9009\u4E2D: ${m.selectedAgents.join(", ")}`),m.topBid&&k.push(`\u6700\u9AD8\u7F6E\u4FE1\u5EA6: ${m.topBid.agentId} (${(m.topBid.confidence*100).toFixed(0)}%)`));break}case "network_negotiation":{if(g){let M={started:"\u8FDB\u884C\u4E2D",voting:"\u6295\u7968\u4E2D",consensus:"\u5DF2\u8FBE\u6210\u5171\u8BC6",failed:"\u534F\u5546\u5931\u8D25"};k.push(`\u72B6\u6001: ${M[g.status]||g.status}`),k.push(`\u53C2\u4E0E\u8005: ${g.participants.join(", ")}`),g.rounds&&k.push(`\u8F6E\u6B21: ${g.rounds}`);}break}case "network_negotiation_message":{if(h){let M={support:"\u652F\u6301",concern:"\u62C5\u5FE7",counter:"\u53CD\u5BF9",question:"\u63D0\u95EE"};k.push(`\u7C7B\u578B: ${M[h.type]||h.type}`),k.push(`\u8F6E\u6B21: ${h.round}`);let _=h.content;_&&_.length>300?k.push(`\u5185\u5BB9: ${_.slice(0,300)}...`):_&&k.push(`\u5185\u5BB9: ${_}`);}break}case "network_dag":{if(f&&(k.push(`\u8282\u70B9: ${f.nodeCount} \u2502 \u5C42\u7EA7: ${f.levelCount} \u2502 \u5E76\u884C: ${f.maxParallelism} \u2502 \u9884\u4F30: ${Math.round(f.estimatedTime/1e3)}s`),f.nodes&&f.nodes.length>0)){k.push("");let M=__(f.nodes,f.criticalPath);k.push(...M);}break}case "network_node_start":case "network_node_complete":case "network_node_fail":{v&&(v.description&&k.push(v.description),s==="network_node_complete"&&v.output&&k.push(`\u8F93\u51FA: ${v.output.slice(0,80)}${v.output.length>80?"...":""}`),s==="network_node_fail"&&v.error&&k.push(`\u9519\u8BEF: ${v.error}`),v.duration&&k.push(`\u8017\u65F6: ${Math.round(v.duration/1e3)}s`));break}case "network_replan":{b&&(k.push(`\u89E6\u53D1: ${b.trigger}`),k.push(`\u539F\u56E0: ${b.reason}`),b.affectedNodes.length>0&&k.push(`\u5F71\u54CD\u8282\u70B9: ${b.affectedNodes.join(", ")}`));break}case "network_peer_review":{C&&(k.push(`\u8BC4\u5BA1\u8005: ${C.reviewers.join(", ")}`),k.push(`\u5E73\u5747\u8BC4\u5206: ${C.averageScore.toFixed(1)}/5`),C.summary&&k.push(C.summary));break}default:t&&k.push(t);}return k})();return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:E.color,bold:true},"\u2022 ",E.icon," ",E.prefix),T&&I.createElement(y,{color:"magenta",bold:true}," (",T,")"),N()),I.createElement(S,null,I.createElement(y,{dimColor:true},$.length>0?"\u251C\u2500 ":"\u2514\u2500 "),I.createElement(y,{wrap:"wrap"},e)),$.map((k,M)=>I.createElement(S,{key:M},I.createElement(y,{color:"gray"},M===$.length-1?"\u2514\u2500 ":"\u251C\u2500 "),I.createElement(y,{wrap:"wrap"},k))))};var I_={collab_spawn:{icon:"\u{1F680}",color:"cyan",label:"spawn_agent"},collab_delegate:{icon:"\u{1F4CB}",color:"yellow",label:"delegate_task"},collab_query:{icon:"\u{1F50D}",color:"blue",label:"query_agent"},collab_message:{icon:"\u{1F4AC}",color:"magenta",label:"send_message"},collab_wait:{icon:"\u23F3",color:"yellow",label:"wait_result"},collab_terminate:{icon:"\u{1F6D1}",color:"red",label:"terminate_agent"}},vy=({type:s,text:e,details:t,timestamp:n,toolName:r,targetAgentId:o,taskId:i,result:a,sourceLabel:l})=>{let c=I_[s]||{icon:"\u{1F527}",color:"blue",label:"collab"},u=a==="success"?"green":a==="error"?"red":"yellow",d=a==="success"?"\u2713":a==="error"?"\u2717":"\u2026",m=o||i;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,null,c.icon," "),I.createElement(y,{color:c.color,bold:true},r||c.label),l&&I.createElement(y,{dimColor:true}," (",l,")"),a&&I.createElement(y,{color:u}," ",d)),m&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),o&&I.createElement(y,null,I.createElement(y,{dimColor:true},"Agent: "),I.createElement(y,{color:"cyan"},o)),i&&I.createElement(y,null,I.createElement(y,{dimColor:true}," Task: "),I.createElement(y,{color:"yellow"},i))),I.createElement(S,null,I.createElement(y,{dimColor:true},m?" ":"\u2514\u2500 "),I.createElement(y,{wrap:"wrap"},e)),t&&I.createElement(S,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true,wrap:"wrap"},t)))};var bl=(s,e=10)=>{let t=Math.min(Math.max(Math.round(s),0),e),n=e-t;return I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan"},"\u2588".repeat(t)),I.createElement(y,{color:"gray"},"\u2591".repeat(n)),I.createElement(y,null," ",s))},Cy=({analysis:s})=>{let{intent:e,complexity:t,routing:n}=s,r={simple:"\u7B80\u5355 \u2192 \u76F4\u63A5\u6267\u884C",standard:"\u6807\u51C6 \u2192 CCB \u8BC4\u5BA1",complex:"\u590D\u6742 \u2192 \u5B8C\u6574 CCB"}[n.path]||n.path;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"cyan",bold:true},"\u2022 \u25CE \u4EFB\u52A1\u5206\u6790")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white",bold:true},"\u610F\u56FE: "),I.createElement(y,{wrap:"wrap"},e.summary)),e.domain.length>0&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white",bold:true},"\u9886\u57DF: "),I.createElement(y,{color:"yellow"},e.domain.join(", "))),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white",bold:true},"\u590D\u6742\u5EA6: "),I.createElement(y,{color:t.score>=7?"red":t.score>=4?"yellow":"green"},t.score,"/10")),I.createElement(S,{flexDirection:"column"},I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u251C\u2500 "),I.createElement(y,null,"\u8303\u56F4: "),bl(t.dimensions.scopeSize)),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u251C\u2500 "),I.createElement(y,null,"\u6280\u672F\u6DF1\u5EA6: "),bl(t.dimensions.technicalDepth)),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u251C\u2500 "),I.createElement(y,null,"\u4F9D\u8D56\u5EA6: "),bl(t.dimensions.interdependency)),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2502 \u2514\u2500 "),I.createElement(y,null,"\u6A21\u7CCA\u5EA6: "),bl(t.dimensions.ambiguity))),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"white",bold:true},"\u8DEF\u7531: "),I.createElement(y,{color:"magenta"},r),n.needsCCB&&I.createElement(y,{color:"yellow"}," (\u9700\u8981 CCB \u8BC4\u5BA1)")))};var Gd=new Marked;Gd.use(markedTerminal({heading:s=>`\x1B[1m\x1B[36m${s}\x1B[0m`,listitem:s=>` \u2022 ${s}`,strong:s=>`\x1B[1m${s}\x1B[0m`,em:s=>`\x1B[3m${s}\x1B[0m`,codespan:s=>`\x1B[32m\`${s}\`\x1B[0m`,paragraph:s=>`${s}`,emoji:false,reflowText:false,width:100}));Gd.use({async:false});function Ty(s){if(!s)return "";try{let e=Gd.parse(s);return typeof e=="string"?e.replace(/\n{3,}/g,`
1678
1678
 
1679
- `).trim():s}catch{return s}}var Wd=s=>({architecture:{icon:"[A]",color:"cyan"},implementation:{icon:"[I]",color:"blue"},innovation:{icon:"[N]",color:"yellow"},security:{icon:"[S]",color:"magenta"},performance:{icon:"[P]",color:"green"}})[s]||{icon:"[?]",color:"magenta"},Hd=s=>s?s.includes(":")&&s.split(":")[1]||s:"",A_=s=>{let e=s.toLowerCase();return e==="high"||e==="critical"?"red":e==="medium"?"yellow":"blue"},wy=({ccbResult:s,showApprovalPrompt:e=false})=>{let{approved:t,confidence:n,reviews:r,summary:o}=s,i=r.filter(d=>d.verdict==="approve").length,a=r.filter(d=>d.verdict==="concern").length,l=r.filter(d=>d.verdict==="reject").length,c=useMemo(()=>Ty(o.recommendedApproach),[o.recommendedApproach]),u=`\u6295\u7968: ${i} \u540C\u610F${a>0?` / ${a} \u5173\u6CE8`:""}${l>0?` / ${l} \u62D2\u7EDD`:""} | \u7F6E\u4FE1\u5EA6: ${n}%`;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:1},I.createElement(S,{marginBottom:1},I.createElement(y,{color:t?"green":"red",bold:true},t?"\u2713":"\u2717"," CCB \u8BC4\u5BA1",t?"\u901A\u8FC7":"\u672A\u901A\u8FC7"),I.createElement(y,{dimColor:true}," ",u)),o.risks.length>0&&I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{color:"yellow",bold:true},"\u26A0\uFE0F \u98CE\u9669\u6C47\u603B"),o.risks.map((d,m)=>I.createElement(S,{key:m,marginLeft:2},I.createElement(y,{color:A_(d.level)},"\u2022 [",d.level,"] ",d.description)))),o.suggestions.length>0&&I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{color:"blue",bold:true},"\u{1F4A1} \u5EFA\u8BAE"),o.suggestions.map((d,m)=>I.createElement(S,{key:m,marginLeft:2},I.createElement(y,{dimColor:true},"\u2022 ",d)))),I.createElement(S,{flexDirection:"column"},I.createElement(y,{color:"green",bold:true},"\u{1F3AF} \u63A8\u8350\u65B9\u6848"),I.createElement(S,{flexDirection:"column",marginLeft:2},c.split(`
1679
+ `).trim():s}catch{return s}}var Wd=s=>({architecture:{icon:"[A]",color:"cyan"},implementation:{icon:"[I]",color:"blue"},innovation:{icon:"[N]",color:"yellow"},security:{icon:"[S]",color:"magenta"},performance:{icon:"[P]",color:"green"}})[s]||{icon:"[?]",color:"magenta"},Hd=s=>s?s.includes(":")&&s.split(":")[1]||s:"",M_=s=>{let e=s.toLowerCase();return e==="high"||e==="critical"?"red":e==="medium"?"yellow":"blue"},wy=({ccbResult:s,showApprovalPrompt:e=false})=>{let{approved:t,confidence:n,reviews:r,summary:o}=s,i=r.filter(d=>d.verdict==="approve").length,a=r.filter(d=>d.verdict==="concern").length,l=r.filter(d=>d.verdict==="reject").length,c=useMemo(()=>Ty(o.recommendedApproach),[o.recommendedApproach]),u=`\u6295\u7968: ${i} \u540C\u610F${a>0?` / ${a} \u5173\u6CE8`:""}${l>0?` / ${l} \u62D2\u7EDD`:""} | \u7F6E\u4FE1\u5EA6: ${n}%`;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:1},I.createElement(S,{marginBottom:1},I.createElement(y,{color:t?"green":"red",bold:true},t?"\u2713":"\u2717"," CCB \u8BC4\u5BA1",t?"\u901A\u8FC7":"\u672A\u901A\u8FC7"),I.createElement(y,{dimColor:true}," ",u)),o.risks.length>0&&I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{color:"yellow",bold:true},"\u26A0\uFE0F \u98CE\u9669\u6C47\u603B"),o.risks.map((d,m)=>I.createElement(S,{key:m,marginLeft:2},I.createElement(y,{color:M_(d.level)},"\u2022 [",d.level,"] ",d.description)))),o.suggestions.length>0&&I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{color:"blue",bold:true},"\u{1F4A1} \u5EFA\u8BAE"),o.suggestions.map((d,m)=>I.createElement(S,{key:m,marginLeft:2},I.createElement(y,{dimColor:true},"\u2022 ",d)))),I.createElement(S,{flexDirection:"column"},I.createElement(y,{color:"green",bold:true},"\u{1F3AF} \u63A8\u8350\u65B9\u6848"),I.createElement(S,{flexDirection:"column",marginLeft:2},c.split(`
1680
1680
  `).map((d,m)=>d.trim()?I.createElement(S,{key:m},I.createElement(y,{wrap:"wrap"},d)):null))),e&&I.createElement(S,{marginTop:1,flexDirection:"column"},I.createElement(y,{color:"cyan",bold:true},"\u{1F4DD} \u8BF7\u786E\u8BA4\u662F\u5426\u63A5\u53D7\u6B64\u8BC4\u5BA1\u7ED3\u679C:"),I.createElement(S,{marginLeft:2},I.createElement(y,{dimColor:true},"\u6309 "),I.createElement(y,{color:"green",bold:true},"Y"),I.createElement(y,{dimColor:true}," \u786E\u8BA4\u7EE7\u7EED | \u6309 "),I.createElement(y,{color:"red",bold:true},"N"),I.createElement(y,{dimColor:true}," \u91CD\u65B0\u8BC4\u5BA1 | \u6309 "),I.createElement(y,{color:"yellow",bold:true},"E"),I.createElement(y,{dimColor:true}," \u7F16\u8F91\u9700\u6C42"))))},ky=({data:s})=>{let e=Wd(s.perspective),t=Hd(s.model);return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"yellow",bold:true},"\u{1F504} Retry "),I.createElement(y,{color:e.color},e.icon," ",s.agentName),t&&I.createElement(y,{dimColor:true}," (",t,")"),I.createElement(y,{color:"yellow"}," (",s.retryCount,"/",s.maxRetries,")")),I.createElement(S,{marginLeft:2},I.createElement(y,{color:"yellow",wrap:"wrap"},s.error)))},Sy=({data:s})=>{let e=Wd(s.perspective),t=Hd(s.model);return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"red",bold:true},"\u2717 Failed "),I.createElement(y,{color:e.color},e.icon," ",s.agentName),t&&I.createElement(y,{dimColor:true}," (",t,")")),I.createElement(S,{marginLeft:2},I.createElement(y,{color:"red"},"\u5DF2\u91CD\u8BD5 ",s.retryCount," \u6B21\uFF0C\u8BE5\u6A21\u578B\u6682\u65F6\u4E0B\u7EBF")),I.createElement(S,{marginLeft:2},I.createElement(y,{color:"red",wrap:"wrap"},s.error)))};var _y=({data:s})=>{let e=Wd(s.perspective),t=Hd(s.model),n={approve:{icon:"\u2713",color:"green",text:"\u540C\u610F"},concern:{icon:"\u25B3",color:"yellow",text:"\u6709\u987E\u8651"},reject:{icon:"\u2717",color:"red",text:"\u62D2\u7EDD"}}[s.verdict],r=useMemo(()=>s.analysis?Ty(s.analysis):"",[s.analysis]);return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:1},I.createElement(S,{marginBottom:r?1:0},I.createElement(y,{color:e.color,bold:true},e.icon," ",s.agentName),t&&I.createElement(y,{dimColor:true}," (",t,")"),I.createElement(y,{dimColor:true}," \u2192 "),I.createElement(y,{color:n.color,bold:true},n.icon," ",n.text)),r&&I.createElement(S,{flexDirection:"column",marginLeft:2},r.split(`
1681
- `).map((o,i)=>o.trim()?I.createElement(S,{key:i},I.createElement(y,{wrap:"wrap"},o)):null)),s.risks&&s.risks.length>0&&I.createElement(S,{flexDirection:"column",marginLeft:2,marginTop:1},I.createElement(y,{color:"yellow",bold:true},"\u26A0\uFE0F \u98CE\u9669"),s.risks.map((o,i)=>I.createElement(S,{key:i,marginLeft:2},I.createElement(y,{color:"yellow"},"\u2022 ",o)))),s.suggestions&&s.suggestions.length>0&&I.createElement(S,{flexDirection:"column",marginLeft:2,marginTop:1},I.createElement(y,{color:"blue",bold:true},"\u{1F4A1} \u5EFA\u8BAE"),s.suggestions.map((o,i)=>I.createElement(S,{key:i,marginLeft:2},I.createElement(y,{dimColor:true},"\u2022 ",o)))))};var M_=s=>{if(s<60)return `${s}\u79D2`;let e=Math.floor(s/60),t=s%60;return t>0?`${e}\u5206${t}\u79D2`:`${e}\u5206\u949F`},Iy=({dag:s})=>{let{nodeCount:e,levelCount:t,maxParallelism:n,criticalPath:r,estimatedTime:o}=s;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"blue",bold:true},"\u2022 \u25C8 DAG \u4EFB\u52A1\u89C4\u5212")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white"},"\u8282\u70B9: "),I.createElement(y,{color:"cyan",bold:true},e),I.createElement(y,null," \u2502 "),I.createElement(y,{color:"white"},"\u5C42\u7EA7: "),I.createElement(y,{color:"cyan",bold:true},t),I.createElement(y,null," \u2502 "),I.createElement(y,{color:"white"},"\u6700\u5927\u5E76\u884C: "),I.createElement(y,{color:"cyan",bold:true},n),I.createElement(y,null," \u2502 "),I.createElement(y,{color:"white"},"\u9884\u4F30: "),I.createElement(y,{color:"yellow",bold:true},M_(o))),r.length>0&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"white",bold:true},"\u5173\u952E\u8DEF\u5F84: "),I.createElement(y,{color:"magenta"},r.slice(0,6).join(" \u2192 "),r.length>6&&` \u2192 ... (${r.length-6} more)`)))};var P_=(s,e)=>{let t={pending:{icon:"\u25CB",color:"gray",text:"\u5F85\u6267\u884C"},ready:{icon:"\u25CE",color:"cyan",text:"\u5C31\u7EEA"},running:{icon:"\u25B6",color:"blue",text:"\u6267\u884C\u4E2D"},completed:{icon:"\u2713",color:"green",text:"\u5B8C\u6210"},failed:{icon:"\u2717",color:"red",text:"\u5931\u8D25"}};return e==="start"?{icon:"\u25B6",color:"blue",text:"\u5F00\u59CB\u6267\u884C"}:e==="complete"?{icon:"\u2713",color:"green",text:"\u6267\u884C\u5B8C\u6210"}:e==="fail"?{icon:"\u2717",color:"red",text:"\u6267\u884C\u5931\u8D25"}:e==="retry"?{icon:"\u{1F504}",color:"yellow",text:"\u91CD\u8BD5\u4E2D"}:t[s]||t.pending},zd=({node:s,eventType:e,progress:t,retryInfo:n})=>{let r=P_(s.status,e),o=t?`Level ${t.level+1}/${t.totalLevels}, ${t.completed}/${t.total} \u5B8C\u6210`:"",i=n?`(\u7B2C ${n.retryCount}/${n.maxRetries} \u6B21\u91CD\u8BD5)`:"";return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:r.color,bold:true},"\u2022 ",r.icon," ",s.nodeId),I.createElement(y,{color:"gray"}," (",s.role,")"),s.model&&I.createElement(y,{color:"magenta"}," [",s.model,"]"),I.createElement(y,null," - "),I.createElement(y,{color:r.color},r.text),i&&I.createElement(I.Fragment,null,I.createElement(y,{color:"gray"}," "),I.createElement(y,{color:"yellow"},i)),o&&I.createElement(I.Fragment,null,I.createElement(y,{color:"gray"}," | "),I.createElement(y,{color:"cyan"},o))),s.description&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{wrap:"wrap"},s.description)),e==="retry"&&s.error&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"yellow"},"\u539F\u56E0: "),I.createElement(y,{color:"yellow",wrap:"wrap"},s.error)),e==="complete"&&s.output&&I.createElement(S,{flexDirection:"column"},I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"green"},"\u8F93\u51FA: ")),I.createElement(S,{marginLeft:3,flexDirection:"column"},I.createElement(hl,{content:s.output}))),e==="fail"&&s.error&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"red"},"\u9519\u8BEF: "),I.createElement(y,{color:"red",wrap:"wrap"},s.error)))};var Ey=({progress:s})=>{let{completed:e,total:t,running:n,failed:r,pending:o,currentLevel:i,totalLevels:a}=s,l=t>0?Math.round(e/t*100):0,c=25,u=Math.floor(e/t*c),d=Math.min(Math.floor(n/t*c),c-u),m=Math.min(Math.floor(r/t*c),c-u-d),g=c-u-d-m;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"blue",bold:true},"\u2022 \u25C8 \u6267\u884C\u8FDB\u5EA6"),I.createElement(y,{color:"gray"}," (Level ",i,"/",a,")")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"green"},"\u2588".repeat(u)),I.createElement(y,{color:"yellow"},"\u2593".repeat(d)),I.createElement(y,{color:"red"},"\u2592".repeat(m)),I.createElement(y,{color:"gray"},"\u2591".repeat(g)),I.createElement(y,null," "),I.createElement(y,{color:"white",bold:true},l,"%")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"green"},"\u2713 ",e),I.createElement(y,{color:"gray"}," \u2502 "),I.createElement(y,{color:"yellow"},"\u25B6 ",n),I.createElement(y,{color:"gray"}," \u2502 "),I.createElement(y,{color:"gray"},"\u25CB ",o),r>0&&I.createElement(I.Fragment,null,I.createElement(y,{color:"gray"}," \u2502 "),I.createElement(y,{color:"red"},"\u2717 ",r)),I.createElement(y,{color:"gray"}," / ",t," \u4EFB\u52A1")))};var R_=({entry:s})=>{let e=null;if(s.type==="info"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"info",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="warning"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"warning",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="error"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"error",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if((s.type==="thinking"||s.type==="reasoning")&&s.text)e=I.createElement(gy,{content:s.text,streaming:s.isStreaming,type:s.type,timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="plan"&&s.planSteps){let t={type:"plan_update",explanation:s.planExplanation,plan:s.planSteps,timestamp:s.timestamp.getTime()};e=I.createElement(fy,{event:t,timestamp:s.timestamp,sourceLabel:s.sourceLabel});}else if(s.type==="queued_message"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"queued_message",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="supervisor"&&s.message)e=I.createElement(py,{message:s.message,timestamp:s.timestamp,sourceLabel:s.sourceLabel,sourceType:s.sourceType});else if((s.type==="agent_spawn"||s.type==="agent_progress"||s.type==="agent_complete"||s.type==="agent_error")&&s.agentId)e=I.createElement(yy,{agentId:s.agentId,agentIndex:s.agentIndex||1,status:s.agentStatus||"running",task:s.agentTask,progress:s.agentProgress,message:s.text,error:s.agentError,model:s.agentModel,timestamp:s.timestamp,roleId:s.agentRoleId});else if((s.type==="network_decompose"||s.type==="network_task"||s.type==="network_route"||s.type==="network_progress"||s.type==="network_analysis"||s.type==="network_mode_select"||s.type==="network_agent_bid"||s.type==="network_bidding"||s.type==="network_negotiation"||s.type==="network_negotiation_message"||s.type==="network_dag"||s.type==="network_node_start"||s.type==="network_node_complete"||s.type==="network_node_fail"||s.type==="network_replan"||s.type==="network_peer_review")&&s.text)e=I.createElement(by,{type:s.type,text:s.text,details:s.details,timestamp:s.timestamp,networkTaskId:s.networkTaskId,networkRoleId:s.networkRoleId,networkCompleted:s.networkCompleted,networkTotal:s.networkTotal,networkRunning:s.networkRunning,networkFailed:s.networkFailed,networkPending:s.networkPending,isComplete:s.isComplete,networkAnalysis:s.networkAnalysis,networkModeSelect:s.networkModeSelect,networkAgentBid:s.networkAgentBid,networkBidding:s.networkBidding,networkNegotiation:s.networkNegotiation,networkNegotiationMessage:s.networkNegotiationMessage,networkDAG:s.networkDAG,networkNode:s.networkNode,networkReplan:s.networkReplan,networkPeerReview:s.networkPeerReview,sourceLabel:s.sourceLabel});else if((s.type==="collab_spawn"||s.type==="collab_delegate"||s.type==="collab_query"||s.type==="collab_message"||s.type==="collab_wait"||s.type==="collab_terminate")&&s.text)e=I.createElement(vy,{type:s.type,text:s.text,details:s.details,timestamp:s.timestamp,toolName:s.collabToolName,targetAgentId:s.collabTargetAgentId,taskId:s.collabTaskId,result:s.collabResult,sourceLabel:s.sourceLabel});else if(s.type==="pipeline_routing"&&s.pipelineRouting){let n={simple:"\u{1F680} \u7B80\u5355\u8DEF\u5F84 (\u76F4\u63A5\u6267\u884C)",standard:"\u26A1 \u6807\u51C6\u8DEF\u5F84 (CCB + DAG)",complex:"\u{1F52C} \u590D\u6742\u8DEF\u5F84 (\u5B8C\u6574 CCB + \u591A\u9636\u6BB5 DAG)"}[s.pipelineRouting.path]||s.pipelineRouting.path;e=I.createElement(Os,{text:n,details:s.pipelineRouting.reason,type:"info",timestamp:s.timestamp});}else if(s.type==="pipeline_analysis"&&s.pipelineAnalysis)e=I.createElement(Cy,{analysis:s.pipelineAnalysis,timestamp:s.timestamp});else if(s.type==="pipeline_ccb"&&s.pipelineCCB)e=I.createElement(wy,{ccbResult:s.pipelineCCB,timestamp:s.timestamp});else if(s.type==="ccb_review"&&s.ccbReview)e=I.createElement(_y,{data:s.ccbReview,timestamp:s.timestamp});else if(s.type==="ccb_retry"&&s.ccbRetry)e=I.createElement(ky,{data:s.ccbRetry,timestamp:s.timestamp});else if(s.type==="ccb_failed"&&s.ccbFailed)e=I.createElement(Sy,{data:s.ccbFailed,timestamp:s.timestamp});else if(s.type==="pipeline_dag"&&s.pipelineDAG)e=I.createElement(Iy,{dag:s.pipelineDAG,timestamp:s.timestamp});else if((s.type==="pipeline_node_start"||s.type==="pipeline_node_complete"||s.type==="pipeline_node_fail"||s.type==="pipeline_node_retry")&&(s.pipelineNode||s.pipelineNodeRetry)){if(s.type==="pipeline_node_retry"&&s.pipelineNodeRetry){let t=s.pipelineNodeRetry,n=s.pipelineProgress?{level:s.pipelineProgress.currentLevel??0,totalLevels:s.pipelineProgress.totalLevels??1,completed:s.pipelineProgress.completed??0,total:s.pipelineProgress.total??0}:void 0;e=I.createElement(zd,{node:{nodeId:t.nodeId,role:t.role,error:t.error,status:"running"},eventType:"retry",timestamp:s.timestamp,progress:n,retryInfo:{retryCount:t.retryCount,maxRetries:t.maxRetries}});}else if(s.pipelineNode){let t=s.type==="pipeline_node_start"?"start":s.type==="pipeline_node_complete"?"complete":"fail",n=s.pipelineProgress?{level:s.pipelineProgress.currentLevel??0,totalLevels:s.pipelineProgress.totalLevels??1,completed:s.pipelineProgress.completed??0,total:s.pipelineProgress.total??0}:void 0;e=I.createElement(zd,{node:s.pipelineNode,eventType:t,timestamp:s.timestamp,progress:n});}}else s.type==="pipeline_progress"&&s.pipelineProgress?e=I.createElement(Ey,{progress:s.pipelineProgress,timestamp:s.timestamp}):fl[s.type]&&s.text?e=I.createElement(hy,{type:s.type,message:s.text,details:s.details,timestamp:s.timestamp,isStreaming:s.isStreaming,sourceLabel:s.sourceLabel}):s.message&&(e=D_(s.message,s.id,s.isStreaming,s.timestamp,s.sourceLabel));return e?I.createElement(S,{flexDirection:"column"},e):null};function D_(s,e,t,n,r){let o=`msg-${e}`;if(s.role==="user"&&Array.isArray(s.content)&&s.content.some(a=>a.type==="tool_result"))return I.createElement(Ud,{key:o,message:s,timestamp:n});switch(s.role){case "user":return I.createElement(dy,{key:o,message:s,timestamp:n});case "assistant":return I.createElement(my,{key:o,message:s,streaming:t,timestamp:n,sourceLabel:r});case "system":case "tool":let a=s;return a.role==="user"&&Array.isArray(a.content)&&a.content.some(l=>l.type==="tool_result")?I.createElement(Ud,{key:o,message:a,timestamp:n}):I.createElement(S,{key:o},I.createElement(y,{color:"gray",dimColor:true},"[Unknown message type: ",s.role,"]"))}}var qd=I.memo(R_,(s,e)=>s.entry.id===e.entry.id&&s.entry.isStreaming===e.entry.isStreaming);Z();uu();var My=({value:s,placeholder:e="Type a message... (? for help)",disabled:t=false,multiline:n=false,completions:r=[],menuActive:o=false,imageCount:i=0,onChange:a,onSubmit:l,onHistoryUp:c,onHistoryDown:u,onTabComplete:d,onPasteImage:m})=>{let [g,h]=useState(0),[f,v]=useState(false),[b,C]=useState(0),T=s.length-g;useRef(false);useRef("");let N=useRef(s),D=useRef(T);useEffect(()=>{N.current=s,D.current=T;},[s,T]);let $=true,k=useRef(t),M=useRef(o);useEffect(()=>{k.current=t,M.current=o;},[t,o]),et((O,F)=>{if(!(k.current||M.current)){if(O&&(O.includes("[200~")||O.includes("[201~"))){p.debug("INPUT_LINE","Filtered out bracketed paste marker from input");return}if(!F.escape){if(F.tab){if(d){let U=d(s);U&&(a(U),h(0));}return}if((F.meta||F.ctrl)&&(O==="v"||O==="V")&&m&&(p.info("INPUT_LINE","\u{1F3AF} Cmd+V / Ctrl+V detected - checking clipboard for image..."),setTimeout(()=>{cu().then(U=>{U?(m(U),p.info("INPUT_LINE",`\u{1F4CE} Image attached via Cmd+V: ${U.name} (${Math.round(U.data.length/1024)}KB)`)):p.debug("INPUT_LINE","No image in clipboard (Cmd+V fallback)");}).catch(U=>{p.error("INPUT_LINE","Failed to paste image (Cmd+V fallback)",{error:U});});},50)),F.return){if(n&&!F.shift){let U=s.slice(0,T)+`
1681
+ `).map((o,i)=>o.trim()?I.createElement(S,{key:i},I.createElement(y,{wrap:"wrap"},o)):null)),s.risks&&s.risks.length>0&&I.createElement(S,{flexDirection:"column",marginLeft:2,marginTop:1},I.createElement(y,{color:"yellow",bold:true},"\u26A0\uFE0F \u98CE\u9669"),s.risks.map((o,i)=>I.createElement(S,{key:i,marginLeft:2},I.createElement(y,{color:"yellow"},"\u2022 ",o)))),s.suggestions&&s.suggestions.length>0&&I.createElement(S,{flexDirection:"column",marginLeft:2,marginTop:1},I.createElement(y,{color:"blue",bold:true},"\u{1F4A1} \u5EFA\u8BAE"),s.suggestions.map((o,i)=>I.createElement(S,{key:i,marginLeft:2},I.createElement(y,{dimColor:true},"\u2022 ",o)))))};var P_=s=>{if(s<60)return `${s}\u79D2`;let e=Math.floor(s/60),t=s%60;return t>0?`${e}\u5206${t}\u79D2`:`${e}\u5206\u949F`},Iy=({dag:s})=>{let{nodeCount:e,levelCount:t,maxParallelism:n,criticalPath:r,estimatedTime:o}=s;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"blue",bold:true},"\u2022 \u25C8 DAG \u4EFB\u52A1\u89C4\u5212")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"white"},"\u8282\u70B9: "),I.createElement(y,{color:"cyan",bold:true},e),I.createElement(y,null," \u2502 "),I.createElement(y,{color:"white"},"\u5C42\u7EA7: "),I.createElement(y,{color:"cyan",bold:true},t),I.createElement(y,null," \u2502 "),I.createElement(y,{color:"white"},"\u6700\u5927\u5E76\u884C: "),I.createElement(y,{color:"cyan",bold:true},n),I.createElement(y,null," \u2502 "),I.createElement(y,{color:"white"},"\u9884\u4F30: "),I.createElement(y,{color:"yellow",bold:true},P_(o))),r.length>0&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"white",bold:true},"\u5173\u952E\u8DEF\u5F84: "),I.createElement(y,{color:"magenta"},r.slice(0,6).join(" \u2192 "),r.length>6&&` \u2192 ... (${r.length-6} more)`)))};var R_=(s,e)=>{let t={pending:{icon:"\u25CB",color:"gray",text:"\u5F85\u6267\u884C"},ready:{icon:"\u25CE",color:"cyan",text:"\u5C31\u7EEA"},running:{icon:"\u25B6",color:"blue",text:"\u6267\u884C\u4E2D"},completed:{icon:"\u2713",color:"green",text:"\u5B8C\u6210"},failed:{icon:"\u2717",color:"red",text:"\u5931\u8D25"}};return e==="start"?{icon:"\u25B6",color:"blue",text:"\u5F00\u59CB\u6267\u884C"}:e==="complete"?{icon:"\u2713",color:"green",text:"\u6267\u884C\u5B8C\u6210"}:e==="fail"?{icon:"\u2717",color:"red",text:"\u6267\u884C\u5931\u8D25"}:e==="retry"?{icon:"\u{1F504}",color:"yellow",text:"\u91CD\u8BD5\u4E2D"}:t[s]||t.pending},zd=({node:s,eventType:e,progress:t,retryInfo:n})=>{let r=R_(s.status,e),o=t?`Level ${t.level+1}/${t.totalLevels}, ${t.completed}/${t.total} \u5B8C\u6210`:"",i=n?`(\u7B2C ${n.retryCount}/${n.maxRetries} \u6B21\u91CD\u8BD5)`:"";return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:r.color,bold:true},"\u2022 ",r.icon," ",s.nodeId),I.createElement(y,{color:"gray"}," (",s.role,")"),s.model&&I.createElement(y,{color:"magenta"}," [",s.model,"]"),I.createElement(y,null," - "),I.createElement(y,{color:r.color},r.text),i&&I.createElement(I.Fragment,null,I.createElement(y,{color:"gray"}," "),I.createElement(y,{color:"yellow"},i)),o&&I.createElement(I.Fragment,null,I.createElement(y,{color:"gray"}," | "),I.createElement(y,{color:"cyan"},o))),s.description&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{wrap:"wrap"},s.description)),e==="retry"&&s.error&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"yellow"},"\u539F\u56E0: "),I.createElement(y,{color:"yellow",wrap:"wrap"},s.error)),e==="complete"&&s.output&&I.createElement(S,{flexDirection:"column"},I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"green"},"\u8F93\u51FA: ")),I.createElement(S,{marginLeft:3,flexDirection:"column"},I.createElement(hl,{content:s.output}))),e==="fail"&&s.error&&I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"red"},"\u9519\u8BEF: "),I.createElement(y,{color:"red",wrap:"wrap"},s.error)))};var Ey=({progress:s})=>{let{completed:e,total:t,running:n,failed:r,pending:o,currentLevel:i,totalLevels:a}=s,l=t>0?Math.round(e/t*100):0,c=25,u=Math.floor(e/t*c),d=Math.min(Math.floor(n/t*c),c-u),m=Math.min(Math.floor(r/t*c),c-u-d),g=c-u-d-m;return I.createElement(S,{flexDirection:"column",marginTop:1,marginBottom:0},I.createElement(S,null,I.createElement(y,{color:"blue",bold:true},"\u2022 \u25C8 \u6267\u884C\u8FDB\u5EA6"),I.createElement(y,{color:"gray"}," (Level ",i,"/",a,")")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u251C\u2500 "),I.createElement(y,{color:"green"},"\u2588".repeat(u)),I.createElement(y,{color:"yellow"},"\u2593".repeat(d)),I.createElement(y,{color:"red"},"\u2592".repeat(m)),I.createElement(y,{color:"gray"},"\u2591".repeat(g)),I.createElement(y,null," "),I.createElement(y,{color:"white",bold:true},l,"%")),I.createElement(S,null,I.createElement(y,{dimColor:true},"\u2514\u2500 "),I.createElement(y,{color:"green"},"\u2713 ",e),I.createElement(y,{color:"gray"}," \u2502 "),I.createElement(y,{color:"yellow"},"\u25B6 ",n),I.createElement(y,{color:"gray"}," \u2502 "),I.createElement(y,{color:"gray"},"\u25CB ",o),r>0&&I.createElement(I.Fragment,null,I.createElement(y,{color:"gray"}," \u2502 "),I.createElement(y,{color:"red"},"\u2717 ",r)),I.createElement(y,{color:"gray"}," / ",t," \u4EFB\u52A1")))};var D_=({entry:s})=>{let e=null;if(s.type==="info"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"info",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="warning"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"warning",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="error"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"error",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if((s.type==="thinking"||s.type==="reasoning")&&s.text)e=I.createElement(gy,{content:s.text,streaming:s.isStreaming,type:s.type,timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="plan"&&s.planSteps){let t={type:"plan_update",explanation:s.planExplanation,plan:s.planSteps,timestamp:s.timestamp.getTime()};e=I.createElement(fy,{event:t,timestamp:s.timestamp,sourceLabel:s.sourceLabel});}else if(s.type==="queued_message"&&s.text)e=I.createElement(Os,{text:s.text,details:s.details,type:"queued_message",timestamp:s.timestamp,sourceLabel:s.sourceLabel});else if(s.type==="supervisor"&&s.message)e=I.createElement(py,{message:s.message,timestamp:s.timestamp,sourceLabel:s.sourceLabel,sourceType:s.sourceType});else if((s.type==="agent_spawn"||s.type==="agent_progress"||s.type==="agent_complete"||s.type==="agent_error")&&s.agentId)e=I.createElement(yy,{agentId:s.agentId,agentIndex:s.agentIndex||1,status:s.agentStatus||"running",task:s.agentTask,progress:s.agentProgress,message:s.text,error:s.agentError,model:s.agentModel,timestamp:s.timestamp,roleId:s.agentRoleId});else if((s.type==="network_decompose"||s.type==="network_task"||s.type==="network_route"||s.type==="network_progress"||s.type==="network_analysis"||s.type==="network_mode_select"||s.type==="network_agent_bid"||s.type==="network_bidding"||s.type==="network_negotiation"||s.type==="network_negotiation_message"||s.type==="network_dag"||s.type==="network_node_start"||s.type==="network_node_complete"||s.type==="network_node_fail"||s.type==="network_replan"||s.type==="network_peer_review")&&s.text)e=I.createElement(by,{type:s.type,text:s.text,details:s.details,timestamp:s.timestamp,networkTaskId:s.networkTaskId,networkRoleId:s.networkRoleId,networkCompleted:s.networkCompleted,networkTotal:s.networkTotal,networkRunning:s.networkRunning,networkFailed:s.networkFailed,networkPending:s.networkPending,isComplete:s.isComplete,networkAnalysis:s.networkAnalysis,networkModeSelect:s.networkModeSelect,networkAgentBid:s.networkAgentBid,networkBidding:s.networkBidding,networkNegotiation:s.networkNegotiation,networkNegotiationMessage:s.networkNegotiationMessage,networkDAG:s.networkDAG,networkNode:s.networkNode,networkReplan:s.networkReplan,networkPeerReview:s.networkPeerReview,sourceLabel:s.sourceLabel});else if((s.type==="collab_spawn"||s.type==="collab_delegate"||s.type==="collab_query"||s.type==="collab_message"||s.type==="collab_wait"||s.type==="collab_terminate")&&s.text)e=I.createElement(vy,{type:s.type,text:s.text,details:s.details,timestamp:s.timestamp,toolName:s.collabToolName,targetAgentId:s.collabTargetAgentId,taskId:s.collabTaskId,result:s.collabResult,sourceLabel:s.sourceLabel});else if(s.type==="pipeline_routing"&&s.pipelineRouting){let n={simple:"\u{1F680} \u7B80\u5355\u8DEF\u5F84 (\u76F4\u63A5\u6267\u884C)",standard:"\u26A1 \u6807\u51C6\u8DEF\u5F84 (CCB + DAG)",complex:"\u{1F52C} \u590D\u6742\u8DEF\u5F84 (\u5B8C\u6574 CCB + \u591A\u9636\u6BB5 DAG)"}[s.pipelineRouting.path]||s.pipelineRouting.path;e=I.createElement(Os,{text:n,details:s.pipelineRouting.reason,type:"info",timestamp:s.timestamp});}else if(s.type==="pipeline_analysis"&&s.pipelineAnalysis)e=I.createElement(Cy,{analysis:s.pipelineAnalysis,timestamp:s.timestamp});else if(s.type==="pipeline_ccb"&&s.pipelineCCB)e=I.createElement(wy,{ccbResult:s.pipelineCCB,timestamp:s.timestamp});else if(s.type==="ccb_review"&&s.ccbReview)e=I.createElement(_y,{data:s.ccbReview,timestamp:s.timestamp});else if(s.type==="ccb_retry"&&s.ccbRetry)e=I.createElement(ky,{data:s.ccbRetry,timestamp:s.timestamp});else if(s.type==="ccb_failed"&&s.ccbFailed)e=I.createElement(Sy,{data:s.ccbFailed,timestamp:s.timestamp});else if(s.type==="pipeline_dag"&&s.pipelineDAG)e=I.createElement(Iy,{dag:s.pipelineDAG,timestamp:s.timestamp});else if((s.type==="pipeline_node_start"||s.type==="pipeline_node_complete"||s.type==="pipeline_node_fail"||s.type==="pipeline_node_retry")&&(s.pipelineNode||s.pipelineNodeRetry)){if(s.type==="pipeline_node_retry"&&s.pipelineNodeRetry){let t=s.pipelineNodeRetry,n=s.pipelineProgress?{level:s.pipelineProgress.currentLevel??0,totalLevels:s.pipelineProgress.totalLevels??1,completed:s.pipelineProgress.completed??0,total:s.pipelineProgress.total??0}:void 0;e=I.createElement(zd,{node:{nodeId:t.nodeId,role:t.role,error:t.error,status:"running"},eventType:"retry",timestamp:s.timestamp,progress:n,retryInfo:{retryCount:t.retryCount,maxRetries:t.maxRetries}});}else if(s.pipelineNode){let t=s.type==="pipeline_node_start"?"start":s.type==="pipeline_node_complete"?"complete":"fail",n=s.pipelineProgress?{level:s.pipelineProgress.currentLevel??0,totalLevels:s.pipelineProgress.totalLevels??1,completed:s.pipelineProgress.completed??0,total:s.pipelineProgress.total??0}:void 0;e=I.createElement(zd,{node:s.pipelineNode,eventType:t,timestamp:s.timestamp,progress:n});}}else s.type==="pipeline_progress"&&s.pipelineProgress?e=I.createElement(Ey,{progress:s.pipelineProgress,timestamp:s.timestamp}):fl[s.type]&&s.text?e=I.createElement(hy,{type:s.type,message:s.text,details:s.details,timestamp:s.timestamp,isStreaming:s.isStreaming,sourceLabel:s.sourceLabel}):s.message&&(e=N_(s.message,s.id,s.isStreaming,s.timestamp,s.sourceLabel));return e?I.createElement(S,{flexDirection:"column"},e):null};function N_(s,e,t,n,r){let o=`msg-${e}`;if(s.role==="user"&&Array.isArray(s.content)&&s.content.some(a=>a.type==="tool_result"))return I.createElement(Ud,{key:o,message:s,timestamp:n});switch(s.role){case "user":return I.createElement(dy,{key:o,message:s,timestamp:n});case "assistant":return I.createElement(my,{key:o,message:s,streaming:t,timestamp:n,sourceLabel:r});case "system":case "tool":let a=s;return a.role==="user"&&Array.isArray(a.content)&&a.content.some(l=>l.type==="tool_result")?I.createElement(Ud,{key:o,message:a,timestamp:n}):I.createElement(S,{key:o},I.createElement(y,{color:"gray",dimColor:true},"[Unknown message type: ",s.role,"]"))}}var qd=I.memo(D_,(s,e)=>s.entry.id===e.entry.id&&s.entry.isStreaming===e.entry.isStreaming);Z();uu();var My=({value:s,placeholder:e="Type a message... (? for help)",disabled:t=false,multiline:n=false,completions:r=[],menuActive:o=false,imageCount:i=0,onChange:a,onSubmit:l,onHistoryUp:c,onHistoryDown:u,onTabComplete:d,onPasteImage:m})=>{let [g,h]=useState(0),[f,v]=useState(false),[b,C]=useState(0),T=s.length-g;useRef(false);useRef("");let N=useRef(s),D=useRef(T);useEffect(()=>{N.current=s,D.current=T;},[s,T]);let $=true,k=useRef(t),M=useRef(o);useEffect(()=>{k.current=t,M.current=o;},[t,o]),et((O,F)=>{if(!(k.current||M.current)){if(O&&(O.includes("[200~")||O.includes("[201~"))){p.debug("INPUT_LINE","Filtered out bracketed paste marker from input");return}if(!F.escape){if(F.tab){if(d){let U=d(s);U&&(a(U),h(0));}return}if((F.meta||F.ctrl)&&(O==="v"||O==="V")&&m&&(p.info("INPUT_LINE","\u{1F3AF} Cmd+V / Ctrl+V detected - checking clipboard for image..."),setTimeout(()=>{cu().then(U=>{U?(m(U),p.info("INPUT_LINE",`\u{1F4CE} Image attached via Cmd+V: ${U.name} (${Math.round(U.data.length/1024)}KB)`)):p.debug("INPUT_LINE","No image in clipboard (Cmd+V fallback)");}).catch(U=>{p.error("INPUT_LINE","Failed to paste image (Cmd+V fallback)",{error:U});});},50)),F.return){if(n&&!F.shift){let U=s.slice(0,T)+`
1682
1682
  `+s.slice(T);a(U);return}process.env.CLI_DEBUG==="1"&&p.debug("INPUT_LINE","Enter pressed - submitting",{valueLength:s.length,value:s.substring(0,50),disabled:t}),l(),h(0),v(false);return}if(F.upArrow){c(),h(0);return}if(F.downArrow){u(),h(0);return}if(F.leftArrow){h(Math.min(g+1,s.length));return}if(F.rightArrow){h(Math.max(g-1,0));return}if(F.home||F.ctrl&&O==="a"){h(s.length);return}if(F.end||F.ctrl&&O==="e"){h(0);return}if(F.backspace||F.delete){if(g===s.length)return;let U=T-1,K=s.slice(0,U)+s.slice(U+1);a(K);return}if(!F.ctrl&&!F.meta&&O){let U=s.slice(0,T)+O+s.slice(T);a(U);return}}}},{isActive:$});let _=s.slice(0,T),P=s[T]||" ",j=s.slice(T+1),z=n?s.split(`
1683
- `):[s];return I.createElement(S,{flexDirection:"column"},I.createElement(S,{flexDirection:n?"column":"row"},!n&&I.createElement(y,{color:"green",bold:true},"> "),t?I.createElement(y,{dimColor:true},s||e):!s?I.createElement(S,null,!n&&I.createElement(y,{inverse:true}," "),I.createElement(y,{dimColor:true},e)):n?z.map((O,F)=>I.createElement(S,{key:F},I.createElement(y,{color:"green",bold:true},F===0?"> ":"\u2502 "),I.createElement(y,null,O))):I.createElement(y,null,_,I.createElement(y,{inverse:true},P),j)),f&&r.length>0&&I.createElement(S,{paddingLeft:2,flexDirection:"column"},I.createElement(y,{color:"yellow"},"Suggestions:"),r.slice(0,5).map((O,F)=>I.createElement(y,{key:F,color:F===b?"cyan":"white",bold:F===b},F===b?"\u2192 ":" ",O))))};var N_=({isRunning:s,statusText:e="",tokenStats:t,streamingTokens:n=0,streamingStartTime:r=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,v]=useState(0),[b,C]=useState(0),[T,w]=useState(0),[E,N]=useState(0);useEffect(()=>{s?(h(r||Date.now()),v(0)):!s&&(t?.output||0)===0&&(h(null),v(0));},[s,r,t?.output]),useEffect(()=>{if(!s||g===null)return;let V=setInterval(()=>{v(Math.floor((Date.now()-g)/1e3));},500);return ()=>clearInterval(V)},[s,g]),useEffect(()=>{if(!s||n===0){C(0);return}let V=Math.floor(n);if(b===V)return;let re=V-b,ue=Math.min(Math.abs(re),20),se=re/ue,ee=setInterval(()=>{C(ve=>{let L=ve+se;return Math.abs(L-V)<1?V:L});},50);return ()=>clearInterval(ee)},[n,s,b]),useEffect(()=>{let V=t?.output||0;if(T===V)return;let re=V-T;if(Math.abs(re)>100){w(V);return}let ue=Math.max(Math.ceil(Math.abs(re)/10),3),se=re/ue,ee=setInterval(()=>{w(ve=>{let L=ve+se;return Math.abs(L-V)<1?V:L});},10);return ()=>clearInterval(ee)},[t?.output,T]),useEffect(()=>{if(!s){N(0);return}let re=(e||"Thinking...").length,ue=setInterval(()=>{N(se=>(se+1)%(re+3));},80);return ()=>clearInterval(ue)},[s,e]);let D=()=>{if(f<60)return `${f}s`;let V=Math.floor(f/60),re=f%60;return `${V}m ${re}s`},$=V=>V>=1e6?(V/1e6).toFixed(1)+"M":V>=1e3?(V/1e3).toFixed(1)+"K":V.toString(),k=t?.contextWindow||0,M=t?.tokensUsedForContext||t?.total||0,_=t?.pressure||0,P=Math.round(_*100),j=()=>_>.8?"red":_>.5?"yellow":"green",z=V=>V.split("").map((ue,se)=>{let ae=se-E;return ae>=0&&ae<2?I.createElement(y,{key:se,color:"white",bold:true},ue):ae>=-1&&ae<0?I.createElement(y,{key:se,color:"cyanBright"},ue):I.createElement(y,{key:se,color:"cyan"},ue)}),O=(()=>{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+)/),K=U?U[1]:null,de=l.length>0,W=l.find(V=>V.agentId==="Main"),H=l.filter(V=>V.agentId!=="Main"),ne=H.length>c,J=()=>H.length===0?null:I.createElement(S,null,I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"magenta"},H.length),I.createElement(y,{dimColor:true}," workers"),ne&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2022 Ctrl+G"))),fe=(V,re)=>{let ue=V.pressure||0,se=Math.round(ue*100),ae=()=>ue>.8?"red":ue>.5?"yellow":"green",ee=()=>{switch(V.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:ve,color:L}=ee(),q=V.currentTask?V.currentTask.length>20?V.currentTask.slice(0,17)+"...":V.currentTask:"";return I.createElement(S,{key:V.agentId,justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{dimColor:true},re?"\u2514\u2500 ":"\u251C\u2500 "),I.createElement(y,{color:L},ve),I.createElement(y,null," "),I.createElement(y,{color:"magenta"},V.agentLabel),q&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true},q))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(V.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(V.output)),I.createElement(y,{dimColor:true}," \u2502 context "),I.createElement(y,{color:"yellow"},$(V.tokensUsedForContext)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},$(V.contextWindow)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:ae()},se,"%"),I.createElement(y,{dimColor:true},")")))};if(u==="network"){let V=d?.teamSize||0,re=d?.activeAgents||0,ue=d?.currentPhase||"executing",se=d?.currentAgent,ae=d?.totalInputTokens||t?.input||0,ee=d?.totalOutputTokens||t?.output||0,ve=d?.completedTasks,L=d?.totalTasks,Q=(()=>{switch(ue){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 I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"blue"},"\u{1F310}"),I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"blue"},V),I.createElement(y,{dimColor:true}," agents"),re>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"green"},re),I.createElement(y,{dimColor:true}," active)")),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),se?I.createElement(I.Fragment,null,z(se),I.createElement(y,{dimColor:true},": "),I.createElement(y,{color:Q.color},Q.text)):I.createElement(y,{color:Q.color},Q.text),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(S,null,ee>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,ve!==void 0&&L!==void 0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true},"tasks "),I.createElement(y,{color:"yellow"},ve),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},L),I.createElement(y,{dimColor:true}," \u2502 ")),s&&b>0&&I.createElement(I.Fragment,null,I.createElement(y,{color:"green"},"\u2193 ",Math.floor(b)),I.createElement(y,{dimColor:true}," \u2502 ")),I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(ae)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(ee))))}if(u==="cooperate"&&m){let{models:V,phase:re,totalInputTokens:ue,totalOutputTokens:se,ccbResult:ae,dagProgress:ee}=m,L=(()=>{switch(re){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=()=>V.length===0?null:V.map((le,Ee)=>{let Pe=le.status==="running"?"green":le.status==="completed"?"blue":"gray";return I.createElement(I.Fragment,{key:Ee},Ee>0&&I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:Pe},le.shortName))}),Q=V.filter(le=>le.status==="completed").length;return I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"yellow"},"\u{1F527}"),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),e?z(e):I.createElement(y,{color:L.color},L.text),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")")),b>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ~"),I.createElement(y,{color:"magenta"},Math.floor(b)),I.createElement(y,{dimColor:true}," tok"))):I.createElement(S,null,se>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,V.length>0&&I.createElement(I.Fragment,null,q(),I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:"yellow"},Q),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},V.length),I.createElement(y,{dimColor:true}," \u2502 ")),ae&&I.createElement(I.Fragment,null,I.createElement(y,{color:ae.approved?"green":"red"},ae.approved?"\u2713":"\u2717"),I.createElement(y,{dimColor:true}," CCB "),I.createElement(y,{color:"yellow"},ae.approveCount),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},ae.totalCount),I.createElement(y,{dimColor:true}," \u2502 ")),ee&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true},"DAG "),I.createElement(y,{color:"yellow"},ee.completedNodes),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},ee.totalNodes),I.createElement(y,{dimColor:true}," \u2502 ")),I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(ue||t?.input||0)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(se||t?.output||0))))}if((u==="collab"||u==="cooperate")&&de){let V=W?.pressure||0,re=Math.round(V*100),ue=()=>V>.8?"red":V>.5?"yellow":"green",se=H.length<=c&&H.length>0,ae=W?.agentLabel||"Main";return I.createElement(S,{flexDirection:"column"},I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:O.color},O.icon),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),I.createElement(y,{bold:true,color:"cyan"},"\u25CF"),I.createElement(y,null," "),F&&K?I.createElement(I.Fragment,null,z(`Streaming: ${K}`)):z(e||"Thinking..."),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(S,null,(W?.output||t?.output||0)>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,W?I.createElement(S,null,I.createElement(y,{dimColor:true},ae,": "),I.createElement(y,{color:"cyan"},$(W.input)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"green"},$(W.output)),(W.cacheCreationTokens||W.cacheReadTokens)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," cache-w "),I.createElement(y,{color:"magenta"},$(W.cacheCreationTokens||0)),I.createElement(y,{dimColor:true}," cache-r "),I.createElement(y,{color:"blue"},$(W.cacheReadTokens||0))),I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"yellow"},$(W.tokensUsedForContext)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},$(W.contextWindow)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:ue()},re,"%"),I.createElement(y,{dimColor:true},")"),J()):I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(t?.input||0)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(t?.output||0)),J()))),se&&H.map((ee,ve)=>fe(ee,ve===H.length-1)))}return I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:O.color},O.icon),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),I.createElement(y,{bold:true,color:"cyan"},"\u25CF"),I.createElement(y,null," "),F&&K?I.createElement(I.Fragment,null,z(`Streaming: ${K}`)):z(e||"Thinking..."),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true}," \u2022 esc to interrupt"),b>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2022 "),I.createElement(y,{color:"green"},"\u2193 ",Math.floor(b)),I.createElement(y,{dimColor:true}," ",F?"chars":"tokens")),I.createElement(y,{dimColor:true},")"))):I.createElement(S,null,(t?.output||0)>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,k>0?I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(t?.input||0)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(t?.output||0)),(t?.cacheCreationTokens||t?.cacheReadTokens)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," cache-w "),I.createElement(y,{color:"magenta"},$(t.cacheCreationTokens||0)),I.createElement(y,{dimColor:true}," cache-r "),I.createElement(y,{color:"blue"},$(t.cacheReadTokens||0))),I.createElement(y,{dimColor:true}," \u2502 context "),I.createElement(y,{color:"yellow"},$(M)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},$(k)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:j()},P,"%"),I.createElement(y,{dimColor:true},")")):I.createElement(y,{dimColor:true},"context: --")))},L_=(s,e)=>!s&&!e?true:!s||!e||s.length!==e.length?false:s.every((t,n)=>{let r=e[n];return t.agentId===r.agentId&&t.input===r.input&&t.output===r.output&&t.pressure===r.pressure&&t.tokensUsedForContext===r.tokensUsedForContext&&t.status===r.status&&t.currentTask===r.currentTask&&t.contextWindow===r.contextWindow&&t.cacheCreationTokens===r.cacheCreationTokens&&t.cacheReadTokens===r.cacheReadTokens}),Py=I.memo(N_,(s,e)=>s.isRunning===e.isRunning&&s.statusText===e.statusText&&s.streamingTokens===e.streamingTokens&&s.streamingStartTime===e.streamingStartTime&&s.tokenStats?.input===e.tokenStats?.input&&s.tokenStats?.output===e.tokenStats?.output&&s.tokenStats?.total===e.tokenStats?.total&&s.tokenStats?.pressure===e.tokenStats?.pressure&&s.tokenStats?.cacheCreationTokens===e.tokenStats?.cacheCreationTokens&&s.tokenStats?.cacheReadTokens===e.tokenStats?.cacheReadTokens&&s.runMode===e.runMode&&s.networkStats?.teamSize===e.networkStats?.teamSize&&s.networkStats?.activeAgents===e.networkStats?.activeAgents&&s.networkStats?.currentPhase===e.networkStats?.currentPhase&&s.networkStats?.currentAgent===e.networkStats?.currentAgent&&s.networkStats?.totalInputTokens===e.networkStats?.totalInputTokens&&s.networkStats?.totalOutputTokens===e.networkStats?.totalOutputTokens&&s.networkStats?.completedTasks===e.networkStats?.completedTasks&&s.networkStats?.totalTasks===e.networkStats?.totalTasks&&s.cooperateStats?.phase===e.cooperateStats?.phase&&s.cooperateStats?.totalInputTokens===e.cooperateStats?.totalInputTokens&&s.cooperateStats?.totalOutputTokens===e.cooperateStats?.totalOutputTokens&&s.cooperateStats?.ccbResult?.approved===e.cooperateStats?.ccbResult?.approved&&s.cooperateStats?.ccbResult?.approveCount===e.cooperateStats?.ccbResult?.approveCount&&s.cooperateStats?.dagProgress?.completedNodes===e.cooperateStats?.dagProgress?.completedNodes&&s.cooperateStats?.models?.length===e.cooperateStats?.models?.length&&L_(s.agentContextStats,e.agentContextStats));var Ry=({isRunning:s,hasInput:e,customHints:t,menuActive:n=false,thinkingEnabled:r=true,accumulatedRunTime:o=0,provider:i,model:a,runMode:l="single"})=>{let[c,u]=useState(o);useEffect(()=>{if(!s){u(o);return}u(o);let f=setInterval(()=>{u(v=>v+1);},1e3);return ()=>clearInterval(f)},[s,o]);let d=()=>{if(c<60)return `${c}s`;let f=Math.floor(c/60),v=c%60;if(f<60)return `${f}m ${v}s`;let b=Math.floor(f/60),C=f%60;return `${b}h ${C}m`},m=()=>{if(!i||!a)return "";let f=i,v=i.indexOf(" (");v>0&&(f=i.substring(0,v));let b=a.length>35?a.substring(0,32)+"...":a;return `${f}/${b}`},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?I.createElement(S,{justifyContent:"space-between"},I.createElement(y,{color:"yellow"},t)):n?I.createElement(S,{justifyContent:"space-between"},I.createElement(y,{dimColor:true}," ","\u2191\u2193 to select, Enter to confirm, ESC to cancel")):I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{dimColor:true},"? for shortcuts"),c>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2022 "),I.createElement(y,{color:"cyan"},d()),I.createElement(y,{dimColor:true}," session"))),I.createElement(S,null,I.createElement(y,{color:h.color,bold:true},"["),I.createElement(y,{color:h.color},h.label),I.createElement(y,{color:h.color,bold:true},"]"),I.createElement(y,{dimColor:true}," \u2022 "),m()&&I.createElement(I.Fragment,null,I.createElement(y,{color:"magenta",bold:true},"["),I.createElement(y,{color:"magenta"},m()),I.createElement(y,{color:"magenta",bold:true},"]"),I.createElement(y,{dimColor:true}," \u2022 ")),r?I.createElement(y,{color:"cyan"},"Thinking on"):I.createElement(y,{dimColor:true},"Thinking off"),I.createElement(y,{dimColor:true}," (tab to toggle)")))};var Dy=({attachments:s,onRemove:e})=>s.length===0?null:I.createElement(S,{flexDirection:"column",paddingLeft:2,marginBottom:1},I.createElement(y,{color:"magenta",dimColor:true},"Attachments:"),s.map((t,n)=>{let r=t.name||t.path?.split("/").pop()||"unknown",o=t.type?.startsWith("image/")||t.mediaType?.startsWith("image/")||r.match(/\.(png|jpg|jpeg|gif|webp)$/i);return I.createElement(S,{key:n},I.createElement(y,{color:"magenta"},o?"\u{1F4CE} \u{1F5BC}\uFE0F ":"\u{1F4CE} ",r),e&&I.createElement(y,{color:"gray",dimColor:true}," (press \u232B Backspace to remove)"))}));var Ny=({contextWindow:s,tokensUsed:e,systemTokens:t=0,userTokens:n=0,assistantTokens:r=0,toolCallTokens:o=0,toolResultTokens:i=0,compactionThreshold:a=.8,compressionMode:l="sync",agentContextStats:c=[],runMode:u="single",networkStats:d,onClose:m})=>{let g=D=>D>=1e6?`${(D/1e6).toFixed(1)}M`:D>=1e3?`${(D/1e3).toFixed(1)}k`:D.toString(),h=D=>D>.8?"red":D>.5?"yellow":"green",f=({color:D,label:$,tokens:k,total:M,indent:_=2})=>{let P=M>0?(k/M*100).toFixed(2):"0.00";return I.createElement(S,{marginLeft:_},I.createElement(y,{color:D},"\u25A0"),I.createElement(y,null," ",$,": "),I.createElement(y,{color:"yellow"},g(k)),I.createElement(y,{dimColor:true}," tokens (",P,"%)"))},v=({stat:D,indent:$=2})=>{let k=D.cacheCreationTokens||0,M=D.cacheReadTokens||0,_=D.contextWindow||2e5,P=D.tokensUsedForContext||0,j=_>0?P/_:0,z=Math.round(j*100);return I.createElement(S,{marginLeft:$,justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"magenta"},D.agentLabel||D.agentId),D.status&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:D.status==="running"?"green":D.status==="error"?"red":"gray"},D.status==="running"?"\u25CF":D.status==="completed"?"\u2713":D.status==="error"?"\u2717":"\u25CB"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},g(D.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},g(D.output)),(k>0||M>0)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2502 cw "),I.createElement(y,{color:"blue"},g(k)),I.createElement(y,{dimColor:true}," cr "),I.createElement(y,{color:"blue"},g(M))),I.createElement(y,{dimColor:true}," \u2502 ctx "),I.createElement(y,{color:"yellow"},g(P)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},g(_)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:h(j)},z,"%"),I.createElement(y,{dimColor:true},")")))},b=({stat:D,indent:$=2})=>{let k=D.contextWindow>0?D.tokensUsedForContext/D.contextWindow:0,M=Math.round(k*100);return I.createElement(S,{marginLeft:$,justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"magenta"},D.agentLabel||D.agentId),D.status&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:D.status==="running"?"green":D.status==="error"?"red":"gray"},D.status==="running"?"\u25CF":D.status==="completed"?"\u2713":D.status==="error"?"\u2717":"\u25CB"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},g(D.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},g(D.output)),I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"yellow"},g(D.tokensUsedForContext)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},g(D.contextWindow)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:h(k)},M,"%"),I.createElement(y,{dimColor:true},")")))};if(u==="network"){let D=d?.teamSize||c.length||0,$=d?.activeAgents||0,k=d?.totalInputTokens||0,M=d?.totalOutputTokens||0,_=k+M,j=(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 I.createElement(S,{flexDirection:"column",borderStyle:"round",borderColor:"blue",paddingX:2,paddingY:1},I.createElement(S,{justifyContent:"space-between",marginBottom:1},I.createElement(S,null,I.createElement(y,{color:"blue"},"\u{1F310}"),I.createElement(y,{bold:true,color:"blue"}," Network Context Overview")),I.createElement(y,{dimColor:true},"(press ESC to close)")),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Team Size: "),I.createElement(y,{color:"blue",bold:true},D),I.createElement(y,{dimColor:true}," agents"),$>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"green"},$),I.createElement(y,{dimColor:true}," active)"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"Current Phase: "),I.createElement(y,{color:j.color,bold:true},j.text),d?.currentAgent&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," - "),I.createElement(y,{color:"cyan"},d.currentAgent))),d?.completedTasks!==void 0&&d?.totalTasks!==void 0&&I.createElement(S,null,I.createElement(y,{dimColor:true},"Tasks: "),I.createElement(y,{color:"yellow"},d.completedTasks),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},d.totalTasks),I.createElement(y,{dimColor:true}," completed"))),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{bold:true,dimColor:true},"Total Token Usage:"),I.createElement(S,{marginLeft:2},I.createElement(y,{dimColor:true},"Input: "),I.createElement(y,{color:"cyan"},g(k)),I.createElement(y,{dimColor:true}," \u2502 Output: "),I.createElement(y,{color:"green"},g(M)),I.createElement(y,{dimColor:true}," \u2502 Total: "),I.createElement(y,{color:"yellow"},g(_)))),c.length>0&&I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,dimColor:true},"Agent Context Details:"),c.map(z=>I.createElement(v,{key:z.agentId,stat:z})),I.createElement(S,{marginTop:1,marginLeft:2},I.createElement(y,{dimColor:true},"Total Tokens: "),I.createElement(y,{color:"yellow"},g(c.reduce((z,A)=>z+A.input+A.output,0))),I.createElement(y,{dimColor:true}," across "),I.createElement(y,{color:"cyan"},c.length),I.createElement(y,{dimColor:true}," agents"))),c.length===0&&I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true,italic:true},"Agent context details not available yet.")))}if((u==="collab"||u==="cooperate")&&c.length>0){let D=c.find(A=>A.agentId==="Main"),$=c.filter(A=>A.agentId!=="Main"&&A.agentId!=="supervisor"),k=c.reduce((A,O)=>A+O.tokensUsedForContext,0),M=c.reduce((A,O)=>A+O.input,0),_=c.reduce((A,O)=>A+O.output,0),P=u==="collab"?"\u{1F91D}":"\u{1F527}",j=u==="collab"?"Collab":"Cooperate",z=u==="collab"?"magenta":"yellow";return I.createElement(S,{flexDirection:"column",borderStyle:"round",borderColor:z,paddingX:2,paddingY:1},I.createElement(S,{justifyContent:"space-between",marginBottom:1},I.createElement(S,null,I.createElement(y,{color:z},P),I.createElement(y,{bold:true,color:z}," ",j," Context Overview")),I.createElement(y,{dimColor:true},"(press ESC to close)")),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Total Agents: "),I.createElement(y,{color:z,bold:true},c.length),$.length>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," (1 Main + "),I.createElement(y,{color:"cyan"},$.length),I.createElement(y,{dimColor:true}," Workers)"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"Total Tokens: "),I.createElement(y,{color:"cyan"},g(M)),I.createElement(y,{dimColor:true}," in / "),I.createElement(y,{color:"green"},g(_)),I.createElement(y,{dimColor:true}," out"))),D&&I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{bold:true,dimColor:true},"Main Agent:"),I.createElement(b,{stat:D})),$.length>0&&I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,dimColor:true},"Worker Agents (",$.length,"):"),$.map(A=>I.createElement(b,{key:A.agentId,stat:A}))),I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true},"Combined Context: "),I.createElement(y,{color:"yellow"},g(k)),I.createElement(y,{dimColor:true}," tokens")))}let C=s-e,T=s>0?e/s:0,w=Math.floor(s*a),E=Math.max(0,w-e),N=Math.round(T*100);return I.createElement(S,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1},I.createElement(S,{justifyContent:"space-between",marginBottom:1},I.createElement(y,{bold:true,color:"cyan"},"Context Window Details"),I.createElement(y,{dimColor:true},"(press ESC to close)")),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Total: "),I.createElement(y,{color:"yellow"},g(e)),I.createElement(y,{dimColor:true}," / "),I.createElement(y,{color:"yellow"},g(s)),I.createElement(y,{dimColor:true}," tokens ("),I.createElement(y,{color:h(T),bold:true},N,"%"),I.createElement(y,{dimColor:true},")")),I.createElement(S,null,I.createElement(y,{dimColor:true},"Remaining: "),I.createElement(y,{color:"green"},g(C)),I.createElement(y,{dimColor:true}," tokens"))),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Compression: "),I.createElement(y,{color:l==="sync"?"green":"yellow"},l==="sync"?"Sync LLM":"Async LLM"),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"cyan"},Math.round(a*100),"%"),I.createElement(y,{dimColor:true}," threshold)"))),E>0?I.createElement(S,{marginBottom:1},I.createElement(y,{dimColor:true},"Compaction in: "),I.createElement(y,{color:"cyan"},g(E)),I.createElement(y,{dimColor:true}," tokens")):I.createElement(S,{marginBottom:1},I.createElement(y,{color:"red",bold:true},"\u26A0\uFE0F Compaction threshold reached!")),I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,dimColor:true},"Context Breakdown:"),I.createElement(f,{color:"magenta",label:"System",tokens:t,total:e}),I.createElement(f,{color:"cyan",label:"User",tokens:n,total:e}),I.createElement(f,{color:"green",label:"Assistant",tokens:r,total:e}),I.createElement(f,{color:"blue",label:"Tool Calls",tokens:o,total:e}),I.createElement(f,{color:"yellow",label:"Tool Results",tokens:i,total:e}),I.createElement(S,{marginTop:1,marginLeft:2},I.createElement(y,{dimColor:true},"Usage: "),I.createElement(y,{color:h(T)},"\u2588".repeat(Math.floor(T*20))),I.createElement(y,{dimColor:true},"\u2591".repeat(20-Math.floor(T*20))))))};Z();var B_=({inputValue:s,isRunning:e,statusText:t="",tokenStats:n,streamingTokens:r=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:v,promptOnCancel:b,thinkingEnabled:C=true,contextMenuActive:T=false,compressionMode:w="sync",compactionThreshold:E=.85,agentContextStats:N=[],runMode:D="single",networkStats:$,cooperateStats:k,onInputChange:M,onSubmit:_,onInterrupt:P,onExit:j,onHistoryUp:z,onHistoryDown:A,onTabComplete:O,onRemoveAttachment:F,onContextMenuToggle:U,onAgentContextScreenToggle:K,onPasteImage:de,onShowInterruptInput:W})=>{let{columns:H}=Co();return et((ne,J)=>{if(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","BottomBar useInput",{key:J,input:ne,menuActive:g,promptActive:h,isRunning:e,inputValue:s.substring(0,20)}),!g){if(e&&ne==="i"&&!J.ctrl&&!J.meta&&W){p.debug("INK_INPUT",'Interrupt input triggered with "i" key'),W();return}if(J.ctrl&&ne==="g"&&K){K();return}if(J.ctrl&&ne==="z"){process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+Z blocked (prevents suspension)");return}if(J.escape){let fe=!ne||ne==="\x1B"||ne==="";if(p.info("INK_INPUT",`ESC detected: isRealEscape=${fe}, input=${JSON.stringify(ne)}, isRunning=${e}`),!fe){p.debug("INK_INPUT","Ignoring escape sequence (not real ESC key)");return}if(T&&U){U();return}if(h&&b){b(),M("");return}e?(p.info("INK_INPUT","\u{1F6D1} User pressed ESC to interrupt task"),P()):s&&M("");return}J.ctrl&&ne==="c"&&(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+C pressed",{isRunning:e}),e?P():(p.info("INK_INPUT","\u26A0\uFE0F Ctrl+C pressed - exiting"),j()));}},{isActive:true}),I.createElement(S,{flexDirection:"column"},h&&f&&I.createElement(S,{paddingX:2,paddingY:1},I.createElement(y,{color:"cyan",bold:true},f)),h&&v&&I.createElement(S,{paddingX:2,paddingBottom:1},I.createElement(y,{dimColor:true},v)),!h&&I.createElement(Py,{isRunning:e,statusText:t,tokenStats:n,streamingTokens:r,streamingStartTime:o,provider:a,model:l,onContextMenuToggle:U,agentContextStats:N,runMode:D,networkStats:$,cooperateStats:k}),u.length>0&&I.createElement(Dy,{attachments:u,onRemove:F}),I.createElement(S,{flexDirection:"column"},I.createElement(y,{color:"gray"},"\u2500".repeat(H)),I.createElement(My,{value:s,placeholder:h?v||"Type your answer...":e?"Enter to interrupt and send...":"Type a message...",disabled:g,multiline:d,completions:m,menuActive:g,imageCount:u.length,onChange:M,onSubmit:()=>_(s),onHistoryUp:z,onHistoryDown:A,onTabComplete:O,onPasteImage:de}),I.createElement(y,{color:"gray"},"\u2500".repeat(H))),!h&&I.createElement(Ry,{isRunning:e,hasInput:s.length>0,customHints:c,menuActive:g,thinkingEnabled:C,accumulatedRunTime:i,provider:a,model:l,runMode:D}),T&&n?.contextWindow&&U&&I.createElement(Ny,{contextWindow:n.contextWindow,tokensUsed:n.tokensUsedForContext||n.total,systemTokens:n.systemTokens,userTokens:n.userTokens,assistantTokens:n.assistantTokens,toolCallTokens:n.toolCallTokens,toolResultTokens:n.toolResultTokens,compressionMode:w,compactionThreshold:E,agentContextStats:N,runMode:D,networkStats:$,onClose:U}))},Ly=I.memo(B_);var Yd=({message:s,choices:e,initialIndex:t=0,hint:n,maxVisible:r=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 b=setTimeout(()=>{g(Date.now());},200);return ()=>clearTimeout(b)},[]),useEffect(()=>{if(e.length<=r){d(0);return}l<u?d(l):l>=u+r&&d(l-r+1);},[l,e.length,r,u]),et((b,C)=>{if(C.ctrl&&b==="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,r),f=u>0,v=u+h<e.length;return I.createElement(S,{flexDirection:"column"},s&&I.createElement(S,{marginBottom:1,paddingX:2},I.createElement(y,{bold:true,color:"cyan"},s)),n&&I.createElement(S,{marginBottom:1,paddingX:2},I.createElement(y,{dimColor:true},n)),f&&I.createElement(S,{paddingX:2},I.createElement(y,{dimColor:true}," \u2191 more")),e.slice(u,u+h).map((b,C)=>{let T=u+C,w=T===l,E=w?"\u276F ":" ";return I.createElement(S,{key:`${b.value}-${T}`,flexDirection:"row",paddingX:2},I.createElement(y,{color:w?"cyan":void 0,bold:w},E,b.label),b.description&&I.createElement(y,{dimColor:true}," - ",b.description))}),v&&I.createElement(S,{paddingX:2},I.createElement(y,{dimColor:true}," \u2193 more")))};var $y=({onSubmit:s,onCancel:e})=>{let[t,n]=useState(""),[r,o]=useState(0),i=t.length-r;et((u,d)=>{if(d.escape){e();return}if(d.return){let m=t.trim();m&&s(m);return}if(d.backspace||d.delete){if(r===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(r+1,t.length));return}if(d.rightArrow){o(Math.max(r-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 I.createElement(S,{flexDirection:"column",borderStyle:"double",borderColor:"yellow",paddingX:2,paddingY:1,width:"80%"},I.createElement(S,{marginBottom:1,justifyContent:"center"},I.createElement(y,{bold:true,color:"yellow"},"\u2728 \u63D2\u961F\u6D88\u606F - \u5C06\u5728\u4E0B\u6B21\u8BF7\u6C42\u65F6\u53D1\u9001")),I.createElement(S,{flexDirection:"column"},I.createElement(y,{dimColor:true},"\u8F93\u5165\u4F60\u7684\u6D88\u606F:"),I.createElement(S,{marginTop:1},I.createElement(y,{color:"green",bold:true},"\u276F "),t?I.createElement(y,null,a,I.createElement(y,{inverse:true},l),c):I.createElement(S,null,I.createElement(y,{inverse:true}," "),I.createElement(y,{dimColor:true},"\u8F93\u5165\u6D88\u606F...")))),I.createElement(S,{marginTop:1,justifyContent:"space-between"},I.createElement(y,{dimColor:true},"Enter: \u786E\u8BA4"),I.createElement(y,{dimColor:true},"ESC: \u53D6\u6D88")))};var Bs=s=>s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:String(s),F_=s=>{switch(s){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"}}},By=({agentContextStats:s,onClose:e})=>{let{columns:t}=Co();et((r,o)=>{(o.escape||r==="q")&&e();},{isActive:true});let n=[...s].sort((r,o)=>r.agentId==="Main"?-1:o.agentId==="Main"?1:r.agentLabel.localeCompare(o.agentLabel));return I.createElement(S,{flexDirection:"column",width:"100%"},I.createElement(S,{justifyContent:"space-between"},I.createElement(y,{bold:true,color:"cyan"},"Agent Context Overview"),I.createElement(y,{dimColor:true},"ESC to close")),I.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),n.length===0?I.createElement(y,{dimColor:true},"No agent context stats available."):n.map(r=>{let o=r.contextWindow||0,i=r.tokensUsedForContext||0,a=o>0?i/o:0,l=Math.round(a*100),{icon:c,color:u}=F_(r.status),d=r.currentTask?r.currentTask.length>40?`${r.currentTask.slice(0,37)}...`:r.currentTask:"";return I.createElement(S,{key:r.agentId,justifyContent:"space-between",marginTop:1},I.createElement(S,null,I.createElement(y,{color:"magenta"},r.agentLabel),I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:u},c),d&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true},d))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},Bs(r.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},Bs(r.output)),(r.cacheCreationTokens||r.cacheReadTokens)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," cache-w "),I.createElement(y,{color:"magenta"},Bs(r.cacheCreationTokens||0)),I.createElement(y,{dimColor:true}," cache-r "),I.createElement(y,{color:"blue"},Bs(r.cacheReadTokens||0))),I.createElement(y,{dimColor:true}," \u2502 context "),I.createElement(y,{color:"yellow"},Bs(i)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},Bs(o)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:a>.8?"red":a>.5?"yellow":"green"},l,"%"),I.createElement(y,{dimColor:true},")")))}),I.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),I.createElement(y,{dimColor:true},"Tip: Press Q or ESC to return"))};Zd();Z();var K_=[".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg"];function J_(s){if(!s)return false;let e=s.trim(),t=e.toLowerCase(),n=K_.some(o=>t.endsWith(o)),r=e.startsWith("/")||e.startsWith("./")||e.startsWith("~/")||e.includes("/")&&n;return n&&r}var Fy=({staticEntries:s=[],pendingEntries:e=[],isRunning:t,statusText:n="",tokenStats:r,streamingTokens:o=0,streamingStartTime:i=null,accumulatedRunTime:a=0,version:l=Cl,provider:c="OpenAI",model:u="gpt-4",workDir:d=process.cwd(),showHeader:m=true,thinkingEnabled:g=true,selectMenuOptions:h=null,textPromptOptions:f=null,contextMenuActive:v=false,agentContextScreenActive:b=false,compressionMode:C="sync",compactionThreshold:T=.85,agentContextStats:w=[],runMode:E="single",networkStats:N,cooperateStats:D,commandOutput:$=[],attachedImages:k=[],interruptInputActive:M=false,getCompletions:_,onStaticRendered:P,onSubmit:j,onInterrupt:z,onExit:A,onContextMenuToggle:O,onAgentContextScreenToggle:F,onClearCommandOutput:U,onAttachImage:K,onClearImages:de,onInterruptInputSubmit:W,onInterruptInputCancel:H,onShowInterruptInput:ne})=>{let[J,fe]=useState(""),[V,re]=useState([]),[ue,se]=useState(-1),[ae,ee]=useState(null),ve=useRef(false),L=useContext(Zr);useEffect(()=>{if(!L?.internal_eventEmitter||!K)return;let Y=me=>{oe("CLI_APP",`\u{1F4CE} Received image-paste event from vendor Ink: ${me.name}`),K(me);};return L.internal_eventEmitter.on("image-paste",Y),()=>{L.internal_eventEmitter.off("image-paste",Y);}},[L,K]),useEffect(()=>{f?.defaultValue&&fe(f.defaultValue);},[f?.defaultValue]),et((Y,me)=>{if(me.escape){if(b)return;ae?ee(null):$.length>0&&U&&U();}},{isActive:true});let q=e.filter(Y=>Y.type!=="thinking"&&Y.type!=="reasoning"),Q=Y=>{if(!Y)return false;let{content:me}=Y;return typeof me=="string"?me.trim().length>0:Array.isArray(me)?me.some(pe=>{if(!pe||typeof pe!="object"||!("type"in pe))return false;switch(pe.type){case "text":return typeof pe.text=="string"&&pe.text.trim().length>0;case "image_url":return true;case "tool_use":return true;case "tool_result":return pe.content!==null&&pe.content!==void 0&&String(pe.content).trim().length>0;case "thinking":return typeof pe.thinking=="string"&&pe.thinking.trim().length>0;case "redacted_thinking":return typeof pe.data=="string"&&pe.data.trim().length>0;default:return true}}):false},le=Y=>{if(Y.message)return Q(Y.message);let me=typeof Y.text=="string"&&Y.text.trim().length>0,pe=Y.type==="plan"&&!!Y.planSteps&&Y.planSteps.length>0,_e=(Y.type==="pipeline_node_start"||Y.type==="pipeline_node_complete"||Y.type==="pipeline_node_fail"||Y.type==="pipeline_node_retry")&&(Y.pipelineNode||Y.pipelineNodeRetry),Ot=(Y.type==="network_node_start"||Y.type==="network_node_complete"||Y.type==="network_node_fail")&&Y.networkNode,He=(Y.type==="ccb_review"||Y.type==="ccb_agent_review"||Y.type==="ccb_retry"||Y.type==="ccb_failed")&&!!(Y.ccbReview||Y.ccbAgentReview||Y.ccbRetry||Y.ccbFailed),Wt=Y.type==="pipeline_dag"&&!!Y.pipelineDAG;return !!(me||pe||_e||Ot||He||Wt)},Ee=useMemo(()=>q.filter(le),[q]),Pe=useMemo(()=>s.filter(le),[s]),G=m&&!ve.current,X=I.useCallback((Y,me)=>Y,[]),te=useMemo(()=>{let Y=[],me=Pe.length+Ee.length;return G&&Y.push(I.createElement(uy,{key:"header",version:l,provider:c,model:u,workDir:d})),Pe.forEach((pe,_e)=>{Y.push(I.createElement(qd,{key:`static-entry-${pe.id}`,entry:pe})),(_e<Pe.length-1||me>Pe.length)&&Y.push(I.createElement(y,{key:`static-spacer-${pe.id}`},""));}),Y},[G,Pe,Ee.length,l,c,u,d]);if(useEffect(()=>{!G&&s.length===0||(G&&(ve.current=true),P?.());},[G,s.length,P]),b)return I.createElement(By,{agentContextStats:w,onClose:()=>F?.()});let Ne=Y=>{if(f){if(!Y.trim()&&!f.allowEmpty)return;f.onSubmit(Y),fe("");return}let me=k.length>0,pe=Y.trim().length>0;(pe||me)&&(pe&&re([...V,Y]),se(-1),fe(""),j(Y,me?k:void 0));},Re=()=>{if(V.length===0)return;let Y=ue+1;Y<V.length&&(se(Y),fe(V[V.length-1-Y]));},De=()=>{if(ue<=0){se(-1),fe("");return}let Y=ue-1;se(Y),fe(V[V.length-1-Y]);},ke=Y=>{if(!_)return null;let me=_(Y);if(me.length===0)return null;if(me.length===1)return me[0];let pe=me.map(_e=>({label:_e,value:_e,description:void 0}));return ee({message:"Select completion:",choices:pe,initialIndex:0,onSelect:_e=>{fe(_e),ee(null);},onCancel:()=>{ee(null);}}),null};return I.createElement(S,{flexDirection:"column",width:"100%"},I.createElement(ua,{items:te},X),Ee.map((Y,me)=>I.createElement(S,{key:`pending-wrapper-${Y.id}`,flexDirection:"column"},I.createElement(qd,{entry:Y}),me<Ee.length-1&&I.createElement(y,null,""))),I.createElement(y,null,`
1684
- `),I.createElement(S,{flexShrink:0,flexDirection:"column"},I.createElement(Ly,{inputValue:J,isRunning:t,statusText:n,tokenStats:r,streamingTokens:o,streamingStartTime:i,accumulatedRunTime:a,provider:c,model:u,menuActive:!!h||!!ae,promptActive:!!f,promptMessage:f?.message,promptHint:f?.hint,promptOnCancel:f?.onCancel,thinkingEnabled:g,contextMenuActive:v,compressionMode:C,compactionThreshold:T,agentContextStats:w,runMode:E,networkStats:N,cooperateStats:D,attachments:k,onInputChange:Y=>{if(K&&J_(Y)){K(Y.trim());return}fe(Y);},onSubmit:Ne,onInterrupt:z,onExit:A,onHistoryUp:Re,onHistoryDown:De,onTabComplete:ke,onContextMenuToggle:O,onAgentContextScreenToggle:F,onRemoveAttachment:de?Y=>{de();}:void 0,onPasteImage:K,onShowInterruptInput:ne}),h&&I.createElement(Yd,{message:h.message,choices:h.choices,initialIndex:h.initialIndex,hint:h.hint,onSelect:h.onSelect,onCancel:h.onCancel,onExit:A}),ae&&I.createElement(Yd,{message:ae.message,choices:ae.choices,initialIndex:ae.initialIndex,hint:ae.hint,onSelect:ae.onSelect,onCancel:ae.onCancel,onExit:A}),$.length>0&&I.createElement(S,{flexDirection:"column",paddingX:2,paddingY:1,borderStyle:"round",borderColor:"gray"},$.map((Y,me)=>I.createElement(y,{key:me},Y)))),M&&W&&H&&I.createElement(S,{flexDirection:"column",justifyContent:"center",alignItems:"center",marginTop:5},I.createElement($y,{onSubmit:W,onCancel:H})))};Z();var Tl=class s{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;attachedImages=[];pendingEntries=[];queuedMessages=[];nextQueuedMessageId=1;interruptInputActive=false;runMode="single";streamingTokens=0;streamingStartTime=null;accumulatedRunTime=0;runningStartTime=null;compressionMode="sync";compactionThreshold=.85;agentContextStats=new Map;networkStats=null;cooperateStats=null;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[,t]=useState(0);return useEffect(()=>(this.forceUpdate=()=>{let n=Date.now();p.debug("RUNTIME",`>>> forceUpdate called, staticEntries=${this.staticEntries.length}, pendingEntries=${this.pendingEntries.length}`),t(o=>o+1);let r=Date.now()-n;r>50&&p.warn("RUNTIME",`\u26A0\uFE0F forceUpdate slow: setCounter took ${r}ms`);},()=>{this.forceUpdate=null;}),[]),I.createElement(Fy,{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,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,getCompletions:this.getCompletions,onStaticRendered:void 0,onSubmit:(n,r)=>{let o=r||this.attachedImages;this.attachedImages=[],this.callbacks.onSubmit(n,o);},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:n=>{this.attachImage(n);},onClearImages:()=>{this.clearAttachedImages();},onInterruptInputSubmit:n=>{this.handleInterruptInputSubmit(n);},onInterruptInputCancel:()=>{this.hideInterruptInput();},onShowInterruptInput:()=>{this.showInterruptInput();}})};this.appInstance=rs(I.createElement(e,null),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});try{process.stdout.isTTY&&!process.stdout.destroyed&&(process.stdout.write("\x1B[?2004h"),p.info("INK","Bracketed paste mode enabled for image paste detection"));}catch(t){p.warn("INK","Failed to enable bracketed paste mode",{error:t});}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&&(process.stdout.write("\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.stopMemorySampler();}addMessage(e){this.messages=[...this.messages.slice(-4),e],this.forceUpdate?.();}addEntry(e){let t={...e,id:this.nextEntryId++,timestamp:new Date};return this.staticEntries.length>=s.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}`),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 r=this.pendingEntries.findIndex(o=>o.id===e);r>=0&&(this.pendingEntries=this.pendingEntries.map((o,i)=>i===r?{...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 r=this.pendingEntries[0];this.staticEntries=[...this.staticEntries,r],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(r=>r.id===e);n>=0&&(this.pendingEntries=this.pendingEntries.map((r,o)=>o===n?{...r,...t}:r),this.forceUpdate?.());}updatePendingEntryByKey(e,t){let n=this.pendingEntries.findIndex(r=>r.entryKey===e);if(n>=0)this.pendingEntries=this.pendingEntries.map((r,o)=>o===n?{...r,...t,entryKey:e,timestamp:new Date}:r);else {let r={...t,entryKey:e,id:this.nextEntryId++,timestamp:new Date};this.pendingEntries=[...this.pendingEntries,r];}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((r,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((r,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?.());}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(r=>r.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?.();}}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 r=e.match(/^data:([^;]+);base64,(.+)$/);if(r){let o=`image_${Date.now()}.png`;t={mediaType:r[1],data:r[2],name:o};}else {p.error("INK_RUNTIME","Invalid data URL format",{imageData:e});return}}else {let r=e.split("/").pop()||e;t={path:e,name:r};}else t=e;if(this.attachedImages.some(r=>r.path&&t.path&&r.path===t.path||r.data&&t.data&&r.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){let t={id:this.nextQueuedMessageId++,text:e,timestamp:new Date};this.queuedMessages.push(t),p.info("INK_RUNTIME",`\u{1F4E8} Queued interrupt message #${t.id}: "${e.substring(0,50)}..."`),this.addEntry({type:"queued_message",text:"\u2728 \u63D2\u961F\u6D88\u606F (\u5C06\u5728\u4E0B\u6B21\u8BF7\u6C42\u65F6\u53D1\u9001)",details:e}),this.hideInterruptInput();}getAndClearQueuedMessages(){let e=[...this.queuedMessages];return this.queuedMessages=[],e.length>0&&p.info("INK_RUNTIME",`\u{1F4E4} Returning ${e.length} queued messages to main loop`),e}hasQueuedMessages(){return this.queuedMessages.length>0}addAgentSpawnEntry(e,t,n,r){return this.addEntry({type:"agent_spawn",agentId:e,agentIndex:t,agentStatus:"running",agentTask:n,agentModel:r,text:n})}addAgentProgressEntry(e,t,n,r){return this.addEntry({type:"agent_progress",agentId:e,agentIndex:t,agentStatus:"running",agentProgress:n,text:r})}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}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(r){p.error("INK_RUNTIME","Failed to resume stdin for SelectMenu",{error:r});}}}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);}};Z();var wl=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;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 Tl({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();}});}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){let n=[{type:"text",text:e}];if(t&&t.length>0)for(let o of t)n.push({type:"image_url",image_url:{url:`file://${o.path}`}});let r={role:"user",content:n};this.lastEntryId=this.runtime.addEntry({type:"user",message:r}),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,r="info"){let i=`${`[${e}]`} ${t}`,a=r==="error"?"warning":r;this.addInfo(i,n,a);}streamText(e,t){let n=Date.now(),r=t||this.activeAgentId||"default";p.debug("INK_ADAPTER",`streamText: ${e.length} chars to ${r}`,{snippet:e.substring(0,30),bufferExists:this.agentBuffers.has(r)});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(r)||"";this.agentBuffers.set(r,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 r=this.agentBuffers.get(t)||"";this.agentBuffers.set(t,r+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 r=n==="warning"||e.includes("\u26A0")||e.includes("\u23F3")||e.includes("\u23F1\uFE0F")||e.includes("\u{1F504}");this.runtime.addEntry({type:r?"warning":"info",text:e,details:t});}addError(e,t){let n=typeof t=="string"?t:t?.details,r=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:r});}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 r=parseInt(n[1],10);this.streamingToolChars=r,this.runtime.updateStreamingStats(r);}}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 r=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:r,cacheReadTokens:o});}startThinking(){this.streamingReasoningBuffer="",this.streamingReasoningType="thinking";}streamThinking(e,t="thinking"){this.streamingReasoningBuffer+=e,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,r){p.debug("INK_ADAPTER",`Start tool call: ${t}`,{toolId:e,args:n});let o=this.buildToolCallDetails(n,r),i=r?.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);}updateToolCallOutput(e,t,n){p.debug("INK_ADAPTER",`Update tool output: ${e}`,{output:t});let r=this.toolLogIdByToolId.get(e);if(!r)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(r,{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 r=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(`
1683
+ `):[s];return I.createElement(S,{flexDirection:"column"},I.createElement(S,{flexDirection:n?"column":"row"},!n&&I.createElement(y,{color:"green",bold:true},"> "),t?I.createElement(y,{dimColor:true},s||e):!s?I.createElement(S,null,!n&&I.createElement(y,{inverse:true}," "),I.createElement(y,{dimColor:true},e)):n?z.map((O,F)=>I.createElement(S,{key:F},I.createElement(y,{color:"green",bold:true},F===0?"> ":"\u2502 "),I.createElement(y,null,O))):I.createElement(y,null,_,I.createElement(y,{inverse:true},P),j)),f&&r.length>0&&I.createElement(S,{paddingLeft:2,flexDirection:"column"},I.createElement(y,{color:"yellow"},"Suggestions:"),r.slice(0,5).map((O,F)=>I.createElement(y,{key:F,color:F===b?"cyan":"white",bold:F===b},F===b?"\u2192 ":" ",O))))};var L_=({isRunning:s,statusText:e="",tokenStats:t,streamingTokens:n=0,streamingStartTime:r=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,v]=useState(0),[b,C]=useState(0),[T,w]=useState(0),[E,N]=useState(0);useEffect(()=>{s?(h(r||Date.now()),v(0)):!s&&(t?.output||0)===0&&(h(null),v(0));},[s,r,t?.output]),useEffect(()=>{if(!s||g===null)return;let V=setInterval(()=>{v(Math.floor((Date.now()-g)/1e3));},500);return ()=>clearInterval(V)},[s,g]),useEffect(()=>{if(!s||n===0){C(0);return}let V=Math.floor(n);if(b===V)return;let re=V-b,ue=Math.min(Math.abs(re),20),se=re/ue,ee=setInterval(()=>{C(ve=>{let L=ve+se;return Math.abs(L-V)<1?V:L});},50);return ()=>clearInterval(ee)},[n,s,b]),useEffect(()=>{let V=t?.output||0;if(T===V)return;let re=V-T;if(Math.abs(re)>100){w(V);return}let ue=Math.max(Math.ceil(Math.abs(re)/10),3),se=re/ue,ee=setInterval(()=>{w(ve=>{let L=ve+se;return Math.abs(L-V)<1?V:L});},10);return ()=>clearInterval(ee)},[t?.output,T]),useEffect(()=>{if(!s){N(0);return}let re=(e||"Thinking...").length,ue=setInterval(()=>{N(se=>(se+1)%(re+3));},80);return ()=>clearInterval(ue)},[s,e]);let D=()=>{if(f<60)return `${f}s`;let V=Math.floor(f/60),re=f%60;return `${V}m ${re}s`},$=V=>V>=1e6?(V/1e6).toFixed(1)+"M":V>=1e3?(V/1e3).toFixed(1)+"K":V.toString(),k=t?.contextWindow||0,M=t?.tokensUsedForContext||t?.total||0,_=t?.pressure||0,P=Math.round(_*100),j=()=>_>.8?"red":_>.5?"yellow":"green",z=V=>V.split("").map((ue,se)=>{let ae=se-E;return ae>=0&&ae<2?I.createElement(y,{key:se,color:"white",bold:true},ue):ae>=-1&&ae<0?I.createElement(y,{key:se,color:"cyanBright"},ue):I.createElement(y,{key:se,color:"cyan"},ue)}),O=(()=>{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+)/),K=U?U[1]:null,de=l.length>0,W=l.find(V=>V.agentId==="Main"),H=l.filter(V=>V.agentId!=="Main"),ne=H.length>c,J=()=>H.length===0?null:I.createElement(S,null,I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"magenta"},H.length),I.createElement(y,{dimColor:true}," workers"),ne&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2022 Ctrl+G"))),fe=(V,re)=>{let ue=V.pressure||0,se=Math.round(ue*100),ae=()=>ue>.8?"red":ue>.5?"yellow":"green",ee=()=>{switch(V.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:ve,color:L}=ee(),q=V.currentTask?V.currentTask.length>20?V.currentTask.slice(0,17)+"...":V.currentTask:"";return I.createElement(S,{key:V.agentId,justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{dimColor:true},re?"\u2514\u2500 ":"\u251C\u2500 "),I.createElement(y,{color:L},ve),I.createElement(y,null," "),I.createElement(y,{color:"magenta"},V.agentLabel),q&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true},q))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(V.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(V.output)),I.createElement(y,{dimColor:true}," \u2502 context "),I.createElement(y,{color:"yellow"},$(V.tokensUsedForContext)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},$(V.contextWindow)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:ae()},se,"%"),I.createElement(y,{dimColor:true},")")))};if(u==="network"){let V=d?.teamSize||0,re=d?.activeAgents||0,ue=d?.currentPhase||"executing",se=d?.currentAgent,ae=d?.totalInputTokens||t?.input||0,ee=d?.totalOutputTokens||t?.output||0,ve=d?.completedTasks,L=d?.totalTasks,Q=(()=>{switch(ue){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 I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"blue"},"\u{1F310}"),I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"blue"},V),I.createElement(y,{dimColor:true}," agents"),re>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"green"},re),I.createElement(y,{dimColor:true}," active)")),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),se?I.createElement(I.Fragment,null,z(se),I.createElement(y,{dimColor:true},": "),I.createElement(y,{color:Q.color},Q.text)):I.createElement(y,{color:Q.color},Q.text),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(S,null,ee>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,ve!==void 0&&L!==void 0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true},"tasks "),I.createElement(y,{color:"yellow"},ve),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},L),I.createElement(y,{dimColor:true}," \u2502 ")),s&&b>0&&I.createElement(I.Fragment,null,I.createElement(y,{color:"green"},"\u2193 ",Math.floor(b)),I.createElement(y,{dimColor:true}," \u2502 ")),I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(ae)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(ee))))}if(u==="cooperate"&&m){let{models:V,phase:re,totalInputTokens:ue,totalOutputTokens:se,ccbResult:ae,dagProgress:ee}=m,L=(()=>{switch(re){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=()=>V.length===0?null:V.map((le,Ee)=>{let Pe=le.status==="running"?"green":le.status==="completed"?"blue":"gray";return I.createElement(I.Fragment,{key:Ee},Ee>0&&I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:Pe},le.shortName))}),Q=V.filter(le=>le.status==="completed").length;return I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"yellow"},"\u{1F527}"),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),e?z(e):I.createElement(y,{color:L.color},L.text),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")")),b>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ~"),I.createElement(y,{color:"magenta"},Math.floor(b)),I.createElement(y,{dimColor:true}," tok"))):I.createElement(S,null,se>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,V.length>0&&I.createElement(I.Fragment,null,q(),I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:"yellow"},Q),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},V.length),I.createElement(y,{dimColor:true}," \u2502 ")),ae&&I.createElement(I.Fragment,null,I.createElement(y,{color:ae.approved?"green":"red"},ae.approved?"\u2713":"\u2717"),I.createElement(y,{dimColor:true}," CCB "),I.createElement(y,{color:"yellow"},ae.approveCount),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},ae.totalCount),I.createElement(y,{dimColor:true}," \u2502 ")),ee&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true},"DAG "),I.createElement(y,{color:"yellow"},ee.completedNodes),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},ee.totalNodes),I.createElement(y,{dimColor:true}," \u2502 ")),I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(ue||t?.input||0)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(se||t?.output||0))))}if((u==="collab"||u==="cooperate")&&de){let V=W?.pressure||0,re=Math.round(V*100),ue=()=>V>.8?"red":V>.5?"yellow":"green",se=H.length<=c&&H.length>0,ae=W?.agentLabel||"Main";return I.createElement(S,{flexDirection:"column"},I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:O.color},O.icon),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),I.createElement(y,{bold:true,color:"cyan"},"\u25CF"),I.createElement(y,null," "),F&&K?I.createElement(I.Fragment,null,z(`Streaming: ${K}`)):z(e||"Thinking..."),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(S,null,(W?.output||t?.output||0)>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,W?I.createElement(S,null,I.createElement(y,{dimColor:true},ae,": "),I.createElement(y,{color:"cyan"},$(W.input)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"green"},$(W.output)),(W.cacheCreationTokens||W.cacheReadTokens)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," cache-w "),I.createElement(y,{color:"magenta"},$(W.cacheCreationTokens||0)),I.createElement(y,{dimColor:true}," cache-r "),I.createElement(y,{color:"blue"},$(W.cacheReadTokens||0))),I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"yellow"},$(W.tokensUsedForContext)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},$(W.contextWindow)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:ue()},re,"%"),I.createElement(y,{dimColor:true},")"),J()):I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(t?.input||0)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(t?.output||0)),J()))),se&&H.map((ee,ve)=>fe(ee,ve===H.length-1)))}return I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:O.color},O.icon),I.createElement(y,{dimColor:true}," \u2502 "),s?I.createElement(S,null,I.createElement(vl,{type:"dots"}),I.createElement(y,null," "),I.createElement(y,{bold:true,color:"cyan"},"\u25CF"),I.createElement(y,null," "),F&&K?I.createElement(I.Fragment,null,z(`Streaming: ${K}`)):z(e||"Thinking..."),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true}," \u2022 esc to interrupt"),b>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2022 "),I.createElement(y,{color:"green"},"\u2193 ",Math.floor(b)),I.createElement(y,{dimColor:true}," ",F?"chars":"tokens")),I.createElement(y,{dimColor:true},")"))):I.createElement(S,null,(t?.output||0)>0?I.createElement(I.Fragment,null,I.createElement(y,{color:"green",bold:true},"\u25A0"),I.createElement(y,null," "),I.createElement(y,{color:"green"},"Complete!"),f>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"yellow"},D()),I.createElement(y,{dimColor:true},")"))):I.createElement(I.Fragment,null,I.createElement(y,{color:"cyan",bold:true},"\u25CF"),I.createElement(y,null," "),I.createElement(y,{color:"cyan"},"Ready")))),I.createElement(S,null,k>0?I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},$(t?.input||0)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},$(t?.output||0)),(t?.cacheCreationTokens||t?.cacheReadTokens)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," cache-w "),I.createElement(y,{color:"magenta"},$(t.cacheCreationTokens||0)),I.createElement(y,{dimColor:true}," cache-r "),I.createElement(y,{color:"blue"},$(t.cacheReadTokens||0))),I.createElement(y,{dimColor:true}," \u2502 context "),I.createElement(y,{color:"yellow"},$(M)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},$(k)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:j()},P,"%"),I.createElement(y,{dimColor:true},")")):I.createElement(y,{dimColor:true},"context: --")))},O_=(s,e)=>!s&&!e?true:!s||!e||s.length!==e.length?false:s.every((t,n)=>{let r=e[n];return t.agentId===r.agentId&&t.input===r.input&&t.output===r.output&&t.pressure===r.pressure&&t.tokensUsedForContext===r.tokensUsedForContext&&t.status===r.status&&t.currentTask===r.currentTask&&t.contextWindow===r.contextWindow&&t.cacheCreationTokens===r.cacheCreationTokens&&t.cacheReadTokens===r.cacheReadTokens}),Py=I.memo(L_,(s,e)=>s.isRunning===e.isRunning&&s.statusText===e.statusText&&s.streamingTokens===e.streamingTokens&&s.streamingStartTime===e.streamingStartTime&&s.tokenStats?.input===e.tokenStats?.input&&s.tokenStats?.output===e.tokenStats?.output&&s.tokenStats?.total===e.tokenStats?.total&&s.tokenStats?.pressure===e.tokenStats?.pressure&&s.tokenStats?.cacheCreationTokens===e.tokenStats?.cacheCreationTokens&&s.tokenStats?.cacheReadTokens===e.tokenStats?.cacheReadTokens&&s.runMode===e.runMode&&s.networkStats?.teamSize===e.networkStats?.teamSize&&s.networkStats?.activeAgents===e.networkStats?.activeAgents&&s.networkStats?.currentPhase===e.networkStats?.currentPhase&&s.networkStats?.currentAgent===e.networkStats?.currentAgent&&s.networkStats?.totalInputTokens===e.networkStats?.totalInputTokens&&s.networkStats?.totalOutputTokens===e.networkStats?.totalOutputTokens&&s.networkStats?.completedTasks===e.networkStats?.completedTasks&&s.networkStats?.totalTasks===e.networkStats?.totalTasks&&s.cooperateStats?.phase===e.cooperateStats?.phase&&s.cooperateStats?.totalInputTokens===e.cooperateStats?.totalInputTokens&&s.cooperateStats?.totalOutputTokens===e.cooperateStats?.totalOutputTokens&&s.cooperateStats?.ccbResult?.approved===e.cooperateStats?.ccbResult?.approved&&s.cooperateStats?.ccbResult?.approveCount===e.cooperateStats?.ccbResult?.approveCount&&s.cooperateStats?.dagProgress?.completedNodes===e.cooperateStats?.dagProgress?.completedNodes&&s.cooperateStats?.models?.length===e.cooperateStats?.models?.length&&O_(s.agentContextStats,e.agentContextStats));var Ry=({isRunning:s,hasInput:e,customHints:t,menuActive:n=false,thinkingEnabled:r=true,accumulatedRunTime:o=0,provider:i,model:a,runMode:l="single"})=>{let[c,u]=useState(o);useEffect(()=>{if(!s){u(o);return}u(o);let f=setInterval(()=>{u(v=>v+1);},1e3);return ()=>clearInterval(f)},[s,o]);let d=()=>{if(c<60)return `${c}s`;let f=Math.floor(c/60),v=c%60;if(f<60)return `${f}m ${v}s`;let b=Math.floor(f/60),C=f%60;return `${b}h ${C}m`},m=()=>{if(!i||!a)return "";let f=i,v=i.indexOf(" (");v>0&&(f=i.substring(0,v));let b=a.length>35?a.substring(0,32)+"...":a;return `${f}/${b}`},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?I.createElement(S,{justifyContent:"space-between"},I.createElement(y,{color:"yellow"},t)):n?I.createElement(S,{justifyContent:"space-between"},I.createElement(y,{dimColor:true}," ","\u2191\u2193 to select, Enter to confirm, ESC to cancel")):I.createElement(S,{justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{dimColor:true},"? for shortcuts"),c>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2022 "),I.createElement(y,{color:"cyan"},d()),I.createElement(y,{dimColor:true}," session"))),I.createElement(S,null,I.createElement(y,{color:h.color,bold:true},"["),I.createElement(y,{color:h.color},h.label),I.createElement(y,{color:h.color,bold:true},"]"),I.createElement(y,{dimColor:true}," \u2022 "),m()&&I.createElement(I.Fragment,null,I.createElement(y,{color:"magenta",bold:true},"["),I.createElement(y,{color:"magenta"},m()),I.createElement(y,{color:"magenta",bold:true},"]"),I.createElement(y,{dimColor:true}," \u2022 ")),r?I.createElement(y,{color:"cyan"},"Thinking on"):I.createElement(y,{dimColor:true},"Thinking off"),I.createElement(y,{dimColor:true}," (tab to toggle)")))};var Dy=({attachments:s,onRemove:e})=>s.length===0?null:I.createElement(S,{flexDirection:"column",paddingLeft:2,marginBottom:1},I.createElement(y,{color:"magenta",dimColor:true},"Attachments:"),s.map((t,n)=>{let r=t.name||t.path?.split("/").pop()||"unknown",o=t.type?.startsWith("image/")||t.mediaType?.startsWith("image/")||r.match(/\.(png|jpg|jpeg|gif|webp)$/i);return I.createElement(S,{key:n},I.createElement(y,{color:"magenta"},o?"\u{1F4CE} \u{1F5BC}\uFE0F ":"\u{1F4CE} ",r),e&&I.createElement(y,{color:"gray",dimColor:true}," (press \u232B Backspace to remove)"))}));var Ny=({contextWindow:s,tokensUsed:e,systemTokens:t=0,userTokens:n=0,assistantTokens:r=0,toolCallTokens:o=0,toolResultTokens:i=0,compactionThreshold:a=.8,compressionMode:l="sync",agentContextStats:c=[],runMode:u="single",networkStats:d,onClose:m})=>{let g=D=>D>=1e6?`${(D/1e6).toFixed(1)}M`:D>=1e3?`${(D/1e3).toFixed(1)}k`:D.toString(),h=D=>D>.8?"red":D>.5?"yellow":"green",f=({color:D,label:$,tokens:k,total:M,indent:_=2})=>{let P=M>0?(k/M*100).toFixed(2):"0.00";return I.createElement(S,{marginLeft:_},I.createElement(y,{color:D},"\u25A0"),I.createElement(y,null," ",$,": "),I.createElement(y,{color:"yellow"},g(k)),I.createElement(y,{dimColor:true}," tokens (",P,"%)"))},v=({stat:D,indent:$=2})=>{let k=D.cacheCreationTokens||0,M=D.cacheReadTokens||0,_=D.contextWindow||2e5,P=D.tokensUsedForContext||0,j=_>0?P/_:0,z=Math.round(j*100);return I.createElement(S,{marginLeft:$,justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"magenta"},D.agentLabel||D.agentId),D.status&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:D.status==="running"?"green":D.status==="error"?"red":"gray"},D.status==="running"?"\u25CF":D.status==="completed"?"\u2713":D.status==="error"?"\u2717":"\u25CB"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},g(D.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},g(D.output)),(k>0||M>0)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," \u2502 cw "),I.createElement(y,{color:"blue"},g(k)),I.createElement(y,{dimColor:true}," cr "),I.createElement(y,{color:"blue"},g(M))),I.createElement(y,{dimColor:true}," \u2502 ctx "),I.createElement(y,{color:"yellow"},g(P)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},g(_)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:h(j)},z,"%"),I.createElement(y,{dimColor:true},")")))},b=({stat:D,indent:$=2})=>{let k=D.contextWindow>0?D.tokensUsedForContext/D.contextWindow:0,M=Math.round(k*100);return I.createElement(S,{marginLeft:$,justifyContent:"space-between"},I.createElement(S,null,I.createElement(y,{color:"magenta"},D.agentLabel||D.agentId),D.status&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:D.status==="running"?"green":D.status==="error"?"red":"gray"},D.status==="running"?"\u25CF":D.status==="completed"?"\u2713":D.status==="error"?"\u2717":"\u25CB"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},g(D.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},g(D.output)),I.createElement(y,{dimColor:true}," \u2502 "),I.createElement(y,{color:"yellow"},g(D.tokensUsedForContext)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},g(D.contextWindow)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:h(k)},M,"%"),I.createElement(y,{dimColor:true},")")))};if(u==="network"){let D=d?.teamSize||c.length||0,$=d?.activeAgents||0,k=d?.totalInputTokens||0,M=d?.totalOutputTokens||0,_=k+M,j=(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 I.createElement(S,{flexDirection:"column",borderStyle:"round",borderColor:"blue",paddingX:2,paddingY:1},I.createElement(S,{justifyContent:"space-between",marginBottom:1},I.createElement(S,null,I.createElement(y,{color:"blue"},"\u{1F310}"),I.createElement(y,{bold:true,color:"blue"}," Network Context Overview")),I.createElement(y,{dimColor:true},"(press ESC to close)")),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Team Size: "),I.createElement(y,{color:"blue",bold:true},D),I.createElement(y,{dimColor:true}," agents"),$>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"green"},$),I.createElement(y,{dimColor:true}," active)"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"Current Phase: "),I.createElement(y,{color:j.color,bold:true},j.text),d?.currentAgent&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," - "),I.createElement(y,{color:"cyan"},d.currentAgent))),d?.completedTasks!==void 0&&d?.totalTasks!==void 0&&I.createElement(S,null,I.createElement(y,{dimColor:true},"Tasks: "),I.createElement(y,{color:"yellow"},d.completedTasks),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},d.totalTasks),I.createElement(y,{dimColor:true}," completed"))),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{bold:true,dimColor:true},"Total Token Usage:"),I.createElement(S,{marginLeft:2},I.createElement(y,{dimColor:true},"Input: "),I.createElement(y,{color:"cyan"},g(k)),I.createElement(y,{dimColor:true}," \u2502 Output: "),I.createElement(y,{color:"green"},g(M)),I.createElement(y,{dimColor:true}," \u2502 Total: "),I.createElement(y,{color:"yellow"},g(_)))),c.length>0&&I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,dimColor:true},"Agent Context Details:"),c.map(z=>I.createElement(v,{key:z.agentId,stat:z})),I.createElement(S,{marginTop:1,marginLeft:2},I.createElement(y,{dimColor:true},"Total Tokens: "),I.createElement(y,{color:"yellow"},g(c.reduce((z,A)=>z+A.input+A.output,0))),I.createElement(y,{dimColor:true}," across "),I.createElement(y,{color:"cyan"},c.length),I.createElement(y,{dimColor:true}," agents"))),c.length===0&&I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true,italic:true},"Agent context details not available yet.")))}if((u==="collab"||u==="cooperate")&&c.length>0){let D=c.find(A=>A.agentId==="Main"),$=c.filter(A=>A.agentId!=="Main"&&A.agentId!=="supervisor"),k=c.reduce((A,O)=>A+O.tokensUsedForContext,0),M=c.reduce((A,O)=>A+O.input,0),_=c.reduce((A,O)=>A+O.output,0),P=u==="collab"?"\u{1F91D}":"\u{1F527}",j=u==="collab"?"Collab":"Cooperate",z=u==="collab"?"magenta":"yellow";return I.createElement(S,{flexDirection:"column",borderStyle:"round",borderColor:z,paddingX:2,paddingY:1},I.createElement(S,{justifyContent:"space-between",marginBottom:1},I.createElement(S,null,I.createElement(y,{color:z},P),I.createElement(y,{bold:true,color:z}," ",j," Context Overview")),I.createElement(y,{dimColor:true},"(press ESC to close)")),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Total Agents: "),I.createElement(y,{color:z,bold:true},c.length),$.length>0&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," (1 Main + "),I.createElement(y,{color:"cyan"},$.length),I.createElement(y,{dimColor:true}," Workers)"))),I.createElement(S,null,I.createElement(y,{dimColor:true},"Total Tokens: "),I.createElement(y,{color:"cyan"},g(M)),I.createElement(y,{dimColor:true}," in / "),I.createElement(y,{color:"green"},g(_)),I.createElement(y,{dimColor:true}," out"))),D&&I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(y,{bold:true,dimColor:true},"Main Agent:"),I.createElement(b,{stat:D})),$.length>0&&I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,dimColor:true},"Worker Agents (",$.length,"):"),$.map(A=>I.createElement(b,{key:A.agentId,stat:A}))),I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true},"Combined Context: "),I.createElement(y,{color:"yellow"},g(k)),I.createElement(y,{dimColor:true}," tokens")))}let C=s-e,T=s>0?e/s:0,w=Math.floor(s*a),E=Math.max(0,w-e),N=Math.round(T*100);return I.createElement(S,{flexDirection:"column",borderStyle:"round",borderColor:"cyan",paddingX:2,paddingY:1},I.createElement(S,{justifyContent:"space-between",marginBottom:1},I.createElement(y,{bold:true,color:"cyan"},"Context Window Details"),I.createElement(y,{dimColor:true},"(press ESC to close)")),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Total: "),I.createElement(y,{color:"yellow"},g(e)),I.createElement(y,{dimColor:true}," / "),I.createElement(y,{color:"yellow"},g(s)),I.createElement(y,{dimColor:true}," tokens ("),I.createElement(y,{color:h(T),bold:true},N,"%"),I.createElement(y,{dimColor:true},")")),I.createElement(S,null,I.createElement(y,{dimColor:true},"Remaining: "),I.createElement(y,{color:"green"},g(C)),I.createElement(y,{dimColor:true}," tokens"))),I.createElement(S,{flexDirection:"column",marginBottom:1},I.createElement(S,null,I.createElement(y,{dimColor:true},"Compression: "),I.createElement(y,{color:l==="sync"?"green":"yellow"},l==="sync"?"Sync LLM":"Async LLM"),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:"cyan"},Math.round(a*100),"%"),I.createElement(y,{dimColor:true}," threshold)"))),E>0?I.createElement(S,{marginBottom:1},I.createElement(y,{dimColor:true},"Compaction in: "),I.createElement(y,{color:"cyan"},g(E)),I.createElement(y,{dimColor:true}," tokens")):I.createElement(S,{marginBottom:1},I.createElement(y,{color:"red",bold:true},"\u26A0\uFE0F Compaction threshold reached!")),I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,dimColor:true},"Context Breakdown:"),I.createElement(f,{color:"magenta",label:"System",tokens:t,total:e}),I.createElement(f,{color:"cyan",label:"User",tokens:n,total:e}),I.createElement(f,{color:"green",label:"Assistant",tokens:r,total:e}),I.createElement(f,{color:"blue",label:"Tool Calls",tokens:o,total:e}),I.createElement(f,{color:"yellow",label:"Tool Results",tokens:i,total:e}),I.createElement(S,{marginTop:1,marginLeft:2},I.createElement(y,{dimColor:true},"Usage: "),I.createElement(y,{color:h(T)},"\u2588".repeat(Math.floor(T*20))),I.createElement(y,{dimColor:true},"\u2591".repeat(20-Math.floor(T*20))))))};Z();var F_=({inputValue:s,isRunning:e,statusText:t="",tokenStats:n,streamingTokens:r=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:v,promptOnCancel:b,thinkingEnabled:C=true,contextMenuActive:T=false,compressionMode:w="sync",compactionThreshold:E=.85,agentContextStats:N=[],runMode:D="single",networkStats:$,cooperateStats:k,onInputChange:M,onSubmit:_,onInterrupt:P,onExit:j,onHistoryUp:z,onHistoryDown:A,onTabComplete:O,onRemoveAttachment:F,onContextMenuToggle:U,onAgentContextScreenToggle:K,onPasteImage:de,onShowInterruptInput:W})=>{let{columns:H}=Co();return et((ne,J)=>{if(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","BottomBar useInput",{key:J,input:ne,menuActive:g,promptActive:h,isRunning:e,inputValue:s.substring(0,20)}),!g){if(e&&ne==="i"&&!J.ctrl&&!J.meta&&W){p.debug("INK_INPUT",'Interrupt input triggered with "i" key'),W();return}if(J.ctrl&&ne==="g"&&K){K();return}if(J.ctrl&&ne==="z"){process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+Z blocked (prevents suspension)");return}if(J.escape){let fe=!ne||ne==="\x1B"||ne==="";if(p.info("INK_INPUT",`ESC detected: isRealEscape=${fe}, input=${JSON.stringify(ne)}, isRunning=${e}`),!fe){p.debug("INK_INPUT","Ignoring escape sequence (not real ESC key)");return}if(T&&U){U();return}if(h&&b){b(),M("");return}e?(p.info("INK_INPUT","\u{1F6D1} User pressed ESC to interrupt task"),P()):s&&M("");return}J.ctrl&&ne==="c"&&(process.env.CLI_DEBUG==="1"&&p.debug("INK_INPUT","Ctrl+C pressed",{isRunning:e}),e?P():(p.info("INK_INPUT","\u26A0\uFE0F Ctrl+C pressed - exiting"),j()));}},{isActive:true}),I.createElement(S,{flexDirection:"column"},h&&f&&I.createElement(S,{paddingX:2,paddingY:1},I.createElement(y,{color:"cyan",bold:true},f)),h&&v&&I.createElement(S,{paddingX:2,paddingBottom:1},I.createElement(y,{dimColor:true},v)),!h&&I.createElement(Py,{isRunning:e,statusText:t,tokenStats:n,streamingTokens:r,streamingStartTime:o,provider:a,model:l,onContextMenuToggle:U,agentContextStats:N,runMode:D,networkStats:$,cooperateStats:k}),u.length>0&&I.createElement(Dy,{attachments:u,onRemove:F}),I.createElement(S,{flexDirection:"column"},I.createElement(y,{color:"gray"},"\u2500".repeat(H)),I.createElement(My,{value:s,placeholder:h?v||"Type your answer...":e?"Enter to interrupt and send...":"Type a message...",disabled:g,multiline:d,completions:m,menuActive:g,imageCount:u.length,onChange:M,onSubmit:()=>_(s),onHistoryUp:z,onHistoryDown:A,onTabComplete:O,onPasteImage:de}),I.createElement(y,{color:"gray"},"\u2500".repeat(H))),!h&&I.createElement(Ry,{isRunning:e,hasInput:s.length>0,customHints:c,menuActive:g,thinkingEnabled:C,accumulatedRunTime:i,provider:a,model:l,runMode:D}),T&&n?.contextWindow&&U&&I.createElement(Ny,{contextWindow:n.contextWindow,tokensUsed:n.tokensUsedForContext||n.total,systemTokens:n.systemTokens,userTokens:n.userTokens,assistantTokens:n.assistantTokens,toolCallTokens:n.toolCallTokens,toolResultTokens:n.toolResultTokens,compressionMode:w,compactionThreshold:E,agentContextStats:N,runMode:D,networkStats:$,onClose:U}))},Ly=I.memo(F_);var Yd=({message:s,choices:e,initialIndex:t=0,hint:n,maxVisible:r=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 b=setTimeout(()=>{g(Date.now());},200);return ()=>clearTimeout(b)},[]),useEffect(()=>{if(e.length<=r){d(0);return}l<u?d(l):l>=u+r&&d(l-r+1);},[l,e.length,r,u]),et((b,C)=>{if(C.ctrl&&b==="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,r),f=u>0,v=u+h<e.length;return I.createElement(S,{flexDirection:"column"},s&&I.createElement(S,{marginBottom:1,paddingX:2},I.createElement(y,{bold:true,color:"cyan"},s)),n&&I.createElement(S,{marginBottom:1,paddingX:2},I.createElement(y,{dimColor:true},n)),f&&I.createElement(S,{paddingX:2},I.createElement(y,{dimColor:true}," \u2191 more")),e.slice(u,u+h).map((b,C)=>{let T=u+C,w=T===l,E=w?"\u276F ":" ";return I.createElement(S,{key:`${b.value}-${T}`,flexDirection:"row",paddingX:2},I.createElement(y,{color:w?"cyan":void 0,bold:w},E,b.label),b.description&&I.createElement(y,{dimColor:true}," - ",b.description))}),v&&I.createElement(S,{paddingX:2},I.createElement(y,{dimColor:true}," \u2193 more")))};var $y=({onSubmit:s,onCancel:e})=>{let[t,n]=useState(""),[r,o]=useState(0),i=t.length-r;et((u,d)=>{if(d.escape){e();return}if(d.return){let m=t.trim();m&&s(m);return}if(d.backspace||d.delete){if(r===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(r+1,t.length));return}if(d.rightArrow){o(Math.max(r-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 I.createElement(S,{flexDirection:"column",borderStyle:"double",borderColor:"yellow",paddingX:2,paddingY:1,width:"80%"},I.createElement(S,{marginBottom:1,justifyContent:"center"},I.createElement(y,{bold:true,color:"yellow"},"\u2728 \u63D2\u961F\u6D88\u606F - \u5C06\u5728\u4E0B\u6B21\u8BF7\u6C42\u65F6\u53D1\u9001")),I.createElement(S,{flexDirection:"column"},I.createElement(y,{dimColor:true},"\u8F93\u5165\u4F60\u7684\u6D88\u606F:"),I.createElement(S,{marginTop:1},I.createElement(y,{color:"green",bold:true},"\u276F "),t?I.createElement(y,null,a,I.createElement(y,{inverse:true},l),c):I.createElement(S,null,I.createElement(y,{inverse:true}," "),I.createElement(y,{dimColor:true},"\u8F93\u5165\u6D88\u606F...")))),I.createElement(S,{marginTop:1,justifyContent:"space-between"},I.createElement(y,{dimColor:true},"Enter: \u786E\u8BA4"),I.createElement(y,{dimColor:true},"ESC: \u53D6\u6D88")))};var Bs=s=>s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(1)}K`:String(s),U_=s=>{switch(s){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"}}},By=({agentContextStats:s,onClose:e})=>{let{columns:t}=Co();et((r,o)=>{(o.escape||r==="q")&&e();},{isActive:true});let n=[...s].sort((r,o)=>r.agentId==="Main"?-1:o.agentId==="Main"?1:r.agentLabel.localeCompare(o.agentLabel));return I.createElement(S,{flexDirection:"column",width:"100%"},I.createElement(S,{justifyContent:"space-between"},I.createElement(y,{bold:true,color:"cyan"},"Agent Context Overview"),I.createElement(y,{dimColor:true},"ESC to close")),I.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),n.length===0?I.createElement(y,{dimColor:true},"No agent context stats available."):n.map(r=>{let o=r.contextWindow||0,i=r.tokensUsedForContext||0,a=o>0?i/o:0,l=Math.round(a*100),{icon:c,color:u}=U_(r.status),d=r.currentTask?r.currentTask.length>40?`${r.currentTask.slice(0,37)}...`:r.currentTask:"";return I.createElement(S,{key:r.agentId,justifyContent:"space-between",marginTop:1},I.createElement(S,null,I.createElement(y,{color:"magenta"},r.agentLabel),I.createElement(y,{dimColor:true}," "),I.createElement(y,{color:u},c),d&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," "),I.createElement(y,{dimColor:true},d))),I.createElement(S,null,I.createElement(y,{dimColor:true},"in "),I.createElement(y,{color:"cyan"},Bs(r.input)),I.createElement(y,{dimColor:true}," out "),I.createElement(y,{color:"green"},Bs(r.output)),(r.cacheCreationTokens||r.cacheReadTokens)&&I.createElement(I.Fragment,null,I.createElement(y,{dimColor:true}," cache-w "),I.createElement(y,{color:"magenta"},Bs(r.cacheCreationTokens||0)),I.createElement(y,{dimColor:true}," cache-r "),I.createElement(y,{color:"blue"},Bs(r.cacheReadTokens||0))),I.createElement(y,{dimColor:true}," \u2502 context "),I.createElement(y,{color:"yellow"},Bs(i)),I.createElement(y,{dimColor:true},"/"),I.createElement(y,{color:"yellow"},Bs(o)),I.createElement(y,{dimColor:true}," ("),I.createElement(y,{color:a>.8?"red":a>.5?"yellow":"green"},l,"%"),I.createElement(y,{dimColor:true},")")))}),I.createElement(y,{color:"gray"},"\u2500".repeat(Math.max(t,10))),I.createElement(y,{dimColor:true},"Tip: Press Q or ESC to return"))};Zd();Z();var J_=[".png",".jpg",".jpeg",".gif",".webp",".bmp",".svg"];function V_(s){if(!s)return false;let e=s.trim(),t=e.toLowerCase(),n=J_.some(o=>t.endsWith(o)),r=e.startsWith("/")||e.startsWith("./")||e.startsWith("~/")||e.includes("/")&&n;return n&&r}var Fy=({staticEntries:s=[],pendingEntries:e=[],isRunning:t,statusText:n="",tokenStats:r,streamingTokens:o=0,streamingStartTime:i=null,accumulatedRunTime:a=0,version:l=Cl,provider:c="OpenAI",model:u="gpt-4",workDir:d=process.cwd(),showHeader:m=true,thinkingEnabled:g=true,selectMenuOptions:h=null,textPromptOptions:f=null,contextMenuActive:v=false,agentContextScreenActive:b=false,compressionMode:C="sync",compactionThreshold:T=.85,agentContextStats:w=[],runMode:E="single",networkStats:N,cooperateStats:D,commandOutput:$=[],attachedImages:k=[],interruptInputActive:M=false,getCompletions:_,onStaticRendered:P,onSubmit:j,onInterrupt:z,onExit:A,onContextMenuToggle:O,onAgentContextScreenToggle:F,onClearCommandOutput:U,onAttachImage:K,onClearImages:de,onInterruptInputSubmit:W,onInterruptInputCancel:H,onShowInterruptInput:ne})=>{let[J,fe]=useState(""),[V,re]=useState([]),[ue,se]=useState(-1),[ae,ee]=useState(null),ve=useRef(false),L=useContext(Zr);useEffect(()=>{if(!L?.internal_eventEmitter||!K)return;let Y=me=>{oe("CLI_APP",`\u{1F4CE} Received image-paste event from vendor Ink: ${me.name}`),K(me);};return L.internal_eventEmitter.on("image-paste",Y),()=>{L.internal_eventEmitter.off("image-paste",Y);}},[L,K]),useEffect(()=>{f?.defaultValue&&fe(f.defaultValue);},[f?.defaultValue]),et((Y,me)=>{if(me.escape){if(b)return;ae?ee(null):$.length>0&&U&&U();}},{isActive:true});let q=e.filter(Y=>Y.type!=="thinking"&&Y.type!=="reasoning"),Q=Y=>{if(!Y)return false;let{content:me}=Y;return typeof me=="string"?me.trim().length>0:Array.isArray(me)?me.some(pe=>{if(!pe||typeof pe!="object"||!("type"in pe))return false;switch(pe.type){case "text":return typeof pe.text=="string"&&pe.text.trim().length>0;case "image_url":return true;case "tool_use":return true;case "tool_result":return pe.content!==null&&pe.content!==void 0&&String(pe.content).trim().length>0;case "thinking":return typeof pe.thinking=="string"&&pe.thinking.trim().length>0;case "redacted_thinking":return typeof pe.data=="string"&&pe.data.trim().length>0;default:return true}}):false},le=Y=>{if(Y.message)return Q(Y.message);let me=typeof Y.text=="string"&&Y.text.trim().length>0,pe=Y.type==="plan"&&!!Y.planSteps&&Y.planSteps.length>0,_e=(Y.type==="pipeline_node_start"||Y.type==="pipeline_node_complete"||Y.type==="pipeline_node_fail"||Y.type==="pipeline_node_retry")&&(Y.pipelineNode||Y.pipelineNodeRetry),Ot=(Y.type==="network_node_start"||Y.type==="network_node_complete"||Y.type==="network_node_fail")&&Y.networkNode,He=(Y.type==="ccb_review"||Y.type==="ccb_agent_review"||Y.type==="ccb_retry"||Y.type==="ccb_failed")&&!!(Y.ccbReview||Y.ccbAgentReview||Y.ccbRetry||Y.ccbFailed),Wt=Y.type==="pipeline_dag"&&!!Y.pipelineDAG;return !!(me||pe||_e||Ot||He||Wt)},Ee=useMemo(()=>q.filter(le),[q]),Pe=useMemo(()=>s.filter(le),[s]),G=m&&!ve.current,X=I.useCallback((Y,me)=>Y,[]),te=useMemo(()=>{let Y=[],me=Pe.length+Ee.length;return G&&Y.push(I.createElement(uy,{key:"header",version:l,provider:c,model:u,workDir:d})),Pe.forEach((pe,_e)=>{Y.push(I.createElement(qd,{key:`static-entry-${pe.id}`,entry:pe})),(_e<Pe.length-1||me>Pe.length)&&Y.push(I.createElement(y,{key:`static-spacer-${pe.id}`},""));}),Y},[G,Pe,Ee.length,l,c,u,d]);if(useEffect(()=>{!G&&s.length===0||(G&&(ve.current=true),P?.());},[G,s.length,P]),b)return I.createElement(By,{agentContextStats:w,onClose:()=>F?.()});let Ne=Y=>{if(f){if(!Y.trim()&&!f.allowEmpty)return;f.onSubmit(Y),fe("");return}let me=k.length>0,pe=Y.trim().length>0;(pe||me)&&(pe&&re([...V,Y]),se(-1),fe(""),j(Y,me?k:void 0));},Re=()=>{if(V.length===0)return;let Y=ue+1;Y<V.length&&(se(Y),fe(V[V.length-1-Y]));},De=()=>{if(ue<=0){se(-1),fe("");return}let Y=ue-1;se(Y),fe(V[V.length-1-Y]);},ke=Y=>{if(!_)return null;let me=_(Y);if(me.length===0)return null;if(me.length===1)return me[0];let pe=me.map(_e=>({label:_e,value:_e,description:void 0}));return ee({message:"Select completion:",choices:pe,initialIndex:0,onSelect:_e=>{fe(_e),ee(null);},onCancel:()=>{ee(null);}}),null};return I.createElement(S,{flexDirection:"column",width:"100%"},I.createElement(ua,{items:te},X),Ee.map((Y,me)=>I.createElement(S,{key:`pending-wrapper-${Y.id}`,flexDirection:"column"},I.createElement(qd,{entry:Y}),me<Ee.length-1&&I.createElement(y,null,""))),I.createElement(y,null,`
1684
+ `),I.createElement(S,{flexShrink:0,flexDirection:"column"},I.createElement(Ly,{inputValue:J,isRunning:t,statusText:n,tokenStats:r,streamingTokens:o,streamingStartTime:i,accumulatedRunTime:a,provider:c,model:u,menuActive:!!h||!!ae,promptActive:!!f,promptMessage:f?.message,promptHint:f?.hint,promptOnCancel:f?.onCancel,thinkingEnabled:g,contextMenuActive:v,compressionMode:C,compactionThreshold:T,agentContextStats:w,runMode:E,networkStats:N,cooperateStats:D,attachments:k,onInputChange:Y=>{if(K&&V_(Y)){K(Y.trim());return}fe(Y);},onSubmit:Ne,onInterrupt:z,onExit:A,onHistoryUp:Re,onHistoryDown:De,onTabComplete:ke,onContextMenuToggle:O,onAgentContextScreenToggle:F,onRemoveAttachment:de?Y=>{de();}:void 0,onPasteImage:K,onShowInterruptInput:ne}),h&&I.createElement(Yd,{message:h.message,choices:h.choices,initialIndex:h.initialIndex,hint:h.hint,onSelect:h.onSelect,onCancel:h.onCancel,onExit:A}),ae&&I.createElement(Yd,{message:ae.message,choices:ae.choices,initialIndex:ae.initialIndex,hint:ae.hint,onSelect:ae.onSelect,onCancel:ae.onCancel,onExit:A}),$.length>0&&I.createElement(S,{flexDirection:"column",paddingX:2,paddingY:1,borderStyle:"round",borderColor:"gray"},$.map((Y,me)=>I.createElement(y,{key:me},Y)))),M&&W&&H&&I.createElement(S,{flexDirection:"column",justifyContent:"center",alignItems:"center",marginTop:5},I.createElement($y,{onSubmit:W,onCancel:H})))};Z();var Tl=class s{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;attachedImages=[];pendingEntries=[];queuedMessages=[];nextQueuedMessageId=1;interruptInputActive=false;runMode="single";streamingTokens=0;streamingStartTime=null;accumulatedRunTime=0;runningStartTime=null;compressionMode="sync";compactionThreshold=.85;agentContextStats=new Map;networkStats=null;cooperateStats=null;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[,t]=useState(0);return useEffect(()=>(this.forceUpdate=()=>{let n=Date.now();p.debug("RUNTIME",`>>> forceUpdate called, staticEntries=${this.staticEntries.length}, pendingEntries=${this.pendingEntries.length}`),t(o=>o+1);let r=Date.now()-n;r>50&&p.warn("RUNTIME",`\u26A0\uFE0F forceUpdate slow: setCounter took ${r}ms`);},()=>{this.forceUpdate=null;}),[]),I.createElement(Fy,{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,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,getCompletions:this.getCompletions,onStaticRendered:void 0,onSubmit:(n,r)=>{let o=r||this.attachedImages;this.attachedImages=[],this.callbacks.onSubmit(n,o);},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:n=>{this.attachImage(n);},onClearImages:()=>{this.clearAttachedImages();},onInterruptInputSubmit:n=>{this.handleInterruptInputSubmit(n);},onInterruptInputCancel:()=>{this.hideInterruptInput();},onShowInterruptInput:()=>{this.showInterruptInput();}})};this.appInstance=rs(I.createElement(e,null),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});try{process.stdout.isTTY&&!process.stdout.destroyed&&(process.stdout.write("\x1B[?2004h"),p.info("INK","Bracketed paste mode enabled for image paste detection"));}catch(t){p.warn("INK","Failed to enable bracketed paste mode",{error:t});}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&&(process.stdout.write("\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.stopMemorySampler();}addMessage(e){this.messages=[...this.messages.slice(-4),e],this.forceUpdate?.();}addEntry(e){let t={...e,id:this.nextEntryId++,timestamp:new Date};return this.staticEntries.length>=s.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}`),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 r=this.pendingEntries.findIndex(o=>o.id===e);r>=0&&(this.pendingEntries=this.pendingEntries.map((o,i)=>i===r?{...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 r=this.pendingEntries[0];this.staticEntries=[...this.staticEntries,r],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(r=>r.id===e);n>=0&&(this.pendingEntries=this.pendingEntries.map((r,o)=>o===n?{...r,...t}:r),this.forceUpdate?.());}updatePendingEntryByKey(e,t){let n=this.pendingEntries.findIndex(r=>r.entryKey===e);if(n>=0)this.pendingEntries=this.pendingEntries.map((r,o)=>o===n?{...r,...t,entryKey:e,timestamp:new Date}:r);else {let r={...t,entryKey:e,id:this.nextEntryId++,timestamp:new Date};this.pendingEntries=[...this.pendingEntries,r];}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((r,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((r,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?.());}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(r=>r.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?.();}}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 r=e.match(/^data:([^;]+);base64,(.+)$/);if(r){let o=`image_${Date.now()}.png`;t={mediaType:r[1],data:r[2],name:o};}else {p.error("INK_RUNTIME","Invalid data URL format",{imageData:e});return}}else {let r=e.split("/").pop()||e;t={path:e,name:r};}else t=e;if(this.attachedImages.some(r=>r.path&&t.path&&r.path===t.path||r.data&&t.data&&r.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){let t={id:this.nextQueuedMessageId++,text:e,timestamp:new Date};this.queuedMessages.push(t),p.info("INK_RUNTIME",`\u{1F4E8} Queued interrupt message #${t.id}: "${e.substring(0,50)}..."`),this.addEntry({type:"queued_message",text:"\u2728 \u63D2\u961F\u6D88\u606F (\u5C06\u5728\u4E0B\u6B21\u8BF7\u6C42\u65F6\u53D1\u9001)",details:e}),this.hideInterruptInput();}getAndClearQueuedMessages(){let e=[...this.queuedMessages];return this.queuedMessages=[],e.length>0&&p.info("INK_RUNTIME",`\u{1F4E4} Returning ${e.length} queued messages to main loop`),e}hasQueuedMessages(){return this.queuedMessages.length>0}addAgentSpawnEntry(e,t,n,r){return this.addEntry({type:"agent_spawn",agentId:e,agentIndex:t,agentStatus:"running",agentTask:n,agentModel:r,text:n})}addAgentProgressEntry(e,t,n,r){return this.addEntry({type:"agent_progress",agentId:e,agentIndex:t,agentStatus:"running",agentProgress:n,text:r})}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}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(r){p.error("INK_RUNTIME","Failed to resume stdin for SelectMenu",{error:r});}}}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);}};Z();var wl=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;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 Tl({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();}});}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){let n=[{type:"text",text:e}];if(t&&t.length>0)for(let o of t)n.push({type:"image_url",image_url:{url:`file://${o.path}`}});let r={role:"user",content:n};this.lastEntryId=this.runtime.addEntry({type:"user",message:r}),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,r="info"){let i=`${`[${e}]`} ${t}`,a=r==="error"?"warning":r;this.addInfo(i,n,a);}streamText(e,t){let n=Date.now(),r=t||this.activeAgentId||"default";p.debug("INK_ADAPTER",`streamText: ${e.length} chars to ${r}`,{snippet:e.substring(0,30),bufferExists:this.agentBuffers.has(r)});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(r)||"";this.agentBuffers.set(r,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 r=this.agentBuffers.get(t)||"";this.agentBuffers.set(t,r+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 r=n==="warning"||e.includes("\u26A0")||e.includes("\u23F3")||e.includes("\u23F1\uFE0F")||e.includes("\u{1F504}");this.runtime.addEntry({type:r?"warning":"info",text:e,details:t});}addError(e,t){let n=typeof t=="string"?t:t?.details,r=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:r});}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 r=parseInt(n[1],10);this.streamingToolChars=r,this.runtime.updateStreamingStats(r);}}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 r=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:r,cacheReadTokens:o});}startThinking(){this.streamingReasoningBuffer="",this.streamingReasoningType="thinking";}streamThinking(e,t="thinking"){this.streamingReasoningBuffer+=e,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,r){p.debug("INK_ADAPTER",`Start tool call: ${t}`,{toolId:e,args:n});let o=this.buildToolCallDetails(n,r),i=r?.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);}updateToolCallOutput(e,t,n){p.debug("INK_ADAPTER",`Update tool output: ${e}`,{output:t});let r=this.toolLogIdByToolId.get(e);if(!r)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(r,{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 r=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(`
1685
1685
  `):void 0;this.runtime.updateEntry(n,{type:t?.success?"tool_result":"tool_error",text:r||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");}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})),r=e.initial||0;if(e.initialValue){let o=e.choices.findIndex(i=>i.value===e.initialValue);o>=0&&(r=o);}setTimeout(()=>{this.runtime.showSelectMenu({message:e.message,choices:n,initialIndex:r,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 r=n.length>0?n.join(", "):void 0;this.runtime.addEntry({type:"readfile",text:t,details:r,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(", "),r=[];if(e.command){let i=this.simplifyRipgrepCommand(e.command);r.push(`$ ${i}`),r.push("");}e.status==="error"&&e.error?r.push(this.parseErrorMessage(e.error)):e.details&&r.push(e.details);let o=r.length>0?r.join(`
1686
1686
  `):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 r=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:r,details:i,sourceLabel:e.sourceLabel});}addCommandExecResult(e){if(e.status==="running"){p.debug("INK_ADAPTER","Add command exec running",{command:e.command});let r=`$ ${e.command||"command"}`;this.runtime.addEntry({type:"command_running",text:r,details:"\u23F3 \u6B63\u5728\u6267\u884C\u4E2D...",isStreaming:true,sourceLabel:e.sourceLabel});return}p.debug("INK_ADAPTER","Add command exec result",{options:e});let t=`$ ${e.command||"command"}`,n=e.output?.slice(0,500);this.runtime.addEntry({type:"command_exec",text:t,details:n,sourceLabel:e.sourceLabel});}addCodeExecResult(e){if(e.status==="running"){p.debug("INK_ADAPTER","Skip code exec start (waiting for completion)");return}p.debug("INK_ADAPTER","Add code exec result",{options:e});let t=`Code: ${e.toolName||"execute"}`,n=e.output?.slice(0,500);this.runtime.addEntry({type:"code_exec",text:t,details:n,sourceLabel:e.sourceLabel});}addBrowserDebugResult(e){if(e.status==="detecting"){p.debug("INK_ADAPTER","Skip browser debug start (waiting for completion)");return}p.debug("INK_ADAPTER","Add browser debug result",{data:e});let t=e.url||"unknown",n=[];e.summary&&n.push(e.summary),e.loadTime&&n.push(`Load: ${e.loadTime}ms`),e.consoleLogs&&n.push(`Logs: ${e.consoleLogs}`),e.errors?.length&&n.push(`Errors: ${e.errors.length}`);let r=n.length>0?n.join(", "):void 0;this.runtime.addEntry({type:"browser_debug",text:t,details:r,sourceLabel:e.sourceLabel});}showPlanUpdate(e,t,n){this.runtime.addEntry({type:"plan",planExplanation:e,planSteps:t,sourceLabel:n});}formatSmartTreeDetails(e){if(!e)return;let t=e.trim();if(!t.startsWith("{")||!t.endsWith("}"))return;let n;try{n=JSON.parse(t);}catch{return}if(!n||typeof n!="object"||Array.isArray(n)||!["path","project_types","root_dirs","modules","config_files","tip","error"].some(m=>Object.prototype.hasOwnProperty.call(n,m)))return;if(typeof n.error=="string"&&n.error.trim())return `error: ${n.error.trim()}`;let o=[],i=typeof n.path=="string"?n.path.trim():"";i&&o.push(`\u{1F4C1} Path: ${i}`);let a=this.formatSmartTreeList(n.project_types,6);a!==void 0&&o.push(`\u{1F4E6} Project Type: ${a}`);let l=this.formatSmartTreeList(n.root_dirs,12);l!==void 0&&o.push(`\u{1F4C2} Root Directories: ${l}`);let c=this.formatSmartTreeList(n.modules,12);c!==void 0&&o.push(`\u{1F527} Modules: ${c}`);let u=this.formatSmartTreeList(n.config_files,8);u!==void 0&&o.push(`\u2699\uFE0F Config Files: ${u}`);let d=typeof n.tip=="string"?n.tip.trim():"";if(d&&o.push(`\u{1F4A1} Tip: ${d}`),o.length!==0)return o.join(`
1687
1687
  `)}formatSmartTreeList(e,t){if(!Array.isArray(e))return;let n=e.filter(a=>typeof a=="string").map(a=>a.trim()).filter(a=>a.length>0);if(n.length===0)return "(none)";let r=n.slice(0,t),o=n.length-r.length,i=o>0?` ...(+${o} more)`:"";return `${r.join(", ")}${i}`}addWriteFileCall(e,t,n){p.debug("INK_ADAPTER","Add write file call",{filePath:e,sourceLabel:n});let r=t.split(`
@@ -1709,7 +1709,7 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1709
1709
  `):void 0}formatToolArgs(e){if(!(!e||typeof e=="object"&&Object.keys(e).length===0))try{let t=JSON.stringify(e,null,2);return this.truncateText(t,2e3)}catch{return this.truncateText(String(e),2e3)}}formatToolOutput(e,t){if(!e)return "";let n=e.trim();return n?t||n.length>2e3?this.truncateText(n,2e3):n:""}mergeToolDetails(e,t){let n=[];return e&&n.push(e),t&&(n.length>0&&n.push("---"),n.push(t)),n.join(`
1710
1710
  `)}truncateText(e,t){return e.length<=t?e:`${e.slice(0,t)}
1711
1711
  ... (truncated)`}formatDuration(e){if(e<1e3)return `${e}ms`;let t=e/1e3;if(t<60)return `${t.toFixed(2)}s`;let n=Math.floor(t/60),r=t-n*60;return `${n}m ${r.toFixed(1)}s`}stopHealthMonitoring(){p.debug("INK_ADAPTER","Stop health monitoring");}flushRenderScheduler(){p.debug("INK_ADAPTER","Flush render scheduler (no-op for Ink)");}getLastMessageText(){if(!this.lastEntryId)return "";let e=this.runtime.getEntry(this.lastEntryId);if(!e||!e.message)return "";let t=e.message;if(typeof t.content=="string")return t.content;if(Array.isArray(t.content)){let n=t.content.find(r=>r.type==="text");if(n&&"text"in n)return n.text||""}return ""}parseErrorMessage(e){let t=e.trim();if(t.startsWith("{")&&t.endsWith("}"))try{let n=JSON.parse(t),r=[];return n.summary?r.push(n.summary):n.error&&r.push(n.error),n.tool&&r.push(`Tool: ${n.tool}`),n.status&&n.status!=="error"&&r.push(`Status: ${n.status}`),n.metadata&&(n.metadata.exit_code!==void 0&&r.push(`Exit code: ${n.metadata.exit_code}`),n.metadata.command&&r.push(`Command: ${n.metadata.command}`)),r.length>0?r.join(`
1712
- `):e}catch{}return e.startsWith("Error:")?e:`Error: ${e}`}simplifyRipgrepCommand(e){let t=e.split(/\s+/),n=[],r=false,o=0;for(let i=0;i<t.length;i++){if(r){r=false;continue}let a=t[i];if(a.includes("/rg")||a.includes("\\rg")){n.push("rg");continue}if(i===t.length-1&&a.startsWith("/")){let l=process.cwd();if(a===l)n.push(".");else if(a.startsWith(l+"/")){let c=a.substring(l.length+1);n.push(c||".");}else {let c=a.split("/").pop()||".";n.push(c);}continue}if(a==="-g"){if(o++,o<=2)n.push(a),i+1<t.length&&(n.push(t[i+1]),r=true);else if(o===3){let l=t.slice(i).filter(c=>c==="-g").length;for(n.push(`... (+${l} more -g)`);i<t.length&&(t[i]==="-g"||i>0&&t[i-1]==="-g");)t[i]==="-g"&&i+1<t.length&&i++,i++;i--;}continue}n.push(a);}return n.join(" ")}};var jy=({onContinue:s,onManualEdit:e,onExit:t,onAutoCreate:n,detectedProviders:r=[]})=>{let o=r.length>0,i=o?[{label:"\u81EA\u52A8\u521B\u5EFA",value:"auto",description:`\u4ECE\u73AF\u5883\u53D8\u91CF\u521B\u5EFA (${r.map(c=>c.name).join(", ")})`},{label:"\u624B\u52A8\u914D\u7F6E",value:"setup",description:"\u8FDB\u5165\u4EA4\u4E92\u5F0F\u914D\u7F6E\u5411\u5BFC"},{label:"\u7F16\u8F91\u6587\u4EF6",value:"manual",description:"\u6253\u5F00\u914D\u7F6E\u6587\u4EF6\u624B\u52A8\u7F16\u8F91"},{label:"\u9000\u51FA",value:"exit",description:"\u7A0D\u540E\u518D\u914D\u7F6E"}]:[{label:"\u5F00\u59CB\u914D\u7F6E",value:"setup",description:"\u8FDB\u5165\u4EA4\u4E92\u5F0F\u914D\u7F6E\u5411\u5BFC"},{label:"\u7F16\u8F91\u6587\u4EF6",value:"manual",description:"\u6253\u5F00\u914D\u7F6E\u6587\u4EF6\u624B\u52A8\u7F16\u8F91"},{label:"\u9000\u51FA",value:"exit",description:"\u7A0D\u540E\u518D\u914D\u7F6E"}],[a,l]=useState(0);return et((c,u)=>{if(u.upArrow&&l(d=>d>0?d-1:i.length-1),u.downArrow&&l(d=>d<i.length-1?d+1:0),u.return)switch(i[a].value){case "auto":n?.();break;case "setup":s();break;case "manual":e?.();break;case "exit":t?.();break}u.escape&&t?.();}),I.createElement(S,{flexDirection:"column",paddingX:1,paddingY:1},I.createElement(y,{bold:true,color:"yellow"},"Neox CLI - Provider \u914D\u7F6E"),I.createElement(y,{dimColor:true},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),I.createElement(S,{marginTop:1},I.createElement(y,{color:"cyan"},"\u68C0\u6D4B\u5230\u60A8\u8FD8\u6CA1\u6709\u914D\u7F6E AI Provider")),I.createElement(y,{dimColor:true},"\u4E3A\u4E86\u4F7F\u7528 Neox CLI\uFF0C\u60A8\u9700\u8981\u5148\u914D\u7F6E\u4E00\u4E2A Provider"),o&&I.createElement(S,{flexDirection:"column",marginTop:1},I.createElement(y,{color:"green"},"+ \u68C0\u6D4B\u5230\u73AF\u5883\u53D8\u91CF\u4E2D\u7684\u51ED\u8BC1:"),r.map((c,u)=>I.createElement(S,{key:u,marginLeft:2},I.createElement(y,null,I.createElement(y,{color:"cyan"},c.name.padEnd(12)),I.createElement(y,{dimColor:true},c.protocol),c.baseUrl&&I.createElement(y,{dimColor:true}," | ",c.baseUrl))))),I.createElement(S,{flexDirection:"column",marginTop:1},I.createElement(y,{dimColor:true},"\u652F\u6301: OpenAI, Anthropic, Gemini, Doubao, Codex")),I.createElement(y,{dimColor:true},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),I.createElement(S,{flexDirection:"column",marginTop:1},I.createElement(y,{bold:true},"\u8BF7\u9009\u62E9\u64CD\u4F5C:"),I.createElement(S,{flexDirection:"column",marginTop:1},i.map((c,u)=>{let d=u===a,m=d?">":" ";return I.createElement(S,{key:c.value},I.createElement(y,{color:d?"cyan":void 0,bold:d},m," ",c.label.padEnd(10)),I.createElement(y,{dimColor:true}," ",c.description))}))),I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true},"\u2191\u2193 \u9009\u62E9 Enter \u786E\u8BA4 ESC \u9000\u51FA")))};var Gy=({onComplete:s,onStartSetup:e,onManualEdit:t,onAutoCreate:n,detectedProviders:r=[]})=>{let{exit:o}=vo(),[i,a]=useState(true);return et((l,c)=>{c.escape&&!i&&(s(),o());}),i?I.createElement(jy,{detectedProviders:r,onContinue:()=>{a(false),e();},onManualEdit:()=>{a(false),t?.(),s(),o();},onAutoCreate:()=>{a(false),n?.(),s(),o();},onExit:()=>{s(),o();}}):I.createElement(S,{flexDirection:"column",padding:1},I.createElement(y,{color:"cyan"},"\u6B63\u5728\u542F\u52A8 Provider \u914D\u7F6E\u6D41\u7A0B..."),I.createElement(y,{dimColor:true},"\u8BF7\u5728\u5F39\u51FA\u7684\u4EA4\u4E92\u5F0F\u754C\u9762\u4E2D\u5B8C\u6210\u914D\u7F6E"))};br();var Us=[{value:"openai",label:"OpenAI (Chat Completions)",defaultUrl:"https://api.openai.com/v1",providerKey:"openai"},{value:"openai-responses",label:"OpenAI (Responses API)",defaultUrl:"https://api.openai.com/v1",providerKey:"openai"},{value:"kimi",label:"Kimi (Moonshot)",defaultUrl:"https://api.moonshot.cn/v1",providerKey:"kimi"},{value:"anthropic",label:"Anthropic (Claude)",defaultUrl:"https://api.anthropic.com",providerKey:"anthropic"},{value:"anthropic-openai",label:"Anthropic (OpenAI \u683C\u5F0F)",defaultUrl:"https://api.anthropic.com/v1",providerKey:"anthropic"},{value:"gemini",label:"Gemini",defaultUrl:"https://generativelanguage.googleapis.com",providerKey:"gemini"},{value:"doubao",label:"\u8C46\u5305 (Doubao)",defaultUrl:"https://ark.cn-beijing.volces.com/api/v3",providerKey:"doubao"},{value:"deepseek",label:"DeepSeek",defaultUrl:"https://api.deepseek.com/v1",providerKey:"deepseek"}],Wy=({onComplete:s,onCancel:e})=>{let{exit:t}=vo(),[n,r]=useState("name"),[o,i]=useState(0),[a,l]=useState("My Provider"),[c,u]=useState(""),[d,m]=useState(""),[g,h]=useState(""),[f,v]=useState(""),[b,C]=useState(""),[T,w]=useState("My Provider"),[E,N]=useState(true);I.useEffect(()=>{let A=setInterval(()=>N(O=>!O),500);return ()=>clearInterval(A)},[]);let D=useMemo(()=>d?Dt.getModelsByProvider(d).filter(O=>!O.deprecated).sort((O,F)=>(F.scores?.coding??0)-(O.scores?.coding??0)):[],[d]);et((A,O)=>{if(O.escape){e(),t();return}if(n==="protocol"||n==="model"){let F=n==="protocol"?Us:D;if(O.upArrow&&i(U=>U>0?U-1:F.length-1),O.downArrow&&i(U=>U<F.length-1?U+1:0),O.return)if(n==="protocol"){let U=Us[o];u(U.value),m(U.providerKey),w(U.defaultUrl),r("baseUrl"),i(0);}else {let U=D[o];C(U.id),r("confirm");}return}if(n==="confirm"){O.return&&(s({name:a,protocol:c,baseUrl:g,apiKey:f,model:b}),t());return}if(O.return){if(n==="name")l(T||"My Provider"),w(""),r("protocol"),i(0);else if(n==="baseUrl"){let F=Us.find(U=>U.value===c);h(T||F?.defaultUrl||""),w(""),r("apiKey");}else n==="apiKey"&&T.trim().length>0&&(v(T),w(""),r("model"),i(0));return}if(O.backspace||O.delete){w(F=>F.slice(0,-1));return}A&&!O.ctrl&&!O.meta&&w(F=>F+A);});let $=(A,O,F=false)=>{let U=F?"*".repeat(T.length):T;return I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true},A),I.createElement(S,{marginTop:1},I.createElement(y,{color:"cyan"},"> "),I.createElement(y,null,U),I.createElement(y,{color:"gray"},E?"\u2588":" ")),O&&!T&&I.createElement(S,{marginLeft:2},I.createElement(y,{dimColor:true},"(",O,")")))},k=()=>I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true},"\u9009\u62E9\u534F\u8BAE\u7C7B\u578B"),I.createElement(S,{flexDirection:"column",marginTop:1},Us.map((A,O)=>{let F=O===o;return I.createElement(S,{key:A.value},I.createElement(y,{color:F?"cyan":void 0,bold:F},F?"> ":" ",A.label))}))),M=()=>{let A=D.slice(0,10),O=D.length>10;return I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true},"\u9009\u62E9\u9ED8\u8BA4\u6A21\u578B"),I.createElement(y,{dimColor:true},"\u5171 ",D.length," \u4E2A\u53EF\u7528\u6A21\u578B"),I.createElement(S,{flexDirection:"column",marginTop:1},A.map((F,U)=>{let K=U===o,de=F.scores?.coding?`[\u4EE3\u7801:${F.scores.coding}]`:"";return I.createElement(S,{key:F.id},I.createElement(y,{color:K?"cyan":void 0,bold:K},K?"> ":" ",F.id.padEnd(30)),I.createElement(y,{dimColor:true}," ",de))}),O&&o<10&&I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true}," ... \u8FD8\u6709 ",D.length-10," \u4E2A\u6A21\u578B"))))},_=()=>{let A=Dt.getModel(b);return I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,color:"green"},"\u914D\u7F6E\u786E\u8BA4"),I.createElement(S,{flexDirection:"column",marginTop:1,marginLeft:2},I.createElement(y,null,"\u540D\u79F0: ",I.createElement(y,{color:"cyan"},a)),I.createElement(y,null,"\u534F\u8BAE: ",I.createElement(y,{color:"cyan"},Us.find(O=>O.value===c)?.label)),I.createElement(y,null,"Base URL: ",I.createElement(y,{color:"cyan"},g)),I.createElement(y,null,"API Key: ",I.createElement(y,{color:"cyan"},"*".repeat(Math.min(f.length,20)),"...")),I.createElement(y,null,"\u6A21\u578B: ",I.createElement(y,{color:"cyan"},b)),A&&I.createElement(y,{dimColor:true},"(\u8F93\u5165: ",(A.maxInputTokens/1e3).toFixed(0),"K, \u8F93\u51FA: ",(A.maxOutputTokens/1e3).toFixed(0),"K)")),I.createElement(S,{marginTop:1},I.createElement(y,{color:"yellow"},"\u6309 Enter \u786E\u8BA4\u521B\u5EFA\uFF0CESC \u53D6\u6D88")))},P=["name","protocol","baseUrl","apiKey","model","confirm"],z=`[${P.indexOf(n)+1}/${P.length}]`;return I.createElement(S,{flexDirection:"column",paddingX:1,paddingY:1},I.createElement(y,{bold:true,color:"yellow"},"Provider \u914D\u7F6E\u5411\u5BFC ",z),I.createElement(y,{dimColor:true},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),I.createElement(S,{marginTop:1},n==="name"&&$("\u8F93\u5165 Provider \u540D\u79F0","\u9ED8\u8BA4: My Provider"),n==="protocol"&&k(),n==="baseUrl"&&$("\u8F93\u5165 Base URL (\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4)",Us.find(A=>A.value===c)?.defaultUrl||""),n==="apiKey"&&$("\u8F93\u5165 API Key","",true),n==="model"&&M(),n==="confirm"&&_()),I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true},n==="protocol"||n==="model"?"\u2191\u2193 \u9009\u62E9 ":"","Enter \u786E\u8BA4 ESC \u53D6\u6D88")))};br();var Sl={warn:.7,soft:.8,hard:.95},rp=2e4;function aI(s,e){return {warn:e?.warn??s?.warn??Sl.warn,soft:e?.soft??s?.soft??Sl.soft,hard:e?.hard??s?.hard??Sl.hard}}function lI(s,e){if(e!==void 0)return e;if(s)return Math.floor(s*9/10)}function cI(s,e){if(e!==void 0)return e;if(!s)return rp;let t=Math.floor(s*.15);return Math.min(rp,t||rp)}function _l(s,e){let t=Dt.getModel(s);process.env.CLI_DEBUG==="1"&&(console.error(`[PROFILE] resolveCompatProfile for model="${s}"`),console.error(`[PROFILE] registryModel found: ${!!t}`),console.error(`[PROFILE] registryModel.maxInputTokens: ${t?.maxInputTokens}`),console.error(`[PROFILE] overrides.contextWindow: ${e?.contextWindow}`));let n=128e3,r=16e3,o=e?.contextWindow??t?.maxInputTokens??n,i=e?.maxOutputTokens??t?.maxOutputTokens??r;process.env.CLI_DEBUG==="1"&&console.error(`[PROFILE] final contextWindow: ${o}`);let a=lI(o,e?.autoCompactTokenLimit),l=cI(o,e?.tailTokenBudget),c=aI(Sl,e?.warnThresholds);return {model:s,contextWindow:o,autoCompactLimit:a,maxOutputTokens:i,tailTokenBudget:l,warnThresholds:c,source:e?"override":t?"registry":"default"}}var uI=`
1712
+ `):e}catch{}return e.startsWith("Error:")?e:`Error: ${e}`}simplifyRipgrepCommand(e){let t=e.split(/\s+/),n=[],r=false,o=0;for(let i=0;i<t.length;i++){if(r){r=false;continue}let a=t[i];if(a.includes("/rg")||a.includes("\\rg")){n.push("rg");continue}if(i===t.length-1&&a.startsWith("/")){let l=process.cwd();if(a===l)n.push(".");else if(a.startsWith(l+"/")){let c=a.substring(l.length+1);n.push(c||".");}else {let c=a.split("/").pop()||".";n.push(c);}continue}if(a==="-g"){if(o++,o<=2)n.push(a),i+1<t.length&&(n.push(t[i+1]),r=true);else if(o===3){let l=t.slice(i).filter(c=>c==="-g").length;for(n.push(`... (+${l} more -g)`);i<t.length&&(t[i]==="-g"||i>0&&t[i-1]==="-g");)t[i]==="-g"&&i+1<t.length&&i++,i++;i--;}continue}n.push(a);}return n.join(" ")}};var jy=({onContinue:s,onManualEdit:e,onExit:t,onAutoCreate:n,detectedProviders:r=[]})=>{let o=r.length>0,i=o?[{label:"\u81EA\u52A8\u521B\u5EFA",value:"auto",description:`\u4ECE\u73AF\u5883\u53D8\u91CF\u521B\u5EFA (${r.map(c=>c.name).join(", ")})`},{label:"\u624B\u52A8\u914D\u7F6E",value:"setup",description:"\u8FDB\u5165\u4EA4\u4E92\u5F0F\u914D\u7F6E\u5411\u5BFC"},{label:"\u7F16\u8F91\u6587\u4EF6",value:"manual",description:"\u6253\u5F00\u914D\u7F6E\u6587\u4EF6\u624B\u52A8\u7F16\u8F91"},{label:"\u9000\u51FA",value:"exit",description:"\u7A0D\u540E\u518D\u914D\u7F6E"}]:[{label:"\u5F00\u59CB\u914D\u7F6E",value:"setup",description:"\u8FDB\u5165\u4EA4\u4E92\u5F0F\u914D\u7F6E\u5411\u5BFC"},{label:"\u7F16\u8F91\u6587\u4EF6",value:"manual",description:"\u6253\u5F00\u914D\u7F6E\u6587\u4EF6\u624B\u52A8\u7F16\u8F91"},{label:"\u9000\u51FA",value:"exit",description:"\u7A0D\u540E\u518D\u914D\u7F6E"}],[a,l]=useState(0);return et((c,u)=>{if(u.upArrow&&l(d=>d>0?d-1:i.length-1),u.downArrow&&l(d=>d<i.length-1?d+1:0),u.return)switch(i[a].value){case "auto":n?.();break;case "setup":s();break;case "manual":e?.();break;case "exit":t?.();break}u.escape&&t?.();}),I.createElement(S,{flexDirection:"column",paddingX:1,paddingY:1},I.createElement(y,{bold:true,color:"yellow"},"Neox CLI - Provider \u914D\u7F6E"),I.createElement(y,{dimColor:true},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),I.createElement(S,{marginTop:1},I.createElement(y,{color:"cyan"},"\u68C0\u6D4B\u5230\u60A8\u8FD8\u6CA1\u6709\u914D\u7F6E AI Provider")),I.createElement(y,{dimColor:true},"\u4E3A\u4E86\u4F7F\u7528 Neox CLI\uFF0C\u60A8\u9700\u8981\u5148\u914D\u7F6E\u4E00\u4E2A Provider"),o&&I.createElement(S,{flexDirection:"column",marginTop:1},I.createElement(y,{color:"green"},"+ \u68C0\u6D4B\u5230\u73AF\u5883\u53D8\u91CF\u4E2D\u7684\u51ED\u8BC1:"),r.map((c,u)=>I.createElement(S,{key:u,marginLeft:2},I.createElement(y,null,I.createElement(y,{color:"cyan"},c.name.padEnd(12)),I.createElement(y,{dimColor:true},c.protocol),c.baseUrl&&I.createElement(y,{dimColor:true}," | ",c.baseUrl))))),I.createElement(S,{flexDirection:"column",marginTop:1},I.createElement(y,{dimColor:true},"\u652F\u6301: OpenAI, Anthropic, Gemini, Doubao, Codex")),I.createElement(y,{dimColor:true},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),I.createElement(S,{flexDirection:"column",marginTop:1},I.createElement(y,{bold:true},"\u8BF7\u9009\u62E9\u64CD\u4F5C:"),I.createElement(S,{flexDirection:"column",marginTop:1},i.map((c,u)=>{let d=u===a,m=d?">":" ";return I.createElement(S,{key:c.value},I.createElement(y,{color:d?"cyan":void 0,bold:d},m," ",c.label.padEnd(10)),I.createElement(y,{dimColor:true}," ",c.description))}))),I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true},"\u2191\u2193 \u9009\u62E9 Enter \u786E\u8BA4 ESC \u9000\u51FA")))};var Gy=({onComplete:s,onStartSetup:e,onManualEdit:t,onAutoCreate:n,detectedProviders:r=[]})=>{let{exit:o}=vo(),[i,a]=useState(true);return et((l,c)=>{c.escape&&!i&&(s(),o());}),i?I.createElement(jy,{detectedProviders:r,onContinue:()=>{a(false),e();},onManualEdit:()=>{a(false),t?.(),s(),o();},onAutoCreate:()=>{a(false),n?.(),s(),o();},onExit:()=>{s(),o();}}):I.createElement(S,{flexDirection:"column",padding:1},I.createElement(y,{color:"cyan"},"\u6B63\u5728\u542F\u52A8 Provider \u914D\u7F6E\u6D41\u7A0B..."),I.createElement(y,{dimColor:true},"\u8BF7\u5728\u5F39\u51FA\u7684\u4EA4\u4E92\u5F0F\u754C\u9762\u4E2D\u5B8C\u6210\u914D\u7F6E"))};br();var Us=[{value:"openai",label:"OpenAI (Chat Completions)",defaultUrl:"https://api.openai.com/v1",providerKey:"openai"},{value:"openai-responses",label:"OpenAI (Responses API)",defaultUrl:"https://api.openai.com/v1",providerKey:"openai"},{value:"kimi",label:"Kimi (Moonshot)",defaultUrl:"https://api.moonshot.cn/v1",providerKey:"kimi"},{value:"anthropic",label:"Anthropic (Claude)",defaultUrl:"https://api.anthropic.com",providerKey:"anthropic"},{value:"anthropic-openai",label:"Anthropic (OpenAI \u683C\u5F0F)",defaultUrl:"https://api.anthropic.com/v1",providerKey:"anthropic"},{value:"gemini",label:"Gemini",defaultUrl:"https://generativelanguage.googleapis.com",providerKey:"gemini"},{value:"doubao",label:"\u8C46\u5305 (Doubao)",defaultUrl:"https://ark.cn-beijing.volces.com/api/v3",providerKey:"doubao"},{value:"deepseek",label:"DeepSeek",defaultUrl:"https://api.deepseek.com/v1",providerKey:"deepseek"}],Wy=({onComplete:s,onCancel:e})=>{let{exit:t}=vo(),[n,r]=useState("name"),[o,i]=useState(0),[a,l]=useState("My Provider"),[c,u]=useState(""),[d,m]=useState(""),[g,h]=useState(""),[f,v]=useState(""),[b,C]=useState(""),[T,w]=useState("My Provider"),[E,N]=useState(true);I.useEffect(()=>{let A=setInterval(()=>N(O=>!O),500);return ()=>clearInterval(A)},[]);let D=useMemo(()=>d?Dt.getModelsByProvider(d).filter(O=>!O.deprecated).sort((O,F)=>(F.scores?.coding??0)-(O.scores?.coding??0)):[],[d]);et((A,O)=>{if(O.escape){e(),t();return}if(n==="protocol"||n==="model"){let F=n==="protocol"?Us:D;if(O.upArrow&&i(U=>U>0?U-1:F.length-1),O.downArrow&&i(U=>U<F.length-1?U+1:0),O.return)if(n==="protocol"){let U=Us[o];u(U.value),m(U.providerKey),w(U.defaultUrl),r("baseUrl"),i(0);}else {let U=D[o];C(U.id),r("confirm");}return}if(n==="confirm"){O.return&&(s({name:a,protocol:c,baseUrl:g,apiKey:f,model:b}),t());return}if(O.return){if(n==="name")l(T||"My Provider"),w(""),r("protocol"),i(0);else if(n==="baseUrl"){let F=Us.find(U=>U.value===c);h(T||F?.defaultUrl||""),w(""),r("apiKey");}else n==="apiKey"&&T.trim().length>0&&(v(T),w(""),r("model"),i(0));return}if(O.backspace||O.delete){w(F=>F.slice(0,-1));return}A&&!O.ctrl&&!O.meta&&w(F=>F+A);});let $=(A,O,F=false)=>{let U=F?"*".repeat(T.length):T;return I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true},A),I.createElement(S,{marginTop:1},I.createElement(y,{color:"cyan"},"> "),I.createElement(y,null,U),I.createElement(y,{color:"gray"},E?"\u2588":" ")),O&&!T&&I.createElement(S,{marginLeft:2},I.createElement(y,{dimColor:true},"(",O,")")))},k=()=>I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true},"\u9009\u62E9\u534F\u8BAE\u7C7B\u578B"),I.createElement(S,{flexDirection:"column",marginTop:1},Us.map((A,O)=>{let F=O===o;return I.createElement(S,{key:A.value},I.createElement(y,{color:F?"cyan":void 0,bold:F},F?"> ":" ",A.label))}))),M=()=>{let A=D.slice(0,10),O=D.length>10;return I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true},"\u9009\u62E9\u9ED8\u8BA4\u6A21\u578B"),I.createElement(y,{dimColor:true},"\u5171 ",D.length," \u4E2A\u53EF\u7528\u6A21\u578B"),I.createElement(S,{flexDirection:"column",marginTop:1},A.map((F,U)=>{let K=U===o,de=F.scores?.coding?`[\u4EE3\u7801:${F.scores.coding}]`:"";return I.createElement(S,{key:F.id},I.createElement(y,{color:K?"cyan":void 0,bold:K},K?"> ":" ",F.id.padEnd(30)),I.createElement(y,{dimColor:true}," ",de))}),O&&o<10&&I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true}," ... \u8FD8\u6709 ",D.length-10," \u4E2A\u6A21\u578B"))))},_=()=>{let A=Dt.getModel(b);return I.createElement(S,{flexDirection:"column"},I.createElement(y,{bold:true,color:"green"},"\u914D\u7F6E\u786E\u8BA4"),I.createElement(S,{flexDirection:"column",marginTop:1,marginLeft:2},I.createElement(y,null,"\u540D\u79F0: ",I.createElement(y,{color:"cyan"},a)),I.createElement(y,null,"\u534F\u8BAE: ",I.createElement(y,{color:"cyan"},Us.find(O=>O.value===c)?.label)),I.createElement(y,null,"Base URL: ",I.createElement(y,{color:"cyan"},g)),I.createElement(y,null,"API Key: ",I.createElement(y,{color:"cyan"},"*".repeat(Math.min(f.length,20)),"...")),I.createElement(y,null,"\u6A21\u578B: ",I.createElement(y,{color:"cyan"},b)),A&&I.createElement(y,{dimColor:true},"(\u8F93\u5165: ",(A.maxInputTokens/1e3).toFixed(0),"K, \u8F93\u51FA: ",(A.maxOutputTokens/1e3).toFixed(0),"K)")),I.createElement(S,{marginTop:1},I.createElement(y,{color:"yellow"},"\u6309 Enter \u786E\u8BA4\u521B\u5EFA\uFF0CESC \u53D6\u6D88")))},P=["name","protocol","baseUrl","apiKey","model","confirm"],z=`[${P.indexOf(n)+1}/${P.length}]`;return I.createElement(S,{flexDirection:"column",paddingX:1,paddingY:1},I.createElement(y,{bold:true,color:"yellow"},"Provider \u914D\u7F6E\u5411\u5BFC ",z),I.createElement(y,{dimColor:true},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"),I.createElement(S,{marginTop:1},n==="name"&&$("\u8F93\u5165 Provider \u540D\u79F0","\u9ED8\u8BA4: My Provider"),n==="protocol"&&k(),n==="baseUrl"&&$("\u8F93\u5165 Base URL (\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4)",Us.find(A=>A.value===c)?.defaultUrl||""),n==="apiKey"&&$("\u8F93\u5165 API Key","",true),n==="model"&&M(),n==="confirm"&&_()),I.createElement(S,{marginTop:1},I.createElement(y,{dimColor:true},n==="protocol"||n==="model"?"\u2191\u2193 \u9009\u62E9 ":"","Enter \u786E\u8BA4 ESC \u53D6\u6D88")))};br();var Sl={warn:.7,soft:.8,hard:.95},rp=2e4;function lI(s,e){return {warn:e?.warn??s?.warn??Sl.warn,soft:e?.soft??s?.soft??Sl.soft,hard:e?.hard??s?.hard??Sl.hard}}function cI(s,e){if(e!==void 0)return e;if(s)return Math.floor(s*9/10)}function uI(s,e){if(e!==void 0)return e;if(!s)return rp;let t=Math.floor(s*.15);return Math.min(rp,t||rp)}function _l(s,e){let t=Dt.getModel(s);process.env.CLI_DEBUG==="1"&&(console.error(`[PROFILE] resolveCompatProfile for model="${s}"`),console.error(`[PROFILE] registryModel found: ${!!t}`),console.error(`[PROFILE] registryModel.maxInputTokens: ${t?.maxInputTokens}`),console.error(`[PROFILE] overrides.contextWindow: ${e?.contextWindow}`));let n=128e3,r=16e3,o=e?.contextWindow??t?.maxInputTokens??n,i=e?.maxOutputTokens??t?.maxOutputTokens??r;process.env.CLI_DEBUG==="1"&&console.error(`[PROFILE] final contextWindow: ${o}`);let a=cI(o,e?.autoCompactTokenLimit),l=uI(o,e?.tailTokenBudget),c=lI(Sl,e?.warnThresholds);return {model:s,contextWindow:o,autoCompactLimit:a,maxOutputTokens:i,tailTokenBudget:l,warnThresholds:c,source:e?"override":t?"registry":"default"}}var dI=`
1713
1713
  \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588
1714
1714
  \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2588\u2588\u2588\u2591 \u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588
1715
1715
  \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591 \u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588
@@ -1720,7 +1720,7 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1720
1720
  \u2591\u2591\u2591 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588
1721
1721
  \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591
1722
1722
  \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591
1723
- `,dI=`
1723
+ `,pI=`
1724
1724
  \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588
1725
1725
  \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2588\u2588\u2588\u2591 \u2591\u2591\u2588\u2588\u2588
1726
1726
  \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591 \u2591\u2591\u2588\u2588\u2588
@@ -1730,18 +1730,18 @@ Command: ${G} ${te.join(" ")}`;throw new Error(`ripgrep failed (exit code ${De})
1730
1730
  \u2588\u2588\u2588\u2591 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591 \u2588\u2588\u2588\u2591\u2591
1731
1731
  \u2591\u2591\u2591 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591 \u2591\u2591\u2591
1732
1732
  \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591
1733
- `,pI=`
1733
+ `,mI=`
1734
1734
  \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588
1735
1735
  \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588
1736
1736
  \u2588\u2588\u2588\u2591 \u2591\u2588\u2588\u2588\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591
1737
1737
  \u2588\u2588\u2588\u2591 \u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591
1738
1738
  \u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591 \u2591\u2591\u2591 \u2591\u2591\u2591
1739
- `;function Hy(s){let e=s||process.stdout.columns||80;return e<60?pI:e<80?dI:uI}var sp={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"},ze=class{config;constructor(e){this.config=e??nt(),this.config.providers||(this.config.providers={});}sanitizeId(e){return e.toLowerCase().trim().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").substring(0,48)}ensureValidId(e){let t=this.sanitizeId(e);if(!t)throw new Error("Provider ID must contain letters or numbers (allowed: lowercase letters, numbers, hyphen).");if(!/^[a-z0-9][a-z0-9-]*$/.test(t))throw new Error("Provider ID can only include lowercase letters, numbers, and hyphen.");return t}slugifyName(e){return this.sanitizeId(e)||"provider"}ensureProviderId(e,t){let n=e||this.slugifyName(t||"provider");if(this.config.providers||(this.config.providers={}),!this.config.providers[n])return n;let r=2,o=`${n}-${r}`;for(;this.config.providers[o];)r+=1,o=`${n}-${r}`;return o}persist(){Ae(this.config);}getProviderCount(){return Object.keys(this.config.providers||{}).length}getProviders(){return Object.values(this.config.providers||{}).sort((e,t)=>e.name.localeCompare(t.name))}getProvider(e){if(e)return this.config.providers?.[e]}getDefaultProvider(){if(this.config.defaultProviderId){let t=this.getProvider(this.config.defaultProviderId);if(t)return t}let[e]=this.getProviders();return e&&(this.config.defaultProviderId=e.id,this.persist()),e}setDefaultProvider(e){let t=this.getProvider(e);if(!t)throw new Error(`Provider "${e}" does not exist.`);return this.config.defaultProviderId=e,this.persist(),t}addProvider(e){if(!e.name.trim())throw new Error("Provider name is required.");if(!e.apiKey.trim())throw new Error("Provider API key/token is required.");let t=this.ensureProviderId(e.id,e.name),n=new Date().toISOString(),r=e.baseUrl?.trim()||sp[e.protocol],o=(e.models||[]).map(a=>typeof a=="string"?{name:a,createdAt:n}:{...a,createdAt:a.createdAt||n}),i={id:t,name:e.name.trim(),protocol:e.protocol,apiKey:e.apiKey.trim(),baseUrl:r,urlSuffix:e.urlSuffix,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens,models:o,defaultModel:e.defaultModel||o[0]?.name,lastSelectedModel:e.defaultModel||o[0]?.name,createdAt:n,updatedAt:n};if(!i.defaultModel)throw new Error("At least one model is required when creating a provider.");return this.config.providers||(this.config.providers={}),this.config.providers[t]=i,(!this.config.defaultProviderId||e.setAsDefault)&&(this.config.defaultProviderId=t),this.persist(),i}updateProvider(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);let r=new Date().toISOString(),o={...n,...t,baseUrl:t.baseUrl?.trim()||n.baseUrl||sp[n.protocol],urlSuffix:t.urlSuffix!==void 0?t.urlSuffix:n.urlSuffix,apiKey:t.apiKey?.trim()||n.apiKey,maxTokens:t.maxTokens!==void 0?t.maxTokens:n.maxTokens,maxInputTokens:t.maxInputTokens!==void 0?t.maxInputTokens:n.maxInputTokens,updatedAt:r};if(t.protocol&&t.protocol!==n.protocol&&(o.protocol=t.protocol,t.baseUrl||(o.baseUrl=sp[t.protocol])),t.defaultModel){if(!o.models.some(a=>a.name===t.defaultModel))throw new Error(`Model "${t.defaultModel}" does not exist for provider "${e}".`);o.defaultModel=t.defaultModel,o.lastSelectedModel=t.defaultModel;}return this.config.providers[e]=o,this.persist(),o}renameProvider(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);let r=this.ensureValidId(t);if(r===e)return n;if(this.config.providers?.[r])throw new Error(`Provider ID "${r}" already exists.`);delete this.config.providers[e];let o=new Date().toISOString(),i={...n,id:r,updatedAt:o};return this.config.providers[r]=i,this.config.defaultProviderId===e&&(this.config.defaultProviderId=r),this.persist(),i}deleteProvider(e){if(!this.config.providers?.[e])throw new Error(`Provider "${e}" does not exist.`);delete this.config.providers[e],this.config.defaultProviderId===e&&(this.config.defaultProviderId=void 0),this.persist();}addModel(e,t,n=false,r){let o=this.getProvider(e);if(!o)throw new Error(`Provider "${e}" does not exist.`);let i=t.trim();if(!i)throw new Error("Model name cannot be empty.");if(o.models.some(l=>l.name===i))throw new Error(`Model "${i}" already exists for provider "${e}".`);let a={...o,models:[...o.models,{name:i,createdAt:new Date().toISOString(),...r}],updatedAt:new Date().toISOString()};return (!o.defaultModel||n)&&(a.defaultModel=i,a.lastSelectedModel=i),this.config.providers[e]=a,this.persist(),a}removeModel(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);if(n.models.length<=1)throw new Error("A provider must have at least one model.");let r=n.models.filter(i=>i.name!==t);if(r.length===n.models.length)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let o={...n,models:r,updatedAt:new Date().toISOString()};return n.defaultModel===t&&(o.defaultModel=r[0].name),n.lastSelectedModel===t&&(o.lastSelectedModel=o.defaultModel),this.config.providers[e]=o,this.persist(),o}updateModelConfig(e,t,n){let r=this.getProvider(e);if(!r)throw new Error(`Provider "${e}" does not exist.`);let o=r.models.findIndex(l=>l.name===t);if(o===-1)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let i=[...r.models];i[o]={...i[o],...n};let a={...r,models:i,updatedAt:new Date().toISOString()};return this.config.providers[e]=a,this.persist(),a}setLastSelectedModel(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);if(!n.models.some(o=>o.name===t))throw new Error(`Model "${t}" does not exist for provider "${e}".`);return n.lastSelectedModel=t,n.updatedAt=new Date().toISOString(),this.config.providers[e]=n,this.persist(),n}resolveModel(e,t){let n=this.getProvider(e);if(n)return t&&n.models.some(o=>o.name===t)?t:n.lastSelectedModel||n.defaultModel||n.models[0]?.name}};br();var op={"claude-opus-4-5-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003","\u590D\u6742\u63A8\u7406"],"claude-sonnet-4-5-20250514":["coding","fast","accurate","\u4EE3\u7801","\u5FEB\u901F"],"claude-haiku-4-5-20250514":["fast","cheap","simple","\u8F7B\u91CF","\u4F4E\u6210\u672C"],"claude-opus-4-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003"],"claude-sonnet-4-20250514":["coding","fast","accurate","\u4EE3\u7801"],"gpt-5.2":["reasoning","coding","thorough","\u6DF1\u5EA6\u63A8\u7406","\u5168\u80FD"],"gpt-5.2-mini":["reasoning","fast","balanced","\u63A8\u7406","\u5FEB\u901F"],"gpt-5.2-codex":["coding","agent","autonomous","\u4EE3\u7801\u4E13\u5BB6","\u81EA\u4E3B\u7F16\u7A0B"],"gpt-5.2-codex-high":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B","\u6700\u5F3A"],"gpt-5.2-codex-medium":["coding","agent","balanced","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"gpt-5.1":["reasoning","coding","balanced","\u903B\u8F91\u7F1C\u5BC6","\u901A\u7528"],"gpt-5.1-mini":["fast","cheap","coding","\u5FEB\u901F","\u4F4E\u6210\u672C"],"gpt-5.1-codex":["coding","agent","autonomous","\u4EE3\u7801","\u7F16\u7A0B"],"gpt-5.1-codex-max":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B"],o3:["reasoning","math","science","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"o4-mini":["reasoning","fast","coding","\u63A8\u7406","\u5FEB\u901F"],"gemini-3-pro-preview":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762","\u89C6\u89C9"],"gemini-3.0-pro":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762"],"gemini-3.0-flash":["ui","fast","vision","UI","\u5FEB\u901F"],"gemini-2.5-pro":["reasoning","long-context","vision","\u63A8\u7406","\u957F\u4E0A\u4E0B\u6587"],"gemini-2.5-flash":["fast","vision","multimodal","\u5FEB\u901F","\u591A\u6A21\u6001"],"deepseek-v3":["coding","reasoning","cheap","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"deepseek-r1":["reasoning","math","thinking","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"qwen-max":["chinese","reasoning","coding","\u4E2D\u6587","\u63A8\u7406"],"qwen-turbo":["chinese","fast","cheap","\u4E2D\u6587","\u5FEB\u901F"]},js=6,Nt=class{providerStore;constructor(e){this.providerStore=e??new ze;}getConfig(){return nt().collab??{workerPool:[]}}saveConfig(e){let t=nt();t.collab={...e,updatedAt:new Date().toISOString()},t.collab.createdAt||(t.collab.createdAt=t.collab.updatedAt),Ae(t);}getMainAgent(){let e=this.getConfig();if(e.mainAgent)return e.mainAgent;let t=this.providerStore.getDefaultProvider();if(t)return {providerId:t.id,model:t.lastSelectedModel||t.defaultModel||t.models[0]?.name}}setMainAgent(e){let t=this.getConfig();t.mainAgent=e,this.saveConfig(t);}getSupervisorAgent(){return this.getConfig().supervisorAgent}setSupervisorAgent(e){let t=this.getConfig();t.supervisorAgent=e,this.saveConfig(t);}getWorkerPool(){return this.getConfig().workerPool||[]}getMaxConcurrent(){let e=this.getConfig();return typeof e.maxConcurrent=="number"&&Number.isFinite(e.maxConcurrent)?e.maxConcurrent:void 0}setMaxConcurrent(e){let t=this.getConfig();typeof e=="number"&&Number.isFinite(e)&&e>0?t.maxConcurrent=Math.floor(e):delete t.maxConcurrent,this.saveConfig(t);}getCCBReviewMode(){let t=this.getConfig().ccbReviewMode;return t==="single"?"single-role":t==="multi"?"multi-model":t??"multi-role"}setCCBReviewMode(e){let t=this.getConfig();t.ccbReviewMode=e,this.saveConfig(t);}setWorkerPool(e){let t=this.getConfig();t.workerPool=e,this.saveConfig(t);}addWorkerModel(e,t,n=true){let r=this.getWorkerPool();if(r.some(a=>a.providerId===e&&a.model===t))return;let i=this.getModelTraits(t);r.push({providerId:e,model:t,enabled:n,traits:i}),this.setWorkerPool(r);}removeWorkerModel(e,t){let r=this.getWorkerPool().filter(o=>!(o.providerId===e&&o.model===t));this.setWorkerPool(r);}toggleWorkerModel(e,t){let n=this.getWorkerPool(),r=n.find(o=>o.providerId===e&&o.model===t);r&&(r.enabled=!r.enabled,this.setWorkerPool(n));}getEnabledWorkerModels(){return this.getWorkerPool().filter(e=>e.enabled)}getAvailableModels(){let e=this.providerStore.getProviders(),t=[];for(let n of e)for(let r of n.models){let o=this.getModelTraits(r.name);t.push({providerId:n.id,providerName:n.name,model:r.name,traits:o});}return t}selectWorkerByTraits(e){let t=this.getEnabledWorkerModels();if(t.length===0)return;let n=t.map(r=>{let o=r.traits||[],i=e.filter(a=>o.includes(a)).length;return {entry:r,score:i}});return n.sort((r,o)=>o.score-r.score),n[0]?.entry}getModelTraits(e){if(op[e])return [...op[e]];let t=e.toLowerCase();for(let[i,a]of Object.entries(op))if(t.includes(i.toLowerCase())||i.toLowerCase().includes(t))return [...a];let n=Dt.getModel(e);if(!n)return [];let r=[],o=n.scores||{};return (o.coding??0)>=85&&r.push("coding"),(o.reasoning??0)>=85&&r.push("reasoning"),(o.vision??0)>=80&&r.push("vision"),(o.creativity??0)>=85&&r.push("creative"),(o.speed??0)>=85&&r.push("fast"),(o.cost??0)>=85&&r.push("low-cost"),n.supportsThinking&&r.push("thinking"),n.supportsVision&&r.push("multimodal"),n.maxInputTokens>=5e5&&r.push("long-context"),r}updateWorkerTraits(e,t,n){let r=this.getWorkerPool(),o=r.find(i=>i.providerId===e&&i.model===t);o&&(o.traits=n,this.setWorkerPool(r));}addWorkerTraits(e,t,n){let r=this.getWorkerPool(),o=r.find(i=>i.providerId===e&&i.model===t);if(o){let i=o.traits||[],a=[...new Set([...i,...n])];o.traits=a,this.setWorkerPool(r);}}initializeDefaults(){if(this.getConfig().workerPool.length>0)return;let t=this.providerStore.getDefaultProvider();if(!t)return;let n=t.models.map((r,o)=>({providerId:t.id,model:r.name,enabled:o===0,traits:this.getModelTraits(r.name)}));this.setWorkerPool(n);}};Z();var gI={name:"require_read_before_edit",guardrail_function:async s=>{let{tool_name:e,tool_input:t}=s.tool_context;if(e!=="edit_file")return pa();let n=t.file_path;if(!n)return pa();let r=l=>he__default.resolve(l).replace(/\\/g,"/"),o=r(n),i=jg(s.context,20);return process.env.CLI_DEBUG==="1"&&(p.debug("GUARDRAIL",`Checking edit for: ${n}`),p.debug("GUARDRAIL",`Normalized path: ${o}`),p.debug("GUARDRAIL",`Recent tool calls (${i.length}):`),i.forEach((l,c)=>{if(l.name==="readfile"){let u=l.args.path,d=u?r(u):"undefined";p.debug("GUARDRAIL",` [${c}] readfile: ${u} (normalized: ${d}) success=${l.success}`);}})),i.some(l=>{if(l.name!=="readfile"||!l.success)return false;let c=l.args.path;if(!c)return false;let d=r(c)===o||c===n;return process.env.CLI_DEBUG==="1"&&d&&p.debug("GUARDRAIL",` \u2713 Found matching readfile: ${c}`),d})?pa():(p.warn("GUARDRAIL",`Edit without recent readfile: ${n} (abs: ${o})`),process.env.CLI_DEBUG==="1"&&p.debug("GUARDRAIL",`Available readfile calls: ${i.filter(l=>l.name==="readfile").length}`),Mg(`\u26A0\uFE0F \u7F16\u8F91\u524D\u8BF7\u5148\u8BFB\u53D6\u6587\u4EF6
1739
+ `;function Hy(s){let e=s||process.stdout.columns||80;return e<60?mI:e<80?pI:dI}var sp={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"},ze=class{config;constructor(e){this.config=e??nt(),this.config.providers||(this.config.providers={});}sanitizeId(e){return e.toLowerCase().trim().replace(/[^a-z0-9-]+/g,"-").replace(/^-+|-+$/g,"").substring(0,48)}ensureValidId(e){let t=this.sanitizeId(e);if(!t)throw new Error("Provider ID must contain letters or numbers (allowed: lowercase letters, numbers, hyphen).");if(!/^[a-z0-9][a-z0-9-]*$/.test(t))throw new Error("Provider ID can only include lowercase letters, numbers, and hyphen.");return t}slugifyName(e){return this.sanitizeId(e)||"provider"}ensureProviderId(e,t){let n=e||this.slugifyName(t||"provider");if(this.config.providers||(this.config.providers={}),!this.config.providers[n])return n;let r=2,o=`${n}-${r}`;for(;this.config.providers[o];)r+=1,o=`${n}-${r}`;return o}persist(){Ae(this.config);}getProviderCount(){return Object.keys(this.config.providers||{}).length}getProviders(){return Object.values(this.config.providers||{}).sort((e,t)=>e.name.localeCompare(t.name))}getProvider(e){if(e)return this.config.providers?.[e]}getDefaultProvider(){if(this.config.defaultProviderId){let t=this.getProvider(this.config.defaultProviderId);if(t)return t}let[e]=this.getProviders();return e&&(this.config.defaultProviderId=e.id,this.persist()),e}setDefaultProvider(e){let t=this.getProvider(e);if(!t)throw new Error(`Provider "${e}" does not exist.`);return this.config.defaultProviderId=e,this.persist(),t}addProvider(e){if(!e.name.trim())throw new Error("Provider name is required.");if(!e.apiKey.trim())throw new Error("Provider API key/token is required.");let t=this.ensureProviderId(e.id,e.name),n=new Date().toISOString(),r=e.baseUrl?.trim()||sp[e.protocol],o=(e.models||[]).map(a=>typeof a=="string"?{name:a,createdAt:n}:{...a,createdAt:a.createdAt||n}),i={id:t,name:e.name.trim(),protocol:e.protocol,apiKey:e.apiKey.trim(),baseUrl:r,urlSuffix:e.urlSuffix,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens,models:o,defaultModel:e.defaultModel||o[0]?.name,lastSelectedModel:e.defaultModel||o[0]?.name,createdAt:n,updatedAt:n};if(!i.defaultModel)throw new Error("At least one model is required when creating a provider.");return this.config.providers||(this.config.providers={}),this.config.providers[t]=i,(!this.config.defaultProviderId||e.setAsDefault)&&(this.config.defaultProviderId=t),this.persist(),i}updateProvider(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);let r=new Date().toISOString(),o={...n,...t,baseUrl:t.baseUrl?.trim()||n.baseUrl||sp[n.protocol],urlSuffix:t.urlSuffix!==void 0?t.urlSuffix:n.urlSuffix,apiKey:t.apiKey?.trim()||n.apiKey,maxTokens:t.maxTokens!==void 0?t.maxTokens:n.maxTokens,maxInputTokens:t.maxInputTokens!==void 0?t.maxInputTokens:n.maxInputTokens,updatedAt:r};if(t.protocol&&t.protocol!==n.protocol&&(o.protocol=t.protocol,t.baseUrl||(o.baseUrl=sp[t.protocol])),t.defaultModel){if(!o.models.some(a=>a.name===t.defaultModel))throw new Error(`Model "${t.defaultModel}" does not exist for provider "${e}".`);o.defaultModel=t.defaultModel,o.lastSelectedModel=t.defaultModel;}return this.config.providers[e]=o,this.persist(),o}renameProvider(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);let r=this.ensureValidId(t);if(r===e)return n;if(this.config.providers?.[r])throw new Error(`Provider ID "${r}" already exists.`);delete this.config.providers[e];let o=new Date().toISOString(),i={...n,id:r,updatedAt:o};return this.config.providers[r]=i,this.config.defaultProviderId===e&&(this.config.defaultProviderId=r),this.persist(),i}deleteProvider(e){if(!this.config.providers?.[e])throw new Error(`Provider "${e}" does not exist.`);delete this.config.providers[e],this.config.defaultProviderId===e&&(this.config.defaultProviderId=void 0),this.persist();}addModel(e,t,n=false,r){let o=this.getProvider(e);if(!o)throw new Error(`Provider "${e}" does not exist.`);let i=t.trim();if(!i)throw new Error("Model name cannot be empty.");if(o.models.some(l=>l.name===i))throw new Error(`Model "${i}" already exists for provider "${e}".`);let a={...o,models:[...o.models,{name:i,createdAt:new Date().toISOString(),...r}],updatedAt:new Date().toISOString()};return (!o.defaultModel||n)&&(a.defaultModel=i,a.lastSelectedModel=i),this.config.providers[e]=a,this.persist(),a}removeModel(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);if(n.models.length<=1)throw new Error("A provider must have at least one model.");let r=n.models.filter(i=>i.name!==t);if(r.length===n.models.length)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let o={...n,models:r,updatedAt:new Date().toISOString()};return n.defaultModel===t&&(o.defaultModel=r[0].name),n.lastSelectedModel===t&&(o.lastSelectedModel=o.defaultModel),this.config.providers[e]=o,this.persist(),o}updateModelConfig(e,t,n){let r=this.getProvider(e);if(!r)throw new Error(`Provider "${e}" does not exist.`);let o=r.models.findIndex(l=>l.name===t);if(o===-1)throw new Error(`Model "${t}" does not exist for provider "${e}".`);let i=[...r.models];i[o]={...i[o],...n};let a={...r,models:i,updatedAt:new Date().toISOString()};return this.config.providers[e]=a,this.persist(),a}setLastSelectedModel(e,t){let n=this.getProvider(e);if(!n)throw new Error(`Provider "${e}" does not exist.`);if(!n.models.some(o=>o.name===t))throw new Error(`Model "${t}" does not exist for provider "${e}".`);return n.lastSelectedModel=t,n.updatedAt=new Date().toISOString(),this.config.providers[e]=n,this.persist(),n}resolveModel(e,t){let n=this.getProvider(e);if(n)return t&&n.models.some(o=>o.name===t)?t:n.lastSelectedModel||n.defaultModel||n.models[0]?.name}};br();var op={"claude-opus-4-5-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003","\u590D\u6742\u63A8\u7406"],"claude-sonnet-4-5-20250514":["coding","fast","accurate","\u4EE3\u7801","\u5FEB\u901F"],"claude-haiku-4-5-20250514":["fast","cheap","simple","\u8F7B\u91CF","\u4F4E\u6210\u672C"],"claude-opus-4-20250514":["reasoning","creative","thorough","\u6DF1\u5EA6\u601D\u8003"],"claude-sonnet-4-20250514":["coding","fast","accurate","\u4EE3\u7801"],"gpt-5.2":["reasoning","coding","thorough","\u6DF1\u5EA6\u63A8\u7406","\u5168\u80FD"],"gpt-5.2-mini":["reasoning","fast","balanced","\u63A8\u7406","\u5FEB\u901F"],"gpt-5.2-codex":["coding","agent","autonomous","\u4EE3\u7801\u4E13\u5BB6","\u81EA\u4E3B\u7F16\u7A0B"],"gpt-5.2-codex-high":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B","\u6700\u5F3A"],"gpt-5.2-codex-medium":["coding","agent","balanced","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"gpt-5.1":["reasoning","coding","balanced","\u903B\u8F91\u7F1C\u5BC6","\u901A\u7528"],"gpt-5.1-mini":["fast","cheap","coding","\u5FEB\u901F","\u4F4E\u6210\u672C"],"gpt-5.1-codex":["coding","agent","autonomous","\u4EE3\u7801","\u7F16\u7A0B"],"gpt-5.1-codex-max":["coding","agent","thorough","\u4EE3\u7801","\u6DF1\u5EA6\u7F16\u7A0B"],o3:["reasoning","math","science","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"o4-mini":["reasoning","fast","coding","\u63A8\u7406","\u5FEB\u901F"],"gemini-3-pro-preview":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762","\u89C6\u89C9"],"gemini-3.0-pro":["ui","design","vision","creative","UI\u8BBE\u8BA1","\u754C\u9762"],"gemini-3.0-flash":["ui","fast","vision","UI","\u5FEB\u901F"],"gemini-2.5-pro":["reasoning","long-context","vision","\u63A8\u7406","\u957F\u4E0A\u4E0B\u6587"],"gemini-2.5-flash":["fast","vision","multimodal","\u5FEB\u901F","\u591A\u6A21\u6001"],"deepseek-v3":["coding","reasoning","cheap","\u4EE3\u7801","\u6027\u4EF7\u6BD4"],"deepseek-r1":["reasoning","math","thinking","\u6DF1\u5EA6\u63A8\u7406","\u6570\u5B66"],"qwen-max":["chinese","reasoning","coding","\u4E2D\u6587","\u63A8\u7406"],"qwen-turbo":["chinese","fast","cheap","\u4E2D\u6587","\u5FEB\u901F"]},js=6,Nt=class{providerStore;constructor(e){this.providerStore=e??new ze;}getConfig(){return nt().collab??{workerPool:[]}}saveConfig(e){let t=nt();t.collab={...e,updatedAt:new Date().toISOString()},t.collab.createdAt||(t.collab.createdAt=t.collab.updatedAt),Ae(t);}getMainAgent(){let e=this.getConfig();if(e.mainAgent)return e.mainAgent;let t=this.providerStore.getDefaultProvider();if(t)return {providerId:t.id,model:t.lastSelectedModel||t.defaultModel||t.models[0]?.name}}setMainAgent(e){let t=this.getConfig();t.mainAgent=e,this.saveConfig(t);}getSupervisorAgent(){return this.getConfig().supervisorAgent}setSupervisorAgent(e){let t=this.getConfig();t.supervisorAgent=e,this.saveConfig(t);}getWorkerPool(){return this.getConfig().workerPool||[]}getMaxConcurrent(){let e=this.getConfig();return typeof e.maxConcurrent=="number"&&Number.isFinite(e.maxConcurrent)?e.maxConcurrent:void 0}setMaxConcurrent(e){let t=this.getConfig();typeof e=="number"&&Number.isFinite(e)&&e>0?t.maxConcurrent=Math.floor(e):delete t.maxConcurrent,this.saveConfig(t);}getCCBReviewMode(){let t=this.getConfig().ccbReviewMode;return t==="single"?"single-role":t==="multi"?"multi-model":t??"multi-role"}setCCBReviewMode(e){let t=this.getConfig();t.ccbReviewMode=e,this.saveConfig(t);}setWorkerPool(e){let t=this.getConfig();t.workerPool=e,this.saveConfig(t);}addWorkerModel(e,t,n=true){let r=this.getWorkerPool();if(r.some(a=>a.providerId===e&&a.model===t))return;let i=this.getModelTraits(t);r.push({providerId:e,model:t,enabled:n,traits:i}),this.setWorkerPool(r);}removeWorkerModel(e,t){let r=this.getWorkerPool().filter(o=>!(o.providerId===e&&o.model===t));this.setWorkerPool(r);}toggleWorkerModel(e,t){let n=this.getWorkerPool(),r=n.find(o=>o.providerId===e&&o.model===t);r&&(r.enabled=!r.enabled,this.setWorkerPool(n));}getEnabledWorkerModels(){return this.getWorkerPool().filter(e=>e.enabled)}getAvailableModels(){let e=this.providerStore.getProviders(),t=[];for(let n of e)for(let r of n.models){let o=this.getModelTraits(r.name);t.push({providerId:n.id,providerName:n.name,model:r.name,traits:o});}return t}selectWorkerByTraits(e){let t=this.getEnabledWorkerModels();if(t.length===0)return;let n=t.map(r=>{let o=r.traits||[],i=e.filter(a=>o.includes(a)).length;return {entry:r,score:i}});return n.sort((r,o)=>o.score-r.score),n[0]?.entry}getModelTraits(e){if(op[e])return [...op[e]];let t=e.toLowerCase();for(let[i,a]of Object.entries(op))if(t.includes(i.toLowerCase())||i.toLowerCase().includes(t))return [...a];let n=Dt.getModel(e);if(!n)return [];let r=[],o=n.scores||{};return (o.coding??0)>=85&&r.push("coding"),(o.reasoning??0)>=85&&r.push("reasoning"),(o.vision??0)>=80&&r.push("vision"),(o.creativity??0)>=85&&r.push("creative"),(o.speed??0)>=85&&r.push("fast"),(o.cost??0)>=85&&r.push("low-cost"),n.supportsThinking&&r.push("thinking"),n.supportsVision&&r.push("multimodal"),n.maxInputTokens>=5e5&&r.push("long-context"),r}updateWorkerTraits(e,t,n){let r=this.getWorkerPool(),o=r.find(i=>i.providerId===e&&i.model===t);o&&(o.traits=n,this.setWorkerPool(r));}addWorkerTraits(e,t,n){let r=this.getWorkerPool(),o=r.find(i=>i.providerId===e&&i.model===t);if(o){let i=o.traits||[],a=[...new Set([...i,...n])];o.traits=a,this.setWorkerPool(r);}}initializeDefaults(){if(this.getConfig().workerPool.length>0)return;let t=this.providerStore.getDefaultProvider();if(!t)return;let n=t.models.map((r,o)=>({providerId:t.id,model:r.name,enabled:o===0,traits:this.getModelTraits(r.name)}));this.setWorkerPool(n);}};Z();var hI={name:"require_read_before_edit",guardrail_function:async s=>{let{tool_name:e,tool_input:t}=s.tool_context;if(e!=="edit_file")return pa();let n=t.file_path;if(!n)return pa();let r=l=>he__default.resolve(l).replace(/\\/g,"/"),o=r(n),i=jg(s.context,20);return process.env.CLI_DEBUG==="1"&&(p.debug("GUARDRAIL",`Checking edit for: ${n}`),p.debug("GUARDRAIL",`Normalized path: ${o}`),p.debug("GUARDRAIL",`Recent tool calls (${i.length}):`),i.forEach((l,c)=>{if(l.name==="readfile"){let u=l.args.path,d=u?r(u):"undefined";p.debug("GUARDRAIL",` [${c}] readfile: ${u} (normalized: ${d}) success=${l.success}`);}})),i.some(l=>{if(l.name!=="readfile"||!l.success)return false;let c=l.args.path;if(!c)return false;let d=r(c)===o||c===n;return process.env.CLI_DEBUG==="1"&&d&&p.debug("GUARDRAIL",` \u2713 Found matching readfile: ${c}`),d})?pa():(p.warn("GUARDRAIL",`Edit without recent readfile: ${n} (abs: ${o})`),process.env.CLI_DEBUG==="1"&&p.debug("GUARDRAIL",`Available readfile calls: ${i.filter(l=>l.name==="readfile").length}`),Mg(`\u26A0\uFE0F \u7F16\u8F91\u524D\u8BF7\u5148\u8BFB\u53D6\u6587\u4EF6
1740
1740
 
1741
1741
  \u6587\u4EF6: ${n}
1742
1742
 
1743
1743
  \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
1744
- \u8FD9\u53EF\u4EE5\u907F\u514D\u57FA\u4E8E\u8FC7\u65F6\u4FE1\u606F\u8FDB\u884C\u7F16\u8F91\u3002`,{file_path:n,suggestion:"use readfile first"}))}};var zy=[gI],qy=[];Z();function mi(s){if(!s)return 0;let e=0;for(let t of s){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 cn=class{messages=[];maxMessages;constructor(e=500){this.maxMessages=e;}add(e){let t=typeof e.content=="string"?e.content:JSON.stringify(e.content),n=mi(t),r={...e,_timestamp:Date.now(),_estimatedTokens:n};if(this.messages.push(r),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 r=ed(t),o=null;try{let c=JSON.parse(n);c.type&&c.status&&c.summary&&(o=c);}catch{}let i,a=r;p.info("MEMORY","addToolResult: parsedResult\uFF1A"+o),p.info("MEMORY","addToolResult: effectiveResultType\uFF1A"+a),o?(a=o.type||r,i=rf(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:mi(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:r,_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 r=this.messages.findIndex(a=>a.role==="system"&&a._tag===e);if(r>=0){let a=this.messages[r];if(a.content===n)return;this.messages[r]={...a,content:n,_timestamp:Date.now(),_estimatedTokens:mi(n)};return}let o={role:"system",content:n,_tag:e,_timestamp:Date.now(),_estimatedTokens:mi(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 r of n.tool_calls)r.id&&t.add(r.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,r=0;for(let a of this.messages){let l=a._estimatedTokens||mi(typeof a.content=="string"?a.content:JSON.stringify(a.content));t+=l,a.role==="tool"?(r++,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`),r>100?i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8FC7\u957F\uFF08${r} \u6761\uFF09`):r>60&&i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8F83\u957F\uFF08${r} \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:r,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,r=this.messages.length*150,o=t+r,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"),r=t.filter(a=>a.role!=="system"),o=Math.max(0,this.maxMessages-n.length),i=o>0?r.slice(-o):[];this.messages=[...n,...i].map(a=>({...a,_timestamp:Date.now()}));}get length(){return this.messages.length}};var jr=class s{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||he__default.join(gi__default.homedir(),".neox","sessions"),this.filePath=he__default.join(this.directory,`${this.sessionId}.jsonl`);}async ensureDirectory(){await Se__default.mkdir(this.directory,{recursive:true});}async ensureInitialized(){if(!this.initialized){await this.ensureDirectory();try{await Se__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=Je__default.createReadStream(this.filePath,{encoding:"utf-8"}),n=ip__default.createInterface({input:t,crlfDelay:1/0});for await(let r of n)if(r.trim())try{let o=JSON.parse(r);e.push(o);}catch{console.warn(`Invalid JSONL line: ${r.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)+`
1744
+ \u8FD9\u53EF\u4EE5\u907F\u514D\u57FA\u4E8E\u8FC7\u65F6\u4FE1\u606F\u8FDB\u884C\u7F16\u8F91\u3002`,{file_path:n,suggestion:"use readfile first"}))}};var zy=[hI],qy=[];Z();function mi(s){if(!s)return 0;let e=0;for(let t of s){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 cn=class{messages=[];maxMessages;constructor(e=500){this.maxMessages=e;}add(e){let t=typeof e.content=="string"?e.content:JSON.stringify(e.content),n=mi(t),r={...e,_timestamp:Date.now(),_estimatedTokens:n};if(this.messages.push(r),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 r=ed(t),o=null;try{let c=JSON.parse(n);c.type&&c.status&&c.summary&&(o=c);}catch{}let i,a=r;p.info("MEMORY","addToolResult: parsedResult\uFF1A"+o),p.info("MEMORY","addToolResult: effectiveResultType\uFF1A"+a),o?(a=o.type||r,i=rf(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:mi(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:r,_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 r=this.messages.findIndex(a=>a.role==="system"&&a._tag===e);if(r>=0){let a=this.messages[r];if(a.content===n)return;this.messages[r]={...a,content:n,_timestamp:Date.now(),_estimatedTokens:mi(n)};return}let o={role:"system",content:n,_tag:e,_timestamp:Date.now(),_estimatedTokens:mi(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 r of n.tool_calls)r.id&&t.add(r.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,r=0;for(let a of this.messages){let l=a._estimatedTokens||mi(typeof a.content=="string"?a.content:JSON.stringify(a.content));t+=l,a.role==="tool"?(r++,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`),r>100?i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8FC7\u957F\uFF08${r} \u6761\uFF09`):r>60&&i.push(`\u5DE5\u5177\u8C03\u7528\u5386\u53F2\u8F83\u957F\uFF08${r} \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:r,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,r=this.messages.length*150,o=t+r,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"),r=t.filter(a=>a.role!=="system"),o=Math.max(0,this.maxMessages-n.length),i=o>0?r.slice(-o):[];this.messages=[...n,...i].map(a=>({...a,_timestamp:Date.now()}));}get length(){return this.messages.length}};var jr=class s{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||he__default.join(gi__default.homedir(),".neox","sessions"),this.filePath=he__default.join(this.directory,`${this.sessionId}.jsonl`);}async ensureDirectory(){await Se__default.mkdir(this.directory,{recursive:true});}async ensureInitialized(){if(!this.initialized){await this.ensureDirectory();try{await Se__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=Je__default.createReadStream(this.filePath,{encoding:"utf-8"}),n=ip__default.createInterface({input:t,crlfDelay:1/0});for await(let r of n)if(r.trim())try{let o=JSON.parse(r);e.push(o);}catch{console.warn(`Invalid JSONL line: ${r.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)+`
1745
1745
  `;await Se__default.appendFile(this.filePath,n,"utf-8");}async writeAllItems(e){await this.ensureDirectory();let t=e.map(n=>JSON.stringify(n)).join(`
1746
1746
  `);await Se__default.writeFile(this.filePath,t?t+`
1747
1747
  `:"","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(r=>r.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),r=t.splice(-n);return await this.writeAllItems(t),r.map(o=>o.item)}async createCheckpoint(e,t){await this.ensureInitialized();let n=`cp_${Date.now()}_${Math.random().toString(36).slice(2,6)}`,r={type:"checkpoint",data:{id:n,name:e,description:t}};return await this.appendItem(r),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 r=t.slice(0,n+1),o=t.length-r.length;return await this.writeAllItems(r),o}async getCheckpoints(){await this.ensureInitialized();let e=await this.readAllItems(),t=[];for(let n of e)if(n.item.type==="checkpoint"){let r=n.item;t.push({id:r.data.id,name:r.data.name,timestamp:n.timestamp});}return t}async clearSession(){try{await Se__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,r)=>({item:n.item,timestamp:n.timestamp??Date.now(),seq:r}));await this.writeAllItems(t),this.initialized=true;}static async listSessions(e){let t=e||he__default.join(gi__default.homedir(),".neox","sessions");try{return (await Se__default.readdir(t)).filter(r=>r.endsWith(".jsonl")).map(r=>r.replace(".jsonl",""))}catch{return []}}static async getMostRecentId(e){let t=e||he__default.join(gi__default.homedir(),".neox","sessions");try{let r=(await Se__default.readdir(t)).filter(i=>i.endsWith(".jsonl"));if(r.length===0)return null;let o=await Promise.all(r.map(async i=>({name:i.replace(".jsonl",""),mtime:(await Se__default.stat(he__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||he__default.join(gi__default.homedir(),".neox","sessions"),r=he__default.join(n,`${e}.jsonl`);try{return await Se__default.unlink(r),!0}catch{return false}}static async getSessionInfo(e,t){let n=t||he__default.join(gi__default.homedir(),".neox","sessions"),r=he__default.join(n,`${e}.jsonl`);try{let o=await Se__default.stat(r);return {sessionId:e,filePath:r,size:o.size,createdAt:o.birthtime,updatedAt:o.mtime}}catch{return null}}static create(e){return new s({sessionId:ss(),...e})}};var Pn=class{directory;options;sessionCache=new Map;constructor(e){this.options=e||{},this.directory=e?.directory||he__default.join(gi__default.homedir(),".neox","sessions");}async getSession(e){if(this.sessionCache.has(e))return this.sessionCache.get(e);let t=new jr({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 Se__default.mkdir(this.directory,{recursive:!0});let t=await Se__default.readdir(this.directory);for(let n of t){if(!n.endsWith(".jsonl"))continue;let r=n.replace(".jsonl",""),o=he__default.join(this.directory,n);try{let i=await Se__default.stat(o),a=await this.readSessionMeta(o),l=await this.countItems(o);e.push({sessionId:r,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=he__default.join(this.directory,`${e}.jsonl`);try{return await Se__default.unlink(t),!0}catch{return false}}async searchSessions(e){let t=await this.listSessions(),n=e.toLowerCase(),r=[];for(let o of t){if(o.sessionId.toLowerCase().includes(n)){r.push(o);continue}if(o.agentName?.toLowerCase().includes(n)){r.push(o);continue}let i=he__default.join(this.directory,`${o.sessionId}.jsonl`);await this.searchInFile(i,n)&&r.push(o);}return r}async createSession(e){let t=e?.sessionId||ss(),n=new jr({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,r=0;for(let o of t)o.updatedAt.getTime()<n&&await this.deleteSession(o.sessionId)&&r++;return r}getDirectory(){return this.directory}async getSessionCount(){return (await this.listSessions()).length}async exportSession(e){let t=await this.getSession(e),n=await t.getItems(),r=await t.getMeta();return JSON.stringify({sessionId:e,meta:r,items:n,exportedAt:new Date().toISOString()},null,2)}async readSessionMeta(e){try{let t=createReadStream(e,{encoding:"utf-8"}),n=ip__default.createInterface({input:t,crlfDelay:1/0});for await(let r of n)if(r.trim())try{let o=JSON.parse(r);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"}),r=ip__default.createInterface({input:n,crlfDelay:1/0});for await(let o of r)o.trim()&&t++;}catch{}return t}async searchInFile(e,t){try{let n=createReadStream(e,{encoding:"utf-8"}),r=ip__default.createInterface({input:n,crlfDelay:1/0});for await(let o of r)if(o.toLowerCase().includes(t))return r.close(),!0}catch{}return false}};var Gs=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=Kg(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([xo(e)]),e.role==="assistant"&&this.turnCount++);}async saveTurn(e,t){this.isSyncing||(await this.session.addItems([xo(e),xo(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 r=await this.session.popItem();if(!r)break;let o=await this.session.popItem();if(!o){await this.session.addItems([r]);break}r.type==="message"&&t.unshift(r.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 r=n.data;if(t.unshift(r),Ce(r.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 r=t.slice(n+1),o=await this.session.rollbackToCheckpoint(e);return await this.rollbackFileOperations(r),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 r=new Map;for(let i of t){let a=i.data.filePath;r.has(a)||r.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 r)try{let l=he.resolve(i);if(a.data.originalContent===null)Je.existsSync(l)&&(await Je.promises.unlink(l),console.log(` \u21BA Deleted file: ${i}`));else {let c=he.dirname(l);await Je.promises.mkdir(c,{recursive:!0}),await Je.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=he.resolve(i);if(!Je.existsSync(l)){console.error(` \u26A0 File not found for rollback: ${i}`);continue}let c=await Je.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 Je.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 Rn=class{prepareRequest(e,t){let{model:n,temperature:r,maxInputTokens:o,disableSystemPrompt:i,systemPromptOverride:a,...l}=t,c=this.constraints.validateParams({model:n,temperature:r,max_tokens:o,...l}),u=this.constraints.normalizeParams({model:n,temperature:r,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(r=>r.role==="system")){let r=e.filter(a=>a.role==="system").map(a=>this.normalizeSystemContent(a.content)).filter(a=>a.length>0),o=r.length>0?[t,...r].join(`
@@ -1752,7 +1752,7 @@ ${n.content}`:n.content).join(`
1752
1752
 
1753
1753
  `)}getWorkingDirectorySection(e,t){return t==="zh"?{title:"\u5DE5\u4F5C\u76EE\u5F55",content:`\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55: ${e}`,order:10}:{title:"Working Directory",content:`Current working directory: ${e}`,order:10}}modelMatches(e,t){return e?t.includes("*")?new RegExp("^"+t.replace(/\*/g,".*")+"$").test(e):e===t:false}isModelType(e,...t){return e?t.some(n=>this.modelMatches(e,n)):false}};function Wr(s){return s.replace(/\n{3,}/g,`
1754
1754
 
1755
- `).trim()}var vI=`You are Claude Code, Anthropic's official CLI for Claude.
1755
+ `).trim()}var CI=`You are Claude Code, Anthropic's official CLI for Claude.
1756
1756
 
1757
1757
  You are an interactive CLI tool that helps users with software engineering tasks. Use the instructions below and the tools available to you to assist the user.
1758
1758
 
@@ -1790,7 +1790,7 @@ When planning tasks, provide concrete implementation steps without time estimate
1790
1790
  You have access to the TodoWrite tools to help you manage and plan tasks. Use these tools VERY frequently to ensure that you are tracking your tasks and giving the user visibility into your progress.
1791
1791
  These tools are also EXTREMELY helpful for planning tasks, and for breaking down larger complex tasks into smaller steps. If you do not use this tool when planning, you may forget to do important tasks - and that is unacceptable.
1792
1792
 
1793
- It is critical that you mark todos as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.`.trim(),Hr=class extends Cr{buildSystemPrompt(e){let{workDir:t,language:n="zh",modelName:r,customInstructions:o}=e;return this.isResponsesAPIModel(r)?this.buildResponsesAPIPrompt(o):this.buildChatCompletionsPrompt(t,n,r,o)}buildResponsesAPIPrompt(e){let t=vI;return e&&e.trim()&&(t+=`
1793
+ It is critical that you mark todos as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.`.trim(),Hr=class extends Cr{buildSystemPrompt(e){let{workDir:t,language:n="zh",modelName:r,customInstructions:o}=e;return this.isResponsesAPIModel(r)?this.buildResponsesAPIPrompt(o):this.buildChatCompletionsPrompt(t,n,r,o)}buildResponsesAPIPrompt(e){let t=CI;return e&&e.trim()&&(t+=`
1794
1794
 
1795
1795
  # Custom Instructions
1796
1796
 
@@ -1864,12 +1864,12 @@ Tool results are returned via messages with role "tool".`}getGeneralRules(e){ret
1864
1864
  1. **Accuracy First**: Ensure correctness of code and suggestions
1865
1865
  2. **Be Concise**: Avoid redundancy, answer directly
1866
1866
  3. **Safety First**: No malicious code, be aware of security risks
1867
- 4. **Stay Professional**: Objective, technical communication style`}getModelDisplayName(e){return e?e.includes("o3")?"OpenAI o3":e.includes("o1")?"OpenAI o1":e.includes("gpt-4o")?"GPT-4o":e.includes("gpt-4")?"GPT-4":e.includes("gpt-3.5")?"GPT-3.5":e:"GPT-4"}isResponsesAPIModel(e){return this.isModelType(e,"o1*","o3*")}supportsVision(e){return this.isModelType(e,"gpt-4o*","gpt-4-turbo*","gpt-4-vision*")}};Z();var SI=16e3;function Jy(s,e=SI){if(!s||s.length<=e)return s;let t=s.split(`
1867
+ 4. **Stay Professional**: Objective, technical communication style`}getModelDisplayName(e){return e?e.includes("o3")?"OpenAI o3":e.includes("o1")?"OpenAI o1":e.includes("gpt-4o")?"GPT-4o":e.includes("gpt-4")?"GPT-4":e.includes("gpt-3.5")?"GPT-3.5":e:"GPT-4"}isResponsesAPIModel(e){return this.isModelType(e,"o1*","o3*")}supportsVision(e){return this.isModelType(e,"gpt-4o*","gpt-4-turbo*","gpt-4-vision*")}};Z();var _I=16e3;function Jy(s,e=_I){if(!s||s.length<=e)return s;let t=s.split(`
1868
1868
  `).length,n=s.length,r=Math.floor(e*.4),o=Math.floor(e*.4),i=r,a=s.length-o;for(;i>0&&(s.charCodeAt(i)&192)===128;)i--;for(;a<s.length&&(s.charCodeAt(a)&192)===128;)a++;let l=s.slice(0,i),c=s.slice(a),d=`
1869
1869
 
1870
1870
  \u2026[${n-l.length-c.length} chars truncated, total ${t} lines]\u2026
1871
1871
 
1872
- `;return l+d+c}function Vy(s,e={}){let t={...s};return !e.allowServiceTier&&"service_tier"in t&&delete t.service_tier,e.disableStore&&"store"in t&&delete t.store,!e.allowSafetyIdentifier&&"safety_identifier"in t&&delete t.safety_identifier,t}function Yy(s,e){if(!s)return null;if(e?.reasoning)return {effort:e.reasoning.effort||"low",verbosity:e.reasoning.verbosity||"low",summary:e.reasoning.summary||"auto"};let t=process.env.CD_REASONING_EFFORT||process.env.NEOX_REASONING_EFFORT,n=process.env.CD_REASONING_VERBOSITY||process.env.NEOX_REASONING_VERBOSITY,r=process.env.CD_REASONING_SUMMARY||process.env.NEOX_REASONING_SUMMARY;return t||n||r?{effort:t||"low",verbosity:n||"low",summary:r||"auto"}:null}var Zn=class{client;defaultModel;isProxy;useResponsesAPI;apiEndpoint;streamFormat;retryConfig;baseUrl;privacySettings;sessionId;doubaoThinking;apiKey;modelConfig;structuredOutputMode;constructor(e){this.baseUrl=e.baseUrl||"https://api.openai.com/v1",this.isProxy=e.baseUrl?!e.baseUrl.includes("api.openai.com"):false,this.useResponsesAPI=e.useResponsesAPI||false,this.apiEndpoint=e.apiEndpoint||"/chat/completions",this.streamFormat=e.streamFormat||"openai",this.apiKey=e.apiKey,this.sessionId=e.sessionId||`session-${Date.now()}-${Math.random().toString(36).slice(2,11)}`,this.privacySettings=e.privacySettings||{},this.doubaoThinking=e.doubaoThinking,this.modelConfig=e.modelConfig,this.structuredOutputMode=e.structuredOutputMode||"json_schema",this.client=CI.create({baseURL:this.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},timeout:12e4}),this.defaultModel=e.defaultModel||"gpt-4";let t=os("openai",this.baseUrl);this.retryConfig=ar(void 0,{...t,...e.retry}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Initialized with:",{baseUrl:this.baseUrl,isProxy:this.isProxy,useResponsesAPI:this.useResponsesAPI,apiEndpoint:this.apiEndpoint,streamFormat:this.streamFormat});}async chat(e,t={}){let{model:n=this.defaultModel}=t;return this.shouldUseResponsesAPI(n)?this.chatWithResponsesAPI(e,t):this.chatWithChatCompletions(e,t)}async*chatStreamed(e,t={}){let{model:n=this.defaultModel}=t;this.shouldUseResponsesAPI(n)?yield*this.chatStreamedWithResponsesAPI(e,t):yield*this.chatStreamedWithChatCompletions(e,t);}async chatWithChatCompletions(e,t){let{model:n=this.defaultModel,tools:r,temperature:o=.7,maxInputTokens:i}=t,a=this.buildChatCompletionsPayload(e,{model:n,tools:r,temperature:o,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:false}),l=`${this.client.defaults.baseURL}/chat/completions`;xe.llmRequest("openai",n,a,l,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Request",{url:l,payload:a});let c=this.retryConfig.requestMaxRetries,u=null;for(let d=0;d<=c;d++)try{let m=Date.now(),g=await this.client.post("/chat/completions",a),h=Date.now()-m;return xe.llmResponse("openai",h,g.data.usage,g.data.choices[0]),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Response",{duration:`${h}ms`,data:g.data}),g.data}catch(m){u=m;let g=Zt(m);if(p.error("OpenAI",`Request Error - URL: ${l}`),p.error("OpenAI",`Error: ${m.message}`),m.response?.data)try{let b=m.response.data;if(typeof b=="string")p.error("OpenAI",`Response: ${b.substring(0,500)}`);else if(b&&typeof b=="object"){let C={error:b.error,message:b.message,type:b.type,code:b.code};p.error("OpenAI",`Response: ${JSON.stringify(C).substring(0,500)}`);}}catch{p.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Error",{url:l,message:m.message,category:g.category,retryable:g.retryable,attempt:`${d+1}/${c+1}`}),xe.llmError("openai",m),!g.retryable||d===c)throw g;let h=m.response?.headers?.["retry-after"],f=Gn(h),v=lr(f,d+1,this.retryConfig);p.info("OpenAI",`Request failed (${g.code}), retrying in ${$t(v)} (${d+1}/${c})...`),await ls(v);}throw u||new Error("Unknown error during retry")}async*chatStreamedWithChatCompletions(e,t){let{model:n=this.defaultModel,tools:r,temperature:o=.7,maxInputTokens:i,signal:a}=t,l=this.buildChatCompletionsPayload(e,{model:n,tools:r,temperature:o,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:true}),c=`${this.client.defaults.baseURL}${this.apiEndpoint}`;xe.llmRequest("openai-stream",n,l,c,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Stream Request",{url:c,endpoint:this.apiEndpoint,payload:l});let u=this.retryConfig.streamMaxRetries,d=0;for(;;)try{if(a?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let m=Date.now(),g=await this.client.post(this.apiEndpoint,l,{responseType:"stream",signal:a});if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Stream Started",{status:g.status}),g.status!==200){let f="";for await(let v of g.data)f+=v.toString();throw new Error(`OpenAI API error: ${g.status} - ${f}`)}this.streamFormat==="anthropic"?yield*this.parseAnthropicStreamResponse(g.data):yield*this.parseOpenAIStreamResponse(g.data,a);let h=Date.now()-m;xe.llmResponse("openai-stream",h,{},{}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Stream Complete",{duration:`${h}ms`});return}catch(m){let g=Zt(m);if(p.error("OpenAI",`Stream Error - Request URL: ${c}`),p.error("OpenAI",`Error: ${m.message}`),m.response?.data)try{let h=m.response.data;if(typeof h=="string")p.error("OpenAI",`Response: ${h.substring(0,500)}`);else if(h&&typeof h=="object"){let f={error:h.error,message:h.message,type:h.type,code:h.code};p.error("OpenAI",`Response: ${JSON.stringify(f).substring(0,500)}`);}}catch{p.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Stream Error Details",{url:c,message:m.message,retryable:g.retryable,status:m.response?.status}),xe.llmError("openai-stream",m),g.retryable&&d<u){d++;let h=m.response?.headers?.["retry-after"],f=Gn(h),v=lr(f,d,this.retryConfig);p.info("OpenAI",`Stream failed (${g.code}), reconnecting in ${$t(v)} (${d}/${u})...`),yield {choices:[],type:"stream_retry",error:g.message,errorCode:g.code,attempt:d,maxRetries:u,delayMs:v};try{await Er(v,a);}catch(b){throw b?.name==="AbortError",b}continue}throw g}}buildChatCompletionsPayload(e,t){let{model:n,tools:r,temperature:o,structuredOutput:i,maxInputTokens:a,stream:l}=t,c=this.formatMessagesForChatCompletions(e);if(this.baseUrl.includes("ark.cn-beijing.volces.com")){let g={model:n,messages:c,stream:l};return this.doubaoThinking&&n.includes("doubao-seed")&&(g.thinking={type:this.doubaoThinking.type},process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Doubao thinking mode: ${this.doubaoThinking.type}`)),r&&r.length>0&&(g.tools=r.map(h=>({type:"function",function:{name:h.name,description:h.description,parameters:h.parameters}})),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Added ${g.tools.length} tools to Doubao payload`)),g}let d={model:n,messages:c,temperature:o,stream:l};l&&(d.stream_options={include_usage:true}),a!==void 0&&(d.max_tokens=a);let m=Yy(false);return m&&(d.reasoning_effort=m.effort,m.verbosity&&(d.verbosity=m.verbosity)),r&&r.length>0&&(d.tools=r.map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.parameters}})),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Added ${d.tools.length} tools to Chat Completions payload`)),i&&(this.structuredOutputMode==="json_object"?d.response_format={type:"json_object"}:d.response_format={type:"json_schema",json_schema:{name:i.name,schema:i.schema,strict:i.strict??true}}),Vy(d,this.privacySettings)}formatMessagesForChatCompletions(e){return e.filter(t=>{let n=t.content&&(typeof t.content=="string"?t.content.trim().length>0:Array.isArray(t.content)&&t.content.length>0),r=t.tool_calls&&t.tool_calls.length>0;return n||r}).map(t=>{let n={role:t.role,content:null};if(t.role==="tool"){let r=typeof t.content=="string"?t.content:Ce(t.content);n.content=Jy(r);}else Array.isArray(t.content)?n.content=t.content:t.tool_calls&&t.tool_calls.length>0?n.content=t.content||"":n.content=t.content||null;return t.name&&(n.name=t.name),t.tool_call_id&&(n.tool_call_id=t.tool_call_id),t.tool_calls&&(n.tool_calls=t.tool_calls.map(r=>({id:r.id,type:"function",function:{name:r.function.name,arguments:r.function.arguments}}))),n})}async chatWithResponsesAPI(e,t){let n="",r=[],o;for await(let i of this.chatStreamedWithResponsesAPI(e,t)){let a=i.choices?.[0]?.delta;if(a&&(a.content&&(n+=a.content),a.tool_calls))for(let l of a.tool_calls){let c=r.find(u=>u.index===l.index);c?l.function?.arguments&&(c.function.arguments+=l.function.arguments):r.push({id:l.id||`call_${r.length}`,type:"function",function:{name:l.function?.name||"",arguments:l.function?.arguments||""},index:l.index});}i.usage&&(o=i.usage);}return {id:`chatcmpl-${Date.now()}`,choices:[{message:{role:"assistant",content:n||null,...r.length>0?{tool_calls:r}:{}},finish_reason:"stop"}],usage:o||{total_tokens:0,prompt_tokens:0,completion_tokens:0}}}async*chatStreamedWithResponsesAPI(e,t){let{model:n=this.defaultModel,tools:r,temperature:o=.7,structuredOutput:i,maxInputTokens:a,signal:l}=t,c=this.buildResponsesAPIPayload(e,{model:n,tools:r,temperature:o,structuredOutput:i,maxInputTokens:a}),u=`${this.client.defaults.baseURL}/responses`;if(xe.llmRequest("openai-responses-stream",n,c,u,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"){p.info("OpenAI","Responses API Stream Request",{url:u,toolsCount:c.tools?.length||0}),process.env.CLI_DEBUG_PAYLOAD==="1"&&p.debug("OpenAI","Full Payload",c);let d=['-H "Content-Type: application/json"','-H "Accept: text/event-stream"',`-H "Authorization: Bearer ${this.apiKey}"`,`-H "conversation_id: ${this.sessionId}"`,`-H "session_id: ${this.sessionId}"`,'-H "user-agent: neox-cli/1.0.0"'],m=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(` \\
1872
+ `;return l+d+c}function Vy(s,e={}){let t={...s};return !e.allowServiceTier&&"service_tier"in t&&delete t.service_tier,e.disableStore&&"store"in t&&delete t.store,!e.allowSafetyIdentifier&&"safety_identifier"in t&&delete t.safety_identifier,t}function Yy(s,e){if(!s)return null;if(e?.reasoning)return {effort:e.reasoning.effort||"low",verbosity:e.reasoning.verbosity||"low",summary:e.reasoning.summary||"auto"};let t=process.env.CD_REASONING_EFFORT||process.env.NEOX_REASONING_EFFORT,n=process.env.CD_REASONING_VERBOSITY||process.env.NEOX_REASONING_VERBOSITY,r=process.env.CD_REASONING_SUMMARY||process.env.NEOX_REASONING_SUMMARY;return t||n||r?{effort:t||"low",verbosity:n||"low",summary:r||"auto"}:null}var Zn=class{client;defaultModel;isProxy;useResponsesAPI;apiEndpoint;streamFormat;retryConfig;baseUrl;privacySettings;sessionId;doubaoThinking;apiKey;modelConfig;structuredOutputMode;constructor(e){this.baseUrl=e.baseUrl||"https://api.openai.com/v1",this.isProxy=e.baseUrl?!e.baseUrl.includes("api.openai.com"):false,this.useResponsesAPI=e.useResponsesAPI||false,this.apiEndpoint=e.apiEndpoint||"/chat/completions",this.streamFormat=e.streamFormat||"openai",this.apiKey=e.apiKey,this.sessionId=e.sessionId||`session-${Date.now()}-${Math.random().toString(36).slice(2,11)}`,this.privacySettings=e.privacySettings||{},this.doubaoThinking=e.doubaoThinking,this.modelConfig=e.modelConfig,this.structuredOutputMode=e.structuredOutputMode||"json_schema",this.client=xI.create({baseURL:this.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},timeout:12e4}),this.defaultModel=e.defaultModel||"gpt-4";let t=os("openai",this.baseUrl);this.retryConfig=ar(void 0,{...t,...e.retry}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Initialized with:",{baseUrl:this.baseUrl,isProxy:this.isProxy,useResponsesAPI:this.useResponsesAPI,apiEndpoint:this.apiEndpoint,streamFormat:this.streamFormat});}async chat(e,t={}){let{model:n=this.defaultModel}=t;return this.shouldUseResponsesAPI(n)?this.chatWithResponsesAPI(e,t):this.chatWithChatCompletions(e,t)}async*chatStreamed(e,t={}){let{model:n=this.defaultModel}=t;this.shouldUseResponsesAPI(n)?yield*this.chatStreamedWithResponsesAPI(e,t):yield*this.chatStreamedWithChatCompletions(e,t);}async chatWithChatCompletions(e,t){let{model:n=this.defaultModel,tools:r,temperature:o=.7,maxInputTokens:i}=t,a=this.buildChatCompletionsPayload(e,{model:n,tools:r,temperature:o,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:false}),l=`${this.client.defaults.baseURL}/chat/completions`;xe.llmRequest("openai",n,a,l,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Request",{url:l,payload:a});let c=this.retryConfig.requestMaxRetries,u=null;for(let d=0;d<=c;d++)try{let m=Date.now(),g=await this.client.post("/chat/completions",a),h=Date.now()-m;return xe.llmResponse("openai",h,g.data.usage,g.data.choices[0]),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Response",{duration:`${h}ms`,data:g.data}),g.data}catch(m){u=m;let g=Zt(m);if(p.error("OpenAI",`Request Error - URL: ${l}`),p.error("OpenAI",`Error: ${m.message}`),m.response?.data)try{let b=m.response.data;if(typeof b=="string")p.error("OpenAI",`Response: ${b.substring(0,500)}`);else if(b&&typeof b=="object"){let C={error:b.error,message:b.message,type:b.type,code:b.code};p.error("OpenAI",`Response: ${JSON.stringify(C).substring(0,500)}`);}}catch{p.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Error",{url:l,message:m.message,category:g.category,retryable:g.retryable,attempt:`${d+1}/${c+1}`}),xe.llmError("openai",m),!g.retryable||d===c)throw g;let h=m.response?.headers?.["retry-after"],f=Gn(h),v=lr(f,d+1,this.retryConfig);p.info("OpenAI",`Request failed (${g.code}), retrying in ${$t(v)} (${d+1}/${c})...`),await ls(v);}throw u||new Error("Unknown error during retry")}async*chatStreamedWithChatCompletions(e,t){let{model:n=this.defaultModel,tools:r,temperature:o=.7,maxInputTokens:i,signal:a}=t,l=this.buildChatCompletionsPayload(e,{model:n,tools:r,temperature:o,structuredOutput:t.structuredOutput,maxInputTokens:i,stream:true}),c=`${this.client.defaults.baseURL}${this.apiEndpoint}`;xe.llmRequest("openai-stream",n,l,c,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Chat Completions Stream Request",{url:c,endpoint:this.apiEndpoint,payload:l});let u=this.retryConfig.streamMaxRetries,d=0;for(;;)try{if(a?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let m=Date.now(),g=await this.client.post(this.apiEndpoint,l,{responseType:"stream",signal:a});if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Stream Started",{status:g.status}),g.status!==200){let f="";for await(let v of g.data)f+=v.toString();throw new Error(`OpenAI API error: ${g.status} - ${f}`)}this.streamFormat==="anthropic"?yield*this.parseAnthropicStreamResponse(g.data):yield*this.parseOpenAIStreamResponse(g.data,a);let h=Date.now()-m;xe.llmResponse("openai-stream",h,{},{}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Stream Complete",{duration:`${h}ms`});return}catch(m){let g=Zt(m);if(p.error("OpenAI",`Stream Error - Request URL: ${c}`),p.error("OpenAI",`Error: ${m.message}`),m.response?.data)try{let h=m.response.data;if(typeof h=="string")p.error("OpenAI",`Response: ${h.substring(0,500)}`);else if(h&&typeof h=="object"){let f={error:h.error,message:h.message,type:h.type,code:h.code};p.error("OpenAI",`Response: ${JSON.stringify(f).substring(0,500)}`);}}catch{p.error("OpenAI","Response: [Could not serialize error data]");}if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Stream Error Details",{url:c,message:m.message,retryable:g.retryable,status:m.response?.status}),xe.llmError("openai-stream",m),g.retryable&&d<u){d++;let h=m.response?.headers?.["retry-after"],f=Gn(h),v=lr(f,d,this.retryConfig);p.info("OpenAI",`Stream failed (${g.code}), reconnecting in ${$t(v)} (${d}/${u})...`),yield {choices:[],type:"stream_retry",error:g.message,errorCode:g.code,attempt:d,maxRetries:u,delayMs:v};try{await Er(v,a);}catch(b){throw b?.name==="AbortError",b}continue}throw g}}buildChatCompletionsPayload(e,t){let{model:n,tools:r,temperature:o,structuredOutput:i,maxInputTokens:a,stream:l}=t,c=this.formatMessagesForChatCompletions(e);if(this.baseUrl.includes("ark.cn-beijing.volces.com")){let g={model:n,messages:c,stream:l};return this.doubaoThinking&&n.includes("doubao-seed")&&(g.thinking={type:this.doubaoThinking.type},process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Doubao thinking mode: ${this.doubaoThinking.type}`)),r&&r.length>0&&(g.tools=r.map(h=>({type:"function",function:{name:h.name,description:h.description,parameters:h.parameters}})),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Added ${g.tools.length} tools to Doubao payload`)),g}let d={model:n,messages:c,temperature:o,stream:l};l&&(d.stream_options={include_usage:true}),a!==void 0&&(d.max_tokens=a);let m=Yy(false);return m&&(d.reasoning_effort=m.effort,m.verbosity&&(d.verbosity=m.verbosity)),r&&r.length>0&&(d.tools=r.map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.parameters}})),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Added ${d.tools.length} tools to Chat Completions payload`)),i&&(this.structuredOutputMode==="json_object"?d.response_format={type:"json_object"}:d.response_format={type:"json_schema",json_schema:{name:i.name,schema:i.schema,strict:i.strict??true}}),Vy(d,this.privacySettings)}formatMessagesForChatCompletions(e){return e.filter(t=>{let n=t.content&&(typeof t.content=="string"?t.content.trim().length>0:Array.isArray(t.content)&&t.content.length>0),r=t.tool_calls&&t.tool_calls.length>0;return n||r}).map(t=>{let n={role:t.role,content:null};if(t.role==="tool"){let r=typeof t.content=="string"?t.content:Ce(t.content);n.content=Jy(r);}else Array.isArray(t.content)?n.content=t.content:t.tool_calls&&t.tool_calls.length>0?n.content=t.content||"":n.content=t.content||null;return t.name&&(n.name=t.name),t.tool_call_id&&(n.tool_call_id=t.tool_call_id),t.tool_calls&&(n.tool_calls=t.tool_calls.map(r=>({id:r.id,type:"function",function:{name:r.function.name,arguments:r.function.arguments}}))),n})}async chatWithResponsesAPI(e,t){let n="",r=[],o;for await(let i of this.chatStreamedWithResponsesAPI(e,t)){let a=i.choices?.[0]?.delta;if(a&&(a.content&&(n+=a.content),a.tool_calls))for(let l of a.tool_calls){let c=r.find(u=>u.index===l.index);c?l.function?.arguments&&(c.function.arguments+=l.function.arguments):r.push({id:l.id||`call_${r.length}`,type:"function",function:{name:l.function?.name||"",arguments:l.function?.arguments||""},index:l.index});}i.usage&&(o=i.usage);}return {id:`chatcmpl-${Date.now()}`,choices:[{message:{role:"assistant",content:n||null,...r.length>0?{tool_calls:r}:{}},finish_reason:"stop"}],usage:o||{total_tokens:0,prompt_tokens:0,completion_tokens:0}}}async*chatStreamedWithResponsesAPI(e,t){let{model:n=this.defaultModel,tools:r,temperature:o=.7,structuredOutput:i,maxInputTokens:a,signal:l}=t,c=this.buildResponsesAPIPayload(e,{model:n,tools:r,temperature:o,structuredOutput:i,maxInputTokens:a}),u=`${this.client.defaults.baseURL}/responses`;if(xe.llmRequest("openai-responses-stream",n,c,u,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG==="1"){p.info("OpenAI","Responses API Stream Request",{url:u,toolsCount:c.tools?.length||0}),process.env.CLI_DEBUG_PAYLOAD==="1"&&p.debug("OpenAI","Full Payload",c);let d=['-H "Content-Type: application/json"','-H "Accept: text/event-stream"',`-H "Authorization: Bearer ${this.apiKey}"`,`-H "conversation_id: ${this.sessionId}"`,`-H "session_id: ${this.sessionId}"`,'-H "user-agent: neox-cli/1.0.0"'],m=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(` \\
1873
1873
  `),g=[`curl -X POST "${u}"`,...d,`-d '${JSON.stringify(c)}'`,"--no-buffer"].join(" ");p.info("CURL","\u2550".repeat(80)),p.info("CURL","Multi-line CURL command:"),p.info("CURL",m),p.info("CURL","\u2550".repeat(80)),p.info("CURL","One-line CURL (copy-paste ready):"),p.info("CURL",g),p.info("CURL","\u2550".repeat(80));}try{if(l?.aborted){let f=new Error("Request aborted");throw f.name="AbortError",f}let d=Date.now(),m={Accept:"text/event-stream",conversation_id:this.sessionId,session_id:this.sessionId,originator:"codex_cli_rs","x-codex-beta-features":"shell_snapshot"},g=await this.client.post("/responses",c,{responseType:"stream",signal:l,headers:m});if(process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Responses API Stream Started",{status:g.status}),g.status!==200){let f="";for await(let b of g.data)f+=b.toString();let v=_r(f,g.status);throw new Error(`OpenAI Responses API error: ${g.status} - ${v.message}`)}yield*this.parseResponsesAPIStream(g.data,l);let h=Date.now()-d;xe.llmResponse("openai-responses-stream",h,{},{}),process.env.CLI_DEBUG==="1"&&p.debug("OpenAI","Responses API Stream Complete",{duration:`${h}ms`});}catch(d){let m,g=d.response?.status;if(d.response?.data){let f=d.response.data;try{if(f&&typeof f.on=="function"){let v="";try{for await(let b of f)v+=b.toString();m=v;}catch{m="[Could not read error stream]";}}else if(typeof f=="string")m=f;else if(f&&typeof f=="object"){let v={error:f.error,message:f.message,type:f.type,code:f.code};m=JSON.stringify(v);}}catch{m="[Could not parse error data]";}}process.env.CLI_DEBUG==="1"&&p.error("OpenAI","Responses API Stream Error",{status:g,errorData:m,message:d.message}),xe.llmError("openai-responses-stream",d);let h;if(g&&m){let f=_r(m,g);h=`${f.message}${f.detail?`
1874
1874
  `+f.detail:""}`;}else h=d.message||"Unknown error";throw new Error(h)}}buildResponsesAPIPayload(e,t){let{model:n,tools:r,temperature:o,structuredOutput:i,maxInputTokens:a}=t,l=this.convertToResponsesInput(e),c=this.buildResponsesInstructions(e);if(!c)throw new Error("[OpenAI Responses API] instructions field is required but no system message found");if(!l||l.length===0)throw new Error("[OpenAI Responses API] input array is empty - at least one user message is required");if(process.env.CLI_DEBUG==="1"){p.debug("OpenAI","Building Responses API payload",{instructionsLength:c.length,instructionsPreview:c.substring(0,300),inputItems:l.length,inputPreview:JSON.stringify(l.slice(0,2),null,2)}),p.debug("OpenAI","Full input array for Response API:",{totalMessages:e.length,messageRoles:e.map(v=>v.role),inputCount:l.length,fullInput:JSON.stringify(l,null,2)});let m=l.filter(v=>v.type==="function_call"),g=l.filter(v=>v.type==="function_call_output");p.debug("OpenAI","Function call ID matching check:",{callCount:m.length,outputCount:g.length,callIds:m.map(v=>({id:v.id||v.call_id,name:v.name})),outputIds:g.map(v=>({call_id:v.call_id}))});let h=new Set(m.map(v=>v.call_id||v.id)),f=g.filter(v=>!h.has(v.call_id));f.length>0&&p.warn("OpenAI",`\u26A0\uFE0F Found ${f.length} unmatched function_call_output!`,{unmatchedCallIds:f.map(v=>v.call_id)});}let u={model:n,instructions:c,input:l};r&&r.length>0&&(u.tools=r.map(m=>this.formatResponsesFunctionTool(m)),u.tool_choice="auto",u.parallel_tool_calls=true,process.env.CLI_DEBUG==="1"&&p.debug("OpenAI",`Added ${u.tools.length} tools`));let d=Yy(true,this.modelConfig);return d&&(u.reasoning={effort:d.effort,summary:d.summary||"auto"}),u.store=false,u.stream=true,d&&(u.include=["reasoning.encrypted_content"]),u.prompt_cache_key=this.sessionId,Vy(u,this.privacySettings)}buildResponsesInstructions(e){let t=Qo({workDir:process.cwd(),language:"zh",useCodexStyle:true});return process.env.CLI_DEBUG==="1"&&(p.debug("OpenAI","Using official Codex instructions for Responses API"),p.debug("OpenAI",`Instructions length: ${t.length} chars`),p.debug("OpenAI",`Instructions preview: ${t.substring(0,200)}...`)),t}convertToResponsesInput(e){let n=this.filterIncompleteToolCalls(e).filter(i=>i.role!=="system").flatMap(i=>this.convertMessageToResponsesItems(i)),r=this.extractMemoryContext(e);r&&n.unshift({type:"message",role:"user",status:"completed",content:[{type:"input_text",text:`<memory_context>
1875
1875
  ${r}
@@ -1933,21 +1933,21 @@ Claude uses standard tool calling format:
1933
1933
  }
1934
1934
  \`\`\`
1935
1935
 
1936
- Tool results are returned via tool_result messages.`}supportsExtendedThinking(e){return e?e.includes("claude-3-5-sonnet")||e.includes("claude-3-opus"):false}supportsPromptCaching(e){return e?e.includes("claude-3-5")||e.includes("claude-3-opus")||e.includes("claude-3-sonnet"):false}getCachingRecommendation(e){return e<2e3?{shouldUseCache:false,cacheTTL:"5m",reason:"Prompt too short, caching overhead not worth it"}:e<1e4?{shouldUseCache:true,cacheTTL:"5m",reason:"Medium prompt, 5-minute cache recommended"}:{shouldUseCache:true,cacheTTL:"1h",reason:"Long prompt, 1-hour cache recommended for cost savings"}}};Z();var II=15e3,vi=2*1024*1024,EI=1.5*1024*1024;function AI(s,e=II){if(!s||s.length<=e)return s;let t=s.split(`
1936
+ Tool results are returned via tool_result messages.`}supportsExtendedThinking(e){return e?e.includes("claude-3-5-sonnet")||e.includes("claude-3-opus"):false}supportsPromptCaching(e){return e?e.includes("claude-3-5")||e.includes("claude-3-opus")||e.includes("claude-3-sonnet"):false}getCachingRecommendation(e){return e<2e3?{shouldUseCache:false,cacheTTL:"5m",reason:"Prompt too short, caching overhead not worth it"}:e<1e4?{shouldUseCache:true,cacheTTL:"5m",reason:"Medium prompt, 5-minute cache recommended"}:{shouldUseCache:true,cacheTTL:"1h",reason:"Long prompt, 1-hour cache recommended for cost savings"}}};Z();var EI=15e3,vi=2*1024*1024,AI=1.5*1024*1024;function MI(s,e=EI){if(!s||s.length<=e)return s;let t=s.split(`
1937
1937
  `).length,n=s.length,r=Math.floor(e*.4),o=Math.floor(e*.4),i=r,a=s.length-o;for(;i>0&&(s.charCodeAt(i)&192)===128;)i--;for(;a<s.length&&(s.charCodeAt(a)&192)===128;)a++;let l=s.slice(0,i),c=s.slice(a),d=`
1938
1938
 
1939
1939
  \u2026[${n-l.length-c.length} chars truncated, total ${t} lines]\u2026
1940
1940
 
1941
1941
  `;return l+d+c}function Xy(s,e=2e3){let t=s&&typeof s.toJSON=="function"?s.toJSON():s,n="";try{n=JSON.stringify(t??{},null,2);}catch{n=String(t??"");}return n?n.length>e?`${n.slice(0,e)}
1942
- ...[truncated ${n.length-e} chars]`:n:"No headers"}var lp="You are Claude Code, Anthropic's official CLI for Claude.",MI=["claude-code-20250219","interleaved-thinking-2025-05-14"],Rl="2023-06-01",Dl=64,PI=1024;var Qy=18e4,Zy=6e4,eb={readfile:"Read",write_file:"Write",edit_file:"Edit",glob_search:"Glob",glob:"Glob",search:"Grep",execute_shell:"Bash",bash:"Bash",shell:"Bash",todo_write:"TodoWrite",task:"Task",web_fetch:"WebFetch",web_search:"WebSearch",notebook_edit:"NotebookEdit",ask_user:"AskUserQuestion"},cp={Read:"readfile",Write:"write_file",Edit:"edit_file",Glob:"glob_search",Grep:"search",Bash:"execute_shell",TodoWrite:"todo_write",Task:"task",WebFetch:"web_fetch",WebSearch:"web_search",NotebookEdit:"notebook_edit",AskUserQuestion:"ask_user"},Hs=class{client;defaultModel;maxTokens;retryConfig;baseUrl;authToken;isProxyMode;claudeCodeUserId;betaFeatures;systemPromptPrefix;sanitizeToolsForProxy;disableCaching;thinkingConfig=null;constructor(e){this.authToken=e.authToken,this.baseUrl=(e.baseUrl||"https://api.anthropic.com").replace(/\/+$/,"");let t=this.baseUrl.includes("api.anthropic.com");this.isProxyMode=e.forceClaudeCodeMode||!t;let n=typeof e.userId=="string"?e.userId.trim():"";this.claudeCodeUserId=n?this.sanitizeUserId(n):this.generateSafeUserId(),this.betaFeatures=e.betaFeatures||MI,this.systemPromptPrefix=e.systemPromptPrefix||(this.isProxyMode?lp:null),this.sanitizeToolsForProxy=false,this.disableCaching=e.disableCaching||false,this.client=CI.create({baseURL:this.baseUrl,headers:this.buildHeaders(),timeout:3e5,validateStatus:()=>true}),this.defaultModel=e.defaultModel||"claude-sonnet-4-5-20250929",this.maxTokens=e.maxTokens||32e3;let r=os("anthropic",this.baseUrl);this.retryConfig=ar(void 0,{...r,...e.retry}),this.debugLog("Initialized",{baseUrl:this.baseUrl,isProxyMode:this.isProxyMode,defaultModel:this.defaultModel,betaFeatures:this.betaFeatures});}setThinking(e){this.thinkingConfig=e,this.debugLog("Thinking config updated",{config:e});}setUserId(e){let t=e?.trim?.()||"";t&&(this.claudeCodeUserId=this.sanitizeUserId(t));}isCacheControlError(e){let t="";try{let n=e.response?.data;if(typeof n=="string")t=n.toLowerCase();else if(n&&typeof n=="object"){let r={error:n.error,message:n.message,type:n.type,code:n.code};t=JSON.stringify(r).toLowerCase();}else t=String(e.message||"").toLowerCase();}catch{t=String(e.message||"").toLowerCase();}return t.includes("cache_control")||t.includes("ttl=")||t.includes("ephemeral")||t.includes("cache")&&t.includes("block")}async chat(e,t={}){let n={...t,disableCaching:t.disableCaching??this.disableCaching,thinking:t.thinking??this.thinkingConfig??void 0},r=this.retryConfig.requestMaxRetries,o=null,i=n.disableCaching||false;for(let a=0;a<=r;a++){let l={...n,...i?{disableCaching:true}:{}},c=this.buildPayload(e,l);a===0&&this.logRequest(t.model||this.defaultModel,c);try{let u=Date.now(),d=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",m=await this.client.post(d,c,{responseType:"stream",signal:t.signal});if(m.status!==200){let f="";for await(let T of m.data)f+=T.toString();let v=`${this.baseUrl}${d}`,b=Fn(v,this.buildHeaders(),c,!1);p.error("CURL","=== [chat] API Error - Full Request CURL ==="),p.error("CURL",b),p.error("CURL",`=== Error Headers: ${Xy(m.headers)} ===`),p.error("CURL",`=== Error Response: ${f.substring(0,1e3)} ===`);let C=new Error(`Anthropic API error: ${m.status}`);C.response={status:m.status,headers:m.headers,data:f};try{let T=JSON.parse(f);C.response.data=T,T.error?.message?C.message=`Anthropic API error: ${m.status} - ${T.error.message}`:T.message&&(C.message=`Anthropic API error: ${m.status} - ${T.message}`),this.debugLog("API Error Details",T);}catch{this.debugLog("API Error (non-JSON)",{status:m.status,dataLength:f.length});}throw C}let g=await this.collectStreamResponse(m.data),h=Date.now()-u;return xe.llmResponse("anthropic",h,g.usage,g.choices[0]),this.debugLog("Response",{duration:`${h}ms`,usage:g.usage}),g}catch(u){await this.normalizeAxiosStreamError(u),o=u;let d=Zt(u);if(d.code==="PROXY_UPSTREAM_FAILED"){let v=JSON.stringify(c||{}).length,b=Array.isArray(e)?e.length:0,C=Array.isArray(e)?e.reduce((T,w)=>w?.content?typeof w.content=="string"?T+w.content.length:Array.isArray(w.content)?T+w.content.map(E=>typeof E.text=="string"?E.text.length:0).reduce((E,N)=>E+N,0):T:T,0):0;p.warn("Anthropic","Upstream request failed (PROXY_UPSTREAM_FAILED)",{attempt:`${a+1}/${r+1}`,payloadSize:v,msgCount:b,promptChars:C,status:u.response?.status});}if(this.debugLog("Error",{message:u.message,category:d.category,code:d.code,attempt:`${a+1}/${r+1}`}),xe.llmError("anthropic",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:a+1}),p.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(!d.retryable||a===r)throw d;let m=ma(u.response?.headers),g=So(d.category,a+1,m||d.retryAfter),h=d.category==="retryable_rate_limit",f=h?`\u23F3 API \u4EE3\u7406\u901F\u7387\u9650\u5236\uFF0C${$t(g)} \u540E\u91CD\u8BD5...`:`Retrying in ${$t(g)}...`;this.debugLog("Retrying",{delay:$t(g),attempt:a+1,isRateLimit:h,serverDelay:m?$t(m):"none",retryMsg:f});try{await Er(g,n.signal);}catch(v){throw v?.name==="AbortError"&&this.debugLog("Chat retry interrupted by user"),v}}}throw o||new Error("Unknown error during retry")}async collectStreamResponse(e){let t="",n="",r=[],o="",i=null,a="";for await(let c of e){let u=c.toString();t+=u;let d=t.split(`
1942
+ ...[truncated ${n.length-e} chars]`:n:"No headers"}var lp="You are Claude Code, Anthropic's official CLI for Claude.",PI=["claude-code-20250219","interleaved-thinking-2025-05-14"],Rl="2023-06-01",Dl=64,RI=1024;var Qy=18e4,Zy=6e4,eb={readfile:"Read",write_file:"Write",edit_file:"Edit",glob_search:"Glob",glob:"Glob",search:"Grep",execute_shell:"Bash",bash:"Bash",shell:"Bash",todo_write:"TodoWrite",task:"Task",web_fetch:"WebFetch",web_search:"WebSearch",notebook_edit:"NotebookEdit",ask_user:"AskUserQuestion"},cp={Read:"readfile",Write:"write_file",Edit:"edit_file",Glob:"glob_search",Grep:"search",Bash:"execute_shell",TodoWrite:"todo_write",Task:"task",WebFetch:"web_fetch",WebSearch:"web_search",NotebookEdit:"notebook_edit",AskUserQuestion:"ask_user"},Hs=class{client;defaultModel;maxTokens;retryConfig;baseUrl;authToken;isProxyMode;claudeCodeUserId;betaFeatures;systemPromptPrefix;sanitizeToolsForProxy;disableCaching;thinkingConfig=null;constructor(e){this.authToken=e.authToken,this.baseUrl=(e.baseUrl||"https://api.anthropic.com").replace(/\/+$/,"");let t=this.baseUrl.includes("api.anthropic.com");this.isProxyMode=e.forceClaudeCodeMode||!t;let n=typeof e.userId=="string"?e.userId.trim():"";this.claudeCodeUserId=n?this.sanitizeUserId(n):this.generateSafeUserId(),this.betaFeatures=e.betaFeatures||PI,this.systemPromptPrefix=e.systemPromptPrefix||(this.isProxyMode?lp:null),this.sanitizeToolsForProxy=false,this.disableCaching=e.disableCaching||false,this.client=xI.create({baseURL:this.baseUrl,headers:this.buildHeaders(),timeout:3e5,validateStatus:()=>true}),this.defaultModel=e.defaultModel||"claude-sonnet-4-5-20250929",this.maxTokens=e.maxTokens||32e3;let r=os("anthropic",this.baseUrl);this.retryConfig=ar(void 0,{...r,...e.retry}),this.debugLog("Initialized",{baseUrl:this.baseUrl,isProxyMode:this.isProxyMode,defaultModel:this.defaultModel,betaFeatures:this.betaFeatures});}setThinking(e){this.thinkingConfig=e,this.debugLog("Thinking config updated",{config:e});}setUserId(e){let t=e?.trim?.()||"";t&&(this.claudeCodeUserId=this.sanitizeUserId(t));}isCacheControlError(e){let t="";try{let n=e.response?.data;if(typeof n=="string")t=n.toLowerCase();else if(n&&typeof n=="object"){let r={error:n.error,message:n.message,type:n.type,code:n.code};t=JSON.stringify(r).toLowerCase();}else t=String(e.message||"").toLowerCase();}catch{t=String(e.message||"").toLowerCase();}return t.includes("cache_control")||t.includes("ttl=")||t.includes("ephemeral")||t.includes("cache")&&t.includes("block")}async chat(e,t={}){let n={...t,disableCaching:t.disableCaching??this.disableCaching,thinking:t.thinking??this.thinkingConfig??void 0},r=this.retryConfig.requestMaxRetries,o=null,i=n.disableCaching||false;for(let a=0;a<=r;a++){let l={...n,...i?{disableCaching:true}:{}},c=this.buildPayload(e,l);a===0&&this.logRequest(t.model||this.defaultModel,c);try{let u=Date.now(),d=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",m=await this.client.post(d,c,{responseType:"stream",signal:t.signal});if(m.status!==200){let f="";for await(let T of m.data)f+=T.toString();let v=`${this.baseUrl}${d}`,b=Fn(v,this.buildHeaders(),c,!1);p.error("CURL","=== [chat] API Error - Full Request CURL ==="),p.error("CURL",b),p.error("CURL",`=== Error Headers: ${Xy(m.headers)} ===`),p.error("CURL",`=== Error Response: ${f.substring(0,1e3)} ===`);let C=new Error(`Anthropic API error: ${m.status}`);C.response={status:m.status,headers:m.headers,data:f};try{let T=JSON.parse(f);C.response.data=T,T.error?.message?C.message=`Anthropic API error: ${m.status} - ${T.error.message}`:T.message&&(C.message=`Anthropic API error: ${m.status} - ${T.message}`),this.debugLog("API Error Details",T);}catch{this.debugLog("API Error (non-JSON)",{status:m.status,dataLength:f.length});}throw C}let g=await this.collectStreamResponse(m.data),h=Date.now()-u;return xe.llmResponse("anthropic",h,g.usage,g.choices[0]),this.debugLog("Response",{duration:`${h}ms`,usage:g.usage}),g}catch(u){await this.normalizeAxiosStreamError(u),o=u;let d=Zt(u);if(d.code==="PROXY_UPSTREAM_FAILED"){let v=JSON.stringify(c||{}).length,b=Array.isArray(e)?e.length:0,C=Array.isArray(e)?e.reduce((T,w)=>w?.content?typeof w.content=="string"?T+w.content.length:Array.isArray(w.content)?T+w.content.map(E=>typeof E.text=="string"?E.text.length:0).reduce((E,N)=>E+N,0):T:T,0):0;p.warn("Anthropic","Upstream request failed (PROXY_UPSTREAM_FAILED)",{attempt:`${a+1}/${r+1}`,payloadSize:v,msgCount:b,promptChars:C,status:u.response?.status});}if(this.debugLog("Error",{message:u.message,category:d.category,code:d.code,attempt:`${a+1}/${r+1}`}),xe.llmError("anthropic",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:a+1}),p.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(!d.retryable||a===r)throw d;let m=ma(u.response?.headers),g=So(d.category,a+1,m||d.retryAfter),h=d.category==="retryable_rate_limit",f=h?`\u23F3 API \u4EE3\u7406\u901F\u7387\u9650\u5236\uFF0C${$t(g)} \u540E\u91CD\u8BD5...`:`Retrying in ${$t(g)}...`;this.debugLog("Retrying",{delay:$t(g),attempt:a+1,isRateLimit:h,serverDelay:m?$t(m):"none",retryMsg:f});try{await Er(g,n.signal);}catch(v){throw v?.name==="AbortError"&&this.debugLog("Chat retry interrupted by user"),v}}}throw o||new Error("Unknown error during retry")}async collectStreamResponse(e){let t="",n="",r=[],o="",i=null,a="";for await(let c of e){let u=c.toString();t+=u;let d=t.split(`
1943
1943
  `);t=d.pop()||"";for(let m of d){let g=m.trim();if(!g||!g.startsWith("data: "))continue;let h=g.slice(6);if(h!=="[DONE]")try{let f=JSON.parse(h);if(process.env.CLI_DEBUG==="1"){let v=JSON.stringify(f).substring(0,80);p.debug("SSE",`${f.type.padEnd(20)} ${v}${JSON.stringify(f).length>80?"...":""}`);}switch(f.type){case "message_start":a=f.message?.id||"",i=f.message?.usage;break;case "content_block_start":if(f.content_block?.type==="tool_use"){let v=f.content_block,b=this.isProxyMode?cp[v.name]||this.fromClaudeCodeToolName(v.name):v.name;r.push({id:v.id,type:"function",function:{name:b,arguments:""}});}break;case "content_block_delta":f.delta?.type==="text_delta"?n+=f.delta.text||"":f.delta?.type==="input_json_delta"?r.length>0&&(r[r.length-1].function.arguments+=f.delta.partial_json||""):f.delta?.type==="thinking_delta"&&(o+=f.delta.thinking||"");break;case "message_delta":f.usage&&(i={...i,...f.usage});break}}catch(f){process.env.CLI_DEBUG==="1"&&p.warn("Anthropic",`Stream parse error: ${f}, data: ${h.substring(0,200)}`);}}}let l=this.buildUsageFromRaw(i);return {id:a,choices:[{message:{role:"assistant",content:n||"",tool_calls:r.length>0?r:void 0,...o?{reasoning_content:o}:{}},finish_reason:r.length>0?"tool_calls":"stop"}],usage:l}}async*chatStreamed(e,t={}){let n={...t,disableCaching:t.disableCaching??this.disableCaching,thinking:t.thinking??this.thinkingConfig??void 0},r=this.retryConfig.streamMaxRetries,o=0,i=n.disableCaching||false,a=true;for(;;){let l={...n,...i?{disableCaching:true}:{}},c=this.buildPayload(e,l);c.stream=true,a&&(this.logRequest(t.model||this.defaultModel,c,true),a=false);try{let u=Date.now(),d=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",m=await this.client.post(d,c,{responseType:"stream",signal:t.signal});if(this.debugLog("Stream started",{status:m.status}),m.status!==200){let P="";for await(let O of m.data)P+=O.toString();let j=`${this.baseUrl}${d}`,z=Fn(j,this.buildHeaders(),c,!1);p.error("CURL","=== [chatStreamed] API Error - Full Request CURL ==="),p.error("CURL",z),p.error("CURL",`=== Error Headers: ${Xy(m.headers)} ===`),p.error("CURL",`=== Error Response: ${P.substring(0,1e3)} ===`);let A=new Error(`Anthropic API error: ${m.status}`);A.response={status:m.status,headers:m.headers,data:P};try{let O=JSON.parse(P);A.response.data=O,O.error?.message?A.message=`Anthropic API error: ${m.status} - ${O.error.message}`:O.message&&(A.message=`Anthropic API error: ${m.status} - ${O.message}`),this.debugLog("API Error Details (stream)",O);}catch{this.debugLog("API Error (non-JSON, stream)",{status:m.status,dataLength:P.length});}throw A}let g="",h=[],f=0,v=!1,b=null,C=!1,T=Date.now(),w=0,E=0,N=null,D=null,$=[],k=null;for await(let P of this.createTimeoutStream(m.data,t.signal)){T=Date.now();let j=P.toString();g+=j;let z=g.split(/\n\n+/);g=z.pop()||"";for(let A of z){let O=A.split(`
1944
1944
  `),F="";for(let U of O){let K=U.trim();if(K&&!K.startsWith("event:"))if(K.startsWith("data:")){let de=K.slice(5);de.startsWith(" ")&&(de=de.slice(1)),F+=de;}else F+=K;}if(!(!F||F==="[DONE]"))try{let U=F.trim(),K=JSON.parse(U);if(process.env.CLI_DEBUG==="1"){let H=JSON.stringify(K).substring(0,80);p.debug("SSE",`${K.type.padEnd(20)} ${H}${JSON.stringify(K).length>80?"...":""}`);}let de=Date.now(),W=this.handleStreamEvent(K,h,f,v,b);if(process.env.CLI_DEBUG==="1"){let H=Date.now()-de;H>50&&p.warn("SSE",`\u26A0\uFE0F Slow event handling: ${K.type} took ${H}ms`);}if(W.yield){let H=Date.now();if(yield W.yield,process.env.CLI_DEBUG==="1"){let ne=Date.now()-H;ne>100&&p.warn("SSE",`\u26A0\uFE0F Slow yield consumer: ${K.type} yield took ${ne}ms`);}}if(W.roleSent!==void 0&&(v=W.roleSent),W.incrementToolIndex&&f++,W.usage&&(b=W.usage),W.error)throw new Error(W.error);W.contentBlockStart&&(E++,W.blockType&&(D=W.blockType)),W.contentBlockStop&&(w++,D==="thinking"&&(yield {choices:[{delta:{reasoning_complete:!0},index:0}]}),D=null),W.messageStop&&(C=!0),W.stopReason&&(N=W.stopReason),K.type==="content_block_start"?K.content_block?.type==="thinking"?k={type:"thinking",thinking:"",signature:""}:K.content_block?.type==="redacted_thinking"&&$.push({type:"redacted_thinking",data:K.content_block.data}):K.type==="content_block_delta"?k&&(K.delta?.type==="thinking_delta"?k.thinking+=K.delta.thinking||"":K.delta?.type==="signature_delta"&&(k.signature+=K.delta.signature||"")):K.type==="content_block_stop"&&k&&($.push({type:k.type,thinking:k.thinking,signature:k.signature}),k=null);}catch{}}}let M=Date.now()-u;if(this.debugLog("Stream completion check",{messageStopReceived:C,stopReason:N,contentBlocksStarted:E,contentBlocksCompleted:w,toolCallsCount:h.length,duration:`${M}ms`}),!C&&!N){let P=new Error(`Stream incomplete: message_stop not received (blocks: ${E} started, ${w} completed)`);throw P.code="STREAM_INCOMPLETE",P.isNetworkInterrupt=!0,this.debugLog("Stream incomplete detected",{messageStopReceived:C,stopReason:N,contentBlocksStarted:E,contentBlocksCompleted:w,toolCallsCount:h.length,duration:`${M}ms`}),P}if(E!==w)if(N==="max_tokens")this.debugLog("Content blocks mismatch due to max_tokens (expected, not an error)",{contentBlocksStarted:E,contentBlocksCompleted:w,stopReason:N}),p.warn("Anthropic","\u26A0\uFE0F Response truncated due to max_tokens limit. Consider increasing max_tokens or breaking down the task.");else {let P=new Error(`Stream incomplete: content blocks mismatch (${E} started, ${w} completed)`);throw P.code="STREAM_INCOMPLETE",P.isNetworkInterrupt=!0,this.debugLog("Content blocks mismatch",{contentBlocksStarted:E,contentBlocksCompleted:w,stopReason:N}),P}if(h.length>0&&N!=="max_tokens")for(let P of h){let j=P.function?.arguments||"";if(j&&j.trim())try{JSON.parse(j);}catch{let z=new Error(`Stream incomplete: tool arguments truncated for ${P.function?.name}`);throw z.code="STREAM_INCOMPLETE",z.isNetworkInterrupt=!0,z.toolName=P.function?.name,this.debugLog("Tool arguments truncated",{toolName:P.function?.name,argsLength:j.length,argsPreview:j.substring(0,100)}),z}}else if(N==="max_tokens"&&h.length>0){let P=h[h.length-1],j=P?.function?.arguments||"";try{JSON.parse(j);}catch{this.debugLog("Tool arguments truncated due to max_tokens (expected)",{toolName:P?.function?.name,argsLength:j.length}),p.warn("Anthropic",`\u26A0\uFE0F Tool call ${P?.function?.name} arguments truncated due to max_tokens. The tool call will be incomplete.`);}}this.debugLog("finalUsage before build",b);let _=this.buildUsageFromRaw(b);this.debugLog("usage after build",_),!v&&h.length===0&&p.warn("Anthropic",`\u26A0\uFE0F Stream completed with no content! duration: ${M}ms, usage: ${JSON.stringify(b)}`),xe.llmResponse("anthropic-stream",M,_||{},{}),this.debugLog("Stream complete",{duration:`${M}ms`}),yield {choices:[{delta:{},finish_reason:"stop",index:0}],..._?{usage:_}:{},...$.length>0?{thinking_blocks:$}:{}};return}catch(u){await this.normalizeAxiosStreamError(u);let d=Zt(u);this.debugLog("Stream error",{message:u.message,category:d.category,retryable:d.retryable});let m=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",g=`${this.baseUrl}${m}`,h=Fn(g,this.buildHeaders(),c,false);if(p.error("CURL","=== [chatStreamed catch] Stream Error - Full Request CURL ==="),p.error("CURL",h),p.error("CURL",`=== Error: ${d.message} ===`),xe.llmError("anthropic-stream",u),this.isCacheControlError(u)&&!i){i=true,this.disableCaching=true,this.debugLog("Cache control not supported, disabling caching for retry",{errorMessage:u.message,attempt:o+1}),p.warn("Anthropic","\u26A0\uFE0F Provider \u4E0D\u652F\u6301 cache_control\uFF0C\u5DF2\u81EA\u52A8\u7981\u7528\u7F13\u5B58\u91CD\u8BD5...");continue}if(d.retryable&&o<r){o++;let f=ma(u.response?.headers),v=So(d.category,o,f||d.retryAfter),b=d.category==="retryable_rate_limit",C=d.category==="retryable_stream";this.debugLog("Stream retrying",{delay:$t(v),attempt:`${o}/${r}`,isRateLimit:b,isStreamIncomplete:C}),yield {type:"stream_retry",error:d.message,errorCode:d.code,attempt:o,maxRetries:r,delayMs:v,isRateLimit:b,isNetworkError:C};try{await Er(v,t.signal);}catch(T){throw T?.name==="AbortError"&&this.debugLog("Stream retry interrupted by user"),T}this.debugLog("Stream retry starting",{attempt:o}),yield {type:"stream_recovered",attempt:o,maxRetries:r};continue}throw d}}}buildPayload(e,t){let n=t.model||this.defaultModel,{system:r,anthropicMessages:o}=this.convertMessages(e,t),i=o,a=[];if(t.disableCaching?(a.push({type:"text",text:lp}),r&&a.push({type:"text",text:`
1945
1945
  `+r})):(a.push({type:"text",text:lp,cache_control:{type:"ephemeral"}}),r&&a.push({type:"text",text:`
1946
- `+r,cache_control:{type:"ephemeral"}})),process.env.CLI_DEBUG==="1"&&r){let c=["## \u9879\u76EE\u8BB0\u5FC6","## \u4E0A\u6B21\u4EFB\u52A1\u6458\u8981","## Project Memory","## Last Run Summary"],u=c.some(g=>r.includes(g)),d=c.reduce((g,h)=>g>=0?g:r.indexOf(h),-1),m=d>=0?r.slice(d,d+300):void 0;p.info("MEMORY_INJECT","Anthropic system memory check",{hasMemory:u,systemLength:r.length,snippet:m});}let l={model:this.normalizeModelName(n),system:a,metadata:this.buildMetadata(t.metadata),max_tokens:this.maxTokens};return (!t.thinking?.type||t.thinking.type==="disabled")&&(l.temperature=t.temperature??.7),l.stream=true,l.messages=i,t.tools?.length&&(l.tools=this.buildToolsPayload(t.tools,t)),t.webSearch?.enabled&&(l.tools=l.tools||[],l.tools.push(this.buildWebSearchTool(t.webSearch))),l.tools?.length>0&&this.ensureLastToolCacheControl(l.tools,t),this.shouldEnableThinking(n,t)&&(l.thinking=this.buildThinkingPayload(t),delete l.temperature,l.temperature=1),this.checkRequestBudget(l),l}checkRequestBudget(e){let n=JSON.stringify(e).length;if(n>vi){if(this.debugLog("Request body exceeds limit",{bodySize:n,limit:vi,messageCount:e.messages?.length||0}),e.messages){let o=[...e.messages.map((i,a)=>({index:a,role:i.role,contentSize:JSON.stringify(i.content||"").length}))].sort((i,a)=>a.contentSize-i.contentSize);this.debugLog("Largest messages in request",{top5:o.slice(0,5)});}console.warn(`[Anthropic] \u26A0\uFE0F Request body size (${(n/1024/1024).toFixed(2)}MB) exceeds ${(vi/1024/1024).toFixed(1)}MB limit. Request may fail.`);}else n>EI&&this.debugLog("Request body approaching limit",{bodySize:n,limit:vi,percentage:(n/vi*100).toFixed(1)+"%"});}mergeSystemIntoMessages(e,t){let n=[...t],r=n.findIndex(o=>o.role==="user");if(r>=0){let o=n[r],i={type:"text",text:`<system_context>
1946
+ `+r,cache_control:{type:"ephemeral"}})),process.env.CLI_DEBUG==="1"&&r){let c=["## \u9879\u76EE\u8BB0\u5FC6","## \u4E0A\u6B21\u4EFB\u52A1\u6458\u8981","## Project Memory","## Last Run Summary"],u=c.some(g=>r.includes(g)),d=c.reduce((g,h)=>g>=0?g:r.indexOf(h),-1),m=d>=0?r.slice(d,d+300):void 0;p.info("MEMORY_INJECT","Anthropic system memory check",{hasMemory:u,systemLength:r.length,snippet:m});}let l={model:this.normalizeModelName(n),system:a,metadata:this.buildMetadata(t.metadata),max_tokens:this.maxTokens};return (!t.thinking?.type||t.thinking.type==="disabled")&&(l.temperature=t.temperature??.7),l.stream=true,l.messages=i,t.tools?.length&&(l.tools=this.buildToolsPayload(t.tools,t)),t.webSearch?.enabled&&(l.tools=l.tools||[],l.tools.push(this.buildWebSearchTool(t.webSearch))),l.tools?.length>0&&this.ensureLastToolCacheControl(l.tools,t),this.shouldEnableThinking(n,t)&&(l.thinking=this.buildThinkingPayload(t),delete l.temperature,l.temperature=1),this.checkRequestBudget(l),l}checkRequestBudget(e){let n=JSON.stringify(e).length;if(n>vi){if(this.debugLog("Request body exceeds limit",{bodySize:n,limit:vi,messageCount:e.messages?.length||0}),e.messages){let o=[...e.messages.map((i,a)=>({index:a,role:i.role,contentSize:JSON.stringify(i.content||"").length}))].sort((i,a)=>a.contentSize-i.contentSize);this.debugLog("Largest messages in request",{top5:o.slice(0,5)});}console.warn(`[Anthropic] \u26A0\uFE0F Request body size (${(n/1024/1024).toFixed(2)}MB) exceeds ${(vi/1024/1024).toFixed(1)}MB limit. Request may fail.`);}else n>AI&&this.debugLog("Request body approaching limit",{bodySize:n,limit:vi,percentage:(n/vi*100).toFixed(1)+"%"});}mergeSystemIntoMessages(e,t){let n=[...t],r=n.findIndex(o=>o.role==="user");if(r>=0){let o=n[r],i={type:"text",text:`<system_context>
1947
1947
  ${e}
1948
- </system_context>`};Array.isArray(o.content)?n[r]={...o,content:[i,...o.content]}:typeof o.content=="string"&&(n[r]={...o,content:[i,{type:"text",text:o.content}]});}return n}buildToolsPayload(e,t){return e.map(r=>this.transformToolDefinition(r))}ensureLastToolCacheControl(e,t){if(e.length===0||t.disableCaching)return;let n=e[e.length-1];n.cache_control={type:"ephemeral"},this.debugLog("Added cache_control to last tool",{toolName:n.name});}buildWebSearchTool(e){let t={type:"web_search_20250305",name:"web_search"};return e.max_uses&&(t.max_uses=e.max_uses),e.user_location&&(t.user_location=e.user_location),t}buildThinkingPayload(e){let t=e.thinking?.budget_tokens||this.maxTokens-1;return {type:"enabled",budget_tokens:Math.max(t,PI)}}buildMetadata(e){let t={...e};return t.user_id?t.user_id=this.sanitizeUserId(t.user_id):t.user_id=this.claudeCodeUserId,t}shouldEnableThinking(e,t){return t.thinking?.type==="enabled"?true:t.thinking?.type==="disabled"?false:!!(e.endsWith("-thinking")||e.includes("opus-4-5")||e.includes("opus-4.5"))}normalizeModelName(e){return e.endsWith("-thinking")?e.replace(/-thinking$/,""):e}convertMessages(e,t){let n=this.normalizeMessages(e),r=[],o=[];for(let u of n){if(u.role==="system"){let m=Ce(u.content).trim();m&&r.push(m);continue}let d=this.convertSingleMessage(u);d&&o.push(d);}let i=this.mergeConsecutiveUserMessages(o),l=this.validateToolResultPairs(i);return l.length>0&&l[0].role!=="user"&&l.unshift({role:"user",content:[{type:"text",text:"..."}]}),l.length>0&&!t.disableCaching&&this.addMessageCacheControl(l),{system:r.length>0?r.join(`
1948
+ </system_context>`};Array.isArray(o.content)?n[r]={...o,content:[i,...o.content]}:typeof o.content=="string"&&(n[r]={...o,content:[i,{type:"text",text:o.content}]});}return n}buildToolsPayload(e,t){return e.map(r=>this.transformToolDefinition(r))}ensureLastToolCacheControl(e,t){if(e.length===0||t.disableCaching)return;let n=e[e.length-1];n.cache_control={type:"ephemeral"},this.debugLog("Added cache_control to last tool",{toolName:n.name});}buildWebSearchTool(e){let t={type:"web_search_20250305",name:"web_search"};return e.max_uses&&(t.max_uses=e.max_uses),e.user_location&&(t.user_location=e.user_location),t}buildThinkingPayload(e){let t=e.thinking?.budget_tokens||this.maxTokens-1;return {type:"enabled",budget_tokens:Math.max(t,RI)}}buildMetadata(e){let t={...e};return t.user_id?t.user_id=this.sanitizeUserId(t.user_id):t.user_id=this.claudeCodeUserId,t}shouldEnableThinking(e,t){return t.thinking?.type==="enabled"?true:t.thinking?.type==="disabled"?false:!!(e.endsWith("-thinking")||e.includes("opus-4-5")||e.includes("opus-4.5"))}normalizeModelName(e){return e.endsWith("-thinking")?e.replace(/-thinking$/,""):e}convertMessages(e,t){let n=this.normalizeMessages(e),r=[],o=[];for(let u of n){if(u.role==="system"){let m=Ce(u.content).trim();m&&r.push(m);continue}let d=this.convertSingleMessage(u);d&&o.push(d);}let i=this.mergeConsecutiveUserMessages(o),l=this.validateToolResultPairs(i);return l.length>0&&l[0].role!=="user"&&l.unshift({role:"user",content:[{type:"text",text:"..."}]}),l.length>0&&!t.disableCaching&&this.addMessageCacheControl(l),{system:r.length>0?r.join(`
1949
1949
 
1950
- `):null,anthropicMessages:l}}addMessageCacheControl(e){let t=false;for(let n=e.length-1;n>=0;n--){let r=e[n];if(!(r.role!=="user"||!Array.isArray(r.content))){for(let o=r.content.length-1;o>=0;o--){let i=r.content[o];if(!t&&i.type==="tool_result"){i.cache_control={type:"ephemeral"},t=true,this.debugLog("Added cache_control to tool_result",{tool_use_id:i.tool_use_id});break}}if(t)break}}t||this.addTextBlockCacheControl(e);}addTextBlockCacheControl(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role==="user"&&Array.isArray(n.content)){for(let r=n.content.length-1;r>=0;r--)if(n.content[r].type==="text"){n.content[r].cache_control={type:"ephemeral"},this.debugLog("Added cache_control to user text block");return}}}}validateToolResultPairs(e){let t=new Set,n=new Set;for(let i of e)if(Array.isArray(i.content))for(let a of i.content)a.type==="tool_use"&&a.id&&t.add(a.id),a.type==="tool_result"&&a.tool_use_id&&n.add(a.tool_use_id);let r=new Set;for(let i of t)n.has(i)&&r.add(i);this.debugLog("Tool pairing analysis",{toolUseCount:t.size,toolResultCount:n.size,pairedCount:r.size,orphanToolUseIds:Array.from(t).filter(i=>!r.has(i)),orphanToolResultIds:Array.from(n).filter(i=>!r.has(i))});let o=[];for(let i of e){if(!Array.isArray(i.content)){o.push(i);continue}let a=i.content.filter(l=>{if(l.type==="tool_use"){let c=r.has(l.id);return c||this.debugLog("Removing orphan tool_use",{id:l.id}),c}if(l.type==="tool_result"){let c=r.has(l.tool_use_id);return c||this.debugLog("Removing orphan tool_result",{tool_use_id:l.tool_use_id}),c}return true});a.length>0?o.push({...i,content:a}):this.debugLog("Skipping empty message after tool pairing filter",{role:i.role});}return o}mergeConsecutiveUserMessages(e){if(e.length===0)return [];let t=[];for(let n of e){let r=t[t.length-1];if(r&&r.role==="user"&&n.role==="user"){let o=Array.isArray(r.content)?r.content:[{type:"text",text:r.content}],i=Array.isArray(n.content)?n.content:[{type:"text",text:n.content}];r.content=[...o,...i];}else t.push(n);}return t}convertSingleMessage(e){if(e.role==="tool"){let n=Ce(e.content),r=AI(n);return n.length!==r.length&&this.debugLog("Tool output truncated",{tool_call_id:e.tool_call_id,original:n.length,truncated:r.length}),{role:"user",content:[{type:"tool_result",tool_use_id:e.tool_call_id,content:r}]}}if(e.role==="assistant"){let n=[],r=false;if(e.thinking_blocks&&e.thinking_blocks.length>0){r=true;for(let i of e.thinking_blocks)if(i.type==="thinking"){let a={type:"thinking",thinking:i.thinking};i.signature!==void 0&&(a.signature=i.signature),n.push(a);}else if(i.type==="redacted_thinking"){let a={type:"redacted_thinking"};i.data!==void 0&&(a.data=i.data),n.push(a);}}let o=Ce(e.content);if(o){let i=o.trimEnd();n.push({type:"text",text:i||"."});}else r&&(n.push({type:"text",text:"."}),this.debugLog("Added placeholder text after thinking (no text content)"));if(e.tool_calls)for(let i of e.tool_calls){let a=(i.function.arguments||"").trim(),l={};if(a.length>0)try{l=JSON.parse(a);}catch{this.debugLog("Failed to parse tool arguments",{tool:i.function.name});}let c=this.isProxyMode?eb[i.function.name]||this.toClaudeCodeToolName(i.function.name):i.function.name;n.push({type:"tool_use",id:i.id,name:c,input:l});}if(n.length>0){let i=n[n.length-1];this.debugLog("Assistant message final check",{contentLength:n.length,lastBlockType:i.type,hasThinkingBlocks:r,blockTypes:n.map(a=>a.type),lastBlockTextPreview:i.type==="text"?(i.text||"").substring(0,50):void 0}),i.type==="thinking"||i.type==="redacted_thinking"?(n.push({type:"text",text:"."}),this.debugLog("Fixed: Added text block after thinking")):i.type==="text"&&(!i.text||!i.text.trim())&&n.some(l=>l.type==="thinking"||l.type==="redacted_thinking")&&(i.text=".",this.debugLog("Fixed: Ensured text block has content after thinking"));}return n.length>0?{role:"assistant",content:n}:null}if(Array.isArray(e.content)){let n=e.content.filter(i=>i.type==="text");if(!e.content.some(i=>i.type!=="text")&&n.length===1){let i=n[0].text;return i.trim()?{role:"user",content:i}:null}let o=this.convertMultimodalContent(e.content);return o.length>0?{role:"user",content:o}:null}let t=Ce(e.content);return t.trim()?{role:"user",content:t}:null}convertMultimodalContent(e){let t=[];for(let n of e)if(n.type==="text")t.push({type:"text",text:n.text});else if(n.type==="image_url"){let r=this.convertImageUrl(n.image_url.url);r&&t.push(r);}return t}convertImageUrl(e){if(e.startsWith("data:")){let t=e.match(/^data:([^;]+);base64,(.+)$/);if(t)return {type:"image",source:{type:"base64",media_type:t[1],data:t[2]}}}else return {type:"image",source:{type:"url",url:e}};return null}normalizeMessages(e){let t=e.filter(n=>{let r=n.role==="assistant"&&!!(n.tool_calls&&n.tool_calls.length>0),o=n.role==="assistant"&&!!(n.thinking_blocks&&n.thinking_blocks.length>0);return r||o?true:n.content?typeof n.content=="string"?n.content.trim().length>0:Array.isArray(n.content)?n.content.length>0:true:false});return t.length===0?[]:(this.validateMessageAlternation(t),t)}validateMessageAlternation(e){let t=e.filter(r=>r.role!=="system"),n=false;for(let r=1;r<t.length;r++)t[r].role===t[r-1].role&&(n=true,this.debugLog("Message alternation warning",{index:r,prevRole:t[r-1].role,currentRole:t[r].role}));!n&&t.length>1&&this.debugLog("Message alternation OK",{messageCount:t.length,roles:t.map(r=>r.role)});}convertResponse(e){this.debugLog("Raw response",e);let t=e.content||[],n="",r=[],o="";for(let a of t)if(a.type==="text")n+=a.text;else if(a.type==="tool_use"){let l=this.isProxyMode?cp[a.name]||this.fromClaudeCodeToolName(a.name):a.name;r.push({id:a.id,type:"function",function:{name:l,arguments:JSON.stringify(a.input)}});}else a.type==="thinking"&&(o=a.thinking||"");let i=this.buildUsageFromRaw(e.usage);return {id:e.id,choices:[{message:{role:"assistant",content:n||"",tool_calls:r.length>0?r:void 0,...o?{reasoning_content:o}:{}},finish_reason:this.convertStopReason(e.stop_reason)}],usage:i}}buildUsageFromRaw(e){if(!e)return {prompt_tokens:0,completion_tokens:0,total_tokens:0};let t={prompt_tokens:e.input_tokens||0,completion_tokens:e.output_tokens||0,total_tokens:(e.input_tokens||0)+(e.output_tokens||0)};return e.cache_read_input_tokens&&(t.cache_read_input_tokens=e.cache_read_input_tokens),e.cache_creation_input_tokens&&(t.cache_creation_input_tokens=e.cache_creation_input_tokens),e.cache_creation&&(e.cache_creation.ephemeral_5m_input_tokens&&(t.cache_creation_5m_tokens=e.cache_creation.ephemeral_5m_input_tokens),e.cache_creation.ephemeral_1h_input_tokens&&(t.cache_creation_1h_tokens=e.cache_creation.ephemeral_1h_input_tokens)),t}convertStopReason(e){switch(e){case "end_turn":return "stop";case "max_tokens":return "length";case "tool_use":return "tool_calls";default:return "stop"}}handleStreamEvent(e,t,n,r,o){switch(e.type){case "message_start":return this.debugLog("message_start usage",e.message?.usage),process.env.CLI_DEBUG==="1"&&e.message&&p.debug("Anthropic",`message_start full: ${JSON.stringify(e.message,null,2)}`),{usage:e.message?.usage};case "content_block_start":return {...this.handleContentBlockStart(e,t,n,r),contentBlockStart:true};case "content_block_delta":return this.handleContentBlockDelta(e,t);case "content_block_stop":return this.validateToolArguments(t),{contentBlockStop:true};case "message_delta":this.debugLog("message_delta usage",{eventUsage:e.usage,currentUsage:o});let a=e.delta?.stop_reason||e.stop_reason;if(a&&this.debugLog("message_delta stop_reason",a),e.usage&&o){let u={...o,...e.usage};return this.debugLog("merged usage",u),{usage:u,stopReason:a}}return {usage:e.usage||o,stopReason:a};case "message_stop":return this.debugLog("Message stop received"),{messageStop:true};case "ping":return {};case "error":return {error:e.error?.message||"Stream error"};default:let l=e.type?.toLowerCase()||"";if(l==="done"||l==="stream_end"||l==="end")return this.debugLog("Alternative message stop received",{type:e.type}),{messageStop:true};let c=e.stop_reason||e.delta?.stop_reason;return c?(this.debugLog("stop_reason found in unknown event",{type:e.type,stopReason:c}),{stopReason:c}):(this.debugLog("Unknown event type",{type:e.type}),{})}}handleContentBlockStart(e,t,n,r){let o=e.content_block?.type;if(o==="text")return r?{blockType:o}:{yield:{choices:[{delta:{role:"assistant"},index:0}]},roleSent:true,blockType:o};if(o==="tool_use"){let i=e.content_block,a=this.isProxyMode?cp[i.name]||this.fromClaudeCodeToolName(i.name):i.name,l="";return i.input&&typeof i.input=="object"&&Object.keys(i.input).length>0&&(l=JSON.stringify(i.input)),t.push({index:n,id:i.id,type:"function",function:{name:a,arguments:l}}),{yield:{choices:[{delta:{tool_calls:[{index:n,id:i.id,type:"function",function:{name:a}}]},index:0}]},incrementToolIndex:true,blockType:o}}else if(o==="thinking")return {blockType:o};return {blockType:o}}handleContentBlockDelta(e,t){if(e.delta?.type==="text_delta")return {yield:{choices:[{delta:{content:e.delta.text||""},index:0}]}};if(e.delta?.type==="input_json_delta"){let n=e.delta.partial_json||"";if(t.length>0){let r=t[t.length-1];return r.function.arguments+=n,{yield:{choices:[{delta:{tool_calls:[{index:r.index,function:{arguments:n}}]},index:0}]}}}}else {if(e.delta?.type==="thinking_delta")return {yield:{choices:[{delta:{reasoning_content:e.delta.thinking},index:0}]}};if(e.delta?.type==="signature_delta")return {}}return {}}validateToolArguments(e){if(e.length===0)return;let t=e[e.length-1];if(t.function.arguments)try{JSON.parse(t.function.arguments);}catch{let n=this.tryFixJson(t.function.arguments);n?(t.function.arguments=n,this.debugLog("Auto-fixed tool arguments",{tool:t.function.name})):this.debugLog("Invalid tool arguments JSON",{tool:t.function.name});}}tryFixJson(e){let t=e.trim();if(!t.endsWith("}")){t+="}";try{return JSON.parse(t),t}catch{}}t=e.replace(/,\s*$/,""),t.endsWith("}")||(t+="}");try{return JSON.parse(t),t}catch{}let n=0,r=0,o=false,i=false;for(let a of e){if(i){i=false;continue}if(a==="\\"){i=true;continue}if(a==='"'){o=!o;continue}o||(a==="{"?n++:a==="}"?n--:a==="["?r++:a==="]"&&r--);}for(t=e,o&&(t+='"');r>0;)t+="]",r--;for(;n>0;)t+="}",n--;try{return JSON.parse(t),t}catch{return null}}transformToolDefinition(e){let t=this.isProxyMode?eb[e.name]||this.toClaudeCodeToolName(e.name):e.name;if(this.isProxyMode){let o=this.stripSchemaPropertyDescriptions(e.parameters);return {name:t,description:e.description,input_schema:o}}if(!this.sanitizeToolsForProxy)return {name:t,description:e.description,input_schema:e.parameters};let n=this.truncateDescription(e.description||e.name),r=this.stripSchemaDescriptions(e.parameters);return {name:t,description:n,input_schema:r}}stripSchemaPropertyDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>this.stripSchemaPropertyDescriptions(n));let t={...e};if(t.properties&&typeof t.properties=="object"){let n={};for(let[r,o]of Object.entries(t.properties))if(o&&typeof o=="object"){let i={...o};delete i.description,i.properties&&(i.properties=this.stripSchemaPropertyDescriptions({properties:i.properties}).properties),i.items&&(i.items=this.stripSchemaPropertyDescriptions(i.items)),n[r]=i;}else n[r]=o;t.properties=n;}t.items&&(t.items=this.stripSchemaPropertyDescriptions(t.items));for(let n of ["oneOf","anyOf","allOf"])t[n]&&Array.isArray(t[n])&&(t[n]=t[n].map(r=>this.stripSchemaPropertyDescriptions(r)));return t}toClaudeCodeToolName(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}fromClaudeCodeToolName(e){return e.replace(/["\s/>]+$/g,"").trim().replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}truncateDescription(e){if(!e)return "Utility tool";let t=e.replace(/\s+/g," ").trim();return t?t.length>120?`${t.slice(0,117)}...`:t:"Utility tool"}stripSchemaDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>this.stripSchemaDescriptions(n));let t={...e};if(delete t.description,t.properties&&typeof t.properties=="object"){let n={};for(let[r,o]of Object.entries(t.properties))n[r]=this.stripSchemaDescriptions(o);t.properties=n;}for(let n of ["items","oneOf","anyOf","allOf"])t[n]&&(t[n]=Array.isArray(t[n])?t[n].map(r=>this.stripSchemaDescriptions(r)):this.stripSchemaDescriptions(t[n]));return t}buildHeaders(){return this.isProxyMode?this.buildClaudeCodeHeaders():this.buildOfficialHeaders()}buildOfficialHeaders(){return {"anthropic-api-key":this.authToken,"anthropic-version":Rl,"Content-Type":"application/json"}}buildClaudeCodeHeaders(){return {Accept:"application/json","X-Stainless-Retry-Count":"0","X-Stainless-Timeout":"600","X-Stainless-Lang":"js","X-Stainless-Package-Version":"0.70.0","X-Stainless-OS":"MacOS","X-Stainless-Arch":"arm64","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version,"anthropic-dangerous-direct-browser-access":"true","anthropic-version":Rl,"x-app":"cli","User-Agent":"claude-cli/2.0.55 (external, cli)",Authorization:`Bearer ${this.authToken}`,"Content-Type":"application/json","anthropic-beta":this.betaFeatures.join(","),"x-stainless-helper-method":"stream","accept-language":"*","sec-fetch-mode":"cors","accept-encoding":"br, gzip, deflate"}}generateSafeUserId(){if(this.isProxyMode){let n=randomBytes(32).toString("hex"),r=this.generateUUID();return `user_${n}_account__session_${r}`}let e=randomBytes(16).toString("hex"),t=randomBytes(4).toString("hex");return `user_${e}_session_${t}`}generateUUID(){let e=randomBytes(16);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=e.toString("hex");return `${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}sanitizeUserId(e){if(this.isProxyMode){if(/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),n=this.generateUUID();return `user_${t}_account__session_${n}`}if(/^\+?[\d\s-]{10,}$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),n=this.generateUUID();return `user_${t}_account__session_${n}`}return e}return e.length>Dl?createHash("sha256").update(e).digest("hex").slice(0,Dl):/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,Dl):/^\+?[\d\s-]{10,}$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,Dl):e}async normalizeAxiosStreamError(e){let t=e?.response?.data;if(!(!t||typeof t!="object"||!(typeof t.pipe=="function")))try{let r=await this.readStreamToString(t);try{e.response.data=JSON.parse(r);}catch{e.response.data=r;}}catch{}}readStreamToString(e){return new Promise((t,n)=>{let r=[];e.on("data",o=>{r.push(typeof o=="string"?Buffer.from(o):o);}),e.on("end",()=>t(Buffer.concat(r).toString("utf-8"))),e.on("error",n);})}async*createTimeoutStream(e,t){let n=false,r=Date.now(),o=0,i=e[Symbol.asyncIterator](),a=()=>new Promise(l=>setImmediate(l));for(process.env.CLI_DEBUG==="1"&&p.debug("STREAM","\u{1F30A} Stream processing started");;){if(t?.aborted)throw this.debugLog("Stream aborted by signal"),process.env.CLI_DEBUG==="1"&&p.debug("STREAM",`\u26D4 Stream aborted after ${o} chunks`),e.destroy?.(),new Error("Request aborted");await a();let l=n?Qy:Zy,c;try{let u=t?new Promise((g,h)=>{let f=()=>{h(new Error("Request aborted"));};t.aborted?f():t.addEventListener("abort",f,{once:!0});}):null,d=[i.next(),new Promise((g,h)=>{c=setTimeout(()=>{h(new Error(n?`Stream idle timeout: no data for ${Qy/1e3}s`:`Stream first chunk timeout: no response for ${Zy/1e3}s`));},l);})];u&&d.push(u);let m=await Promise.race(d);if(c&&clearTimeout(c),m.done){process.env.CLI_DEBUG==="1"&&p.debug("STREAM",`\u2705 Stream completed successfully (${o} chunks, ${Date.now()-r}ms)`);return}n=!0,r=Date.now(),o++,process.env.CLI_DEBUG==="1"&&o%100===0&&p.debug("STREAM",`\u{1F4E6} Processed ${o} chunks`),yield m.value;}catch(u){c&&clearTimeout(c);let d=u.message?.includes("aborted")||u.message==="Request aborted";throw this.debugLog("Stream timeout or abort",{error:u.message,isAbort:d,receivedFirstChunk:n,idleTime:`${(Date.now()-r)/1e3}s`}),e.destroy?.(),d?(u.name="AbortError",u.code="ERR_CANCELED",u.category="canceled",u):(u.code="STREAM_TIMEOUT",u.isNetworkInterrupt=true,u)}}}debugLog(e,t){process.env.CLI_DEBUG==="1"&&p.debug("Anthropic",t?`${e} ${JSON.stringify(t,null,2)}`:e);}logRequest(e,t,n=false){process.env.CLI_DEBUG_PAYLOAD==="1"&&this.debugLog("Full payload",JSON.stringify(t,null,2));let r=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",o=`${this.baseUrl}${r}`,i=this.buildHeaders();Bc(o,i,t);let a=this.isProxyMode?{Authorization:"Bearer ***","anthropic-version":Rl,"anthropic-beta":this.betaFeatures.join(","),"Content-Type":"application/json"}:{"anthropic-api-key":"***","anthropic-version":Rl,"Content-Type":"application/json"};xe.llmRequest(n?"anthropic-stream":"anthropic",e,t,o,a),this.debugLog(`${n?"Stream ":""}Request`,{url:o,model:e,isProxyMode:this.isProxyMode});}};Z();var Nl=class extends Rn{constraints;promptBuilder;provider;defaultModel;disableCaching;constructor(e){super(),this.constraints=new fi,this.promptBuilder=new yi,this.defaultModel=e.defaultModel||"claude-3-5-sonnet-20241022",this.disableCaching=e.disableCaching||false;let{authToken:t,baseUrl:n,defaultModel:r,maxTokens:o,disableCaching:i,userId:a,...l}=e;this.provider=new Hs({authToken:t,baseUrl:n,defaultModel:this.defaultModel,maxTokens:o,disableCaching:this.disableCaching,userId:a,...l});}prepareRequest(e,t){let n=t.model||this.defaultModel,r=super.prepareRequest(e,{...t,model:n}),o={...r.options};if(o.maxInputTokens!==void 0&&(o.max_tokens=o.maxInputTokens,delete o.maxInputTokens),!o.max_tokens){let i=this.constraints.getTokenLimits(n);o.max_tokens=Math.min(4096,i.maxOutput);}if(!this.disableCaching&&this.constraints.supportsPromptCaching(n)){let i=r.messages[0]?.content?.length||0,a=this.promptBuilder.getCachingRecommendation(i);a.shouldUseCache&&(o.enableCaching=true,o.cacheTtl=a.cacheTTL);}return {...r,options:o}}async chat(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}return n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("AnthropicAdapter","Warnings",n.validation.warnings),this.provider.chat(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,maxInputTokens:n.options.max_tokens,enableCaching:n.options.enableCaching,cacheTtl:n.options.cacheTtl,signal:t.signal})}async*chatStreamed(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("AnthropicAdapter","Warnings",n.validation.warnings),yield*this.provider.chatStreamed(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,maxInputTokens:n.options.max_tokens,enableCaching:n.options.enableCaching,cacheTtl:n.options.cacheTtl,signal:t.signal});}getProvider(){return this.provider}getModelCapabilities(e){let t=e||this.defaultModel;return {supportsVision:this.constraints.supportsVision(t),supportsTools:this.constraints.supportsTools(t),supportsThinking:this.constraints.supportsThinking?.(t)||false,supportsPromptCaching:this.constraints.supportsPromptCaching(t),tokenLimits:this.constraints.getTokenLimits(t)}}getCachingRecommendation(e){return this.promptBuilder.getCachingRecommendation(e)}};var Ll=class extends Gr{getConstraints(){let e=super.getConstraints(),t={...e.validators??{}};t.temperature=St(0,1);let n=t.tool_choice;t.tool_choice=o=>o==="required"?"tool_choice=required is not supported by Kimi API":typeof n=="function"?n(o):true;let r=t.n;return t.n=(o,i)=>{let a=typeof r=="function"?r(o,i):true;if(a!==true)return a;let l=i?.temperature??1,c=typeof l=="number"?l:Number(l),u=typeof o=="number"?o:Number(o);return !Number.isNaN(c)&&c<=.001&&u>1?"temperature <= 0.001 requires n=1 for Kimi API":true},{...e,validators:t}}};Z();var Ol=class extends Rn{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new Ll,this.promptBuilder=new Hr,this.defaultModel=e.defaultModel||"kimi-k2-0905-preview";let{apiKey:t,baseUrl:n,defaultModel:r,maxTokens:o,maxInputTokens:i,...a}=e;this.provider=new Zn({apiKey:t,baseUrl:n,defaultModel:this.defaultModel,maxTokens:o,maxInputTokens:i,...a,structuredOutputMode:"json_object"});}prepareRequest(e,t){let n=t.model||this.defaultModel;return super.prepareRequest(e,{...t,model:n})}async chat(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}return n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("KimiAdapter","Warnings",n.validation.warnings),this.provider.chat(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens})}async*chatStreamed(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("KimiAdapter","Warnings",n.validation.warnings),yield*this.provider.chatStreamed(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens,signal:t.signal});}getProvider(){return this.provider}};var $l=class extends vr{getConstraints(){return {maxOutputTokens:{},maxInputTokens:{},supportedParams:new Set(["model","messages","stream","max_tokens","temperature","topP","topK","stopSequences","tools","structuredOutput","signal"]),validators:{temperature:St(0,2),topP:St(0,1),topK:St(1,128),max_tokens:e=>{let t=Number(e);return Number.isNaN(t)?"Must be a number":t<1?"Must be at least 1":true},stopSequences:e=>Array.isArray(e)?e.some(n=>typeof n!="string"||n.length===0)?"All stop sequences must be non-empty strings":true:"Must be an array of strings",stream:Ky("boolean")},defaults:{temperature:1}}}};var Ci=class extends Cr{buildSystemPrompt(e){let{workDir:t,language:n="zh",modelName:r,customInstructions:o}=e,i=[];return i.push({content:this.getCoreInstructions(n,r),order:0}),i.push(this.getWorkingDirectorySection(t,n)),i.push({content:this.getCapabilitiesSection(n,r),order:20}),i.push({title:n==="zh"?"\u53C2\u6570\u7EA6\u675F":"Parameter Constraints",content:this.getConstraintInstructions(n),order:30}),i.push({title:n==="zh"?"\u5DE5\u5177\u8C03\u7528":"Tool Usage",content:this.getToolUseInstructions(n),order:40}),i.push({content:this.getGeneralRules(n),order:50}),o&&o.trim()&&i.push({title:n==="zh"?"\u81EA\u5B9A\u4E49\u6307\u4EE4":"Custom Instructions",content:o.trim(),order:60}),Wr(this.combinePromptSections(i))}getConstraintInstructions(e){return e==="zh"?`- temperature: 0.0 - 2.0
1950
+ `):null,anthropicMessages:l}}addMessageCacheControl(e){let t=false;for(let n=e.length-1;n>=0;n--){let r=e[n];if(!(r.role!=="user"||!Array.isArray(r.content))){for(let o=r.content.length-1;o>=0;o--){let i=r.content[o];if(!t&&i.type==="tool_result"){i.cache_control={type:"ephemeral"},t=true,this.debugLog("Added cache_control to tool_result",{tool_use_id:i.tool_use_id});break}}if(t)break}}t||this.addTextBlockCacheControl(e);}addTextBlockCacheControl(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n.role==="user"&&Array.isArray(n.content)){for(let r=n.content.length-1;r>=0;r--)if(n.content[r].type==="text"){n.content[r].cache_control={type:"ephemeral"},this.debugLog("Added cache_control to user text block");return}}}}validateToolResultPairs(e){let t=new Set,n=new Set;for(let i of e)if(Array.isArray(i.content))for(let a of i.content)a.type==="tool_use"&&a.id&&t.add(a.id),a.type==="tool_result"&&a.tool_use_id&&n.add(a.tool_use_id);let r=new Set;for(let i of t)n.has(i)&&r.add(i);this.debugLog("Tool pairing analysis",{toolUseCount:t.size,toolResultCount:n.size,pairedCount:r.size,orphanToolUseIds:Array.from(t).filter(i=>!r.has(i)),orphanToolResultIds:Array.from(n).filter(i=>!r.has(i))});let o=[];for(let i of e){if(!Array.isArray(i.content)){o.push(i);continue}let a=i.content.filter(l=>{if(l.type==="tool_use"){let c=r.has(l.id);return c||this.debugLog("Removing orphan tool_use",{id:l.id}),c}if(l.type==="tool_result"){let c=r.has(l.tool_use_id);return c||this.debugLog("Removing orphan tool_result",{tool_use_id:l.tool_use_id}),c}return true});a.length>0?o.push({...i,content:a}):this.debugLog("Skipping empty message after tool pairing filter",{role:i.role});}return o}mergeConsecutiveUserMessages(e){if(e.length===0)return [];let t=[];for(let n of e){let r=t[t.length-1];if(r&&r.role==="user"&&n.role==="user"){let o=Array.isArray(r.content)?r.content:[{type:"text",text:r.content}],i=Array.isArray(n.content)?n.content:[{type:"text",text:n.content}];r.content=[...o,...i];}else t.push(n);}return t}convertSingleMessage(e){if(e.role==="tool"){let n=Ce(e.content),r=MI(n);return n.length!==r.length&&this.debugLog("Tool output truncated",{tool_call_id:e.tool_call_id,original:n.length,truncated:r.length}),{role:"user",content:[{type:"tool_result",tool_use_id:e.tool_call_id,content:r}]}}if(e.role==="assistant"){let n=[],r=false;if(e.thinking_blocks&&e.thinking_blocks.length>0){r=true;for(let i of e.thinking_blocks)if(i.type==="thinking"){let a={type:"thinking",thinking:i.thinking};i.signature!==void 0&&(a.signature=i.signature),n.push(a);}else if(i.type==="redacted_thinking"){let a={type:"redacted_thinking"};i.data!==void 0&&(a.data=i.data),n.push(a);}}let o=Ce(e.content);if(o){let i=o.trimEnd();n.push({type:"text",text:i||"."});}else r&&(n.push({type:"text",text:"."}),this.debugLog("Added placeholder text after thinking (no text content)"));if(e.tool_calls)for(let i of e.tool_calls){let a=(i.function.arguments||"").trim(),l={};if(a.length>0)try{l=JSON.parse(a);}catch{this.debugLog("Failed to parse tool arguments",{tool:i.function.name});}let c=this.isProxyMode?eb[i.function.name]||this.toClaudeCodeToolName(i.function.name):i.function.name;n.push({type:"tool_use",id:i.id,name:c,input:l});}if(n.length>0){let i=n[n.length-1];this.debugLog("Assistant message final check",{contentLength:n.length,lastBlockType:i.type,hasThinkingBlocks:r,blockTypes:n.map(a=>a.type),lastBlockTextPreview:i.type==="text"?(i.text||"").substring(0,50):void 0}),i.type==="thinking"||i.type==="redacted_thinking"?(n.push({type:"text",text:"."}),this.debugLog("Fixed: Added text block after thinking")):i.type==="text"&&(!i.text||!i.text.trim())&&n.some(l=>l.type==="thinking"||l.type==="redacted_thinking")&&(i.text=".",this.debugLog("Fixed: Ensured text block has content after thinking"));}return n.length>0?{role:"assistant",content:n}:null}if(Array.isArray(e.content)){let n=e.content.filter(i=>i.type==="text");if(!e.content.some(i=>i.type!=="text")&&n.length===1){let i=n[0].text;return i.trim()?{role:"user",content:i}:null}let o=this.convertMultimodalContent(e.content);return o.length>0?{role:"user",content:o}:null}let t=Ce(e.content);return t.trim()?{role:"user",content:t}:null}convertMultimodalContent(e){let t=[];for(let n of e)if(n.type==="text")t.push({type:"text",text:n.text});else if(n.type==="image_url"){let r=this.convertImageUrl(n.image_url.url);r&&t.push(r);}return t}convertImageUrl(e){if(e.startsWith("data:")){let t=e.match(/^data:([^;]+);base64,(.+)$/);if(t)return {type:"image",source:{type:"base64",media_type:t[1],data:t[2]}}}else return {type:"image",source:{type:"url",url:e}};return null}normalizeMessages(e){let t=e.filter(n=>{let r=n.role==="assistant"&&!!(n.tool_calls&&n.tool_calls.length>0),o=n.role==="assistant"&&!!(n.thinking_blocks&&n.thinking_blocks.length>0);return r||o?true:n.content?typeof n.content=="string"?n.content.trim().length>0:Array.isArray(n.content)?n.content.length>0:true:false});return t.length===0?[]:(this.validateMessageAlternation(t),t)}validateMessageAlternation(e){let t=e.filter(r=>r.role!=="system"),n=false;for(let r=1;r<t.length;r++)t[r].role===t[r-1].role&&(n=true,this.debugLog("Message alternation warning",{index:r,prevRole:t[r-1].role,currentRole:t[r].role}));!n&&t.length>1&&this.debugLog("Message alternation OK",{messageCount:t.length,roles:t.map(r=>r.role)});}convertResponse(e){this.debugLog("Raw response",e);let t=e.content||[],n="",r=[],o="";for(let a of t)if(a.type==="text")n+=a.text;else if(a.type==="tool_use"){let l=this.isProxyMode?cp[a.name]||this.fromClaudeCodeToolName(a.name):a.name;r.push({id:a.id,type:"function",function:{name:l,arguments:JSON.stringify(a.input)}});}else a.type==="thinking"&&(o=a.thinking||"");let i=this.buildUsageFromRaw(e.usage);return {id:e.id,choices:[{message:{role:"assistant",content:n||"",tool_calls:r.length>0?r:void 0,...o?{reasoning_content:o}:{}},finish_reason:this.convertStopReason(e.stop_reason)}],usage:i}}buildUsageFromRaw(e){if(!e)return {prompt_tokens:0,completion_tokens:0,total_tokens:0};let t={prompt_tokens:e.input_tokens||0,completion_tokens:e.output_tokens||0,total_tokens:(e.input_tokens||0)+(e.output_tokens||0)};return e.cache_read_input_tokens&&(t.cache_read_input_tokens=e.cache_read_input_tokens),e.cache_creation_input_tokens&&(t.cache_creation_input_tokens=e.cache_creation_input_tokens),e.cache_creation&&(e.cache_creation.ephemeral_5m_input_tokens&&(t.cache_creation_5m_tokens=e.cache_creation.ephemeral_5m_input_tokens),e.cache_creation.ephemeral_1h_input_tokens&&(t.cache_creation_1h_tokens=e.cache_creation.ephemeral_1h_input_tokens)),t}convertStopReason(e){switch(e){case "end_turn":return "stop";case "max_tokens":return "length";case "tool_use":return "tool_calls";default:return "stop"}}handleStreamEvent(e,t,n,r,o){switch(e.type){case "message_start":return this.debugLog("message_start usage",e.message?.usage),process.env.CLI_DEBUG==="1"&&e.message&&p.debug("Anthropic",`message_start full: ${JSON.stringify(e.message,null,2)}`),{usage:e.message?.usage};case "content_block_start":return {...this.handleContentBlockStart(e,t,n,r),contentBlockStart:true};case "content_block_delta":return this.handleContentBlockDelta(e,t);case "content_block_stop":return this.validateToolArguments(t),{contentBlockStop:true};case "message_delta":this.debugLog("message_delta usage",{eventUsage:e.usage,currentUsage:o});let a=e.delta?.stop_reason||e.stop_reason;if(a&&this.debugLog("message_delta stop_reason",a),e.usage&&o){let u={...o,...e.usage};return this.debugLog("merged usage",u),{usage:u,stopReason:a}}return {usage:e.usage||o,stopReason:a};case "message_stop":return this.debugLog("Message stop received"),{messageStop:true};case "ping":return {};case "error":return {error:e.error?.message||"Stream error"};default:let l=e.type?.toLowerCase()||"";if(l==="done"||l==="stream_end"||l==="end")return this.debugLog("Alternative message stop received",{type:e.type}),{messageStop:true};let c=e.stop_reason||e.delta?.stop_reason;return c?(this.debugLog("stop_reason found in unknown event",{type:e.type,stopReason:c}),{stopReason:c}):(this.debugLog("Unknown event type",{type:e.type}),{})}}handleContentBlockStart(e,t,n,r){let o=e.content_block?.type;if(o==="text")return r?{blockType:o}:{yield:{choices:[{delta:{role:"assistant"},index:0}]},roleSent:true,blockType:o};if(o==="tool_use"){let i=e.content_block,a=this.isProxyMode?cp[i.name]||this.fromClaudeCodeToolName(i.name):i.name,l="";return i.input&&typeof i.input=="object"&&Object.keys(i.input).length>0&&(l=JSON.stringify(i.input)),t.push({index:n,id:i.id,type:"function",function:{name:a,arguments:l}}),{yield:{choices:[{delta:{tool_calls:[{index:n,id:i.id,type:"function",function:{name:a}}]},index:0}]},incrementToolIndex:true,blockType:o}}else if(o==="thinking")return {blockType:o};return {blockType:o}}handleContentBlockDelta(e,t){if(e.delta?.type==="text_delta")return {yield:{choices:[{delta:{content:e.delta.text||""},index:0}]}};if(e.delta?.type==="input_json_delta"){let n=e.delta.partial_json||"";if(t.length>0){let r=t[t.length-1];return r.function.arguments+=n,{yield:{choices:[{delta:{tool_calls:[{index:r.index,function:{arguments:n}}]},index:0}]}}}}else {if(e.delta?.type==="thinking_delta")return {yield:{choices:[{delta:{reasoning_content:e.delta.thinking},index:0}]}};if(e.delta?.type==="signature_delta")return {}}return {}}validateToolArguments(e){if(e.length===0)return;let t=e[e.length-1];if(t.function.arguments)try{JSON.parse(t.function.arguments);}catch{let n=this.tryFixJson(t.function.arguments);n?(t.function.arguments=n,this.debugLog("Auto-fixed tool arguments",{tool:t.function.name})):this.debugLog("Invalid tool arguments JSON",{tool:t.function.name});}}tryFixJson(e){let t=e.trim();if(!t.endsWith("}")){t+="}";try{return JSON.parse(t),t}catch{}}t=e.replace(/,\s*$/,""),t.endsWith("}")||(t+="}");try{return JSON.parse(t),t}catch{}let n=0,r=0,o=false,i=false;for(let a of e){if(i){i=false;continue}if(a==="\\"){i=true;continue}if(a==='"'){o=!o;continue}o||(a==="{"?n++:a==="}"?n--:a==="["?r++:a==="]"&&r--);}for(t=e,o&&(t+='"');r>0;)t+="]",r--;for(;n>0;)t+="}",n--;try{return JSON.parse(t),t}catch{return null}}transformToolDefinition(e){let t=this.isProxyMode?eb[e.name]||this.toClaudeCodeToolName(e.name):e.name;if(this.isProxyMode){let o=this.stripSchemaPropertyDescriptions(e.parameters);return {name:t,description:e.description,input_schema:o}}if(!this.sanitizeToolsForProxy)return {name:t,description:e.description,input_schema:e.parameters};let n=this.truncateDescription(e.description||e.name),r=this.stripSchemaDescriptions(e.parameters);return {name:t,description:n,input_schema:r}}stripSchemaPropertyDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>this.stripSchemaPropertyDescriptions(n));let t={...e};if(t.properties&&typeof t.properties=="object"){let n={};for(let[r,o]of Object.entries(t.properties))if(o&&typeof o=="object"){let i={...o};delete i.description,i.properties&&(i.properties=this.stripSchemaPropertyDescriptions({properties:i.properties}).properties),i.items&&(i.items=this.stripSchemaPropertyDescriptions(i.items)),n[r]=i;}else n[r]=o;t.properties=n;}t.items&&(t.items=this.stripSchemaPropertyDescriptions(t.items));for(let n of ["oneOf","anyOf","allOf"])t[n]&&Array.isArray(t[n])&&(t[n]=t[n].map(r=>this.stripSchemaPropertyDescriptions(r)));return t}toClaudeCodeToolName(e){return e.split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()).join("")}fromClaudeCodeToolName(e){return e.replace(/["\s/>]+$/g,"").trim().replace(/([A-Z])/g,"_$1").toLowerCase().replace(/^_/,"")}truncateDescription(e){if(!e)return "Utility tool";let t=e.replace(/\s+/g," ").trim();return t?t.length>120?`${t.slice(0,117)}...`:t:"Utility tool"}stripSchemaDescriptions(e){if(!e||typeof e!="object")return e;if(Array.isArray(e))return e.map(n=>this.stripSchemaDescriptions(n));let t={...e};if(delete t.description,t.properties&&typeof t.properties=="object"){let n={};for(let[r,o]of Object.entries(t.properties))n[r]=this.stripSchemaDescriptions(o);t.properties=n;}for(let n of ["items","oneOf","anyOf","allOf"])t[n]&&(t[n]=Array.isArray(t[n])?t[n].map(r=>this.stripSchemaDescriptions(r)):this.stripSchemaDescriptions(t[n]));return t}buildHeaders(){return this.isProxyMode?this.buildClaudeCodeHeaders():this.buildOfficialHeaders()}buildOfficialHeaders(){return {"anthropic-api-key":this.authToken,"anthropic-version":Rl,"Content-Type":"application/json"}}buildClaudeCodeHeaders(){return {Accept:"application/json","X-Stainless-Retry-Count":"0","X-Stainless-Timeout":"600","X-Stainless-Lang":"js","X-Stainless-Package-Version":"0.70.0","X-Stainless-OS":"MacOS","X-Stainless-Arch":"arm64","X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":process.version,"anthropic-dangerous-direct-browser-access":"true","anthropic-version":Rl,"x-app":"cli","User-Agent":"claude-cli/2.0.55 (external, cli)",Authorization:`Bearer ${this.authToken}`,"Content-Type":"application/json","anthropic-beta":this.betaFeatures.join(","),"x-stainless-helper-method":"stream","accept-language":"*","sec-fetch-mode":"cors","accept-encoding":"br, gzip, deflate"}}generateSafeUserId(){if(this.isProxyMode){let n=randomBytes(32).toString("hex"),r=this.generateUUID();return `user_${n}_account__session_${r}`}let e=randomBytes(16).toString("hex"),t=randomBytes(4).toString("hex");return `user_${e}_session_${t}`}generateUUID(){let e=randomBytes(16);e[6]=e[6]&15|64,e[8]=e[8]&63|128;let t=e.toString("hex");return `${t.slice(0,8)}-${t.slice(8,12)}-${t.slice(12,16)}-${t.slice(16,20)}-${t.slice(20)}`}sanitizeUserId(e){if(this.isProxyMode){if(/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),n=this.generateUUID();return `user_${t}_account__session_${n}`}if(/^\+?[\d\s-]{10,}$/.test(e)){let t=createHash("sha256").update(e).digest("hex"),n=this.generateUUID();return `user_${t}_account__session_${n}`}return e}return e.length>Dl?createHash("sha256").update(e).digest("hex").slice(0,Dl):/^[\w.+-]+@[\w.-]+\.\w+$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,Dl):/^\+?[\d\s-]{10,}$/.test(e)?createHash("sha256").update(e).digest("hex").slice(0,Dl):e}async normalizeAxiosStreamError(e){let t=e?.response?.data;if(!(!t||typeof t!="object"||!(typeof t.pipe=="function")))try{let r=await this.readStreamToString(t);try{e.response.data=JSON.parse(r);}catch{e.response.data=r;}}catch{}}readStreamToString(e){return new Promise((t,n)=>{let r=[];e.on("data",o=>{r.push(typeof o=="string"?Buffer.from(o):o);}),e.on("end",()=>t(Buffer.concat(r).toString("utf-8"))),e.on("error",n);})}async*createTimeoutStream(e,t){let n=false,r=Date.now(),o=0,i=e[Symbol.asyncIterator](),a=()=>new Promise(l=>setImmediate(l));for(process.env.CLI_DEBUG==="1"&&p.debug("STREAM","\u{1F30A} Stream processing started");;){if(t?.aborted)throw this.debugLog("Stream aborted by signal"),process.env.CLI_DEBUG==="1"&&p.debug("STREAM",`\u26D4 Stream aborted after ${o} chunks`),e.destroy?.(),new Error("Request aborted");await a();let l=n?Qy:Zy,c;try{let u=t?new Promise((g,h)=>{let f=()=>{h(new Error("Request aborted"));};t.aborted?f():t.addEventListener("abort",f,{once:!0});}):null,d=[i.next(),new Promise((g,h)=>{c=setTimeout(()=>{h(new Error(n?`Stream idle timeout: no data for ${Qy/1e3}s`:`Stream first chunk timeout: no response for ${Zy/1e3}s`));},l);})];u&&d.push(u);let m=await Promise.race(d);if(c&&clearTimeout(c),m.done){process.env.CLI_DEBUG==="1"&&p.debug("STREAM",`\u2705 Stream completed successfully (${o} chunks, ${Date.now()-r}ms)`);return}n=!0,r=Date.now(),o++,process.env.CLI_DEBUG==="1"&&o%100===0&&p.debug("STREAM",`\u{1F4E6} Processed ${o} chunks`),yield m.value;}catch(u){c&&clearTimeout(c);let d=u.message?.includes("aborted")||u.message==="Request aborted";throw this.debugLog("Stream timeout or abort",{error:u.message,isAbort:d,receivedFirstChunk:n,idleTime:`${(Date.now()-r)/1e3}s`}),e.destroy?.(),d?(u.name="AbortError",u.code="ERR_CANCELED",u.category="canceled",u):(u.code="STREAM_TIMEOUT",u.isNetworkInterrupt=true,u)}}}debugLog(e,t){process.env.CLI_DEBUG==="1"&&p.debug("Anthropic",t?`${e} ${JSON.stringify(t,null,2)}`:e);}logRequest(e,t,n=false){process.env.CLI_DEBUG_PAYLOAD==="1"&&this.debugLog("Full payload",JSON.stringify(t,null,2));let r=this.isProxyMode?"/v1/messages?beta=true":"/v1/messages",o=`${this.baseUrl}${r}`,i=this.buildHeaders();Bc(o,i,t);let a=this.isProxyMode?{Authorization:"Bearer ***","anthropic-version":Rl,"anthropic-beta":this.betaFeatures.join(","),"Content-Type":"application/json"}:{"anthropic-api-key":"***","anthropic-version":Rl,"Content-Type":"application/json"};xe.llmRequest(n?"anthropic-stream":"anthropic",e,t,o,a),this.debugLog(`${n?"Stream ":""}Request`,{url:o,model:e,isProxyMode:this.isProxyMode});}};Z();var Nl=class extends Rn{constraints;promptBuilder;provider;defaultModel;disableCaching;constructor(e){super(),this.constraints=new fi,this.promptBuilder=new yi,this.defaultModel=e.defaultModel||"claude-3-5-sonnet-20241022",this.disableCaching=e.disableCaching||false;let{authToken:t,baseUrl:n,defaultModel:r,maxTokens:o,disableCaching:i,userId:a,...l}=e;this.provider=new Hs({authToken:t,baseUrl:n,defaultModel:this.defaultModel,maxTokens:o,disableCaching:this.disableCaching,userId:a,...l});}prepareRequest(e,t){let n=t.model||this.defaultModel,r=super.prepareRequest(e,{...t,model:n}),o={...r.options};if(o.maxInputTokens!==void 0&&(o.max_tokens=o.maxInputTokens,delete o.maxInputTokens),!o.max_tokens){let i=this.constraints.getTokenLimits(n);o.max_tokens=Math.min(4096,i.maxOutput);}if(!this.disableCaching&&this.constraints.supportsPromptCaching(n)){let i=r.messages[0]?.content?.length||0,a=this.promptBuilder.getCachingRecommendation(i);a.shouldUseCache&&(o.enableCaching=true,o.cacheTtl=a.cacheTTL);}return {...r,options:o}}async chat(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}return n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("AnthropicAdapter","Warnings",n.validation.warnings),this.provider.chat(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,maxInputTokens:n.options.max_tokens,enableCaching:n.options.enableCaching,cacheTtl:n.options.cacheTtl,signal:t.signal})}async*chatStreamed(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("AnthropicAdapter","Warnings",n.validation.warnings),yield*this.provider.chatStreamed(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,maxInputTokens:n.options.max_tokens,enableCaching:n.options.enableCaching,cacheTtl:n.options.cacheTtl,signal:t.signal});}getProvider(){return this.provider}getModelCapabilities(e){let t=e||this.defaultModel;return {supportsVision:this.constraints.supportsVision(t),supportsTools:this.constraints.supportsTools(t),supportsThinking:this.constraints.supportsThinking?.(t)||false,supportsPromptCaching:this.constraints.supportsPromptCaching(t),tokenLimits:this.constraints.getTokenLimits(t)}}getCachingRecommendation(e){return this.promptBuilder.getCachingRecommendation(e)}};var Ll=class extends Gr{getConstraints(){let e=super.getConstraints(),t={...e.validators??{}};t.temperature=St(0,1);let n=t.tool_choice;t.tool_choice=o=>o==="required"?"tool_choice=required is not supported by Kimi API":typeof n=="function"?n(o):true;let r=t.n;return t.n=(o,i)=>{let a=typeof r=="function"?r(o,i):true;if(a!==true)return a;let l=i?.temperature??1,c=typeof l=="number"?l:Number(l),u=typeof o=="number"?o:Number(o);return !Number.isNaN(c)&&c<=.001&&u>1?"temperature <= 0.001 requires n=1 for Kimi API":true},{...e,validators:t}}};Z();var Ol=class extends Rn{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new Ll,this.promptBuilder=new Hr,this.defaultModel=e.defaultModel||"kimi-k2-0905-preview";let{apiKey:t,baseUrl:n,defaultModel:r,maxTokens:o,maxInputTokens:i,...a}=e;this.provider=new Zn({apiKey:t,baseUrl:n,defaultModel:this.defaultModel,maxTokens:o,maxInputTokens:i,...a,structuredOutputMode:"json_object"});}prepareRequest(e,t){let n=t.model||this.defaultModel;return super.prepareRequest(e,{...t,model:n})}async chat(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}return n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("KimiAdapter","Warnings",n.validation.warnings),this.provider.chat(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens})}async*chatStreamed(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("KimiAdapter","Warnings",n.validation.warnings),yield*this.provider.chatStreamed(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens,signal:t.signal});}getProvider(){return this.provider}};var $l=class extends vr{getConstraints(){return {maxOutputTokens:{},maxInputTokens:{},supportedParams:new Set(["model","messages","stream","max_tokens","temperature","topP","topK","stopSequences","tools","structuredOutput","signal"]),validators:{temperature:St(0,2),topP:St(0,1),topK:St(1,128),max_tokens:e=>{let t=Number(e);return Number.isNaN(t)?"Must be a number":t<1?"Must be at least 1":true},stopSequences:e=>Array.isArray(e)?e.some(n=>typeof n!="string"||n.length===0)?"All stop sequences must be non-empty strings":true:"Must be an array of strings",stream:Ky("boolean")},defaults:{temperature:1}}}};var Ci=class extends Cr{buildSystemPrompt(e){let{workDir:t,language:n="zh",modelName:r,customInstructions:o}=e,i=[];return i.push({content:this.getCoreInstructions(n,r),order:0}),i.push(this.getWorkingDirectorySection(t,n)),i.push({content:this.getCapabilitiesSection(n,r),order:20}),i.push({title:n==="zh"?"\u53C2\u6570\u7EA6\u675F":"Parameter Constraints",content:this.getConstraintInstructions(n),order:30}),i.push({title:n==="zh"?"\u5DE5\u5177\u8C03\u7528":"Tool Usage",content:this.getToolUseInstructions(n),order:40}),i.push({content:this.getGeneralRules(n),order:50}),o&&o.trim()&&i.push({title:n==="zh"?"\u81EA\u5B9A\u4E49\u6307\u4EE4":"Custom Instructions",content:o.trim(),order:60}),Wr(this.combinePromptSections(i))}getConstraintInstructions(e){return e==="zh"?`- temperature: 0.0 - 2.0
1951
1951
  - topP: 0.0 - 1.0
1952
1952
  - topK: >= 1
1953
1953
  - maxOutputTokens: \u63A7\u5236\u8F93\u51FA\u957F\u5EA6
@@ -1991,24 +1991,24 @@ Your primary responsibilities:
1991
1991
  1. **Accuracy first**: ensure correctness
1992
1992
  2. **Be concise**: avoid redundancy
1993
1993
  3. **Safety first**: avoid destructive actions
1994
- 4. **Professional tone**: objective and technical`}getModelDisplayName(e){return e?e.includes("gemini-3")?"Gemini 3":e.includes("gemini-2.5")?"Gemini 2.5":e.includes("gemini-2.0")?"Gemini 2.0":e.includes("gemini-1.5")?"Gemini 1.5":e.includes("gemini-1.0")?"Gemini 1.0":e:"Gemini"}supportsVision(e){return e?e.includes("vision")?true:this.isModelType(e,"gemini-1.5*","gemini-2*","gemini-3*"):false}};Z();function NI(s){let e="/v1beta/models";if(!s)return e;let t=s.trim();if(!t)return e;let n=t.startsWith("/")?t:`/${t}`;return n=n.replace(/\/+$/,""),n.includes("/models")||(n=`${n}/models`),n}function LI(s){try{let e=JSON.parse(s);return e&&typeof e=="object"?e:{value:e}}catch{return {}}}function nb(s){if(s==null)return "{}";if(typeof s=="string"){let e=s.trim();return e?e.startsWith("{")||e.startsWith("[")?e:JSON.stringify({value:e}):"{}"}try{return JSON.stringify(s)}catch{return "{}"}}var OI="skip_thought_signature_validator",rb=8192;function sb(s){return s.includes("gemini-3")||s.includes("preview")}function $I(s){let e=-1;for(let n=s.length-1;n>=0;n--){let r=s[n];if(r.role==="user"&&r.parts?.some(o=>o.text)){e=n;break}}if(e===-1)return s;let t=s.slice();for(let n=e;n<t.length;n++){let r=t[n];if(r.role==="model"&&r.parts){let o=r.parts.slice();for(let i=0;i<o.length;i++){let a=o[i];if(a.functionCall){a.thoughtSignature||(o[i]={...a,thoughtSignature:OI},t[n]={...r,parts:o});break}}}}return t}var zs=class{client;apiKey;baseURL;pathPrefix;userId;retryConfig;authMode;thinkingSettings=null;constructor(e,t="https://generativelanguage.googleapis.com",n,r){this.apiKey=e,this.baseURL=t.replace(/\/$/,""),this.pathPrefix=NI(r?.pathPrefix),this.userId=randomUUID(),this.authMode=this.resolveAuthMode(r?.authMode),this.retryConfig=ar(os("gemini"),n);let o={"Content-Type":"application/json","User-Agent":`GeminiCLI/v22.16.0 (${gi__default.platform()}; ${gi__default.arch()})`,"x-goog-api-client":"google-genai-sdk/1.30.0 gl-node/v22.16.0","x-gemini-api-privileged-user-id":this.userId};this.authMode==="header"?o["x-goog-api-key"]=this.apiKey:this.authMode==="bearer"&&(o.Authorization=`Bearer ${this.apiKey}`),this.client=CI.create({baseURL:this.baseURL,timeout:6e5,headers:o});}resolveAuthMode(e){if(e&&e!=="auto")return e;let t=this.baseURL.includes("generativelanguage.googleapis.com"),n=this.apiKey.startsWith("AIza");return t||n?"query":"bearer"}setThinking(e){this.thinkingSettings=e,process.env.CLI_DEBUG==="1"&&oe("GEMINI","Thinking config updated",{config:e});}getThinking(){return this.thinkingSettings}convertMessages(e){let t=this.filterIncompleteToolCalls(e),n=[],r=[],o=[],i=()=>{o.length>0&&(r.push({parts:o,role:"user"}),o=[]);};for(let l of t)if(l.role==="system"){let c=Ce(l.content);c&&n.push(c);}else if(l.role==="user"){i();let c=[];if(typeof l.content=="string")c.push({text:l.content});else if(Array.isArray(l.content)){for(let u of l.content)if(u.type==="text")c.push({text:u.text});else if(u.type==="image_url"){let d=u.image_url.url;if(d.startsWith("data:")){let m=d.match(/^data:([^;]+);base64,(.+)$/);m&&c.push({inlineData:{mimeType:m[1],data:m[2]}});}}}r.push({parts:c,role:"user"});}else if(l.role==="assistant"){i();let c=[],u=Ce(l.content);if(u&&c.push({text:u}),l.tool_calls)for(let d of l.tool_calls){let m={functionCall:{name:d.function.name,args:LI(d.function.arguments),id:d.id}};d.thoughtSignature&&(m.thoughtSignature=d.thoughtSignature),c.push(m);}r.push({parts:c,role:"model"});}else if(l.role==="tool"){let c=Ce(l.content)||"",d={name:l.name||"unknown",response:{output:c}};l.tool_call_id&&(d.id=l.tool_call_id),o.push({functionResponse:d});}i();let a={contents:r};return n.length>0&&(a.systemInstruction={parts:n.map(l=>({text:l})),role:"user"}),a}filterIncompleteToolCalls(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r.role==="system"){t.push(r),n++;continue}if(r.role==="assistant"&&r.tool_calls&&r.tool_calls.length>0){let o=r.tool_calls,i=o.length,a=o.every(h=>!!h.id),l=[],c=[],u=n+1;for(;u<e.length;){let h=e[u];if(h.role==="system"){l.push(h),u++;continue}if(h.role!=="tool")break;l.push(h),c.push(h),u++;}let d=c.length,m=c.every(h=>!!h.tool_call_id),g=d===i;if(g&&a&&m){let h=new Set(c.map(f=>f.tool_call_id).filter(f=>!!f));for(let f of o)if(!h.has(f.id)){g=false;break}}if(g){t.push(r);for(let h of l)t.push(h);}else {process.env.CLI_DEBUG==="1"&&p.debug("GEMINI","Filtering incomplete tool call turn",{toolCalls:o.map(h=>({id:h.id,name:h.function.name})),responseCount:d});for(let h of l)h.role==="system"&&t.push(h);}n=u;continue}if(r.role==="tool"){process.env.CLI_DEBUG==="1"&&p.debug("GEMINI","Dropping orphan tool message",{toolCallId:r.tool_call_id,toolName:r.name}),n++;continue}t.push(r),n++;}return t}convertTools(e){return !e||e.length===0?[]:[{functionDeclarations:e.map(n=>({name:n.name,description:n.description,parameters:{type:n.parameters.type,properties:n.parameters.properties,required:n.parameters.required,additionalProperties:n.parameters.additionalProperties},parametersJsonSchema:{type:n.parameters.type,properties:n.parameters.properties,required:n.parameters.required,additionalProperties:n.parameters.additionalProperties}}))}]}buildGenerationConfig(e){let t={temperature:e.temperature??1,topP:e.topP??.95,topK:e.topK??64};return e.maxOutputTokens!==void 0&&(t.maxOutputTokens=e.maxOutputTokens),e.stopSequences&&e.stopSequences.length>0&&(t.stopSequences=e.stopSequences),e.structuredOutput&&(t.responseMimeType="application/json",t.responseSchema=e.structuredOutput.schema),e.enableThinking&&(t.thinkingConfig={thinkingBudget:e.thinkingBudget??rb,includeThoughts:true}),t}parseSSELine(e){let t=e.trim();if(!t||(t.startsWith("data:")&&(t=t.slice(5).trim()),t==="[DONE]")||!t.startsWith("{"))return null;try{return JSON.parse(t)}catch{return null}}convertResponse(e,t){let n=e.candidates[0];if(!n)throw new Error("No candidate in Gemini response");let r=n.content?.parts||[],o=null,i=[];for(let c of r)c.text?o=(o||"")+c.text:c.functionCall&&i.push({id:c.functionCall.id||`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"function",function:{name:c.functionCall.name,arguments:nb(c.functionCall.args)}});let a=e.usageMetadata||{promptTokenCount:0,candidatesTokenCount:0,totalTokenCount:0},l=n.finishReason==="STOP"?i.length>0?"tool_calls":"stop":(n.finishReason||"stop").toLowerCase();return {id:t,choices:[{message:{role:"assistant",content:o,tool_calls:i.length>0?i:void 0},finish_reason:l}],usage:{prompt_tokens:a.promptTokenCount,completion_tokens:a.candidatesTokenCount,total_tokens:a.totalTokenCount,cached_tokens:a.cachedContentTokenCount}}}async makeRequest(e,t){let n,r=0;for(;r<=this.retryConfig.requestMaxRetries;)try{return await e()}catch(o){n=o,r++;let i=Zt(o),a=Gn(o.response?.headers?.["retry-after"]);if(!i.retryable||r>this.retryConfig.requestMaxRetries)break;let l=lr(a,r,this.retryConfig);await ls(l);}throw n}async chat(e,t){let n=t.model||"gemini-2.5-flash",{contents:r,systemInstruction:o}=this.convertMessages(e),i=this.convertTools(t.tools||[]),a=this.buildGenerationConfig({temperature:t.temperature,structuredOutput:t.structuredOutput,topP:t.topP,topK:t.topK,stopSequences:t.stopSequences,maxOutputTokens:t.maxInputTokens}),l={contents:r,systemInstruction:o,generationConfig:a};i.length>0&&(l.tools=i);let c=`gemini-${Date.now()}`,u=`${this.pathPrefix}/${n}:generateContent`,d=this.authMode==="query"?{key:this.apiKey}:void 0;return this.makeRequest(async()=>{let m=await this.client.post(u,l,{params:d,signal:t.signal});return this.convertResponse(m.data,c)},"chat")}async*chatStreamed(e,t){let n=t.model||"gemini-2.5-flash",{contents:r,systemInstruction:o}=this.convertMessages(e),i=this.convertTools(t.tools||[]),a=sb(n),l=this.thinkingSettings?.type==="enabled",c=this.thinkingSettings?.type==="disabled",u=t.enableThinking!==void 0?t.enableThinking:l?true:c?false:a,d=t.thinkingBudget??this.thinkingSettings?.budget??rb,m=this.buildGenerationConfig({temperature:t.temperature,structuredOutput:t.structuredOutput,topP:t.topP,topK:t.topK,stopSequences:t.stopSequences,maxOutputTokens:t.maxInputTokens,enableThinking:u,thinkingBudget:d}),h={contents:sb(n)?$I(r):r,systemInstruction:o,generationConfig:m};i.length>0&&(h.tools=i);let f=`gemini-${Date.now()}`,v=`${this.pathPrefix}/${n}:streamGenerateContent`,b=`${this.baseURL}${v}`,C=this.authMode==="query"?{key:this.apiKey,alt:"sse"}:{alt:"sse"},T=new URL(b);for(let[D,$]of Object.entries(C))T.searchParams.append(D,$);let w={"Content-Type":"application/json",Accept:"*/*"};if(this.authMode==="header"?w["x-goog-api-key"]=this.apiKey:this.authMode==="bearer"&&(w.Authorization=`Bearer ${this.apiKey}`),process.env.CLI_DEBUG==="1"){p.info("GEMINI","=== Gemini Stream Request ==="),p.info("GEMINI",`URL: ${T.toString()}`),p.info("GEMINI",`Model: ${n}`),p.info("GEMINI",`AuthMode: ${this.authMode}`),p.info("GEMINI",`Tools: ${i.length>0?i[0].functionDeclarations.length:0}`),p.info("GEMINI",`Contents: ${r.length} messages`);let D=Fn(T.toString(),w,h);p.info("GEMINI_CURL",D),p.debug("GEMINI","Request body:",{contentsCount:h.contents.length,hasSystemInstruction:!!h.systemInstruction,toolsCount:h.tools?.[0]?.functionDeclarations?.length||0,generationConfig:h.generationConfig});}if(process.env.CLI_DEBUG==="1"){oe("GEMINI","[Gemini Stream Request]"),oe("GEMINI",`URL: ${T.toString()}`),oe("GEMINI",`Model: ${n}`),oe("GEMINI",`Tools: ${i.length>0?i[0].functionDeclarations.length:0}`),oe("GEMINI",`Contents: ${r.length} messages`);let D=Fn(T.toString(),w,h);oe("GEMINI_CURL",D);}let E=Date.now(),N=await this.makeRequest(async()=>{let D=this.authMode==="query"?{key:this.apiKey,alt:"sse"}:{alt:"sse"};return await this.client.post(v,h,{params:D,responseType:"stream",signal:t.signal,headers:{Accept:"*/*","Accept-Language":"*","sec-fetch-mode":"cors","Accept-Encoding":"br, gzip, deflate"}})},"chatStreamed");process.env.CLI_DEBUG==="1"&&(oe("GEMINI","[Gemini Stream Started]"),oe("GEMINI",`Status: ${N.status}`)),yield*this.streamGenerator(N.data,f,E);}async*streamGenerator(e,t,n){let r="",o=[],i="",a=[],l,c=u=>{let d=[],m=u.candidates?.[0];if(!m)return process.env.CLI_DEBUG==="1"&&oe("GEMINI",`No candidate in response: ${JSON.stringify(u).slice(0,200)}`),d;u.usageMetadata&&(l=u.usageMetadata);let g=m.content?.parts;if(!g||g.length===0)process.env.CLI_DEBUG==="1"&&oe("GEMINI",`No parts in candidate: ${JSON.stringify(m).slice(0,200)}`);else for(let h of g){if(h.thought&&!h.thoughtSignature&&h.text){process.env.CLI_DEBUG==="1"&&oe("GEMINI",`Yielding reasoning: ${h.text.slice(0,50)}...`),d.push({choices:[{index:0,delta:{reasoning_content:h.text}}]});continue}if(h.text)h.thoughtSignature&&process.env.CLI_DEBUG==="1"?oe("GEMINI",`Yielding final answer (with signature): ${h.text.slice(0,100)}...`):process.env.CLI_DEBUG==="1"&&oe("GEMINI",`Yielding content: ${h.text.slice(0,100)}...`),i+=h.text,d.push({choices:[{index:0,delta:{content:h.text}}]});else if(h.functionCall){let f={id:h.functionCall.id||`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"function",function:{name:h.functionCall.name,arguments:nb(h.functionCall.args)},...h.thoughtSignature?{thoughtSignature:h.thoughtSignature}:{}};a.push(f),d.push({choices:[{index:0,delta:{tool_calls:[{index:a.length-1,id:f.id,type:"function",function:{name:f.function.name,arguments:f.function.arguments},...f.thoughtSignature?{thoughtSignature:f.thoughtSignature}:{}}]}}]});}}if(m.finishReason){let h=l||{promptTokenCount:0,candidatesTokenCount:0,totalTokenCount:0};if(process.env.CLI_DEBUG==="1"){let v=n?Date.now()-n:0;p.info("GEMINI","=== Gemini Stream Complete ==="),p.info("GEMINI",`Duration: ${v}ms`),p.info("GEMINI",`Finish Reason: ${m.finishReason}`),p.info("GEMINI",`Tool Calls: ${a.length}`),p.info("GEMINI",`Accumulated Content Length: ${i.length}`),p.info("GEMINI",`Usage: prompt=${h.promptTokenCount}, completion=${h.candidatesTokenCount}, total=${h.totalTokenCount}`),i&&p.info("GEMINI",`Content Preview: ${i.slice(0,500)}...`),a.length>0&&p.info("GEMINI","Tool Calls Detail:",a.map(b=>({id:b.id,name:b.function.name,argsLength:b.function.arguments.length})));}if(process.env.CLI_DEBUG==="1"){let v=n?Date.now()-n:0;oe("GEMINI","[Gemini Stream Complete]"),oe("GEMINI",`Duration: ${v}ms`),oe("GEMINI",`Finish Reason: ${m.finishReason}`),oe("GEMINI",`Tool Calls: ${a.length}`),oe("GEMINI",`Accumulated Content Length: ${i.length}`),oe("GEMINI",`Usage: prompt=${h.promptTokenCount}, completion=${h.candidatesTokenCount}, total=${h.totalTokenCount}`),i&&oe("GEMINI",`Content Preview: ${i.slice(0,500)}`);}let f=m.finishReason==="STOP"?a.length>0?"tool_calls":"stop":m.finishReason.toLowerCase();d.push({id:t,choices:[{index:0,delta:{},finish_reason:f}],usage:{prompt_tokens:h.promptTokenCount,completion_tokens:h.candidatesTokenCount,total_tokens:h.totalTokenCount,cached_tokens:h.cachedContentTokenCount}});}return d};try{for await(let u of e){let d=u.toString();r+=d,process.env.CLI_DEBUG==="1"&&oe("GEMINI",`Raw chunk (${d.length} bytes): ${d.slice(0,200)}...`);let m=r.split(/\r?\n/);r=m.pop()||"";for(let g of m){let h=g.trimEnd();if(!h){if(o.length===0)continue;let v=o.join(`
1994
+ 4. **Professional tone**: objective and technical`}getModelDisplayName(e){return e?e.includes("gemini-3")?"Gemini 3":e.includes("gemini-2.5")?"Gemini 2.5":e.includes("gemini-2.0")?"Gemini 2.0":e.includes("gemini-1.5")?"Gemini 1.5":e.includes("gemini-1.0")?"Gemini 1.0":e:"Gemini"}supportsVision(e){return e?e.includes("vision")?true:this.isModelType(e,"gemini-1.5*","gemini-2*","gemini-3*"):false}};Z();function LI(s){let e="/v1beta/models";if(!s)return e;let t=s.trim();if(!t)return e;let n=t.startsWith("/")?t:`/${t}`;return n=n.replace(/\/+$/,""),n.includes("/models")||(n=`${n}/models`),n}function OI(s){try{let e=JSON.parse(s);return e&&typeof e=="object"?e:{value:e}}catch{return {}}}function nb(s){if(s==null)return "{}";if(typeof s=="string"){let e=s.trim();return e?e.startsWith("{")||e.startsWith("[")?e:JSON.stringify({value:e}):"{}"}try{return JSON.stringify(s)}catch{return "{}"}}var $I="skip_thought_signature_validator",rb=8192;function sb(s){return s.includes("gemini-3")||s.includes("preview")}function BI(s){let e=-1;for(let n=s.length-1;n>=0;n--){let r=s[n];if(r.role==="user"&&r.parts?.some(o=>o.text)){e=n;break}}if(e===-1)return s;let t=s.slice();for(let n=e;n<t.length;n++){let r=t[n];if(r.role==="model"&&r.parts){let o=r.parts.slice();for(let i=0;i<o.length;i++){let a=o[i];if(a.functionCall){a.thoughtSignature||(o[i]={...a,thoughtSignature:$I},t[n]={...r,parts:o});break}}}}return t}var zs=class{client;apiKey;baseURL;pathPrefix;userId;retryConfig;authMode;thinkingSettings=null;constructor(e,t="https://generativelanguage.googleapis.com",n,r){this.apiKey=e,this.baseURL=t.replace(/\/$/,""),this.pathPrefix=LI(r?.pathPrefix),this.userId=randomUUID(),this.authMode=this.resolveAuthMode(r?.authMode),this.retryConfig=ar(os("gemini"),n);let o={"Content-Type":"application/json","User-Agent":`GeminiCLI/v22.16.0 (${gi__default.platform()}; ${gi__default.arch()})`,"x-goog-api-client":"google-genai-sdk/1.30.0 gl-node/v22.16.0","x-gemini-api-privileged-user-id":this.userId};this.authMode==="header"?o["x-goog-api-key"]=this.apiKey:this.authMode==="bearer"&&(o.Authorization=`Bearer ${this.apiKey}`),this.client=xI.create({baseURL:this.baseURL,timeout:6e5,headers:o});}resolveAuthMode(e){if(e&&e!=="auto")return e;let t=this.baseURL.includes("generativelanguage.googleapis.com"),n=this.apiKey.startsWith("AIza");return t||n?"query":"bearer"}setThinking(e){this.thinkingSettings=e,process.env.CLI_DEBUG==="1"&&oe("GEMINI","Thinking config updated",{config:e});}getThinking(){return this.thinkingSettings}convertMessages(e){let t=this.filterIncompleteToolCalls(e),n=[],r=[],o=[],i=()=>{o.length>0&&(r.push({parts:o,role:"user"}),o=[]);};for(let l of t)if(l.role==="system"){let c=Ce(l.content);c&&n.push(c);}else if(l.role==="user"){i();let c=[];if(typeof l.content=="string")c.push({text:l.content});else if(Array.isArray(l.content)){for(let u of l.content)if(u.type==="text")c.push({text:u.text});else if(u.type==="image_url"){let d=u.image_url.url;if(d.startsWith("data:")){let m=d.match(/^data:([^;]+);base64,(.+)$/);m&&c.push({inlineData:{mimeType:m[1],data:m[2]}});}}}r.push({parts:c,role:"user"});}else if(l.role==="assistant"){i();let c=[],u=Ce(l.content);if(u&&c.push({text:u}),l.tool_calls)for(let d of l.tool_calls){let m={functionCall:{name:d.function.name,args:OI(d.function.arguments),id:d.id}};d.thoughtSignature&&(m.thoughtSignature=d.thoughtSignature),c.push(m);}r.push({parts:c,role:"model"});}else if(l.role==="tool"){let c=Ce(l.content)||"",d={name:l.name||"unknown",response:{output:c}};l.tool_call_id&&(d.id=l.tool_call_id),o.push({functionResponse:d});}i();let a={contents:r};return n.length>0&&(a.systemInstruction={parts:n.map(l=>({text:l})),role:"user"}),a}filterIncompleteToolCalls(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r.role==="system"){t.push(r),n++;continue}if(r.role==="assistant"&&r.tool_calls&&r.tool_calls.length>0){let o=r.tool_calls,i=o.length,a=o.every(h=>!!h.id),l=[],c=[],u=n+1;for(;u<e.length;){let h=e[u];if(h.role==="system"){l.push(h),u++;continue}if(h.role!=="tool")break;l.push(h),c.push(h),u++;}let d=c.length,m=c.every(h=>!!h.tool_call_id),g=d===i;if(g&&a&&m){let h=new Set(c.map(f=>f.tool_call_id).filter(f=>!!f));for(let f of o)if(!h.has(f.id)){g=false;break}}if(g){t.push(r);for(let h of l)t.push(h);}else {process.env.CLI_DEBUG==="1"&&p.debug("GEMINI","Filtering incomplete tool call turn",{toolCalls:o.map(h=>({id:h.id,name:h.function.name})),responseCount:d});for(let h of l)h.role==="system"&&t.push(h);}n=u;continue}if(r.role==="tool"){process.env.CLI_DEBUG==="1"&&p.debug("GEMINI","Dropping orphan tool message",{toolCallId:r.tool_call_id,toolName:r.name}),n++;continue}t.push(r),n++;}return t}convertTools(e){return !e||e.length===0?[]:[{functionDeclarations:e.map(n=>({name:n.name,description:n.description,parameters:{type:n.parameters.type,properties:n.parameters.properties,required:n.parameters.required,additionalProperties:n.parameters.additionalProperties},parametersJsonSchema:{type:n.parameters.type,properties:n.parameters.properties,required:n.parameters.required,additionalProperties:n.parameters.additionalProperties}}))}]}buildGenerationConfig(e){let t={temperature:e.temperature??1,topP:e.topP??.95,topK:e.topK??64};return e.maxOutputTokens!==void 0&&(t.maxOutputTokens=e.maxOutputTokens),e.stopSequences&&e.stopSequences.length>0&&(t.stopSequences=e.stopSequences),e.structuredOutput&&(t.responseMimeType="application/json",t.responseSchema=e.structuredOutput.schema),e.enableThinking&&(t.thinkingConfig={thinkingBudget:e.thinkingBudget??rb,includeThoughts:true}),t}parseSSELine(e){let t=e.trim();if(!t||(t.startsWith("data:")&&(t=t.slice(5).trim()),t==="[DONE]")||!t.startsWith("{"))return null;try{return JSON.parse(t)}catch{return null}}convertResponse(e,t){let n=e.candidates[0];if(!n)throw new Error("No candidate in Gemini response");let r=n.content?.parts||[],o=null,i=[];for(let c of r)c.text?o=(o||"")+c.text:c.functionCall&&i.push({id:c.functionCall.id||`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"function",function:{name:c.functionCall.name,arguments:nb(c.functionCall.args)}});let a=e.usageMetadata||{promptTokenCount:0,candidatesTokenCount:0,totalTokenCount:0},l=n.finishReason==="STOP"?i.length>0?"tool_calls":"stop":(n.finishReason||"stop").toLowerCase();return {id:t,choices:[{message:{role:"assistant",content:o,tool_calls:i.length>0?i:void 0},finish_reason:l}],usage:{prompt_tokens:a.promptTokenCount,completion_tokens:a.candidatesTokenCount,total_tokens:a.totalTokenCount,cached_tokens:a.cachedContentTokenCount}}}async makeRequest(e,t){let n,r=0;for(;r<=this.retryConfig.requestMaxRetries;)try{return await e()}catch(o){n=o,r++;let i=Zt(o),a=Gn(o.response?.headers?.["retry-after"]);if(!i.retryable||r>this.retryConfig.requestMaxRetries)break;let l=lr(a,r,this.retryConfig);await ls(l);}throw n}async chat(e,t){let n=t.model||"gemini-2.5-flash",{contents:r,systemInstruction:o}=this.convertMessages(e),i=this.convertTools(t.tools||[]),a=this.buildGenerationConfig({temperature:t.temperature,structuredOutput:t.structuredOutput,topP:t.topP,topK:t.topK,stopSequences:t.stopSequences,maxOutputTokens:t.maxInputTokens}),l={contents:r,systemInstruction:o,generationConfig:a};i.length>0&&(l.tools=i);let c=`gemini-${Date.now()}`,u=`${this.pathPrefix}/${n}:generateContent`,d=this.authMode==="query"?{key:this.apiKey}:void 0;return this.makeRequest(async()=>{let m=await this.client.post(u,l,{params:d,signal:t.signal});return this.convertResponse(m.data,c)},"chat")}async*chatStreamed(e,t){let n=t.model||"gemini-2.5-flash",{contents:r,systemInstruction:o}=this.convertMessages(e),i=this.convertTools(t.tools||[]),a=sb(n),l=this.thinkingSettings?.type==="enabled",c=this.thinkingSettings?.type==="disabled",u=t.enableThinking!==void 0?t.enableThinking:l?true:c?false:a,d=t.thinkingBudget??this.thinkingSettings?.budget??rb,m=this.buildGenerationConfig({temperature:t.temperature,structuredOutput:t.structuredOutput,topP:t.topP,topK:t.topK,stopSequences:t.stopSequences,maxOutputTokens:t.maxInputTokens,enableThinking:u,thinkingBudget:d}),h={contents:sb(n)?BI(r):r,systemInstruction:o,generationConfig:m};i.length>0&&(h.tools=i);let f=`gemini-${Date.now()}`,v=`${this.pathPrefix}/${n}:streamGenerateContent`,b=`${this.baseURL}${v}`,C=this.authMode==="query"?{key:this.apiKey,alt:"sse"}:{alt:"sse"},T=new URL(b);for(let[D,$]of Object.entries(C))T.searchParams.append(D,$);let w={"Content-Type":"application/json",Accept:"*/*"};if(this.authMode==="header"?w["x-goog-api-key"]=this.apiKey:this.authMode==="bearer"&&(w.Authorization=`Bearer ${this.apiKey}`),process.env.CLI_DEBUG==="1"){p.info("GEMINI","=== Gemini Stream Request ==="),p.info("GEMINI",`URL: ${T.toString()}`),p.info("GEMINI",`Model: ${n}`),p.info("GEMINI",`AuthMode: ${this.authMode}`),p.info("GEMINI",`Tools: ${i.length>0?i[0].functionDeclarations.length:0}`),p.info("GEMINI",`Contents: ${r.length} messages`);let D=Fn(T.toString(),w,h);p.info("GEMINI_CURL",D),p.debug("GEMINI","Request body:",{contentsCount:h.contents.length,hasSystemInstruction:!!h.systemInstruction,toolsCount:h.tools?.[0]?.functionDeclarations?.length||0,generationConfig:h.generationConfig});}if(process.env.CLI_DEBUG==="1"){oe("GEMINI","[Gemini Stream Request]"),oe("GEMINI",`URL: ${T.toString()}`),oe("GEMINI",`Model: ${n}`),oe("GEMINI",`Tools: ${i.length>0?i[0].functionDeclarations.length:0}`),oe("GEMINI",`Contents: ${r.length} messages`);let D=Fn(T.toString(),w,h);oe("GEMINI_CURL",D);}let E=Date.now(),N=await this.makeRequest(async()=>{let D=this.authMode==="query"?{key:this.apiKey,alt:"sse"}:{alt:"sse"};return await this.client.post(v,h,{params:D,responseType:"stream",signal:t.signal,headers:{Accept:"*/*","Accept-Language":"*","sec-fetch-mode":"cors","Accept-Encoding":"br, gzip, deflate"}})},"chatStreamed");process.env.CLI_DEBUG==="1"&&(oe("GEMINI","[Gemini Stream Started]"),oe("GEMINI",`Status: ${N.status}`)),yield*this.streamGenerator(N.data,f,E);}async*streamGenerator(e,t,n){let r="",o=[],i="",a=[],l,c=u=>{let d=[],m=u.candidates?.[0];if(!m)return process.env.CLI_DEBUG==="1"&&oe("GEMINI",`No candidate in response: ${JSON.stringify(u).slice(0,200)}`),d;u.usageMetadata&&(l=u.usageMetadata);let g=m.content?.parts;if(!g||g.length===0)process.env.CLI_DEBUG==="1"&&oe("GEMINI",`No parts in candidate: ${JSON.stringify(m).slice(0,200)}`);else for(let h of g){if(h.thought&&!h.thoughtSignature&&h.text){process.env.CLI_DEBUG==="1"&&oe("GEMINI",`Yielding reasoning: ${h.text.slice(0,50)}...`),d.push({choices:[{index:0,delta:{reasoning_content:h.text}}]});continue}if(h.text)h.thoughtSignature&&process.env.CLI_DEBUG==="1"?oe("GEMINI",`Yielding final answer (with signature): ${h.text.slice(0,100)}...`):process.env.CLI_DEBUG==="1"&&oe("GEMINI",`Yielding content: ${h.text.slice(0,100)}...`),i+=h.text,d.push({choices:[{index:0,delta:{content:h.text}}]});else if(h.functionCall){let f={id:h.functionCall.id||`call_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,type:"function",function:{name:h.functionCall.name,arguments:nb(h.functionCall.args)},...h.thoughtSignature?{thoughtSignature:h.thoughtSignature}:{}};a.push(f),d.push({choices:[{index:0,delta:{tool_calls:[{index:a.length-1,id:f.id,type:"function",function:{name:f.function.name,arguments:f.function.arguments},...f.thoughtSignature?{thoughtSignature:f.thoughtSignature}:{}}]}}]});}}if(m.finishReason){let h=l||{promptTokenCount:0,candidatesTokenCount:0,totalTokenCount:0};if(process.env.CLI_DEBUG==="1"){let v=n?Date.now()-n:0;p.info("GEMINI","=== Gemini Stream Complete ==="),p.info("GEMINI",`Duration: ${v}ms`),p.info("GEMINI",`Finish Reason: ${m.finishReason}`),p.info("GEMINI",`Tool Calls: ${a.length}`),p.info("GEMINI",`Accumulated Content Length: ${i.length}`),p.info("GEMINI",`Usage: prompt=${h.promptTokenCount}, completion=${h.candidatesTokenCount}, total=${h.totalTokenCount}`),i&&p.info("GEMINI",`Content Preview: ${i.slice(0,500)}...`),a.length>0&&p.info("GEMINI","Tool Calls Detail:",a.map(b=>({id:b.id,name:b.function.name,argsLength:b.function.arguments.length})));}if(process.env.CLI_DEBUG==="1"){let v=n?Date.now()-n:0;oe("GEMINI","[Gemini Stream Complete]"),oe("GEMINI",`Duration: ${v}ms`),oe("GEMINI",`Finish Reason: ${m.finishReason}`),oe("GEMINI",`Tool Calls: ${a.length}`),oe("GEMINI",`Accumulated Content Length: ${i.length}`),oe("GEMINI",`Usage: prompt=${h.promptTokenCount}, completion=${h.candidatesTokenCount}, total=${h.totalTokenCount}`),i&&oe("GEMINI",`Content Preview: ${i.slice(0,500)}`);}let f=m.finishReason==="STOP"?a.length>0?"tool_calls":"stop":m.finishReason.toLowerCase();d.push({id:t,choices:[{index:0,delta:{},finish_reason:f}],usage:{prompt_tokens:h.promptTokenCount,completion_tokens:h.candidatesTokenCount,total_tokens:h.totalTokenCount,cached_tokens:h.cachedContentTokenCount}});}return d};try{for await(let u of e){let d=u.toString();r+=d,process.env.CLI_DEBUG==="1"&&oe("GEMINI",`Raw chunk (${d.length} bytes): ${d.slice(0,200)}...`);let m=r.split(/\r?\n/);r=m.pop()||"";for(let g of m){let h=g.trimEnd();if(!h){if(o.length===0)continue;let v=o.join(`
1995
1995
  `);o=[];let b=this.parseSSELine(v);if(!b){process.env.CLI_DEBUG==="1"&&v.length>0&&oe("GEMINI",`Failed to parse event: ${v.slice(0,100)}...`);continue}for(let C of c(b))yield C;continue}if(h.startsWith("data:")){o.push(h.slice(5).trimStart());continue}let f=this.parseSSELine(h);if(!f){process.env.CLI_DEBUG==="1"&&h.length>0&&oe("GEMINI",`Failed to parse line: ${h.slice(0,100)}...`);continue}for(let v of c(f))yield v;}}if(o.length>0){let u=this.parseSSELine(o.join(`
1996
- `));if(u)for(let d of c(u))yield d;}}catch(u){if(process.env.CLI_DEBUG==="1"){let d=n?Date.now()-n:0;oe("GEMINI","[Gemini Stream Error]"),oe("GEMINI",`Duration: ${d}ms`),oe("GEMINI",`Error: ${u.message||u}`),u.response?.data&&oe("GEMINI",`Response: ${JSON.stringify(u.response.data)}`);}throw u}}};Z();var Bl=class extends Rn{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new $l,this.promptBuilder=new Ci,this.defaultModel=e.defaultModel||"gemini-2.5-flash";let{apiKey:t,baseUrl:n,urlSuffix:r,retry:o}=e;this.provider=new zs(t,n,o,{pathPrefix:r});}prepareRequest(e,t){let n=t.model||this.defaultModel;return super.prepareRequest(e,{...t,model:n})}async chat(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}return n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("GeminiAdapter","Warnings",n.validation.warnings),this.provider.chat(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens,topP:n.options.topP,topK:n.options.topK,stopSequences:n.options.stopSequences})}async*chatStreamed(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("GeminiAdapter","Warnings",n.validation.warnings),yield*this.provider.chatStreamed(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens,topP:n.options.topP,topK:n.options.topK,stopSequences:n.options.stopSequences,signal:t.signal});}getProvider(){return this.provider}};var qs=class s{static createAdapter(e,t){switch(e){case "openai":return s.createOpenAIAdapter(t,false);case "openai-responses":return s.createOpenAIAdapter(t,true);case "kimi":return s.createKimiAdapter(t);case "anthropic":case "anthropic-openai":return s.createAnthropicAdapter(t);case "doubao":throw new Error("Doubao adapter not yet implemented. Use Phase 5.");case "gemini":return s.createGeminiAdapter(t);default:throw new Error(`Unsupported provider protocol: ${e}`)}}static createOpenAIAdapter(e,t){let n={apiKey:e.apiKey,baseUrl:e.baseUrl,defaultModel:e.defaultModel||e.lastSelectedModel,useResponsesAPI:t,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens};return new Ml(n)}static createAnthropicAdapter(e){let t={authToken:e.apiKey,baseUrl:e.baseUrl,defaultModel:e.defaultModel||e.lastSelectedModel,maxTokens:e.maxTokens&&e.maxTokens<=8192?e.maxTokens:void 0,disableCaching:false};return new Nl(t)}static createKimiAdapter(e){let t={apiKey:e.apiKey,baseUrl:e.baseUrl,defaultModel:e.defaultModel||e.lastSelectedModel,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens};return new Ol(t)}static createGeminiAdapter(e){let t={apiKey:e.apiKey,baseUrl:e.baseUrl,urlSuffix:e.urlSuffix,defaultModel:e.defaultModel||e.lastSelectedModel,retry:e.retry};return new Bl(t)}static isProtocolSupported(e){return ["openai","openai-responses","anthropic","anthropic-openai","kimi","gemini"].includes(e)}static getProtocolDisplayName(e){return {openai:"OpenAI (Chat Completions)","openai-responses":"OpenAI (Responses API)",anthropic:"Anthropic (Claude)","anthropic-openai":"Anthropic (OpenAI Format)",doubao:"\u8C46\u5305 (Doubao)",gemini:"Google Gemini",kimi:"Kimi (Moonshot)"}[e]||e}};var FI=16e3;function UI(s,e=FI){if(!s||s.length<=e)return s;let t=s.split(`
1996
+ `));if(u)for(let d of c(u))yield d;}}catch(u){if(process.env.CLI_DEBUG==="1"){let d=n?Date.now()-n:0;oe("GEMINI","[Gemini Stream Error]"),oe("GEMINI",`Duration: ${d}ms`),oe("GEMINI",`Error: ${u.message||u}`),u.response?.data&&oe("GEMINI",`Response: ${JSON.stringify(u.response.data)}`);}throw u}}};Z();var Bl=class extends Rn{constraints;promptBuilder;provider;defaultModel;constructor(e){super(),this.constraints=new $l,this.promptBuilder=new Ci,this.defaultModel=e.defaultModel||"gemini-2.5-flash";let{apiKey:t,baseUrl:n,urlSuffix:r,retry:o}=e;this.provider=new zs(t,n,o,{pathPrefix:r});}prepareRequest(e,t){let n=t.model||this.defaultModel;return super.prepareRequest(e,{...t,model:n})}async chat(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}return n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("GeminiAdapter","Warnings",n.validation.warnings),this.provider.chat(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens,topP:n.options.topP,topK:n.options.topK,stopSequences:n.options.stopSequences})}async*chatStreamed(e,t){let n=this.prepareRequest(e,t);if(!n.validation?.valid){let r=n.validation?.errors||[];throw new Error(`Invalid parameters: ${r.join(", ")}`)}n.validation?.warnings&&n.validation.warnings.length>0&&p.warn("GeminiAdapter","Warnings",n.validation.warnings),yield*this.provider.chatStreamed(n.messages,{model:n.options.model,tools:n.options.tools,temperature:n.options.temperature,structuredOutput:n.options.structuredOutput,maxInputTokens:n.options.maxInputTokens,topP:n.options.topP,topK:n.options.topK,stopSequences:n.options.stopSequences,signal:t.signal});}getProvider(){return this.provider}};var qs=class s{static createAdapter(e,t){switch(e){case "openai":return s.createOpenAIAdapter(t,false);case "openai-responses":return s.createOpenAIAdapter(t,true);case "kimi":return s.createKimiAdapter(t);case "anthropic":case "anthropic-openai":return s.createAnthropicAdapter(t);case "doubao":throw new Error("Doubao adapter not yet implemented. Use Phase 5.");case "gemini":return s.createGeminiAdapter(t);default:throw new Error(`Unsupported provider protocol: ${e}`)}}static createOpenAIAdapter(e,t){let n={apiKey:e.apiKey,baseUrl:e.baseUrl,defaultModel:e.defaultModel||e.lastSelectedModel,useResponsesAPI:t,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens};return new Ml(n)}static createAnthropicAdapter(e){let t={authToken:e.apiKey,baseUrl:e.baseUrl,defaultModel:e.defaultModel||e.lastSelectedModel,maxTokens:e.maxTokens&&e.maxTokens<=8192?e.maxTokens:void 0,disableCaching:false};return new Nl(t)}static createKimiAdapter(e){let t={apiKey:e.apiKey,baseUrl:e.baseUrl,defaultModel:e.defaultModel||e.lastSelectedModel,maxTokens:e.maxTokens,maxInputTokens:e.maxInputTokens};return new Ol(t)}static createGeminiAdapter(e){let t={apiKey:e.apiKey,baseUrl:e.baseUrl,urlSuffix:e.urlSuffix,defaultModel:e.defaultModel||e.lastSelectedModel,retry:e.retry};return new Bl(t)}static isProtocolSupported(e){return ["openai","openai-responses","anthropic","anthropic-openai","kimi","gemini"].includes(e)}static getProtocolDisplayName(e){return {openai:"OpenAI (Chat Completions)","openai-responses":"OpenAI (Responses API)",anthropic:"Anthropic (Claude)","anthropic-openai":"Anthropic (OpenAI Format)",doubao:"\u8C46\u5305 (Doubao)",gemini:"Google Gemini",kimi:"Kimi (Moonshot)"}[e]||e}};var UI=16e3;function jI(s,e=UI){if(!s||s.length<=e)return s;let t=s.split(`
1997
1997
  `).length,n=s.length,r=Math.floor(e*.4),o=Math.floor(e*.4),i=r,a=s.length-o;for(;i>0&&(s.charCodeAt(i)&192)===128;)i--;for(;a<s.length&&(s.charCodeAt(a)&192)===128;)a++;let l=s.slice(0,i),c=s.slice(a),d=`
1998
1998
 
1999
1999
  \u2026[${n-l.length-c.length} chars truncated, total ${t} lines]\u2026
2000
2000
 
2001
- `;return l+d+c}var Fl=class{client;defaultModel;retryConfig;baseUrl;thinking;reasoning;caching;store;lastResponseId=null;sessionResponseIds=new Map;constructor(e){this.baseUrl=e.baseUrl||"https://ark.cn-beijing.volces.com/api/v3",this.defaultModel=e.defaultModel||"doubao-seed-1-6-251015",this.thinking=e.thinking,this.reasoning=e.reasoning,this.caching=e.caching||{type:"enabled"},this.store=e.store??true,this.client=CI.create({baseURL:this.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},timeout:18e4}),this.retryConfig=ar(void 0,{requestMaxRetries:3,streamMaxRetries:5,...e.retry}),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao] Initialized with:",{baseUrl:this.baseUrl,defaultModel:this.defaultModel,thinking:this.thinking,caching:this.caching,store:this.store});}async chat(e,t={}){let n="",r="",o=[],i,a;for await(let l of this.chatStreamed(e,t)){let c=l.choices?.[0]?.delta;if(c&&(c.content&&(n+=c.content),c.reasoning_content&&(r+=c.reasoning_content),c.tool_calls))for(let u of c.tool_calls){let d=o.find(m=>m.index===u.index);d?u.function?.arguments&&(d.function.arguments+=u.function.arguments):o.push({id:u.id||`call_${o.length}`,type:"function",function:{name:u.function?.name||"",arguments:u.function?.arguments||""},index:u.index});}l.usage&&(i=l.usage),l.id&&(a=l.id);}return a&&(this.lastResponseId=a,t.sessionId&&this.sessionResponseIds.set(t.sessionId,a)),{id:a||`chatcmpl-${Date.now()}`,choices:[{message:{role:"assistant",content:n||null,reasoning_content:r||void 0,...o.length>0?{tool_calls:o}:{}},finish_reason:o.length>0?"tool_calls":"stop"}],usage:i||{prompt_tokens:0,completion_tokens:0,total_tokens:0}}}async*chatStreamed(e,t={}){let{model:n=this.defaultModel,tools:r,temperature:o=.7,sessionId:i,signal:a}=t,l=t.previousResponseId;!l&&i&&(l=this.sessionResponseIds.get(i)),l||(l=this.lastResponseId||void 0);let c=this.buildPayload(e,{model:n,tools:r,temperature:o,structuredOutput:t.structuredOutput,maxInputTokens:t.maxInputTokens,previousResponseId:l}),u=`${this.baseUrl}/responses`;xe.llmRequest("doubao-responses",n,c,u,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
2001
+ `;return l+d+c}var Fl=class{client;defaultModel;retryConfig;baseUrl;thinking;reasoning;caching;store;lastResponseId=null;sessionResponseIds=new Map;constructor(e){this.baseUrl=e.baseUrl||"https://ark.cn-beijing.volces.com/api/v3",this.defaultModel=e.defaultModel||"doubao-seed-1-6-251015",this.thinking=e.thinking,this.reasoning=e.reasoning,this.caching=e.caching||{type:"enabled"},this.store=e.store??true,this.client=xI.create({baseURL:this.baseUrl,headers:{Authorization:`Bearer ${e.apiKey}`,"Content-Type":"application/json"},timeout:18e4}),this.retryConfig=ar(void 0,{requestMaxRetries:3,streamMaxRetries:5,...e.retry}),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao] Initialized with:",{baseUrl:this.baseUrl,defaultModel:this.defaultModel,thinking:this.thinking,caching:this.caching,store:this.store});}async chat(e,t={}){let n="",r="",o=[],i,a;for await(let l of this.chatStreamed(e,t)){let c=l.choices?.[0]?.delta;if(c&&(c.content&&(n+=c.content),c.reasoning_content&&(r+=c.reasoning_content),c.tool_calls))for(let u of c.tool_calls){let d=o.find(m=>m.index===u.index);d?u.function?.arguments&&(d.function.arguments+=u.function.arguments):o.push({id:u.id||`call_${o.length}`,type:"function",function:{name:u.function?.name||"",arguments:u.function?.arguments||""},index:u.index});}l.usage&&(i=l.usage),l.id&&(a=l.id);}return a&&(this.lastResponseId=a,t.sessionId&&this.sessionResponseIds.set(t.sessionId,a)),{id:a||`chatcmpl-${Date.now()}`,choices:[{message:{role:"assistant",content:n||null,reasoning_content:r||void 0,...o.length>0?{tool_calls:o}:{}},finish_reason:o.length>0?"tool_calls":"stop"}],usage:i||{prompt_tokens:0,completion_tokens:0,total_tokens:0}}}async*chatStreamed(e,t={}){let{model:n=this.defaultModel,tools:r,temperature:o=.7,sessionId:i,signal:a}=t,l=t.previousResponseId;!l&&i&&(l=this.sessionResponseIds.get(i)),l||(l=this.lastResponseId||void 0);let c=this.buildPayload(e,{model:n,tools:r,temperature:o,structuredOutput:t.structuredOutput,maxInputTokens:t.maxInputTokens,previousResponseId:l}),u=`${this.baseUrl}/responses`;xe.llmRequest("doubao-responses",n,c,u,{Authorization:"Bearer ***"}),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
2002
2002
  [Doubao Responses API Request]`),console.log("URL:",u),console.log("Payload:",JSON.stringify(c,null,2)));let d=this.retryConfig.streamMaxRetries,m=0;for(;;)try{if(a?.aborted){let v=new Error("Request aborted");throw v.name="AbortError",v}let g=Date.now(),h=await this.client.post("/responses",c,{responseType:"stream",signal:a,headers:{Accept:"text/event-stream"}});if(process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
2003
2003
  [Doubao Stream Started]`),console.log("Status:",h.status)),h.status!==200){let v="";for await(let b of h.data)v+=b.toString();throw new Error(`Doubao API error: ${h.status} - ${v}`)}yield*this.parseStreamResponse(h.data);let f=Date.now()-g;xe.llmResponse("doubao-responses",f,{},{}),process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
2004
2004
  [Doubao Stream Complete]`),console.log("Duration:",`${f}ms`));return}catch(g){let h="";if(g.response?.data)try{if(typeof g.response.data.on=="function"){let v=[];for await(let C of g.response.data)v.push(Buffer.from(C));let b=Buffer.concat(v).toString("utf-8");try{let C=JSON.parse(b),T=C.error||{message:C.message,code:C.code,type:C.type};h=JSON.stringify(T,null,2);}catch{h=b;}}else if(typeof g.response.data=="string")h=g.response.data;else if(g.response.data.error){let v=g.response.data.error,b={message:v.message,code:v.code,type:v.type};h=JSON.stringify(b,null,2);}else {let v=g.response.data,b={message:v.message,code:v.code,type:v.type,error:v.error};h=JSON.stringify(b,null,2);}}catch(v){h=`HTTP ${g.response?.status||"unknown"} (\u65E0\u6CD5\u8BFB\u53D6\u54CD\u5E94\u4F53: ${v})`;}let f=Zt(g);if(process.env.CLI_DEBUG_CONSOLE==="1"&&(console.log(`
2005
2005
  [Doubao Stream Error]`),console.log("Message:",g.message),console.log("Status:",g.response?.status),console.log("Error Details:",h||"none"),console.log("Retryable:",f.retryable)),h&&(f.message=`${g.message}
2006
2006
  ${h}`),xe.llmError("doubao-responses",g),f.retryable&&m<d){m++;let v=g.response?.headers?.["retry-after"],b=Gn(v),C=lr(b,m,this.retryConfig);console.log(`[Doubao] Stream failed (${f.code}), reconnecting in ${$t(C)} (${m}/${d})...`),yield {choices:[],type:"stream_retry",error:f.message,errorCode:f.code,attempt:m,maxRetries:d,delayMs:C};try{await Er(C,t.signal);}catch(T){throw T?.name==="AbortError",T}continue}throw f}}getResponseId(e){return e?this.sessionResponseIds.get(e)||null:this.lastResponseId}setResponseId(e,t){this.lastResponseId=e,t&&this.sessionResponseIds.set(t,e);}clearSession(e){e?this.sessionResponseIds.delete(e):this.lastResponseId=null;}setThinking(e){this.thinking=e;}setCaching(e){this.caching=e;}buildPayload(e,t){let {model:n,tools:r,temperature:o,structuredOutput:i,maxInputTokens:a,previousResponseId:l}=t,c=this.convertToDoubaoInput(e,l);this.extractSystemInstructions(e);let d={model:n,input:c,stream:true,temperature:o};return l&&(d.previous_response_id=l),this.thinking&&(d.thinking=this.thinking),this.reasoning&&(d.reasoning=this.reasoning),r&&r.length>0&&(d.tools=r.map(m=>({type:"function",name:m.name,description:m.description,parameters:m.parameters})),process.env.CLI_DEBUG_CONSOLE==="1"&&console.log(`[Doubao] Added ${d.tools.length} tools`)),i&&(d.text={format:{type:"json_schema",name:i.name,schema:i.schema}}),d}extractSystemInstructions(e){let t=e.filter(n=>n.role==="system").map(n=>Ce(n.content).trim()).filter(n=>n.length>0);return t.length>0?t.join(`
2007
2007
 
2008
- `):void 0}convertToDoubaoInput(e,t){let n=new Map;if(!e.some(i=>i.role==="tool"||i.role==="assistant"&&Array.isArray(i.tool_calls)&&i.tool_calls.length>0))return e.map(i=>({role:i.role,content:Ce(i.content)}));let o=e.filter(i=>i.role!=="system");if(t){let i=[],a=false;for(let l=o.length-1;l>=0;l--){let c=o[l];if(c.role==="user"&&!a)i.unshift(...this.convertMessageToInputItems(c,n)),a=true;else if(c.role==="tool"&&a)i.unshift(...this.convertMessageToInputItems(c,n));else if(a)break}return i}return o.flatMap(i=>this.convertMessageToInputItems(i,n)).filter(i=>i!==null)}convertMessageToInputItems(e,t){if(e.role==="assistant"){let r=[],o=Ce(e.content);if(o.trim().length>0&&r.push({type:"message",role:"assistant",status:"completed",content:[{type:"input_text",text:o}]}),Array.isArray(e.tool_calls)&&e.tool_calls.length>0)for(let i of e.tool_calls){let a=this.normalizeCallId(i.id,t);r.push({type:"function_call",id:a,call_id:a,name:i.function.name,arguments:i.function.arguments||"",status:"completed"});}return r}if(e.role==="tool"){let r=this.normalizeCallId(e.tool_call_id||e.name,t),o=Ce(e.content),i=UI(o);return [{type:"function_call_output",call_id:r,output:i}]}if(Array.isArray(e.content)){let r=[];for(let o of e.content)o.type==="text"&&o.text.trim()?r.push({type:"input_text",text:o.text}):o.type==="image_url"&&r.push({type:"input_image",image_url:o.image_url.url});return r.length===0?[]:[{type:"message",role:"user",content:r}]}let n=Ce(e.content);return !n||n.trim().length===0?[]:[{type:"message",role:"user",content:[{type:"input_text",text:n}]}]}normalizeCallId(e,t){if(e&&t.has(e))return t.get(e);let n;return e?n=e.startsWith("fc_")?e:`fc_${e}`:n=`fc_${Math.random().toString(36).slice(2,10)}`,e?t.set(e,n):t.set(n,n),n}async*parseStreamResponse(e){let t="",n=new Map,r=0,o=null,i=null,a=false,l=false,c,u=m=>{let g={...m};return l||(g.role="assistant",l=true),{id:c,choices:[{index:0,delta:g}]}};for await(let m of e){t+=m.toString();let g=t.split(`
2008
+ `):void 0}convertToDoubaoInput(e,t){let n=new Map;if(!e.some(i=>i.role==="tool"||i.role==="assistant"&&Array.isArray(i.tool_calls)&&i.tool_calls.length>0))return e.map(i=>({role:i.role,content:Ce(i.content)}));let o=e.filter(i=>i.role!=="system");if(t){let i=[],a=false;for(let l=o.length-1;l>=0;l--){let c=o[l];if(c.role==="user"&&!a)i.unshift(...this.convertMessageToInputItems(c,n)),a=true;else if(c.role==="tool"&&a)i.unshift(...this.convertMessageToInputItems(c,n));else if(a)break}return i}return o.flatMap(i=>this.convertMessageToInputItems(i,n)).filter(i=>i!==null)}convertMessageToInputItems(e,t){if(e.role==="assistant"){let r=[],o=Ce(e.content);if(o.trim().length>0&&r.push({type:"message",role:"assistant",status:"completed",content:[{type:"input_text",text:o}]}),Array.isArray(e.tool_calls)&&e.tool_calls.length>0)for(let i of e.tool_calls){let a=this.normalizeCallId(i.id,t);r.push({type:"function_call",id:a,call_id:a,name:i.function.name,arguments:i.function.arguments||"",status:"completed"});}return r}if(e.role==="tool"){let r=this.normalizeCallId(e.tool_call_id||e.name,t),o=Ce(e.content),i=jI(o);return [{type:"function_call_output",call_id:r,output:i}]}if(Array.isArray(e.content)){let r=[];for(let o of e.content)o.type==="text"&&o.text.trim()?r.push({type:"input_text",text:o.text}):o.type==="image_url"&&r.push({type:"input_image",image_url:o.image_url.url});return r.length===0?[]:[{type:"message",role:"user",content:r}]}let n=Ce(e.content);return !n||n.trim().length===0?[]:[{type:"message",role:"user",content:[{type:"input_text",text:n}]}]}normalizeCallId(e,t){if(e&&t.has(e))return t.get(e);let n;return e?n=e.startsWith("fc_")?e:`fc_${e}`:n=`fc_${Math.random().toString(36).slice(2,10)}`,e?t.set(e,n):t.set(n,n),n}async*parseStreamResponse(e){let t="",n=new Map,r=0,o=null,i=null,a=false,l=false,c,u=m=>{let g={...m};return l||(g.role="assistant",l=true),{id:c,choices:[{index:0,delta:g}]}};for await(let m of e){t+=m.toString();let g=t.split(`
2009
2009
  `);t=g.pop()||"";for(let h of g){let f=h.trim();if(!f||!f.startsWith("data: "))continue;let v=f.slice(6);if(v==="[DONE]"){process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao Stream] Received [DONE]");continue}let b;try{b=JSON.parse(v);}catch{process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao Stream] Invalid JSON:",v);continue}switch(process.env.CLI_DEBUG_CONSOLE==="1"&&console.log("[Doubao Stream Event]",b.type,JSON.stringify(b,null,2).slice(0,200)),b.type){case "response.created":case "response.in_progress":b.response?.id&&(c=b.response.id);break;case "response.output_text.delta":{let C=typeof b.delta=="string"?b.delta:"";if(!C)break;a=true,yield u({content:C});break}case "response.reasoning_summary_text.delta":{let C=typeof b.delta=="string"?b.delta:"";if(!C)break;a=true,yield u({reasoning_content:C});break}case "response.reasoning_summary_part.added":case "response.reasoning_summary_part.done":break;case "response.output_item.added":{if(b.item?.type==="function_call"){let C=b.item,T=C.id||`item_${b.output_index}`,w={id:C.call_id||C.id||`call_${Date.now()}_${r}`,name:C.name,index:r++,arguments:""};n.set(T,w),a=true,yield u({tool_calls:[{index:w.index,id:w.id,type:"function",function:{name:w.name}}]});}else if(b.item?.type==="reasoning"){let C=b.item;if(C.summary?.length>0){let T=C.summary.map(w=>w.text).join(`
2010
2010
  `);T&&(yield u({reasoning_content:T}));}}break}case "response.function_call_arguments.delta":{let C=b.item_id?n.get(b.item_id):void 0;if(!C)break;let T=typeof b.delta=="string"?b.delta:"";if(!T)break;C.arguments+=T,a=true,yield u({tool_calls:[{index:C.index,id:C.id,type:"function",function:{name:C.name,arguments:T}}]});break}case "response.completed":{o=b.response||null,i=b.response?.usage||null,b.response?.id&&(c=b.response.id,this.lastResponseId=c);break}case "response.error":case "response.failed":{let C=b.error?.message||b.error?.code||"Doubao stream failed";throw new Error(C)}}}}if(!a&&o){let m=Array.isArray(o.output)?o.output:[],g="",h="";for(let f of m)if(f?.type==="message"&&Array.isArray(f.content))for(let v of f.content)v?.type==="output_text"&&typeof v.text=="string"&&(g+=v.text);else if(f?.type==="reasoning"){let v=f;v.summary?.length>0&&(h=v.summary.map(b=>b.text).join(`
2011
- `));}(g||h)&&(yield {id:c,choices:[{index:0,delta:{role:"assistant",content:g||void 0,reasoning_content:h||void 0}}]});}let d={id:c,choices:[{index:0,delta:{},finish_reason:n.size>0?"tool_calls":"stop"}]};i&&(d.usage=this.normalizeUsage(i)),yield d;}normalizeUsage(e){let t={prompt_tokens:e.input_tokens||0,completion_tokens:e.output_tokens||0,total_tokens:e.total_tokens||0};return e.input_tokens_details?.cached_tokens!==void 0&&(t.cached_tokens=e.input_tokens_details.cached_tokens,t.prompt_tokens_details={cached_tokens:e.input_tokens_details.cached_tokens}),e.output_tokens_details?.reasoning_tokens!==void 0&&(t.completion_tokens_details={reasoning_tokens:e.output_tokens_details.reasoning_tokens}),t}};var up="# \u4F1A\u8BDD\u5386\u53F2\u6458\u8981",jI=60,GI=200,WI=`You are a highly skilled assistant tasked with summarizing conversation history.
2011
+ `));}(g||h)&&(yield {id:c,choices:[{index:0,delta:{role:"assistant",content:g||void 0,reasoning_content:h||void 0}}]});}let d={id:c,choices:[{index:0,delta:{},finish_reason:n.size>0?"tool_calls":"stop"}]};i&&(d.usage=this.normalizeUsage(i)),yield d;}normalizeUsage(e){let t={prompt_tokens:e.input_tokens||0,completion_tokens:e.output_tokens||0,total_tokens:e.total_tokens||0};return e.input_tokens_details?.cached_tokens!==void 0&&(t.cached_tokens=e.input_tokens_details.cached_tokens,t.prompt_tokens_details={cached_tokens:e.input_tokens_details.cached_tokens}),e.output_tokens_details?.reasoning_tokens!==void 0&&(t.completion_tokens_details={reasoning_tokens:e.output_tokens_details.reasoning_tokens}),t}};var up="# \u4F1A\u8BDD\u5386\u53F2\u6458\u8981",GI=60,WI=200,HI=`You are a highly skilled assistant tasked with summarizing conversation history.
2012
2012
 
2013
2013
  Your goal is to create a concise yet comprehensive summary that captures:
2014
2014
  1. The main topics and objectives discussed
@@ -2025,7 +2025,7 @@ Guidelines:
2025
2025
  - Write in the same language as the conversation (Chinese if Chinese, English if English)
2026
2026
  - Format the summary clearly with sections if needed
2027
2027
 
2028
- Output only the summary, no additional commentary.`,HI=`\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u5BF9\u8BDD\u5386\u53F2\u603B\u7ED3\u52A9\u624B\u3002
2028
+ Output only the summary, no additional commentary.`,zI=`\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u5BF9\u8BDD\u5386\u53F2\u603B\u7ED3\u52A9\u624B\u3002
2029
2029
 
2030
2030
  \u4F60\u7684\u76EE\u6807\u662F\u521B\u5EFA\u4E00\u4E2A\u7B80\u6D01\u4F46\u5168\u9762\u7684\u6458\u8981\uFF0C\u9700\u8981\u5305\u542B\uFF1A
2031
2031
  1. \u8BA8\u8BBA\u7684\u4E3B\u8981\u4E3B\u9898\u548C\u76EE\u6807
@@ -2042,7 +2042,7 @@ Output only the summary, no additional commentary.`,HI=`\u4F60\u662F\u4E00\u4E2A
2042
2042
  - \u4F7F\u7528\u4E0E\u5BF9\u8BDD\u76F8\u540C\u7684\u8BED\u8A00\uFF08\u4E2D\u6587\u5BF9\u8BDD\u7528\u4E2D\u6587\uFF0C\u82F1\u6587\u5BF9\u8BDD\u7528\u82F1\u6587\uFF09
2043
2043
  - \u5982\u679C\u9700\u8981\uFF0C\u4F7F\u7528\u5206\u8282\u6765\u6E05\u6670\u5730\u683C\u5F0F\u5316\u6458\u8981
2044
2044
 
2045
- \u53EA\u8F93\u51FA\u6458\u8981\uFF0C\u4E0D\u8981\u6DFB\u52A0\u989D\u5916\u7684\u8BC4\u8BBA\u3002`;function zI(s){for(let e of s){let t=Ce(e.content);if(/[\u4e00-\u9fa5]/.test(t))return "zh"}return "en"}function qI(s){let e=[];for(let t of s){let n=t.role==="assistant"?"Assistant":t.role==="user"?"User":t.role==="tool"?"Tool Result":t.role,r=Ce(t.content),o="";if(t.tool_calls?.length&&(o=` [Called tools: ${t.tool_calls.map(a=>a.function.name).join(", ")}]`),r||o){let i=r.length>1e3?r.slice(0,1e3)+"...[truncated]":r;e.push(`[${n}]${o}
2045
+ \u53EA\u8F93\u51FA\u6458\u8981\uFF0C\u4E0D\u8981\u6DFB\u52A0\u989D\u5916\u7684\u8BC4\u8BBA\u3002`;function qI(s){for(let e of s){let t=Ce(e.content);if(/[\u4e00-\u9fa5]/.test(t))return "zh"}return "en"}function KI(s){let e=[];for(let t of s){let n=t.role==="assistant"?"Assistant":t.role==="user"?"User":t.role==="tool"?"Tool Result":t.role,r=Ce(t.content),o="";if(t.tool_calls?.length&&(o=` [Called tools: ${t.tool_calls.map(a=>a.function.name).join(", ")}]`),r||o){let i=r.length>1e3?r.slice(0,1e3)+"...[truncated]":r;e.push(`[${n}]${o}
2046
2046
  ${i}`);}}return `Please summarize the following conversation history:
2047
2047
 
2048
2048
  ---
@@ -2052,9 +2052,9 @@ ${e.join(`
2052
2052
  `)}
2053
2053
  ---
2054
2054
 
2055
- Provide a comprehensive summary:`}function xi(s){let t=Ce(s.content).length,n=s.tool_calls?JSON.stringify(s.tool_calls).length:0;return Math.ceil((t+n)/4)}function pp(s,e){return s.length<=e?s:s.slice(0,e-1).trimEnd()+"\u2026"}function KI(s){return s.replace(/\s+/g," ").trim()}function dp(s,e){if(s.length===0)return {summary:"",lines:0};let t=[];for(let r of s){if(t.length>=jI)break;let o=r.role==="assistant"?"Assistant":r.role==="user"?"User":r.role,i=Ce(r.content),l=(i?KI(i):"")||(r.tool_calls?.length?`Tool calls: ${r.tool_calls.map(c=>c.function.name).join(", ")}`:"No textual content");t.push(`- [${o}] ${pp(l,GI)}`);}return {summary:`${e}
2055
+ Provide a comprehensive summary:`}function xi(s){let t=Ce(s.content).length,n=s.tool_calls?JSON.stringify(s.tool_calls).length:0;return Math.ceil((t+n)/4)}function pp(s,e){return s.length<=e?s:s.slice(0,e-1).trimEnd()+"\u2026"}function JI(s){return s.replace(/\s+/g," ").trim()}function dp(s,e){if(s.length===0)return {summary:"",lines:0};let t=[];for(let r of s){if(t.length>=GI)break;let o=r.role==="assistant"?"Assistant":r.role==="user"?"User":r.role,i=Ce(r.content),l=(i?JI(i):"")||(r.tool_calls?.length?`Tool calls: ${r.tool_calls.map(c=>c.function.name).join(", ")}`:"No textual content");t.push(`- [${o}] ${pp(l,WI)}`);}return {summary:`${e}
2056
2056
  ${t.join(`
2057
- `)}`,lines:t.length}}async function mp(s){let{session:e,profile:t,llmProvider:n,model:r,onProgress:o,timeout:i=6e4,signal:a}=s,l=s.tailTokenBudget??t.tailTokenBudget??2e4;if(!l||l<=0)return null;o?.("analyzing","Analyzing conversation history...");let c=await e.getTimeline(),u=c.map((W,H)=>({entry:W,index:H})).filter(({entry:W})=>W.item.type==="message");if(u.length===0)return null;u.filter(({entry:W})=>W.item.data.role==="system");let m=u.filter(({entry:W})=>W.item.data.role!=="system");if(m.length===0)return null;let g=0,h=m.length;for(let W=m.length-1;W>=0;W--){let H=m[W].entry.item.data;if(g+=xi(H),g>=l){h=W;break}}if(h>=m.length){if(m.length<=2)return null;h=Math.floor(m.length/2);}let f=m.slice(0,h).map(({entry:W})=>W.item.data);if(f.length===0)return null;let v={userTokens:0,assistantTokens:0,toolTokens:0,totalTokens:0};for(let W of f){let H=xi(W);W.role==="user"?v.userTokens+=H:W.role==="assistant"?v.assistantTokens+=H:W.role==="tool"&&(v.toolTokens+=H),v.totalTokens+=H;}let b=m.slice(h).map(({entry:W})=>W.item.data),C={userTokens:0,assistantTokens:0,toolTokens:0,totalTokens:0};for(let W of b){let H=xi(W);W.role==="user"?C.userTokens+=H:W.role==="assistant"?C.assistantTokens+=H:W.role==="tool"&&(C.toolTokens+=H),C.totalTokens+=H;}let T=v.totalTokens;o?.("summarizing",`Summarizing ${f.length} messages with AI...`);let w=zI(f),E=w==="zh"?HI:WI,N=qI(f),D,$;try{let W=new AbortController,H=setTimeout(()=>W.abort(),i),ne=a?AbortSignal.any([a,W.signal]):W.signal;try{let J=await n.chat([{role:"system",content:E},{role:"user",content:N}],{model:r,temperature:.3,signal:ne});clearTimeout(H),D=Ce(J.choices[0]?.message?.content)||"",$=J.usage?.total_tokens;}catch(J){throw clearTimeout(H),J?.name==="AbortError"||J?.code==="ABORT_ERR"?console.warn("[SmartCompact] LLM call timed out or was cancelled, falling back to lightweight"):console.error("[SmartCompact] LLM call failed:",J.message),J}if(!D.trim()){console.warn("[SmartCompact] LLM returned empty summary, falling back to lightweight");let{summary:J}=dp(f,up);D=J;}}catch(W){console.error("[SmartCompact] LLM call failed, falling back to lightweight:",W.message);let{summary:H}=dp(f,up);D=H;}o?.("saving","Saving compacted history...");let M=`${w==="zh"?"# \u5BF9\u8BDD\u5386\u53F2\u6458\u8981\uFF08AI \u751F\u6210\uFF09":"# Conversation Summary (AI Generated)"}
2057
+ `)}`,lines:t.length}}async function mp(s){let{session:e,profile:t,llmProvider:n,model:r,onProgress:o,timeout:i=6e4,signal:a}=s,l=s.tailTokenBudget??t.tailTokenBudget??2e4;if(!l||l<=0)return null;o?.("analyzing","Analyzing conversation history...");let c=await e.getTimeline(),u=c.map((W,H)=>({entry:W,index:H})).filter(({entry:W})=>W.item.type==="message");if(u.length===0)return null;u.filter(({entry:W})=>W.item.data.role==="system");let m=u.filter(({entry:W})=>W.item.data.role!=="system");if(m.length===0)return null;let g=0,h=m.length;for(let W=m.length-1;W>=0;W--){let H=m[W].entry.item.data;if(g+=xi(H),g>=l){h=W;break}}if(h>=m.length){if(m.length<=2)return null;h=Math.floor(m.length/2);}let f=m.slice(0,h).map(({entry:W})=>W.item.data);if(f.length===0)return null;let v={userTokens:0,assistantTokens:0,toolTokens:0,totalTokens:0};for(let W of f){let H=xi(W);W.role==="user"?v.userTokens+=H:W.role==="assistant"?v.assistantTokens+=H:W.role==="tool"&&(v.toolTokens+=H),v.totalTokens+=H;}let b=m.slice(h).map(({entry:W})=>W.item.data),C={userTokens:0,assistantTokens:0,toolTokens:0,totalTokens:0};for(let W of b){let H=xi(W);W.role==="user"?C.userTokens+=H:W.role==="assistant"?C.assistantTokens+=H:W.role==="tool"&&(C.toolTokens+=H),C.totalTokens+=H;}let T=v.totalTokens;o?.("summarizing",`Summarizing ${f.length} messages with AI...`);let w=qI(f),E=w==="zh"?zI:HI,N=KI(f),D,$;try{let W=new AbortController,H=setTimeout(()=>W.abort(),i),ne=a?AbortSignal.any([a,W.signal]):W.signal;try{let J=await n.chat([{role:"system",content:E},{role:"user",content:N}],{model:r,temperature:.3,signal:ne});clearTimeout(H),D=Ce(J.choices[0]?.message?.content)||"",$=J.usage?.total_tokens;}catch(J){throw clearTimeout(H),J?.name==="AbortError"||J?.code==="ABORT_ERR"?console.warn("[SmartCompact] LLM call timed out or was cancelled, falling back to lightweight"):console.error("[SmartCompact] LLM call failed:",J.message),J}if(!D.trim()){console.warn("[SmartCompact] LLM returned empty summary, falling back to lightweight");let{summary:J}=dp(f,up);D=J;}}catch(W){console.error("[SmartCompact] LLM call failed, falling back to lightweight:",W.message);let{summary:H}=dp(f,up);D=H;}o?.("saving","Saving compacted history...");let M=`${w==="zh"?"# \u5BF9\u8BDD\u5386\u53F2\u6458\u8981\uFF08AI \u751F\u6210\uFF09":"# Conversation Summary (AI Generated)"}
2058
2058
 
2059
2059
  ${D}`,_=u.length-f.length,P=u[0]?.entry.timestamp??Date.now(),j={item:{type:"message",data:{role:"user",content:M,name:"SmartCompactSummary"}},timestamp:P,seq:0},z={item:{type:"compacted",data:{summary:pp(D,2e3),originalCount:f.length,compactedAt:new Date().toISOString(),method:"smart",llmTokensUsed:$}},timestamp:P,seq:0},A=[],O=false,F=new Set(m.slice(0,h).map(({entry:W})=>W));for(let W of c){if(W.item.type!=="message"){A.push({...W});continue}if(W.item.data.role==="system"){A.push({...W});continue}F.has(W)?O||(A.push({...j}),A.push({...z}),O=true):A.push({...W});}if(!O)return null;let U=A.map((W,H)=>({item:W.item,timestamp:W.timestamp??Date.now(),seq:H}));await e.replaceTimeline(U);let K=xi({content:M}),de={before:v,after:{userTokens:C.userTokens,assistantTokens:C.assistantTokens,toolTokens:C.toolTokens,summaryTokens:K,totalTokens:C.totalTokens+K},saved:{userTokens:v.userTokens,assistantTokens:v.assistantTokens,toolTokens:v.toolTokens,totalTokens:v.totalTokens-K}};return {removedMessages:f.length,keptMessages:_,summaryText:M,estimatedTokensSaved:T,llmTokensUsed:$,detailedStats:de}}async function ob(s){let{session:e,profile:t}=s,n=s.tailTokenBudget??t.tailTokenBudget??2e4;if(!n||n<=0)return null;let r=await e.getTimeline(),o=r.map((E,N)=>({entry:E,index:N})).filter(({entry:E})=>E.item.type==="message");if(o.length===0)return null;o.filter(({entry:E})=>E.item.data.role==="system");let a=o.filter(({entry:E})=>E.item.data.role!=="system");if(a.length===0)return null;let l=0,c=a.length;for(let E=a.length-1;E>=0;E--){let N=a[E].entry.item.data;if(l+=xi(N),l>=n){c=E;break}}if(c>=a.length){if(a.length<=2)return null;c=Math.floor(a.length/2);}let u=a.slice(0,c).map(({entry:E})=>E.item.data);if(u.length===0)return null;let{summary:d,lines:m}=dp(u,s.summaryHeader??up);if(!d.trim())return null;let g=a.length-u.length,h=a[0]?.entry.timestamp??Date.now(),f={item:{type:"message",data:{role:"user",content:d,name:"CompatSummary"}},timestamp:h,seq:0},v={item:{type:"compacted",data:{summary:pp(d,2e3),originalCount:u.length,compactedAt:new Date().toISOString()}},timestamp:h,seq:0},b=[],C=false,T=new Set(a.slice(0,c).map(({entry:E})=>E));for(let E of r){if(E.item.type!=="message"){b.push({...E});continue}if(E.item.data.role==="system"){b.push({...E});continue}T.has(E)?C||(b.push({...f}),b.push({...v}),C=true):b.push({...E});}if(!C)return null;let w=b.map((E,N)=>({item:E.item,timestamp:E.timestamp??Date.now(),seq:N}));return await e.replaceTimeline(w),{removedMessages:u.length,keptMessages:g,summaryText:d,summaryLines:m}}var Ul=class{extractFromAssistantMessage(e,t){if(!e||e.length===0)return;let n=[/I(?:'ll| will) (\w+.*?) to (.*?)(?:\.|$)/i,/Let me (\w+.*?) to (.*?)(?:\.|$)/i,/(?:I'm|I am) going to (\w+.*?) to (.*?)(?:\.|$)/i,/(?:I'm|I am) (\w+ing.*?) to (.*?)(?:\.|$)/i,/To (.*?)[,,] I(?:'ll| will) (\w+.*?)(?:\.|$)/i,/(?:First|Now|Next|Then)[,,] (?:I'll |I will |let me )?(\w+.*?)(?:\.|$)/i,/(?:我将|我会|让我)([^。,,]+)(?:来|以便|用于)([^。,,]+)/,/(?:首先|现在|接下来|然后)[,,](?:我将|我会|让我)?([^。,,]+)/];for(let i of n){let a=e.match(i);if(a){let l=a[2]||a[1];if(l&&l.length>0&&l.length<200)return l.trim()}}let r=t.toLowerCase(),o=e.split(/[.。!!??]/);for(let i of o)if(i.toLowerCase().includes(r)||i.toLowerCase().includes("read")||i.toLowerCase().includes("search")||i.toLowerCase().includes("file")){let a=i.trim();if(a.length>10&&a.length<200)return a}}extractActionFromToolName(e){return {readfile:"read",write_file:"write",create_file:"create",edit_file:"edit",Edit:"edit",search:"search",list_directory:"list",LS:"list",Glob:"find",find_files:"find",Execute:"execute",execute:"execute"}[e]||e.toLowerCase()}},jl=class{generateEquivalentCommand(e,t){switch(e){case "search":return this.generateSearchCommand(t);case "Glob":case "find_files":return this.generateFindCommand(t);case "Execute":case "execute":return this.generateExecuteCommand(t);case "readfile":return this.generateReadCommand(t);case "list_directory":case "LS":return this.generateLsCommand(t);case "write_file":case "create_file":return this.generateWriteCommand(t);default:return}}generateSearchCommand(e){let t="rg";e.case_insensitive&&(t+=" -i"),e.line_numbers&&(t+=" -n"),e.context_lines?t+=` -C ${e.context_lines}`:e.context?t+=` -C ${e.context}`:(e.context_before&&(t+=` -B ${e.context_before}`),e.context_after&&(t+=` -A ${e.context_after}`));let n=e.pattern||"";t+=` "${this.escapeShellArg(n)}"`;let r=e.path||e.directory||".";return t+=` ${this.escapeShellPath(r)}`,e.type&&(t+=` --type=${e.type}`),e.file_pattern?t+=` -g "${this.escapeShellArg(e.file_pattern)}"`:e.glob_pattern&&(t+=` -g "${this.escapeShellArg(e.glob_pattern)}"`),t}generateFindCommand(e){let t="find",n=e.folder||e.path||".";if(t+=` ${this.escapeShellPath(n)}`,e.patterns&&Array.isArray(e.patterns)&&e.patterns.length>0)if(e.patterns.length===1)t+=` -name "${this.escapeShellArg(e.patterns[0])}"`;else {let r=e.patterns.map(o=>`-name "${this.escapeShellArg(o)}"`).join(" -o ");t+=` \\( ${r} \\)`;}return e.excludePatterns&&Array.isArray(e.excludePatterns)&&e.excludePatterns.forEach(r=>{t+=` ! -path "${this.escapeShellArg(r)}"`;}),e.maxDepth&&(t+=` -maxdepth ${e.maxDepth}`),e.type==="f"?t+=" -type f":e.type==="d"&&(t+=" -type d"),t}generateExecuteCommand(e){return e.command||""}generateReadCommand(e){let t=e.path||e.file_path||e.filename||"";if(e.start_line&&e.num_lines){let n=e.start_line+e.num_lines-1;return `sed -n '${e.start_line},${n}p' ${this.escapeShellPath(t)}`}return e.num_lines&&!e.start_line?`head -n ${e.num_lines} ${this.escapeShellPath(t)}`:`cat ${this.escapeShellPath(t)}`}generateLsCommand(e){let t="ls";(e.all||e.show_hidden)&&(t+=" -a"),(e.long||e.detailed)&&(t+=" -l"),t.includes("-")||(t+=" -la");let n=e.path||e.directory||e.directory_path||".";return t+=` ${this.escapeShellPath(n)}`,t}generateWriteCommand(e){let t=e.path||e.file_path||e.filename||"",n=e.content||"";return n.length<100&&!n.includes(`
2060
2060
  `)?`echo "${this.escapeShellArg(n)}" > ${this.escapeShellPath(t)}`:`# Use editor to create ${t}`}escapeShellArg(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}escapeShellPath(e){return /[\s()[\]{}$`!*?<>|&;]/.test(e)?`"${this.escapeShellArg(e)}"`:e}};function Ks(s,e){let t=["path","file_path","filePath","filename","directory","folder","dir","file","output_path","input_path"];for(let n of t)if(e[n]&&typeof e[n]=="string")return e[n];switch(s){case "Execute":case "execute":if(e.command&&typeof e.command=="string"){let r=e.command,o=r.match(/(?:^|\s)([./~][\w/.-]+\.\w+)(?:\s|$)/);return o?o[1]:r.substring(0,50)+(r.length>50?"...":"")}break;case "search":return e.path||e.directory||".";case "Glob":case "find_files":let n=e.folder||e.path||".";return e.patterns&&Array.isArray(e.patterns)?`${n} (${e.patterns.join(", ")})`:n;case "read_multiple_files":if(e.files&&Array.isArray(e.files))return e.files.length>1?`${e.files.length} files`:e.files[0];break}}function ib(s,e){switch(s){case "readfile":let t=Ks(s,e);return t?`Reading ${t}`:"Reading file";case "write_file":case "create_file":let n=Ks(s,e);return n?`Writing ${n}`:"Writing file";case "edit_file":case "Edit":let r=Ks(s,e);return r?`Editing ${r}`:"Editing file";case "search":let o=e.pattern||e.query;return o?`Searching for "${o}"`:"Searching code";case "list_directory":case "LS":return `Listing ${Ks(s,e)||"."}`;case "Glob":case "find_files":return e.patterns&&Array.isArray(e.patterns)?`Finding files: ${e.patterns.join(", ")}`:"Finding files";case "Execute":case "execute":let a=e.command||"";return a.length>60?`Running: ${a.substring(0,60)}...`:`Running: ${a}`;case "read_multiple_files":return e.files&&Array.isArray(e.files)?`Reading ${e.files.length} files`:"Reading multiple files";default:return `Executing ${s}`}}var Gl=class{batchTimeWindow;activeBatches=new Map;pendingCalls=new Map;batchableTools=new Set(["readfile","write_file","create_file","list_directory","LS","Glob","find_files","read_multiple_files"]);constructor(e=200){this.batchTimeWindow=e;}detectBatch(e,t,n,r,o){if(!this.isBatchable(t))return {type:"single",merge:false};let i=this.pendingCalls.get(t)||[];if(i.length===0)return this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:n,startTime:o,args:r}]),{type:"single",merge:false};let a=i[i.length-1];if(o-a.startTime>this.batchTimeWindow)return this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:n,startTime:o,args:r}]),{type:"single",merge:false};if(i.some(u=>u.targetPath===n))return {type:"single",merge:false};if(i.length===1){let u=this.createBatch(a,e,n,o);return i.push({toolId:e,toolName:t,targetPath:n,startTime:o,args:r}),{type:"batch",merge:false,batchId:u,shouldCreateBatch:true}}else {let u=this.findActiveBatch(t);return u?(i.push({toolId:e,toolName:t,targetPath:n,startTime:o,args:r}),this.updateBatch(u,n,o),{type:"batch",merge:true,batchId:u}):(this.pendingCalls.set(t,[{toolId:e,toolName:t,targetPath:n,startTime:o,args:r}]),{type:"single",merge:false})}}recordCompletion(e,t){let n=this.findActiveBatch(e);if(n){let r=this.activeBatches.get(n);r&&(r.completed++,r.completed>=r.total&&this.completeBatch(n));}}getBatchInfo(e){return this.activeBatches.get(e)}isBatchable(e){return this.batchableTools.has(e)}createBatch(e,t,n,r){let o=`batch-${e.toolName}-${r}`;return this.activeBatches.set(o,{batchId:o,toolName:e.toolName,targets:[e.targetPath,n],startTime:e.startTime,lastCallTime:r,completed:0,total:2}),o}updateBatch(e,t,n){let r=this.activeBatches.get(e);r&&(r.targets.push(t),r.total++,r.lastCallTime=n);}findActiveBatch(e){for(let[t,n]of this.activeBatches.entries())if(n.toolName===e)return t}completeBatch(e){this.activeBatches.delete(e);let t=this.activeBatches.get(e);t&&this.pendingCalls.delete(t.toolName);}cleanupExpiredBatches(e){let t=this.batchTimeWindow*5,n=[];this.activeBatches.forEach((o,i)=>{e-o.lastCallTime>t&&n.push(i);}),n.forEach(o=>this.completeBatch(o));let r=[];this.pendingCalls.forEach((o,i)=>{if(o.length>0){let a=o[o.length-1];e-a.startTime>t&&r.push(i);}}),r.forEach(o=>this.pendingCalls.delete(o));}reset(){this.activeBatches.clear(),this.pendingCalls.clear();}getStats(){let e=[];return this.activeBatches.forEach((t,n)=>{e.push({batchId:n,toolName:t.toolName,total:t.total,completed:t.completed});}),{activeBatches:this.activeBatches.size,pendingCalls:this.pendingCalls.size,batches:e}}};Z();function ab(s){if(!s||s.trim().length===0)return null;let e=s.trim();if(!e.endsWith("}")){let l=e+"}";try{return JSON.parse(l),console.log("[JsonRepair] Fixed by adding closing }"),l}catch{}}let t=e.replace(/,\s*$/,"");if(!t.endsWith("}")){let l=t+"}";try{return JSON.parse(l),console.log("[JsonRepair] Fixed by removing trailing comma and adding }"),l}catch{}}if(e.lastIndexOf('"')>0){let l=0,c=false;for(let u=0;u<e.length;u++){if(c){c=false;continue}if(e[u]==="\\"){c=true;continue}e[u]==='"'&&l++;}if(l%2===1){let u=e+'"}';try{return JSON.parse(u),console.log("[JsonRepair] Fixed by closing unclosed string"),u}catch{}}}let r=0,o=0,i=false,a=false;for(let l of e){if(a){a=false;continue}if(l==="\\"){a=true;continue}if(l==='"'){i=!i;continue}i||(l==="{"?r++:l==="}"?r--:l==="["?o++:l==="]"&&o--);}for(i&&(e+='"');o>0;)e+="]",o--;for(;r>0;)e+="}",r--;try{return JSON.parse(e),console.log("[JsonRepair] Fixed by force-closing structures"),e}catch{return null}}function lb(s,e){if(!e||e.trim().length===0)return {isTruncated:false};if(!e.trim().endsWith("}"))return {isTruncated:true,reason:"JSON structure incomplete - missing closing brace"};if(s==="write_file"||s==="edit_file"){if(!e.includes('"content"')&&!e.includes('"new_string"'))return {isTruncated:true,reason:"File content field is missing - likely truncated during streaming"};let n=e.match(/"content"\s*:\s*"([^]*)/);if(n){let r=n[1],o=0,i=false;for(let a of r){if(i){i=false;continue}if(a==="\\"){i=true;continue}if(a==='"'){o++;break}}if(o===0)return {isTruncated:true,reason:"Content string is unclosed - truncated during streaming"}}}return {isTruncated:false}}function cb(s,e,t){let n=Rg(s,e,t),r=ga(n);return {success:false,error:n.code,code:n.code,category:n.category,message:n.message,suggestion:r,retryable:n.retryable,receivedArgs:e?.substring(0,500)}}var db=12e3,Wl=class{runner;memory;sessionManager;sessionSync;session;sessionEnabled;memoryPressure;compatProfile;workDir;model;systemPrompt;sandboxSetter;llmProvider;sessionSeed;sessionTotalInputTokens=0;sessionTotalOutputTokens=0;lastMemoryPressureState="unknown";autoCompactionInProgress=false;isRunning=false;shouldInterrupt=false;abortController=null;interruptResolver=null;interruptPromise=null;compressionMode="sync";eventEmitter=new EventEmitter;descriptionExtractor=new Ul;commandGenerator=new jl;lastAssistantMessage="";batchDetector=new Gl;toolCallIdCounter=0;recentToolCalls=new Map;currentTaskMetadata;constructor(e){this.runner=e.runner,this.memory=e.memory,this.sessionManager=e.sessionManager,this.sessionSync=e.sessionSync,this.session=e.session,this.sessionEnabled=e.sessionEnabled??true,this.workDir=he__default.resolve(e.workDir),this.model=e.model,this.systemPrompt=e.systemPrompt,this.memoryPressure=e.memoryPressure,this.compatProfile=e.compatProfile,this.sandboxSetter=e.setSandboxMode,this.llmProvider=e.llmProvider,this.sessionSeed=randomBytes(16).toString("hex"),this.syncWorkspaceEnv(),this.applyAnthropicSessionUserId();}on(e){return this.eventEmitter.on("event",e),()=>this.eventEmitter.off("event",e)}setWorkDir(e){this.workDir=he__default.resolve(e),this.syncWorkspaceEnv();}setSession(e,t){this.session=e||void 0,this.sessionSync=t,this.applyAnthropicSessionUserId();}applyAnthropicSessionUserId(){let t=this.llmProvider?.getProvider?.();if(!t||typeof t.setUserId!="function")return;let n=this.session?.sessionId,r=jf(n,this.sessionSeed);t.setUserId(r);}interrupt(){this.shouldInterrupt=true,this.abortController&&this.abortController.abort(),this.interruptResolver&&this.interruptResolver();}createInterruptPromise(){return this.interruptPromise?this.interruptPromise:(this.interruptPromise=new Promise(e=>{this.interruptResolver=()=>e({interrupted:true});}),this.interruptPromise)}clearInterruptPromise(){this.interruptResolver=null,this.interruptPromise=null;}emitEvent(e){if(e.type==="plan_update"&&p.info("EMIT_EVENT","\u{1F525} Emitting plan_update via eventEmitter",{listenerCount:this.eventEmitter.listenerCount("event"),hasExplanation:!!e.explanation,planSteps:e.plan?.length}),e.type==="text"&&process.env.CLI_DEBUG==="1"){let t=e.delta||"";p.debug("EMIT_EVENT",`Emitting text event: "${t.substring(0,20)}...", listeners=${this.eventEmitter.listenerCount("event")}`);}this.eventEmitter.emit("event",e),e.type==="plan_update"&&p.info("EMIT_EVENT","\u2705 plan_update emitted");}emitLog(e,t,n){process.env.CLI_DEBUG&&(p.debug("EMIT",`emitLog: level=${e}, message="${t.substring(0,50)}..."`),p.debug("EMIT",` eventEmitter.listenerCount: ${this.eventEmitter.listenerCount("event")}`)),this.emitEvent({type:"log",level:e,message:t,detail:n});}emitCompacting(e,t){process.env.CLI_DEBUG&&p.debug("EMIT",`emitCompacting: message="${e.substring(0,50)}..."`),this.emitEvent({type:"compacting",message:e,detail:t});}updateRuntime(e){this.runner=e.runner,this.memory=e.memory,this.model=e.model,e.systemPrompt&&(this.systemPrompt=e.systemPrompt);}setCompressionMode(e){this.compressionMode=e,p.info("RUNTIME",`Compression mode set to: ${e}`);}getCompressionMode(){return this.compressionMode}prepareTaskInput(e,t){let n=e,r=t?.attachments?.filter(o=>o.type==="url")||[];return r.length>0&&(n=`Attachments:
@@ -2098,7 +2098,7 @@ ${n}`),n.trim()}extractImageUrls(e){return e?.attachments?.length?e.attachments.
2098
2098
  \u2502 \u603B\u8BA1: ${k(D.totalTokens)}`,E+=`
2099
2099
  \u2514\u2500 \u8282\u7701\uFF1A`,E+=`
2100
2100
  User: ${k($.userTokens)} \u2022 Assistant: ${k($.assistantTokens)} \u2022 Tool: ${k($.toolTokens)}`,E+=`
2101
- \u51C0\u8282\u7701: ${k($.totalTokens)}`;}this.emitCompacting("\u2713 LLM \u538B\u7F29\u5B8C\u6210",E);}else this.emitCompacting("\u2139 \u65E0\u9700\u538B\u7F29","Context \u4F7F\u7528\u91CF\u5728\u9884\u7B97\u8303\u56F4\u5185");}catch(f){throw this.emitLog("error","\u274C LLM \u538B\u7F29\u5931\u8D25",f?.message||String(f)),f}}setSandboxMode(e){this.sandboxSetter?.(e);}setApprovalHandler(e){this.runner.setApprovalHandler(e);}setMode(e){this.runner.setMode(e);}setConversationHistory(e){this.memory.clear(),this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});for(let t of e)!t||!t.content||this.memory.add({role:t.role,content:t.content,name:t.name,tool_calls:t.tool_calls});}dispose(){this.isRunning&&this.interrupt(),this.abortController&&(this.abortController.abort(),this.abortController=null),this.eventEmitter.removeAllListeners(),this.memory.clear(),this.recentToolCalls.clear(),this.batchDetector.reset(),console.log("[AgentRuntimeHost] Disposed");}};var YI="ark.cn-beijing.volces.com";function XI(s){return s.includes("opus-4-5")||s.includes("opus-4.5")||s.endsWith("-thinking")}function gp(s){return s.includes("doubao-seed")}function hp(s){return !!s&&s.includes(YI)}function QI(s){let e=s?.getProvider?.();return e instanceof Zn?e:void 0}function ZI(s){let e=s?.getProvider?.();return e instanceof Hs?e:void 0}function eE(s){let e=s?.getProvider?.();return e instanceof zs?e:void 0}function tE(s){let{model:e,baseUrl:t,openaiProvider:n,anthropicProvider:r,doubaoProvider:o,geminiProvider:i}=s,a={openai:n,anthropic:r,doubao:o,gemini:i},l=!!n&&hp(t)&&gp(e);return (r||o||l)&&(a.setThinkingMode=u=>{if(o&&o.setThinking({type:u}),l&&n&&n.setDoubaoThinking({type:u}),r){let d=u==="auto"?"enabled":u;r.setThinking({type:d});}}),a}function Hl(s){let{provider:e,model:t,sessionId:n}=s,r=e.protocol,o=e.models?.find(g=>g.name===t),i=e.baseUrl||void 0,a,l,c,u,d;if(r==="openai"||r==="openai-responses"||r==="kimi"){let g={...e,defaultModel:t,lastSelectedModel:t,apiEndpoint:e.urlSuffix,sessionId:n,modelConfig:o,doubaoThinking:hp(i)&&gp(t)?{type:"enabled"}:void 0},h=qs.createAdapter(r,g);a=h,l=QI(h),l&&hp(i)&&gp(t)&&l.setDoubaoThinking({type:"enabled"});}else if(r==="anthropic"){let g={...e,defaultModel:t,lastSelectedModel:t},h=qs.createAdapter(r,g);a=h,c=ZI(h),c&&XI(t)&&c.setThinking({type:"enabled"});}else if(r==="anthropic-openai"){let g=e.urlSuffix||"/v1/messages",h={apiKey:e.apiKey,baseUrl:i,defaultModel:t,apiEndpoint:g,streamFormat:"anthropic",sessionId:n,retry:e.retry,modelConfig:o};l=new Zn(h),a=l;}else if(r==="doubao")u=new Fl({apiKey:e.apiKey,baseUrl:i,defaultModel:t,thinking:{type:"enabled"},retry:e.retry}),a=u;else if(r==="gemini"){let g={...e,defaultModel:t,lastSelectedModel:t},h=qs.createAdapter(r,g);a=h,d=eE(h);}else throw new Error(`Unsupported provider protocol: ${r}`);let m=tE({model:t,baseUrl:i,openaiProvider:l,anthropicProvider:c,doubaoProvider:u,geminiProvider:d});return {llmProvider:a,controls:m}}function pb(s){return new Ka({llmProvider:s.llmProvider,model:s.model,tools:s.tools,memory:s.memory,config:s.config,agentName:s.agentName,agentDescription:s.agentDescription,instructions:s.instructions,contextInjection:s.contextInjection,plannerMode:s.plannerMode,structuredOutput:s.structuredOutput,providerName:s.providerName,contextWindow:s.contextWindow,tailTokenBudget:s.tailTokenBudget,maxInputTokensOverride:s.maxInputTokensOverride,toolInputGuardrails:s.toolInputGuardrails??zy,toolOutputGuardrails:s.toolOutputGuardrails??qy,compressionMode:s.compressionMode,workspacePath:s.workspacePath,permissionManager:s.permissionManager,disableSystemPrompt:s.disableSystemPrompt})}function mb(s){return new Wl({runner:s.runner,memory:s.memory,sessionManager:s.sessionManager||new Pn,sessionEnabled:s.sessionEnabled??false,workDir:s.workDir,model:s.model,memoryPressure:s.memoryPressure,compatProfile:s.compatProfile,systemPrompt:s.systemPrompt,setSandboxMode:s.setSandboxMode,llmProvider:s.llmProvider})}function Js(s){return new cn(s)}Z();var zl=class{hosts=new Map;hostConfigs=new Map;workspacePath=null;setWorkspace(e){this.workspacePath=e;for(let t of this.hosts.values())try{t.setWorkDir(e);}catch{}}getWorkspace(){return this.workspacePath}getHost(e){return this.hosts.get(e)}hasHost(e){return this.hosts.has(e)}getHostConfig(e){return this.hostConfigs.get(e)}clearHost(e){this.hosts.delete(e),this.hostConfigs.delete(e);}clearAll(){for(let e of this.hosts.values())try{e.interrupt();}catch{}this.hosts.clear(),this.hostConfigs.clear();}forEachHost(e){for(let[t,n]of this.hosts.entries())e(n,t);}async getOrCreateHost(e){let{sessionId:t,configKey:n,createHost:r}=e,o=this.hosts.get(t);if(o){let a=this.hostConfigs.get(t);if(a===n)return p.info("HOST_CONTROLLER",`\u{1F504} Reusing existing host for session=${t}, configKey=${n}`),o;p.info("HOST_CONTROLLER",`\u{1F5D1}\uFE0F Clearing old host: session=${t}, oldKey=${a}, newKey=${n}`),this.clearHost(t);}p.info("HOST_CONTROLLER",`\u2728 Creating NEW host: session=${t}, configKey=${n}`);let i=await r();return this.hosts.set(t,i),this.hostConfigs.set(t,n),this.workspacePath&&i.setWorkDir(this.workspacePath),i}};Z();async function gb(s){let{sessionId:e,provider:t,llmConfig:n,workspacePath:r,workDir:o,instructions:i,systemPrompt:a,agentName:l,agentDescription:c,permissionManager:u,tools:d,memory:m,memorySize:g,agentConfig:h,contextInjection:f,plannerMode:v,structuredOutput:b,toolInputGuardrails:C,toolOutputGuardrails:T,compressionMode:w,platformServices:E,sessionManager:N,sessionEnabled:D,disableSystemPrompt:$}=s,k=m??Js(g??50),M=typeof i=="string"?i:"[Function]";p.info("HOST_FACTORY",`Creating host with instructions length: ${M.length}`),p.info("HOST_FACTORY",`instructions contains \u534F\u4F5C\u6A21\u5F0F: ${M.includes("\u534F\u4F5C\u6A21\u5F0F")}`),p.info("HOST_FACTORY",`instructions contains delegate_task: ${M.includes("delegate_task")}`),p.debug("HOST_FACTORY",`instructions preview: ${M.substring(0,300)}`);let{llmProvider:_,controls:P}=Hl({provider:t,model:n.model,sessionId:e}),j=n.compatProfile??null,z=j?new cs(j):void 0,A=d??await Ls(r,E),O=h??{maxIterations:0,temperature:.7},F=pb({llmProvider:_,model:n.model,tools:A,memory:k,config:O,agentName:l,agentDescription:c,instructions:i,contextInjection:f,plannerMode:v,structuredOutput:b,providerName:n.providerName,contextWindow:j?.contextWindow,tailTokenBudget:j?.tailTokenBudget,maxInputTokensOverride:n.maxInputTokens,toolInputGuardrails:C,toolOutputGuardrails:T,compressionMode:w,workspacePath:r,permissionManager:u,disableSystemPrompt:$});return {host:mb({runner:F,memory:k,sessionManager:N??new Pn,sessionEnabled:D??false,workDir:o,model:n.model,memoryPressure:z,compatProfile:j,systemPrompt:a??(typeof i=="string"?i:""),llmProvider:_}),controls:P,llmProvider:_,runner:F,memory:k}}var Dn=class{hostController;platformServices;constructor(e){this.platformServices=e.platformServices,this.hostController=e.hostController??new zl;}setWorkspace(e){this.hostController.setWorkspace(e);}getHost(e){return this.hostController.getHost(e)}hasHost(e){return this.hostController.hasHost(e)}clearHost(e){this.hostController.clearHost(e);}clearAll(){this.hostController.clearAll();}forEachHost(e){this.hostController.forEachHost(e);}async getOrCreateHost(e){let{sessionId:t,configKey:n,provider:r,llmConfig:o,workspacePath:i,workDir:a,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:m,tools:g,memory:h,memorySize:f,agentConfig:v,contextInjection:b,plannerMode:C,structuredOutput:T,toolInputGuardrails:w,toolOutputGuardrails:E,compressionMode:N,sessionManager:D,sessionEnabled:$,disableSystemPrompt:k,onHostCreated:M}=e;return this.hostController.getOrCreateHost({sessionId:t,configKey:n,createHost:async()=>{let{host:_,controls:P,llmProvider:j,runner:z,memory:A}=await gb({sessionId:t,provider:r,llmConfig:o,workspacePath:i,workDir:a,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:m,tools:g,memory:h,memorySize:f,agentConfig:v,contextInjection:b,plannerMode:C,structuredOutput:T,toolInputGuardrails:w,toolOutputGuardrails:E,compressionMode:N,platformServices:this.platformServices,sessionManager:D,sessionEnabled:$,disableSystemPrompt:k});return M?.({host:_,controls:P,llmProvider:j,runner:z,memory:A}),_}})}async runTask(e){let{prompt:t,metadata:n,abortSignal:r,onHostReady:o,onEvent:i,...a}=e,l=await this.getOrCreateHost(a);o?.(l);let c=i?l.on(i):void 0;try{return await l.runTask(t,{metadata:n,abortSignal:r})}finally{c&&c();}}};async function hb(s){let e=s.initialProviderId,t=s.initialModelName,n=s.routeConfig,r=0,o=null,i=n?n.routes.filter(a=>a.enabled).length:s.resolvedRoute?.fallbackChain.length??1;for(;;)try{return await s.runAttempt({providerId:e,modelName:t,routeConfig:n,attempt:r,isRetry:r>0,previousError:o})}catch(a){let l=a instanceof Error?a:new Error(String(a));if(o=l,s.modelRouter&&e&&s.modelRouter.recordFailure(e,l),!!!(s.autoFailover&&s.resolvedRoute&&s.fallbackDecider&&s.modelAlias&&e))throw l;let u=s.fallbackDecider.shouldFallback(s.modelAlias,e,l,s.resolvedRoute.fallbackChain);if(u.shouldFallback&&u.targetProvider&&u.event){if(s.fallbackDecider.executeFallback(u),r+=1,e=u.targetProvider.providerId,t=u.targetProvider.modelName,n&&(n={...n,routes:n.routes.filter(d=>d.providerId!==u.event.fromProviderId)}),s.onRetry?.({providerId:e,modelName:t,attempt:r,decision:u}),r>=i)throw s.onExhausted?.("All providers have failed. Please try again later."),l;continue}throw u.exhausted&&s.onExhausted?.(u.reason),l}}var Ti=240,ql=2e3;function Cn(s,e){return s?s.length<=e?s:s.slice(0,e).trimEnd()+"...":""}var wi=class extends Error{code;constructor(e){super(e),this.code="missing_provider";}},Nn=class{hostService;checkpointService;resolveProvider;actionLog;constructor(e){this.hostService=e.hostService,this.checkpointService=e.checkpointService,this.resolveProvider=e.resolveProvider,this.actionLog=e.actionLog;}async runSession(e){let{sessionId:t,prompt:n,metadata:r,startedAt:o=Date.now(),isAutoRouted:i,routeConfig:a,modelRouter:l,fallbackDecider:c,eventHub:u,abortSignal:d,buildHostConfig:m,onHostReady:g,onRuntimeEvent:h,onStatus:f,onRouteResolved:v,onRetry:b}=e,C=e.providerId,T=e.modelName,w=null,E=this.actionLog?.createRunId();if(this.actionLog){let $=Cn(n,Ti);this.actionLog.record({type:"run_start",sessionId:t,runId:E,actor:"user",summary:$?`User: ${$}`:"User: (empty prompt)",data:{prompt:Cn(n,ql),promptLength:n.length,attachments:r?.attachments?.map(k=>({type:k.type,name:k.name,path:k.path}))}});}i&&a&&l&&(w=l.resolveProvider(a.modelAlias),w&&(C=w.providerId,T=w.modelName,v?.(w),w.degraded&&f?.("warning",`Using degraded provider: ${C}`)));let N=r;if(this.checkpointService)try{await this.checkpointService.startMessage(t);}catch{f?.("warning","Checkpoint start failed");}let D=false;try{let $=await hb({modelAlias:a?.modelAlias,initialProviderId:C,initialModelName:T,routeConfig:a,resolvedRoute:w,fallbackDecider:c,modelRouter:l??void 0,autoFailover:a?.autoFailover===!0,onRetry:({decision:k})=>{this.actionLog&&this.actionLog.record({type:"status",sessionId:t,runId:E,actor:"system",summary:k?.event?`Fallback: ${k.event.fromProviderId} -> ${k.event.toProviderId}`:"Fallback: switching provider",data:{from:k?.event?.fromProviderId,to:k?.event?.toProviderId,reason:k?.reason}}),b?.(k);},onExhausted:k=>{f?.("error",`All providers exhausted: ${k}`),this.actionLog&&this.actionLog.record({type:"run_error",sessionId:t,runId:E,actor:"system",summary:`All providers exhausted: ${Cn(k,Ti)}`,data:{reason:k}});},runAttempt:async k=>{let M=this.resolveProvider(k.providerId,k.modelName);if(!M.provider||!M.llmConfig)throw new wi("No provider configured. Please add an API provider first.");f?.("info",`Connecting to ${M.llmConfig.model}...`),this.actionLog&&this.actionLog.record({type:"run_attempt",sessionId:t,runId:E,actor:"system",summary:k.isRetry?`Retry ${k.attempt}: ${M.llmConfig.model}`:`Run: ${M.llmConfig.model}`,data:{providerId:M.provider.id,providerName:M.llmConfig.providerName,model:M.llmConfig.model,attempt:k.attempt,isRetry:k.isRetry,previousError:k.previousError?.message}});let _=m(M.provider,M.llmConfig),P={contextUsed:0,startTime:Date.now(),provider:M.llmConfig.providerName||M.provider.id||"unknown",model:M.llmConfig.model};return {summary:await this.hostService.runTask({..._,prompt:n,metadata:N,abortSignal:d,onHostReady:g,onEvent:z=>{if(this.actionLog){let A=this.buildActionLogEntry(z,t,E);A&&this.actionLog.record(A);}u?.emit(t,z,P),h?.(z,P);}}),contextUsed:P.contextUsed,providerId:M.provider.id}}});if(w&&$.providerId&&l){let k=Date.now()-o;l.recordSuccess($.providerId,k),c&&c.recordSuccess($.providerId);}if(this.checkpointService)try{await this.checkpointService.finishMessage(t,"Message completed"),D=!0;}catch{f?.("warning","Checkpoint save failed");}return {summary:$.summary,contextUsed:$.contextUsed,providerId:$.providerId}}catch($){if(this.actionLog){let k=$ instanceof Error?$.message:String($);this.actionLog.record({type:"run_error",sessionId:t,runId:E,actor:"system",summary:`Run error: ${Cn(k,Ti)}`,data:{message:k}});}throw $}finally{if(this.checkpointService&&!D)try{await this.checkpointService.stopWatching();}catch{f?.("warning","Checkpoint cleanup failed");}}}buildActionLogEntry(e,t,n){if(!this.actionLog)return null;let r=o=>this.actionLog?.formatFilePath(o)??o;switch(e.type){case "tool_call_start":{let o=e.targetPath?r(e.targetPath):void 0,i=o?`Tool start: ${e.name} (${o})`:`Tool start: ${e.name}`,a=e.args?Cn(JSON.stringify(e.args),ql):void 0;return {type:"tool_call_start",sessionId:t,runId:n,actor:"tool",summary:i,files:o?[o]:void 0,data:{name:e.name,toolId:e.toolId,batchId:e.batchId,targetPath:o,description:e.description,equivalentCommand:e.equivalentCommand,argsPreview:a}}}case "tool_call_end":{let o=e.targetPath?r(e.targetPath):void 0,i=o?`Tool ${e.success?"done":"failed"}: ${e.name} (${o})`:`Tool ${e.success?"done":"failed"}: ${e.name}`,a=e.output?Cn(e.output,ql):void 0;return {type:"tool_call_end",sessionId:t,runId:n,actor:"tool",summary:i,files:o?[o]:void 0,data:{name:e.name,success:e.success,duration:e.duration,resultLength:e.resultLength,summary:e.summary,outputPreview:a,outputTruncated:e.outputTruncated,toolId:e.toolId,batchId:e.batchId,targetPath:o}}}case "file_stream":{if(!e.isComplete)return null;let o=r(e.filePath),i=e.additions||e.removals?`File updated: ${o} (+${e.additions??0}/-${e.removals??0})`:`File updated: ${o}`;return {type:"file_change",sessionId:t,runId:n,actor:"tool",summary:i,files:[o],data:{filePath:o,additions:e.additions,removals:e.removals,description:e.description,contentLength:e.content?.length??0}}}case "edit_file_stream":{if(!e.isComplete)return null;let o=r(e.filePath),i=`File edited: ${o}`;return {type:"file_change",sessionId:t,runId:n,actor:"tool",summary:i,files:[o],data:{filePath:o,startLine:e.startLine,hunks:e.hunks?.length??0,oldPreview:Cn(e.oldString,200),newPreview:Cn(e.newString,200),description:e.description}}}case "write_file_stream":{if(!e.isComplete)return null;let o=r(e.filePath),i=`File written: ${o}`;return {type:"file_change",sessionId:t,runId:n,actor:"tool",summary:i,files:[o],data:{filePath:o,contentLength:e.content?.length??0,description:e.description}}}case "checkpoint":return {type:"checkpoint",sessionId:t,runId:n,actor:"system",summary:`Checkpoint saved: ${e.id}`,data:{id:e.id,auto:e.auto}};case "plan_update":{let o=e.plan.length,i=e.plan.filter(c=>c.status==="completed").length,a=e.plan.filter(c=>c.status==="in_progress").length,l=o-i-a;return {type:"plan_update",sessionId:t,runId:n,actor:"assistant",summary:`Plan update: ${i} done, ${a} active, ${l} pending`,data:{explanation:e.explanation,plan:e.plan}}}case "context_compaction":return {type:"context_compaction",sessionId:t,runId:n,actor:"system",summary:`Context compacted: ${e.originalTokens} -> ${e.finalTokens} tokens`,data:{originalMessages:e.originalMessages,keptMessages:e.keptMessages,droppedMessages:e.droppedMessages,compressedMessages:e.compressedMessages,originalTokens:e.originalTokens,finalTokens:e.finalTokens,budgetTokens:e.budgetTokens,useLLM:e.useLLM}};case "stream_retry":return {type:"stream_retry",sessionId:t,runId:n,actor:"system",summary:`Stream retry ${e.attempt}/${e.maxRetries}: ${e.errorCode}`,data:{error:e.error,errorCode:e.errorCode,attempt:e.attempt,maxRetries:e.maxRetries,delayMs:e.delayMs}};case "stream_recovered":return {type:"stream_recovered",sessionId:t,runId:n,actor:"system",summary:`Stream recovered (attempt ${e.attempt})`,data:{attempt:e.attempt,maxRetries:e.maxRetries}};case "run_result":return {type:"run_result",sessionId:t,runId:n,actor:"assistant",summary:`Run completed in ${e.durationMs}ms, tokens ${e.totalTokens}`,data:{outputPreview:Cn(e.output,ql),totalTokens:e.totalTokens,iterations:e.iterations,toolCalls:e.toolCalls,durationMs:e.durationMs}};case "error":return {type:"run_error",sessionId:t,runId:n,actor:"system",summary:`Runtime error: ${Cn(e.message,Ti)}`,data:{message:e.message}};case "error_classified":return {type:"run_error",sessionId:t,runId:n,actor:"system",summary:`Error ${e.code}: ${Cn(e.message,Ti)}`,data:{category:e.category,code:e.code,message:e.message,suggestion:e.suggestion,retryable:e.retryable}};default:return null}}};var Kl=class{sinks=new Map;register(e){return this.sinks.set(e.name,e),()=>{this.sinks.delete(e.name);}}has(e){return this.sinks.has(e)}remove(e){this.sinks.delete(e);}clear(){this.sinks.clear();}emit(e,t,n){if(this.sinks.size!==0){for(let r of this.sinks.values())if(!(r.shouldForward&&!r.shouldForward(t,n)))try{r.handle(e,t,n);}catch{}}}};function fb(s,e,t){if(e?.setThinkingMode)return e.setThinkingMode(s),true;let n=t;return n?.setThinking?(n.setThinking({type:s==="auto"?"enabled":s}),true):n?.setDoubaoThinking?(n.setDoubaoThinking({type:s}),true):false}Z();var Vs=class{config;hostService;orchestrator;constructor(e){this.config=e,this.hostService=new Dn({platformServices:e.services}),this.orchestrator=new Nn({hostService:this.hostService,resolveProvider:e.resolveProvider}),p.info("SINGLE_AGENT","SingleAgentRuntime initialized");}async chat(e,t){let{sessionId:n,prompt:r,metadata:o}=e;p.info("SINGLE_AGENT","Chat started",{sessionId:n,promptLength:r.length});try{let i=await this.orchestrator.runSession({sessionId:n,prompt:r,metadata:o,providerId:this.config.providerId,modelName:this.config.modelName,buildHostConfig:(l,c)=>({sessionId:n,configKey:"single_agent",provider:l,llmConfig:c,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:this.config.systemPrompt??"Single agent mode",systemPrompt:this.config.systemPrompt,agentName:"SingleAgent",agentDescription:"Single agent mode runtime",permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,agentConfig:{maxIterations:100,temperature:.3,mode:"agent"}}),onRuntimeEvent:(l,c)=>{this.handleRuntimeEvent(l,t);}}),a=i.summary.output||"Task completed";return t?.onComplete?.(a),p.info("SINGLE_AGENT","Chat completed",{sessionId:n,contextUsed:i.contextUsed}),a}catch(i){let a=i instanceof Error?i:new Error(String(i));throw t?.onError?.(a),p.error("SINGLE_AGENT","Chat failed",{error:a.message}),a}}handleRuntimeEvent(e,t){switch(e.type){case "text":t?.onText?.(e.text);break;case "thinking":t?.onThinking?.(e.text);break;case "tool_call":t?.onToolCall?.(e.name,e.args);break;case "tool_result":t?.onToolResult?.(e.name,e.result);break}}abort(){this.hostService.clearAll(),p.info("SINGLE_AGENT","Aborted");}getModeName(){return "single"}};var ki=class{handlers=new Set;typeHandlers=new Map;history=[];maxHistory;constructor(e){this.maxHistory=e?.maxHistory??500;}emit(e){this.history.push(e),this.history.length>this.maxHistory&&this.history.shift();for(let n of this.handlers)try{n(e);}catch(r){console.error("[AgentEventBus] Handler error:",r);}let t=this.typeHandlers.get(e.type);if(t)for(let n of t)try{n(e);}catch(r){console.error("[AgentEventBus] Type handler error:",r);}}subscribe(e){return this.handlers.add(e),()=>{this.handlers.delete(e);}}on(e,t){this.typeHandlers.has(e)||this.typeHandlers.set(e,new Set);let n=this.typeHandlers.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&this.typeHandlers.delete(e);}}getHistory(e){return e&&e>0?this.history.slice(-e):[...this.history]}clearHistory(){this.history=[];}getSubscriberCount(){let e={};for(let[t,n]of this.typeHandlers)e[t]=n.size;return {global:this.handlers.size,byType:e}}};Z();var Ys=class{id;index;task;sessionId;workDir;eventBus;orchestrator;resolveProvider;providerId;modelName;permissionManager;tools;memory;startedAt=0;aborted=false;contextStats={agentId:"",agentLabel:"",input:0,output:0,contextWindow:2e5,tokensUsedForContext:0,pressure:0};constructor(e){this.id=e.id,this.index=e.index,this.task=e.task,this.sessionId=e.sessionId,this.workDir=e.workDir,this.eventBus=e.eventBus,this.orchestrator=e.orchestrator,this.resolveProvider=e.resolveProvider,this.providerId=e.providerId,this.modelName=e.modelName,this.permissionManager=e.permissionManager,this.tools=e.tools,this.memory=e.memory,this.contextStats={agentId:this.id,agentLabel:`Agent #${this.index}`,input:0,output:0,contextWindow:2e5,tokensUsedForContext:0,pressure:0};}getInfo(){return {id:this.id,index:this.index,status:"idle",progress:0,currentTask:this.task.description,startedAt:this.startedAt||void 0}}async execute(){this.startedAt=Date.now();let e=`${this.sessionId}_${this.id}`;this.eventBus.emit({type:"agent_spawned",agent:{id:this.id,index:this.index,status:"running",progress:0,currentTask:this.task.description,startedAt:this.startedAt},timestamp:this.startedAt}),this.eventBus.emit({type:"data_flow",from:"supervisor",to:this.id,label:this.task.description,timestamp:this.startedAt}),this.eventBus.emit({type:"timeline",entry:{id:`${this.id}_start`,timestamp:this.startedAt,source:"supervisor",icon:"\u{1F680}",title:`\u6D3E\u53D1\u4EFB\u52A1\u7ED9 Agent-${this.index}`,description:this.task.description,level:"action"},timestamp:this.startedAt});try{this.reportProgress(10,"\u5F00\u59CB\u6267\u884C...");let t="";await this.orchestrator.runSession({sessionId:e,prompt:this.buildAgentPrompt(),providerId:this.providerId,modelName:this.modelName,buildHostConfig:(o,i)=>({sessionId:e,configKey:`agent_${this.id}`,provider:o,llmConfig:i,workspacePath:this.workDir,workDir:this.workDir,instructions:this.buildAgentInstructions(),systemPrompt:this.buildAgentInstructions(),agentName:`Agent-${this.index}`,agentDescription:`Execution agent for task: ${this.task.description}`,permissionManager:this.permissionManager,tools:this.tools,memory:this.memory,agentConfig:{maxIterations:50,temperature:.3,mode:"agent"},sessionEnabled:!1,disableSystemPrompt:!0}),onRuntimeEvent:o=>{if(o.type==="text"&&(t+=o.delta,this.eventBus.emit({type:"agent_text",agentId:this.id,text:o.delta,timestamp:Date.now()})),o.type==="tool_call_start"?(this.reportProgress(30,`\u6267\u884C: ${o.name}`),this.eventBus.emit({type:"agent_tool_call",agentId:this.id,agentIndex:this.index,toolName:o.name,toolArgs:o.args,status:"start",message:`\u6267\u884C: ${o.name}`,timestamp:Date.now()})):o.type==="tool_call_end"&&(this.reportProgress(70,`\u5B8C\u6210: ${o.name}`),this.eventBus.emit({type:"agent_tool_call",agentId:this.id,agentIndex:this.index,toolName:o.name,status:"end",message:`\u5B8C\u6210: ${o.name}`,timestamp:Date.now()})),o.type==="token_usage"&&this.updateContextStats({input:o.sessionPromptTokens,output:o.sessionCompletionTokens,tokensUsedForContext:o.sessionPromptTokens+o.sessionCompletionTokens}),o.type==="memory_snapshot"){let i=o.snapshot,a=i.profile?.contextWindow||2e5;this.updateContextStats({contextWindow:a,tokensUsedForContext:i.tokensUsed,pressure:i.pressure||i.tokensUsed/a});}}});let n=Date.now()-this.startedAt,r=this.summarizeOutput(t);return this.eventBus.emit({type:"agent_completed",agentId:this.id,result:r,timestamp:Date.now()}),this.eventBus.emit({type:"timeline",entry:{id:`${this.id}_complete`,timestamp:Date.now(),source:this.id,icon:"\u2713",title:`Agent-${this.index} \u5B8C\u6210`,description:r,level:"result"},timestamp:Date.now()}),p.info("AGENT",`Agent ${this.id} completed`,{duration:n,outputLength:t.length}),{success:!0,summary:r,output:t,duration:n}}catch(t){let n=Date.now()-this.startedAt,r=t instanceof Error?t.message:String(t);return p.error("AGENT",`Agent ${this.id} failed`,{error:r,duration:n}),this.eventBus.emit({type:"agent_error",agentId:this.id,error:r,timestamp:Date.now()}),this.eventBus.emit({type:"timeline",entry:{id:`${this.id}_error`,timestamp:Date.now(),source:this.id,icon:"\u2717",title:`Agent-${this.index} \u5931\u8D25`,description:r,level:"error"},timestamp:Date.now()}),{success:false,summary:"\u6267\u884C\u5931\u8D25",error:r,duration:n}}}abort(){this.aborted=true;let{getGlobalWriteLockManager:e}=(ol(),Nc(Ef)),n=e().releaseAll(this.id);n>0&&p.info("AGENT",`Released ${n} write locks on abort`,{agentId:this.id}),this.eventBus.emit({type:"agent_terminated",agentId:this.id,reason:"User requested abort",timestamp:Date.now()});}updateContextStats(e){this.contextStats={...this.contextStats,...e},e.tokensUsedForContext!==void 0&&this.contextStats.contextWindow>0&&(this.contextStats.pressure=this.contextStats.tokensUsedForContext/this.contextStats.contextWindow),this.eventBus.emit({type:"agent_context_update",agentId:this.id,stats:{...this.contextStats},timestamp:Date.now()});}reportProgress(e,t){this.eventBus.emit({type:"agent_progress",agentId:this.id,progress:e,message:t,timestamp:Date.now()}),this.eventBus.emit({type:"agent_status",agentId:this.id,status:"running",message:t,timestamp:Date.now()});}buildAgentPrompt(){return this.task.description}buildAgentInstructions(){return `\u4F60\u662F\u4E00\u4E2A\u6267\u884C\u4EE3\u7406\uFF0C\u8D1F\u8D23\u5B8C\u6210\u5206\u914D\u7ED9\u4F60\u7684\u4EFB\u52A1\u3002
2101
+ \u51C0\u8282\u7701: ${k($.totalTokens)}`;}this.emitCompacting("\u2713 LLM \u538B\u7F29\u5B8C\u6210",E);}else this.emitCompacting("\u2139 \u65E0\u9700\u538B\u7F29","Context \u4F7F\u7528\u91CF\u5728\u9884\u7B97\u8303\u56F4\u5185");}catch(f){throw this.emitLog("error","\u274C LLM \u538B\u7F29\u5931\u8D25",f?.message||String(f)),f}}setSandboxMode(e){this.sandboxSetter?.(e);}setApprovalHandler(e){this.runner.setApprovalHandler(e);}setMode(e){this.runner.setMode(e);}setConversationHistory(e){this.memory.clear(),this.systemPrompt&&this.memory.add({role:"system",content:this.systemPrompt});for(let t of e)!t||!t.content||this.memory.add({role:t.role,content:t.content,name:t.name,tool_calls:t.tool_calls});}dispose(){this.isRunning&&this.interrupt(),this.abortController&&(this.abortController.abort(),this.abortController=null),this.eventEmitter.removeAllListeners(),this.memory.clear(),this.recentToolCalls.clear(),this.batchDetector.reset(),console.log("[AgentRuntimeHost] Disposed");}};var XI="ark.cn-beijing.volces.com";function QI(s){return s.includes("opus-4-5")||s.includes("opus-4.5")||s.endsWith("-thinking")}function gp(s){return s.includes("doubao-seed")}function hp(s){return !!s&&s.includes(XI)}function ZI(s){let e=s?.getProvider?.();return e instanceof Zn?e:void 0}function eE(s){let e=s?.getProvider?.();return e instanceof Hs?e:void 0}function tE(s){let e=s?.getProvider?.();return e instanceof zs?e:void 0}function nE(s){let{model:e,baseUrl:t,openaiProvider:n,anthropicProvider:r,doubaoProvider:o,geminiProvider:i}=s,a={openai:n,anthropic:r,doubao:o,gemini:i},l=!!n&&hp(t)&&gp(e);return (r||o||l)&&(a.setThinkingMode=u=>{if(o&&o.setThinking({type:u}),l&&n&&n.setDoubaoThinking({type:u}),r){let d=u==="auto"?"enabled":u;r.setThinking({type:d});}}),a}function Hl(s){let{provider:e,model:t,sessionId:n}=s,r=e.protocol,o=e.models?.find(g=>g.name===t),i=e.baseUrl||void 0,a,l,c,u,d;if(r==="openai"||r==="openai-responses"||r==="kimi"){let g={...e,defaultModel:t,lastSelectedModel:t,apiEndpoint:e.urlSuffix,sessionId:n,modelConfig:o,doubaoThinking:hp(i)&&gp(t)?{type:"enabled"}:void 0},h=qs.createAdapter(r,g);a=h,l=ZI(h),l&&hp(i)&&gp(t)&&l.setDoubaoThinking({type:"enabled"});}else if(r==="anthropic"){let g={...e,defaultModel:t,lastSelectedModel:t},h=qs.createAdapter(r,g);a=h,c=eE(h),c&&QI(t)&&c.setThinking({type:"enabled"});}else if(r==="anthropic-openai"){let g=e.urlSuffix||"/v1/messages",h={apiKey:e.apiKey,baseUrl:i,defaultModel:t,apiEndpoint:g,streamFormat:"anthropic",sessionId:n,retry:e.retry,modelConfig:o};l=new Zn(h),a=l;}else if(r==="doubao")u=new Fl({apiKey:e.apiKey,baseUrl:i,defaultModel:t,thinking:{type:"enabled"},retry:e.retry}),a=u;else if(r==="gemini"){let g={...e,defaultModel:t,lastSelectedModel:t},h=qs.createAdapter(r,g);a=h,d=tE(h);}else throw new Error(`Unsupported provider protocol: ${r}`);let m=nE({model:t,baseUrl:i,openaiProvider:l,anthropicProvider:c,doubaoProvider:u,geminiProvider:d});return {llmProvider:a,controls:m}}function pb(s){return new Ka({llmProvider:s.llmProvider,model:s.model,tools:s.tools,memory:s.memory,config:s.config,agentName:s.agentName,agentDescription:s.agentDescription,instructions:s.instructions,contextInjection:s.contextInjection,plannerMode:s.plannerMode,structuredOutput:s.structuredOutput,providerName:s.providerName,contextWindow:s.contextWindow,tailTokenBudget:s.tailTokenBudget,maxInputTokensOverride:s.maxInputTokensOverride,toolInputGuardrails:s.toolInputGuardrails??zy,toolOutputGuardrails:s.toolOutputGuardrails??qy,compressionMode:s.compressionMode,workspacePath:s.workspacePath,permissionManager:s.permissionManager,disableSystemPrompt:s.disableSystemPrompt})}function mb(s){return new Wl({runner:s.runner,memory:s.memory,sessionManager:s.sessionManager||new Pn,sessionEnabled:s.sessionEnabled??false,workDir:s.workDir,model:s.model,memoryPressure:s.memoryPressure,compatProfile:s.compatProfile,systemPrompt:s.systemPrompt,setSandboxMode:s.setSandboxMode,llmProvider:s.llmProvider})}function Js(s){return new cn(s)}Z();var zl=class{hosts=new Map;hostConfigs=new Map;workspacePath=null;setWorkspace(e){this.workspacePath=e;for(let t of this.hosts.values())try{t.setWorkDir(e);}catch{}}getWorkspace(){return this.workspacePath}getHost(e){return this.hosts.get(e)}hasHost(e){return this.hosts.has(e)}getHostConfig(e){return this.hostConfigs.get(e)}clearHost(e){this.hosts.delete(e),this.hostConfigs.delete(e);}clearAll(){for(let e of this.hosts.values())try{e.interrupt();}catch{}this.hosts.clear(),this.hostConfigs.clear();}forEachHost(e){for(let[t,n]of this.hosts.entries())e(n,t);}async getOrCreateHost(e){let{sessionId:t,configKey:n,createHost:r}=e,o=this.hosts.get(t);if(o){let a=this.hostConfigs.get(t);if(a===n)return p.info("HOST_CONTROLLER",`\u{1F504} Reusing existing host for session=${t}, configKey=${n}`),o;p.info("HOST_CONTROLLER",`\u{1F5D1}\uFE0F Clearing old host: session=${t}, oldKey=${a}, newKey=${n}`),this.clearHost(t);}p.info("HOST_CONTROLLER",`\u2728 Creating NEW host: session=${t}, configKey=${n}`);let i=await r();return this.hosts.set(t,i),this.hostConfigs.set(t,n),this.workspacePath&&i.setWorkDir(this.workspacePath),i}};Z();async function gb(s){let{sessionId:e,provider:t,llmConfig:n,workspacePath:r,workDir:o,instructions:i,systemPrompt:a,agentName:l,agentDescription:c,permissionManager:u,tools:d,memory:m,memorySize:g,agentConfig:h,contextInjection:f,plannerMode:v,structuredOutput:b,toolInputGuardrails:C,toolOutputGuardrails:T,compressionMode:w,platformServices:E,sessionManager:N,sessionEnabled:D,disableSystemPrompt:$}=s,k=m??Js(g??50),M=typeof i=="string"?i:"[Function]";p.info("HOST_FACTORY",`Creating host with instructions length: ${M.length}`),p.info("HOST_FACTORY",`instructions contains \u534F\u4F5C\u6A21\u5F0F: ${M.includes("\u534F\u4F5C\u6A21\u5F0F")}`),p.info("HOST_FACTORY",`instructions contains delegate_task: ${M.includes("delegate_task")}`),p.debug("HOST_FACTORY",`instructions preview: ${M.substring(0,300)}`);let{llmProvider:_,controls:P}=Hl({provider:t,model:n.model,sessionId:e}),j=n.compatProfile??null,z=j?new cs(j):void 0,A=d??await Ls(r,E),O=h??{maxIterations:0,temperature:.7},F=pb({llmProvider:_,model:n.model,tools:A,memory:k,config:O,agentName:l,agentDescription:c,instructions:i,contextInjection:f,plannerMode:v,structuredOutput:b,providerName:n.providerName,contextWindow:j?.contextWindow,tailTokenBudget:j?.tailTokenBudget,maxInputTokensOverride:n.maxInputTokens,toolInputGuardrails:C,toolOutputGuardrails:T,compressionMode:w,workspacePath:r,permissionManager:u,disableSystemPrompt:$});return {host:mb({runner:F,memory:k,sessionManager:N??new Pn,sessionEnabled:D??false,workDir:o,model:n.model,memoryPressure:z,compatProfile:j,systemPrompt:a??(typeof i=="string"?i:""),llmProvider:_}),controls:P,llmProvider:_,runner:F,memory:k}}var Dn=class{hostController;platformServices;constructor(e){this.platformServices=e.platformServices,this.hostController=e.hostController??new zl;}setWorkspace(e){this.hostController.setWorkspace(e);}getHost(e){return this.hostController.getHost(e)}hasHost(e){return this.hostController.hasHost(e)}clearHost(e){this.hostController.clearHost(e);}clearAll(){this.hostController.clearAll();}forEachHost(e){this.hostController.forEachHost(e);}async getOrCreateHost(e){let{sessionId:t,configKey:n,provider:r,llmConfig:o,workspacePath:i,workDir:a,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:m,tools:g,memory:h,memorySize:f,agentConfig:v,contextInjection:b,plannerMode:C,structuredOutput:T,toolInputGuardrails:w,toolOutputGuardrails:E,compressionMode:N,sessionManager:D,sessionEnabled:$,disableSystemPrompt:k,onHostCreated:M}=e;return this.hostController.getOrCreateHost({sessionId:t,configKey:n,createHost:async()=>{let{host:_,controls:P,llmProvider:j,runner:z,memory:A}=await gb({sessionId:t,provider:r,llmConfig:o,workspacePath:i,workDir:a,instructions:l,systemPrompt:c,agentName:u,agentDescription:d,permissionManager:m,tools:g,memory:h,memorySize:f,agentConfig:v,contextInjection:b,plannerMode:C,structuredOutput:T,toolInputGuardrails:w,toolOutputGuardrails:E,compressionMode:N,platformServices:this.platformServices,sessionManager:D,sessionEnabled:$,disableSystemPrompt:k});return M?.({host:_,controls:P,llmProvider:j,runner:z,memory:A}),_}})}async runTask(e){let{prompt:t,metadata:n,abortSignal:r,onHostReady:o,onEvent:i,...a}=e,l=await this.getOrCreateHost(a);o?.(l);let c=i?l.on(i):void 0;try{return await l.runTask(t,{metadata:n,abortSignal:r})}finally{c&&c();}}};async function hb(s){let e=s.initialProviderId,t=s.initialModelName,n=s.routeConfig,r=0,o=null,i=n?n.routes.filter(a=>a.enabled).length:s.resolvedRoute?.fallbackChain.length??1;for(;;)try{return await s.runAttempt({providerId:e,modelName:t,routeConfig:n,attempt:r,isRetry:r>0,previousError:o})}catch(a){let l=a instanceof Error?a:new Error(String(a));if(o=l,s.modelRouter&&e&&s.modelRouter.recordFailure(e,l),!!!(s.autoFailover&&s.resolvedRoute&&s.fallbackDecider&&s.modelAlias&&e))throw l;let u=s.fallbackDecider.shouldFallback(s.modelAlias,e,l,s.resolvedRoute.fallbackChain);if(u.shouldFallback&&u.targetProvider&&u.event){if(s.fallbackDecider.executeFallback(u),r+=1,e=u.targetProvider.providerId,t=u.targetProvider.modelName,n&&(n={...n,routes:n.routes.filter(d=>d.providerId!==u.event.fromProviderId)}),s.onRetry?.({providerId:e,modelName:t,attempt:r,decision:u}),r>=i)throw s.onExhausted?.("All providers have failed. Please try again later."),l;continue}throw u.exhausted&&s.onExhausted?.(u.reason),l}}var Ti=240,ql=2e3;function Cn(s,e){return s?s.length<=e?s:s.slice(0,e).trimEnd()+"...":""}var wi=class extends Error{code;constructor(e){super(e),this.code="missing_provider";}},Nn=class{hostService;checkpointService;resolveProvider;actionLog;constructor(e){this.hostService=e.hostService,this.checkpointService=e.checkpointService,this.resolveProvider=e.resolveProvider,this.actionLog=e.actionLog;}async runSession(e){let{sessionId:t,prompt:n,metadata:r,startedAt:o=Date.now(),isAutoRouted:i,routeConfig:a,modelRouter:l,fallbackDecider:c,eventHub:u,abortSignal:d,buildHostConfig:m,onHostReady:g,onRuntimeEvent:h,onStatus:f,onRouteResolved:v,onRetry:b}=e,C=e.providerId,T=e.modelName,w=null,E=this.actionLog?.createRunId();if(this.actionLog){let $=Cn(n,Ti);this.actionLog.record({type:"run_start",sessionId:t,runId:E,actor:"user",summary:$?`User: ${$}`:"User: (empty prompt)",data:{prompt:Cn(n,ql),promptLength:n.length,attachments:r?.attachments?.map(k=>({type:k.type,name:k.name,path:k.path}))}});}i&&a&&l&&(w=l.resolveProvider(a.modelAlias),w&&(C=w.providerId,T=w.modelName,v?.(w),w.degraded&&f?.("warning",`Using degraded provider: ${C}`)));let N=r;if(this.checkpointService)try{await this.checkpointService.startMessage(t);}catch{f?.("warning","Checkpoint start failed");}let D=false;try{let $=await hb({modelAlias:a?.modelAlias,initialProviderId:C,initialModelName:T,routeConfig:a,resolvedRoute:w,fallbackDecider:c,modelRouter:l??void 0,autoFailover:a?.autoFailover===!0,onRetry:({decision:k})=>{this.actionLog&&this.actionLog.record({type:"status",sessionId:t,runId:E,actor:"system",summary:k?.event?`Fallback: ${k.event.fromProviderId} -> ${k.event.toProviderId}`:"Fallback: switching provider",data:{from:k?.event?.fromProviderId,to:k?.event?.toProviderId,reason:k?.reason}}),b?.(k);},onExhausted:k=>{f?.("error",`All providers exhausted: ${k}`),this.actionLog&&this.actionLog.record({type:"run_error",sessionId:t,runId:E,actor:"system",summary:`All providers exhausted: ${Cn(k,Ti)}`,data:{reason:k}});},runAttempt:async k=>{let M=this.resolveProvider(k.providerId,k.modelName);if(!M.provider||!M.llmConfig)throw new wi("No provider configured. Please add an API provider first.");f?.("info",`Connecting to ${M.llmConfig.model}...`),this.actionLog&&this.actionLog.record({type:"run_attempt",sessionId:t,runId:E,actor:"system",summary:k.isRetry?`Retry ${k.attempt}: ${M.llmConfig.model}`:`Run: ${M.llmConfig.model}`,data:{providerId:M.provider.id,providerName:M.llmConfig.providerName,model:M.llmConfig.model,attempt:k.attempt,isRetry:k.isRetry,previousError:k.previousError?.message}});let _=m(M.provider,M.llmConfig),P={contextUsed:0,startTime:Date.now(),provider:M.llmConfig.providerName||M.provider.id||"unknown",model:M.llmConfig.model};return {summary:await this.hostService.runTask({..._,prompt:n,metadata:N,abortSignal:d,onHostReady:g,onEvent:z=>{if(this.actionLog){let A=this.buildActionLogEntry(z,t,E);A&&this.actionLog.record(A);}u?.emit(t,z,P),h?.(z,P);}}),contextUsed:P.contextUsed,providerId:M.provider.id}}});if(w&&$.providerId&&l){let k=Date.now()-o;l.recordSuccess($.providerId,k),c&&c.recordSuccess($.providerId);}if(this.checkpointService)try{await this.checkpointService.finishMessage(t,"Message completed"),D=!0;}catch{f?.("warning","Checkpoint save failed");}return {summary:$.summary,contextUsed:$.contextUsed,providerId:$.providerId}}catch($){if(this.actionLog){let k=$ instanceof Error?$.message:String($);this.actionLog.record({type:"run_error",sessionId:t,runId:E,actor:"system",summary:`Run error: ${Cn(k,Ti)}`,data:{message:k}});}throw $}finally{if(this.checkpointService&&!D)try{await this.checkpointService.stopWatching();}catch{f?.("warning","Checkpoint cleanup failed");}}}buildActionLogEntry(e,t,n){if(!this.actionLog)return null;let r=o=>this.actionLog?.formatFilePath(o)??o;switch(e.type){case "tool_call_start":{let o=e.targetPath?r(e.targetPath):void 0,i=o?`Tool start: ${e.name} (${o})`:`Tool start: ${e.name}`,a=e.args?Cn(JSON.stringify(e.args),ql):void 0;return {type:"tool_call_start",sessionId:t,runId:n,actor:"tool",summary:i,files:o?[o]:void 0,data:{name:e.name,toolId:e.toolId,batchId:e.batchId,targetPath:o,description:e.description,equivalentCommand:e.equivalentCommand,argsPreview:a}}}case "tool_call_end":{let o=e.targetPath?r(e.targetPath):void 0,i=o?`Tool ${e.success?"done":"failed"}: ${e.name} (${o})`:`Tool ${e.success?"done":"failed"}: ${e.name}`,a=e.output?Cn(e.output,ql):void 0;return {type:"tool_call_end",sessionId:t,runId:n,actor:"tool",summary:i,files:o?[o]:void 0,data:{name:e.name,success:e.success,duration:e.duration,resultLength:e.resultLength,summary:e.summary,outputPreview:a,outputTruncated:e.outputTruncated,toolId:e.toolId,batchId:e.batchId,targetPath:o}}}case "file_stream":{if(!e.isComplete)return null;let o=r(e.filePath),i=e.additions||e.removals?`File updated: ${o} (+${e.additions??0}/-${e.removals??0})`:`File updated: ${o}`;return {type:"file_change",sessionId:t,runId:n,actor:"tool",summary:i,files:[o],data:{filePath:o,additions:e.additions,removals:e.removals,description:e.description,contentLength:e.content?.length??0}}}case "edit_file_stream":{if(!e.isComplete)return null;let o=r(e.filePath),i=`File edited: ${o}`;return {type:"file_change",sessionId:t,runId:n,actor:"tool",summary:i,files:[o],data:{filePath:o,startLine:e.startLine,hunks:e.hunks?.length??0,oldPreview:Cn(e.oldString,200),newPreview:Cn(e.newString,200),description:e.description}}}case "write_file_stream":{if(!e.isComplete)return null;let o=r(e.filePath),i=`File written: ${o}`;return {type:"file_change",sessionId:t,runId:n,actor:"tool",summary:i,files:[o],data:{filePath:o,contentLength:e.content?.length??0,description:e.description}}}case "checkpoint":return {type:"checkpoint",sessionId:t,runId:n,actor:"system",summary:`Checkpoint saved: ${e.id}`,data:{id:e.id,auto:e.auto}};case "plan_update":{let o=e.plan.length,i=e.plan.filter(c=>c.status==="completed").length,a=e.plan.filter(c=>c.status==="in_progress").length,l=o-i-a;return {type:"plan_update",sessionId:t,runId:n,actor:"assistant",summary:`Plan update: ${i} done, ${a} active, ${l} pending`,data:{explanation:e.explanation,plan:e.plan}}}case "context_compaction":return {type:"context_compaction",sessionId:t,runId:n,actor:"system",summary:`Context compacted: ${e.originalTokens} -> ${e.finalTokens} tokens`,data:{originalMessages:e.originalMessages,keptMessages:e.keptMessages,droppedMessages:e.droppedMessages,compressedMessages:e.compressedMessages,originalTokens:e.originalTokens,finalTokens:e.finalTokens,budgetTokens:e.budgetTokens,useLLM:e.useLLM}};case "stream_retry":return {type:"stream_retry",sessionId:t,runId:n,actor:"system",summary:`Stream retry ${e.attempt}/${e.maxRetries}: ${e.errorCode}`,data:{error:e.error,errorCode:e.errorCode,attempt:e.attempt,maxRetries:e.maxRetries,delayMs:e.delayMs}};case "stream_recovered":return {type:"stream_recovered",sessionId:t,runId:n,actor:"system",summary:`Stream recovered (attempt ${e.attempt})`,data:{attempt:e.attempt,maxRetries:e.maxRetries}};case "run_result":return {type:"run_result",sessionId:t,runId:n,actor:"assistant",summary:`Run completed in ${e.durationMs}ms, tokens ${e.totalTokens}`,data:{outputPreview:Cn(e.output,ql),totalTokens:e.totalTokens,iterations:e.iterations,toolCalls:e.toolCalls,durationMs:e.durationMs}};case "error":return {type:"run_error",sessionId:t,runId:n,actor:"system",summary:`Runtime error: ${Cn(e.message,Ti)}`,data:{message:e.message}};case "error_classified":return {type:"run_error",sessionId:t,runId:n,actor:"system",summary:`Error ${e.code}: ${Cn(e.message,Ti)}`,data:{category:e.category,code:e.code,message:e.message,suggestion:e.suggestion,retryable:e.retryable}};default:return null}}};var Kl=class{sinks=new Map;register(e){return this.sinks.set(e.name,e),()=>{this.sinks.delete(e.name);}}has(e){return this.sinks.has(e)}remove(e){this.sinks.delete(e);}clear(){this.sinks.clear();}emit(e,t,n){if(this.sinks.size!==0){for(let r of this.sinks.values())if(!(r.shouldForward&&!r.shouldForward(t,n)))try{r.handle(e,t,n);}catch{}}}};function fb(s,e,t){if(e?.setThinkingMode)return e.setThinkingMode(s),true;let n=t;return n?.setThinking?(n.setThinking({type:s==="auto"?"enabled":s}),true):n?.setDoubaoThinking?(n.setDoubaoThinking({type:s}),true):false}Z();var Vs=class{config;hostService;orchestrator;constructor(e){this.config=e,this.hostService=new Dn({platformServices:e.services}),this.orchestrator=new Nn({hostService:this.hostService,resolveProvider:e.resolveProvider}),p.info("SINGLE_AGENT","SingleAgentRuntime initialized");}async chat(e,t){let{sessionId:n,prompt:r,metadata:o}=e;p.info("SINGLE_AGENT","Chat started",{sessionId:n,promptLength:r.length});try{let i=await this.orchestrator.runSession({sessionId:n,prompt:r,metadata:o,providerId:this.config.providerId,modelName:this.config.modelName,buildHostConfig:(l,c)=>({sessionId:n,configKey:"single_agent",provider:l,llmConfig:c,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:this.config.systemPrompt??"Single agent mode",systemPrompt:this.config.systemPrompt,agentName:"SingleAgent",agentDescription:"Single agent mode runtime",permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,agentConfig:{maxIterations:100,temperature:.3,mode:"agent"}}),onRuntimeEvent:(l,c)=>{this.handleRuntimeEvent(l,t);}}),a=i.summary.output||"Task completed";return t?.onComplete?.(a),p.info("SINGLE_AGENT","Chat completed",{sessionId:n,contextUsed:i.contextUsed}),a}catch(i){let a=i instanceof Error?i:new Error(String(i));throw t?.onError?.(a),p.error("SINGLE_AGENT","Chat failed",{error:a.message}),a}}handleRuntimeEvent(e,t){switch(e.type){case "text":t?.onText?.(e.text);break;case "thinking":t?.onThinking?.(e.text);break;case "tool_call":t?.onToolCall?.(e.name,e.args);break;case "tool_result":t?.onToolResult?.(e.name,e.result);break}}abort(){this.hostService.clearAll(),p.info("SINGLE_AGENT","Aborted");}getModeName(){return "single"}};var ki=class{handlers=new Set;typeHandlers=new Map;history=[];maxHistory;constructor(e){this.maxHistory=e?.maxHistory??500;}emit(e){this.history.push(e),this.history.length>this.maxHistory&&this.history.shift();for(let n of this.handlers)try{n(e);}catch(r){console.error("[AgentEventBus] Handler error:",r);}let t=this.typeHandlers.get(e.type);if(t)for(let n of t)try{n(e);}catch(r){console.error("[AgentEventBus] Type handler error:",r);}}subscribe(e){return this.handlers.add(e),()=>{this.handlers.delete(e);}}on(e,t){this.typeHandlers.has(e)||this.typeHandlers.set(e,new Set);let n=this.typeHandlers.get(e);return n.add(t),()=>{n.delete(t),n.size===0&&this.typeHandlers.delete(e);}}getHistory(e){return e&&e>0?this.history.slice(-e):[...this.history]}clearHistory(){this.history=[];}getSubscriberCount(){let e={};for(let[t,n]of this.typeHandlers)e[t]=n.size;return {global:this.handlers.size,byType:e}}};Z();var Ys=class{id;index;task;sessionId;workDir;eventBus;orchestrator;resolveProvider;providerId;modelName;permissionManager;tools;memory;startedAt=0;aborted=false;contextStats={agentId:"",agentLabel:"",input:0,output:0,contextWindow:2e5,tokensUsedForContext:0,pressure:0};constructor(e){this.id=e.id,this.index=e.index,this.task=e.task,this.sessionId=e.sessionId,this.workDir=e.workDir,this.eventBus=e.eventBus,this.orchestrator=e.orchestrator,this.resolveProvider=e.resolveProvider,this.providerId=e.providerId,this.modelName=e.modelName,this.permissionManager=e.permissionManager,this.tools=e.tools,this.memory=e.memory,this.contextStats={agentId:this.id,agentLabel:`Agent #${this.index}`,input:0,output:0,contextWindow:2e5,tokensUsedForContext:0,pressure:0};}getInfo(){return {id:this.id,index:this.index,status:"idle",progress:0,currentTask:this.task.description,startedAt:this.startedAt||void 0}}async execute(){this.startedAt=Date.now();let e=`${this.sessionId}_${this.id}`;this.eventBus.emit({type:"agent_spawned",agent:{id:this.id,index:this.index,status:"running",progress:0,currentTask:this.task.description,startedAt:this.startedAt},timestamp:this.startedAt}),this.eventBus.emit({type:"data_flow",from:"supervisor",to:this.id,label:this.task.description,timestamp:this.startedAt}),this.eventBus.emit({type:"timeline",entry:{id:`${this.id}_start`,timestamp:this.startedAt,source:"supervisor",icon:"\u{1F680}",title:`\u6D3E\u53D1\u4EFB\u52A1\u7ED9 Agent-${this.index}`,description:this.task.description,level:"action"},timestamp:this.startedAt});try{this.reportProgress(10,"\u5F00\u59CB\u6267\u884C...");let t="";await this.orchestrator.runSession({sessionId:e,prompt:this.buildAgentPrompt(),providerId:this.providerId,modelName:this.modelName,buildHostConfig:(o,i)=>({sessionId:e,configKey:`agent_${this.id}`,provider:o,llmConfig:i,workspacePath:this.workDir,workDir:this.workDir,instructions:this.buildAgentInstructions(),systemPrompt:this.buildAgentInstructions(),agentName:`Agent-${this.index}`,agentDescription:`Execution agent for task: ${this.task.description}`,permissionManager:this.permissionManager,tools:this.tools,memory:this.memory,agentConfig:{maxIterations:50,temperature:.3,mode:"agent"},sessionEnabled:!1,disableSystemPrompt:!0}),onRuntimeEvent:o=>{if(o.type==="text"&&(t+=o.delta,this.eventBus.emit({type:"agent_text",agentId:this.id,text:o.delta,timestamp:Date.now()})),o.type==="tool_call_start"?(this.reportProgress(30,`\u6267\u884C: ${o.name}`),this.eventBus.emit({type:"agent_tool_call",agentId:this.id,agentIndex:this.index,toolName:o.name,toolArgs:o.args,status:"start",message:`\u6267\u884C: ${o.name}`,timestamp:Date.now()})):o.type==="tool_call_end"&&(this.reportProgress(70,`\u5B8C\u6210: ${o.name}`),this.eventBus.emit({type:"agent_tool_call",agentId:this.id,agentIndex:this.index,toolName:o.name,status:"end",message:`\u5B8C\u6210: ${o.name}`,timestamp:Date.now()})),o.type==="token_usage"&&this.updateContextStats({input:o.sessionPromptTokens,output:o.sessionCompletionTokens,tokensUsedForContext:o.sessionPromptTokens+o.sessionCompletionTokens}),o.type==="memory_snapshot"){let i=o.snapshot,a=i.profile?.contextWindow||2e5;this.updateContextStats({contextWindow:a,tokensUsedForContext:i.tokensUsed,pressure:i.pressure||i.tokensUsed/a});}}});let n=Date.now()-this.startedAt,r=this.summarizeOutput(t);return this.eventBus.emit({type:"agent_completed",agentId:this.id,result:r,timestamp:Date.now()}),this.eventBus.emit({type:"timeline",entry:{id:`${this.id}_complete`,timestamp:Date.now(),source:this.id,icon:"\u2713",title:`Agent-${this.index} \u5B8C\u6210`,description:r,level:"result"},timestamp:Date.now()}),p.info("AGENT",`Agent ${this.id} completed`,{duration:n,outputLength:t.length}),{success:!0,summary:r,output:t,duration:n}}catch(t){let n=Date.now()-this.startedAt,r=t instanceof Error?t.message:String(t);return p.error("AGENT",`Agent ${this.id} failed`,{error:r,duration:n}),this.eventBus.emit({type:"agent_error",agentId:this.id,error:r,timestamp:Date.now()}),this.eventBus.emit({type:"timeline",entry:{id:`${this.id}_error`,timestamp:Date.now(),source:this.id,icon:"\u2717",title:`Agent-${this.index} \u5931\u8D25`,description:r,level:"error"},timestamp:Date.now()}),{success:false,summary:"\u6267\u884C\u5931\u8D25",error:r,duration:n}}}abort(){this.aborted=true;let{getGlobalWriteLockManager:e}=(ol(),Nc(Ef)),n=e().releaseAll(this.id);n>0&&p.info("AGENT",`Released ${n} write locks on abort`,{agentId:this.id}),this.eventBus.emit({type:"agent_terminated",agentId:this.id,reason:"User requested abort",timestamp:Date.now()});}updateContextStats(e){this.contextStats={...this.contextStats,...e},e.tokensUsedForContext!==void 0&&this.contextStats.contextWindow>0&&(this.contextStats.pressure=this.contextStats.tokensUsedForContext/this.contextStats.contextWindow),this.eventBus.emit({type:"agent_context_update",agentId:this.id,stats:{...this.contextStats},timestamp:Date.now()});}reportProgress(e,t){this.eventBus.emit({type:"agent_progress",agentId:this.id,progress:e,message:t,timestamp:Date.now()}),this.eventBus.emit({type:"agent_status",agentId:this.id,status:"running",message:t,timestamp:Date.now()});}buildAgentPrompt(){return this.task.description}buildAgentInstructions(){return `\u4F60\u662F\u4E00\u4E2A\u6267\u884C\u4EE3\u7406\uFF0C\u8D1F\u8D23\u5B8C\u6210\u5206\u914D\u7ED9\u4F60\u7684\u4EFB\u52A1\u3002
2102
2102
 
2103
2103
  ## \u4EFB\u52A1
2104
2104
  ${this.task.description}
@@ -2123,7 +2123,7 @@ ${a}`};return this.spawnAndExecute(l,t)}catch(o){let i=o instanceof Error?o.mess
2123
2123
  `)+`
2124
2124
  `;Je.writeFileSync(e,n,"utf-8"),this.writeStream&&this.writeStream.end(),Je.renameSync(e,this.filePath),this.openWriteStream(),p.info("TASK_MAP",`Compacted to ${t.length} records`);}},fp=null;function bp(){return fp||(fp=new Jl),fp}Z();var Vl=null;function Cp(s){Vl=s,p.debug("COLLAB_TOOLS","Context set",{sessionId:s.sessionId});}function Yl(){Vl=null;}function qr(){if(!Vl)throw new Error("Collab tools context not initialized");return Vl}var vp=null;function Xl(){return vp||(vp=new Nt(new ze)),vp}function yb(){let e=Xl().getEnabledWorkerModels();return e.length===0?"\uFF08\u6682\u65E0\u53EF\u7528 Worker \u6A21\u578B\uFF09":`\u53EF\u7528 Worker \u6A21\u578B\uFF08\u8BF7\u6839\u636E\u4EFB\u52A1\u9700\u6C42\u9009\u62E9\u6700\u5408\u9002\u7684\uFF09\uFF1A
2125
2125
  ${e.map((n,r)=>{let o=n.traits?.join(", ")||"\u901A\u7528";return ` ${r+1}. [${n.providerId}] ${n.model} - \u7279\u6027: ${o}`}).join(`
2126
- `)}`}function bb(s){let t=Xl().getEnabledWorkerModels(),n=t.find(o=>o.providerId===s);if(n||(n=t.find(o=>o.model===s),n))return n;let r=s.toLowerCase();return n=t.find(o=>o.model.toLowerCase().includes(r)||o.providerId.toLowerCase().includes(r)),n}function sE(){return {name:"spawn_agent",description:`\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u534F\u4F5C Agent \u6765\u6267\u884C\u4EFB\u52A1\u3002
2126
+ `)}`}function bb(s){let t=Xl().getEnabledWorkerModels(),n=t.find(o=>o.providerId===s);if(n||(n=t.find(o=>o.model===s),n))return n;let r=s.toLowerCase();return n=t.find(o=>o.model.toLowerCase().includes(r)||o.providerId.toLowerCase().includes(r)),n}function oE(){return {name:"spawn_agent",description:`\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u534F\u4F5C Agent \u6765\u6267\u884C\u4EFB\u52A1\u3002
2127
2127
 
2128
2128
  ${yb()}
2129
2129
 
@@ -2131,14 +2131,14 @@ ${yb()}
2131
2131
  - UI/\u754C\u9762/\u89C6\u89C9\u8BBE\u8BA1\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 ui, design, vision \u7279\u6027\u7684\u6A21\u578B
2132
2132
  - \u4EE3\u7801\u7F16\u5199/\u8C03\u8BD5\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 coding, agent \u7279\u6027\u7684\u6A21\u578B
2133
2133
  - \u5FEB\u901F\u7B80\u5355\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 fast, low-cost \u7279\u6027\u7684\u6A21\u578B
2134
- - \u590D\u6742\u63A8\u7406\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 reasoning, thorough \u7279\u6027\u7684\u6A21\u578B`,parameters:{type:"object",properties:{task:{type:"string",description:"\u4EFB\u52A1\u63CF\u8FF0"},workerId:{type:"string",description:"\u{1F525}\u3010\u63A8\u8350\u3011Worker \u7684 providerId \u6216 model \u540D\u79F0\u3002\u8BF7\u6839\u636E\u4E0A\u9762\u7684 Worker \u6C60\u5217\u8868\uFF0C\u9009\u62E9\u6700\u9002\u5408\u5F53\u524D\u4EFB\u52A1\u7684\u6A21\u578B"},wait:{type:"boolean",description:"\u662F\u5426\u7B49\u5F85\u5B8C\u6210\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["task"]},async function(e){let t=qr(),{task:n,workerId:r,wait:o=false}=e,i=t.maxConcurrent,a=t.getActiveWorkerCount?.()??0;if(typeof i=="number"&&a>=i)return JSON.stringify({error:`Max concurrent workers reached (${a}/${i})`});let l,c;if(r){let u=bb(r);u?(l=u.model,c=u.providerId,p.info("COLLAB_DECISION","\u{1F9E0} LLM \u81EA\u4E3B\u9009\u62E9 Worker",{workerId:r,resolvedModel:l,resolvedProviderId:c,task:n.substring(0,80)})):p.warn("COLLAB_TOOLS",`Worker not found: ${r}, using default`);}if(!l){let d=Xl().getEnabledWorkerModels();d.length>0&&(l=d[0].model,c=d[0].providerId);}p.info("COLLAB_DECISION","\u{1F9E0} \u521B\u5EFA\u534F\u4F5C Agent",{task:n.substring(0,80),workerId:r,resolvedModel:l,wait:o});try{let u=await t.agentPool.spawn({prompt:n,sessionId:t.sessionId,model:l,providerId:c}),{agentId:d,taskId:m}=u;if(t.taskMapStore.put({taskId:m,agentId:d,sessionId:t.sessionId,status:"running",createdAt:Date.now(),updatedAt:Date.now(),description:n,model:l,workerId:r}),p.info("COLLAB_TOOLS",`Spawned agent ${d}`,{task:n,model:l,workerId:r}),o){let g=await t.sharedContext.waitForTaskResult(m,3e5);return JSON.stringify({agentId:d,taskId:m,status:"completed",result:g,model:l})}return JSON.stringify({agentId:d,taskId:m,status:"spawned",model:l})}catch(u){return JSON.stringify({error:u.message})}}}}function oE(){return {name:"delegate_task",description:`\u59D4\u6D3E\u8F7B\u91CF\u4EFB\u52A1\uFF08\u4E0D\u521B\u5EFA\u5B8C\u6574 Agent\uFF0C\u540C\u6B65\u7B49\u5F85\u7ED3\u679C\uFF09\u3002
2134
+ - \u590D\u6742\u63A8\u7406\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 reasoning, thorough \u7279\u6027\u7684\u6A21\u578B`,parameters:{type:"object",properties:{task:{type:"string",description:"\u4EFB\u52A1\u63CF\u8FF0"},workerId:{type:"string",description:"\u{1F525}\u3010\u63A8\u8350\u3011Worker \u7684 providerId \u6216 model \u540D\u79F0\u3002\u8BF7\u6839\u636E\u4E0A\u9762\u7684 Worker \u6C60\u5217\u8868\uFF0C\u9009\u62E9\u6700\u9002\u5408\u5F53\u524D\u4EFB\u52A1\u7684\u6A21\u578B"},wait:{type:"boolean",description:"\u662F\u5426\u7B49\u5F85\u5B8C\u6210\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["task"]},async function(e){let t=qr(),{task:n,workerId:r,wait:o=false}=e,i=t.maxConcurrent,a=t.getActiveWorkerCount?.()??0;if(typeof i=="number"&&a>=i)return JSON.stringify({error:`Max concurrent workers reached (${a}/${i})`});let l,c;if(r){let u=bb(r);u?(l=u.model,c=u.providerId,p.info("COLLAB_DECISION","\u{1F9E0} LLM \u81EA\u4E3B\u9009\u62E9 Worker",{workerId:r,resolvedModel:l,resolvedProviderId:c,task:n.substring(0,80)})):p.warn("COLLAB_TOOLS",`Worker not found: ${r}, using default`);}if(!l){let d=Xl().getEnabledWorkerModels();d.length>0&&(l=d[0].model,c=d[0].providerId);}p.info("COLLAB_DECISION","\u{1F9E0} \u521B\u5EFA\u534F\u4F5C Agent",{task:n.substring(0,80),workerId:r,resolvedModel:l,wait:o});try{let u=await t.agentPool.spawn({prompt:n,sessionId:t.sessionId,model:l,providerId:c}),{agentId:d,taskId:m}=u;if(t.taskMapStore.put({taskId:m,agentId:d,sessionId:t.sessionId,status:"running",createdAt:Date.now(),updatedAt:Date.now(),description:n,model:l,workerId:r}),p.info("COLLAB_TOOLS",`Spawned agent ${d}`,{task:n,model:l,workerId:r}),o){let g=await t.sharedContext.waitForTaskResult(m,3e5);return JSON.stringify({agentId:d,taskId:m,status:"completed",result:g,model:l})}return JSON.stringify({agentId:d,taskId:m,status:"spawned",model:l})}catch(u){return JSON.stringify({error:u.message})}}}}function iE(){return {name:"delegate_task",description:`\u59D4\u6D3E\u8F7B\u91CF\u4EFB\u52A1\uFF08\u4E0D\u521B\u5EFA\u5B8C\u6574 Agent\uFF0C\u540C\u6B65\u7B49\u5F85\u7ED3\u679C\uFF09\u3002
2135
2135
 
2136
2136
  ${yb()}
2137
2137
 
2138
2138
  \u6839\u636E\u4EFB\u52A1\u9700\u6C42\uFF0C\u4F60\u9700\u8981\u81EA\u4E3B\u5224\u65AD\u5E76\u9009\u62E9\u6700\u5408\u9002\u7684 Worker \u6A21\u578B\uFF1A
2139
2139
  - UI/\u754C\u9762/\u524D\u7AEF\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 ui, design, vision \u7279\u6027\u7684\u6A21\u578B
2140
2140
  - \u4EE3\u7801/\u540E\u7AEF/\u7B97\u6CD5\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 coding, agent \u7279\u6027\u7684\u6A21\u578B
2141
- - \u5FEB\u901F\u67E5\u8BE2/\u7B80\u5355\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 fast, low-cost \u7279\u6027\u7684\u6A21\u578B`,parameters:{type:"object",properties:{task:{type:"string",description:"\u4EFB\u52A1\u63CF\u8FF0"},workerId:{type:"string",description:"\u{1F525}\u3010\u63A8\u8350\u3011Worker \u7684 providerId \u6216 model \u540D\u79F0\u3002\u8BF7\u6839\u636E\u4E0A\u9762\u7684 Worker \u6C60\u5217\u8868\uFF0C\u9009\u62E9\u6700\u9002\u5408\u5F53\u524D\u4EFB\u52A1\u7684\u6A21\u578B"},tools:{type:"array",items:{type:"string"},description:"\u5141\u8BB8\u4F7F\u7528\u7684\u5DE5\u5177\u5217\u8868\uFF08\u53EF\u9009\uFF09"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF0C\u9ED8\u8BA4 60\uFF09"}},required:["task"]},async function(e){let t=qr(),{task:n,workerId:r,tools:o,timeout:i=60}=e,a=t.maxConcurrent,l=t.getActiveWorkerCount?.()??0;if(typeof a=="number"&&l>=a)return JSON.stringify({tool:"delegate_task",status:"error",success:false,summary:"delegate_task failed",error:`Max concurrent workers reached (${l}/${a})`});let c,u;if(r){let d=bb(r);d?(c=d.model,u=d.providerId,p.info("COLLAB_DECISION","\u{1F9E0} LLM \u81EA\u4E3B\u9009\u62E9 Worker \u6267\u884C\u59D4\u6D3E\u4EFB\u52A1",{workerId:r,resolvedModel:c,resolvedProviderId:u,task:n.substring(0,80)})):p.warn("COLLAB_TOOLS",`Worker not found: ${r}, using default`);}if(!c){let m=Xl().getEnabledWorkerModels();m.length>0&&(c=m[0].model,u=m[0].providerId);}p.info("COLLAB_DECISION","\u{1F9E0} \u59D4\u6D3E\u4EFB\u52A1",{task:n.substring(0,80),workerId:r,resolvedModel:c,timeout:i});try{if(t.delegateRunner){let f=await t.delegateRunner({task:n,model:c,tools:o,timeout:i});return JSON.stringify({tool:"delegate_task",status:f.success?"success":"error",...f,model:c})}let d=await t.agentPool.spawn({prompt:n,sessionId:t.sessionId,model:c,providerId:u}),{agentId:m,taskId:g}=d;t.taskMapStore.put({taskId:g,agentId:m,sessionId:t.sessionId,status:"running",createdAt:Date.now(),updatedAt:Date.now(),description:n,model:c,workerId:r});let h=await t.sharedContext.waitForTaskResult(g,i*1e3);return t.taskMapStore.updateStatus(g,h.success?"completed":"failed"),JSON.stringify({tool:"delegate_task",status:h.success?"success":"error",success:h.success,summary:h.success?"delegate_task completed":"delegate_task failed",output:h.output,error:h.error,model:c})}catch(d){return JSON.stringify({tool:"delegate_task",status:"error",success:false,summary:"delegate_task failed",error:d.message})}}}}var iE={name:"query_agent",description:"\u67E5\u8BE2 Agent \u7684\u72B6\u6001\u548C\u4E0A\u4E0B\u6587",parameters:{type:"object",properties:{agentId:{type:"string",description:"Agent ID"},includeContext:{type:"boolean",description:"\u662F\u5426\u5305\u542B\u5B8C\u6574\u4E0A\u4E0B\u6587\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["agentId"]},async function(s){let e=qr(),{agentId:t,includeContext:n=false}=s;try{let o=e.agentPool.getActiveAgents().find(a=>a.id===t);if(!o)return JSON.stringify({error:"Agent not found",agentId:t});let i={id:o.id,status:o.status,progress:o.progress,currentTask:o.currentTask};if(n){let a=e.taskMapStore.getRecordByAgent(t);a&&(i.taskId=a.taskId,i.description=a.description);}return JSON.stringify(i)}catch(r){return JSON.stringify({error:r.message})}}},aE={name:"send_message",description:"\u53D1\u9001\u6D88\u606F\u7ED9\u6307\u5B9A Agent",parameters:{type:"object",properties:{agentId:{type:"string",description:'\u76EE\u6807 Agent ID\uFF08\u6216 "broadcast"\uFF09'},message:{type:"string",description:"\u6D88\u606F\u5185\u5BB9"},type:{type:"string",enum:["info","question","instruction","abort"],description:"\u6D88\u606F\u7C7B\u578B\uFF08\u9ED8\u8BA4 info\uFF09"}},required:["agentId","message"]},async function(s){let e=qr(),{agentId:t,message:n,type:r="info"}=s;try{let o=t==="broadcast"?"*":t;return e.sharedContext.sendMessage({from:e.agentId,to:o,type:r,payload:{message:n}}),JSON.stringify({success:!0,to:o,type:r})}catch(o){return JSON.stringify({error:o.message})}}},lE={name:"wait_result",description:"\u7B49\u5F85\u6307\u5B9A Agent \u5B8C\u6210\u5E76\u83B7\u53D6\u7ED3\u679C",parameters:{type:"object",properties:{agentId:{type:"string",description:"Agent ID"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF0C\u9ED8\u8BA4 300\uFF09"}},required:["agentId"]},async function(s){let e=qr(),{agentId:t,timeout:n=300}=s;try{let r=e.taskMapStore.getTaskId(t);if(!r)return JSON.stringify({error:"Task not found",agentId:t});let o=await e.sharedContext.waitForTaskResult(r,n*1e3);return e.taskMapStore.updateStatus(r,o.success?"completed":"failed"),JSON.stringify(o)}catch(r){return JSON.stringify({error:r.message})}}},cE={name:"wait_all",description:"\u7B49\u5F85\u591A\u4E2A Agent \u5B8C\u6210\u5E76\u83B7\u53D6\u7ED3\u679C",parameters:{type:"object",properties:{agentIds:{type:"array",items:{type:"string"},description:"Agent ID \u5217\u8868"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF0C\u9ED8\u8BA4 1800\uFF09"}},required:["agentIds"]},async function(s){let e=qr(),{agentIds:t,timeout:n=1800}=s;try{let r=Array.isArray(t)?t:[],o=[],i=[];for(let c of r){let u=e.taskMapStore.getTaskId(c);u?o.push(u):i.push(c);}if(i.length>0)return JSON.stringify({error:"task_not_found",missing:i});let a=await e.sharedContext.waitForDependencies(o,n*1e3),l={};for(let[c,u]of a.entries()){let d=e.taskMapStore.getAgentId(c);d&&(l[d]=u),e.taskMapStore.updateStatus(c,u.success?"completed":"failed");}return JSON.stringify({results:l})}catch(r){return JSON.stringify({error:r.message})}}},uE={name:"terminate_agent",description:"\u7EC8\u6B62\u6307\u5B9A Agent",parameters:{type:"object",properties:{agentId:{type:"string",description:"Agent ID"},reason:{type:"string",description:"\u7EC8\u6B62\u539F\u56E0"}},required:["agentId"]},async function(s){let e=qr(),{agentId:t,reason:n="User requested"}=s;try{let r=e.agentPool.abort(t);if(r){let o=e.taskMapStore.getTaskId(t);o&&e.taskMapStore.updateStatus(o,"failed"),p.info("COLLAB_TOOLS",`Terminated ${t}`,{reason:n});}return JSON.stringify({success:r,agentId:t,reason:n})}catch(r){return JSON.stringify({error:r.message})}}};function xp(){return [sE(),oE(),iE,aE,lE,cE,uE]}Z();function pE(){let e=new Nt(new ze).getEnabledWorkerModels(),t="";return e.length>0?t=e.map(n=>{let r=n.traits?.length?n.traits.join(", "):"\u901A\u7528";return ` - ${n.model}: [${r}]`}).join(`
2141
+ - \u5FEB\u901F\u67E5\u8BE2/\u7B80\u5355\u4EFB\u52A1 \u2192 \u9009\u62E9\u6709 fast, low-cost \u7279\u6027\u7684\u6A21\u578B`,parameters:{type:"object",properties:{task:{type:"string",description:"\u4EFB\u52A1\u63CF\u8FF0"},workerId:{type:"string",description:"\u{1F525}\u3010\u63A8\u8350\u3011Worker \u7684 providerId \u6216 model \u540D\u79F0\u3002\u8BF7\u6839\u636E\u4E0A\u9762\u7684 Worker \u6C60\u5217\u8868\uFF0C\u9009\u62E9\u6700\u9002\u5408\u5F53\u524D\u4EFB\u52A1\u7684\u6A21\u578B"},tools:{type:"array",items:{type:"string"},description:"\u5141\u8BB8\u4F7F\u7528\u7684\u5DE5\u5177\u5217\u8868\uFF08\u53EF\u9009\uFF09"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF0C\u9ED8\u8BA4 60\uFF09"}},required:["task"]},async function(e){let t=qr(),{task:n,workerId:r,tools:o,timeout:i=60}=e,a=t.maxConcurrent,l=t.getActiveWorkerCount?.()??0;if(typeof a=="number"&&l>=a)return JSON.stringify({tool:"delegate_task",status:"error",success:false,summary:"delegate_task failed",error:`Max concurrent workers reached (${l}/${a})`});let c,u;if(r){let d=bb(r);d?(c=d.model,u=d.providerId,p.info("COLLAB_DECISION","\u{1F9E0} LLM \u81EA\u4E3B\u9009\u62E9 Worker \u6267\u884C\u59D4\u6D3E\u4EFB\u52A1",{workerId:r,resolvedModel:c,resolvedProviderId:u,task:n.substring(0,80)})):p.warn("COLLAB_TOOLS",`Worker not found: ${r}, using default`);}if(!c){let m=Xl().getEnabledWorkerModels();m.length>0&&(c=m[0].model,u=m[0].providerId);}p.info("COLLAB_DECISION","\u{1F9E0} \u59D4\u6D3E\u4EFB\u52A1",{task:n.substring(0,80),workerId:r,resolvedModel:c,timeout:i});try{if(t.delegateRunner){let f=await t.delegateRunner({task:n,model:c,tools:o,timeout:i});return JSON.stringify({tool:"delegate_task",status:f.success?"success":"error",...f,model:c})}let d=await t.agentPool.spawn({prompt:n,sessionId:t.sessionId,model:c,providerId:u}),{agentId:m,taskId:g}=d;t.taskMapStore.put({taskId:g,agentId:m,sessionId:t.sessionId,status:"running",createdAt:Date.now(),updatedAt:Date.now(),description:n,model:c,workerId:r});let h=await t.sharedContext.waitForTaskResult(g,i*1e3);return t.taskMapStore.updateStatus(g,h.success?"completed":"failed"),JSON.stringify({tool:"delegate_task",status:h.success?"success":"error",success:h.success,summary:h.success?"delegate_task completed":"delegate_task failed",output:h.output,error:h.error,model:c})}catch(d){return JSON.stringify({tool:"delegate_task",status:"error",success:false,summary:"delegate_task failed",error:d.message})}}}}var aE={name:"query_agent",description:"\u67E5\u8BE2 Agent \u7684\u72B6\u6001\u548C\u4E0A\u4E0B\u6587",parameters:{type:"object",properties:{agentId:{type:"string",description:"Agent ID"},includeContext:{type:"boolean",description:"\u662F\u5426\u5305\u542B\u5B8C\u6574\u4E0A\u4E0B\u6587\uFF08\u9ED8\u8BA4 false\uFF09"}},required:["agentId"]},async function(s){let e=qr(),{agentId:t,includeContext:n=false}=s;try{let o=e.agentPool.getActiveAgents().find(a=>a.id===t);if(!o)return JSON.stringify({error:"Agent not found",agentId:t});let i={id:o.id,status:o.status,progress:o.progress,currentTask:o.currentTask};if(n){let a=e.taskMapStore.getRecordByAgent(t);a&&(i.taskId=a.taskId,i.description=a.description);}return JSON.stringify(i)}catch(r){return JSON.stringify({error:r.message})}}},lE={name:"send_message",description:"\u53D1\u9001\u6D88\u606F\u7ED9\u6307\u5B9A Agent",parameters:{type:"object",properties:{agentId:{type:"string",description:'\u76EE\u6807 Agent ID\uFF08\u6216 "broadcast"\uFF09'},message:{type:"string",description:"\u6D88\u606F\u5185\u5BB9"},type:{type:"string",enum:["info","question","instruction","abort"],description:"\u6D88\u606F\u7C7B\u578B\uFF08\u9ED8\u8BA4 info\uFF09"}},required:["agentId","message"]},async function(s){let e=qr(),{agentId:t,message:n,type:r="info"}=s;try{let o=t==="broadcast"?"*":t;return e.sharedContext.sendMessage({from:e.agentId,to:o,type:r,payload:{message:n}}),JSON.stringify({success:!0,to:o,type:r})}catch(o){return JSON.stringify({error:o.message})}}},cE={name:"wait_result",description:"\u7B49\u5F85\u6307\u5B9A Agent \u5B8C\u6210\u5E76\u83B7\u53D6\u7ED3\u679C",parameters:{type:"object",properties:{agentId:{type:"string",description:"Agent ID"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF0C\u9ED8\u8BA4 300\uFF09"}},required:["agentId"]},async function(s){let e=qr(),{agentId:t,timeout:n=300}=s;try{let r=e.taskMapStore.getTaskId(t);if(!r)return JSON.stringify({error:"Task not found",agentId:t});let o=await e.sharedContext.waitForTaskResult(r,n*1e3);return e.taskMapStore.updateStatus(r,o.success?"completed":"failed"),JSON.stringify(o)}catch(r){return JSON.stringify({error:r.message})}}},uE={name:"wait_all",description:"\u7B49\u5F85\u591A\u4E2A Agent \u5B8C\u6210\u5E76\u83B7\u53D6\u7ED3\u679C",parameters:{type:"object",properties:{agentIds:{type:"array",items:{type:"string"},description:"Agent ID \u5217\u8868"},timeout:{type:"number",description:"\u8D85\u65F6\u65F6\u95F4\uFF08\u79D2\uFF0C\u9ED8\u8BA4 1800\uFF09"}},required:["agentIds"]},async function(s){let e=qr(),{agentIds:t,timeout:n=1800}=s;try{let r=Array.isArray(t)?t:[],o=[],i=[];for(let c of r){let u=e.taskMapStore.getTaskId(c);u?o.push(u):i.push(c);}if(i.length>0)return JSON.stringify({error:"task_not_found",missing:i});let a=await e.sharedContext.waitForDependencies(o,n*1e3),l={};for(let[c,u]of a.entries()){let d=e.taskMapStore.getAgentId(c);d&&(l[d]=u),e.taskMapStore.updateStatus(c,u.success?"completed":"failed");}return JSON.stringify({results:l})}catch(r){return JSON.stringify({error:r.message})}}},dE={name:"terminate_agent",description:"\u7EC8\u6B62\u6307\u5B9A Agent",parameters:{type:"object",properties:{agentId:{type:"string",description:"Agent ID"},reason:{type:"string",description:"\u7EC8\u6B62\u539F\u56E0"}},required:["agentId"]},async function(s){let e=qr(),{agentId:t,reason:n="User requested"}=s;try{let r=e.agentPool.abort(t);if(r){let o=e.taskMapStore.getTaskId(t);o&&e.taskMapStore.updateStatus(o,"failed"),p.info("COLLAB_TOOLS",`Terminated ${t}`,{reason:n});}return JSON.stringify({success:r,agentId:t,reason:n})}catch(r){return JSON.stringify({error:r.message})}}};function xp(){return [oE(),iE(),aE,lE,cE,uE,dE]}Z();function mE(){let e=new Nt(new ze).getEnabledWorkerModels(),t="";return e.length>0?t=e.map(n=>{let r=n.traits?.length?n.traits.join(", "):"\u901A\u7528";return ` - ${n.model}: [${r}]`}).join(`
2142
2142
  `):t=" (\u5C06\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B)",`
2143
2143
  ## \u{1F91D} \u534F\u4F5C\u6A21\u5F0F - \u4F60\u662F\u4EFB\u52A1\u534F\u8C03\u8005
2144
2144
 
@@ -2226,7 +2226,7 @@ wait_all({ agentIds: ["agent-1", "agent-2"] })
2226
2226
  - **\u5B50\u4EFB\u52A1\u63CF\u8FF0\u5FC5\u987B\u5B8C\u6574**\uFF1A\u5305\u542B\u6587\u4EF6\u8DEF\u5F84\u3001\u5177\u4F53\u8981\u6C42\u3001\u4E0A\u4E0B\u6587\u4FE1\u606F
2227
2227
  - **\u68C0\u67E5\u8FD4\u56DE\u7684 success \u72B6\u6001**\uFF1A\u5931\u8D25\u65F6\u67E5\u770B error \u4FE1\u606F
2228
2228
  - **\u4F60\u662F\u534F\u8C03\u8005**\uFF1A\u8BA9 Worker \u505A\u5177\u4F53\u5DE5\u4F5C\uFF0C\u4F60\u8D1F\u8D23\u89C4\u5212\u548C\u6574\u5408
2229
- `}function mE(){return {emit:()=>{},subscribe:()=>()=>{},on:()=>()=>{},getHistory:()=>[]}}var Xs=class extends EventEmitter{config;hostService;orchestrator;sharedContext;agentPool;taskMapStore=bp();collabConfigStore;mainAgentId="main";workerCounter=0;activeDelegateWorkers=new Set;constructor(e){super(),this.config=e,this.collabConfigStore=new Nt(new ze),this.sharedContext=new xr,this.hostService=new Dn({platformServices:e.services}),this.orchestrator=new Nn({hostService:this.hostService,resolveProvider:e.resolveProvider});let t=mE();this.agentPool=new zr({eventBus:t,orchestrator:this.orchestrator,resolveProvider:this.config.resolveProvider,providerId:this.config.providerId,modelName:this.config.modelName,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,sharedContext:this.sharedContext,hostService:this.hostService}),this.sharedContext.on("task_result",n=>{this.taskMapStore.updateStatus(n.taskId,n.success?"completed":"failed");}),p.info("COLLAB_RUNTIME","CollabAgentRuntime initialized");}async chat(e){let{sessionId:t,prompt:n}=e;Ps(),bd(this.mainAgentId),this.setupCollabContext(t),this.emit("worker_start",{agentId:"Main",task:n.substring(0,100),model:this.config.modelName});try{p.info("COLLAB_RUNTIME","Chat started",{sessionId:t});let r=xp(),i=[...Dr(this.config.tools,this.mainAgentId),...r],a=this.config.systemPrompt||"",l=pE(),c=a+`
2229
+ `}function gE(){return {emit:()=>{},subscribe:()=>()=>{},on:()=>()=>{},getHistory:()=>[]}}var Xs=class extends EventEmitter{config;hostService;orchestrator;sharedContext;agentPool;taskMapStore=bp();collabConfigStore;mainAgentId="main";workerCounter=0;activeDelegateWorkers=new Set;constructor(e){super(),this.config=e,this.collabConfigStore=new Nt(new ze),this.sharedContext=new xr,this.hostService=new Dn({platformServices:e.services}),this.orchestrator=new Nn({hostService:this.hostService,resolveProvider:e.resolveProvider});let t=gE();this.agentPool=new zr({eventBus:t,orchestrator:this.orchestrator,resolveProvider:this.config.resolveProvider,providerId:this.config.providerId,modelName:this.config.modelName,permissionManager:this.config.permissionManager,tools:this.config.tools,memory:this.config.memory,workDir:this.config.workDir,sharedContext:this.sharedContext,hostService:this.hostService}),this.sharedContext.on("task_result",n=>{this.taskMapStore.updateStatus(n.taskId,n.success?"completed":"failed");}),p.info("COLLAB_RUNTIME","CollabAgentRuntime initialized");}async chat(e){let{sessionId:t,prompt:n}=e;Ps(),bd(this.mainAgentId),this.setupCollabContext(t),this.emit("worker_start",{agentId:"Main",task:n.substring(0,100),model:this.config.modelName});try{p.info("COLLAB_RUNTIME","Chat started",{sessionId:t});let r=xp(),i=[...Dr(this.config.tools,this.mainAgentId),...r],a=this.config.systemPrompt||"",l=mE(),c=a+`
2230
2230
 
2231
2231
  `+l;p.info("COLLAB_RUNTIME","Building enhanced system prompt",{hasBasePrompt:!!a,basePromptLength:a.length,collabInstructionsLength:l.length,enhancedPromptLength:c.length,collabInstructionsPreview:l.substring(0,200)});let u=new cn;p.info("COLLAB_RUNTIME","Created fresh memory for collab main agent");let m=(await this.orchestrator.runSession({sessionId:t,prompt:n,providerId:this.config.providerId,modelName:this.config.modelName,buildHostConfig:(g,h)=>({sessionId:t,configKey:`collab_main_${Date.now()}`,provider:g,llmConfig:h,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:c,systemPrompt:c,agentName:"MainAgent",agentDescription:"Collab mode main agent with delegation capabilities",permissionManager:this.config.permissionManager,tools:i,memory:u,agentConfig:{maxIterations:100,temperature:.3,mode:"agent"}}),onRuntimeEvent:(g,h)=>{p.debug("COLLAB_RUNTIME",`\u{1F4E4} Main agent event: ${g.type}`),this.emit("worker_event",{agentId:"Main",event:g,tracker:h});}})).summary.output||"Task completed";return this.emit("worker_complete",{agentId:"Main",success:!0,summary:m.substring(0,100)}),m}catch(r){let o=r instanceof Error?r.message:String(r);throw this.emit("worker_complete",{agentId:"Main",success:false,error:o}),r}finally{Yl(),yr(),this.hostService.getHost(t)?.dispose?.(),this.hostService.clearHost(t);}}setupCollabContext(e){Cp({agentPool:this.agentPool,sharedContext:this.sharedContext,taskMapStore:this.taskMapStore,sessionId:e,agentId:this.mainAgentId,delegateRunner:t=>this.runDelegateTask(t,e),maxConcurrent:this.getMaxConcurrentWorkers(),getActiveWorkerCount:()=>this.getActiveWorkerCount()});}abort(){this.agentPool.abortAll(),this.hostService.clearAll(),yr(),Yl(),p.info("COLLAB_RUNTIME","Aborted");}getModeName(){return "collab"}async runDelegateTask(e,t){let{task:n,model:r,tools:o,timeout:i=60}=e,a=this.getMaxConcurrentWorkers(),l=this.getActiveWorkerCount();if(l>=a)return {success:false,summary:"delegate_task failed",error:`Max concurrent workers reached (${l}/${a})`};this.workerCounter++;let c=`Worker-${this.workerCounter}`,u=`${t}_delegate_${Date.now()}`;this.activeDelegateWorkers.add(c);let d=o?.length?this.config.tools.filter(b=>o.includes(b.name)):this.config.tools,m=Dr(d,c),g=r??this.config.modelName,h=new cn;this.emit("worker_start",{agentId:c,task:n.substring(0,100),model:g}),p.debug("COLLAB_RUNTIME",`Worker ${c} started`,{task:n.substring(0,50)});let f=this.orchestrator.runSession({sessionId:u,prompt:n,providerId:this.config.providerId,modelName:g,buildHostConfig:(b,C)=>({sessionId:u,configKey:"delegate_task",provider:b,llmConfig:C,workspacePath:this.config.workDir,workDir:this.config.workDir,instructions:this.config.systemPrompt??"Collab delegate task agent",systemPrompt:this.config.systemPrompt,agentName:c,agentDescription:"Collab mode delegate task agent",permissionManager:this.config.permissionManager,tools:m,memory:h,agentConfig:{maxIterations:40,temperature:.3,mode:"agent"}}),onRuntimeEvent:(b,C)=>{p.debug("COLLAB_RUNTIME",`\u{1F4E4} Emitting worker_event: ${c} - ${b.type}`),this.emit("worker_event",{agentId:c,event:b,tracker:C}),b.type==="tool_call_start"?p.debug("COLLAB_RUNTIME",`[${c}] Tool start: ${b.name}`):b.type==="tool_call_end"&&p.debug("COLLAB_RUNTIME",`[${c}] Tool end: ${b.name} (${b.success?"ok":"failed"})`);}}),v=new Promise((b,C)=>{let T=setTimeout(()=>{clearTimeout(T),C(new Error(`delegate_task timeout after ${i}s`));},i*1e3);});try{let b=await Promise.race([f,v]);return this.emit("worker_complete",{agentId:c,success:!0,summary:b.summary.output?.substring(0,100)||"completed"}),p.debug("COLLAB_RUNTIME",`Worker ${c} completed`),{success:!0,summary:b.summary.output||"delegate_task completed",output:b.summary.output}}catch(b){return this.emit("worker_complete",{agentId:c,success:false,error:b.message}),p.debug("COLLAB_RUNTIME",`Worker ${c} failed`,{error:b.message}),{success:false,summary:"delegate_task failed",error:b.message}}finally{this.activeDelegateWorkers.delete(c),this.hostService.getHost(u)?.dispose?.(),this.hostService.clearHost(u);}}getMaxConcurrentWorkers(){let e=this.config.maxConcurrent;if(typeof e=="number"&&Number.isFinite(e)&&e>0)return Math.floor(e);let t=this.collabConfigStore.getMaxConcurrent();return typeof t=="number"&&Number.isFinite(t)&&t>0?Math.floor(t):js}getActiveWorkerCount(){return this.agentPool.getActiveCount()+this.activeDelegateWorkers.size}};Z();var Tp=`\u4F60\u662F Neox Agent Network \u7684\u5165\u53E3\u5206\u6790\u5668\u3002
2232
2232
  \u4F60\u7684\u804C\u8D23\u662F\u7406\u89E3\u7528\u6237\u8BF7\u6C42\uFF0C\u8BC4\u4F30\u590D\u6742\u5EA6\uFF0C\u5E76\u51B3\u5B9A\u5904\u7406\u8DEF\u5F84\u3002
@@ -2286,7 +2286,7 @@ ${e.codebaseInfo}`),e?.sessionSummary&&(t+=`
2286
2286
  ## \u4F1A\u8BDD\u4E0A\u4E0B\u6587
2287
2287
  ${e.sessionSummary}`),t+=`
2288
2288
 
2289
- \u8BF7\u5206\u6790\u8FD9\u4E2A\u8BF7\u6C42\uFF0C\u8F93\u51FA JSON \u683C\u5F0F\u7684\u5206\u6790\u7ED3\u679C\u3002`,t}var vb=["delete","remove","drop","\u5220\u9664","\u79FB\u9664","\u6E05\u9664","refactor","rewrite","restructure","\u91CD\u6784","\u91CD\u5199","core","kernel","engine","\u6838\u5FC3","\u5F15\u64CE","database","migration","schema","\u6570\u636E\u5E93","\u8FC1\u79FB","auth","security","credential","\u8BA4\u8BC1","\u5B89\u5168","\u5BC6\u94A5"];function kp(s,e){let t=e??vb,n=s.toLowerCase();return t.some(r=>n.includes(r.toLowerCase()))}Z();var gE={enableCCB:true,enableClarification:true,riskKeywords:void 0},Ql=class{llmCall;config;constructor(e){this.llmCall=e.llmCall,this.config={...gE,...e.config};}async analyze(e,t){p.info("TASK_ANALYZER","Starting task analysis",{requestLength:e.length});let n=Tp,r=wp(e,{codebaseInfo:t?.codebaseInfo?`\u8BED\u8A00: ${t.codebaseInfo.language}, \u6846\u67B6: ${t.codebaseInfo.framework||"\u65E0"}`:void 0,sessionSummary:t?.sessionSummary});p.debug("TASK_ANALYZER","Calling LLM for analysis",{systemPromptLength:n.length,userPromptLength:r.length});try{let o=await this.llmCall(n,r);if(p.debug("TASK_ANALYZER","LLM call completed",{responseLength:o?.length||0,responsePreview:o?.substring(0,200)||"(empty)"}),!o||o.trim()==="")return p.warn("TASK_ANALYZER","LLM returned empty response, using default result"),this.getDefaultResult();let i=this.parseResponse(o);return this.postProcess(i,e)}catch(o){return p.error("TASK_ANALYZER","LLM call failed",{error:o?.message,stack:o?.stack}),this.getDefaultResult()}}parseResponse(e){try{if(p.debug("TASK_ANALYZER","Raw LLM response",{responseLength:e?.length||0,responsePreview:e?.substring(0,200)||"(empty)"}),!e||e.trim()==="")throw p.warn("TASK_ANALYZER","Empty LLM response received"),new Error("Empty response from LLM");let t=null,n=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(n&&(t=n[1].trim()),!t){let o=e.match(/\{[\s\S]*\}/);o&&(t=o[0]);}if(!t)throw p.warn("TASK_ANALYZER","No JSON found in response",{response:e.substring(0,500)}),new Error("No JSON found in response");let r=JSON.parse(t);if(!r.intent||!r.complexity||!r.routing)throw p.warn("TASK_ANALYZER","Missing required fields in parsed JSON",{parsed:r}),new Error("Missing required fields");return p.info("TASK_ANALYZER","Successfully parsed analysis result",{intent:r.intent.summary,complexity:r.complexity.score,path:r.routing.path}),r}catch(t){return p.error("TASK_ANALYZER","Failed to parse LLM response",{error:t?.message,responsePreview:e?.substring(0,300)||"(empty)"}),this.getDefaultResult()}}postProcess(e,t){let n={...e};return this.config.enableCCB&&kp(t,this.config.riskKeywords)&&n.routing.path==="simple"&&(n.routing.path="standard",n.routing.needsCCB=true,n.routing.reason+=" (\u5305\u542B\u98CE\u9669\u5173\u952E\u8BCD\uFF0C\u5347\u7EA7\u5230\u6807\u51C6\u8DEF\u5F84)"),this.config.enableCCB||(n.routing.needsCCB=false),this.config.enableClarification||(n.routing.needsClarification=false,n.routing.clarificationQuestions=void 0),n.routing.path!=="simple"&&this.config.enableCCB&&(n.routing.needsCCB=true),n}getDefaultResult(){return {intent:{summary:"\u65E0\u6CD5\u89E3\u6790\u7528\u6237\u610F\u56FE",domain:["unknown"],actionType:"other"},complexity:{score:3,reason:"LLM \u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u8BC4\u5206",dimensions:{scopeSize:3,technicalDepth:3,interdependency:3,ambiguity:5}},routing:{path:"simple",needsCCB:false,needsClarification:false,reason:"LLM \u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u8DEF\u5F84"}}}quickRouteCheck(e){let t=e.trim();return /^(你好|hi|hello|hey|嗨|哈喽)[!!。.]*$/i.test(t)||/^(什么是|是什么|how to|what is|explain|解释一下|告诉我)[^,,。.!!??]*[??]?$/i.test(t)?"simple":null}updateConfig(e){this.config={...this.config,...e};}getConfig(){return {...this.config}}};function Sp(s){return new Ql(s)}var hE={autoConfirmCCB:false,complexityConfirmThreshold:7},Zl=class{config;constructor(e){this.config={...hE,...e};}handle(e){let{routing:t,complexity:n}=e;return t.needsClarification&&t.clarificationQuestions?.length?{path:t.path,needsUserConfirmation:true,confirmationMessage:this.buildClarificationMessage(t),clarificationQuestions:t.clarificationQuestions,metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}:n.score>=(this.config.complexityConfirmThreshold??7)&&!this.config.autoConfirmCCB?{path:t.path,needsUserConfirmation:true,confirmationMessage:this.buildComplexTaskMessage(e),metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}:t.needsCCB&&!this.config.autoConfirmCCB?{path:t.path,needsUserConfirmation:true,confirmationMessage:this.buildCCBConfirmMessage(e),metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}:{path:t.path,needsUserConfirmation:false,metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}}buildClarificationMessage(e){return `\u9700\u8981\u4E00\u4E9B\u6F84\u6E05\u624D\u80FD\u66F4\u597D\u5730\u5B8C\u6210\u4EFB\u52A1\uFF1A
2289
+ \u8BF7\u5206\u6790\u8FD9\u4E2A\u8BF7\u6C42\uFF0C\u8F93\u51FA JSON \u683C\u5F0F\u7684\u5206\u6790\u7ED3\u679C\u3002`,t}var vb=["delete","remove","drop","\u5220\u9664","\u79FB\u9664","\u6E05\u9664","refactor","rewrite","restructure","\u91CD\u6784","\u91CD\u5199","core","kernel","engine","\u6838\u5FC3","\u5F15\u64CE","database","migration","schema","\u6570\u636E\u5E93","\u8FC1\u79FB","auth","security","credential","\u8BA4\u8BC1","\u5B89\u5168","\u5BC6\u94A5"];function kp(s,e){let t=e??vb,n=s.toLowerCase();return t.some(r=>n.includes(r.toLowerCase()))}Z();var hE={enableCCB:true,enableClarification:true,riskKeywords:void 0},Ql=class{llmCall;config;constructor(e){this.llmCall=e.llmCall,this.config={...hE,...e.config};}async analyze(e,t){p.info("TASK_ANALYZER","Starting task analysis",{requestLength:e.length});let n=Tp,r=wp(e,{codebaseInfo:t?.codebaseInfo?`\u8BED\u8A00: ${t.codebaseInfo.language}, \u6846\u67B6: ${t.codebaseInfo.framework||"\u65E0"}`:void 0,sessionSummary:t?.sessionSummary});p.debug("TASK_ANALYZER","Calling LLM for analysis",{systemPromptLength:n.length,userPromptLength:r.length});try{let o=await this.llmCall(n,r);if(p.debug("TASK_ANALYZER","LLM call completed",{responseLength:o?.length||0,responsePreview:o?.substring(0,200)||"(empty)"}),!o||o.trim()==="")return p.warn("TASK_ANALYZER","LLM returned empty response, using default result"),this.getDefaultResult();let i=this.parseResponse(o);return this.postProcess(i,e)}catch(o){return p.error("TASK_ANALYZER","LLM call failed",{error:o?.message,stack:o?.stack}),this.getDefaultResult()}}parseResponse(e){try{if(p.debug("TASK_ANALYZER","Raw LLM response",{responseLength:e?.length||0,responsePreview:e?.substring(0,200)||"(empty)"}),!e||e.trim()==="")throw p.warn("TASK_ANALYZER","Empty LLM response received"),new Error("Empty response from LLM");let t=null,n=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(n&&(t=n[1].trim()),!t){let o=e.match(/\{[\s\S]*\}/);o&&(t=o[0]);}if(!t)throw p.warn("TASK_ANALYZER","No JSON found in response",{response:e.substring(0,500)}),new Error("No JSON found in response");let r=JSON.parse(t);if(!r.intent||!r.complexity||!r.routing)throw p.warn("TASK_ANALYZER","Missing required fields in parsed JSON",{parsed:r}),new Error("Missing required fields");return p.info("TASK_ANALYZER","Successfully parsed analysis result",{intent:r.intent.summary,complexity:r.complexity.score,path:r.routing.path}),r}catch(t){return p.error("TASK_ANALYZER","Failed to parse LLM response",{error:t?.message,responsePreview:e?.substring(0,300)||"(empty)"}),this.getDefaultResult()}}postProcess(e,t){let n={...e};return this.config.enableCCB&&kp(t,this.config.riskKeywords)&&n.routing.path==="simple"&&(n.routing.path="standard",n.routing.needsCCB=true,n.routing.reason+=" (\u5305\u542B\u98CE\u9669\u5173\u952E\u8BCD\uFF0C\u5347\u7EA7\u5230\u6807\u51C6\u8DEF\u5F84)"),this.config.enableCCB||(n.routing.needsCCB=false),this.config.enableClarification||(n.routing.needsClarification=false,n.routing.clarificationQuestions=void 0),n.routing.path!=="simple"&&this.config.enableCCB&&(n.routing.needsCCB=true),n}getDefaultResult(){return {intent:{summary:"\u65E0\u6CD5\u89E3\u6790\u7528\u6237\u610F\u56FE",domain:["unknown"],actionType:"other"},complexity:{score:3,reason:"LLM \u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u8BC4\u5206",dimensions:{scopeSize:3,technicalDepth:3,interdependency:3,ambiguity:5}},routing:{path:"simple",needsCCB:false,needsClarification:false,reason:"LLM \u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u8DEF\u5F84"}}}quickRouteCheck(e){let t=e.trim();return /^(你好|hi|hello|hey|嗨|哈喽)[!!。.]*$/i.test(t)||/^(什么是|是什么|how to|what is|explain|解释一下|告诉我)[^,,。.!!??]*[??]?$/i.test(t)?"simple":null}updateConfig(e){this.config={...this.config,...e};}getConfig(){return {...this.config}}};function Sp(s){return new Ql(s)}var fE={autoConfirmCCB:false,complexityConfirmThreshold:7},Zl=class{config;constructor(e){this.config={...fE,...e};}handle(e){let{routing:t,complexity:n}=e;return t.needsClarification&&t.clarificationQuestions?.length?{path:t.path,needsUserConfirmation:true,confirmationMessage:this.buildClarificationMessage(t),clarificationQuestions:t.clarificationQuestions,metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}:n.score>=(this.config.complexityConfirmThreshold??7)&&!this.config.autoConfirmCCB?{path:t.path,needsUserConfirmation:true,confirmationMessage:this.buildComplexTaskMessage(e),metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}:t.needsCCB&&!this.config.autoConfirmCCB?{path:t.path,needsUserConfirmation:true,confirmationMessage:this.buildCCBConfirmMessage(e),metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}:{path:t.path,needsUserConfirmation:false,metadata:{complexity:n.score,needsCCB:t.needsCCB,reason:t.reason}}}buildClarificationMessage(e){return `\u9700\u8981\u4E00\u4E9B\u6F84\u6E05\u624D\u80FD\u66F4\u597D\u5730\u5B8C\u6210\u4EFB\u52A1\uFF1A
2290
2290
  ${(e.clarificationQuestions??[]).map((n,r)=>`${r+1}. ${n}`).join(`
2291
2291
  `)}`}buildComplexTaskMessage(e){let{complexity:t,routing:n,intent:r}=e;return `## \u4EFB\u52A1\u5206\u6790\u7ED3\u679C
2292
2292
 
@@ -2516,9 +2516,9 @@ ${s.sessionSummary}
2516
2516
  3. \u4F7F\u7528 \`search\` \u641C\u7D22\u5173\u952E\u4EE3\u7801\u5B9E\u73B0
2517
2517
 
2518
2518
  **\u7B2C\u4E8C\u6B65\uFF1A\u7ED9\u51FA\u8BC4\u5BA1\u610F\u89C1**
2519
- \u6536\u96C6\u5B8C\u4FE1\u606F\u540E\uFF0C\u7528 Markdown \u683C\u5F0F\u8F93\u51FA\u8BC4\u5BA1\u7ED3\u679C\uFF08\u4E0D\u8981\u8F93\u51FA JSON\uFF09\u3002`,t}var fE={approvalThreshold:2,allowConcernPass:true,rejectBlocks:true},tc=class{config;constructor(e){this.config={...fE,...e};}aggregate(e,t,n){let r=Date.now(),o=this.countVotes(e),i=this.determineApproval(o),a=this.calculateConfidence(e,o),l=this.mergeRisks(e),c=this.mergeSuggestions(e),u=this.estimateEffort(e),d=this.generateRecommendation(e,i),m=this.collectRequiredChanges(e,i);return {id:t,approved:i,confidence:a,reviews:e,summary:{risks:l,suggestions:c,estimatedEffort:u,recommendedApproach:d},requiredChanges:m.length>0?m:void 0,startedAt:n,completedAt:r,totalDuration:r-n}}countVotes(e){let t={approve:0,concern:0,reject:0,total:e.length};for(let n of e)t[n.verdict]++;return t}determineApproval(e){return this.config.rejectBlocks&&e.reject>0?false:e.approve>=this.config.approvalThreshold?true:this.config.allowConcernPass?e.approve+e.concern>=this.config.approvalThreshold:false}calculateConfidence(e,t){let n=t.approve/t.total*100,r=t.concern*10,o=t.reject*25,i=t.approve===t.total||t.reject===t.total?10:0,a=Math.max(0,Math.min(100,n-r-o+i));return Math.round(a)}mergeRisks(e){let t=new Map;for(let r of e)for(let o of r.risks){let i=o.toLowerCase().substring(0,50);t.has(i)||t.set(i,{level:this.inferRiskLevel(o,r.verdict),description:o,mitigation:this.findMitigation(o,r.suggestions),sourceAgentId:r.agentId});}let n={critical:0,high:1,medium:2,low:3};return Array.from(t.values()).sort((r,o)=>n[r.level]-n[o.level])}inferRiskLevel(e,t){let n=e.toLowerCase();return n.includes("critical")||n.includes("\u4E25\u91CD")||n.includes("\u81F4\u547D")?"critical":n.includes("high")||n.includes("\u9AD8")||n.includes("\u91CD\u5927")?"high":n.includes("low")||n.includes("\u4F4E")||n.includes("\u8F7B\u5FAE")?"low":t==="reject"?"high":"medium"}findMitigation(e,t){for(let n of t)if(n.toLowerCase().includes(e.substring(0,20).toLowerCase()))return n;return "\u5F85\u5B9A"}mergeSuggestions(e){let t=new Set;for(let n of e)for(let r of n.suggestions)r.trim()&&t.add(r.trim());return Array.from(t)}estimateEffort(e){let t=e.reduce((o,i)=>o+i.tokenUsed,0),n=e.reduce((o,i)=>o+i.duration,0)/e.length,r="medium";return n<5e3&&(r="low"),n>15e3&&(r="high"),{timeRange:r==="low"?"1-2 hours":r==="high"?"4-8 hours":"2-4 hours",complexity:r,parallelism:r==="high"?4:r==="medium"?3:2,estimatedTokens:Math.round(t*5)}}generateRecommendation(e,t){if(!t){let r=e.find(o=>o.verdict==="reject");return r?`\u65B9\u6848\u9700\u8981\u8C03\u6574:
2519
+ \u6536\u96C6\u5B8C\u4FE1\u606F\u540E\uFF0C\u7528 Markdown \u683C\u5F0F\u8F93\u51FA\u8BC4\u5BA1\u7ED3\u679C\uFF08\u4E0D\u8981\u8F93\u51FA JSON\uFF09\u3002`,t}var yE={approvalThreshold:2,allowConcernPass:true,rejectBlocks:true},tc=class{config;constructor(e){this.config={...yE,...e};}aggregate(e,t,n){let r=Date.now(),o=this.countVotes(e),i=this.determineApproval(o),a=this.calculateConfidence(e,o),l=this.mergeRisks(e),c=this.mergeSuggestions(e),u=this.estimateEffort(e),d=this.generateRecommendation(e,i),m=this.collectRequiredChanges(e,i);return {id:t,approved:i,confidence:a,reviews:e,summary:{risks:l,suggestions:c,estimatedEffort:u,recommendedApproach:d},requiredChanges:m.length>0?m:void 0,startedAt:n,completedAt:r,totalDuration:r-n}}countVotes(e){let t={approve:0,concern:0,reject:0,total:e.length};for(let n of e)t[n.verdict]++;return t}determineApproval(e){return this.config.rejectBlocks&&e.reject>0?false:e.approve>=this.config.approvalThreshold?true:this.config.allowConcernPass?e.approve+e.concern>=this.config.approvalThreshold:false}calculateConfidence(e,t){let n=t.approve/t.total*100,r=t.concern*10,o=t.reject*25,i=t.approve===t.total||t.reject===t.total?10:0,a=Math.max(0,Math.min(100,n-r-o+i));return Math.round(a)}mergeRisks(e){let t=new Map;for(let r of e)for(let o of r.risks){let i=o.toLowerCase().substring(0,50);t.has(i)||t.set(i,{level:this.inferRiskLevel(o,r.verdict),description:o,mitigation:this.findMitigation(o,r.suggestions),sourceAgentId:r.agentId});}let n={critical:0,high:1,medium:2,low:3};return Array.from(t.values()).sort((r,o)=>n[r.level]-n[o.level])}inferRiskLevel(e,t){let n=e.toLowerCase();return n.includes("critical")||n.includes("\u4E25\u91CD")||n.includes("\u81F4\u547D")?"critical":n.includes("high")||n.includes("\u9AD8")||n.includes("\u91CD\u5927")?"high":n.includes("low")||n.includes("\u4F4E")||n.includes("\u8F7B\u5FAE")?"low":t==="reject"?"high":"medium"}findMitigation(e,t){for(let n of t)if(n.toLowerCase().includes(e.substring(0,20).toLowerCase()))return n;return "\u5F85\u5B9A"}mergeSuggestions(e){let t=new Set;for(let n of e)for(let r of n.suggestions)r.trim()&&t.add(r.trim());return Array.from(t)}estimateEffort(e){let t=e.reduce((o,i)=>o+i.tokenUsed,0),n=e.reduce((o,i)=>o+i.duration,0)/e.length,r="medium";return n<5e3&&(r="low"),n>15e3&&(r="high"),{timeRange:r==="low"?"1-2 hours":r==="high"?"4-8 hours":"2-4 hours",complexity:r,parallelism:r==="high"?4:r==="medium"?3:2,estimatedTokens:Math.round(t*5)}}generateRecommendation(e,t){if(!t){let r=e.find(o=>o.verdict==="reject");return r?`\u65B9\u6848\u9700\u8981\u8C03\u6574:
2520
2520
  ${r.analysis}`:"\u65B9\u6848\u9700\u8981\u8FDB\u4E00\u6B65\u8BA8\u8BBA"}let n=e.filter(r=>r.verdict==="approve");return n.length>0?`\u65B9\u6848\u53EF\u884C\u3002
2521
- ${n[0].analysis}`:"\u65B9\u6848\u57FA\u672C\u53EF\u884C\uFF0C\u4F46\u9700\u6CE8\u610F\u76F8\u5173\u98CE\u9669"}collectRequiredChanges(e,t){let n=[];for(let r of e)r.verdict==="reject"?n.push({description:r.analysis,priority:"must",sourceAgentId:r.agentId}):r.verdict==="concern"&&r.risks.length>0&&n.push({description:r.risks[0],priority:"should",sourceAgentId:r.agentId});return n}};function nc(s){return new tc(s)}Z();var yE={parallelReview:true,timeout:6e4,approvalThreshold:2,allowConcernPass:true},Qs=2,rc=class{llmCall;config;onEvent;aggregator;agents;workerModels;defaultModel;constructor(e){this.llmCall=e.llmCall,this.config={...yE,...e.config},this.onEvent=e.onEvent,this.workerModels=e.workerModels??[],this.defaultModel=e.defaultModel??"default",this.aggregator=nc({approvalThreshold:this.config.approvalThreshold,allowConcernPass:this.config.allowConcernPass}),this.agents=this.config.customAgents?this.mergeAgents(ec,this.config.customAgents):ec;}async review(e){let t=this.generateReviewId(),n=Date.now();this.emitEvent({type:"ccb_review_start",timestamp:n,data:{reviewId:t}});try{let r=this.assignWorkerModelsToAgents(),o=this.config.parallelReview?await this.parallelReviewWithAgents(e,t,r):await this.sequentialReviewWithAgents(e,t,r);this.emitEvent({type:"ccb_review_aggregating",timestamp:Date.now(),data:{reviewId:t}});let i=this.aggregator.aggregate(o,t,n);return this.emitEvent({type:"ccb_review_complete",timestamp:Date.now(),data:{reviewId:t,result:i}}),i}catch(r){return console.error("[CCBOrchestrator] Review failed, using fallback",r),this.createFallbackResult(t,n)}}assignWorkerModelsToAgents(){return this.workerModels.length===0?this.agents.map(e=>({...e,model:this.defaultModel})):this.agents.map((e,t)=>{let n=this.workerModels[t%this.workerModels.length],r=`${n.providerId}:${n.model}`;return {...e,model:r}})}async quickReview(e){let t=this.generateReviewId(),n=Date.now();this.emitEvent({type:"ccb_review_start",timestamp:n,data:{reviewId:t}});try{let r=this.agents.find(l=>l.perspective==="implementation");if(!r)throw new Error("No implementer agent found");let o=await this.executeAgentReview(r,e,t),a=nc({approvalThreshold:1,allowConcernPass:!0,rejectBlocks:!0}).aggregate([o],t,n);return this.emitEvent({type:"ccb_review_complete",timestamp:Date.now(),data:{reviewId:t,result:a}}),a}catch(r){return console.error("[CCBOrchestrator] Quick review failed",r),this.createFallbackResult(t,n)}}async multiRoleReview(e){let t=this.generateReviewId(),n=Date.now();this.emitEvent({type:"ccb_review_start",timestamp:n,data:{reviewId:t}});try{let r=this.agents.map(a=>({...a,model:this.defaultModel})),o=this.config.parallelReview?await this.parallelReviewWithAgents(e,t,r):await this.sequentialReviewWithAgents(e,t,r);this.emitEvent({type:"ccb_review_aggregating",timestamp:Date.now(),data:{reviewId:t}});let i=this.aggregator.aggregate(o,t,n);return this.emitEvent({type:"ccb_review_complete",timestamp:Date.now(),data:{reviewId:t,result:i}}),i}catch(r){return console.error("[CCBOrchestrator] Multi-role review failed, using fallback",r),this.createFallbackResult(t,n)}}async parallelReviewWithAgents(e,t,n){let r=n.map(i=>this.executeAgentReviewWithTimeout(i,e,t));return (await Promise.allSettled(r)).filter(i=>i.status==="fulfilled").map(i=>i.value)}async sequentialReviewWithAgents(e,t,n){let r=[];for(let o of n)try{let i=await this.executeAgentReviewWithTimeout(o,e,t);r.push(i);}catch(i){console.warn(`[CCBOrchestrator] Agent ${o.id} failed`,i);}return r}async parallelReview(e,t){let n=this.agents.map(o=>this.executeAgentReviewWithTimeout(o,e,t));return (await Promise.allSettled(n)).filter(o=>o.status==="fulfilled").map(o=>o.value)}async sequentialReview(e,t){let n=[];for(let r of this.agents)try{let o=await this.executeAgentReviewWithTimeout(r,e,t);n.push(o);}catch(o){console.warn(`[CCBOrchestrator] Agent ${r.id} failed`,o);}return n}async executeAgentReviewWithTimeout(e,t,n){let r=null;for(let o=0;o<=Qs;o++)try{return o>0&&(p.warn("CCB",`Retrying agent ${e.id} review (attempt ${o}/${Qs})`,{agentId:e.id,agentName:e.name,model:e.model,error:r?.message}),this.emitEvent({type:"ccb_agent_retry",timestamp:Date.now(),data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective,model:e.model,retryCount:o,maxRetries:Qs,error:r?.message,willRetry:!0}}),await new Promise(a=>setTimeout(a,1e3*o))),await new Promise((a,l)=>{let c=setTimeout(()=>{l(new Error(`Agent ${e.id} review timeout after ${this.config.timeout}ms`));},this.config.timeout);this.executeAgentReview(e,t,n).then(u=>{clearTimeout(c),a(u);}).catch(u=>{clearTimeout(c),l(u);});})}catch(i){if(r=i instanceof Error?i:new Error(String(i)),p.error("CCB",`Agent ${e.id} review failed (attempt ${o+1}/${Qs+1})`,{agentId:e.id,agentName:e.name,model:e.model,error:r.message}),o>=Qs)throw p.error("CCB",`Agent ${e.id} review failed after all retries`,{agentId:e.id,agentName:e.name,model:e.model,totalAttempts:o+1,error:r.message}),this.emitEvent({type:"ccb_agent_failed",timestamp:Date.now(),data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective,model:e.model,retryCount:o,maxRetries:Qs,error:r.message,willRetry:false}}),r}throw r||new Error("Unknown error")}async executeAgentReview(e,t,n){let r=Date.now();this.emitEvent({type:"ccb_agent_spawned",timestamp:r,data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective}}),this.emitEvent({type:"ccb_agent_thinking",timestamp:Date.now(),data:{reviewId:n,agentId:e.id,progress:0}});let o=Ep(t,e),i=await this.llmCall(e.systemPrompt,o,e.model),a=this.parseAgentResponse(i,e),l=Date.now();this.emitEvent({type:"ccb_agent_verdict",timestamp:l,data:{reviewId:n,agentId:e.id,verdict:a.verdict}});let c={agentId:e.id,perspective:e.perspective,model:e.model,verdict:a.verdict,analysis:a.analysis,risks:a.risks,suggestions:a.suggestions,duration:l-r,tokenUsed:this.estimateTokens(i)};return this.emitEvent({type:"ccb_agent_review",timestamp:l,data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective,model:e.model,verdict:a.verdict,analysis:a.analysis,risks:a.risks,suggestions:a.suggestions}}),this.emitEvent({type:"ccb_agent_completed",timestamp:l,data:{reviewId:n,agentId:e.id}}),c}parseAgentResponse(e,t){if(process.env.CLI_DEBUG==="1"&&console.log(`[CCB] Agent ${t.id} raw response:`,e?.substring(0,500)),/\*\*(?:判定|verdict|分析|analysis|风险|risks?|建议|suggestions?)\*\*/i.test(e))return process.env.CLI_DEBUG==="1"&&console.log(`[CCB] Agent ${t.id} using Markdown parser`),this.parseMarkdownResponse(e,t);try{let r=null,o=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(o&&(r=o[1].trim()),!r){let d=e.match(/\{[\s\S]*\}/);d&&(r=d[0]);}if(!r)return this.parseMarkdownResponse(e,t);let i=JSON.parse(r);process.env.CLI_DEBUG==="1"&&console.log(`[CCB] Agent ${t.id} parsed keys:`,Object.keys(i));let a=this.extractVerdict(i),l=this.extractAnalysis(i,e),c=this.extractRisks(i),u=this.extractSuggestions(i);return {verdict:a,analysis:l,risks:c,suggestions:u}}catch(r){return process.env.CLI_DEBUG==="1"&&(console.log(`[CCB] Agent ${t.id} parse failed:`,r?.message),console.log("[CCB] Response preview:",e?.substring(0,300))),this.parseMarkdownResponse(e,t)}}extractVerdict(e){if(e.verdict)return this.normalizeVerdict(e.verdict);if(e.status){let t=String(e.status).toLowerCase();if(t.includes("reject")||t.includes("denied"))return "reject";if(t.includes("concern")||t.includes("warning")||t.includes("notes"))return "concern";if(t.includes("approve")||t.includes("pass")||t.includes("ok"))return "approve"}if(Array.isArray(e.reviewers)){let t=e.reviewers.map(o=>o.status||o.verdict||""),n=t.some(o=>o.toLowerCase().includes("reject")),r=t.some(o=>o.toLowerCase().includes("concern")||o.toLowerCase().includes("notes"));return n?"reject":r?"concern":"approve"}return e.decision?this.normalizeVerdict(e.decision):"approve"}extractAnalysis(e,t){let n=[],r=["analysis","summary","description","comment","review","conclusion"];for(let o of r)if(e[o]&&typeof e[o]=="string"){n.push(e[o]);break}if(e.assessment){if(typeof e.assessment=="string")n.push(e.assessment);else if(typeof e.assessment=="object"){let o=e.assessment.summary||e.assessment.description||e.assessment.text;o&&n.push(o);}}if(e.architecture&&typeof e.architecture=="object"&&(e.architecture.assessment&&n.push(`**\u67B6\u6784\u8BC4\u4F30:** ${e.architecture.assessment}`),Array.isArray(e.architecture.focus)&&n.push(`**\u5173\u6CE8\u70B9:** ${e.architecture.focus.join(", ")}`)),e.projectContext&&typeof e.projectContext=="object"){let o=e.projectContext,i=[];o.frontend&&i.push(`\u524D\u7AEF: ${o.frontend}`),o.backend&&i.push(`\u540E\u7AEF: ${o.backend}`),o.database&&i.push(`\u6570\u636E\u5E93: ${o.database}`),i.length>0&&n.push(`**\u9879\u76EE\u6280\u672F\u6808:** ${i.join(" | ")}`),o.notes&&n.push(`**\u5907\u6CE8:** ${o.notes}`);}if(Array.isArray(e.reviewers))for(let o of e.reviewers){let i=o.name||o.role||"\u8BC4\u5BA1\u5B98";o.status||o.verdict||"";if(o.findings){let l=o.findings;Array.isArray(l.strengths)&&l.strengths.length>0&&(n.push(`**${i} - \u4F18\u70B9:**`),l.strengths.slice(0,3).forEach(u=>{let d=typeof u=="string"?u:u.description||JSON.stringify(u);n.push(` \u2705 ${d}`);}));let c=l.concerns||l.weaknesses||l.issues;Array.isArray(c)&&c.length>0&&(n.push(`**${i} - \u5173\u6CE8\u70B9:**`),c.slice(0,3).forEach(u=>{let d=typeof u=="string"?u:u.description||JSON.stringify(u);n.push(` \u26A0\uFE0F ${d}`);}));}}if(n.length===0){let o=["verdict","status","risks","suggestions","recommendations"],i=Object.keys(e).filter(a=>!o.includes(a));for(let a of i.slice(0,5)){let l=e[a];typeof l=="string"&&l.length>0&&l.length<500&&n.push(`**${this.formatKeyName(a)}:** ${l}`);}}return n.length===0?t.replace(/```json[\s\S]*?```/g,"").trim().substring(0,500):n.join(`
2521
+ ${n[0].analysis}`:"\u65B9\u6848\u57FA\u672C\u53EF\u884C\uFF0C\u4F46\u9700\u6CE8\u610F\u76F8\u5173\u98CE\u9669"}collectRequiredChanges(e,t){let n=[];for(let r of e)r.verdict==="reject"?n.push({description:r.analysis,priority:"must",sourceAgentId:r.agentId}):r.verdict==="concern"&&r.risks.length>0&&n.push({description:r.risks[0],priority:"should",sourceAgentId:r.agentId});return n}};function nc(s){return new tc(s)}Z();var bE={parallelReview:true,timeout:6e4,approvalThreshold:2,allowConcernPass:true},Qs=2,rc=class{llmCall;config;onEvent;aggregator;agents;workerModels;defaultModel;constructor(e){this.llmCall=e.llmCall,this.config={...bE,...e.config},this.onEvent=e.onEvent,this.workerModels=e.workerModels??[],this.defaultModel=e.defaultModel??"default",this.aggregator=nc({approvalThreshold:this.config.approvalThreshold,allowConcernPass:this.config.allowConcernPass}),this.agents=this.config.customAgents?this.mergeAgents(ec,this.config.customAgents):ec;}async review(e){let t=this.generateReviewId(),n=Date.now();this.emitEvent({type:"ccb_review_start",timestamp:n,data:{reviewId:t}});try{let r=this.assignWorkerModelsToAgents(),o=this.config.parallelReview?await this.parallelReviewWithAgents(e,t,r):await this.sequentialReviewWithAgents(e,t,r);this.emitEvent({type:"ccb_review_aggregating",timestamp:Date.now(),data:{reviewId:t}});let i=this.aggregator.aggregate(o,t,n);return this.emitEvent({type:"ccb_review_complete",timestamp:Date.now(),data:{reviewId:t,result:i}}),i}catch(r){return console.error("[CCBOrchestrator] Review failed, using fallback",r),this.createFallbackResult(t,n)}}assignWorkerModelsToAgents(){return this.workerModels.length===0?this.agents.map(e=>({...e,model:this.defaultModel})):this.agents.map((e,t)=>{let n=this.workerModels[t%this.workerModels.length],r=`${n.providerId}:${n.model}`;return {...e,model:r}})}async quickReview(e){let t=this.generateReviewId(),n=Date.now();this.emitEvent({type:"ccb_review_start",timestamp:n,data:{reviewId:t}});try{let r=this.agents.find(l=>l.perspective==="implementation");if(!r)throw new Error("No implementer agent found");let o=await this.executeAgentReview(r,e,t),a=nc({approvalThreshold:1,allowConcernPass:!0,rejectBlocks:!0}).aggregate([o],t,n);return this.emitEvent({type:"ccb_review_complete",timestamp:Date.now(),data:{reviewId:t,result:a}}),a}catch(r){return console.error("[CCBOrchestrator] Quick review failed",r),this.createFallbackResult(t,n)}}async multiRoleReview(e){let t=this.generateReviewId(),n=Date.now();this.emitEvent({type:"ccb_review_start",timestamp:n,data:{reviewId:t}});try{let r=this.agents.map(a=>({...a,model:this.defaultModel})),o=this.config.parallelReview?await this.parallelReviewWithAgents(e,t,r):await this.sequentialReviewWithAgents(e,t,r);this.emitEvent({type:"ccb_review_aggregating",timestamp:Date.now(),data:{reviewId:t}});let i=this.aggregator.aggregate(o,t,n);return this.emitEvent({type:"ccb_review_complete",timestamp:Date.now(),data:{reviewId:t,result:i}}),i}catch(r){return console.error("[CCBOrchestrator] Multi-role review failed, using fallback",r),this.createFallbackResult(t,n)}}async parallelReviewWithAgents(e,t,n){let r=n.map(i=>this.executeAgentReviewWithTimeout(i,e,t));return (await Promise.allSettled(r)).filter(i=>i.status==="fulfilled").map(i=>i.value)}async sequentialReviewWithAgents(e,t,n){let r=[];for(let o of n)try{let i=await this.executeAgentReviewWithTimeout(o,e,t);r.push(i);}catch(i){console.warn(`[CCBOrchestrator] Agent ${o.id} failed`,i);}return r}async parallelReview(e,t){let n=this.agents.map(o=>this.executeAgentReviewWithTimeout(o,e,t));return (await Promise.allSettled(n)).filter(o=>o.status==="fulfilled").map(o=>o.value)}async sequentialReview(e,t){let n=[];for(let r of this.agents)try{let o=await this.executeAgentReviewWithTimeout(r,e,t);n.push(o);}catch(o){console.warn(`[CCBOrchestrator] Agent ${r.id} failed`,o);}return n}async executeAgentReviewWithTimeout(e,t,n){let r=null;for(let o=0;o<=Qs;o++)try{return o>0&&(p.warn("CCB",`Retrying agent ${e.id} review (attempt ${o}/${Qs})`,{agentId:e.id,agentName:e.name,model:e.model,error:r?.message}),this.emitEvent({type:"ccb_agent_retry",timestamp:Date.now(),data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective,model:e.model,retryCount:o,maxRetries:Qs,error:r?.message,willRetry:!0}}),await new Promise(a=>setTimeout(a,1e3*o))),await new Promise((a,l)=>{let c=setTimeout(()=>{l(new Error(`Agent ${e.id} review timeout after ${this.config.timeout}ms`));},this.config.timeout);this.executeAgentReview(e,t,n).then(u=>{clearTimeout(c),a(u);}).catch(u=>{clearTimeout(c),l(u);});})}catch(i){if(r=i instanceof Error?i:new Error(String(i)),p.error("CCB",`Agent ${e.id} review failed (attempt ${o+1}/${Qs+1})`,{agentId:e.id,agentName:e.name,model:e.model,error:r.message}),o>=Qs)throw p.error("CCB",`Agent ${e.id} review failed after all retries`,{agentId:e.id,agentName:e.name,model:e.model,totalAttempts:o+1,error:r.message}),this.emitEvent({type:"ccb_agent_failed",timestamp:Date.now(),data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective,model:e.model,retryCount:o,maxRetries:Qs,error:r.message,willRetry:false}}),r}throw r||new Error("Unknown error")}async executeAgentReview(e,t,n){let r=Date.now();this.emitEvent({type:"ccb_agent_spawned",timestamp:r,data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective}}),this.emitEvent({type:"ccb_agent_thinking",timestamp:Date.now(),data:{reviewId:n,agentId:e.id,progress:0}});let o=Ep(t,e),i=await this.llmCall(e.systemPrompt,o,e.model),a=this.parseAgentResponse(i,e),l=Date.now();this.emitEvent({type:"ccb_agent_verdict",timestamp:l,data:{reviewId:n,agentId:e.id,verdict:a.verdict}});let c={agentId:e.id,perspective:e.perspective,model:e.model,verdict:a.verdict,analysis:a.analysis,risks:a.risks,suggestions:a.suggestions,duration:l-r,tokenUsed:this.estimateTokens(i)};return this.emitEvent({type:"ccb_agent_review",timestamp:l,data:{reviewId:n,agentId:e.id,agentName:e.name,perspective:e.perspective,model:e.model,verdict:a.verdict,analysis:a.analysis,risks:a.risks,suggestions:a.suggestions}}),this.emitEvent({type:"ccb_agent_completed",timestamp:l,data:{reviewId:n,agentId:e.id}}),c}parseAgentResponse(e,t){if(process.env.CLI_DEBUG==="1"&&console.log(`[CCB] Agent ${t.id} raw response:`,e?.substring(0,500)),/\*\*(?:判定|verdict|分析|analysis|风险|risks?|建议|suggestions?)\*\*/i.test(e))return process.env.CLI_DEBUG==="1"&&console.log(`[CCB] Agent ${t.id} using Markdown parser`),this.parseMarkdownResponse(e,t);try{let r=null,o=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(o&&(r=o[1].trim()),!r){let d=e.match(/\{[\s\S]*\}/);d&&(r=d[0]);}if(!r)return this.parseMarkdownResponse(e,t);let i=JSON.parse(r);process.env.CLI_DEBUG==="1"&&console.log(`[CCB] Agent ${t.id} parsed keys:`,Object.keys(i));let a=this.extractVerdict(i),l=this.extractAnalysis(i,e),c=this.extractRisks(i),u=this.extractSuggestions(i);return {verdict:a,analysis:l,risks:c,suggestions:u}}catch(r){return process.env.CLI_DEBUG==="1"&&(console.log(`[CCB] Agent ${t.id} parse failed:`,r?.message),console.log("[CCB] Response preview:",e?.substring(0,300))),this.parseMarkdownResponse(e,t)}}extractVerdict(e){if(e.verdict)return this.normalizeVerdict(e.verdict);if(e.status){let t=String(e.status).toLowerCase();if(t.includes("reject")||t.includes("denied"))return "reject";if(t.includes("concern")||t.includes("warning")||t.includes("notes"))return "concern";if(t.includes("approve")||t.includes("pass")||t.includes("ok"))return "approve"}if(Array.isArray(e.reviewers)){let t=e.reviewers.map(o=>o.status||o.verdict||""),n=t.some(o=>o.toLowerCase().includes("reject")),r=t.some(o=>o.toLowerCase().includes("concern")||o.toLowerCase().includes("notes"));return n?"reject":r?"concern":"approve"}return e.decision?this.normalizeVerdict(e.decision):"approve"}extractAnalysis(e,t){let n=[],r=["analysis","summary","description","comment","review","conclusion"];for(let o of r)if(e[o]&&typeof e[o]=="string"){n.push(e[o]);break}if(e.assessment){if(typeof e.assessment=="string")n.push(e.assessment);else if(typeof e.assessment=="object"){let o=e.assessment.summary||e.assessment.description||e.assessment.text;o&&n.push(o);}}if(e.architecture&&typeof e.architecture=="object"&&(e.architecture.assessment&&n.push(`**\u67B6\u6784\u8BC4\u4F30:** ${e.architecture.assessment}`),Array.isArray(e.architecture.focus)&&n.push(`**\u5173\u6CE8\u70B9:** ${e.architecture.focus.join(", ")}`)),e.projectContext&&typeof e.projectContext=="object"){let o=e.projectContext,i=[];o.frontend&&i.push(`\u524D\u7AEF: ${o.frontend}`),o.backend&&i.push(`\u540E\u7AEF: ${o.backend}`),o.database&&i.push(`\u6570\u636E\u5E93: ${o.database}`),i.length>0&&n.push(`**\u9879\u76EE\u6280\u672F\u6808:** ${i.join(" | ")}`),o.notes&&n.push(`**\u5907\u6CE8:** ${o.notes}`);}if(Array.isArray(e.reviewers))for(let o of e.reviewers){let i=o.name||o.role||"\u8BC4\u5BA1\u5B98";o.status||o.verdict||"";if(o.findings){let l=o.findings;Array.isArray(l.strengths)&&l.strengths.length>0&&(n.push(`**${i} - \u4F18\u70B9:**`),l.strengths.slice(0,3).forEach(u=>{let d=typeof u=="string"?u:u.description||JSON.stringify(u);n.push(` \u2705 ${d}`);}));let c=l.concerns||l.weaknesses||l.issues;Array.isArray(c)&&c.length>0&&(n.push(`**${i} - \u5173\u6CE8\u70B9:**`),c.slice(0,3).forEach(u=>{let d=typeof u=="string"?u:u.description||JSON.stringify(u);n.push(` \u26A0\uFE0F ${d}`);}));}}if(n.length===0){let o=["verdict","status","risks","suggestions","recommendations"],i=Object.keys(e).filter(a=>!o.includes(a));for(let a of i.slice(0,5)){let l=e[a];typeof l=="string"&&l.length>0&&l.length<500&&n.push(`**${this.formatKeyName(a)}:** ${l}`);}}return n.length===0?t.replace(/```json[\s\S]*?```/g,"").trim().substring(0,500):n.join(`
2522
2522
  `)}extractRisks(e){let t=[],n=["risks","concerns","issues","warnings","problems"];for(let r of n)Array.isArray(e[r])&&e[r].forEach(o=>{let i=typeof o=="string"?o:o.description||o.message||o.text||"";i&&!t.includes(i)&&t.push(i);});if(e.architecture?.risks&&Array.isArray(e.architecture.risks)&&e.architecture.risks.forEach(r=>{let o=typeof r=="string"?r:r.description||r.message||"";o&&!t.includes(o)&&t.push(o);}),Array.isArray(e.reviewers))for(let r of e.reviewers){let o=r.findings||{},i=o.concerns||o.risks||o.issues||[];Array.isArray(i)&&i.forEach(a=>{let l=typeof a=="string"?a:a.description||a.message||"";l&&!t.includes(l)&&t.push(l);});}return t.slice(0,10)}extractSuggestions(e){let t=[],n=["suggestions","recommendations","improvements","alternatives","optimizations","bestPractices"];for(let r of n)Array.isArray(e[r])&&e[r].forEach(o=>{let i=typeof o=="string"?o:o.description||o.message||o.text||"";i&&!t.includes(i)&&t.push(i);});if(e.architecture?.recommendations&&Array.isArray(e.architecture.recommendations)&&e.architecture.recommendations.forEach(r=>{let o=typeof r=="string"?r:r.description||r.message||"";o&&!t.includes(o)&&t.push(o);}),Array.isArray(e.reviewers))for(let r of e.reviewers){let o=r.findings||{},i=o.suggestions||o.recommendations||[];Array.isArray(i)&&i.forEach(a=>{let l=typeof a=="string"?a:a.description||a.message||"";l&&!t.includes(l)&&t.push(l);});}return t.slice(0,10)}formatKeyName(e){return e.replace(/([A-Z])/g," $1").replace(/^./,t=>t.toUpperCase()).trim()}formatNestedObject(e){if(typeof e=="string")return e;if(e==null)return "";if(typeof e!="object")return String(e);let t=[];for(let[n,r]of Object.entries(e)){if(n.startsWith("_"))continue;let o=n.replace(/([A-Z])/g," $1").replace(/^./,i=>i.toUpperCase());Array.isArray(r)?r.length>0&&(t.push(`**${o}:**`),r.forEach((i,a)=>{typeof i=="string"?t.push(` ${a+1}. ${i}`):typeof i=="object"&&i!==null&&t.push(` ${a+1}. ${i.description||i.name||JSON.stringify(i)}`);})):typeof r=="object"&&r!==null?t.push(`**${o}:** ${this.formatNestedObject(r)}`):r!=null&&r!==""&&t.push(`**${o}:** ${r}`);}return t.join(`
2523
2523
  `)}parseMarkdownResponse(e,t){let n="approve",r=e.match(/\*\*(?:判定|verdict|结论|decision)\*\*\s*[::]\s*(\w+)/i);r?n=this.normalizeVerdict(r[1]):n=this.inferVerdict(e);let o="",i=e.match(/\*\*(?:分析|analysis|评估|assessment)\*\*\s*[::]\s*\n?([\s\S]*?)(?=\*\*(?:风险|建议|risks?|suggestions?)\*\*|$)/i);i&&(o=i[1].trim()),o||(o=e.replace(/\*\*(?:判定|verdict|结论|decision)\*\*\s*[::]\s*\w+/gi,"").replace(/\*\*(?:风险|risks?)\*\*\s*[::][\s\S]*?(?=\*\*|$)/gi,"").replace(/\*\*(?:建议|suggestions?|recommendations?)\*\*\s*[::][\s\S]*?(?=\*\*|$)/gi,"").replace(/```json[\s\S]*?```/g,"").replace(/\{[\s\S]*?\}/g,"").replace(/---+/g,"").trim()),o.length>800&&(o=o.substring(0,800)+"...");let a=[],l=e.match(/\*\*(?:风险|risks?|concerns?|issues?)\*\*\s*[::]\s*\n?((?:\s*[-•*]\s*.+\n?)+)/gi);l&&l.forEach(d=>{let m=d.match(/[-•*]\s*\[?([^\]\n]+)\]?/g);m&&m.forEach(g=>{let h=g.replace(/^[-•*]\s*\[?/,"").replace(/\]?$/,"").trim();h&&!a.includes(h)&&h.length>2&&a.push(h);});});let c=[],u=e.match(/\*\*(?:建议|suggestions?|recommendations?)\*\*\s*[::]\s*\n?((?:\s*[-•*]\s*.+\n?)+)/gi);return u&&u.forEach(d=>{let m=d.match(/[-•*]\s*\[?([^\]\n]+)\]?/g);m&&m.forEach(g=>{let h=g.replace(/^[-•*]\s*\[?/,"").replace(/\]?$/,"").trim();h&&!c.includes(h)&&h.length>2&&c.push(h);});}),{verdict:n,analysis:o,risks:a,suggestions:c}}normalizeVerdict(e){let t=(e||"").toLowerCase();return t.includes("reject")||t==="reject"?"reject":t.includes("concern")||t==="concern"?"concern":"approve"}inferVerdict(e){let t=e.toLowerCase();return t.includes("reject")||t.includes("\u4E0D\u53EF\u884C")||t.includes("\u62D2\u7EDD")?"reject":t.includes("concern")||t.includes("\u62C5\u5FE7")||t.includes("\u98CE\u9669")?"concern":"approve"}estimateTokens(e){let t=(e.match(/[\u4e00-\u9fa5]/g)||[]).length,n=e.length-t;return Math.round(t/2+n/4)}generateReviewId(){return `ccb-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}mergeAgents(e,t){let n=[...e];for(let r of t){let o=n.findIndex(i=>i.id===r.id);o>=0&&(n[o]={...n[o],...r});}return n}createFallbackResult(e,t){let n=Date.now();return {id:e,approved:true,confidence:30,reviews:[],summary:{risks:[{level:"medium",description:"CCB \u8BC4\u5BA1\u5931\u8D25\uFF0C\u4F7F\u7528\u964D\u7EA7\u7B56\u7565",mitigation:"\u5EFA\u8BAE\u624B\u52A8\u8BC4\u5BA1",sourceAgentId:"system"}],suggestions:["\u5EFA\u8BAE\u8FDB\u884C\u624B\u52A8\u8BC4\u5BA1"],estimatedEffort:{timeRange:"\u672A\u77E5",complexity:"medium",parallelism:2,estimatedTokens:1e4},recommendedApproach:"\u5EFA\u8BAE\u8C28\u614E\u6267\u884C"},startedAt:t,completedAt:n,totalDuration:n-t}}emitEvent(e){this.onEvent&&this.onEvent(e);}updateConfig(e){this.config={...this.config,...e};}setEventHandler(e){this.onEvent=e;}};function Ap(s){return new rc(s)}Z();var sc=class{config;constructor(e){this.config={workDir:e.workDir,maxFiles:e.maxFiles??10,maxContentLength:e.maxContentLength??5e3};}async collect(e){let t=Date.now();p.info("CCB_CONTEXT","Collecting project context",{workDir:this.config.workDir});let n={rootDir:this.config.workDir,projectName:this.getProjectName(),techStack:this.detectTechStack(),directoryStructure:this.getDirectoryStructure(),keyFiles:this.findKeyFiles()};n.dependencies=this.getPackageDependencies(),n.readmeSummary=this.getReadmeSummary(),n.relevantCode=await this.findRelevantCode(e);let r=Date.now()-t;return p.info("CCB_CONTEXT",`Context collected in ${r}ms`,{projectName:n.projectName,techStack:n.techStack,keyFilesCount:n.keyFiles.length}),n}getProjectName(){try{let e=he.join(this.config.workDir,"package.json");if(Je.existsSync(e))return JSON.parse(Je.readFileSync(e,"utf-8")).name||he.basename(this.config.workDir)}catch{}return he.basename(this.config.workDir)}detectTechStack(){let e=[],t=this.config.workDir,n=he.join(t,"package.json");if(Je.existsSync(n))try{let r=JSON.parse(Je.readFileSync(n,"utf-8")),o={...r.dependencies,...r.devDependencies};o.react&&e.push("React"),o.vue&&e.push("Vue"),o.next&&e.push("Next.js"),o.express&&e.push("Express"),(o.typescript||Je.existsSync(he.join(t,"tsconfig.json")))&&e.push("TypeScript"),(o.prisma||o["@prisma/client"])&&e.push("Prisma"),o.mongoose&&e.push("MongoDB"),(o.pg||o.postgres)&&e.push("PostgreSQL"),o.tailwindcss&&e.push("TailwindCSS"),o.electron&&e.push("Electron");}catch{}return (Je.existsSync(he.join(t,"requirements.txt"))||Je.existsSync(he.join(t,"pyproject.toml")))&&e.push("Python"),Je.existsSync(he.join(t,"go.mod"))&&e.push("Go"),Je.existsSync(he.join(t,"Cargo.toml"))&&e.push("Rust"),e.length>0?e:["Unknown"]}getDirectoryStructure(){let t=new Set(["node_modules",".git","dist","build",".next","__pycache__","venv"]),n=[],r=(o,i,a)=>{if(!(a>3)&&!(n.length>50))try{let c=Je.readdirSync(o,{withFileTypes:!0}).filter(u=>!u.name.startsWith(".")&&!t.has(u.name));for(let u=0;u<c.length&&n.length<50;u++){let d=c[u],m=u===c.length-1,g=m?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",h=m?" ":"\u2502 ";d.isDirectory()?(n.push(`${i}${g}${d.name}/`),r(he.join(o,d.name),i+h,a+1)):n.push(`${i}${g}${d.name}`);}}catch{}};return n.push(he.basename(this.config.workDir)+"/"),r(this.config.workDir,"",1),n.join(`
2524
2524
  `)}findKeyFiles(){let e=[],t=["package.json","tsconfig.json","README.md","src/index.ts","src/main.ts","src/app.ts","src/App.tsx","src/pages/index.tsx","src/routes/index.ts","prisma/schema.prisma","docker-compose.yml","Dockerfile"];for(let n of t){let r=he.join(this.config.workDir,n);Je.existsSync(r)&&e.push(n);}return e}getPackageDependencies(){try{let e=he.join(this.config.workDir,"package.json");if(!Je.existsSync(e))return;let t=JSON.parse(Je.readFileSync(e,"utf-8")),n=Object.keys(t.dependencies||{}).slice(0,15),r=Object.keys(t.devDependencies||{}).slice(0,10),o="";return n.length>0&&(o+=`Dependencies: ${n.join(", ")}`,Object.keys(t.dependencies||{}).length>15&&(o+=` (+${Object.keys(t.dependencies||{}).length-15} more)`)),r.length>0&&(o+=`
@@ -2678,7 +2678,7 @@ ${s.codebaseContext}
2678
2678
  "maxParallelism": 1,
2679
2679
  "estimatedTotalTime": 60
2680
2680
  }
2681
- }`;var oc=class{validate(e,t){let n=[],r=[];if(e.size===0)return n.push("DAG \u6CA1\u6709\u4EFB\u4F55\u8282\u70B9"),{valid:false,errors:n,warnings:r};let o=this.detectCycles(e);o&&n.push(o);let i=this.validateDependencies(e);n.push(...i);let a=this.validateLevels(e,t);n.push(...a);let l=this.validateRoots(e,t);n.push(...l);let c=this.validateLeaves(e,t);n.push(...c);let u=this.validateTasks(e);r.push(...u);let d=this.validateIOMapping(e);return r.push(...d),{valid:n.length===0,errors:n,warnings:r}}detectCycles(e){let t=new Set,n=new Set,r=(o,i)=>{if(n.has(o)){let l=i.indexOf(o);return `\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56: ${[...i.slice(l),o].join(" -> ")}`}if(t.has(o))return null;t.add(o),n.add(o);let a=e.get(o);if(a)for(let l of a.dependencies){let c=r(l,[...i,o]);if(c)return c}return n.delete(o),null};for(let o of e.keys()){let i=r(o,[]);if(i)return i}return null}validateDependencies(e){let t=[];for(let[n,r]of e){for(let o of r.dependencies)e.has(o)||t.push(`\u8282\u70B9 ${n} \u4F9D\u8D56\u4E0D\u5B58\u5728\u7684\u8282\u70B9: ${o}`);for(let o of r.dependents)e.has(o)||t.push(`\u8282\u70B9 ${n} \u7684\u88AB\u4F9D\u8D56\u8282\u70B9\u4E0D\u5B58\u5728: ${o}`);}return t}validateLevels(e,t){let n=[],r=new Set(t.levels.flat());for(let i of e.keys())r.has(i)||n.push(`\u8282\u70B9 ${i} \u6CA1\u6709\u88AB\u5206\u914D\u5230\u4EFB\u4F55\u5C42\u7EA7`);for(let i of t.levels)for(let a of i)e.has(a)||n.push(`\u5C42\u7EA7\u4E2D\u5305\u542B\u4E0D\u5B58\u5728\u7684\u8282\u70B9: ${a}`);let o=new Map;for(let i=0;i<t.levels.length;i++)for(let a of t.levels[i])o.set(a,i);for(let[i,a]of e){let l=o.get(i)??-1;for(let c of a.dependencies){let u=o.get(c)??-1;u>=l&&n.push(`\u8282\u70B9 ${i} (\u5C42\u7EA7 ${l}) \u4F9D\u8D56\u4E86\u540C\u5C42\u6216\u66F4\u665A\u5C42\u7EA7\u7684\u8282\u70B9 ${c} (\u5C42\u7EA7 ${u})`);}}return n}validateRoots(e,t){let n=[];for(let r of t.roots){let o=e.get(r);if(!o){n.push(`\u6839\u8282\u70B9\u4E0D\u5B58\u5728: ${r}`);continue}o.dependencies.length>0&&n.push(`\u6839\u8282\u70B9 ${r} \u4E0D\u5E94\u8BE5\u6709\u4F9D\u8D56: ${o.dependencies.join(", ")}`);}for(let[r,o]of e)o.dependencies.length===0&&!t.roots.includes(r)&&n.push(`\u8282\u70B9 ${r} \u6CA1\u6709\u4F9D\u8D56\uFF0C\u4F46\u672A\u88AB\u6807\u8BB0\u4E3A\u6839\u8282\u70B9`);return n}validateLeaves(e,t){let n=[];for(let r of t.leaves){let o=e.get(r);if(!o){n.push(`\u53F6\u8282\u70B9\u4E0D\u5B58\u5728: ${r}`);continue}o.dependents.length>0&&n.push(`\u53F6\u8282\u70B9 ${r} \u4E0D\u5E94\u8BE5\u88AB\u4F9D\u8D56: ${o.dependents.join(", ")}`);}return n}validateTasks(e){let t=[];for(let[n,r]of e)(!r.task.description||r.task.description.length<10)&&t.push(`\u8282\u70B9 ${n} \u7684\u4EFB\u52A1\u63CF\u8FF0\u8FC7\u77ED\uFF0C\u53EF\u80FD\u4E0D\u591F\u8BE6\u7EC6`),r.task.role||t.push(`\u8282\u70B9 ${n} \u6CA1\u6709\u5206\u914D\u89D2\u8272`),r.execution.estimatedDuration<=0&&t.push(`\u8282\u70B9 ${n} \u7684\u9884\u4F30\u8017\u65F6\u65E0\u6548`),r.execution.estimatedTokens<=0&&t.push(`\u8282\u70B9 ${n} \u7684\u9884\u4F30 Token \u65E0\u6548`);return t}validateIOMapping(e){let t=[],n=new Set;for(let r of e.values())r.io.outputKey&&(n.has(r.io.outputKey)&&t.push(`\u8F93\u51FA key \u91CD\u590D: ${r.io.outputKey}`),n.add(r.io.outputKey));for(let[r,o]of e)for(let[i,a]of Object.entries(o.io.inputMapping)){let l=a.match(/\{\{(.+)\}\}/);if(l){let c=l[1];if(c==="user_request")continue;!n.has(c)&&!c.endsWith("_output")&&t.push(`\u8282\u70B9 ${r} \u7684\u8F93\u5165 ${i} \u5F15\u7528\u4E86\u53EF\u80FD\u4E0D\u5B58\u5728\u7684 key: ${c}`);}}return t}};function Dp(){return new oc}var bE={maxParallelism:5,maxTokensPerTask:5e3,optimizeParallelism:true},ic=class{llmCall;config;onEvent;validator;constructor(e){this.llmCall=e.llmCall,this.config={...bE,...e.config},this.onEvent=e.onEvent,this.validator=Dp();}async plan(e){let t=this.generateDAGId();this.emitEvent({type:"dag_planning_start",timestamp:Date.now(),data:{dagId:t}});try{let n=Pp(e),r=await this.llmCall(Mp,n),{nodes:o,analysis:i}=this.parseResponse(r),a=this.validator.validate(o,i);if(this.emitEvent({type:"dag_validation_complete",timestamp:Date.now(),data:{dagId:t,result:a}}),!a.valid){console.warn("[DAGPlanner] Validation failed:",a.errors);let c=this.attemptFix(o,i,a.errors);if(c){o.clear();for(let[u,d]of c)o.set(u,d);}}this.config.optimizeParallelism&&this.optimizeParallelism(o,i);let l={id:t,nodes:o,analysis:i,state:{phase:"planning",currentLevel:0,completedNodes:[],failedNodes:[]}};return this.emitEvent({type:"dag_planning_complete",timestamp:Date.now(),data:{dagId:t,result:{nodeCount:o.size,levels:i.levels.length,maxParallelism:i.maxParallelism,estimatedTime:i.estimatedTotalTime}}}),l}catch(n){return console.error("[DAGPlanner] Planning failed:",n),this.createFallbackDAG(t,e.userRequest)}}async planSimple(e){let t=this.generateDAGId();this.emitEvent({type:"dag_planning_start",timestamp:Date.now(),data:{dagId:t}});try{let n=await this.llmCall(Rp,e),{nodes:r,analysis:o}=this.parseResponse(n),i={id:t,nodes:r,analysis:o,state:{phase:"planning",currentLevel:0,completedNodes:[],failedNodes:[]}};return this.emitEvent({type:"dag_planning_complete",timestamp:Date.now(),data:{dagId:t}}),i}catch{return this.createFallbackDAG(t,e)}}parseResponse(e){let t=e.match(/\{[\s\S]*\}/);if(!t)throw new Error("No JSON found in response");let n=JSON.parse(t[0]);if(!n.nodes||!Array.isArray(n.nodes))throw new Error("Invalid nodes in response");if(!n.analysis)throw new Error("Invalid analysis in response");let r=new Map;for(let i of n.nodes){let a={id:i.id,task:{description:i.task?.description||"",role:i.task?.role||"executor",requiredCapabilities:i.task?.requiredCapabilities||[]},dependencies:i.dependencies||[],dependents:[],execution:{estimatedDuration:i.execution?.estimatedDuration||60,estimatedTokens:i.execution?.estimatedTokens||2e3,priority:i.execution?.priority||5,parallelGroup:i.execution?.parallelGroup},io:{inputMapping:i.io?.inputMapping||{},outputKey:i.io?.outputKey||`${i.id}_output`},status:"pending"};r.set(a.id,a);}for(let[i,a]of r)for(let l of a.dependencies){let c=r.get(l);c&&c.dependents.push(i);}let o={roots:n.analysis.roots||[],leaves:n.analysis.leaves||[],levels:n.analysis.levels||[],criticalPath:n.analysis.criticalPath||[],maxParallelism:n.analysis.maxParallelism||1,estimatedTotalTime:n.analysis.estimatedTotalTime||60};return {nodes:r,analysis:o}}attemptFix(e,t,n){let r={...t};r.roots=[];for(let[o,i]of e)i.dependencies.length===0&&r.roots.push(o);r.leaves=[];for(let[o,i]of e)i.dependents.length===0&&r.leaves.push(o);return n.some(o=>o.includes("\u5C42\u7EA7"))&&(r.levels=this.computeLevels(e)),t.roots=r.roots,t.leaves=r.leaves,t.levels=r.levels,e}computeLevels(e){let t=[],n=new Set;for(;n.size<e.size;){let r=[];for(let[o,i]of e){if(n.has(o))continue;i.dependencies.every(l=>n.has(l))&&r.push(o);}if(r.length===0){console.error("[DAGPlanner] Unable to compute levels, possible cycle");break}t.push(r);for(let o of r)n.add(o);}return t}optimizeParallelism(e,t){let n=this.config.maxParallelism??5;for(let r=0;r<t.levels.length;r++){let o=t.levels[r];if(o.length>n){let i=[];for(let a=0;a<o.length;a+=n)i.push(o.slice(a,a+n));console.log(`[DAGPlanner] Level ${r} has ${o.length} nodes, max is ${n}`);}}t.maxParallelism=Math.min(Math.max(...t.levels.map(r=>r.length)),n);}createFallbackDAG(e,t){let n="fallback-node",r={id:n,task:{description:`\u6267\u884C\u7528\u6237\u8BF7\u6C42: ${t.substring(0,100)}`,role:"executor",requiredCapabilities:["general"]},dependencies:[],dependents:[],execution:{estimatedDuration:120,estimatedTokens:3e3,priority:5},io:{inputMapping:{request:"{{user_request}}"},outputKey:"result"},status:"pending"},o=new Map;return o.set(n,r),{id:e,nodes:o,analysis:{roots:[n],leaves:[n],levels:[[n]],criticalPath:[n],maxParallelism:1,estimatedTotalTime:120},state:{phase:"planning",currentLevel:0,completedNodes:[],failedNodes:[]}}}generateDAGId(){return `dag-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}emitEvent(e){this.onEvent&&this.onEvent(e);}updateConfig(e){this.config={...this.config,...e};}};function Np(s){return new ic(s)}var ac=class{instances=new Map;llmCall;onEvent;defaultTimeout;constructor(e){this.llmCall=e.llmCall,this.onEvent=e.onEvent,this.defaultTimeout=e.defaultTimeout??3e5;}createInstance(e){let t={id:this.generateInstanceId(),nodeId:e.id,role:e.task.role,status:"idle",createdAt:Date.now()};return this.instances.set(t.id,t),t}async execute(e,t,n){let r=n?.timeout??this.defaultTimeout,o=Date.now();e.status="busy",e.startedAt=o,this.instances.set(e.id,e);try{let i=await this.executeWithTimeout(this.llmCall(t.systemPrompt,t.userPrompt,{model:n?.model,onText:n?.onText,nodeId:e.nodeId,onRuntimeEvent:n?.onRuntimeEvent,previousToolCalls:n?.previousToolCalls}),r),a=Date.now(),l=a-o,c={output:i,tokenUsage:{input:t.estimatedTokens,output:Math.ceil(i.length/2.5),total:t.estimatedTokens+Math.ceil(i.length/2.5)},duration:l};return e.status="completed",e.completedAt=a,e.result=c,this.instances.set(e.id,e),c}catch(i){let a=Date.now(),l=i instanceof Error?i.message:String(i);throw e.status="failed",e.completedAt=a,e.error=l,this.instances.set(e.id,e),i}}async executeWithTimeout(e,t){return Promise.race([e,new Promise((n,r)=>{setTimeout(()=>{r(new Error(`\u6267\u884C\u8D85\u65F6 (${t}ms)`));},t);})])}getInstance(e){return this.instances.get(e)}getInstanceByNodeId(e){for(let t of this.instances.values())if(t.nodeId===e)return t}getAllInstances(){return Array.from(this.instances.values())}getInstancesByStatus(e){return Array.from(this.instances.values()).filter(t=>t.status===e)}terminate(e){let t=this.instances.get(e);return t?(t.status="terminated",t.completedAt=Date.now(),this.instances.set(e,t),true):false}cleanup(){let e=0;for(let[t,n]of this.instances)(n.status==="completed"||n.status==="failed"||n.status==="terminated")&&(this.instances.delete(t),e++);return e}reset(){this.instances.clear();}getStats(){let e={total:this.instances.size,idle:0,busy:0,completed:0,failed:0,terminated:0};for(let t of this.instances.values())switch(t.status){case "idle":e.idle++;break;case "busy":e.busy++;break;case "completed":e.completed++;break;case "failed":e.failed++;break;case "terminated":e.terminated++;break}return e}generateInstanceId(){return `agent-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}emitEvent(e){this.onEvent&&this.onEvent(e);}};function Lp(s){return new ac(s)}var lc=class{context;constructor(e,t){this.context={dagId:e,userRequest:t,entries:new Map,metadata:{}},this.set("user_request",t,"system");}set(e,t,n){let r=this.context.entries.get(e),o=r?r.version+1:1,i={key:e,value:t,sourceNodeId:n,createdAt:Date.now(),version:o};this.context.entries.set(e,i);}get(e){return this.context.entries.get(e)?.value}getEntry(e){return this.context.entries.get(e)}has(e){return this.context.entries.has(e)}resolveInputMapping(e){let t={};for(let[n,r]of Object.entries(e)){let o=r.match(/\{\{(.+)\}\}/);if(o){let i=o[1],a=this.get(i);if(a!==void 0)t[n]=a;else if(i.match(/(.+)_output$/)){let c=this.get(i);t[n]=c??`[\u672A\u627E\u5230: ${i}]`;}else t[n]=`[\u672A\u627E\u5230: ${i}]`;}else t[n]=r;}return t}storeNodeOutput(e,t,n){this.set(t,n,e);let r=`${e}_output`;t!==r&&this.set(r,n,e);}setMetadata(e,t){this.context.metadata[e]=t;}getMetadata(e){return this.context.metadata[e]}getAllEntries(){return new Map(this.context.entries)}getSummary(){let e=Array.from(this.context.entries.entries());if(e.length===0)return "\u65E0\u53EF\u7528\u4E0A\u4E0B\u6587";let t=[];for(let[n,r]of e){if(n==="user_request")continue;let o=typeof r.value=="string"?r.value.substring(0,100)+(r.value.length>100?"...":""):JSON.stringify(r.value).substring(0,100);t.push(`- ${n}: ${o}`);}return t.join(`
2681
+ }`;var oc=class{validate(e,t){let n=[],r=[];if(e.size===0)return n.push("DAG \u6CA1\u6709\u4EFB\u4F55\u8282\u70B9"),{valid:false,errors:n,warnings:r};let o=this.detectCycles(e);o&&n.push(o);let i=this.validateDependencies(e);n.push(...i);let a=this.validateLevels(e,t);n.push(...a);let l=this.validateRoots(e,t);n.push(...l);let c=this.validateLeaves(e,t);n.push(...c);let u=this.validateTasks(e);r.push(...u);let d=this.validateIOMapping(e);return r.push(...d),{valid:n.length===0,errors:n,warnings:r}}detectCycles(e){let t=new Set,n=new Set,r=(o,i)=>{if(n.has(o)){let l=i.indexOf(o);return `\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56: ${[...i.slice(l),o].join(" -> ")}`}if(t.has(o))return null;t.add(o),n.add(o);let a=e.get(o);if(a)for(let l of a.dependencies){let c=r(l,[...i,o]);if(c)return c}return n.delete(o),null};for(let o of e.keys()){let i=r(o,[]);if(i)return i}return null}validateDependencies(e){let t=[];for(let[n,r]of e){for(let o of r.dependencies)e.has(o)||t.push(`\u8282\u70B9 ${n} \u4F9D\u8D56\u4E0D\u5B58\u5728\u7684\u8282\u70B9: ${o}`);for(let o of r.dependents)e.has(o)||t.push(`\u8282\u70B9 ${n} \u7684\u88AB\u4F9D\u8D56\u8282\u70B9\u4E0D\u5B58\u5728: ${o}`);}return t}validateLevels(e,t){let n=[],r=new Set(t.levels.flat());for(let i of e.keys())r.has(i)||n.push(`\u8282\u70B9 ${i} \u6CA1\u6709\u88AB\u5206\u914D\u5230\u4EFB\u4F55\u5C42\u7EA7`);for(let i of t.levels)for(let a of i)e.has(a)||n.push(`\u5C42\u7EA7\u4E2D\u5305\u542B\u4E0D\u5B58\u5728\u7684\u8282\u70B9: ${a}`);let o=new Map;for(let i=0;i<t.levels.length;i++)for(let a of t.levels[i])o.set(a,i);for(let[i,a]of e){let l=o.get(i)??-1;for(let c of a.dependencies){let u=o.get(c)??-1;u>=l&&n.push(`\u8282\u70B9 ${i} (\u5C42\u7EA7 ${l}) \u4F9D\u8D56\u4E86\u540C\u5C42\u6216\u66F4\u665A\u5C42\u7EA7\u7684\u8282\u70B9 ${c} (\u5C42\u7EA7 ${u})`);}}return n}validateRoots(e,t){let n=[];for(let r of t.roots){let o=e.get(r);if(!o){n.push(`\u6839\u8282\u70B9\u4E0D\u5B58\u5728: ${r}`);continue}o.dependencies.length>0&&n.push(`\u6839\u8282\u70B9 ${r} \u4E0D\u5E94\u8BE5\u6709\u4F9D\u8D56: ${o.dependencies.join(", ")}`);}for(let[r,o]of e)o.dependencies.length===0&&!t.roots.includes(r)&&n.push(`\u8282\u70B9 ${r} \u6CA1\u6709\u4F9D\u8D56\uFF0C\u4F46\u672A\u88AB\u6807\u8BB0\u4E3A\u6839\u8282\u70B9`);return n}validateLeaves(e,t){let n=[];for(let r of t.leaves){let o=e.get(r);if(!o){n.push(`\u53F6\u8282\u70B9\u4E0D\u5B58\u5728: ${r}`);continue}o.dependents.length>0&&n.push(`\u53F6\u8282\u70B9 ${r} \u4E0D\u5E94\u8BE5\u88AB\u4F9D\u8D56: ${o.dependents.join(", ")}`);}return n}validateTasks(e){let t=[];for(let[n,r]of e)(!r.task.description||r.task.description.length<10)&&t.push(`\u8282\u70B9 ${n} \u7684\u4EFB\u52A1\u63CF\u8FF0\u8FC7\u77ED\uFF0C\u53EF\u80FD\u4E0D\u591F\u8BE6\u7EC6`),r.task.role||t.push(`\u8282\u70B9 ${n} \u6CA1\u6709\u5206\u914D\u89D2\u8272`),r.execution.estimatedDuration<=0&&t.push(`\u8282\u70B9 ${n} \u7684\u9884\u4F30\u8017\u65F6\u65E0\u6548`),r.execution.estimatedTokens<=0&&t.push(`\u8282\u70B9 ${n} \u7684\u9884\u4F30 Token \u65E0\u6548`);return t}validateIOMapping(e){let t=[],n=new Set;for(let r of e.values())r.io.outputKey&&(n.has(r.io.outputKey)&&t.push(`\u8F93\u51FA key \u91CD\u590D: ${r.io.outputKey}`),n.add(r.io.outputKey));for(let[r,o]of e)for(let[i,a]of Object.entries(o.io.inputMapping)){let l=a.match(/\{\{(.+)\}\}/);if(l){let c=l[1];if(c==="user_request")continue;!n.has(c)&&!c.endsWith("_output")&&t.push(`\u8282\u70B9 ${r} \u7684\u8F93\u5165 ${i} \u5F15\u7528\u4E86\u53EF\u80FD\u4E0D\u5B58\u5728\u7684 key: ${c}`);}}return t}};function Dp(){return new oc}var vE={maxParallelism:5,maxTokensPerTask:5e3,optimizeParallelism:true},ic=class{llmCall;config;onEvent;validator;constructor(e){this.llmCall=e.llmCall,this.config={...vE,...e.config},this.onEvent=e.onEvent,this.validator=Dp();}async plan(e){let t=this.generateDAGId();this.emitEvent({type:"dag_planning_start",timestamp:Date.now(),data:{dagId:t}});try{let n=Pp(e),r=await this.llmCall(Mp,n),{nodes:o,analysis:i}=this.parseResponse(r),a=this.validator.validate(o,i);if(this.emitEvent({type:"dag_validation_complete",timestamp:Date.now(),data:{dagId:t,result:a}}),!a.valid){console.warn("[DAGPlanner] Validation failed:",a.errors);let c=this.attemptFix(o,i,a.errors);if(c){o.clear();for(let[u,d]of c)o.set(u,d);}}this.config.optimizeParallelism&&this.optimizeParallelism(o,i);let l={id:t,nodes:o,analysis:i,state:{phase:"planning",currentLevel:0,completedNodes:[],failedNodes:[]}};return this.emitEvent({type:"dag_planning_complete",timestamp:Date.now(),data:{dagId:t,result:{nodeCount:o.size,levels:i.levels.length,maxParallelism:i.maxParallelism,estimatedTime:i.estimatedTotalTime}}}),l}catch(n){return console.error("[DAGPlanner] Planning failed:",n),this.createFallbackDAG(t,e.userRequest)}}async planSimple(e){let t=this.generateDAGId();this.emitEvent({type:"dag_planning_start",timestamp:Date.now(),data:{dagId:t}});try{let n=await this.llmCall(Rp,e),{nodes:r,analysis:o}=this.parseResponse(n),i={id:t,nodes:r,analysis:o,state:{phase:"planning",currentLevel:0,completedNodes:[],failedNodes:[]}};return this.emitEvent({type:"dag_planning_complete",timestamp:Date.now(),data:{dagId:t}}),i}catch{return this.createFallbackDAG(t,e)}}parseResponse(e){let t=e.match(/\{[\s\S]*\}/);if(!t)throw new Error("No JSON found in response");let n=JSON.parse(t[0]);if(!n.nodes||!Array.isArray(n.nodes))throw new Error("Invalid nodes in response");if(!n.analysis)throw new Error("Invalid analysis in response");let r=new Map;for(let i of n.nodes){let a={id:i.id,task:{description:i.task?.description||"",role:i.task?.role||"executor",requiredCapabilities:i.task?.requiredCapabilities||[]},dependencies:i.dependencies||[],dependents:[],execution:{estimatedDuration:i.execution?.estimatedDuration||60,estimatedTokens:i.execution?.estimatedTokens||2e3,priority:i.execution?.priority||5,parallelGroup:i.execution?.parallelGroup},io:{inputMapping:i.io?.inputMapping||{},outputKey:i.io?.outputKey||`${i.id}_output`},status:"pending"};r.set(a.id,a);}for(let[i,a]of r)for(let l of a.dependencies){let c=r.get(l);c&&c.dependents.push(i);}let o={roots:n.analysis.roots||[],leaves:n.analysis.leaves||[],levels:n.analysis.levels||[],criticalPath:n.analysis.criticalPath||[],maxParallelism:n.analysis.maxParallelism||1,estimatedTotalTime:n.analysis.estimatedTotalTime||60};return {nodes:r,analysis:o}}attemptFix(e,t,n){let r={...t};r.roots=[];for(let[o,i]of e)i.dependencies.length===0&&r.roots.push(o);r.leaves=[];for(let[o,i]of e)i.dependents.length===0&&r.leaves.push(o);return n.some(o=>o.includes("\u5C42\u7EA7"))&&(r.levels=this.computeLevels(e)),t.roots=r.roots,t.leaves=r.leaves,t.levels=r.levels,e}computeLevels(e){let t=[],n=new Set;for(;n.size<e.size;){let r=[];for(let[o,i]of e){if(n.has(o))continue;i.dependencies.every(l=>n.has(l))&&r.push(o);}if(r.length===0){console.error("[DAGPlanner] Unable to compute levels, possible cycle");break}t.push(r);for(let o of r)n.add(o);}return t}optimizeParallelism(e,t){let n=this.config.maxParallelism??5;for(let r=0;r<t.levels.length;r++){let o=t.levels[r];if(o.length>n){let i=[];for(let a=0;a<o.length;a+=n)i.push(o.slice(a,a+n));console.log(`[DAGPlanner] Level ${r} has ${o.length} nodes, max is ${n}`);}}t.maxParallelism=Math.min(Math.max(...t.levels.map(r=>r.length)),n);}createFallbackDAG(e,t){let n="fallback-node",r={id:n,task:{description:`\u6267\u884C\u7528\u6237\u8BF7\u6C42: ${t.substring(0,100)}`,role:"executor",requiredCapabilities:["general"]},dependencies:[],dependents:[],execution:{estimatedDuration:120,estimatedTokens:3e3,priority:5},io:{inputMapping:{request:"{{user_request}}"},outputKey:"result"},status:"pending"},o=new Map;return o.set(n,r),{id:e,nodes:o,analysis:{roots:[n],leaves:[n],levels:[[n]],criticalPath:[n],maxParallelism:1,estimatedTotalTime:120},state:{phase:"planning",currentLevel:0,completedNodes:[],failedNodes:[]}}}generateDAGId(){return `dag-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}emitEvent(e){this.onEvent&&this.onEvent(e);}updateConfig(e){this.config={...this.config,...e};}};function Np(s){return new ic(s)}var ac=class{instances=new Map;llmCall;onEvent;defaultTimeout;constructor(e){this.llmCall=e.llmCall,this.onEvent=e.onEvent,this.defaultTimeout=e.defaultTimeout??3e5;}createInstance(e){let t={id:this.generateInstanceId(),nodeId:e.id,role:e.task.role,status:"idle",createdAt:Date.now()};return this.instances.set(t.id,t),t}async execute(e,t,n){let r=n?.timeout??this.defaultTimeout,o=Date.now();e.status="busy",e.startedAt=o,this.instances.set(e.id,e);try{let i=await this.executeWithTimeout(this.llmCall(t.systemPrompt,t.userPrompt,{model:n?.model,onText:n?.onText,nodeId:e.nodeId,onRuntimeEvent:n?.onRuntimeEvent,previousToolCalls:n?.previousToolCalls}),r),a=Date.now(),l=a-o,c={output:i,tokenUsage:{input:t.estimatedTokens,output:Math.ceil(i.length/2.5),total:t.estimatedTokens+Math.ceil(i.length/2.5)},duration:l};return e.status="completed",e.completedAt=a,e.result=c,this.instances.set(e.id,e),c}catch(i){let a=Date.now(),l=i instanceof Error?i.message:String(i);throw e.status="failed",e.completedAt=a,e.error=l,this.instances.set(e.id,e),i}}async executeWithTimeout(e,t){return Promise.race([e,new Promise((n,r)=>{setTimeout(()=>{r(new Error(`\u6267\u884C\u8D85\u65F6 (${t}ms)`));},t);})])}getInstance(e){return this.instances.get(e)}getInstanceByNodeId(e){for(let t of this.instances.values())if(t.nodeId===e)return t}getAllInstances(){return Array.from(this.instances.values())}getInstancesByStatus(e){return Array.from(this.instances.values()).filter(t=>t.status===e)}terminate(e){let t=this.instances.get(e);return t?(t.status="terminated",t.completedAt=Date.now(),this.instances.set(e,t),true):false}cleanup(){let e=0;for(let[t,n]of this.instances)(n.status==="completed"||n.status==="failed"||n.status==="terminated")&&(this.instances.delete(t),e++);return e}reset(){this.instances.clear();}getStats(){let e={total:this.instances.size,idle:0,busy:0,completed:0,failed:0,terminated:0};for(let t of this.instances.values())switch(t.status){case "idle":e.idle++;break;case "busy":e.busy++;break;case "completed":e.completed++;break;case "failed":e.failed++;break;case "terminated":e.terminated++;break}return e}generateInstanceId(){return `agent-${Date.now()}-${Math.random().toString(36).substring(2,8)}`}emitEvent(e){this.onEvent&&this.onEvent(e);}};function Lp(s){return new ac(s)}var lc=class{context;constructor(e,t){this.context={dagId:e,userRequest:t,entries:new Map,metadata:{}},this.set("user_request",t,"system");}set(e,t,n){let r=this.context.entries.get(e),o=r?r.version+1:1,i={key:e,value:t,sourceNodeId:n,createdAt:Date.now(),version:o};this.context.entries.set(e,i);}get(e){return this.context.entries.get(e)?.value}getEntry(e){return this.context.entries.get(e)}has(e){return this.context.entries.has(e)}resolveInputMapping(e){let t={};for(let[n,r]of Object.entries(e)){let o=r.match(/\{\{(.+)\}\}/);if(o){let i=o[1],a=this.get(i);if(a!==void 0)t[n]=a;else if(i.match(/(.+)_output$/)){let c=this.get(i);t[n]=c??`[\u672A\u627E\u5230: ${i}]`;}else t[n]=`[\u672A\u627E\u5230: ${i}]`;}else t[n]=r;}return t}storeNodeOutput(e,t,n){this.set(t,n,e);let r=`${e}_output`;t!==r&&this.set(r,n,e);}setMetadata(e,t){this.context.metadata[e]=t;}getMetadata(e){return this.context.metadata[e]}getAllEntries(){return new Map(this.context.entries)}getSummary(){let e=Array.from(this.context.entries.entries());if(e.length===0)return "\u65E0\u53EF\u7528\u4E0A\u4E0B\u6587";let t=[];for(let[n,r]of e){if(n==="user_request")continue;let o=typeof r.value=="string"?r.value.substring(0,100)+(r.value.length>100?"...":""):JSON.stringify(r.value).substring(0,100);t.push(`- ${n}: ${o}`);}return t.join(`
2682
2682
  `)}getUserRequest(){return this.context.userRequest}getDAGId(){return this.context.dagId}clear(){this.context.entries.clear(),this.context.metadata={},this.set("user_request",this.context.userRequest,"system");}export(){let e={};for(let[t,n]of this.context.entries)e[t]={value:n.value,source:n.sourceNodeId,version:n.version};return {dagId:this.context.dagId,userRequest:this.context.userRequest,entries:e,metadata:this.context.metadata}}};function Op(s,e){return new lc(s,e)}var Si={executor:`\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u6267\u884C\u4E13\u5BB6\u3002\u4F60\u7684\u804C\u8D23\u662F\u51C6\u786E\u3001\u9AD8\u6548\u5730\u5B8C\u6210\u5206\u914D\u7ED9\u4F60\u7684\u4EFB\u52A1\u3002
2683
2683
 
2684
2684
  ## \u6267\u884C\u539F\u5219
@@ -2738,13 +2738,13 @@ ${o}
2738
2738
  `;}return e.contextSummary&&(t+=`## \u76F8\u5173\u4E0A\u4E0B\u6587
2739
2739
  ${e.contextSummary}
2740
2740
 
2741
- `),t+="\u8BF7\u6839\u636E\u4EE5\u4E0A\u4FE1\u606F\u6267\u884C\u4EFB\u52A1\uFF0C\u5E76\u8F93\u51FA\u7ED3\u679C\u3002",t}estimateTokens(e,t){let n=e.length+t.length;return Math.ceil(n/2.5)}getRolePrompt(e){return Si[e]||Si.general}registerRolePrompt(e,t){Si[e]=t;}};function $p(){return new cc}Z();var vE={edit_file:"file_edit",edit:"file_edit",str_replace_editor:"file_edit",write_file:"file_write",write:"file_write",create_file:"file_write",read_file:"file_read",read:"file_read",view_file:"file_read",bash:"command",execute_command:"command",run_terminal_command:"command",shell:"command",grep:"search",glob:"search",search:"search",find_files:"search",list_files:"search",web_search:"web",web_fetch:"web",browser:"web"},uc=class{snapshots=new Map;maxActionsPerNode=20;maxSummaryLength=200;maxToolResultLength=2e3;getOrCreateSnapshot(e){let t=this.snapshots.get(e);return t||(t={nodeId:e,toolCallMessages:[],completedActions:[],partialOutput:"",createdAt:Date.now(),updatedAt:Date.now(),retryCount:0},this.snapshots.set(e,t)),t}getSnapshot(e){return this.snapshots.get(e)}recordToolCall(e,t,n,r,o,i){let a=this.getOrCreateSnapshot(e),l={toolId:i||`tool-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,toolName:t,args:n,result:r.length>this.maxToolResultLength?r.substring(0,this.maxToolResultLength)+`
2742
- ...[truncated]`:r,success:o,timestamp:Date.now()};a.toolCallMessages.push(l);let c=vE[t.toLowerCase()]||"other",u=this.extractTarget(t,n),d=this.generateSummary(t,n,r,o),m={type:c,toolName:t,target:u,summary:d,success:o,timestamp:Date.now()};a.completedActions.push(m),a.completedActions.length>this.maxActionsPerNode&&(a.completedActions.shift(),a.toolCallMessages.shift()),a.updatedAt=Date.now(),p.debug("NODE_CONTEXT",`Recorded action for ${e}`,{type:c,toolName:t,target:u,success:o,totalActions:a.completedActions.length,totalToolMessages:a.toolCallMessages.length});}getToolCallMessages(e){let t=this.getSnapshot(e);return t?t.toolCallMessages:[]}hasToolCallHistory(e){let t=this.getSnapshot(e);return t!==void 0&&t.toolCallMessages.length>0}appendPartialOutput(e,t){let n=this.getOrCreateSnapshot(e);n.partialOutput+=t,n.updatedAt=Date.now(),n.partialOutput.length>5e3&&(n.partialOutput=n.partialOutput.slice(-5e3));}incrementRetryCount(e){let t=this.getOrCreateSnapshot(e);return t.retryCount++,t.updatedAt=Date.now(),t.retryCount}buildResumePrompt(e){let t=this.getSnapshot(e);if(!t||t.completedActions.length===0)return null;let n=["\u3010\u91CD\u8981\u63D0\u793A\u3011\u8FD9\u662F\u4E00\u4E2A\u91CD\u8BD5\u8BF7\u6C42\u3002\u5728\u4E4B\u524D\u7684\u5C1D\u8BD5\u4E2D\uFF0C\u4EE5\u4E0B\u64CD\u4F5C\u5DF2\u7ECF\u6210\u529F\u5B8C\u6210\uFF1A",""],r=this.groupActionsByType(t.completedActions);for(let[o,i]of Object.entries(r)){if(i.length===0)continue;let a=this.getTypeLabel(o);n.push(`## ${a} (${i.length} \u9879\u5DF2\u5B8C\u6210)`);for(let l of i){let c=l.success?"\u2713":"\u2717";n.push(`- ${c} ${l.target}: ${l.summary}`);}n.push("");}return n.push("\u8BF7\u4ECE\u4E0A\u6B21\u4E2D\u65AD\u7684\u5730\u65B9\u7EE7\u7EED\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\u5DF2\u5B8C\u6210\u7684\u64CD\u4F5C\u3002"),n.push("\u5982\u679C\u67D0\u4E2A\u6587\u4EF6\u5DF2\u7ECF\u88AB\u7F16\u8F91\u8FC7\uFF0C\u8BF7\u68C0\u67E5\u5F53\u524D\u72B6\u6001\u800C\u4E0D\u662F\u518D\u6B21\u7F16\u8F91\u3002"),n.push(""),n.join(`
2741
+ `),t+="\u8BF7\u6839\u636E\u4EE5\u4E0A\u4FE1\u606F\u6267\u884C\u4EFB\u52A1\uFF0C\u5E76\u8F93\u51FA\u7ED3\u679C\u3002",t}estimateTokens(e,t){let n=e.length+t.length;return Math.ceil(n/2.5)}getRolePrompt(e){return Si[e]||Si.general}registerRolePrompt(e,t){Si[e]=t;}};function $p(){return new cc}Z();var CE={edit_file:"file_edit",edit:"file_edit",str_replace_editor:"file_edit",write_file:"file_write",write:"file_write",create_file:"file_write",read_file:"file_read",read:"file_read",view_file:"file_read",bash:"command",execute_command:"command",run_terminal_command:"command",shell:"command",grep:"search",glob:"search",search:"search",find_files:"search",list_files:"search",web_search:"web",web_fetch:"web",browser:"web"},uc=class{snapshots=new Map;maxActionsPerNode=20;maxSummaryLength=200;maxToolResultLength=2e3;getOrCreateSnapshot(e){let t=this.snapshots.get(e);return t||(t={nodeId:e,toolCallMessages:[],completedActions:[],partialOutput:"",createdAt:Date.now(),updatedAt:Date.now(),retryCount:0},this.snapshots.set(e,t)),t}getSnapshot(e){return this.snapshots.get(e)}recordToolCall(e,t,n,r,o,i){let a=this.getOrCreateSnapshot(e),l={toolId:i||`tool-${Date.now()}-${Math.random().toString(36).substring(2,6)}`,toolName:t,args:n,result:r.length>this.maxToolResultLength?r.substring(0,this.maxToolResultLength)+`
2742
+ ...[truncated]`:r,success:o,timestamp:Date.now()};a.toolCallMessages.push(l);let c=CE[t.toLowerCase()]||"other",u=this.extractTarget(t,n),d=this.generateSummary(t,n,r,o),m={type:c,toolName:t,target:u,summary:d,success:o,timestamp:Date.now()};a.completedActions.push(m),a.completedActions.length>this.maxActionsPerNode&&(a.completedActions.shift(),a.toolCallMessages.shift()),a.updatedAt=Date.now(),p.debug("NODE_CONTEXT",`Recorded action for ${e}`,{type:c,toolName:t,target:u,success:o,totalActions:a.completedActions.length,totalToolMessages:a.toolCallMessages.length});}getToolCallMessages(e){let t=this.getSnapshot(e);return t?t.toolCallMessages:[]}hasToolCallHistory(e){let t=this.getSnapshot(e);return t!==void 0&&t.toolCallMessages.length>0}appendPartialOutput(e,t){let n=this.getOrCreateSnapshot(e);n.partialOutput+=t,n.updatedAt=Date.now(),n.partialOutput.length>5e3&&(n.partialOutput=n.partialOutput.slice(-5e3));}incrementRetryCount(e){let t=this.getOrCreateSnapshot(e);return t.retryCount++,t.updatedAt=Date.now(),t.retryCount}buildResumePrompt(e){let t=this.getSnapshot(e);if(!t||t.completedActions.length===0)return null;let n=["\u3010\u91CD\u8981\u63D0\u793A\u3011\u8FD9\u662F\u4E00\u4E2A\u91CD\u8BD5\u8BF7\u6C42\u3002\u5728\u4E4B\u524D\u7684\u5C1D\u8BD5\u4E2D\uFF0C\u4EE5\u4E0B\u64CD\u4F5C\u5DF2\u7ECF\u6210\u529F\u5B8C\u6210\uFF1A",""],r=this.groupActionsByType(t.completedActions);for(let[o,i]of Object.entries(r)){if(i.length===0)continue;let a=this.getTypeLabel(o);n.push(`## ${a} (${i.length} \u9879\u5DF2\u5B8C\u6210)`);for(let l of i){let c=l.success?"\u2713":"\u2717";n.push(`- ${c} ${l.target}: ${l.summary}`);}n.push("");}return n.push("\u8BF7\u4ECE\u4E0A\u6B21\u4E2D\u65AD\u7684\u5730\u65B9\u7EE7\u7EED\uFF0C\u4E0D\u8981\u91CD\u590D\u6267\u884C\u5DF2\u5B8C\u6210\u7684\u64CD\u4F5C\u3002"),n.push("\u5982\u679C\u67D0\u4E2A\u6587\u4EF6\u5DF2\u7ECF\u88AB\u7F16\u8F91\u8FC7\uFF0C\u8BF7\u68C0\u67E5\u5F53\u524D\u72B6\u6001\u800C\u4E0D\u662F\u518D\u6B21\u7F16\u8F91\u3002"),n.push(""),n.join(`
2743
2743
  `)}isActionCompleted(e,t,n){let r=this.getSnapshot(e);return r?r.completedActions.some(o=>o.toolName===t&&o.target===n&&o.success):false}getCompletedFileEdits(e){let t=this.getSnapshot(e);return t?t.completedActions.filter(n=>(n.type==="file_edit"||n.type==="file_write")&&n.success).map(n=>n.target):[]}clearSnapshot(e){this.snapshots.delete(e),p.debug("NODE_CONTEXT",`Cleared snapshot for ${e}`);}clearAll(){this.snapshots.clear(),p.debug("NODE_CONTEXT","Cleared all snapshots");}getStats(){let e=0;for(let t of this.snapshots.values())e+=t.completedActions.length;return {nodeCount:this.snapshots.size,totalActions:e}}extractTarget(e,t){if(t.file_path)return t.file_path;if(t.path)return t.path;if(t.file)return t.file;if(t.command){let n=String(t.command);return n.length>50?n.substring(0,50)+"...":n}return t.pattern?`pattern: ${t.pattern}`:t.query?`query: ${t.query}`:t.url?t.url:e}generateSummary(e,t,n,r){if(!r)return `\u5931\u8D25: ${n.substring(0,this.maxSummaryLength)}`;let o=e.toLowerCase();if(o.includes("edit")){let i=t.old_string||t.old_str||"",a=t.new_string||t.new_str||"";return i&&a?`\u66FF\u6362 "${this.truncate(i,30)}" \u2192 "${this.truncate(a,30)}"`:"\u5DF2\u7F16\u8F91"}return o.includes("write")||o.includes("create")?`\u5199\u5165 ${(t.content||"").split(`
2744
2744
  `).length} \u884C`:o.includes("read")||o.includes("view")?`\u8BFB\u53D6 ${n.split(`
2745
2745
  `).length} \u884C`:o==="bash"||o.includes("command")?`\u6267\u884C\u5B8C\u6210 (${n.split(`
2746
2746
  `).length} \u884C\u8F93\u51FA)`:o.includes("search")||o.includes("grep")||o.includes("glob")?`\u627E\u5230 ${n.split(`
2747
- `).filter(a=>a.trim()).length} \u4E2A\u7ED3\u679C`:this.truncate(n,this.maxSummaryLength)}truncate(e,t){return e.length<=t?e:e.substring(0,t-3)+"..."}groupActionsByType(e){let t={file_edit:[],file_write:[],file_read:[],command:[],search:[],web:[],other:[]};for(let n of e)t[n.type].push(n);return t}getTypeLabel(e){return {file_edit:"\u{1F4DD} \u6587\u4EF6\u7F16\u8F91",file_write:"\u{1F4C4} \u6587\u4EF6\u521B\u5EFA",file_read:"\u{1F4D6} \u6587\u4EF6\u8BFB\u53D6",command:"\u26A1 \u547D\u4EE4\u6267\u884C",search:"\u{1F50D} \u641C\u7D22\u64CD\u4F5C",web:"\u{1F310} \u7F51\u7EDC\u8BF7\u6C42",other:"\u{1F527} \u5176\u4ED6\u64CD\u4F5C"}[e]||e}};function Bp(){return new uc}Z();var CE={maxConcurrency:5,nodeTimeout:3e5,allowPartialFailure:true,retryCount:2,retryDelay:1e3},dc=class{config;llmCall;onEvent;onText;onRuntimeEvent;instanceManager;promptBuilder;nodeContextManager;constructor(e){this.config={...CE,...e.config},this.llmCall=e.llmCall,this.onEvent=e.onEvent,this.onText=e.onText,this.onRuntimeEvent=e.onRuntimeEvent,this.instanceManager=Lp({llmCall:this.llmCall,onEvent:this.onEvent,defaultTimeout:this.config.nodeTimeout}),this.promptBuilder=$p(),this.nodeContextManager=Bp();}async execute(e,t){let n=Date.now(),r=new Map,o=[],i=Op(e.id,t);e.state.phase="executing",e.state.startedAt=n,this.emitEvent({type:"execution_start",timestamp:n,data:{dagId:e.id}});try{for(let u=0;u<e.analysis.levels.length;u++){let d=e.analysis.levels[u];e.state.currentLevel=u,this.emitEvent({type:"level_start",timestamp:Date.now(),data:{dagId:e.id,level:u}});let m=await this.executeLevel(e,d,i,r,o),g=m.filter(h=>!h.success);if(g.length>0){if(!this.config.allowPartialFailure)throw new Error(`Level ${u} failed: ${g.map(h=>h.nodeId).join(", ")}`);for(let h of g)e.state.failedNodes.push(h.nodeId);}for(let h of m)h.success&&e.state.completedNodes.push(h.nodeId);this.emitEvent({type:"level_complete",timestamp:Date.now(),data:{dagId:e.id,level:u,progress:(u+1)/e.analysis.levels.length}});}let a=Date.now();e.state.phase="completed",e.state.completedAt=a;let l=this.collectFinalOutput(e,r,i),c={dagId:e.id,success:e.state.failedNodes.length===0,completedNodes:e.state.completedNodes.length,failedNodes:e.state.failedNodes.length,totalDuration:a-n,nodeResults:r,finalOutput:l,errors:o};return this.emitEvent({type:"execution_complete",timestamp:a,data:{dagId:e.id,progress:1}}),c}catch(a){let l=Date.now();e.state.phase="failed",e.state.completedAt=l;let c=a instanceof Error?a.message:String(a);return this.emitEvent({type:"execution_failed",timestamp:l,data:{dagId:e.id,error:c}}),{dagId:e.id,success:false,completedNodes:e.state.completedNodes.length,failedNodes:e.state.failedNodes.length,totalDuration:l-n,nodeResults:r,finalOutput:`\u6267\u884C\u5931\u8D25: ${c}`,errors:[...o,{nodeId:"dag",error:c}]}}}async executeLevel(e,t,n,r,o){let i=this.chunkArray(t,this.config.maxConcurrency),a=[];for(let l of i){let c=l.map(async d=>{let m=e.nodes.get(d);return m?this.executeNodeWithRetry(m,n,r,o):(o.push({nodeId:d,error:"\u8282\u70B9\u4E0D\u5B58\u5728"}),{nodeId:d,success:false})}),u=await Promise.all(c);a.push(...u);}return a}async executeNodeWithRetry(e,t,n,r){let o=null;for(let a=0;a<=this.config.retryCount;a++){a>0&&(this.nodeContextManager.incrementRetryCount(e.id),this.emitEvent({type:"node_retry",timestamp:Date.now(),data:{nodeId:e.id,role:e.task.role,retryCount:a,maxRetries:this.config.retryCount,error:o?.message??"\u672A\u77E5\u9519\u8BEF",completedActions:this.nodeContextManager.getSnapshot(e.id)?.completedActions.length??0}}),await this.sleep(this.config.retryDelay));try{let l=a>0?this.nodeContextManager.buildResumePrompt(e.id):null,c=a>0,u=await this.executeNode(e,t,l,c);return n.set(e.id,u),t.storeNodeOutput(e.id,e.io.outputKey,u.output),e.status="completed",this.nodeContextManager.clearSnapshot(e.id),this.emitEvent({type:"node_complete",timestamp:Date.now(),data:{nodeId:e.id,result:u}}),{nodeId:e.id,success:!0}}catch(l){o=l instanceof Error?l:new Error(String(l)),p.warn("DAG_EXECUTOR",`Node ${e.id} failed (attempt ${a+1}):`,{error:o.message,completedActions:this.nodeContextManager.getSnapshot(e.id)?.completedActions.length??0});}}e.status="failed";let i=o?.message??"\u672A\u77E5\u9519\u8BEF";return r.push({nodeId:e.id,error:i}),this.nodeContextManager.clearSnapshot(e.id),this.emitEvent({type:"node_failed",timestamp:Date.now(),data:{nodeId:e.id,error:i}}),{nodeId:e.id,success:false}}async executeNode(e,t,n,r){let o=Date.now();e.status="running",this.emitEvent({type:"node_start",timestamp:o,data:{nodeId:e.id,isRetry:!!n}});let i=t.resolveInputMapping(e.io.inputMapping),a=this.promptBuilder.build({taskDescription:e.task.description,role:e.task.role,resolvedInputs:i,contextSummary:t.getSummary()}),l=n?`${n}
2747
+ `).filter(a=>a.trim()).length} \u4E2A\u7ED3\u679C`:this.truncate(n,this.maxSummaryLength)}truncate(e,t){return e.length<=t?e:e.substring(0,t-3)+"..."}groupActionsByType(e){let t={file_edit:[],file_write:[],file_read:[],command:[],search:[],web:[],other:[]};for(let n of e)t[n.type].push(n);return t}getTypeLabel(e){return {file_edit:"\u{1F4DD} \u6587\u4EF6\u7F16\u8F91",file_write:"\u{1F4C4} \u6587\u4EF6\u521B\u5EFA",file_read:"\u{1F4D6} \u6587\u4EF6\u8BFB\u53D6",command:"\u26A1 \u547D\u4EE4\u6267\u884C",search:"\u{1F50D} \u641C\u7D22\u64CD\u4F5C",web:"\u{1F310} \u7F51\u7EDC\u8BF7\u6C42",other:"\u{1F527} \u5176\u4ED6\u64CD\u4F5C"}[e]||e}};function Bp(){return new uc}Z();var xE={maxConcurrency:5,nodeTimeout:3e5,allowPartialFailure:true,retryCount:2,retryDelay:1e3},dc=class{config;llmCall;onEvent;onText;onRuntimeEvent;instanceManager;promptBuilder;nodeContextManager;constructor(e){this.config={...xE,...e.config},this.llmCall=e.llmCall,this.onEvent=e.onEvent,this.onText=e.onText,this.onRuntimeEvent=e.onRuntimeEvent,this.instanceManager=Lp({llmCall:this.llmCall,onEvent:this.onEvent,defaultTimeout:this.config.nodeTimeout}),this.promptBuilder=$p(),this.nodeContextManager=Bp();}async execute(e,t){let n=Date.now(),r=new Map,o=[],i=Op(e.id,t);e.state.phase="executing",e.state.startedAt=n,this.emitEvent({type:"execution_start",timestamp:n,data:{dagId:e.id}});try{for(let u=0;u<e.analysis.levels.length;u++){let d=e.analysis.levels[u];e.state.currentLevel=u,this.emitEvent({type:"level_start",timestamp:Date.now(),data:{dagId:e.id,level:u}});let m=await this.executeLevel(e,d,i,r,o),g=m.filter(h=>!h.success);if(g.length>0){if(!this.config.allowPartialFailure)throw new Error(`Level ${u} failed: ${g.map(h=>h.nodeId).join(", ")}`);for(let h of g)e.state.failedNodes.push(h.nodeId);}for(let h of m)h.success&&e.state.completedNodes.push(h.nodeId);this.emitEvent({type:"level_complete",timestamp:Date.now(),data:{dagId:e.id,level:u,progress:(u+1)/e.analysis.levels.length}});}let a=Date.now();e.state.phase="completed",e.state.completedAt=a;let l=this.collectFinalOutput(e,r,i),c={dagId:e.id,success:e.state.failedNodes.length===0,completedNodes:e.state.completedNodes.length,failedNodes:e.state.failedNodes.length,totalDuration:a-n,nodeResults:r,finalOutput:l,errors:o};return this.emitEvent({type:"execution_complete",timestamp:a,data:{dagId:e.id,progress:1}}),c}catch(a){let l=Date.now();e.state.phase="failed",e.state.completedAt=l;let c=a instanceof Error?a.message:String(a);return this.emitEvent({type:"execution_failed",timestamp:l,data:{dagId:e.id,error:c}}),{dagId:e.id,success:false,completedNodes:e.state.completedNodes.length,failedNodes:e.state.failedNodes.length,totalDuration:l-n,nodeResults:r,finalOutput:`\u6267\u884C\u5931\u8D25: ${c}`,errors:[...o,{nodeId:"dag",error:c}]}}}async executeLevel(e,t,n,r,o){let i=this.chunkArray(t,this.config.maxConcurrency),a=[];for(let l of i){let c=l.map(async d=>{let m=e.nodes.get(d);return m?this.executeNodeWithRetry(m,n,r,o):(o.push({nodeId:d,error:"\u8282\u70B9\u4E0D\u5B58\u5728"}),{nodeId:d,success:false})}),u=await Promise.all(c);a.push(...u);}return a}async executeNodeWithRetry(e,t,n,r){let o=null;for(let a=0;a<=this.config.retryCount;a++){a>0&&(this.nodeContextManager.incrementRetryCount(e.id),this.emitEvent({type:"node_retry",timestamp:Date.now(),data:{nodeId:e.id,role:e.task.role,retryCount:a,maxRetries:this.config.retryCount,error:o?.message??"\u672A\u77E5\u9519\u8BEF",completedActions:this.nodeContextManager.getSnapshot(e.id)?.completedActions.length??0}}),await this.sleep(this.config.retryDelay));try{let l=a>0?this.nodeContextManager.buildResumePrompt(e.id):null,c=a>0,u=await this.executeNode(e,t,l,c);return n.set(e.id,u),t.storeNodeOutput(e.id,e.io.outputKey,u.output),e.status="completed",this.nodeContextManager.clearSnapshot(e.id),this.emitEvent({type:"node_complete",timestamp:Date.now(),data:{nodeId:e.id,result:u}}),{nodeId:e.id,success:!0}}catch(l){o=l instanceof Error?l:new Error(String(l)),p.warn("DAG_EXECUTOR",`Node ${e.id} failed (attempt ${a+1}):`,{error:o.message,completedActions:this.nodeContextManager.getSnapshot(e.id)?.completedActions.length??0});}}e.status="failed";let i=o?.message??"\u672A\u77E5\u9519\u8BEF";return r.push({nodeId:e.id,error:i}),this.nodeContextManager.clearSnapshot(e.id),this.emitEvent({type:"node_failed",timestamp:Date.now(),data:{nodeId:e.id,error:i}}),{nodeId:e.id,success:false}}async executeNode(e,t,n,r){let o=Date.now();e.status="running",this.emitEvent({type:"node_start",timestamp:o,data:{nodeId:e.id,isRetry:!!n}});let i=t.resolveInputMapping(e.io.inputMapping),a=this.promptBuilder.build({taskDescription:e.task.description,role:e.task.role,resolvedInputs:i,contextSummary:t.getSummary()}),l=n?`${n}
2748
2748
 
2749
2749
  ---
2750
2750
 
@@ -3181,7 +3181,7 @@ ${e.result.output}
3181
3181
  - \u4EFB\u52A1\u5206\u89E3\u65B9\u6848
3182
3182
  - \u6267\u884C\u8BA1\u5212
3183
3183
  - \u8FDB\u5EA6\u62A5\u544A
3184
- - \u98CE\u9669\u8BC4\u4F30`,priority:0},defaultCapabilities:["*"],defaultSpecializations:["task-decomposition","coordination","planning"]}},jp=class{llmCall;executionCapability;defaultHeartbeatInterval;defaultMaxConcurrentTasks;constructor(e){this.llmCall=e.llmCall,this.executionCapability=e.executionCapability,this.defaultHeartbeatInterval=e.defaultHeartbeatInterval??3e4,this.defaultMaxConcurrentTasks=e.defaultMaxConcurrentTasks??3;}createFromRole(e,t){let n=Up[e];if(!n)throw new Error(`Unknown role: ${e}`);let r={...n.role,systemPrompt:t?.systemPromptOverride??n.role.systemPrompt},o=[...n.defaultCapabilities,...t?.additionalCapabilities??[]],i=[...n.defaultSpecializations,...t?.additionalSpecializations??[]],a={role:r,capabilities:o,specializations:i,llmCall:this.llmCall,executionCapability:this.executionCapability,heartbeatInterval:t?.heartbeatInterval??this.defaultHeartbeatInterval,maxConcurrentTasks:t?.maxConcurrentTasks??this.defaultMaxConcurrentTasks,metadata:t?.metadata};return new _i(a)}createCustom(e){let n={role:{name:e.name,description:e.description,systemPrompt:e.systemPrompt,priority:e.priority??1},capabilities:e.capabilities,specializations:e.specializations,llmCall:this.llmCall,executionCapability:this.executionCapability,heartbeatInterval:e.options?.heartbeatInterval??this.defaultHeartbeatInterval,maxConcurrentTasks:e.options?.maxConcurrentTasks??this.defaultMaxConcurrentTasks,metadata:e.options?.metadata};return new _i(n)}createDefaultTeam(){let e=new Map,t=["coordinator","programmer","reviewer","tester"];for(let n of t)e.set(n,this.createFromRole(n));return e}createTeamForTask(e){let t=[],n=e.toLowerCase();return t.push(this.createFromRole("coordinator")),(n.includes("\u524D\u7AEF")||n.includes("ui")||n.includes("react"))&&t.push(this.createFromRole("frontend")),(n.includes("\u540E\u7AEF")||n.includes("api")||n.includes("backend"))&&t.push(this.createFromRole("backend")),(n.includes("\u5168\u6808")||n.includes("fullstack"))&&t.push(this.createFromRole("fullstack")),(n.includes("\u5B89\u5168")||n.includes("security")||n.includes("\u6F0F\u6D1E"))&&t.push(this.createFromRole("security")),(n.includes("\u6D4B\u8BD5")||n.includes("test"))&&t.push(this.createFromRole("tester")),(n.includes("\u90E8\u7F72")||n.includes("docker")||n.includes("ci"))&&t.push(this.createFromRole("devops")),(n.includes("\u67B6\u6784")||n.includes("\u8BBE\u8BA1")||n.includes("architecture"))&&t.push(this.createFromRole("architect")),(n.includes("\u6587\u6863")||n.includes("document"))&&t.push(this.createFromRole("documenter")),(n.includes("\u8C03\u8BD5")||n.includes("debug")||n.includes("bug"))&&t.push(this.createFromRole("debugger")),(n.includes("\u6570\u636E")||n.includes("data")||n.includes("\u5206\u6790"))&&t.push(this.createFromRole("data")),t.length===1&&t.push(this.createFromRole("programmer")),t.some(r=>r.role.name==="\u4EE3\u7801\u5BA1\u67E5\u5458")||t.push(this.createFromRole("reviewer")),t}static getPredefinedRoles(){return Object.values(Up)}static getRoleTemplate(e){return Up[e]}};function Rb(s){return new jp(s)}var IE=[{id:"typescript",name:"TypeScript",description:"TypeScript \u7F16\u7A0B",level:5,tags:["languages","javascript"]},{id:"javascript",name:"JavaScript",description:"JavaScript \u7F16\u7A0B",level:5,tags:["languages"]},{id:"python",name:"Python",description:"Python \u7F16\u7A0B",level:5,tags:["languages"]},{id:"go",name:"Go",description:"Go \u7F16\u7A0B",level:4,tags:["languages"]},{id:"rust",name:"Rust",description:"Rust \u7F16\u7A0B",level:4,tags:["languages"]},{id:"java",name:"Java",description:"Java \u7F16\u7A0B",level:4,tags:["languages"]},{id:"react",name:"React",description:"React \u524D\u7AEF\u5F00\u53D1",level:5,tags:["frameworks","frontend"]},{id:"vue",name:"Vue",description:"Vue \u524D\u7AEF\u5F00\u53D1",level:4,tags:["frameworks","frontend"]},{id:"nodejs",name:"Node.js",description:"Node.js \u540E\u7AEF\u5F00\u53D1",level:5,tags:["frameworks","backend"]},{id:"express",name:"Express",description:"Express Web \u6846\u67B6",level:4,tags:["frameworks","backend"]},{id:"nextjs",name:"Next.js",description:"Next.js \u5168\u6808\u6846\u67B6",level:4,tags:["frameworks","fullstack"]},{id:"coding",name:"\u7F16\u7A0B\u5B9E\u73B0",description:"\u4EE3\u7801\u7F16\u5199\u548C\u5B9E\u73B0",level:5,tags:["skills","core"]},{id:"debugging",name:"\u8C03\u8BD5",description:"\u95EE\u9898\u8C03\u8BD5\u548C\u4FEE\u590D",level:4,tags:["skills","core"]},{id:"refactoring",name:"\u91CD\u6784",description:"\u4EE3\u7801\u91CD\u6784\u548C\u4F18\u5316",level:4,tags:["skills","core"]},{id:"testing",name:"\u6D4B\u8BD5",description:"\u7F16\u5199\u548C\u6267\u884C\u6D4B\u8BD5",level:4,tags:["skills","quality"]},{id:"review",name:"\u4EE3\u7801\u8BC4\u5BA1",description:"\u4EE3\u7801\u5BA1\u67E5\u548C\u53CD\u9988",level:4,tags:["skills","quality"]},{id:"documentation",name:"\u6587\u6863",description:"\u7F16\u5199\u6280\u672F\u6587\u6863",level:3,tags:["skills","communication"]},{id:"architecture",name:"\u67B6\u6784\u8BBE\u8BA1",description:"\u7CFB\u7EDF\u67B6\u6784\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"design",name:"\u8BBE\u8BA1",description:"\u8F6F\u4EF6\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"api-design",name:"API \u8BBE\u8BA1",description:"API \u63A5\u53E3\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"database-design",name:"\u6570\u636E\u5E93\u8BBE\u8BA1",description:"\u6570\u636E\u5E93\u67B6\u6784\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"git",name:"Git",description:"Git \u7248\u672C\u63A7\u5236",level:5,tags:["tools","vcs"]},{id:"docker",name:"Docker",description:"Docker \u5BB9\u5668\u5316",level:4,tags:["tools","devops"]},{id:"ci-cd",name:"CI/CD",description:"\u6301\u7EED\u96C6\u6210\u548C\u90E8\u7F72",level:4,tags:["tools","devops"]},{id:"shell",name:"Shell",description:"Shell \u811A\u672C\u7F16\u5199",level:4,tags:["tools","scripting"]},{id:"security",name:"\u5B89\u5168",description:"\u5B89\u5168\u5F00\u53D1\u5B9E\u8DF5",level:4,tags:["domains","security"]},{id:"performance",name:"\u6027\u80FD\u4F18\u5316",description:"\u6027\u80FD\u5206\u6790\u548C\u4F18\u5316",level:4,tags:["domains","optimization"]},{id:"frontend",name:"\u524D\u7AEF\u5F00\u53D1",description:"\u524D\u7AEF\u5F00\u53D1\u7EFC\u5408",level:5,tags:["domains","web"]},{id:"backend",name:"\u540E\u7AEF\u5F00\u53D1",description:"\u540E\u7AEF\u5F00\u53D1\u7EFC\u5408",level:5,tags:["domains","web"]},{id:"fullstack",name:"\u5168\u6808\u5F00\u53D1",description:"\u5168\u6808\u5F00\u53D1\u7EFC\u5408",level:4,tags:["domains","web"]},{id:"devops",name:"DevOps",description:"DevOps \u5B9E\u8DF5",level:4,tags:["domains","operations"]},{id:"ai-ml",name:"AI/ML",description:"\u4EBA\u5DE5\u667A\u80FD\u548C\u673A\u5668\u5B66\u4E60",level:3,tags:["domains","ai"]}],Gp=class{capabilities=new Map;constructor(){for(let e of IE)this.capabilities.set(e.id,e);}getCapability(e){return this.capabilities.get(e)}registerCapability(e){this.capabilities.set(e.id,e);}listCapabilities(){return Array.from(this.capabilities.values())}listByCategory(e){return Array.from(this.capabilities.values()).filter(t=>t.tags.includes(e))}calculateMatch(e,t){if(e.length===0||t.includes("*"))return 1;let n=0,r=0;for(let a of e)if(t.includes(a)){n++;let l=this.capabilities.get(a);r+=l?l.level/5:.8;}else {let l=this.capabilities.get(a);if(l)for(let c of t){let u=this.capabilities.get(c);if(u&&this.hasCommonTag(l,u)){n+=.5,r+=.5*(u.level/5);break}}}let o=n/e.length,i=n>0?r/n:0;return o*.7+i*.3}hasCommonTag(e,t){return e.tags.some(n=>t.tags.includes(n))}inferCapabilities(e){let t=[],n=e.toLowerCase(),r={typescript:["typescript","ts",".ts"],javascript:["javascript","js",".js"],python:["python","py",".py"],react:["react","jsx","tsx","component"],nodejs:["node","express","backend"],testing:["test","jest","mocha","spec"],debugging:["debug","fix","bug","error"],refactoring:["refactor","optimize","improve"],documentation:["document","readme","docs"],security:["security","auth","encrypt","password"],database:["database","sql","mongodb","redis"],api:["api","rest","graphql","endpoint"]};for(let[o,i]of Object.entries(r))i.some(a=>n.includes(a))&&t.push(o);return t.length===0&&t.push("coding"),t}},Db=new Gp;var pc=class extends EventEmitter{agents=new Map;agentInstances=new Map;config;healthCheckTimer;started=false;constructor(e){super(),this.config={heartbeatTimeout:e?.heartbeatTimeout??9e4,healthCheckInterval:e?.healthCheckInterval??3e4,maxAgents:e?.maxAgents??100,autoCleanup:e?.autoCleanup??true};}start(){this.started||(this.started=true,this.config.autoCleanup&&this.startHealthCheck(),this.emit("started"));}stop(){this.started&&(this.started=false,this.stopHealthCheck(),this.emit("stopped"));}register(e){if(this.agents.size>=this.config.maxAgents)throw new Error(`Registry full: max ${this.config.maxAgents} agents`);let t=e.getRegistration();if(this.agents.has(t.id))throw new Error(`Agent already registered: ${t.id}`);return this.agents.set(t.id,t),this.agentInstances.set(t.id,e),this.setupAgentListeners(e),this.emit("agent_registered",{agentId:t.id,registration:t,timestamp:Date.now()}),t}registerMany(e){return e.map(t=>this.register(t))}unregister(e,t){if(!this.agents.get(e))return false;let r=this.agentInstances.get(e);return r&&(r.removeAllListeners(),r.stop()),this.agents.delete(e),this.agentInstances.delete(e),this.emit("agent_unregistered",{agentId:e,reason:t??"manual",timestamp:Date.now()}),true}updateStatus(e,t,n){let r=this.agents.get(e);if(!r)return;let o=r.status;r.status=t,this.emit("agent_status_changed",{agentId:e,previousStatus:o,newStatus:t,reason:n,timestamp:Date.now()});}handleHeartbeat(e){let t=this.agents.get(e.agentId);t&&(t.lastHeartbeat=e.timestamp,t.status=e.status,t.availability=e.availability,this.emit("agent_heartbeat",{...e,timestamp:Date.now()}));}get(e){return this.agents.get(e)}getInstance(e){return this.agentInstances.get(e)}getAll(){return Array.from(this.agents.values())}listAll(){return this.getAll()}getActive(){return this.getAll().filter(e=>e.status==="active"||e.status==="busy")}query(e){let t=this.getAll();if(e.status){let i=Array.isArray(e.status)?e.status:[e.status];t=t.filter(a=>i.includes(a.status));}e.minAvailability!==void 0&&(t=t.filter(i=>i.availability>=e.minAvailability)),e.minReputation!==void 0&&(t=t.filter(i=>i.reputation>=e.minReputation));let n=t.map(i=>{let a=this.calculateMatchDetails(i,e);return {agent:i,score:this.calculateOverallScore(a),details:a}}),r=e.requiredCapabilities?.length?n.filter(i=>i.details.capabilityMatch>=.5):n,o=e.sortBy??"match";return r.sort((i,a)=>{switch(o){case "availability":return a.agent.availability-i.agent.availability;case "reputation":return a.agent.reputation-i.agent.reputation;case "priority":return (i.agent.role.priority??1)-(a.agent.role.priority??1);default:return a.score-i.score}}),e.limit?r.slice(0,e.limit):r}findBestMatch(e){let t=this.query({status:["active","busy"],requiredCapabilities:e,minAvailability:.1,sortBy:"match",limit:1});if(t[0])return t[0];let n=this.getActive();if(n.length>0){n.sort((o,i)=>{let a=o.reputation*.6+o.availability*.4;return i.reputation*.6+i.availability*.4-a});let r=n[0];return {agent:r,score:.5,details:{capabilityMatch:.5,availabilityScore:r.availability,reputationScore:r.reputation/5,specializationBonus:0}}}}findMatches(e,t){let n=this.query({status:["active","busy"],requiredCapabilities:e,minAvailability:.1,sortBy:"match",limit:t});if(n.length>=t)return n;let r=t-n.length,o=new Set(n.map(a=>a.agent.id)),i=this.getActive().filter(a=>!o.has(a.id)).slice(0,r);for(let a of i)n.push({agent:a,score:.5,details:{capabilityMatch:.5,availabilityScore:a.availability,reputationScore:a.reputation/5,specializationBonus:0}});return n}groupByCapability(){let e=new Map;for(let t of this.agents.values())for(let n of t.capabilities)e.has(n)||e.set(n,[]),e.get(n).push(t);return e}getStats(){let e=this.getAll(),t={total:e.length,active:0,busy:0,paused:0,offline:0,avgAvailability:0,avgReputation:0},n=0,r=0;for(let o of e){switch(o.status){case "active":t.active++;break;case "busy":t.busy++;break;case "paused":t.paused++;break;case "offline":t.offline++;break}n+=o.availability,r+=o.reputation;}return e.length>0&&(t.avgAvailability=n/e.length,t.avgReputation=r/e.length),t}calculateMatchDetails(e,t){let n=t.requiredCapabilities?.length?Db.calculateMatch(t.requiredCapabilities,e.capabilities):1,r=e.availability,o=e.reputation/5,i=0;return t.specializations?.length&&e.specializations.length&&(i=t.specializations.filter(l=>e.specializations.includes(l)).length/t.specializations.length*.2),{capabilityMatch:n,availabilityScore:r,reputationScore:o,specializationBonus:i}}calculateOverallScore(e){return e.capabilityMatch*.4+e.availabilityScore*.25+e.reputationScore*.25+e.specializationBonus}setupAgentListeners(e){e.on("heartbeat",t=>{this.handleHeartbeat(t);}),e.on("status_changed",t=>{this.updateStatus(t.agentId,t.newStatus);});}startHealthCheck(){this.healthCheckTimer=setInterval(()=>{this.performHealthCheck();},this.config.healthCheckInterval);}stopHealthCheck(){this.healthCheckTimer&&(clearInterval(this.healthCheckTimer),this.healthCheckTimer=void 0);}performHealthCheck(){let e=Date.now(),t=[];for(let[n,r]of this.agents)e-r.lastHeartbeat>this.config.heartbeatTimeout&&(t.push(n),this.emit("agent_timeout",{agentId:n,lastHeartbeat:r.lastHeartbeat,timeout:this.config.heartbeatTimeout,timestamp:e}));if(this.config.autoCleanup&&t.length>0){for(let n of t)this.unregister(n,"heartbeat_timeout");this.emit("cleanup_performed",{removedAgents:t,timestamp:e});}}clear(){let e=Array.from(this.agents.keys());for(let t of e)this.unregister(t,"registry_cleared");}get size(){return this.agents.size}};function Nb(s){return new pc(s)}new pc;var mc=class extends EventEmitter{subscribers=new Map;messageHistory=[];messageQueue=[];config;stats={sent:0,received:0,processed:0,failed:0,byType:new Map,avgProcessingTime:0};processing=false;messageCounter=0;constructor(e){super(),this.config={maxQueueSize:e?.maxQueueSize??1e3,defaultTTL:e?.defaultTTL??6e4,enablePersistence:e?.enablePersistence??false,enableReplay:e?.enableReplay??true,maxRetries:e?.maxRetries??3,retryDelay:e?.retryDelay??1e3};}async publish(e,t,n){let r={id:this.generateMessageId(),type:e,from:n?.from??"system",to:n?.to??"broadcast",payload:t,priority:n?.priority??"normal",createdAt:Date.now(),expiresAt:Date.now()+(n?.ttl??this.config.defaultTTL),correlationId:n?.correlationId,replyTo:n?.replyTo,metadata:n?.metadata};return this.enqueue(r),this.stats.sent++,this.incrementTypeStats(e),this.emit("message_published",r),await this.processQueue(),r}async publishTaskBroadcast(e){return this.publish("task_broadcast",e,{from:"coordinator",to:"broadcast",priority:e.priority,ttl:e.bidDeadline-Date.now(),correlationId:e.id})}async publishBid(e){return this.publish("bid",e,{from:e.agentId,to:"coordinator",priority:"high",correlationId:e.taskId})}async publishNegotiationMessage(e){return this.publish("negotiation",e,{from:e.from,to:e.to,priority:"high",correlationId:e.sessionId})}subscribe(e){return this.subscribers.set(e.id,e),this.emit("subscriber_added",{subscriberId:e.id,types:e.types}),()=>this.unsubscribe(e.id)}subscribeToType(e,t,n){return this.subscribe({id:e,types:[t],callback:n})}subscribeForAgent(e,t){return this.subscribe({id:`agent-${e}`,types:["task_broadcast","bid_evaluation","negotiation","execution_command","system"],callback:t,filter:n=>n.to===e||n.to==="broadcast"})}unsubscribe(e){let t=this.subscribers.delete(e);return t&&this.emit("subscriber_removed",{subscriberId:e}),t}async request(e,t,n){let r=n?.timeout??3e4,o=await this.publish(e,t,{from:n?.from,to:n?.to,priority:"high"});return new Promise((i,a)=>{let l=setTimeout(()=>{this.unsubscribe(`response-${o.id}`),a(new Error(`Request timeout: ${o.id}`));},r);this.subscribe({id:`response-${o.id}`,types:[e],callback:c=>{c.replyTo===o.id&&(clearTimeout(l),this.unsubscribe(`response-${o.id}`),i(c));}});})}async reply(e,t,n){return this.publish(e.type,t,{from:e.to==="broadcast"?"system":e.to,to:e.from,priority:n?.priority??e.priority,correlationId:e.correlationId,replyTo:e.id})}getHistory(e){let t=[...this.messageHistory];return e?.type&&(t=t.filter(n=>n.type===e.type)),e?.from&&(t=t.filter(n=>n.from===e.from)),e?.to&&(t=t.filter(n=>n.to===e.to||n.to==="broadcast")),e?.correlationId&&(t=t.filter(n=>n.correlationId===e.correlationId)),e?.since&&(t=t.filter(n=>n.createdAt>=e.since)),e?.limit&&(t=t.slice(-e.limit)),t}async replay(e,t){if(!this.config.enableReplay)throw new Error("Replay is not enabled");let n=t?.filter?e.filter(t.filter):e;for(let r of n)await this.deliverMessage(r),t?.delay&&await new Promise(o=>setTimeout(o,t.delay));}getStats(){return {...this.stats,byType:new Map(this.stats.byType)}}clearQueue(){this.messageQueue=[],this.emit("queue_cleared");}clearHistory(){this.messageHistory=[],this.emit("history_cleared");}resetStats(){this.stats={sent:0,received:0,processed:0,failed:0,byType:new Map,avgProcessingTime:0};}enqueue(e){if(this.messageQueue.length>=this.config.maxQueueSize){let o=this.messageQueue.findIndex(i=>i.priority==="low");o>=0?this.messageQueue.splice(o,1):this.messageQueue.shift();}let t={critical:0,high:1,medium:2,normal:3,low:4},n=t[e.priority]??3,r=this.messageQueue.length;for(let o=0;o<this.messageQueue.length;o++)if((t[this.messageQueue[o].priority]??3)>n){r=o;break}this.messageQueue.splice(r,0,e);}async processQueue(){if(!this.processing){this.processing=true;try{for(;this.messageQueue.length>0;){let e=this.messageQueue.shift();if(e.expiresAt&&Date.now()>e.expiresAt){this.emit("message_expired",e);continue}await this.deliverMessage(e);}}finally{this.processing=false;}}}async deliverMessage(e){let t=Date.now();this.stats.received++,this.config.enableReplay&&(this.messageHistory.push(e),this.messageHistory.length>this.config.maxQueueSize*10&&(this.messageHistory=this.messageHistory.slice(-this.config.maxQueueSize*5)));let n=this.getMatchingSubscribers(e);n.sort((o,i)=>(o.priority??10)-(i.priority??10));for(let o of n)try{await o.callback(e),this.stats.processed++;}catch(i){this.stats.failed++,this.emit("delivery_error",{message:e,subscriberId:o.id,error:i});}let r=Date.now()-t;this.stats.avgProcessingTime=(this.stats.avgProcessingTime*(this.stats.received-1)+r)/this.stats.received,this.emit("message_delivered",{message:e,subscriberCount:n.length,processingTime:r});}getMatchingSubscribers(e){let t=[];for(let n of this.subscribers.values())n.types.includes(e.type)&&(n.filter&&!n.filter(e)||t.push(n));return t}generateMessageId(){return `msg-${Date.now()}-${++this.messageCounter}`}incrementTypeStats(e){let t=this.stats.byType.get(e)??0;this.stats.byType.set(e,t+1);}get subscriberCount(){return this.subscribers.size}get queueLength(){return this.messageQueue.length}};function Lb(s){return new mc(s)}new mc;Z();var PE={capabilityMatch:.3,availability:.15,reputation:.2,confidence:.25,efficiency:.1},Wp=class extends EventEmitter{registry;messageBus;config;weights;sessions=new Map;sessionCounter=0;constructor(e,t,n){super(),this.registry=e,this.messageBus=t,this.config={defaultTimeout:n?.defaultTimeout??3e4,minBids:n?.minBids??1,maxBids:n?.maxBids??10,selectCount:n?.selectCount??10,minAcceptScore:n?.minAcceptScore??25,parallelBidding:n?.parallelBidding??true,weights:n?.weights??PE},this.weights=this.config.weights,this.setupMessageSubscriptions();}async startBidding(e,t){let n=this.generateSessionId(),r=t?.timeout??this.config.defaultTimeout,o={id:n,task:e,bids:new Map,evaluations:new Map,status:"collecting",selectedAgents:[],createdAt:Date.now(),deadline:Date.now()+r};return this.sessions.set(n,o),this.emit("session_created",{sessionId:n,taskId:e.id,deadline:o.deadline}),t?.broadcast!==false&&await this.broadcastTask(e),this.waitForBids(o,{timeout:r,minBids:t?.minBids??this.config.minBids,selectCount:t?.selectCount??this.config.selectCount})}async requestBidsFromAgents(e,t,n){let r=this.generateSessionId(),o=n?.timeout??this.config.defaultTimeout,i={id:r,task:e,bids:new Map,evaluations:new Map,status:"collecting",selectedAgents:[],createdAt:Date.now(),deadline:Date.now()+o};this.sessions.set(r,i);let a=t.map(async l=>{let c=this.registry.getInstance(l);if(c)try{let u=await c.evaluateTask(e);n?.onAgentDecision?.({agentId:l,agentName:c.role.name,participate:u.participate,reason:u.reason,capabilityScore:u.capabilityScore,confidence:u.bid?.confidence}),this.emit("agent_bid_decision",{agentId:l,agentName:c.role.name,participate:u.participate,reason:u.reason,capabilityScore:u.capabilityScore,confidence:u.bid?.confidence}),u.participate&&u.bid&&await this.submitBid(r,u.bid);}catch(u){let d=u instanceof Error?u.message:String(u);n?.onAgentDecision?.({agentId:l,agentName:c.role.name,participate:false,reason:`\u8BC4\u4F30\u5931\u8D25: ${d}`}),this.emit("bid_request_failed",{agentId:l,error:u});}});if(this.config.parallelBidding)await Promise.all(a);else for(let l of a)await l;return this.finalizeBidding(i)}async submitBid(e,t){let n=this.sessions.get(e);return n?n.status!=="collecting"?(this.emit("bid_rejected",{bid:t,reason:"Session not collecting"}),false):Date.now()>n.deadline?(this.emit("bid_rejected",{bid:t,reason:"Deadline passed"}),false):n.bids.has(t.agentId)?(this.emit("bid_rejected",{bid:t,reason:"Already submitted"}),false):n.bids.size>=this.config.maxBids?(this.emit("bid_rejected",{bid:t,reason:"Max bids reached"}),false):(n.bids.set(t.agentId,t),this.emit("bid_received",{sessionId:e,bid:t,totalBids:n.bids.size}),true):(this.emit("bid_rejected",{bid:t,reason:"Session not found"}),false)}evaluateBid(e,t){let n=this.registry.get(e.agentId),r=this.calculateCapabilityMatch(t.requiredCapabilities,n?.capabilities??[]),o=n?.availability??0,i=(n?.reputation??3)/5,a=e.confidence,c=Math.min(1,3e5/Math.max(e.estimatedTime,1e3)),u=(r*this.weights.capabilityMatch+o*this.weights.availability+i*this.weights.reputation+a*this.weights.confidence+c*this.weights.efficiency)*100;return {bid:e,score:u,breakdown:{capabilityMatch:r*25,availabilityScore:o*25,reputationScore:i*25,confidenceScore:a*25,efficiencyScore:c*10},selected:false,rank:0}}evaluateAllBids(e){e.status="evaluating";let t=[];for(let n of e.bids.values()){let r=this.evaluateBid(n,e.task);t.push(r),e.evaluations.set(n.agentId,r);}return t.sort((n,r)=>r.score-n.score),t.forEach((n,r)=>{n.rank=r+1;}),this.emit("bids_evaluated",{sessionId:e.id,evaluations:t}),t}selectAgents(e,t,n){e.status="selecting";let r=t.filter(a=>a.score>=this.config.minAcceptScore);p.debug("BIDDING",`selectAgents: ${r.length}/${t.length} qualified (minScore=${this.config.minAcceptScore}, selectCount=${n})`);let o=r.slice(0,n);for(let a of o)a.selected=true;let i=o.map(a=>a.bid.agentId);return e.selectedAgents=i,this.emit("agents_selected",{sessionId:e.id,selectedAgents:i,evaluations:o}),i}cancelSession(e,t){let n=this.sessions.get(e);return n?(n.timer&&clearTimeout(n.timer),n.status="cancelled",n.completedAt=Date.now(),this.emit("session_cancelled",{sessionId:e,reason:t,bidsReceived:n.bids.size}),this.sessions.delete(e),true):false}getSession(e){return this.sessions.get(e)}get activeSessionCount(){return this.sessions.size}async broadcastTask(e){await this.messageBus.publishTaskBroadcast(e),this.emit("task_broadcasted",{taskId:e.id,requiredCapabilities:e.requiredCapabilities});}waitForBids(e,t){return new Promise(n=>{let r=()=>{e.bids.size>=this.config.maxBids&&(e.timer&&clearTimeout(e.timer),n(this.finalizeBidding(e,t.selectCount)));},o=i=>{i.sessionId===e.id&&r();};this.on("bid_received",o),e.timer=setTimeout(()=>{this.off("bid_received",o),e.bids.size<t.minBids?(e.status="timeout",e.completedAt=Date.now(),n({sessionId:e.id,taskId:e.task.id,success:false,selectedAgents:[],bids:Array.from(e.bids.values()),evaluations:[],failureReason:`Insufficient bids: ${e.bids.size}/${t.minBids}`,duration:Date.now()-e.createdAt}),this.sessions.delete(e.id)):n(this.finalizeBidding(e,t.selectCount));},t.timeout);})}finalizeBidding(e,t){let n=this.evaluateAllBids(e),r=t??this.config.selectCount,o=this.selectAgents(e,n,r);e.status="completed",e.completedAt=Date.now();let i={sessionId:e.id,taskId:e.task.id,success:o.length>0,selectedAgents:o,bids:Array.from(e.bids.values()),evaluations:n,duration:e.completedAt-e.createdAt};return o.length===0&&(i.failureReason="No qualified agents"),this.emit("bidding_completed",i),this.sessions.delete(e.id),i}calculateCapabilityMatch(e,t){if(e.length===0||t.includes("*"))return 1;let n=0;for(let r of e)t.includes(r)&&n++;return n/e.length}setupMessageSubscriptions(){this.messageBus.subscribeToType("bidding_engine","bid",async e=>{let t=e.payload;for(let n of this.sessions.values())if(n.task.id===t.taskId){await this.submitBid(n.id,t);break}});}generateSessionId(){return `bidding-${Date.now()}-${++this.sessionCounter}`}setWeights(e){this.weights={...this.weights,...e};}};function Ob(s,e,t){return new Wp(s,e,t)}var DE={maxRounds:5,roundTimeout:6e4,consensusThreshold:.7,minParticipants:2,allowLateJoin:false,autoGenerateProposal:true},Hp=class extends EventEmitter{registry;messageBus;config;sessions=new Map;sessionCounter=0;constructor(e,t,n){super(),this.registry=e,this.messageBus=t,this.config={...DE,...n},this.setupMessageSubscriptions();}setLlmCall(e){this.config.llmCall=e;}async startNegotiation(e,t,n,r){if(t.length<this.config.minParticipants)throw new Error(`Insufficient participants: ${t.length}/${this.config.minParticipants}`);let o=this.generateSessionId(),i=Date.now(),a={id:o,taskId:e.id,taskDescription:e.description??e.userRequest,participants:t,status:"active",currentRound:0,maxRounds:this.config.maxRounds,proposals:[],messages:[],votes:new Map,consensusThreshold:this.config.consensusThreshold,createdAt:i,config:{maxRounds:this.config.maxRounds,roundTimeout:this.config.roundTimeout,consensusThreshold:this.config.consensusThreshold,minParticipants:this.config.minParticipants,allowLateJoin:this.config.allowLateJoin}};this.sessions.set(o,a),this.emit("negotiation_started",{sessionId:o,taskId:e.id,participants:t});let l=r?.initialProposal;return !l&&this.config.autoGenerateProposal&&(l=await this.generateProposal(a,e,n)),l&&(a.proposals.push(l),a.currentProposal=l,this.emit("proposal_submitted",{sessionId:o,proposal:l})),a}async conductRound(e){let t=this.sessions.get(e);if(!t)throw new Error(`Session not found: ${e}`);t.currentRound++,this.emit("round_started",{sessionId:e,round:t.currentRound});let n=[];for(let i of t.participants){let a=this.registry.getInstance(i);if(!(!a||!t.currentProposal))try{let l=await a.participateInNegotiation(e,t.currentProposal,{taskDescription:t.taskDescription??t.taskId,otherParticipants:t.participants});l.round=t.currentRound,n.push(l),t.messages.push(l),this.emit("message_received",{sessionId:e,message:l});}catch(l){this.emit("participant_error",{sessionId:e,participantId:i,error:l});}}let r=this.analyzeRoundMessages(n);if(r.hasConcerns&&t.currentProposal&&this.config.llmCall){let i=await this.refineProposal(t,t.currentProposal,r.concerns,r.suggestions);i&&(t.currentProposal=i,t.proposals.push(i),this.emit("proposal_updated",{sessionId:e,proposal:i}));}let o=this.checkConsensus(n);return this.emit("round_completed",{sessionId:e,round:t.currentRound,messageCount:n.length,consensusReached:o}),{round:t.currentRound,messages:n,consensusReached:o}}async startVoting(e){let t=this.sessions.get(e);if(!t||!t.currentProposal)throw new Error(`Session or proposal not found: ${e}`);this.emit("voting_started",{sessionId:e,proposalId:t.currentProposal.id});let n=new Map;for(let o of t.participants){let i=t.messages.filter(a=>a.from===o).pop();i?.data?.vote?n.set(o,i.data.vote):n.set(o,"abstain"),this.emit("vote_cast",{sessionId:e,agentId:o,vote:n.get(o)});}t.votes=n;let r=this.calculateVotingResult(t,n);return this.emit("voting_completed",{sessionId:e,result:r}),r}async runFullNegotiation(e,t,n){let r=Date.now(),o=await this.startNegotiation(e,t,n),i=false;for(;o.currentRound<o.maxRounds&&!i&&(i=(await this.conductRound(o.id)).consensusReached,!i);)await new Promise(d=>setTimeout(d,1e3));let a=await this.startVoting(o.id);a.approved?(o.status="completed",o.consensusProposal=o.currentProposal,this.emit("consensus_reached",{sessionId:o.id,proposal:o.currentProposal})):(o.status="failed",this.emit("negotiation_failed",{sessionId:o.id,reason:"Voting rejected",rounds:o.currentRound})),o.completedAt=Date.now();let l=o,c=o.messages.length;return this.sessions.delete(o.id),{success:a.approved,proposal:a.approved?o.currentProposal:void 0,result:a,rounds:o.currentRound,duration:Date.now()-r,session:l,messageCount:c}}async generateProposal(e,t,n){let r=`proposal-${e.id}-${e.proposals.length+1}`,o=[],i=[[]];for(let l=0;l<n.length;l++){let c=n[l],u=`subtask-${l+1}`;o.push({id:u,description:`\u5B50\u4EFB\u52A1 ${l+1}: ${c.proposedApproach}`,assignedAgent:c.agentId,estimatedTime:c.estimatedTime,estimatedTokens:c.resourceRequirements.estimatedTokens,dependencies:l>0?[`subtask-${l}`]:[],priority:1}),o[l].dependencies.length===0?i[0].push(u):(i[1]||(i[1]=[]),i[1].push(u));}return {id:r,sessionId:e.id,proposer:"system",version:1,subtasks:o,executionLevels:i,estimatedTotalTime:o.reduce((l,c)=>l+c.estimatedTime,0),estimatedTotalTokens:o.reduce((l,c)=>l+c.estimatedTokens,0),risks:[],createdAt:Date.now()}}async refineProposal(e,t,n,r){if(!this.config.llmCall)return null;let o=`
3184
+ - \u98CE\u9669\u8BC4\u4F30`,priority:0},defaultCapabilities:["*"],defaultSpecializations:["task-decomposition","coordination","planning"]}},jp=class{llmCall;executionCapability;defaultHeartbeatInterval;defaultMaxConcurrentTasks;constructor(e){this.llmCall=e.llmCall,this.executionCapability=e.executionCapability,this.defaultHeartbeatInterval=e.defaultHeartbeatInterval??3e4,this.defaultMaxConcurrentTasks=e.defaultMaxConcurrentTasks??3;}createFromRole(e,t){let n=Up[e];if(!n)throw new Error(`Unknown role: ${e}`);let r={...n.role,systemPrompt:t?.systemPromptOverride??n.role.systemPrompt},o=[...n.defaultCapabilities,...t?.additionalCapabilities??[]],i=[...n.defaultSpecializations,...t?.additionalSpecializations??[]],a={role:r,capabilities:o,specializations:i,llmCall:this.llmCall,executionCapability:this.executionCapability,heartbeatInterval:t?.heartbeatInterval??this.defaultHeartbeatInterval,maxConcurrentTasks:t?.maxConcurrentTasks??this.defaultMaxConcurrentTasks,metadata:t?.metadata};return new _i(a)}createCustom(e){let n={role:{name:e.name,description:e.description,systemPrompt:e.systemPrompt,priority:e.priority??1},capabilities:e.capabilities,specializations:e.specializations,llmCall:this.llmCall,executionCapability:this.executionCapability,heartbeatInterval:e.options?.heartbeatInterval??this.defaultHeartbeatInterval,maxConcurrentTasks:e.options?.maxConcurrentTasks??this.defaultMaxConcurrentTasks,metadata:e.options?.metadata};return new _i(n)}createDefaultTeam(){let e=new Map,t=["coordinator","programmer","reviewer","tester"];for(let n of t)e.set(n,this.createFromRole(n));return e}createTeamForTask(e){let t=[],n=e.toLowerCase();return t.push(this.createFromRole("coordinator")),(n.includes("\u524D\u7AEF")||n.includes("ui")||n.includes("react"))&&t.push(this.createFromRole("frontend")),(n.includes("\u540E\u7AEF")||n.includes("api")||n.includes("backend"))&&t.push(this.createFromRole("backend")),(n.includes("\u5168\u6808")||n.includes("fullstack"))&&t.push(this.createFromRole("fullstack")),(n.includes("\u5B89\u5168")||n.includes("security")||n.includes("\u6F0F\u6D1E"))&&t.push(this.createFromRole("security")),(n.includes("\u6D4B\u8BD5")||n.includes("test"))&&t.push(this.createFromRole("tester")),(n.includes("\u90E8\u7F72")||n.includes("docker")||n.includes("ci"))&&t.push(this.createFromRole("devops")),(n.includes("\u67B6\u6784")||n.includes("\u8BBE\u8BA1")||n.includes("architecture"))&&t.push(this.createFromRole("architect")),(n.includes("\u6587\u6863")||n.includes("document"))&&t.push(this.createFromRole("documenter")),(n.includes("\u8C03\u8BD5")||n.includes("debug")||n.includes("bug"))&&t.push(this.createFromRole("debugger")),(n.includes("\u6570\u636E")||n.includes("data")||n.includes("\u5206\u6790"))&&t.push(this.createFromRole("data")),t.length===1&&t.push(this.createFromRole("programmer")),t.some(r=>r.role.name==="\u4EE3\u7801\u5BA1\u67E5\u5458")||t.push(this.createFromRole("reviewer")),t}static getPredefinedRoles(){return Object.values(Up)}static getRoleTemplate(e){return Up[e]}};function Rb(s){return new jp(s)}var EE=[{id:"typescript",name:"TypeScript",description:"TypeScript \u7F16\u7A0B",level:5,tags:["languages","javascript"]},{id:"javascript",name:"JavaScript",description:"JavaScript \u7F16\u7A0B",level:5,tags:["languages"]},{id:"python",name:"Python",description:"Python \u7F16\u7A0B",level:5,tags:["languages"]},{id:"go",name:"Go",description:"Go \u7F16\u7A0B",level:4,tags:["languages"]},{id:"rust",name:"Rust",description:"Rust \u7F16\u7A0B",level:4,tags:["languages"]},{id:"java",name:"Java",description:"Java \u7F16\u7A0B",level:4,tags:["languages"]},{id:"react",name:"React",description:"React \u524D\u7AEF\u5F00\u53D1",level:5,tags:["frameworks","frontend"]},{id:"vue",name:"Vue",description:"Vue \u524D\u7AEF\u5F00\u53D1",level:4,tags:["frameworks","frontend"]},{id:"nodejs",name:"Node.js",description:"Node.js \u540E\u7AEF\u5F00\u53D1",level:5,tags:["frameworks","backend"]},{id:"express",name:"Express",description:"Express Web \u6846\u67B6",level:4,tags:["frameworks","backend"]},{id:"nextjs",name:"Next.js",description:"Next.js \u5168\u6808\u6846\u67B6",level:4,tags:["frameworks","fullstack"]},{id:"coding",name:"\u7F16\u7A0B\u5B9E\u73B0",description:"\u4EE3\u7801\u7F16\u5199\u548C\u5B9E\u73B0",level:5,tags:["skills","core"]},{id:"debugging",name:"\u8C03\u8BD5",description:"\u95EE\u9898\u8C03\u8BD5\u548C\u4FEE\u590D",level:4,tags:["skills","core"]},{id:"refactoring",name:"\u91CD\u6784",description:"\u4EE3\u7801\u91CD\u6784\u548C\u4F18\u5316",level:4,tags:["skills","core"]},{id:"testing",name:"\u6D4B\u8BD5",description:"\u7F16\u5199\u548C\u6267\u884C\u6D4B\u8BD5",level:4,tags:["skills","quality"]},{id:"review",name:"\u4EE3\u7801\u8BC4\u5BA1",description:"\u4EE3\u7801\u5BA1\u67E5\u548C\u53CD\u9988",level:4,tags:["skills","quality"]},{id:"documentation",name:"\u6587\u6863",description:"\u7F16\u5199\u6280\u672F\u6587\u6863",level:3,tags:["skills","communication"]},{id:"architecture",name:"\u67B6\u6784\u8BBE\u8BA1",description:"\u7CFB\u7EDF\u67B6\u6784\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"design",name:"\u8BBE\u8BA1",description:"\u8F6F\u4EF6\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"api-design",name:"API \u8BBE\u8BA1",description:"API \u63A5\u53E3\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"database-design",name:"\u6570\u636E\u5E93\u8BBE\u8BA1",description:"\u6570\u636E\u5E93\u67B6\u6784\u8BBE\u8BA1",level:4,tags:["skills","design"]},{id:"git",name:"Git",description:"Git \u7248\u672C\u63A7\u5236",level:5,tags:["tools","vcs"]},{id:"docker",name:"Docker",description:"Docker \u5BB9\u5668\u5316",level:4,tags:["tools","devops"]},{id:"ci-cd",name:"CI/CD",description:"\u6301\u7EED\u96C6\u6210\u548C\u90E8\u7F72",level:4,tags:["tools","devops"]},{id:"shell",name:"Shell",description:"Shell \u811A\u672C\u7F16\u5199",level:4,tags:["tools","scripting"]},{id:"security",name:"\u5B89\u5168",description:"\u5B89\u5168\u5F00\u53D1\u5B9E\u8DF5",level:4,tags:["domains","security"]},{id:"performance",name:"\u6027\u80FD\u4F18\u5316",description:"\u6027\u80FD\u5206\u6790\u548C\u4F18\u5316",level:4,tags:["domains","optimization"]},{id:"frontend",name:"\u524D\u7AEF\u5F00\u53D1",description:"\u524D\u7AEF\u5F00\u53D1\u7EFC\u5408",level:5,tags:["domains","web"]},{id:"backend",name:"\u540E\u7AEF\u5F00\u53D1",description:"\u540E\u7AEF\u5F00\u53D1\u7EFC\u5408",level:5,tags:["domains","web"]},{id:"fullstack",name:"\u5168\u6808\u5F00\u53D1",description:"\u5168\u6808\u5F00\u53D1\u7EFC\u5408",level:4,tags:["domains","web"]},{id:"devops",name:"DevOps",description:"DevOps \u5B9E\u8DF5",level:4,tags:["domains","operations"]},{id:"ai-ml",name:"AI/ML",description:"\u4EBA\u5DE5\u667A\u80FD\u548C\u673A\u5668\u5B66\u4E60",level:3,tags:["domains","ai"]}],Gp=class{capabilities=new Map;constructor(){for(let e of EE)this.capabilities.set(e.id,e);}getCapability(e){return this.capabilities.get(e)}registerCapability(e){this.capabilities.set(e.id,e);}listCapabilities(){return Array.from(this.capabilities.values())}listByCategory(e){return Array.from(this.capabilities.values()).filter(t=>t.tags.includes(e))}calculateMatch(e,t){if(e.length===0||t.includes("*"))return 1;let n=0,r=0;for(let a of e)if(t.includes(a)){n++;let l=this.capabilities.get(a);r+=l?l.level/5:.8;}else {let l=this.capabilities.get(a);if(l)for(let c of t){let u=this.capabilities.get(c);if(u&&this.hasCommonTag(l,u)){n+=.5,r+=.5*(u.level/5);break}}}let o=n/e.length,i=n>0?r/n:0;return o*.7+i*.3}hasCommonTag(e,t){return e.tags.some(n=>t.tags.includes(n))}inferCapabilities(e){let t=[],n=e.toLowerCase(),r={typescript:["typescript","ts",".ts"],javascript:["javascript","js",".js"],python:["python","py",".py"],react:["react","jsx","tsx","component"],nodejs:["node","express","backend"],testing:["test","jest","mocha","spec"],debugging:["debug","fix","bug","error"],refactoring:["refactor","optimize","improve"],documentation:["document","readme","docs"],security:["security","auth","encrypt","password"],database:["database","sql","mongodb","redis"],api:["api","rest","graphql","endpoint"]};for(let[o,i]of Object.entries(r))i.some(a=>n.includes(a))&&t.push(o);return t.length===0&&t.push("coding"),t}},Db=new Gp;var pc=class extends EventEmitter{agents=new Map;agentInstances=new Map;config;healthCheckTimer;started=false;constructor(e){super(),this.config={heartbeatTimeout:e?.heartbeatTimeout??9e4,healthCheckInterval:e?.healthCheckInterval??3e4,maxAgents:e?.maxAgents??100,autoCleanup:e?.autoCleanup??true};}start(){this.started||(this.started=true,this.config.autoCleanup&&this.startHealthCheck(),this.emit("started"));}stop(){this.started&&(this.started=false,this.stopHealthCheck(),this.emit("stopped"));}register(e){if(this.agents.size>=this.config.maxAgents)throw new Error(`Registry full: max ${this.config.maxAgents} agents`);let t=e.getRegistration();if(this.agents.has(t.id))throw new Error(`Agent already registered: ${t.id}`);return this.agents.set(t.id,t),this.agentInstances.set(t.id,e),this.setupAgentListeners(e),this.emit("agent_registered",{agentId:t.id,registration:t,timestamp:Date.now()}),t}registerMany(e){return e.map(t=>this.register(t))}unregister(e,t){if(!this.agents.get(e))return false;let r=this.agentInstances.get(e);return r&&(r.removeAllListeners(),r.stop()),this.agents.delete(e),this.agentInstances.delete(e),this.emit("agent_unregistered",{agentId:e,reason:t??"manual",timestamp:Date.now()}),true}updateStatus(e,t,n){let r=this.agents.get(e);if(!r)return;let o=r.status;r.status=t,this.emit("agent_status_changed",{agentId:e,previousStatus:o,newStatus:t,reason:n,timestamp:Date.now()});}handleHeartbeat(e){let t=this.agents.get(e.agentId);t&&(t.lastHeartbeat=e.timestamp,t.status=e.status,t.availability=e.availability,this.emit("agent_heartbeat",{...e,timestamp:Date.now()}));}get(e){return this.agents.get(e)}getInstance(e){return this.agentInstances.get(e)}getAll(){return Array.from(this.agents.values())}listAll(){return this.getAll()}getActive(){return this.getAll().filter(e=>e.status==="active"||e.status==="busy")}query(e){let t=this.getAll();if(e.status){let i=Array.isArray(e.status)?e.status:[e.status];t=t.filter(a=>i.includes(a.status));}e.minAvailability!==void 0&&(t=t.filter(i=>i.availability>=e.minAvailability)),e.minReputation!==void 0&&(t=t.filter(i=>i.reputation>=e.minReputation));let n=t.map(i=>{let a=this.calculateMatchDetails(i,e);return {agent:i,score:this.calculateOverallScore(a),details:a}}),r=e.requiredCapabilities?.length?n.filter(i=>i.details.capabilityMatch>=.5):n,o=e.sortBy??"match";return r.sort((i,a)=>{switch(o){case "availability":return a.agent.availability-i.agent.availability;case "reputation":return a.agent.reputation-i.agent.reputation;case "priority":return (i.agent.role.priority??1)-(a.agent.role.priority??1);default:return a.score-i.score}}),e.limit?r.slice(0,e.limit):r}findBestMatch(e){let t=this.query({status:["active","busy"],requiredCapabilities:e,minAvailability:.1,sortBy:"match",limit:1});if(t[0])return t[0];let n=this.getActive();if(n.length>0){n.sort((o,i)=>{let a=o.reputation*.6+o.availability*.4;return i.reputation*.6+i.availability*.4-a});let r=n[0];return {agent:r,score:.5,details:{capabilityMatch:.5,availabilityScore:r.availability,reputationScore:r.reputation/5,specializationBonus:0}}}}findMatches(e,t){let n=this.query({status:["active","busy"],requiredCapabilities:e,minAvailability:.1,sortBy:"match",limit:t});if(n.length>=t)return n;let r=t-n.length,o=new Set(n.map(a=>a.agent.id)),i=this.getActive().filter(a=>!o.has(a.id)).slice(0,r);for(let a of i)n.push({agent:a,score:.5,details:{capabilityMatch:.5,availabilityScore:a.availability,reputationScore:a.reputation/5,specializationBonus:0}});return n}groupByCapability(){let e=new Map;for(let t of this.agents.values())for(let n of t.capabilities)e.has(n)||e.set(n,[]),e.get(n).push(t);return e}getStats(){let e=this.getAll(),t={total:e.length,active:0,busy:0,paused:0,offline:0,avgAvailability:0,avgReputation:0},n=0,r=0;for(let o of e){switch(o.status){case "active":t.active++;break;case "busy":t.busy++;break;case "paused":t.paused++;break;case "offline":t.offline++;break}n+=o.availability,r+=o.reputation;}return e.length>0&&(t.avgAvailability=n/e.length,t.avgReputation=r/e.length),t}calculateMatchDetails(e,t){let n=t.requiredCapabilities?.length?Db.calculateMatch(t.requiredCapabilities,e.capabilities):1,r=e.availability,o=e.reputation/5,i=0;return t.specializations?.length&&e.specializations.length&&(i=t.specializations.filter(l=>e.specializations.includes(l)).length/t.specializations.length*.2),{capabilityMatch:n,availabilityScore:r,reputationScore:o,specializationBonus:i}}calculateOverallScore(e){return e.capabilityMatch*.4+e.availabilityScore*.25+e.reputationScore*.25+e.specializationBonus}setupAgentListeners(e){e.on("heartbeat",t=>{this.handleHeartbeat(t);}),e.on("status_changed",t=>{this.updateStatus(t.agentId,t.newStatus);});}startHealthCheck(){this.healthCheckTimer=setInterval(()=>{this.performHealthCheck();},this.config.healthCheckInterval);}stopHealthCheck(){this.healthCheckTimer&&(clearInterval(this.healthCheckTimer),this.healthCheckTimer=void 0);}performHealthCheck(){let e=Date.now(),t=[];for(let[n,r]of this.agents)e-r.lastHeartbeat>this.config.heartbeatTimeout&&(t.push(n),this.emit("agent_timeout",{agentId:n,lastHeartbeat:r.lastHeartbeat,timeout:this.config.heartbeatTimeout,timestamp:e}));if(this.config.autoCleanup&&t.length>0){for(let n of t)this.unregister(n,"heartbeat_timeout");this.emit("cleanup_performed",{removedAgents:t,timestamp:e});}}clear(){let e=Array.from(this.agents.keys());for(let t of e)this.unregister(t,"registry_cleared");}get size(){return this.agents.size}};function Nb(s){return new pc(s)}new pc;var mc=class extends EventEmitter{subscribers=new Map;messageHistory=[];messageQueue=[];config;stats={sent:0,received:0,processed:0,failed:0,byType:new Map,avgProcessingTime:0};processing=false;messageCounter=0;constructor(e){super(),this.config={maxQueueSize:e?.maxQueueSize??1e3,defaultTTL:e?.defaultTTL??6e4,enablePersistence:e?.enablePersistence??false,enableReplay:e?.enableReplay??true,maxRetries:e?.maxRetries??3,retryDelay:e?.retryDelay??1e3};}async publish(e,t,n){let r={id:this.generateMessageId(),type:e,from:n?.from??"system",to:n?.to??"broadcast",payload:t,priority:n?.priority??"normal",createdAt:Date.now(),expiresAt:Date.now()+(n?.ttl??this.config.defaultTTL),correlationId:n?.correlationId,replyTo:n?.replyTo,metadata:n?.metadata};return this.enqueue(r),this.stats.sent++,this.incrementTypeStats(e),this.emit("message_published",r),await this.processQueue(),r}async publishTaskBroadcast(e){return this.publish("task_broadcast",e,{from:"coordinator",to:"broadcast",priority:e.priority,ttl:e.bidDeadline-Date.now(),correlationId:e.id})}async publishBid(e){return this.publish("bid",e,{from:e.agentId,to:"coordinator",priority:"high",correlationId:e.taskId})}async publishNegotiationMessage(e){return this.publish("negotiation",e,{from:e.from,to:e.to,priority:"high",correlationId:e.sessionId})}subscribe(e){return this.subscribers.set(e.id,e),this.emit("subscriber_added",{subscriberId:e.id,types:e.types}),()=>this.unsubscribe(e.id)}subscribeToType(e,t,n){return this.subscribe({id:e,types:[t],callback:n})}subscribeForAgent(e,t){return this.subscribe({id:`agent-${e}`,types:["task_broadcast","bid_evaluation","negotiation","execution_command","system"],callback:t,filter:n=>n.to===e||n.to==="broadcast"})}unsubscribe(e){let t=this.subscribers.delete(e);return t&&this.emit("subscriber_removed",{subscriberId:e}),t}async request(e,t,n){let r=n?.timeout??3e4,o=await this.publish(e,t,{from:n?.from,to:n?.to,priority:"high"});return new Promise((i,a)=>{let l=setTimeout(()=>{this.unsubscribe(`response-${o.id}`),a(new Error(`Request timeout: ${o.id}`));},r);this.subscribe({id:`response-${o.id}`,types:[e],callback:c=>{c.replyTo===o.id&&(clearTimeout(l),this.unsubscribe(`response-${o.id}`),i(c));}});})}async reply(e,t,n){return this.publish(e.type,t,{from:e.to==="broadcast"?"system":e.to,to:e.from,priority:n?.priority??e.priority,correlationId:e.correlationId,replyTo:e.id})}getHistory(e){let t=[...this.messageHistory];return e?.type&&(t=t.filter(n=>n.type===e.type)),e?.from&&(t=t.filter(n=>n.from===e.from)),e?.to&&(t=t.filter(n=>n.to===e.to||n.to==="broadcast")),e?.correlationId&&(t=t.filter(n=>n.correlationId===e.correlationId)),e?.since&&(t=t.filter(n=>n.createdAt>=e.since)),e?.limit&&(t=t.slice(-e.limit)),t}async replay(e,t){if(!this.config.enableReplay)throw new Error("Replay is not enabled");let n=t?.filter?e.filter(t.filter):e;for(let r of n)await this.deliverMessage(r),t?.delay&&await new Promise(o=>setTimeout(o,t.delay));}getStats(){return {...this.stats,byType:new Map(this.stats.byType)}}clearQueue(){this.messageQueue=[],this.emit("queue_cleared");}clearHistory(){this.messageHistory=[],this.emit("history_cleared");}resetStats(){this.stats={sent:0,received:0,processed:0,failed:0,byType:new Map,avgProcessingTime:0};}enqueue(e){if(this.messageQueue.length>=this.config.maxQueueSize){let o=this.messageQueue.findIndex(i=>i.priority==="low");o>=0?this.messageQueue.splice(o,1):this.messageQueue.shift();}let t={critical:0,high:1,medium:2,normal:3,low:4},n=t[e.priority]??3,r=this.messageQueue.length;for(let o=0;o<this.messageQueue.length;o++)if((t[this.messageQueue[o].priority]??3)>n){r=o;break}this.messageQueue.splice(r,0,e);}async processQueue(){if(!this.processing){this.processing=true;try{for(;this.messageQueue.length>0;){let e=this.messageQueue.shift();if(e.expiresAt&&Date.now()>e.expiresAt){this.emit("message_expired",e);continue}await this.deliverMessage(e);}}finally{this.processing=false;}}}async deliverMessage(e){let t=Date.now();this.stats.received++,this.config.enableReplay&&(this.messageHistory.push(e),this.messageHistory.length>this.config.maxQueueSize*10&&(this.messageHistory=this.messageHistory.slice(-this.config.maxQueueSize*5)));let n=this.getMatchingSubscribers(e);n.sort((o,i)=>(o.priority??10)-(i.priority??10));for(let o of n)try{await o.callback(e),this.stats.processed++;}catch(i){this.stats.failed++,this.emit("delivery_error",{message:e,subscriberId:o.id,error:i});}let r=Date.now()-t;this.stats.avgProcessingTime=(this.stats.avgProcessingTime*(this.stats.received-1)+r)/this.stats.received,this.emit("message_delivered",{message:e,subscriberCount:n.length,processingTime:r});}getMatchingSubscribers(e){let t=[];for(let n of this.subscribers.values())n.types.includes(e.type)&&(n.filter&&!n.filter(e)||t.push(n));return t}generateMessageId(){return `msg-${Date.now()}-${++this.messageCounter}`}incrementTypeStats(e){let t=this.stats.byType.get(e)??0;this.stats.byType.set(e,t+1);}get subscriberCount(){return this.subscribers.size}get queueLength(){return this.messageQueue.length}};function Lb(s){return new mc(s)}new mc;Z();var RE={capabilityMatch:.3,availability:.15,reputation:.2,confidence:.25,efficiency:.1},Wp=class extends EventEmitter{registry;messageBus;config;weights;sessions=new Map;sessionCounter=0;constructor(e,t,n){super(),this.registry=e,this.messageBus=t,this.config={defaultTimeout:n?.defaultTimeout??3e4,minBids:n?.minBids??1,maxBids:n?.maxBids??10,selectCount:n?.selectCount??10,minAcceptScore:n?.minAcceptScore??25,parallelBidding:n?.parallelBidding??true,weights:n?.weights??RE},this.weights=this.config.weights,this.setupMessageSubscriptions();}async startBidding(e,t){let n=this.generateSessionId(),r=t?.timeout??this.config.defaultTimeout,o={id:n,task:e,bids:new Map,evaluations:new Map,status:"collecting",selectedAgents:[],createdAt:Date.now(),deadline:Date.now()+r};return this.sessions.set(n,o),this.emit("session_created",{sessionId:n,taskId:e.id,deadline:o.deadline}),t?.broadcast!==false&&await this.broadcastTask(e),this.waitForBids(o,{timeout:r,minBids:t?.minBids??this.config.minBids,selectCount:t?.selectCount??this.config.selectCount})}async requestBidsFromAgents(e,t,n){let r=this.generateSessionId(),o=n?.timeout??this.config.defaultTimeout,i={id:r,task:e,bids:new Map,evaluations:new Map,status:"collecting",selectedAgents:[],createdAt:Date.now(),deadline:Date.now()+o};this.sessions.set(r,i);let a=t.map(async l=>{let c=this.registry.getInstance(l);if(c)try{let u=await c.evaluateTask(e);n?.onAgentDecision?.({agentId:l,agentName:c.role.name,participate:u.participate,reason:u.reason,capabilityScore:u.capabilityScore,confidence:u.bid?.confidence}),this.emit("agent_bid_decision",{agentId:l,agentName:c.role.name,participate:u.participate,reason:u.reason,capabilityScore:u.capabilityScore,confidence:u.bid?.confidence}),u.participate&&u.bid&&await this.submitBid(r,u.bid);}catch(u){let d=u instanceof Error?u.message:String(u);n?.onAgentDecision?.({agentId:l,agentName:c.role.name,participate:false,reason:`\u8BC4\u4F30\u5931\u8D25: ${d}`}),this.emit("bid_request_failed",{agentId:l,error:u});}});if(this.config.parallelBidding)await Promise.all(a);else for(let l of a)await l;return this.finalizeBidding(i)}async submitBid(e,t){let n=this.sessions.get(e);return n?n.status!=="collecting"?(this.emit("bid_rejected",{bid:t,reason:"Session not collecting"}),false):Date.now()>n.deadline?(this.emit("bid_rejected",{bid:t,reason:"Deadline passed"}),false):n.bids.has(t.agentId)?(this.emit("bid_rejected",{bid:t,reason:"Already submitted"}),false):n.bids.size>=this.config.maxBids?(this.emit("bid_rejected",{bid:t,reason:"Max bids reached"}),false):(n.bids.set(t.agentId,t),this.emit("bid_received",{sessionId:e,bid:t,totalBids:n.bids.size}),true):(this.emit("bid_rejected",{bid:t,reason:"Session not found"}),false)}evaluateBid(e,t){let n=this.registry.get(e.agentId),r=this.calculateCapabilityMatch(t.requiredCapabilities,n?.capabilities??[]),o=n?.availability??0,i=(n?.reputation??3)/5,a=e.confidence,c=Math.min(1,3e5/Math.max(e.estimatedTime,1e3)),u=(r*this.weights.capabilityMatch+o*this.weights.availability+i*this.weights.reputation+a*this.weights.confidence+c*this.weights.efficiency)*100;return {bid:e,score:u,breakdown:{capabilityMatch:r*25,availabilityScore:o*25,reputationScore:i*25,confidenceScore:a*25,efficiencyScore:c*10},selected:false,rank:0}}evaluateAllBids(e){e.status="evaluating";let t=[];for(let n of e.bids.values()){let r=this.evaluateBid(n,e.task);t.push(r),e.evaluations.set(n.agentId,r);}return t.sort((n,r)=>r.score-n.score),t.forEach((n,r)=>{n.rank=r+1;}),this.emit("bids_evaluated",{sessionId:e.id,evaluations:t}),t}selectAgents(e,t,n){e.status="selecting";let r=t.filter(a=>a.score>=this.config.minAcceptScore);p.debug("BIDDING",`selectAgents: ${r.length}/${t.length} qualified (minScore=${this.config.minAcceptScore}, selectCount=${n})`);let o=r.slice(0,n);for(let a of o)a.selected=true;let i=o.map(a=>a.bid.agentId);return e.selectedAgents=i,this.emit("agents_selected",{sessionId:e.id,selectedAgents:i,evaluations:o}),i}cancelSession(e,t){let n=this.sessions.get(e);return n?(n.timer&&clearTimeout(n.timer),n.status="cancelled",n.completedAt=Date.now(),this.emit("session_cancelled",{sessionId:e,reason:t,bidsReceived:n.bids.size}),this.sessions.delete(e),true):false}getSession(e){return this.sessions.get(e)}get activeSessionCount(){return this.sessions.size}async broadcastTask(e){await this.messageBus.publishTaskBroadcast(e),this.emit("task_broadcasted",{taskId:e.id,requiredCapabilities:e.requiredCapabilities});}waitForBids(e,t){return new Promise(n=>{let r=()=>{e.bids.size>=this.config.maxBids&&(e.timer&&clearTimeout(e.timer),n(this.finalizeBidding(e,t.selectCount)));},o=i=>{i.sessionId===e.id&&r();};this.on("bid_received",o),e.timer=setTimeout(()=>{this.off("bid_received",o),e.bids.size<t.minBids?(e.status="timeout",e.completedAt=Date.now(),n({sessionId:e.id,taskId:e.task.id,success:false,selectedAgents:[],bids:Array.from(e.bids.values()),evaluations:[],failureReason:`Insufficient bids: ${e.bids.size}/${t.minBids}`,duration:Date.now()-e.createdAt}),this.sessions.delete(e.id)):n(this.finalizeBidding(e,t.selectCount));},t.timeout);})}finalizeBidding(e,t){let n=this.evaluateAllBids(e),r=t??this.config.selectCount,o=this.selectAgents(e,n,r);e.status="completed",e.completedAt=Date.now();let i={sessionId:e.id,taskId:e.task.id,success:o.length>0,selectedAgents:o,bids:Array.from(e.bids.values()),evaluations:n,duration:e.completedAt-e.createdAt};return o.length===0&&(i.failureReason="No qualified agents"),this.emit("bidding_completed",i),this.sessions.delete(e.id),i}calculateCapabilityMatch(e,t){if(e.length===0||t.includes("*"))return 1;let n=0;for(let r of e)t.includes(r)&&n++;return n/e.length}setupMessageSubscriptions(){this.messageBus.subscribeToType("bidding_engine","bid",async e=>{let t=e.payload;for(let n of this.sessions.values())if(n.task.id===t.taskId){await this.submitBid(n.id,t);break}});}generateSessionId(){return `bidding-${Date.now()}-${++this.sessionCounter}`}setWeights(e){this.weights={...this.weights,...e};}};function Ob(s,e,t){return new Wp(s,e,t)}var NE={maxRounds:5,roundTimeout:6e4,consensusThreshold:.7,minParticipants:2,allowLateJoin:false,autoGenerateProposal:true},Hp=class extends EventEmitter{registry;messageBus;config;sessions=new Map;sessionCounter=0;constructor(e,t,n){super(),this.registry=e,this.messageBus=t,this.config={...NE,...n},this.setupMessageSubscriptions();}setLlmCall(e){this.config.llmCall=e;}async startNegotiation(e,t,n,r){if(t.length<this.config.minParticipants)throw new Error(`Insufficient participants: ${t.length}/${this.config.minParticipants}`);let o=this.generateSessionId(),i=Date.now(),a={id:o,taskId:e.id,taskDescription:e.description??e.userRequest,participants:t,status:"active",currentRound:0,maxRounds:this.config.maxRounds,proposals:[],messages:[],votes:new Map,consensusThreshold:this.config.consensusThreshold,createdAt:i,config:{maxRounds:this.config.maxRounds,roundTimeout:this.config.roundTimeout,consensusThreshold:this.config.consensusThreshold,minParticipants:this.config.minParticipants,allowLateJoin:this.config.allowLateJoin}};this.sessions.set(o,a),this.emit("negotiation_started",{sessionId:o,taskId:e.id,participants:t});let l=r?.initialProposal;return !l&&this.config.autoGenerateProposal&&(l=await this.generateProposal(a,e,n)),l&&(a.proposals.push(l),a.currentProposal=l,this.emit("proposal_submitted",{sessionId:o,proposal:l})),a}async conductRound(e){let t=this.sessions.get(e);if(!t)throw new Error(`Session not found: ${e}`);t.currentRound++,this.emit("round_started",{sessionId:e,round:t.currentRound});let n=[];for(let i of t.participants){let a=this.registry.getInstance(i);if(!(!a||!t.currentProposal))try{let l=await a.participateInNegotiation(e,t.currentProposal,{taskDescription:t.taskDescription??t.taskId,otherParticipants:t.participants});l.round=t.currentRound,n.push(l),t.messages.push(l),this.emit("message_received",{sessionId:e,message:l});}catch(l){this.emit("participant_error",{sessionId:e,participantId:i,error:l});}}let r=this.analyzeRoundMessages(n);if(r.hasConcerns&&t.currentProposal&&this.config.llmCall){let i=await this.refineProposal(t,t.currentProposal,r.concerns,r.suggestions);i&&(t.currentProposal=i,t.proposals.push(i),this.emit("proposal_updated",{sessionId:e,proposal:i}));}let o=this.checkConsensus(n);return this.emit("round_completed",{sessionId:e,round:t.currentRound,messageCount:n.length,consensusReached:o}),{round:t.currentRound,messages:n,consensusReached:o}}async startVoting(e){let t=this.sessions.get(e);if(!t||!t.currentProposal)throw new Error(`Session or proposal not found: ${e}`);this.emit("voting_started",{sessionId:e,proposalId:t.currentProposal.id});let n=new Map;for(let o of t.participants){let i=t.messages.filter(a=>a.from===o).pop();i?.data?.vote?n.set(o,i.data.vote):n.set(o,"abstain"),this.emit("vote_cast",{sessionId:e,agentId:o,vote:n.get(o)});}t.votes=n;let r=this.calculateVotingResult(t,n);return this.emit("voting_completed",{sessionId:e,result:r}),r}async runFullNegotiation(e,t,n){let r=Date.now(),o=await this.startNegotiation(e,t,n),i=false;for(;o.currentRound<o.maxRounds&&!i&&(i=(await this.conductRound(o.id)).consensusReached,!i);)await new Promise(d=>setTimeout(d,1e3));let a=await this.startVoting(o.id);a.approved?(o.status="completed",o.consensusProposal=o.currentProposal,this.emit("consensus_reached",{sessionId:o.id,proposal:o.currentProposal})):(o.status="failed",this.emit("negotiation_failed",{sessionId:o.id,reason:"Voting rejected",rounds:o.currentRound})),o.completedAt=Date.now();let l=o,c=o.messages.length;return this.sessions.delete(o.id),{success:a.approved,proposal:a.approved?o.currentProposal:void 0,result:a,rounds:o.currentRound,duration:Date.now()-r,session:l,messageCount:c}}async generateProposal(e,t,n){let r=`proposal-${e.id}-${e.proposals.length+1}`,o=[],i=[[]];for(let l=0;l<n.length;l++){let c=n[l],u=`subtask-${l+1}`;o.push({id:u,description:`\u5B50\u4EFB\u52A1 ${l+1}: ${c.proposedApproach}`,assignedAgent:c.agentId,estimatedTime:c.estimatedTime,estimatedTokens:c.resourceRequirements.estimatedTokens,dependencies:l>0?[`subtask-${l}`]:[],priority:1}),o[l].dependencies.length===0?i[0].push(u):(i[1]||(i[1]=[]),i[1].push(u));}return {id:r,sessionId:e.id,proposer:"system",version:1,subtasks:o,executionLevels:i,estimatedTotalTime:o.reduce((l,c)=>l+c.estimatedTime,0),estimatedTotalTokens:o.reduce((l,c)=>l+c.estimatedTokens,0),risks:[],createdAt:Date.now()}}async refineProposal(e,t,n,r){if(!this.config.llmCall)return null;let o=`
3185
3185
  \u5F53\u524D\u63D0\u6848\uFF1A
3186
3186
  ${JSON.stringify(t,null,2)}
3187
3187
 
@@ -3194,7 +3194,7 @@ ${r.map((i,a)=>`${a+1}. ${i}`).join(`
3194
3194
  `)}
3195
3195
 
3196
3196
  \u8BF7\u6839\u636E\u53CD\u9988\u4F18\u5316\u63D0\u6848\u3002\u8F93\u51FA JSON \u683C\u5F0F\u7684\u65B0\u63D0\u6848\u3002
3197
- `;try{let a=(await this.config.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u5206\u914D\u4E13\u5BB6\uFF0C\u8D1F\u8D23\u4F18\u5316\u591A Agent \u534F\u4F5C\u7684\u6267\u884C\u63D0\u6848\u3002",o,{onText:this.config.onText?l=>this.config.onText(l,"negotiation"):void 0})).match(/\{[\s\S]*\}/);if(a){let l=JSON.parse(a[0]);return l.id=`${t.id}-v${t.version+1}`,l.version=t.version+1,l.createdAt=Date.now(),l}}catch(i){this.emit("proposal_refinement_failed",{sessionId:e.id,error:i});}return null}analyzeRoundMessages(e){let t=[],n=[],r=0,o=0;for(let i of e)i.type==="concern"||i.type==="counter"?(o++,i.data?.concerns&&t.push(...i.data.concerns)):i.type==="support"&&r++,i.data?.suggestions&&n.push(...i.data.suggestions);return {hasConcerns:t.length>0||o>r,concerns:t,suggestions:n,supportCount:r,oppositionCount:o}}checkConsensus(e){let t=e.filter(r=>r.data?.vote).map(r=>r.data?.vote);return t.length===0?false:t.filter(r=>r==="approve").length/t.length>=this.config.consensusThreshold}calculateVotingResult(e,t){let n=0,r=0,o=0;for(let c of t.values())switch(c){case "approve":n++;break;case "reject":r++;break;case "abstain":o++;break}let i=n+r,a=i>0?n/i:0,l=a>=e.consensusThreshold;return {proposalId:e.currentProposal?.id??"",approved:l,approveCount:n,rejectCount:r,abstainCount:o,approvalRate:a,votedAt:Date.now()}}setupMessageSubscriptions(){this.messageBus.subscribeToType("negotiation_engine","negotiation",async e=>{let t=e.payload,n=this.sessions.get(t.sessionId);n&&(n.messages.push(t),this.emit("message_received",{sessionId:t.sessionId,message:t}));});}generateSessionId(){return `negotiation-${Date.now()}-${++this.sessionCounter}`}getSession(e){return this.sessions.get(e)}setOnText(e){this.config.onText=e;}cancelNegotiation(e,t){let n=this.sessions.get(e);return n?(n.status="failed",n.completedAt=Date.now(),this.emit("negotiation_cancelled",{sessionId:e,reason:t}),this.sessions.delete(e),true):false}get activeSessionCount(){return this.sessions.size}};function $b(s,e,t){return new Hp(s,e,t)}var LE={strategy:"majority",conflictResolution:"coordinator_decides",threshold:.7,maxIterations:5,autoResolveConflicts:true},zp=class extends EventEmitter{config;states=new Map;constructor(e){super(),this.config={...LE,...e};}initialize(e,t,n){let r=new Map;for(let[i,a]of n)r.set(i,{agentId:i,stance:"neutral",supportLevel:.5,concerns:[],weight:a,lastUpdated:Date.now()});let o={sessionId:e,proposal:t,attitudes:r,conflicts:[],progress:0,consensusReached:false};return this.states.set(e,o),this.emit("consensus_initialized",{sessionId:e,participantCount:r.size}),o}updateAttitude(e,t,n){let r=this.states.get(e);if(!r)return;let o=r.attitudes.get(t);o&&(Object.assign(o,n,{lastUpdated:Date.now()}),this.calculateProgress(r),this.emit("attitude_updated",{sessionId:e,agentId:t,attitude:o}));}extractAttitudeFromMessage(e,t){if(!this.states.get(e))return;let r="neutral",o=.5,i=[],a=[];switch(t.type){case "support":r="support",o=.9;break;case "concern":r="conditional",o=.4,t.data?.concerns&&i.push(...t.data.concerns);break;case "counter":r="oppose",o=.2,t.data?.concerns&&i.push(...t.data.concerns);break;case "question":r="neutral",o=.5;break}if(t.data?.vote)switch(t.data.vote){case "approve":r="support",o=1;break;case "reject":r="oppose",o=0;break;case "abstain":r="neutral",o=.5;break}this.updateAttitude(e,t.from,{stance:r,supportLevel:o,concerns:i,conditions:a.length>0?a:void 0});}identifyConflicts(e){let t=this.states.get(e);if(!t)return [];let n=[],r=[];for(let[o,i]of t.attitudes)(i.stance==="oppose"||i.supportLevel<.3)&&r.push(o);if(r.length>0){let o=[];for(let a of r){let l=t.attitudes.get(a);l?.concerns&&o.push(...l.concerns);}let i=[...new Set(o)];for(let a=0;a<i.length;a++){let l={id:`conflict-${e}-${a+1}`,type:"approach",description:i[a],parties:r,positions:new Map,severity:r.length>=2?3:2,resolved:false};for(let c of r)l.positions.set(c,"oppose");n.push(l);}}return t.conflicts=n,this.emit("conflicts_identified",{sessionId:e,conflictCount:n.length,conflicts:n}),n}async resolveConflict(e,t,n){let r=this.states.get(e);if(!r)return false;let o=r.conflicts.find(i=>i.id===t);return o?(o.resolved=true,o.resolution=n,this.emit("conflict_resolved",{sessionId:e,conflictId:t,resolution:n}),this.calculateProgress(r),true):false}applyConsensusStrategy(e){let t=this.states.get(e);if(!t)return {consensusReached:false,supportRatio:0,decision:"rejected"};let n=Array.from(t.attitudes.values()),r=0,o=false,i="needs_more_discussion";switch(this.config.strategy){case "majority":r=this.calculateMajoritySupport(n),o=r>=this.config.threshold,i=o?"approved":r<.3?"rejected":"needs_more_discussion";break;case "unanimous":let a=n.every(c=>c.stance==="support");r=a?1:0,o=a,i=a?"approved":"needs_more_discussion";break;case "weighted":r=this.calculateWeightedSupport(n),o=r>=this.config.threshold,i=o?"approved":r<.3?"rejected":"needs_more_discussion";break;case "supermajority":r=this.calculateMajoritySupport(n),o=r>=.67,i=o?"approved":"needs_more_discussion";break;case "approval":let l=n.filter(c=>c.stance==="support").length;r=l/n.length,o=l>=Math.ceil(n.length/2),i=o?"approved":"needs_more_discussion";break}return t.consensusReached=o,this.emit("consensus_evaluated",{sessionId:e,strategy:this.config.strategy,supportRatio:r,consensusReached:o,decision:i}),{consensusReached:o,supportRatio:r,decision:i}}generateFinalDecision(e,t){let n=this.states.get(e);if(!n)throw new Error(`State not found: ${e}`);let r;if(t)r={...t,proposal:t.type==="approved"?n.proposal:void 0,decidedAt:Date.now()};else {let{consensusReached:o,supportRatio:i}=this.applyConsensusStrategy(e),a=[];for(let[l,c]of n.attitudes)c.stance==="oppose"&&a.push({agentId:l,reason:c.concerns.join("; ")||"No specific reason"});r={type:o?"approved":i<.3?"rejected":"deferred",proposal:o?n.proposal:void 0,rationale:o?`\u5171\u8BC6\u8FBE\u6210 (\u652F\u6301\u7387: ${(i*100).toFixed(1)}%)`:`\u672A\u8FBE\u6210\u5171\u8BC6 (\u652F\u6301\u7387: ${(i*100).toFixed(1)}%)`,decidedBy:"consensus",decidedAt:Date.now(),dissent:a.length>0?a:void 0};}return n.finalDecision=r,this.emit("final_decision",{sessionId:e,decision:r}),r}getState(e){return this.states.get(e)}cleanup(e){this.states.delete(e);}calculateProgress(e){let t=Array.from(e.attitudes.values()),n=t.length,r=t.filter(c=>c.stance!=="neutral").length,o=e.conflicts.filter(c=>c.resolved).length,i=e.conflicts.length,a=r/n,l=i>0?o/i:1;e.progress=a*.5+l*.5;}calculateMajoritySupport(e){return e.filter(n=>n.stance==="support"||n.supportLevel>=.7).length/e.length}calculateWeightedSupport(e){let t=0,n=0;for(let r of e)t+=r.weight,n+=r.weight*r.supportLevel;return t>0?n/t:0}};function Bb(s){return new zp(s)}Z();var Fb={maxSubtasks:10,maxParallelism:5},$E=`## \u4F60\u7684\u4EFB\u52A1
3197
+ `;try{let a=(await this.config.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u5206\u914D\u4E13\u5BB6\uFF0C\u8D1F\u8D23\u4F18\u5316\u591A Agent \u534F\u4F5C\u7684\u6267\u884C\u63D0\u6848\u3002",o,{onText:this.config.onText?l=>this.config.onText(l,"negotiation"):void 0})).match(/\{[\s\S]*\}/);if(a){let l=JSON.parse(a[0]);return l.id=`${t.id}-v${t.version+1}`,l.version=t.version+1,l.createdAt=Date.now(),l}}catch(i){this.emit("proposal_refinement_failed",{sessionId:e.id,error:i});}return null}analyzeRoundMessages(e){let t=[],n=[],r=0,o=0;for(let i of e)i.type==="concern"||i.type==="counter"?(o++,i.data?.concerns&&t.push(...i.data.concerns)):i.type==="support"&&r++,i.data?.suggestions&&n.push(...i.data.suggestions);return {hasConcerns:t.length>0||o>r,concerns:t,suggestions:n,supportCount:r,oppositionCount:o}}checkConsensus(e){let t=e.filter(r=>r.data?.vote).map(r=>r.data?.vote);return t.length===0?false:t.filter(r=>r==="approve").length/t.length>=this.config.consensusThreshold}calculateVotingResult(e,t){let n=0,r=0,o=0;for(let c of t.values())switch(c){case "approve":n++;break;case "reject":r++;break;case "abstain":o++;break}let i=n+r,a=i>0?n/i:0,l=a>=e.consensusThreshold;return {proposalId:e.currentProposal?.id??"",approved:l,approveCount:n,rejectCount:r,abstainCount:o,approvalRate:a,votedAt:Date.now()}}setupMessageSubscriptions(){this.messageBus.subscribeToType("negotiation_engine","negotiation",async e=>{let t=e.payload,n=this.sessions.get(t.sessionId);n&&(n.messages.push(t),this.emit("message_received",{sessionId:t.sessionId,message:t}));});}generateSessionId(){return `negotiation-${Date.now()}-${++this.sessionCounter}`}getSession(e){return this.sessions.get(e)}setOnText(e){this.config.onText=e;}cancelNegotiation(e,t){let n=this.sessions.get(e);return n?(n.status="failed",n.completedAt=Date.now(),this.emit("negotiation_cancelled",{sessionId:e,reason:t}),this.sessions.delete(e),true):false}get activeSessionCount(){return this.sessions.size}};function $b(s,e,t){return new Hp(s,e,t)}var OE={strategy:"majority",conflictResolution:"coordinator_decides",threshold:.7,maxIterations:5,autoResolveConflicts:true},zp=class extends EventEmitter{config;states=new Map;constructor(e){super(),this.config={...OE,...e};}initialize(e,t,n){let r=new Map;for(let[i,a]of n)r.set(i,{agentId:i,stance:"neutral",supportLevel:.5,concerns:[],weight:a,lastUpdated:Date.now()});let o={sessionId:e,proposal:t,attitudes:r,conflicts:[],progress:0,consensusReached:false};return this.states.set(e,o),this.emit("consensus_initialized",{sessionId:e,participantCount:r.size}),o}updateAttitude(e,t,n){let r=this.states.get(e);if(!r)return;let o=r.attitudes.get(t);o&&(Object.assign(o,n,{lastUpdated:Date.now()}),this.calculateProgress(r),this.emit("attitude_updated",{sessionId:e,agentId:t,attitude:o}));}extractAttitudeFromMessage(e,t){if(!this.states.get(e))return;let r="neutral",o=.5,i=[],a=[];switch(t.type){case "support":r="support",o=.9;break;case "concern":r="conditional",o=.4,t.data?.concerns&&i.push(...t.data.concerns);break;case "counter":r="oppose",o=.2,t.data?.concerns&&i.push(...t.data.concerns);break;case "question":r="neutral",o=.5;break}if(t.data?.vote)switch(t.data.vote){case "approve":r="support",o=1;break;case "reject":r="oppose",o=0;break;case "abstain":r="neutral",o=.5;break}this.updateAttitude(e,t.from,{stance:r,supportLevel:o,concerns:i,conditions:a.length>0?a:void 0});}identifyConflicts(e){let t=this.states.get(e);if(!t)return [];let n=[],r=[];for(let[o,i]of t.attitudes)(i.stance==="oppose"||i.supportLevel<.3)&&r.push(o);if(r.length>0){let o=[];for(let a of r){let l=t.attitudes.get(a);l?.concerns&&o.push(...l.concerns);}let i=[...new Set(o)];for(let a=0;a<i.length;a++){let l={id:`conflict-${e}-${a+1}`,type:"approach",description:i[a],parties:r,positions:new Map,severity:r.length>=2?3:2,resolved:false};for(let c of r)l.positions.set(c,"oppose");n.push(l);}}return t.conflicts=n,this.emit("conflicts_identified",{sessionId:e,conflictCount:n.length,conflicts:n}),n}async resolveConflict(e,t,n){let r=this.states.get(e);if(!r)return false;let o=r.conflicts.find(i=>i.id===t);return o?(o.resolved=true,o.resolution=n,this.emit("conflict_resolved",{sessionId:e,conflictId:t,resolution:n}),this.calculateProgress(r),true):false}applyConsensusStrategy(e){let t=this.states.get(e);if(!t)return {consensusReached:false,supportRatio:0,decision:"rejected"};let n=Array.from(t.attitudes.values()),r=0,o=false,i="needs_more_discussion";switch(this.config.strategy){case "majority":r=this.calculateMajoritySupport(n),o=r>=this.config.threshold,i=o?"approved":r<.3?"rejected":"needs_more_discussion";break;case "unanimous":let a=n.every(c=>c.stance==="support");r=a?1:0,o=a,i=a?"approved":"needs_more_discussion";break;case "weighted":r=this.calculateWeightedSupport(n),o=r>=this.config.threshold,i=o?"approved":r<.3?"rejected":"needs_more_discussion";break;case "supermajority":r=this.calculateMajoritySupport(n),o=r>=.67,i=o?"approved":"needs_more_discussion";break;case "approval":let l=n.filter(c=>c.stance==="support").length;r=l/n.length,o=l>=Math.ceil(n.length/2),i=o?"approved":"needs_more_discussion";break}return t.consensusReached=o,this.emit("consensus_evaluated",{sessionId:e,strategy:this.config.strategy,supportRatio:r,consensusReached:o,decision:i}),{consensusReached:o,supportRatio:r,decision:i}}generateFinalDecision(e,t){let n=this.states.get(e);if(!n)throw new Error(`State not found: ${e}`);let r;if(t)r={...t,proposal:t.type==="approved"?n.proposal:void 0,decidedAt:Date.now()};else {let{consensusReached:o,supportRatio:i}=this.applyConsensusStrategy(e),a=[];for(let[l,c]of n.attitudes)c.stance==="oppose"&&a.push({agentId:l,reason:c.concerns.join("; ")||"No specific reason"});r={type:o?"approved":i<.3?"rejected":"deferred",proposal:o?n.proposal:void 0,rationale:o?`\u5171\u8BC6\u8FBE\u6210 (\u652F\u6301\u7387: ${(i*100).toFixed(1)}%)`:`\u672A\u8FBE\u6210\u5171\u8BC6 (\u652F\u6301\u7387: ${(i*100).toFixed(1)}%)`,decidedBy:"consensus",decidedAt:Date.now(),dissent:a.length>0?a:void 0};}return n.finalDecision=r,this.emit("final_decision",{sessionId:e,decision:r}),r}getState(e){return this.states.get(e)}cleanup(e){this.states.delete(e);}calculateProgress(e){let t=Array.from(e.attitudes.values()),n=t.length,r=t.filter(c=>c.stance!=="neutral").length,o=e.conflicts.filter(c=>c.resolved).length,i=e.conflicts.length,a=r/n,l=i>0?o/i:1;e.progress=a*.5+l*.5;}calculateMajoritySupport(e){return e.filter(n=>n.stance==="support"||n.supportLevel>=.7).length/e.length}calculateWeightedSupport(e){let t=0,n=0;for(let r of e)t+=r.weight,n+=r.weight*r.supportLevel;return t>0?n/t:0}};function Bb(s){return new zp(s)}Z();var Fb={maxSubtasks:10,maxParallelism:5},BE=`## \u4F60\u7684\u4EFB\u52A1
3198
3198
  \u5206\u6790\u7528\u6237\u8BF7\u6C42\uFF0C\u5C06\u5176\u5206\u89E3\u4E3A\u53EF\u6267\u884C\u7684\u5B50\u4EFB\u52A1\u3002
3199
3199
 
3200
3200
  ## \u7528\u6237\u8BF7\u6C42
@@ -3239,9 +3239,9 @@ ${r.map((i,a)=>`${a+1}. ${i}`).join(`
3239
3239
  2. \u660E\u786E\u5B50\u4EFB\u52A1\u7684\u8F93\u5165\u8F93\u51FA
3240
3240
  3. \u8BC6\u522B\u53EF\u5E76\u884C\u7684\u4EFB\u52A1\u653E\u5728\u540C\u4E00\u7EC4
3241
3241
  4. \u6709\u4F9D\u8D56\u5173\u7CFB\u7684\u4EFB\u52A1\u4E32\u884C\u6267\u884C
3242
- 5. \u6BCF\u4E2A\u5B50\u4EFB\u52A1\u5BF9\u5E94\u4E00\u4E2A\u89D2\u8272`,BE=[{id:"programmer",name:"\u7A0B\u5E8F\u5458",capabilities:["coding","debugging"]},{id:"reviewer",name:"\u4EE3\u7801\u5BA1\u67E5\u5458",capabilities:["review","coding"]},{id:"architect",name:"\u67B6\u6784\u5E08",capabilities:["architecture","design"]},{id:"tester",name:"\u6D4B\u8BD5\u5DE5\u7A0B\u5E08",capabilities:["testing","debugging"]},{id:"frontend",name:"\u524D\u7AEF\u5F00\u53D1\u8005",capabilities:["frontend","react"]},{id:"backend",name:"\u540E\u7AEF\u5F00\u53D1\u8005",capabilities:["backend","api-design"]},{id:"devops",name:"DevOps\u5DE5\u7A0B\u5E08",capabilities:["devops","docker"]}],qp=class extends EventEmitter{llmCall;maxSubtasks;maxParallelism;constructor(e){super(),this.llmCall=e.llmCall,this.maxSubtasks=e.maxSubtasks??Fb.maxSubtasks,this.maxParallelism=e.maxParallelism??Fb.maxParallelism;}setLlmCall(e){this.llmCall=e;}async decompose(e,t){p.info("LLM_DECOMPOSER","Starting task decomposition",{taskId:e.id,description:e.description.slice(0,100)}),this.emit("decomposition_started",{taskId:e.id});let n=this.buildPrompt(e,t),r=await this.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u5206\u89E3\u4E13\u5BB6\uFF0C\u64C5\u957F\u5C06\u590D\u6742\u4EFB\u52A1\u62C6\u5206\u4E3A\u53EF\u6267\u884C\u7684\u5B50\u4EFB\u52A1\u3002",n),o=this.parseResponse(r,e);return this.validateDecomposition(o),this.emit("decomposition_completed",{taskId:e.id,subtaskCount:o.subtasks.length}),o}buildPrompt(e,t){let n=BE.map(o=>`- ${o.id}: ${o.name} (${o.capabilities.join(", ")})`).join(`
3242
+ 5. \u6BCF\u4E2A\u5B50\u4EFB\u52A1\u5BF9\u5E94\u4E00\u4E2A\u89D2\u8272`,FE=[{id:"programmer",name:"\u7A0B\u5E8F\u5458",capabilities:["coding","debugging"]},{id:"reviewer",name:"\u4EE3\u7801\u5BA1\u67E5\u5458",capabilities:["review","coding"]},{id:"architect",name:"\u67B6\u6784\u5E08",capabilities:["architecture","design"]},{id:"tester",name:"\u6D4B\u8BD5\u5DE5\u7A0B\u5E08",capabilities:["testing","debugging"]},{id:"frontend",name:"\u524D\u7AEF\u5F00\u53D1\u8005",capabilities:["frontend","react"]},{id:"backend",name:"\u540E\u7AEF\u5F00\u53D1\u8005",capabilities:["backend","api-design"]},{id:"devops",name:"DevOps\u5DE5\u7A0B\u5E08",capabilities:["devops","docker"]}],qp=class extends EventEmitter{llmCall;maxSubtasks;maxParallelism;constructor(e){super(),this.llmCall=e.llmCall,this.maxSubtasks=e.maxSubtasks??Fb.maxSubtasks,this.maxParallelism=e.maxParallelism??Fb.maxParallelism;}setLlmCall(e){this.llmCall=e;}async decompose(e,t){p.info("LLM_DECOMPOSER","Starting task decomposition",{taskId:e.id,description:e.description.slice(0,100)}),this.emit("decomposition_started",{taskId:e.id});let n=this.buildPrompt(e,t),r=await this.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u5206\u89E3\u4E13\u5BB6\uFF0C\u64C5\u957F\u5C06\u590D\u6742\u4EFB\u52A1\u62C6\u5206\u4E3A\u53EF\u6267\u884C\u7684\u5B50\u4EFB\u52A1\u3002",n),o=this.parseResponse(r,e);return this.validateDecomposition(o),this.emit("decomposition_completed",{taskId:e.id,subtaskCount:o.subtasks.length}),o}buildPrompt(e,t){let n=FE.map(o=>`- ${o.id}: ${o.name} (${o.capabilities.join(", ")})`).join(`
3243
3243
  `),r=t?.constraints?.length?t.constraints.map(o=>`- ${o}`).join(`
3244
- `):"";return $E.replace("{userRequest}",e.userRequest).replace("{taskDescription}",e.description).replace("{availableRoles}",n).replace("{maxSubtasks}",String(this.maxSubtasks)).replace("{maxParallelism}",String(this.maxParallelism)).replace("{additionalConstraints}",r)}parseResponse(e,t){let n=e.match(/\{[\s\S]*\}/);if(!n)throw new Error("No JSON found in LLM response");let r=JSON.parse(n[0]);if(!r.subtasks||!Array.isArray(r.subtasks))throw new Error("Invalid subtasks in response");let o=r.subtasks.map((l,c)=>({id:l.id||`task-${c+1}`,description:l.description,assignedAgent:void 0,estimatedTime:l.estimatedComplexity*1e4,estimatedTokens:l.estimatedComplexity*1e3,dependencies:l.dependencies||[],priority:1,requiredCapabilities:l.requiredCapabilities,inputs:l.inputs,outputs:l.outputs})),i=this.buildExecutionLevels(o,r.executionStrategy),a=new Map;for(let l of o)a.set(l.id,l.dependencies||[]);return {subtasks:o,executionLevels:i,dependencyGraph:a,criticalPath:r.executionStrategy?.criticalPath||[],estimatedTotalTime:r.executionStrategy?.estimatedTotalTime||6e4,reasoning:r.reasoning||""}}buildExecutionLevels(e,t){return t?.parallelGroups?.length?t.parallelGroups:this.calculateLevelsFromDependencies(e)}calculateLevelsFromDependencies(e){let t=[],n=new Set;new Map(e.map(o=>[o.id,o]));for(;n.size<e.length;){let o=[];for(let i of e){if(n.has(i.id))continue;(i.dependencies||[]).every(c=>n.has(c))&&o.push(i.id);}if(o.length===0){let i=e.filter(a=>!n.has(a.id));t.push(i.map(a=>a.id));break}t.push(o),o.forEach(i=>n.add(i));}return t}validateDecomposition(e){if(e.subtasks.length===0)throw new Error("\u5206\u89E3\u7ED3\u679C\u4E3A\u7A7A\uFF0C\u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u5B50\u4EFB\u52A1");for(let n of e.subtasks){if(!n.description||n.description.length<5)throw new Error(`\u5B50\u4EFB\u52A1 ${n.id} \u63CF\u8FF0\u4E0D\u5B8C\u6574`);if(!n.id)throw new Error("\u5B50\u4EFB\u52A1\u7F3A\u5C11 ID")}if(this.hasCyclicDependency(e.dependencyGraph))throw new Error("\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56\uFF0C\u8BF7\u68C0\u67E5\u5B50\u4EFB\u52A1\u4F9D\u8D56\u5173\u7CFB");let t=new Set(e.subtasks.map(n=>n.id));for(let n of e.subtasks)for(let r of n.dependencies||[])if(!t.has(r))throw new Error(`\u5B50\u4EFB\u52A1 ${n.id} \u4F9D\u8D56\u4E86\u4E0D\u5B58\u5728\u7684\u4EFB\u52A1 ${r}`);p.debug("LLM_DECOMPOSER","Decomposition validated",{subtaskCount:e.subtasks.length,levelCount:e.executionLevels.length});}hasCyclicDependency(e){let t=new Set,n=new Set,r=o=>{t.add(o),n.add(o);let i=e.get(o)||[];for(let a of i)if(t.has(a)){if(n.has(a))return true}else if(r(a))return true;return n.delete(o),false};for(let o of e.keys())if(!t.has(o)&&r(o))return true;return false}};function Kp(s){return new qp(s)}var Jp=class extends EventEmitter{registry;config;proposalCounter=0;llmDecomposer;constructor(e,t){super(),this.registry=e,this.config={maxSubtasks:t?.maxSubtasks??10,maxParallelism:t?.maxParallelism??5,enableRiskAssessment:t?.enableRiskAssessment??true,optimizeTimeEstimates:t?.optimizeTimeEstimates??true,llmCall:t?.llmCall},t?.llmCall&&(this.llmDecomposer=Kp({llmCall:t.llmCall,maxSubtasks:this.config.maxSubtasks,maxParallelism:this.config.maxParallelism}));}setLlmCall(e){this.config.llmCall=e,this.llmDecomposer?this.llmDecomposer.setLlmCall(e):this.llmDecomposer=Kp({llmCall:e,maxSubtasks:this.config.maxSubtasks,maxParallelism:this.config.maxParallelism});}async generateProposal(e,t,n,r){let o=r?.strategy??"hybrid",i=r?.proposer??"system";this.emit("generation_started",{sessionId:e,taskId:t.id,strategy:o});let a=await this.decomposeTask(t,n,o),l=this.assignTasks(a.subtasks,n);for(let m of a.subtasks){let g=l.assignments.get(m.id);g&&(m.assignedAgent=g);}let c=this.config.enableRiskAssessment?this.assessRisks(a,l,n):[],d={id:this.generateProposalId(e),sessionId:e,proposer:i,version:1,subtasks:a.subtasks,executionLevels:a.executionLevels,estimatedTotalTime:a.estimatedTotalTime,estimatedTotalTokens:this.calculateTotalTokens(a.subtasks),risks:c,createdAt:Date.now()};return this.emit("proposal_generated",{sessionId:e,proposal:d}),d}async decomposeTask(e,t,n){switch(n){case "llm_driven":return this.config.llmCall?this.llmDrivenDecomposition(e,t):this.hybridDecomposition(e,t);case "sequential":return this.sequentialDecomposition(e,t);case "parallel":return this.parallelDecomposition(e,t);case "capability":return this.capabilityBasedDecomposition(e,t);default:return this.hybridDecomposition(e,t)}}sequentialDecomposition(e,t){let n=[],r=[];for(let o=0;o<t.length;o++){let i=t[o],a=`subtask-${o+1}`;n.push({id:a,description:i.proposedApproach,assignedAgent:i.agentId,estimatedTime:i.estimatedTime,estimatedTokens:i.resourceRequirements.estimatedTokens,dependencies:o>0?[`subtask-${o}`]:[],priority:1}),r.push([a]);}return {subtasks:n,executionLevels:r,dependencyGraph:this.buildDependencyGraph(n),criticalPath:n.map(o=>o.id),estimatedTotalTime:n.reduce((o,i)=>o+i.estimatedTime,0)}}parallelDecomposition(e,t){let n=[],r=[],o=Math.min(t.length,this.config.maxParallelism);for(let a=0;a<o;a++){let l=t[a],c=`subtask-${a+1}`;n.push({id:c,description:l.proposedApproach,assignedAgent:l.agentId,estimatedTime:l.estimatedTime,estimatedTokens:l.resourceRequirements.estimatedTokens,dependencies:[],priority:1}),r.push(c);}let i=Math.max(...n.map(a=>a.estimatedTime));return {subtasks:n,executionLevels:[r],dependencyGraph:this.buildDependencyGraph(n),criticalPath:[n[0]?.id].filter(Boolean),estimatedTotalTime:i}}hybridDecomposition(e,t){let n=[],r=[],o=e.estimatedComplexity,i=Math.min(3,Math.ceil(o/3)),a=Math.ceil(t.length/i);for(let u=0;u<i;u++){let d=[],m=u*a,g=Math.min(m+a,t.length);for(let h=m;h<g;h++){let f=t[h],v=`subtask-${u+1}-${h-m+1}`,b=u>0?r[u-1]:[];n.push({id:v,description:f.proposedApproach,assignedAgent:f.agentId,estimatedTime:f.estimatedTime,estimatedTokens:f.resourceRequirements.estimatedTokens,dependencies:b,priority:i-u}),d.push(v);}r.push(d);}let l=this.findCriticalPath(n,r),c=0;for(let u of r){let d=n.filter(m=>u.includes(m.id));c+=Math.max(...d.map(m=>m.estimatedTime));}return {subtasks:n,executionLevels:r,dependencyGraph:this.buildDependencyGraph(n),criticalPath:l,estimatedTotalTime:c}}capabilityBasedDecomposition(e,t){let n=[],r=new Map;for(let a of t){let c=this.registry.get(a.agentId)?.capabilities[0]??"general";r.has(c)||r.set(c,[]),r.get(c).push(a);}let o=[[]],i=0;for(let[a,l]of r)for(let c of l){let u=`subtask-${a}-${++i}`;n.push({id:u,description:`[${a}] ${c.proposedApproach}`,assignedAgent:c.agentId,estimatedTime:c.estimatedTime,estimatedTokens:c.resourceRequirements.estimatedTokens,dependencies:[],priority:1}),o[0].push(u);}return {subtasks:n,executionLevels:o,dependencyGraph:this.buildDependencyGraph(n),criticalPath:n.length>0?[n[0].id]:[],estimatedTotalTime:Math.max(...n.map(a=>a.estimatedTime),0)}}async llmDrivenDecomposition(e,t){if(!this.llmDecomposer)return this.hybridDecomposition(e,t);try{let n=await this.llmDecomposer.decompose(e);return {subtasks:n.subtasks,executionLevels:n.executionLevels,dependencyGraph:n.dependencyGraph,criticalPath:n.criticalPath,estimatedTotalTime:n.estimatedTotalTime}}catch(n){return this.emit("llm_decomposition_failed",{error:n}),this.hybridDecomposition(e,t)}}assignTasks(e,t){let n=new Map,r=new Map,o=[];for(let i of t)r.set(i.agentId,0);for(let i of e)if(i.assignedAgent){n.set(i.id,i.assignedAgent);let a=r.get(i.assignedAgent)??0;r.set(i.assignedAgent,a+i.estimatedTime);}else {let a=null,l=1/0;for(let[c,u]of r)u<l&&(l=u,a=c);a?(n.set(i.id,a),r.set(a,l+i.estimatedTime)):o.push(i.id);}return {assignments:n,loadDistribution:r,unassigned:o}}assessRisks(e,t,n){let r=[];t.unassigned.length>0&&r.push({type:"resource_shortage",description:`${t.unassigned.length} \u4E2A\u4EFB\u52A1\u672A\u80FD\u5206\u914D Agent`,severity:"high",mitigation:"\u589E\u52A0\u53EF\u7528 Agent \u6216\u91CD\u65B0\u5206\u914D\u4EFB\u52A1"});let o=Array.from(t.loadDistribution.values());if(o.length>0){let i=Math.max(...o),a=Math.min(...o),l=i>0?(i-a)/i:0;l>.5&&r.push({type:"load_imbalance",description:`\u8D1F\u8F7D\u4E0D\u5747\u8861 (\u5DEE\u5F02: ${(l*100).toFixed(0)}%)`,severity:"medium",mitigation:"\u91CD\u65B0\u5206\u914D\u4EFB\u52A1\u4EE5\u5E73\u8861\u8D1F\u8F7D"});}for(let i of n)i.confidence<.5&&r.push({type:"low_confidence",description:`Agent ${i.agentId} \u7F6E\u4FE1\u5EA6\u8F83\u4F4E (${(i.confidence*100).toFixed(0)}%)`,severity:"medium",mitigation:"\u8003\u8651\u5206\u914D\u7ED9\u5176\u4ED6 Agent \u6216\u964D\u4F4E\u4EFB\u52A1\u590D\u6742\u5EA6"});return e.criticalPath.length>5&&r.push({type:"long_critical_path",description:`\u5173\u952E\u8DEF\u5F84\u8F83\u957F (${e.criticalPath.length} \u6B65)`,severity:"low",mitigation:"\u8003\u8651\u589E\u52A0\u5E76\u884C\u5EA6"}),r}async optimizeProposal(e,t){if(!this.config.llmCall)return e;let n=`
3244
+ `):"";return BE.replace("{userRequest}",e.userRequest).replace("{taskDescription}",e.description).replace("{availableRoles}",n).replace("{maxSubtasks}",String(this.maxSubtasks)).replace("{maxParallelism}",String(this.maxParallelism)).replace("{additionalConstraints}",r)}parseResponse(e,t){let n=e.match(/\{[\s\S]*\}/);if(!n)throw new Error("No JSON found in LLM response");let r=JSON.parse(n[0]);if(!r.subtasks||!Array.isArray(r.subtasks))throw new Error("Invalid subtasks in response");let o=r.subtasks.map((l,c)=>({id:l.id||`task-${c+1}`,description:l.description,assignedAgent:void 0,estimatedTime:l.estimatedComplexity*1e4,estimatedTokens:l.estimatedComplexity*1e3,dependencies:l.dependencies||[],priority:1,requiredCapabilities:l.requiredCapabilities,inputs:l.inputs,outputs:l.outputs})),i=this.buildExecutionLevels(o,r.executionStrategy),a=new Map;for(let l of o)a.set(l.id,l.dependencies||[]);return {subtasks:o,executionLevels:i,dependencyGraph:a,criticalPath:r.executionStrategy?.criticalPath||[],estimatedTotalTime:r.executionStrategy?.estimatedTotalTime||6e4,reasoning:r.reasoning||""}}buildExecutionLevels(e,t){return t?.parallelGroups?.length?t.parallelGroups:this.calculateLevelsFromDependencies(e)}calculateLevelsFromDependencies(e){let t=[],n=new Set;new Map(e.map(o=>[o.id,o]));for(;n.size<e.length;){let o=[];for(let i of e){if(n.has(i.id))continue;(i.dependencies||[]).every(c=>n.has(c))&&o.push(i.id);}if(o.length===0){let i=e.filter(a=>!n.has(a.id));t.push(i.map(a=>a.id));break}t.push(o),o.forEach(i=>n.add(i));}return t}validateDecomposition(e){if(e.subtasks.length===0)throw new Error("\u5206\u89E3\u7ED3\u679C\u4E3A\u7A7A\uFF0C\u81F3\u5C11\u9700\u8981\u4E00\u4E2A\u5B50\u4EFB\u52A1");for(let n of e.subtasks){if(!n.description||n.description.length<5)throw new Error(`\u5B50\u4EFB\u52A1 ${n.id} \u63CF\u8FF0\u4E0D\u5B8C\u6574`);if(!n.id)throw new Error("\u5B50\u4EFB\u52A1\u7F3A\u5C11 ID")}if(this.hasCyclicDependency(e.dependencyGraph))throw new Error("\u68C0\u6D4B\u5230\u5FAA\u73AF\u4F9D\u8D56\uFF0C\u8BF7\u68C0\u67E5\u5B50\u4EFB\u52A1\u4F9D\u8D56\u5173\u7CFB");let t=new Set(e.subtasks.map(n=>n.id));for(let n of e.subtasks)for(let r of n.dependencies||[])if(!t.has(r))throw new Error(`\u5B50\u4EFB\u52A1 ${n.id} \u4F9D\u8D56\u4E86\u4E0D\u5B58\u5728\u7684\u4EFB\u52A1 ${r}`);p.debug("LLM_DECOMPOSER","Decomposition validated",{subtaskCount:e.subtasks.length,levelCount:e.executionLevels.length});}hasCyclicDependency(e){let t=new Set,n=new Set,r=o=>{t.add(o),n.add(o);let i=e.get(o)||[];for(let a of i)if(t.has(a)){if(n.has(a))return true}else if(r(a))return true;return n.delete(o),false};for(let o of e.keys())if(!t.has(o)&&r(o))return true;return false}};function Kp(s){return new qp(s)}var Jp=class extends EventEmitter{registry;config;proposalCounter=0;llmDecomposer;constructor(e,t){super(),this.registry=e,this.config={maxSubtasks:t?.maxSubtasks??10,maxParallelism:t?.maxParallelism??5,enableRiskAssessment:t?.enableRiskAssessment??true,optimizeTimeEstimates:t?.optimizeTimeEstimates??true,llmCall:t?.llmCall},t?.llmCall&&(this.llmDecomposer=Kp({llmCall:t.llmCall,maxSubtasks:this.config.maxSubtasks,maxParallelism:this.config.maxParallelism}));}setLlmCall(e){this.config.llmCall=e,this.llmDecomposer?this.llmDecomposer.setLlmCall(e):this.llmDecomposer=Kp({llmCall:e,maxSubtasks:this.config.maxSubtasks,maxParallelism:this.config.maxParallelism});}async generateProposal(e,t,n,r){let o=r?.strategy??"hybrid",i=r?.proposer??"system";this.emit("generation_started",{sessionId:e,taskId:t.id,strategy:o});let a=await this.decomposeTask(t,n,o),l=this.assignTasks(a.subtasks,n);for(let m of a.subtasks){let g=l.assignments.get(m.id);g&&(m.assignedAgent=g);}let c=this.config.enableRiskAssessment?this.assessRisks(a,l,n):[],d={id:this.generateProposalId(e),sessionId:e,proposer:i,version:1,subtasks:a.subtasks,executionLevels:a.executionLevels,estimatedTotalTime:a.estimatedTotalTime,estimatedTotalTokens:this.calculateTotalTokens(a.subtasks),risks:c,createdAt:Date.now()};return this.emit("proposal_generated",{sessionId:e,proposal:d}),d}async decomposeTask(e,t,n){switch(n){case "llm_driven":return this.config.llmCall?this.llmDrivenDecomposition(e,t):this.hybridDecomposition(e,t);case "sequential":return this.sequentialDecomposition(e,t);case "parallel":return this.parallelDecomposition(e,t);case "capability":return this.capabilityBasedDecomposition(e,t);default:return this.hybridDecomposition(e,t)}}sequentialDecomposition(e,t){let n=[],r=[];for(let o=0;o<t.length;o++){let i=t[o],a=`subtask-${o+1}`;n.push({id:a,description:i.proposedApproach,assignedAgent:i.agentId,estimatedTime:i.estimatedTime,estimatedTokens:i.resourceRequirements.estimatedTokens,dependencies:o>0?[`subtask-${o}`]:[],priority:1}),r.push([a]);}return {subtasks:n,executionLevels:r,dependencyGraph:this.buildDependencyGraph(n),criticalPath:n.map(o=>o.id),estimatedTotalTime:n.reduce((o,i)=>o+i.estimatedTime,0)}}parallelDecomposition(e,t){let n=[],r=[],o=Math.min(t.length,this.config.maxParallelism);for(let a=0;a<o;a++){let l=t[a],c=`subtask-${a+1}`;n.push({id:c,description:l.proposedApproach,assignedAgent:l.agentId,estimatedTime:l.estimatedTime,estimatedTokens:l.resourceRequirements.estimatedTokens,dependencies:[],priority:1}),r.push(c);}let i=Math.max(...n.map(a=>a.estimatedTime));return {subtasks:n,executionLevels:[r],dependencyGraph:this.buildDependencyGraph(n),criticalPath:[n[0]?.id].filter(Boolean),estimatedTotalTime:i}}hybridDecomposition(e,t){let n=[],r=[],o=e.estimatedComplexity,i=Math.min(3,Math.ceil(o/3)),a=Math.ceil(t.length/i);for(let u=0;u<i;u++){let d=[],m=u*a,g=Math.min(m+a,t.length);for(let h=m;h<g;h++){let f=t[h],v=`subtask-${u+1}-${h-m+1}`,b=u>0?r[u-1]:[];n.push({id:v,description:f.proposedApproach,assignedAgent:f.agentId,estimatedTime:f.estimatedTime,estimatedTokens:f.resourceRequirements.estimatedTokens,dependencies:b,priority:i-u}),d.push(v);}r.push(d);}let l=this.findCriticalPath(n,r),c=0;for(let u of r){let d=n.filter(m=>u.includes(m.id));c+=Math.max(...d.map(m=>m.estimatedTime));}return {subtasks:n,executionLevels:r,dependencyGraph:this.buildDependencyGraph(n),criticalPath:l,estimatedTotalTime:c}}capabilityBasedDecomposition(e,t){let n=[],r=new Map;for(let a of t){let c=this.registry.get(a.agentId)?.capabilities[0]??"general";r.has(c)||r.set(c,[]),r.get(c).push(a);}let o=[[]],i=0;for(let[a,l]of r)for(let c of l){let u=`subtask-${a}-${++i}`;n.push({id:u,description:`[${a}] ${c.proposedApproach}`,assignedAgent:c.agentId,estimatedTime:c.estimatedTime,estimatedTokens:c.resourceRequirements.estimatedTokens,dependencies:[],priority:1}),o[0].push(u);}return {subtasks:n,executionLevels:o,dependencyGraph:this.buildDependencyGraph(n),criticalPath:n.length>0?[n[0].id]:[],estimatedTotalTime:Math.max(...n.map(a=>a.estimatedTime),0)}}async llmDrivenDecomposition(e,t){if(!this.llmDecomposer)return this.hybridDecomposition(e,t);try{let n=await this.llmDecomposer.decompose(e);return {subtasks:n.subtasks,executionLevels:n.executionLevels,dependencyGraph:n.dependencyGraph,criticalPath:n.criticalPath,estimatedTotalTime:n.estimatedTotalTime}}catch(n){return this.emit("llm_decomposition_failed",{error:n}),this.hybridDecomposition(e,t)}}assignTasks(e,t){let n=new Map,r=new Map,o=[];for(let i of t)r.set(i.agentId,0);for(let i of e)if(i.assignedAgent){n.set(i.id,i.assignedAgent);let a=r.get(i.assignedAgent)??0;r.set(i.assignedAgent,a+i.estimatedTime);}else {let a=null,l=1/0;for(let[c,u]of r)u<l&&(l=u,a=c);a?(n.set(i.id,a),r.set(a,l+i.estimatedTime)):o.push(i.id);}return {assignments:n,loadDistribution:r,unassigned:o}}assessRisks(e,t,n){let r=[];t.unassigned.length>0&&r.push({type:"resource_shortage",description:`${t.unassigned.length} \u4E2A\u4EFB\u52A1\u672A\u80FD\u5206\u914D Agent`,severity:"high",mitigation:"\u589E\u52A0\u53EF\u7528 Agent \u6216\u91CD\u65B0\u5206\u914D\u4EFB\u52A1"});let o=Array.from(t.loadDistribution.values());if(o.length>0){let i=Math.max(...o),a=Math.min(...o),l=i>0?(i-a)/i:0;l>.5&&r.push({type:"load_imbalance",description:`\u8D1F\u8F7D\u4E0D\u5747\u8861 (\u5DEE\u5F02: ${(l*100).toFixed(0)}%)`,severity:"medium",mitigation:"\u91CD\u65B0\u5206\u914D\u4EFB\u52A1\u4EE5\u5E73\u8861\u8D1F\u8F7D"});}for(let i of n)i.confidence<.5&&r.push({type:"low_confidence",description:`Agent ${i.agentId} \u7F6E\u4FE1\u5EA6\u8F83\u4F4E (${(i.confidence*100).toFixed(0)}%)`,severity:"medium",mitigation:"\u8003\u8651\u5206\u914D\u7ED9\u5176\u4ED6 Agent \u6216\u964D\u4F4E\u4EFB\u52A1\u590D\u6742\u5EA6"});return e.criticalPath.length>5&&r.push({type:"long_critical_path",description:`\u5173\u952E\u8DEF\u5F84\u8F83\u957F (${e.criticalPath.length} \u6B65)`,severity:"low",mitigation:"\u8003\u8651\u589E\u52A0\u5E76\u884C\u5EA6"}),r}async optimizeProposal(e,t){if(!this.config.llmCall)return e;let n=`
3245
3245
  \u5F53\u524D\u63D0\u6848\uFF1A
3246
3246
  ${JSON.stringify(e,null,2)}
3247
3247
 
@@ -3274,14 +3274,14 @@ ${r.length>0?r.join(`
3274
3274
  "adoptedSuggestions": ["\u91C7\u7EB3\u7684\u5EFA\u8BAE1", "\u91C7\u7EB3\u7684\u5EFA\u8BAE2"],
3275
3275
  "deferredDisagreements": ["\u6401\u7F6E\u7684\u5206\u6B671"],
3276
3276
  "executionNotes": ["\u6267\u884C\u6CE8\u610F\u4E8B\u98791", "\u6267\u884C\u6CE8\u610F\u4E8B\u98792"]
3277
- }`}parseSummaryResponse(e){try{let t=e.match(/\{[\s\S]*\}/);if(t){let n=JSON.parse(t[0]);return {finalDecision:n.finalDecision||"\u534F\u5546\u5B8C\u6210",adoptedSuggestions:n.adoptedSuggestions||[],deferredDisagreements:n.deferredDisagreements||[],executionNotes:n.executionNotes||[]}}}catch{p.warn("NEGOTIATION_SUMMARIZER","Failed to parse response");}return {finalDecision:e.slice(0,500),adoptedSuggestions:[],deferredDisagreements:[],executionNotes:[]}}};function jb(s){return new Vp(s)}var GE={defaultMaxRetries:2,defaultMutable:true,autoCalculateLevels:true,validateDAG:true},Yp=class extends EventEmitter{config;dags=new Map;dagCounter=0;constructor(e){super(),this.config={...GE,...e};}createFromProposal(e,t){let n=this.generateDAGId(e.id),r=new Map;for(let c of e.subtasks){let u=this.createNode(c,{mutable:t?.mutable??this.config.defaultMutable,maxRetries:t?.maxRetries??this.config.defaultMaxRetries});r.set(u.id,u);}let o=this.config.autoCalculateLevels?this.calculateLevels(r):e.executionLevels;for(let c=0;c<o.length;c++)for(let u of o[c]){let d=r.get(u);d&&(d.level=c);}let i=this.calculateCriticalPath(r,o),a=this.calculateEstimatedTime(r,o),l={id:n,proposalId:e.id,nodes:r,version:1,history:[],status:"planning",analysis:{levels:o,maxParallelism:Math.max(...o.map(c=>c.length)),criticalPath:i,estimatedTotalTime:a},context:new Map(Object.entries(t?.initialContext??{})),createdAt:Date.now()};if(this.config.validateDAG){let c=this.validate(l);c.valid||this.emit("validation_failed",{dagId:n,errors:c.errors});}return this.dags.set(n,l),this.emit("dag_created",{dagId:n,proposalId:e.id,nodeCount:r.size,levels:o.length}),l}createNode(e,t){return {id:e.id,task:{description:e.description,inputMapping:e.inputMapping??{},outputKey:e.outputKey??`output_${e.id}`,estimatedTime:e.estimatedTime,estimatedTokens:e.estimatedTokens,requiredCapabilities:e.requiredCapabilities},assignedAgent:e.assignedAgent??"",dependencies:e.dependencies,status:"pending",level:0,retryCount:0,maxRetries:t.maxRetries,mutable:t.mutable,version:1}}calculateLevels(e){let t=[],n=new Map,r=new Set;for(let[o,i]of e)n.set(o,i.dependencies.length);for(;r.size<e.size;){let o=[];for(let[i,a]of n)a===0&&!r.has(i)&&o.push(i);if(o.length===0)break;for(let i of o){r.add(i);for(let[a,l]of e)l.dependencies.includes(i)&&n.set(a,(n.get(a)??1)-1);}t.push(o);}return t}calculateCriticalPath(e,t){let n=[];for(let r of t){let o=0,i="";for(let a of r){let l=e.get(a);l&&l.task.estimatedTime>o&&(o=l.task.estimatedTime,i=a);}i&&n.push(i);}return n}calculateEstimatedTime(e,t){let n=0;for(let r of t){let o=0;for(let i of r){let a=e.get(i);a&&(o=Math.max(o,a.task.estimatedTime));}n+=o;}return n}validate(e){let t=[],n=[],r=[],o=[];for(let[a,l]of e.nodes){l.assignedAgent||n.push(`Node ${a} has no assigned agent`);let c=l.dependencies.filter(d=>!e.nodes.has(d));c.length>0&&(t.push(`Node ${a} has missing dependencies: ${c.join(", ")}`),o.push({nodeId:a,missingDeps:c}));let u=false;for(let[d,m]of e.nodes)if(d!==a&&m.dependencies.includes(a)){u=true;break}l.dependencies.length===0&&!u&&e.nodes.size>1&&e.nodes.size>1&&e.analysis.levels[0]?.length!==e.nodes.size&&r.push(a);}let i=this.detectCycle(e);return i&&t.push("DAG contains a cycle"),{valid:t.length===0,errors:t,warnings:n,hasCycle:i,orphanNodes:r,missingDependencies:o}}detectCycle(e){let t=new Set,n=new Set,r=o=>{if(t.add(o),n.add(o),!e.nodes.get(o))return false;for(let[a,l]of e.nodes)if(l.dependencies.includes(o)){if(t.has(a)){if(n.has(a))return true}else if(r(a))return true}return n.delete(o),false};for(let o of e.nodes.keys())if(!t.has(o)&&r(o))return true;return false}addNode(e,t,n="system"){let r=this.dags.get(e);if(!r)return null;let o={...t,status:"pending",retryCount:0,version:1};return r.nodes.set(t.id,o),r.version++,this.recordHistory(r,"add",t.id,"Node added",n,void 0,o),this.config.autoCalculateLevels&&this.recalculateAnalysis(r),this.emit("node_added",{dagId:e,nodeId:t.id,version:r.version}),o}removeNode(e,t,n="system"){let r=this.dags.get(e);if(!r)return false;let o=r.nodes.get(t);if(!o)return false;if(!o.mutable)return this.emit("modification_rejected",{dagId:e,nodeId:t,reason:"Node is immutable"}),false;for(let[i,a]of r.nodes)a.dependencies.includes(t)&&(a.dependencies=a.dependencies.filter(l=>l!==t),a.version++);return r.nodes.delete(t),r.version++,this.recordHistory(r,"remove",t,"Node removed",n,o,void 0),this.config.autoCalculateLevels&&this.recalculateAnalysis(r),this.emit("node_removed",{dagId:e,nodeId:t,version:r.version}),true}modifyNode(e,t,n,r="system"){let o=this.dags.get(e);if(!o)return false;let i=o.nodes.get(t);if(!i)return false;if(!i.mutable)return this.emit("modification_rejected",{dagId:e,nodeId:t,reason:"Node is immutable"}),false;let a={...i};return n.task&&(i.task={...i.task,...n.task}),n.dependencies&&(i.dependencies=n.dependencies),n.assignedAgent!==void 0&&(i.assignedAgent=n.assignedAgent),i.version++,o.version++,this.recordHistory(o,"modify",t,"Node modified",r,a,i),n.dependencies&&this.config.autoCalculateLevels&&this.recalculateAnalysis(o),this.emit("node_modified",{dagId:e,nodeId:t,updates:n,version:o.version}),true}reassignAgent(e,t,n,r="system"){let o=this.dags.get(e);if(!o)return false;let i=o.nodes.get(t);if(!i)return false;let a=i.assignedAgent;return i.assignedAgent=n,i.version++,o.version++,this.recordHistory(o,"reassign",t,`Agent reassigned from ${a} to ${n}`,r,a,n),this.emit("agent_reassigned",{dagId:e,nodeId:t,previousAgent:a,newAgent:n,version:o.version}),true}reorderDependencies(e,t,n,r="system"){return this.modifyNode(e,t,{dependencies:n},r)}recordHistory(e,t,n,r,o,i,a){let l={version:e.version,action:t,nodeId:n,reason:r,previousValue:i,newValue:a,operator:o,timestamp:Date.now()};e.history.push(l);}recalculateAnalysis(e){let t=this.calculateLevels(e.nodes);for(let n=0;n<t.length;n++)for(let r of t[n]){let o=e.nodes.get(r);o&&(o.level=n);}e.analysis={levels:t,maxParallelism:Math.max(...t.map(n=>n.length),0),criticalPath:this.calculateCriticalPath(e.nodes,t),estimatedTotalTime:this.calculateEstimatedTime(e.nodes,t)};}getDAG(e){return this.dags.get(e)}getReadyNodes(e){let t=this.dags.get(e);if(!t)return [];let n=[];for(let r of t.nodes.values()){if(r.status!=="pending")continue;r.dependencies.every(i=>t.nodes.get(i)?.status==="completed")&&n.push(r);}return n}updateNodeStatus(e,t,n,r,o){let i=this.dags.get(e);if(!i)return false;let a=i.nodes.get(t);return a?(a.status=n,n==="running"?a.startedAt=Date.now():(n==="completed"||n==="failed")&&(a.completedAt=Date.now()),r&&(a.result=r),o&&(a.error=o),this.emit("node_status_changed",{dagId:e,nodeId:t,status:n,result:r,error:o}),true):false}cloneDAG(e,t){let n=this.dags.get(e);if(!n)return null;let r=t??`${e}-clone-${Date.now()}`,o=new Map;for(let[a,l]of n.nodes)o.set(a,{...l});let i={...n,id:r,nodes:o,history:[...n.history],context:new Map(n.context),createdAt:Date.now()};return this.dags.set(r,i),this.emit("dag_cloned",{originalId:e,clonedId:r}),i}deleteDAG(e){let t=this.dags.delete(e);return t&&this.emit("dag_deleted",{dagId:e}),t}generateDAGId(e){return `dag-${e}-${++this.dagCounter}`}getStats(){let e=0,t=0;for(let n of this.dags.values())n.status==="executing"||n.status==="replanning"?e++:n.status==="completed"&&t++;return {totalDAGs:this.dags.size,activeDAGs:e,completedDAGs:t}}};function Gb(s){return new Yp(s)}Z();var HE={maxConcurrency:5,nodeTimeout:12e4,allowPartialFailure:true,retryCount:2,retryDelay:1e3,enablePeerReview:true,enableReplanning:true,maxReplanAttempts:3,progressUpdateInterval:1e3,collectDetailedMetrics:true,enableProgressiveExpansion:true},Xp=class extends EventEmitter{registry;dagBuilder;config;agentMatcher;progressiveManager;rgpsDataFlowManager;executionStates=new Map;progressTimers=new Map;currentAbortSignal;constructor(e,t,n){super(),this.registry=e,this.dagBuilder=t,this.agentMatcher=n?.agentMatcher,this.progressiveManager=n?.progressiveManager,this.rgpsDataFlowManager=n?.rgpsDataFlowManager,this.config={...HE,...n};}async execute(e,t){let n=this.dagBuilder.getDAG(e);if(!n)throw new Error(`DAG not found: ${e}`);this.currentAbortSignal=t;let r=this.initializeState(e);n.status="executing",n.startedAt=Date.now(),this.emit("execution_started",{dagId:e,nodeCount:n.nodes.size,levels:n.analysis.levels.length}),this.startProgressUpdates(e,n),this.rgpsDataFlowManager&&this.rgpsDataFlowManager.inferFromDAG(n);try{for(let i=0;i<n.analysis.levels.length&&!r.cancelled;i++){let a=n.analysis.levels[i];this.emit("level_started",{dagId:e,level:i,nodeIds:a}),await this.executeLevel(n,r,i,a),this.config.enableReplanning&&r.failedNodes.size>0&&await this.checkReplanCondition(n,r)&&r.replanCount<this.config.maxReplanAttempts&&await this.triggerReplan(n,r),this.emit("level_completed",{dagId:e,level:i,completedNodes:Array.from(r.completedNodes),failedNodes:Array.from(r.failedNodes)});}}finally{this.stopProgressUpdates(e);}let o=this.buildResult(n,r);return n.status=o.success?"completed":"failed",n.completedAt=Date.now(),this.executionStates.delete(e),this.emit("execution_completed",{dagId:e,result:o}),o}initializeState(e){let t={dagId:e,running:true,startedAt:Date.now(),runningNodes:new Set,completedNodes:new Set,failedNodes:new Set,skippedNodes:new Set,nodeResults:new Map,errors:[],replanCount:0,cancelled:false};return this.executionStates.set(e,t),t}async executeLevel(e,t,n,r){let o=r.filter(a=>{let l=e.nodes.get(a);if(!l)return false;let c=l.dependencies.every(d=>t.completedNodes.has(d));return l.dependencies.some(d=>t.failedNodes.has(d))&&!this.config.allowPartialFailure?(t.skippedNodes.add(a),this.dagBuilder.updateNodeStatus(e.id,a,"skipped"),false):c}),i=this.chunkArray(o,this.config.maxConcurrency);for(let a of i){if(t.cancelled)break;await Promise.all(a.map(l=>this.executeNode(e,t,l)));}}async executeNode(e,t,n){let r=e.nodes.get(n);if(r){t.runningNodes.add(n),this.dagBuilder.updateNodeStatus(e.id,n,"running"),this.emit("node_started",{dagId:e.id,nodeId:n,agentId:r.assignedAgent});try{let o=this.prepareContext(e,r),i=await this.runNode(r,o);if(t.runningNodes.delete(n),t.completedNodes.add(n),t.nodeResults.set(n,i),e.context.set(r.task.outputKey,i.output),i.data)for(let[a,l]of Object.entries(i.data))e.context.set(`${r.task.outputKey}.${a}`,l);this.rgpsDataFlowManager&&this.rgpsDataFlowManager.storeNodeOutput(n,r.task.outputKey,i.output),this.dagBuilder.updateNodeStatus(e.id,n,"completed",i),this.emit("node_completed",{dagId:e.id,nodeId:n,result:i}),this.config.enableProgressiveExpansion&&this.progressiveManager&&await this.checkProgressiveExpansion(e,r,i);}catch(o){let i=o instanceof Error?o.message:String(o);if(r.retryCount<r.maxRetries)return r.retryCount++,this.emit("node_retry",{dagId:e.id,nodeId:n,attempt:r.retryCount,error:i}),await new Promise(a=>setTimeout(a,this.config.retryDelay)),this.executeNode(e,t,n);t.runningNodes.delete(n),t.failedNodes.add(n),t.errors.push({nodeId:n,error:i,timestamp:Date.now()}),this.dagBuilder.updateNodeStatus(e.id,n,"failed",void 0,i),this.emit("node_failed",{dagId:e.id,nodeId:n,error:i,retries:r.retryCount});}}}prepareContext(e,t){let n={};for(let[r,o]of Object.entries(t.task.inputMapping))n[r]=e.context.get(o);for(let r of t.dependencies){let o=e.nodes.get(r);o&&(n[`dep_${r}`]=e.context.get(o.task.outputKey));}return {inputs:n,dagContext:e.context,timeout:this.config.nodeTimeout,abortSignal:this.currentAbortSignal}}async runNode(e,t){let n=Date.now(),r=this.registry.getInstance(e.assignedAgent);if(!r&&this.agentMatcher){p.info("DAG_EXECUTOR","Agent not found, using matcher",{nodeId:e.id,assignedAgent:e.assignedAgent});let d=await this.agentMatcher.matchOrCreate({subtask:{id:e.id,description:e.task.description,dependencies:e.dependencies,estimatedTime:e.task.estimatedTime??6e4,estimatedTokens:e.task.estimatedTokens??5e3,requiredCapabilities:e.task.requiredCapabilities},requiredCapabilities:e.task.requiredCapabilities});r=d.agent,e.assignedAgent=r.id,this.emit("agent_matched",{nodeId:e.id,agentId:r.id,isNewlyCreated:d.isNewlyCreated,score:d.score});}if(!r)throw new Error(`Agent not found: ${e.assignedAgent}`);let o=this.buildTaskDescription(e,t),i=d=>{d.agentId===r.id&&this.emit("node_text",{nodeId:e.id,agentId:d.agentId,text:d.text});},a=d=>{d.agentId===r.id&&this.emit("node_tool_start",{nodeId:e.id,agentId:d.agentId,tool:d.tool,toolId:d.toolId,args:d.args,targetPath:d.targetPath,description:d.description});},l=d=>{d.agentId===r.id&&this.emit("node_tool_end",{nodeId:e.id,agentId:d.agentId,tool:d.tool,toolId:d.toolId,success:d.success,output:d.output,outputTruncated:d.outputTruncated,args:d.args,summary:d.summary,duration:d.duration});};r.on("task_text",i),r.on("task_tool_start",a),r.on("task_tool_end",l);let c=await Promise.race([r.executeTask(o,void 0,void 0,{abortSignal:t.abortSignal}),this.createTimeout(t.timeout,e.id)]).finally(()=>{r.off("task_text",i),r.off("task_tool_start",a),r.off("task_tool_end",l);}),u=Date.now()-n;return {output:c.output,data:c.data,tokenUsage:c.tokenUsage??{input:0,output:0,total:0},duration:u,toolCalls:c.toolCalls}}buildTaskDescription(e,t){if(this.rgpsDataFlowManager)return this.rgpsDataFlowManager.buildTaskDescription(e.id,e.task.description);let n=e.task.description;if(Object.keys(t.inputs).length>0){n+=`
3277
+ }`}parseSummaryResponse(e){try{let t=e.match(/\{[\s\S]*\}/);if(t){let n=JSON.parse(t[0]);return {finalDecision:n.finalDecision||"\u534F\u5546\u5B8C\u6210",adoptedSuggestions:n.adoptedSuggestions||[],deferredDisagreements:n.deferredDisagreements||[],executionNotes:n.executionNotes||[]}}}catch{p.warn("NEGOTIATION_SUMMARIZER","Failed to parse response");}return {finalDecision:e.slice(0,500),adoptedSuggestions:[],deferredDisagreements:[],executionNotes:[]}}};function jb(s){return new Vp(s)}var WE={defaultMaxRetries:2,defaultMutable:true,autoCalculateLevels:true,validateDAG:true},Yp=class extends EventEmitter{config;dags=new Map;dagCounter=0;constructor(e){super(),this.config={...WE,...e};}createFromProposal(e,t){let n=this.generateDAGId(e.id),r=new Map;for(let c of e.subtasks){let u=this.createNode(c,{mutable:t?.mutable??this.config.defaultMutable,maxRetries:t?.maxRetries??this.config.defaultMaxRetries});r.set(u.id,u);}let o=this.config.autoCalculateLevels?this.calculateLevels(r):e.executionLevels;for(let c=0;c<o.length;c++)for(let u of o[c]){let d=r.get(u);d&&(d.level=c);}let i=this.calculateCriticalPath(r,o),a=this.calculateEstimatedTime(r,o),l={id:n,proposalId:e.id,nodes:r,version:1,history:[],status:"planning",analysis:{levels:o,maxParallelism:Math.max(...o.map(c=>c.length)),criticalPath:i,estimatedTotalTime:a},context:new Map(Object.entries(t?.initialContext??{})),createdAt:Date.now()};if(this.config.validateDAG){let c=this.validate(l);c.valid||this.emit("validation_failed",{dagId:n,errors:c.errors});}return this.dags.set(n,l),this.emit("dag_created",{dagId:n,proposalId:e.id,nodeCount:r.size,levels:o.length}),l}createNode(e,t){return {id:e.id,task:{description:e.description,inputMapping:e.inputMapping??{},outputKey:e.outputKey??`output_${e.id}`,estimatedTime:e.estimatedTime,estimatedTokens:e.estimatedTokens,requiredCapabilities:e.requiredCapabilities},assignedAgent:e.assignedAgent??"",dependencies:e.dependencies,status:"pending",level:0,retryCount:0,maxRetries:t.maxRetries,mutable:t.mutable,version:1}}calculateLevels(e){let t=[],n=new Map,r=new Set;for(let[o,i]of e)n.set(o,i.dependencies.length);for(;r.size<e.size;){let o=[];for(let[i,a]of n)a===0&&!r.has(i)&&o.push(i);if(o.length===0)break;for(let i of o){r.add(i);for(let[a,l]of e)l.dependencies.includes(i)&&n.set(a,(n.get(a)??1)-1);}t.push(o);}return t}calculateCriticalPath(e,t){let n=[];for(let r of t){let o=0,i="";for(let a of r){let l=e.get(a);l&&l.task.estimatedTime>o&&(o=l.task.estimatedTime,i=a);}i&&n.push(i);}return n}calculateEstimatedTime(e,t){let n=0;for(let r of t){let o=0;for(let i of r){let a=e.get(i);a&&(o=Math.max(o,a.task.estimatedTime));}n+=o;}return n}validate(e){let t=[],n=[],r=[],o=[];for(let[a,l]of e.nodes){l.assignedAgent||n.push(`Node ${a} has no assigned agent`);let c=l.dependencies.filter(d=>!e.nodes.has(d));c.length>0&&(t.push(`Node ${a} has missing dependencies: ${c.join(", ")}`),o.push({nodeId:a,missingDeps:c}));let u=false;for(let[d,m]of e.nodes)if(d!==a&&m.dependencies.includes(a)){u=true;break}l.dependencies.length===0&&!u&&e.nodes.size>1&&e.nodes.size>1&&e.analysis.levels[0]?.length!==e.nodes.size&&r.push(a);}let i=this.detectCycle(e);return i&&t.push("DAG contains a cycle"),{valid:t.length===0,errors:t,warnings:n,hasCycle:i,orphanNodes:r,missingDependencies:o}}detectCycle(e){let t=new Set,n=new Set,r=o=>{if(t.add(o),n.add(o),!e.nodes.get(o))return false;for(let[a,l]of e.nodes)if(l.dependencies.includes(o)){if(t.has(a)){if(n.has(a))return true}else if(r(a))return true}return n.delete(o),false};for(let o of e.nodes.keys())if(!t.has(o)&&r(o))return true;return false}addNode(e,t,n="system"){let r=this.dags.get(e);if(!r)return null;let o={...t,status:"pending",retryCount:0,version:1};return r.nodes.set(t.id,o),r.version++,this.recordHistory(r,"add",t.id,"Node added",n,void 0,o),this.config.autoCalculateLevels&&this.recalculateAnalysis(r),this.emit("node_added",{dagId:e,nodeId:t.id,version:r.version}),o}removeNode(e,t,n="system"){let r=this.dags.get(e);if(!r)return false;let o=r.nodes.get(t);if(!o)return false;if(!o.mutable)return this.emit("modification_rejected",{dagId:e,nodeId:t,reason:"Node is immutable"}),false;for(let[i,a]of r.nodes)a.dependencies.includes(t)&&(a.dependencies=a.dependencies.filter(l=>l!==t),a.version++);return r.nodes.delete(t),r.version++,this.recordHistory(r,"remove",t,"Node removed",n,o,void 0),this.config.autoCalculateLevels&&this.recalculateAnalysis(r),this.emit("node_removed",{dagId:e,nodeId:t,version:r.version}),true}modifyNode(e,t,n,r="system"){let o=this.dags.get(e);if(!o)return false;let i=o.nodes.get(t);if(!i)return false;if(!i.mutable)return this.emit("modification_rejected",{dagId:e,nodeId:t,reason:"Node is immutable"}),false;let a={...i};return n.task&&(i.task={...i.task,...n.task}),n.dependencies&&(i.dependencies=n.dependencies),n.assignedAgent!==void 0&&(i.assignedAgent=n.assignedAgent),i.version++,o.version++,this.recordHistory(o,"modify",t,"Node modified",r,a,i),n.dependencies&&this.config.autoCalculateLevels&&this.recalculateAnalysis(o),this.emit("node_modified",{dagId:e,nodeId:t,updates:n,version:o.version}),true}reassignAgent(e,t,n,r="system"){let o=this.dags.get(e);if(!o)return false;let i=o.nodes.get(t);if(!i)return false;let a=i.assignedAgent;return i.assignedAgent=n,i.version++,o.version++,this.recordHistory(o,"reassign",t,`Agent reassigned from ${a} to ${n}`,r,a,n),this.emit("agent_reassigned",{dagId:e,nodeId:t,previousAgent:a,newAgent:n,version:o.version}),true}reorderDependencies(e,t,n,r="system"){return this.modifyNode(e,t,{dependencies:n},r)}recordHistory(e,t,n,r,o,i,a){let l={version:e.version,action:t,nodeId:n,reason:r,previousValue:i,newValue:a,operator:o,timestamp:Date.now()};e.history.push(l);}recalculateAnalysis(e){let t=this.calculateLevels(e.nodes);for(let n=0;n<t.length;n++)for(let r of t[n]){let o=e.nodes.get(r);o&&(o.level=n);}e.analysis={levels:t,maxParallelism:Math.max(...t.map(n=>n.length),0),criticalPath:this.calculateCriticalPath(e.nodes,t),estimatedTotalTime:this.calculateEstimatedTime(e.nodes,t)};}getDAG(e){return this.dags.get(e)}getReadyNodes(e){let t=this.dags.get(e);if(!t)return [];let n=[];for(let r of t.nodes.values()){if(r.status!=="pending")continue;r.dependencies.every(i=>t.nodes.get(i)?.status==="completed")&&n.push(r);}return n}updateNodeStatus(e,t,n,r,o){let i=this.dags.get(e);if(!i)return false;let a=i.nodes.get(t);return a?(a.status=n,n==="running"?a.startedAt=Date.now():(n==="completed"||n==="failed")&&(a.completedAt=Date.now()),r&&(a.result=r),o&&(a.error=o),this.emit("node_status_changed",{dagId:e,nodeId:t,status:n,result:r,error:o}),true):false}cloneDAG(e,t){let n=this.dags.get(e);if(!n)return null;let r=t??`${e}-clone-${Date.now()}`,o=new Map;for(let[a,l]of n.nodes)o.set(a,{...l});let i={...n,id:r,nodes:o,history:[...n.history],context:new Map(n.context),createdAt:Date.now()};return this.dags.set(r,i),this.emit("dag_cloned",{originalId:e,clonedId:r}),i}deleteDAG(e){let t=this.dags.delete(e);return t&&this.emit("dag_deleted",{dagId:e}),t}generateDAGId(e){return `dag-${e}-${++this.dagCounter}`}getStats(){let e=0,t=0;for(let n of this.dags.values())n.status==="executing"||n.status==="replanning"?e++:n.status==="completed"&&t++;return {totalDAGs:this.dags.size,activeDAGs:e,completedDAGs:t}}};function Gb(s){return new Yp(s)}Z();var zE={maxConcurrency:5,nodeTimeout:12e4,allowPartialFailure:true,retryCount:2,retryDelay:1e3,enablePeerReview:true,enableReplanning:true,maxReplanAttempts:3,progressUpdateInterval:1e3,collectDetailedMetrics:true,enableProgressiveExpansion:true},Xp=class extends EventEmitter{registry;dagBuilder;config;agentMatcher;progressiveManager;rgpsDataFlowManager;executionStates=new Map;progressTimers=new Map;currentAbortSignal;constructor(e,t,n){super(),this.registry=e,this.dagBuilder=t,this.agentMatcher=n?.agentMatcher,this.progressiveManager=n?.progressiveManager,this.rgpsDataFlowManager=n?.rgpsDataFlowManager,this.config={...zE,...n};}async execute(e,t){let n=this.dagBuilder.getDAG(e);if(!n)throw new Error(`DAG not found: ${e}`);this.currentAbortSignal=t;let r=this.initializeState(e);n.status="executing",n.startedAt=Date.now(),this.emit("execution_started",{dagId:e,nodeCount:n.nodes.size,levels:n.analysis.levels.length}),this.startProgressUpdates(e,n),this.rgpsDataFlowManager&&this.rgpsDataFlowManager.inferFromDAG(n);try{for(let i=0;i<n.analysis.levels.length&&!r.cancelled;i++){let a=n.analysis.levels[i];this.emit("level_started",{dagId:e,level:i,nodeIds:a}),await this.executeLevel(n,r,i,a),this.config.enableReplanning&&r.failedNodes.size>0&&await this.checkReplanCondition(n,r)&&r.replanCount<this.config.maxReplanAttempts&&await this.triggerReplan(n,r),this.emit("level_completed",{dagId:e,level:i,completedNodes:Array.from(r.completedNodes),failedNodes:Array.from(r.failedNodes)});}}finally{this.stopProgressUpdates(e);}let o=this.buildResult(n,r);return n.status=o.success?"completed":"failed",n.completedAt=Date.now(),this.executionStates.delete(e),this.emit("execution_completed",{dagId:e,result:o}),o}initializeState(e){let t={dagId:e,running:true,startedAt:Date.now(),runningNodes:new Set,completedNodes:new Set,failedNodes:new Set,skippedNodes:new Set,nodeResults:new Map,errors:[],replanCount:0,cancelled:false};return this.executionStates.set(e,t),t}async executeLevel(e,t,n,r){let o=r.filter(a=>{let l=e.nodes.get(a);if(!l)return false;let c=l.dependencies.every(d=>t.completedNodes.has(d));return l.dependencies.some(d=>t.failedNodes.has(d))&&!this.config.allowPartialFailure?(t.skippedNodes.add(a),this.dagBuilder.updateNodeStatus(e.id,a,"skipped"),false):c}),i=this.chunkArray(o,this.config.maxConcurrency);for(let a of i){if(t.cancelled)break;await Promise.all(a.map(l=>this.executeNode(e,t,l)));}}async executeNode(e,t,n){let r=e.nodes.get(n);if(r){t.runningNodes.add(n),this.dagBuilder.updateNodeStatus(e.id,n,"running"),this.emit("node_started",{dagId:e.id,nodeId:n,agentId:r.assignedAgent});try{let o=this.prepareContext(e,r),i=await this.runNode(r,o);if(t.runningNodes.delete(n),t.completedNodes.add(n),t.nodeResults.set(n,i),e.context.set(r.task.outputKey,i.output),i.data)for(let[a,l]of Object.entries(i.data))e.context.set(`${r.task.outputKey}.${a}`,l);this.rgpsDataFlowManager&&this.rgpsDataFlowManager.storeNodeOutput(n,r.task.outputKey,i.output),this.dagBuilder.updateNodeStatus(e.id,n,"completed",i),this.emit("node_completed",{dagId:e.id,nodeId:n,result:i}),this.config.enableProgressiveExpansion&&this.progressiveManager&&await this.checkProgressiveExpansion(e,r,i);}catch(o){let i=o instanceof Error?o.message:String(o);if(r.retryCount<r.maxRetries)return r.retryCount++,this.emit("node_retry",{dagId:e.id,nodeId:n,attempt:r.retryCount,error:i}),await new Promise(a=>setTimeout(a,this.config.retryDelay)),this.executeNode(e,t,n);t.runningNodes.delete(n),t.failedNodes.add(n),t.errors.push({nodeId:n,error:i,timestamp:Date.now()}),this.dagBuilder.updateNodeStatus(e.id,n,"failed",void 0,i),this.emit("node_failed",{dagId:e.id,nodeId:n,error:i,retries:r.retryCount});}}}prepareContext(e,t){let n={};for(let[r,o]of Object.entries(t.task.inputMapping))n[r]=e.context.get(o);for(let r of t.dependencies){let o=e.nodes.get(r);o&&(n[`dep_${r}`]=e.context.get(o.task.outputKey));}return {inputs:n,dagContext:e.context,timeout:this.config.nodeTimeout,abortSignal:this.currentAbortSignal}}async runNode(e,t){let n=Date.now(),r=this.registry.getInstance(e.assignedAgent);if(!r&&this.agentMatcher){p.info("DAG_EXECUTOR","Agent not found, using matcher",{nodeId:e.id,assignedAgent:e.assignedAgent});let d=await this.agentMatcher.matchOrCreate({subtask:{id:e.id,description:e.task.description,dependencies:e.dependencies,estimatedTime:e.task.estimatedTime??6e4,estimatedTokens:e.task.estimatedTokens??5e3,requiredCapabilities:e.task.requiredCapabilities},requiredCapabilities:e.task.requiredCapabilities});r=d.agent,e.assignedAgent=r.id,this.emit("agent_matched",{nodeId:e.id,agentId:r.id,isNewlyCreated:d.isNewlyCreated,score:d.score});}if(!r)throw new Error(`Agent not found: ${e.assignedAgent}`);let o=this.buildTaskDescription(e,t),i=d=>{d.agentId===r.id&&this.emit("node_text",{nodeId:e.id,agentId:d.agentId,text:d.text});},a=d=>{d.agentId===r.id&&this.emit("node_tool_start",{nodeId:e.id,agentId:d.agentId,tool:d.tool,toolId:d.toolId,args:d.args,targetPath:d.targetPath,description:d.description});},l=d=>{d.agentId===r.id&&this.emit("node_tool_end",{nodeId:e.id,agentId:d.agentId,tool:d.tool,toolId:d.toolId,success:d.success,output:d.output,outputTruncated:d.outputTruncated,args:d.args,summary:d.summary,duration:d.duration});};r.on("task_text",i),r.on("task_tool_start",a),r.on("task_tool_end",l);let c=await Promise.race([r.executeTask(o,void 0,void 0,{abortSignal:t.abortSignal}),this.createTimeout(t.timeout,e.id)]).finally(()=>{r.off("task_text",i),r.off("task_tool_start",a),r.off("task_tool_end",l);}),u=Date.now()-n;return {output:c.output,data:c.data,tokenUsage:c.tokenUsage??{input:0,output:0,total:0},duration:u,toolCalls:c.toolCalls}}buildTaskDescription(e,t){if(this.rgpsDataFlowManager)return this.rgpsDataFlowManager.buildTaskDescription(e.id,e.task.description);let n=e.task.description;if(Object.keys(t.inputs).length>0){n+=`
3278
3278
 
3279
3279
  ## \u8F93\u5165\u6570\u636E
3280
3280
  `;for(let[r,o]of Object.entries(t.inputs))o!==void 0&&(n+=`- ${r}: ${JSON.stringify(o)}
3281
3281
  `);}return n}createTimeout(e,t){return new Promise((n,r)=>{setTimeout(()=>{r(new Error(`Node ${t} execution timeout after ${e}ms`));},e);})}async checkReplanCondition(e,t){if(t.failedNodes.size/e.nodes.size>.3)return true;for(let r of e.analysis.criticalPath)if(t.failedNodes.has(r))return true;return false}async triggerReplan(e,t){t.replanCount++,e.status="replanning";let n={type:"node_failure",reason:`${t.failedNodes.size} nodes failed`,failedNodeId:Array.from(t.failedNodes)[0],error:t.errors[t.errors.length-1]?.error,timestamp:Date.now()};this.emit("replan_triggered",{dagId:e.id,trigger:n,attempt:t.replanCount}),this.emit("replan_required",{dagId:e.id,trigger:n,failedNodes:Array.from(t.failedNodes),completedNodes:Array.from(t.completedNodes)});}buildResult(e,t){let n=Date.now()-t.startedAt,r={total:0,byNode:new Map,byAgent:new Map};for(let[a,l]of t.nodeResults){let c=l.tokenUsage.total;r.total+=c,r.byNode.set(a,c);let u=e.nodes.get(a);if(u){let d=r.byAgent.get(u.assignedAgent)??0;r.byAgent.set(u.assignedAgent,d+c);}}let o=this.buildFinalOutput(e,t),i=t.failedNodes.size===0||this.config.allowPartialFailure&&t.completedNodes.size>0;return {dagId:e.id,success:i,completedNodes:t.completedNodes.size,failedNodes:t.failedNodes.size,skippedNodes:t.skippedNodes.size,totalDuration:n,nodeResults:t.nodeResults,finalOutput:o,errors:t.errors,replanCount:t.replanCount,tokenStats:r}}buildFinalOutput(e,t){let n=[];for(let r of e.analysis.levels)for(let o of r){let i=t.nodeResults.get(o);i&&n.push(`## ${o}
3282
3282
  ${i.output}`);}return n.join(`
3283
3283
 
3284
- `)}startProgressUpdates(e,t){let n=setInterval(()=>{let r=this.getMetrics(e);r&&this.emit("progress_updated",{dagId:e,metrics:r});},this.config.progressUpdateInterval);this.progressTimers.set(e,n);}stopProgressUpdates(e){let t=this.progressTimers.get(e);t&&(clearInterval(t),this.progressTimers.delete(e));}getMetrics(e){let t=this.dagBuilder.getDAG(e),n=this.executionStates.get(e);if(!t||!n)return null;let r=t.nodes.size,o=n.completedNodes.size,i=n.runningNodes.size,a=n.failedNodes.size,l=r-o-i-a-n.skippedNodes.size,c=o/r*100,u=Date.now()-n.startedAt,m=(o>0?u/o:t.analysis.estimatedTotalTime/r)*l,g=0;for(let f=0;f<t.analysis.levels.length;f++)if(t.analysis.levels[f].some(b=>n.runningNodes.has(b))){g=f;break}let h=Array.from(n.runningNodes).map(f=>{let v=t.nodes.get(f);return {nodeId:f,agentId:v?.assignedAgent??"",progress:50}});return {dagId:e,progress:c,currentLevel:g,totalLevels:t.analysis.levels.length,completedNodes:o,runningNodes:i,pendingNodes:l,failedNodes:a,elapsedTime:u,estimatedRemainingTime:m,currentNodes:h,updatedAt:Date.now()}}cancel(e,t="User cancelled"){let n=this.executionStates.get(e);if(!n)return false;n.cancelled=true,n.cancelReason=t;let r=this.dagBuilder.getDAG(e);return r&&(r.status="cancelled"),this.emit("execution_cancelled",{dagId:e,reason:t}),true}pause(e){let t=this.dagBuilder.getDAG(e),n=this.executionStates.get(e);return !t||!n?false:(n.cancelled=true,n.cancelReason="paused",t.status="paused",this.emit("execution_paused",{dagId:e}),true)}async resume(e){let t=this.dagBuilder.getDAG(e),n=this.executionStates.get(e);return t?(n&&n.cancelReason==="paused"&&(n.cancelled=false,n.cancelReason=void 0,t.status="executing",this.emit("execution_resumed",{dagId:e})),this.execute(e)):null}async checkProgressiveExpansion(e,t,n){if(this.progressiveManager)try{let r=await this.progressiveManager.analyzeForExpansion(e.id,t.id,t.task.description,n.output);if(r&&r.length>0){let o=await this.progressiveManager.expandDAG({dagId:e.id,triggerNodeId:t.id,subtasks:r,reason:"Discovered during execution"});o.success&&this.emit("dag_expanded",{dagId:e.id,triggerNodeId:t.id,addedNodes:o.addedNodes});}}catch(r){p.warn("DAG_EXECUTOR","Progressive expansion check failed",{error:r instanceof Error?r.message:String(r)});}}chunkArray(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}isExecuting(e){return this.executionStates.has(e)}get activeExecutionCount(){return this.executionStates.size}async insertUserRequirement(e,t){if(!this.progressiveManager)return {success:false,error:"Progressive manager not configured"};if(!this.dagBuilder.getDAG(e))return {success:false,error:`DAG not found: ${e}`};p.info("DAG_EXECUTOR","Inserting user requirement",{dagId:e,description:t.description.slice(0,50),priority:t.priority});let r=await this.progressiveManager.insertUserRequirement(e,t);return r.success&&r.addedNodes.length>0?(this.emit("user_requirement_inserted",{dagId:e,nodeId:r.addedNodes[0],description:t.description,priority:t.priority}),{success:true,nodeId:r.addedNodes[0]}):{success:false,error:r.error}}};function Wb(s,e,t){return new Xp(s,e,t)}var qE={maxReplanAttempts:3,replanTimeout:6e4,enableSmartReplanning:true,failureThreshold:.3,llmCall:void 0},Qp=class extends EventEmitter{registry;dagBuilder;config;replanHistory=new Map;constructor(e,t,n){super(),this.registry=e,this.dagBuilder=t,this.config={...qE,...n};}setLlmCall(e){this.config.llmCall=e;}async handleTrigger(e,t,n){let r=this.dagBuilder.getDAG(e);if(!r)return {success:false,reason:"DAG not found",duration:0};let o=Date.now();this.emit("replan_started",{dagId:e,trigger:t});try{let i=await this.analyzeProblem(r,t,n),a=await this.generateSuggestions(r,t,i);if(a.length===0)return {success:!1,reason:"No viable replan strategy found",duration:Date.now()-o};let l=this.selectBestSuggestion(a),c=await this.executeReplan(r,l);return this.recordHistory(e,c),this.emit("replan_completed",{dagId:e,result:c,strategy:l.strategy}),c}catch(i){let a=i instanceof Error?i.message:String(i),l={success:false,reason:`Replan failed: ${a}`,duration:Date.now()-o};return this.emit("replan_failed",{dagId:e,error:a}),l}}async analyzeProblem(e,t,n){let r=n?.failedNodes??[],o=[...r];for(let c of e.nodes.values())for(let u of r)c.dependencies.includes(u)&&!o.includes(c.id)&&o.push(c.id);let i="unknown",a=t.reason,l="medium";switch(t.type){case "node_failure":i="execution_failure",l=o.length>e.nodes.size*.3?"high":"medium";break;case "agent_unavailable":i="resource_failure",a=`Agent ${t.agentId} is unavailable`,l="high";break;case "timeout":i="timeout_failure",l="medium";break;case "resource_shortage":i="resource_failure",l="high";break;case "dependency_discovered":i="dependency_issue",l="low";break;case "scope_change":i="scope_change",l="medium";break;case "user_request":i="user_intervention",l="low";break}for(let c of e.analysis.criticalPath)if(o.includes(c)){l=l==="low"?"medium":l==="medium"?"high":"critical";break}return {failureType:i,rootCause:a,impactedNodes:o,severity:l}}async generateSuggestions(e,t,n){let r=[];if(t.type==="node_failure"||t.type==="timeout"){let o=t.failedNodeId?e.nodes.get(t.failedNodeId):null;o&&o.retryCount<o.maxRetries&&r.push({strategy:"retry",affectedNodes:[t.failedNodeId],actions:[{type:"modify",nodeId:t.failedNodeId,data:{status:"pending",retryCount:o.retryCount}}],confidence:.6,rationale:"Simple retry may resolve transient failures"});}if(t.type==="agent_unavailable"||t.type==="node_failure"){let o=t.failedNodeId??t.agentId;if(o){let i=await this.findAlternativeAgents(e,o);i.length>0&&r.push({strategy:"reassign",affectedNodes:n.impactedNodes,actions:n.impactedNodes.map(a=>({type:"reassign",nodeId:a,data:{newAgent:i[0]}})),confidence:.75,rationale:`Reassign to alternative agent: ${i[0]}`});}}if(this.canSkipNodes(e,n.impactedNodes)&&r.push({strategy:"skip",affectedNodes:n.impactedNodes,actions:n.impactedNodes.map(o=>({type:"modify",nodeId:o,data:{status:"skipped"}})),confidence:.5,rationale:"Skip non-critical failed nodes to continue execution"}),this.config.enableSmartReplanning&&this.config.llmCall){let o=await this.generateSmartSuggestion(e,t,n);o&&r.push(o);}return (n.severity==="high"||n.severity==="critical")&&r.push({strategy:"decompose",affectedNodes:n.impactedNodes,actions:n.impactedNodes.map(o=>({type:"modify",nodeId:o,data:{decompose:true}})),confidence:.65,rationale:"Decompose complex tasks into smaller subtasks"}),r}async findAlternativeAgents(e,t){let n=e.nodes.get(t);if(!n)return [];let r=n.assignedAgent,o=[],i=this.registry.listAll();for(let a of i)a.id!==r&&a.status==="idle"&&o.push(a.id);return o}canSkipNodes(e,t){for(let r of t)if(e.analysis.criticalPath.includes(r))return false;return Array.from(e.nodes.keys()).filter(r=>!t.includes(r)).length>0}async generateSmartSuggestion(e,t,n){if(!this.config.llmCall)return null;let r=`
3284
+ `)}startProgressUpdates(e,t){let n=setInterval(()=>{let r=this.getMetrics(e);r&&this.emit("progress_updated",{dagId:e,metrics:r});},this.config.progressUpdateInterval);this.progressTimers.set(e,n);}stopProgressUpdates(e){let t=this.progressTimers.get(e);t&&(clearInterval(t),this.progressTimers.delete(e));}getMetrics(e){let t=this.dagBuilder.getDAG(e),n=this.executionStates.get(e);if(!t||!n)return null;let r=t.nodes.size,o=n.completedNodes.size,i=n.runningNodes.size,a=n.failedNodes.size,l=r-o-i-a-n.skippedNodes.size,c=o/r*100,u=Date.now()-n.startedAt,m=(o>0?u/o:t.analysis.estimatedTotalTime/r)*l,g=0;for(let f=0;f<t.analysis.levels.length;f++)if(t.analysis.levels[f].some(b=>n.runningNodes.has(b))){g=f;break}let h=Array.from(n.runningNodes).map(f=>{let v=t.nodes.get(f);return {nodeId:f,agentId:v?.assignedAgent??"",progress:50}});return {dagId:e,progress:c,currentLevel:g,totalLevels:t.analysis.levels.length,completedNodes:o,runningNodes:i,pendingNodes:l,failedNodes:a,elapsedTime:u,estimatedRemainingTime:m,currentNodes:h,updatedAt:Date.now()}}cancel(e,t="User cancelled"){let n=this.executionStates.get(e);if(!n)return false;n.cancelled=true,n.cancelReason=t;let r=this.dagBuilder.getDAG(e);return r&&(r.status="cancelled"),this.emit("execution_cancelled",{dagId:e,reason:t}),true}pause(e){let t=this.dagBuilder.getDAG(e),n=this.executionStates.get(e);return !t||!n?false:(n.cancelled=true,n.cancelReason="paused",t.status="paused",this.emit("execution_paused",{dagId:e}),true)}async resume(e){let t=this.dagBuilder.getDAG(e),n=this.executionStates.get(e);return t?(n&&n.cancelReason==="paused"&&(n.cancelled=false,n.cancelReason=void 0,t.status="executing",this.emit("execution_resumed",{dagId:e})),this.execute(e)):null}async checkProgressiveExpansion(e,t,n){if(this.progressiveManager)try{let r=await this.progressiveManager.analyzeForExpansion(e.id,t.id,t.task.description,n.output);if(r&&r.length>0){let o=await this.progressiveManager.expandDAG({dagId:e.id,triggerNodeId:t.id,subtasks:r,reason:"Discovered during execution"});o.success&&this.emit("dag_expanded",{dagId:e.id,triggerNodeId:t.id,addedNodes:o.addedNodes});}}catch(r){p.warn("DAG_EXECUTOR","Progressive expansion check failed",{error:r instanceof Error?r.message:String(r)});}}chunkArray(e,t){let n=[];for(let r=0;r<e.length;r+=t)n.push(e.slice(r,r+t));return n}isExecuting(e){return this.executionStates.has(e)}get activeExecutionCount(){return this.executionStates.size}async insertUserRequirement(e,t){if(!this.progressiveManager)return {success:false,error:"Progressive manager not configured"};if(!this.dagBuilder.getDAG(e))return {success:false,error:`DAG not found: ${e}`};p.info("DAG_EXECUTOR","Inserting user requirement",{dagId:e,description:t.description.slice(0,50),priority:t.priority});let r=await this.progressiveManager.insertUserRequirement(e,t);return r.success&&r.addedNodes.length>0?(this.emit("user_requirement_inserted",{dagId:e,nodeId:r.addedNodes[0],description:t.description,priority:t.priority}),{success:true,nodeId:r.addedNodes[0]}):{success:false,error:r.error}}};function Wb(s,e,t){return new Xp(s,e,t)}var KE={maxReplanAttempts:3,replanTimeout:6e4,enableSmartReplanning:true,failureThreshold:.3,llmCall:void 0},Qp=class extends EventEmitter{registry;dagBuilder;config;replanHistory=new Map;constructor(e,t,n){super(),this.registry=e,this.dagBuilder=t,this.config={...KE,...n};}setLlmCall(e){this.config.llmCall=e;}async handleTrigger(e,t,n){let r=this.dagBuilder.getDAG(e);if(!r)return {success:false,reason:"DAG not found",duration:0};let o=Date.now();this.emit("replan_started",{dagId:e,trigger:t});try{let i=await this.analyzeProblem(r,t,n),a=await this.generateSuggestions(r,t,i);if(a.length===0)return {success:!1,reason:"No viable replan strategy found",duration:Date.now()-o};let l=this.selectBestSuggestion(a),c=await this.executeReplan(r,l);return this.recordHistory(e,c),this.emit("replan_completed",{dagId:e,result:c,strategy:l.strategy}),c}catch(i){let a=i instanceof Error?i.message:String(i),l={success:false,reason:`Replan failed: ${a}`,duration:Date.now()-o};return this.emit("replan_failed",{dagId:e,error:a}),l}}async analyzeProblem(e,t,n){let r=n?.failedNodes??[],o=[...r];for(let c of e.nodes.values())for(let u of r)c.dependencies.includes(u)&&!o.includes(c.id)&&o.push(c.id);let i="unknown",a=t.reason,l="medium";switch(t.type){case "node_failure":i="execution_failure",l=o.length>e.nodes.size*.3?"high":"medium";break;case "agent_unavailable":i="resource_failure",a=`Agent ${t.agentId} is unavailable`,l="high";break;case "timeout":i="timeout_failure",l="medium";break;case "resource_shortage":i="resource_failure",l="high";break;case "dependency_discovered":i="dependency_issue",l="low";break;case "scope_change":i="scope_change",l="medium";break;case "user_request":i="user_intervention",l="low";break}for(let c of e.analysis.criticalPath)if(o.includes(c)){l=l==="low"?"medium":l==="medium"?"high":"critical";break}return {failureType:i,rootCause:a,impactedNodes:o,severity:l}}async generateSuggestions(e,t,n){let r=[];if(t.type==="node_failure"||t.type==="timeout"){let o=t.failedNodeId?e.nodes.get(t.failedNodeId):null;o&&o.retryCount<o.maxRetries&&r.push({strategy:"retry",affectedNodes:[t.failedNodeId],actions:[{type:"modify",nodeId:t.failedNodeId,data:{status:"pending",retryCount:o.retryCount}}],confidence:.6,rationale:"Simple retry may resolve transient failures"});}if(t.type==="agent_unavailable"||t.type==="node_failure"){let o=t.failedNodeId??t.agentId;if(o){let i=await this.findAlternativeAgents(e,o);i.length>0&&r.push({strategy:"reassign",affectedNodes:n.impactedNodes,actions:n.impactedNodes.map(a=>({type:"reassign",nodeId:a,data:{newAgent:i[0]}})),confidence:.75,rationale:`Reassign to alternative agent: ${i[0]}`});}}if(this.canSkipNodes(e,n.impactedNodes)&&r.push({strategy:"skip",affectedNodes:n.impactedNodes,actions:n.impactedNodes.map(o=>({type:"modify",nodeId:o,data:{status:"skipped"}})),confidence:.5,rationale:"Skip non-critical failed nodes to continue execution"}),this.config.enableSmartReplanning&&this.config.llmCall){let o=await this.generateSmartSuggestion(e,t,n);o&&r.push(o);}return (n.severity==="high"||n.severity==="critical")&&r.push({strategy:"decompose",affectedNodes:n.impactedNodes,actions:n.impactedNodes.map(o=>({type:"modify",nodeId:o,data:{decompose:true}})),confidence:.65,rationale:"Decompose complex tasks into smaller subtasks"}),r}async findAlternativeAgents(e,t){let n=e.nodes.get(t);if(!n)return [];let r=n.assignedAgent,o=[],i=this.registry.listAll();for(let a of i)a.id!==r&&a.status==="idle"&&o.push(a.id);return o}canSkipNodes(e,t){for(let r of t)if(e.analysis.criticalPath.includes(r))return false;return Array.from(e.nodes.keys()).filter(r=>!t.includes(r)).length>0}async generateSmartSuggestion(e,t,n){if(!this.config.llmCall)return null;let r=`
3285
3285
  \u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u6267\u884C\u91CD\u89C4\u5212\u4E13\u5BB6\u3002\u8BF7\u5206\u6790\u4EE5\u4E0B\u6267\u884C\u5931\u8D25\u60C5\u51B5\uFF0C\u5E76\u63D0\u4F9B\u91CD\u89C4\u5212\u5EFA\u8BAE\u3002
3286
3286
 
3287
3287
  ## \u5F53\u524D DAG \u72B6\u6001
@@ -3313,7 +3313,7 @@ ${i.output}`);}return n.join(`
3313
3313
  "confidence": 0.8,
3314
3314
  "rationale": "\u5EFA\u8BAE\u7406\u7531"
3315
3315
  }
3316
- `;try{let i=(await this.config.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u6267\u884C\u91CD\u89C4\u5212\u4E13\u5BB6\uFF0C\u64C5\u957F\u5904\u7406\u590D\u6742\u4EFB\u52A1\u6267\u884C\u4E2D\u7684\u5931\u8D25\u548C\u5F02\u5E38\u3002",r)).match(/\{[\s\S]*\}/);if(i){let a=JSON.parse(i[0]);return {strategy:a.strategy,affectedNodes:n.impactedNodes,actions:a.actions,confidence:a.confidence??.7,rationale:a.rationale??"LLM-generated suggestion"}}}catch(o){this.emit("smart_replan_failed",{error:o});}return null}selectBestSuggestion(e){return e.sort((t,n)=>n.confidence-t.confidence),e[0]}async executeReplan(e,t){let n=Date.now(),r=[],o=[],i=[],a=[];try{for(let l of t.actions)switch(l.type){case "add":let c=this.dagBuilder.addNode(e.id,l.data,"replanning_engine");c&&o.push(c.id);break;case "remove":this.dagBuilder.removeNode(e.id,l.nodeId,"replanning_engine")&&i.push(l.nodeId);break;case "modify":e.nodes.get(l.nodeId)&&(l.data.status&&this.dagBuilder.updateNodeStatus(e.id,l.nodeId,l.data.status),r.push(l.nodeId));break;case "reassign":let d=e.nodes.get(l.nodeId);if(d&&l.data.newAgent){let m=d.assignedAgent;this.dagBuilder.reassignAgent(e.id,l.nodeId,l.data.newAgent,"replanning_engine")&&a.push({nodeId:l.nodeId,previousAgent:m,newAgent:l.data.newAgent});}break;case "reorder":l.data.dependencies&&(this.dagBuilder.reorderDependencies(e.id,l.nodeId,l.data.dependencies,"replanning_engine"),r.push(l.nodeId));break}return this.dagBuilder.recalculateAnalysis(e),{success:!0,reason:t.rationale,newVersion:e.version,modifiedNodes:r,addedNodes:o,removedNodes:i,reassignments:a,duration:Date.now()-n}}catch(l){return {success:false,reason:`Replan execution failed: ${l instanceof Error?l.message:String(l)}`,duration:Date.now()-n}}}recordHistory(e,t){this.replanHistory.has(e)||this.replanHistory.set(e,[]),this.replanHistory.get(e).push(t);}getHistory(e){return this.replanHistory.get(e)??[]}clearHistory(e){this.replanHistory.delete(e);}setLLMCall(e){this.config.llmCall=e;}shouldTriggerReplan(e,t,n){return this.getHistory(e).length>=this.config.maxReplanAttempts?false:t/n>=this.config.failureThreshold}};function Hb(s,e,t){return new Qp(s,e,t)}var JE={reviewersPerNode:2,reviewTimeout:6e4,enableAutoReview:true,minQualityThreshold:3,excludeSelfReview:true,llmCall:void 0},Zp=class extends EventEmitter{registry;config;pendingRequests=new Map;reviewStatuses=new Map;reviewResults=new Map;requestCounter=0;constructor(e,t){super(),this.registry=e,this.config={...JE,...t};}setLlmCall(e){this.config.llmCall=e;}async requestReview(e,t,n){let r=e.nodes.get(t);if(!r)throw new Error(`Node not found: ${t}`);let o=this.selectReviewers(e,r),i=[];for(let a of o){let l={id:this.generateRequestId(),dagId:e.id,nodeId:t,revieweeId:r.assignedAgent,reviewerId:a,result:n,taskDescription:r.task.description,requestedAt:Date.now()};this.pendingRequests.set(l.id,l),this.reviewStatuses.set(l.id,{requestId:l.id,status:"pending"}),i.push(l),this.emit("review_requested",{requestId:l.id,nodeId:t,reviewerId:a});}return i}selectReviewers(e,t){let n=[],r=new Set;this.config.excludeSelfReview&&r.add(t.assignedAgent);let o=t.level,i=[];for(let[l,c]of e.nodes){if(r.has(c.assignedAgent)||c.status!=="completed")continue;let d=1/(1+Math.abs(c.level-o));i.push({agentId:c.assignedAgent,priority:d});}i.sort((l,c)=>c.priority-l.priority);let a=new Set;for(let l of i)if(!a.has(l.agentId)&&(a.add(l.agentId),n.push(l.agentId),n.length>=this.config.reviewersPerNode))break;if(n.length<this.config.reviewersPerNode){let l=this.registry.listAll();for(let c of l)if(!r.has(c.id)&&!a.has(c.id)&&(n.push(c.id),a.add(c.id),n.length>=this.config.reviewersPerNode))break}return n.length===0&&n.push("__llm_auto_reviewer__"),n}async executeReview(e){let t=this.pendingRequests.get(e);if(!t)return null;let n=this.reviewStatuses.get(e);if(!n)return null;n.status="in_progress",this.emit("review_started",{requestId:e,nodeId:t.nodeId,reviewerId:t.reviewerId});try{let r;if(t.reviewerId==="__llm_auto_reviewer__")this.config.llmCall?r=await this.conductLLMReview(t):r=this.conductAutoReview(t);else {let o=this.registry.getInstance(t.reviewerId);o&&typeof o.conductPeerReview=="function"?r=await Promise.race([o.conductPeerReview(t),this.createTimeout(this.config.reviewTimeout)]):this.config.llmCall?r=await this.conductLLMReview(t):r=this.conductAutoReview(t);}return n.status="completed",n.result=r,this.reviewResults.has(t.nodeId)||this.reviewResults.set(t.nodeId,[]),this.reviewResults.get(t.nodeId).push(r),this.emit("review_completed",{requestId:e,result:r}),this.pendingRequests.delete(e),r}catch(r){let o=r instanceof Error?r.message:String(r);return n.status="failed",n.error=o,this.emit("review_failed",{requestId:e,error:o}),null}}async conductLLMReview(e){if(!this.config.llmCall)return this.conductAutoReview(e);let t=`
3316
+ `;try{let i=(await this.config.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u6267\u884C\u91CD\u89C4\u5212\u4E13\u5BB6\uFF0C\u64C5\u957F\u5904\u7406\u590D\u6742\u4EFB\u52A1\u6267\u884C\u4E2D\u7684\u5931\u8D25\u548C\u5F02\u5E38\u3002",r)).match(/\{[\s\S]*\}/);if(i){let a=JSON.parse(i[0]);return {strategy:a.strategy,affectedNodes:n.impactedNodes,actions:a.actions,confidence:a.confidence??.7,rationale:a.rationale??"LLM-generated suggestion"}}}catch(o){this.emit("smart_replan_failed",{error:o});}return null}selectBestSuggestion(e){return e.sort((t,n)=>n.confidence-t.confidence),e[0]}async executeReplan(e,t){let n=Date.now(),r=[],o=[],i=[],a=[];try{for(let l of t.actions)switch(l.type){case "add":let c=this.dagBuilder.addNode(e.id,l.data,"replanning_engine");c&&o.push(c.id);break;case "remove":this.dagBuilder.removeNode(e.id,l.nodeId,"replanning_engine")&&i.push(l.nodeId);break;case "modify":e.nodes.get(l.nodeId)&&(l.data.status&&this.dagBuilder.updateNodeStatus(e.id,l.nodeId,l.data.status),r.push(l.nodeId));break;case "reassign":let d=e.nodes.get(l.nodeId);if(d&&l.data.newAgent){let m=d.assignedAgent;this.dagBuilder.reassignAgent(e.id,l.nodeId,l.data.newAgent,"replanning_engine")&&a.push({nodeId:l.nodeId,previousAgent:m,newAgent:l.data.newAgent});}break;case "reorder":l.data.dependencies&&(this.dagBuilder.reorderDependencies(e.id,l.nodeId,l.data.dependencies,"replanning_engine"),r.push(l.nodeId));break}return this.dagBuilder.recalculateAnalysis(e),{success:!0,reason:t.rationale,newVersion:e.version,modifiedNodes:r,addedNodes:o,removedNodes:i,reassignments:a,duration:Date.now()-n}}catch(l){return {success:false,reason:`Replan execution failed: ${l instanceof Error?l.message:String(l)}`,duration:Date.now()-n}}}recordHistory(e,t){this.replanHistory.has(e)||this.replanHistory.set(e,[]),this.replanHistory.get(e).push(t);}getHistory(e){return this.replanHistory.get(e)??[]}clearHistory(e){this.replanHistory.delete(e);}setLLMCall(e){this.config.llmCall=e;}shouldTriggerReplan(e,t,n){return this.getHistory(e).length>=this.config.maxReplanAttempts?false:t/n>=this.config.failureThreshold}};function Hb(s,e,t){return new Qp(s,e,t)}var VE={reviewersPerNode:2,reviewTimeout:6e4,enableAutoReview:true,minQualityThreshold:3,excludeSelfReview:true,llmCall:void 0},Zp=class extends EventEmitter{registry;config;pendingRequests=new Map;reviewStatuses=new Map;reviewResults=new Map;requestCounter=0;constructor(e,t){super(),this.registry=e,this.config={...VE,...t};}setLlmCall(e){this.config.llmCall=e;}async requestReview(e,t,n){let r=e.nodes.get(t);if(!r)throw new Error(`Node not found: ${t}`);let o=this.selectReviewers(e,r),i=[];for(let a of o){let l={id:this.generateRequestId(),dagId:e.id,nodeId:t,revieweeId:r.assignedAgent,reviewerId:a,result:n,taskDescription:r.task.description,requestedAt:Date.now()};this.pendingRequests.set(l.id,l),this.reviewStatuses.set(l.id,{requestId:l.id,status:"pending"}),i.push(l),this.emit("review_requested",{requestId:l.id,nodeId:t,reviewerId:a});}return i}selectReviewers(e,t){let n=[],r=new Set;this.config.excludeSelfReview&&r.add(t.assignedAgent);let o=t.level,i=[];for(let[l,c]of e.nodes){if(r.has(c.assignedAgent)||c.status!=="completed")continue;let d=1/(1+Math.abs(c.level-o));i.push({agentId:c.assignedAgent,priority:d});}i.sort((l,c)=>c.priority-l.priority);let a=new Set;for(let l of i)if(!a.has(l.agentId)&&(a.add(l.agentId),n.push(l.agentId),n.length>=this.config.reviewersPerNode))break;if(n.length<this.config.reviewersPerNode){let l=this.registry.listAll();for(let c of l)if(!r.has(c.id)&&!a.has(c.id)&&(n.push(c.id),a.add(c.id),n.length>=this.config.reviewersPerNode))break}return n.length===0&&n.push("__llm_auto_reviewer__"),n}async executeReview(e){let t=this.pendingRequests.get(e);if(!t)return null;let n=this.reviewStatuses.get(e);if(!n)return null;n.status="in_progress",this.emit("review_started",{requestId:e,nodeId:t.nodeId,reviewerId:t.reviewerId});try{let r;if(t.reviewerId==="__llm_auto_reviewer__")this.config.llmCall?r=await this.conductLLMReview(t):r=this.conductAutoReview(t);else {let o=this.registry.getInstance(t.reviewerId);o&&typeof o.conductPeerReview=="function"?r=await Promise.race([o.conductPeerReview(t),this.createTimeout(this.config.reviewTimeout)]):this.config.llmCall?r=await this.conductLLMReview(t):r=this.conductAutoReview(t);}return n.status="completed",n.result=r,this.reviewResults.has(t.nodeId)||this.reviewResults.set(t.nodeId,[]),this.reviewResults.get(t.nodeId).push(r),this.emit("review_completed",{requestId:e,result:r}),this.pendingRequests.delete(e),r}catch(r){let o=r instanceof Error?r.message:String(r);return n.status="failed",n.error=o,this.emit("review_failed",{requestId:e,error:o}),null}}async conductLLMReview(e){if(!this.config.llmCall)return this.conductAutoReview(e);let t=`
3317
3317
  \u4F60\u662F\u4E00\u4E2A\u4EE3\u7801/\u4EFB\u52A1\u8BC4\u5BA1\u4E13\u5BB6\u3002\u8BF7\u8BC4\u5BA1\u4EE5\u4E0B\u4EFB\u52A1\u6267\u884C\u7ED3\u679C\u3002
3318
3318
 
3319
3319
  ## \u4EFB\u52A1\u63CF\u8FF0
@@ -3345,13 +3345,13 @@ ${e.result.output}
3345
3345
  "comments": "\u603B\u4F53\u8BC4\u4EF7",
3346
3346
  "suggestions": ["\u5EFA\u8BAE1", "\u5EFA\u8BAE2"]
3347
3347
  }
3348
- `;try{let r=(await this.config.llmCall("\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u4EE3\u7801\u8BC4\u5BA1\u4E13\u5BB6\uFF0C\u64C5\u957F\u8BC4\u4F30\u4EFB\u52A1\u6267\u884C\u8D28\u91CF\u3002",t)).match(/\{[\s\S]*\}/);if(r){let o=JSON.parse(r[0]);return {reviewerId:e.reviewerId,revieweeId:e.revieweeId,nodeIds:[e.nodeId],scores:o.scores,overallScore:o.overallScore??this.calculateOverallScore(o.scores),comments:o.comments??"",suggestions:o.suggestions??[],reviewedAt:Date.now()}}}catch(n){this.emit("llm_review_failed",{error:n});}return this.conductAutoReview(e)}conductAutoReview(e){let t={completeness:4,quality:3.5,efficiency:this.calculateEfficiencyScore(e.result),standards:3.5};e.result.output.length<100&&(t.completeness=2.5),e.result.output.length>1e3&&(t.quality=4);let n=this.calculateOverallScore(t);return {reviewerId:e.reviewerId,revieweeId:e.revieweeId,nodeIds:[e.nodeId],scores:t,overallScore:n,comments:"Auto-generated review based on execution metrics",suggestions:this.generateAutoSuggestions(e.result,t),reviewedAt:Date.now()}}calculateEfficiencyScore(e){let t=e.duration,n=e.tokenUsage.total,r=4;return t>6e4?r-=1:t>3e4&&(r-=.5),n>1e4?r-=1:n>5e3&&(r-=.5),Math.max(1,Math.min(5,r))}calculateOverallScore(e){let t={completeness:.35,quality:.3,efficiency:.2,standards:.15};return e.completeness*t.completeness+e.quality*t.quality+e.efficiency*t.efficiency+e.standards*t.standards}generateAutoSuggestions(e,t){let n=[];return t.completeness<3&&n.push("Consider providing more comprehensive output"),t.efficiency<3&&n.push("Optimize execution time and resource usage"),t.quality<3&&n.push("Improve output quality and clarity"),t.standards<3&&n.push("Follow best practices and coding standards"),n}async executeAllPendingReviews(){let e=new Map,t=Array.from(this.pendingRequests.keys()).map(async n=>{let r=await this.executeReview(n);e.set(n,r);});return await Promise.all(t),e}getAggregatedReview(e){let t=this.reviewResults.get(e);if(!t||t.length===0)return null;let n={completeness:0,quality:0,efficiency:0,standards:0},r=0;for(let d of t)n.completeness+=d.scores.completeness,n.quality+=d.scores.quality,n.efficiency+=d.scores.efficiency,n.standards+=d.scores.standards,r+=d.overallScore;let o=t.length;n.completeness/=o,n.quality/=o,n.efficiency/=o,n.standards/=o;let i=r/o,a=t.map(d=>d.comments),l=t.flatMap(d=>d.suggestions),c=new Map;for(let d of l)c.set(d,(c.get(d)??0)+1);let u=Array.from(c.entries()).filter(([d,m])=>m>=Math.ceil(t.length/2)).map(([d])=>d);return {nodeId:e,reviewCount:o,averageScore:i,averageScores:n,commonIssues:a.filter(d=>d.length>0),commonSuggestions:u,passed:i>=this.config.minQualityThreshold,reviews:t}}async reviewDAG(e){let t=new Map;this.clearAll();for(let[n,r]of e.nodes)r.status!=="completed"||!r.result||await this.requestReview(e,n,r.result);await this.executeAllPendingReviews();for(let n of e.nodes.keys()){let r=this.getAggregatedReview(n);r&&t.set(n,r);}return this.emit("dag_review_completed",{dagId:e.id,reviewedNodes:t.size}),t}updateAgentReputation(e,t){let n=this.registry.get(e);if(!n)return;let r=(t.overallScore-3)*.1;this.emit("reputation_update_suggested",{agentId:e,currentReputation:n.reputation,delta:r,reason:`Peer review score: ${t.overallScore.toFixed(2)}`});}createTimeout(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Review timeout after ${e}ms`));},e);})}generateRequestId(){return `review-${Date.now()}-${++this.requestCounter}`}get pendingCount(){return this.pendingRequests.size}clearNodeReviews(e){this.reviewResults.delete(e);}clearAll(){this.pendingRequests.clear(),this.reviewStatuses.clear(),this.reviewResults.clear();}setLLMCall(e){this.config.llmCall=e;}};function zb(s,e){return new Zp(s,e)}Z();var YE={strictMode:false,autoInfer:true},em=class extends EventEmitter{config;nodeConfigs=new Map;dataStore=new Map;dagNodeIndex=new Map;constructor(e){super(),this.config={...YE,...e};}inferFromDAG(e){let t=new Set(e.nodes.keys()),n=this.dagNodeIndex.get(e.id);if(n)for(let r of n)t.has(r)||(this.nodeConfigs.delete(r),this.pruneNodeData(r));for(let[r,o]of e.nodes){let i=this.inferNodeConfig(o,e);this.nodeConfigs.set(r,i);}this.dagNodeIndex.set(e.id,t),p.info("RGPS_DATA_FLOW","Inferred data flow from DAG",{dagId:e.id,nodeCount:this.nodeConfigs.size}),this.emit("data_flow_inferred",{dagId:e.id});}inferNodeConfig(e,t){let n=[],r=[];for(let o of e.dependencies){let i=t.nodes.get(o);i&&n.push({targetKey:`input_from_${o}`,sourceNodeId:o,sourceOutputKey:i.task.outputKey,required:true});}return r.push({key:e.task.outputKey,description:`Output of ${e.id}`,type:"string",required:true}),{nodeId:e.id,inputs:n,outputs:r}}getNodeInputs(e){let t=this.nodeConfigs.get(e);if(!t)return {};let n={};for(let r of t.inputs){let o=`${r.sourceNodeId}:${r.sourceOutputKey}`,i=this.dataStore.get(o);if(i)n[r.targetKey]=i.value;else if(r.defaultValue!==void 0)n[r.targetKey]=r.defaultValue;else if(r.required&&this.config.strictMode)throw new Error(`Missing required input: ${r.targetKey}`)}return n}storeNodeOutput(e,t,n){let r=`${e}:${t}`,o={key:t,value:n,type:this.inferType(n),sourceNode:e,createdAt:Date.now()};this.dataStore.set(r,o),this.emit("output_stored",{nodeId:e,outputKey:t,dataKey:r});}inferType(e){return typeof e=="string"?"string":typeof e=="number"?"number":typeof e=="boolean"?"boolean":Array.isArray(e)?"array":"object"}buildTaskDescription(e,t){let n=this.getNodeInputs(e);if(Object.keys(n).length===0)return t;let r=t;r+=`
3348
+ `;try{let r=(await this.config.llmCall("\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u4EE3\u7801\u8BC4\u5BA1\u4E13\u5BB6\uFF0C\u64C5\u957F\u8BC4\u4F30\u4EFB\u52A1\u6267\u884C\u8D28\u91CF\u3002",t)).match(/\{[\s\S]*\}/);if(r){let o=JSON.parse(r[0]);return {reviewerId:e.reviewerId,revieweeId:e.revieweeId,nodeIds:[e.nodeId],scores:o.scores,overallScore:o.overallScore??this.calculateOverallScore(o.scores),comments:o.comments??"",suggestions:o.suggestions??[],reviewedAt:Date.now()}}}catch(n){this.emit("llm_review_failed",{error:n});}return this.conductAutoReview(e)}conductAutoReview(e){let t={completeness:4,quality:3.5,efficiency:this.calculateEfficiencyScore(e.result),standards:3.5};e.result.output.length<100&&(t.completeness=2.5),e.result.output.length>1e3&&(t.quality=4);let n=this.calculateOverallScore(t);return {reviewerId:e.reviewerId,revieweeId:e.revieweeId,nodeIds:[e.nodeId],scores:t,overallScore:n,comments:"Auto-generated review based on execution metrics",suggestions:this.generateAutoSuggestions(e.result,t),reviewedAt:Date.now()}}calculateEfficiencyScore(e){let t=e.duration,n=e.tokenUsage.total,r=4;return t>6e4?r-=1:t>3e4&&(r-=.5),n>1e4?r-=1:n>5e3&&(r-=.5),Math.max(1,Math.min(5,r))}calculateOverallScore(e){let t={completeness:.35,quality:.3,efficiency:.2,standards:.15};return e.completeness*t.completeness+e.quality*t.quality+e.efficiency*t.efficiency+e.standards*t.standards}generateAutoSuggestions(e,t){let n=[];return t.completeness<3&&n.push("Consider providing more comprehensive output"),t.efficiency<3&&n.push("Optimize execution time and resource usage"),t.quality<3&&n.push("Improve output quality and clarity"),t.standards<3&&n.push("Follow best practices and coding standards"),n}async executeAllPendingReviews(){let e=new Map,t=Array.from(this.pendingRequests.keys()).map(async n=>{let r=await this.executeReview(n);e.set(n,r);});return await Promise.all(t),e}getAggregatedReview(e){let t=this.reviewResults.get(e);if(!t||t.length===0)return null;let n={completeness:0,quality:0,efficiency:0,standards:0},r=0;for(let d of t)n.completeness+=d.scores.completeness,n.quality+=d.scores.quality,n.efficiency+=d.scores.efficiency,n.standards+=d.scores.standards,r+=d.overallScore;let o=t.length;n.completeness/=o,n.quality/=o,n.efficiency/=o,n.standards/=o;let i=r/o,a=t.map(d=>d.comments),l=t.flatMap(d=>d.suggestions),c=new Map;for(let d of l)c.set(d,(c.get(d)??0)+1);let u=Array.from(c.entries()).filter(([d,m])=>m>=Math.ceil(t.length/2)).map(([d])=>d);return {nodeId:e,reviewCount:o,averageScore:i,averageScores:n,commonIssues:a.filter(d=>d.length>0),commonSuggestions:u,passed:i>=this.config.minQualityThreshold,reviews:t}}async reviewDAG(e){let t=new Map;this.clearAll();for(let[n,r]of e.nodes)r.status!=="completed"||!r.result||await this.requestReview(e,n,r.result);await this.executeAllPendingReviews();for(let n of e.nodes.keys()){let r=this.getAggregatedReview(n);r&&t.set(n,r);}return this.emit("dag_review_completed",{dagId:e.id,reviewedNodes:t.size}),t}updateAgentReputation(e,t){let n=this.registry.get(e);if(!n)return;let r=(t.overallScore-3)*.1;this.emit("reputation_update_suggested",{agentId:e,currentReputation:n.reputation,delta:r,reason:`Peer review score: ${t.overallScore.toFixed(2)}`});}createTimeout(e){return new Promise((t,n)=>{setTimeout(()=>{n(new Error(`Review timeout after ${e}ms`));},e);})}generateRequestId(){return `review-${Date.now()}-${++this.requestCounter}`}get pendingCount(){return this.pendingRequests.size}clearNodeReviews(e){this.reviewResults.delete(e);}clearAll(){this.pendingRequests.clear(),this.reviewStatuses.clear(),this.reviewResults.clear();}setLLMCall(e){this.config.llmCall=e;}};function zb(s,e){return new Zp(s,e)}Z();var XE={strictMode:false,autoInfer:true},em=class extends EventEmitter{config;nodeConfigs=new Map;dataStore=new Map;dagNodeIndex=new Map;constructor(e){super(),this.config={...XE,...e};}inferFromDAG(e){let t=new Set(e.nodes.keys()),n=this.dagNodeIndex.get(e.id);if(n)for(let r of n)t.has(r)||(this.nodeConfigs.delete(r),this.pruneNodeData(r));for(let[r,o]of e.nodes){let i=this.inferNodeConfig(o,e);this.nodeConfigs.set(r,i);}this.dagNodeIndex.set(e.id,t),p.info("RGPS_DATA_FLOW","Inferred data flow from DAG",{dagId:e.id,nodeCount:this.nodeConfigs.size}),this.emit("data_flow_inferred",{dagId:e.id});}inferNodeConfig(e,t){let n=[],r=[];for(let o of e.dependencies){let i=t.nodes.get(o);i&&n.push({targetKey:`input_from_${o}`,sourceNodeId:o,sourceOutputKey:i.task.outputKey,required:true});}return r.push({key:e.task.outputKey,description:`Output of ${e.id}`,type:"string",required:true}),{nodeId:e.id,inputs:n,outputs:r}}getNodeInputs(e){let t=this.nodeConfigs.get(e);if(!t)return {};let n={};for(let r of t.inputs){let o=`${r.sourceNodeId}:${r.sourceOutputKey}`,i=this.dataStore.get(o);if(i)n[r.targetKey]=i.value;else if(r.defaultValue!==void 0)n[r.targetKey]=r.defaultValue;else if(r.required&&this.config.strictMode)throw new Error(`Missing required input: ${r.targetKey}`)}return n}storeNodeOutput(e,t,n){let r=`${e}:${t}`,o={key:t,value:n,type:this.inferType(n),sourceNode:e,createdAt:Date.now()};this.dataStore.set(r,o),this.emit("output_stored",{nodeId:e,outputKey:t,dataKey:r});}inferType(e){return typeof e=="string"?"string":typeof e=="number"?"number":typeof e=="boolean"?"boolean":Array.isArray(e)?"array":"object"}buildTaskDescription(e,t){let n=this.getNodeInputs(e);if(Object.keys(n).length===0)return t;let r=t;r+=`
3349
3349
 
3350
3350
  ## \u8F93\u5165\u6570\u636E (Ai)
3351
3351
  `;for(let[o,i]of Object.entries(n)){let a=typeof i=="string"?i.slice(0,500)+(i.length>500?"...":""):JSON.stringify(i,null,2).slice(0,500);r+=`### ${o}
3352
3352
  ${a}
3353
3353
 
3354
- `;}return r}setNodeConfig(e){this.nodeConfigs.set(e.nodeId,e);}getNodeConfig(e){return this.nodeConfigs.get(e)}pruneNodeData(e){let t=`${e}:`;for(let n of Array.from(this.dataStore.keys()))n.startsWith(t)&&this.dataStore.delete(n);}clear(){this.dataStore.clear(),this.nodeConfigs.clear(),this.dagNodeIndex.clear();}getAllData(){return new Map(this.dataStore)}transferData(e,t,n){let r=this.dataStore.get(`${e}:${n}`),o=this.nodeConfigs.get(t);if(!r)return {success:false,error:`Source data not found: ${e}:${n}`};let i=o?.inputs.find(a=>a.sourceNodeId===e&&a.sourceOutputKey===n);if(i?.expectedType&&r.type!==i.expectedType){let a=this.convertType(r.value,i.expectedType);return a.success?{success:true,data:a.value}:{success:false,error:`Type mismatch: expected ${i.expectedType}, got ${r.type}`}}return i?.validator&&!i.validator(r.value)?{success:false,error:`Validation failed for ${n}`}:{success:true,data:r.value}}convertType(e,t){try{switch(t){case "string":return {success:!0,value:String(e)};case "number":let n=Number(e);return {success:!isNaN(n),value:n};case "boolean":return {success:!0,value:!!e};case "array":if(Array.isArray(e))return {success:!0,value:e};if(typeof e=="string")try{let r=JSON.parse(e);if(Array.isArray(r))return {success:!0,value:r}}catch{}return {success:!1};case "object":if(typeof e=="object"&&e!==null)return {success:!0,value:e};if(typeof e=="string")try{return {success:!0,value:JSON.parse(e)}}catch{}return {success:!1};default:return {success:!1}}}catch{return {success:false}}}};function qb(s){return new em(s)}Z();var tm={maxExpansions:10,maxNodes:50,autoAssignAgent:true},QE=`\u5206\u6790\u4EE5\u4E0B\u4EFB\u52A1\u6267\u884C\u7ED3\u679C\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u989D\u5916\u7684\u5B50\u4EFB\u52A1\u3002
3354
+ `;}return r}setNodeConfig(e){this.nodeConfigs.set(e.nodeId,e);}getNodeConfig(e){return this.nodeConfigs.get(e)}pruneNodeData(e){let t=`${e}:`;for(let n of Array.from(this.dataStore.keys()))n.startsWith(t)&&this.dataStore.delete(n);}clear(){this.dataStore.clear(),this.nodeConfigs.clear(),this.dagNodeIndex.clear();}getAllData(){return new Map(this.dataStore)}transferData(e,t,n){let r=this.dataStore.get(`${e}:${n}`),o=this.nodeConfigs.get(t);if(!r)return {success:false,error:`Source data not found: ${e}:${n}`};let i=o?.inputs.find(a=>a.sourceNodeId===e&&a.sourceOutputKey===n);if(i?.expectedType&&r.type!==i.expectedType){let a=this.convertType(r.value,i.expectedType);return a.success?{success:true,data:a.value}:{success:false,error:`Type mismatch: expected ${i.expectedType}, got ${r.type}`}}return i?.validator&&!i.validator(r.value)?{success:false,error:`Validation failed for ${n}`}:{success:true,data:r.value}}convertType(e,t){try{switch(t){case "string":return {success:!0,value:String(e)};case "number":let n=Number(e);return {success:!isNaN(n),value:n};case "boolean":return {success:!0,value:!!e};case "array":if(Array.isArray(e))return {success:!0,value:e};if(typeof e=="string")try{let r=JSON.parse(e);if(Array.isArray(r))return {success:!0,value:r}}catch{}return {success:!1};case "object":if(typeof e=="object"&&e!==null)return {success:!0,value:e};if(typeof e=="string")try{return {success:!0,value:JSON.parse(e)}}catch{}return {success:!1};default:return {success:!1}}}catch{return {success:false}}}};function qb(s){return new em(s)}Z();var tm={maxExpansions:10,maxNodes:50,autoAssignAgent:true},ZE=`\u5206\u6790\u4EE5\u4E0B\u4EFB\u52A1\u6267\u884C\u7ED3\u679C\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u989D\u5916\u7684\u5B50\u4EFB\u52A1\u3002
3355
3355
 
3356
3356
  ## \u5F53\u524D\u4EFB\u52A1
3357
3357
  {taskDescription}
@@ -3376,7 +3376,7 @@ ${a}
3376
3376
  }
3377
3377
 
3378
3378
  \u5982\u679C\u4E0D\u9700\u8981\uFF0C\u8F93\u51FA\uFF1A
3379
- {"needsExpansion": false}`,nm=class extends EventEmitter{dagBuilder;agentMatcher;llmCall;maxExpansions;maxNodes;autoAssignAgent;expansionCounts=new Map;nodeCounter=0;constructor(e){super(),this.dagBuilder=e.dagBuilder,this.agentMatcher=e.agentMatcher,this.llmCall=e.llmCall,this.maxExpansions=e.maxExpansions??tm.maxExpansions,this.maxNodes=e.maxNodes??tm.maxNodes,this.autoAssignAgent=e.autoAssignAgent??tm.autoAssignAgent;}setLlmCall(e){this.llmCall=e;}async expandDAG(e){let{dagId:t,triggerNodeId:n,subtasks:r,reason:o}=e;p.info("PROGRESSIVE_DAG","Expanding DAG",{dagId:t,triggerNodeId:n,subtaskCount:r.length});let i=this.checkExpansionLimits(t);if(!i.allowed)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:0,error:i.reason};let a=this.dagBuilder.getDAG(t);if(!a)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:0,error:`DAG not found: ${t}`};let l=[],c=[];try{for(let d of r){let m=await this.addSubtaskNode(a,d,n);m&&l.push(m);}let u=this.updateDependencies(a,l,r);return c.push(...u),c.length>0&&this.dagBuilder.recalculateAnalysis(a),this.incrementExpansionCount(t),this.emit("dag_expanded",{dagId:t,triggerNodeId:n,addedNodes:l,modifiedNodes:c,reason:o}),{success:!0,addedNodes:l,modifiedNodes:c,newVersion:a.version}}catch(u){let d=u instanceof Error?u.message:String(u);return p.error("PROGRESSIVE_DAG","Expansion failed",{error:d}),{success:false,addedNodes:l,modifiedNodes:c,newVersion:a.version,error:d}}}checkExpansionLimits(e){let t=this.dagBuilder.getDAG(e);return t?(this.expansionCounts.get(e)??0)>=this.maxExpansions?{allowed:false,reason:`Max expansions reached: ${this.maxExpansions}`}:t.nodes.size>=this.maxNodes?{allowed:false,reason:`Max nodes reached: ${this.maxNodes}`}:{allowed:true}:{allowed:false,reason:"DAG not found"}}async addSubtaskNode(e,t,n){let r=this.generateNodeId(),o=t.dependsOn??[n],i={id:r,task:{description:t.description,inputMapping:{},outputKey:`output_${r}`,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},assignedAgent:"",dependencies:o,level:0,maxRetries:2,mutable:true};if(this.autoAssignAgent&&this.agentMatcher){let l=await this.agentMatcher.matchOrCreate({subtask:{id:r,description:t.description,dependencies:o,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},requiredCapabilities:t.requiredCapabilities});i.assignedAgent=l.agent.id;}return this.dagBuilder.addNode(e.id,i,"progressive_manager")?r:null}updateDependencies(e,t,n){let r=[];for(let o=0;o<n.length;o++){let i=n[o],a=t[o];if(i.requiredBy?.length&&a)for(let l of i.requiredBy){let c=e.nodes.get(l);c&&!c.dependencies.includes(a)&&(c.dependencies.push(a),r.push(l));}}return r}async analyzeForExpansion(e,t,n,r){if(!this.llmCall)return null;let o=QE.replace("{taskDescription}",n).replace("{executionResult}",r);try{let a=(await this.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u5206\u6790\u4E13\u5BB6\uFF0C\u64C5\u957F\u8BC6\u522B\u9700\u8981\u989D\u5916\u5904\u7406\u7684\u5B50\u4EFB\u52A1\u3002",o)).match(/\{[\s\S]*\}/);if(!a)return null;let l=JSON.parse(a[0]);return l.needsExpansion?l.subtasks:null}catch(i){return p.warn("PROGRESSIVE_DAG","Analysis failed",{error:i}),null}}generateNodeId(){return `progressive-${++this.nodeCounter}-${Date.now()}`}incrementExpansionCount(e){let t=this.expansionCounts.get(e)??0;this.expansionCounts.set(e,t+1);}getExpansionCount(e){return this.expansionCounts.get(e)??0}resetExpansionCount(e){this.expansionCounts.delete(e);}getRemainingExpansions(e){let t=this.expansionCounts.get(e)??0;return Math.max(0,this.maxExpansions-t)}async insertUserRequirement(e,t){p.info("PROGRESSIVE_DAG","Inserting user requirement",{dagId:e,description:t.description.slice(0,100),priority:t.priority});let n=this.dagBuilder.getDAG(e);if(!n)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:0,error:`DAG not found: ${e}`};let r=this.checkExpansionLimits(e);if(!r.allowed)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:n.version,error:r.reason};try{let o=await this.analyzeInsertionPoint(n,t),i=this.generateNodeId(),a={id:i,task:{description:t.description,inputMapping:{},outputKey:`output_${i}`,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},assignedAgent:"",dependencies:o.dependencies,level:o.level,maxRetries:2,mutable:!0};if(this.autoAssignAgent&&this.agentMatcher){let u=await this.agentMatcher.matchOrCreate({subtask:{id:i,description:t.description,dependencies:o.dependencies,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},requiredCapabilities:t.requiredCapabilities});a.assignedAgent=u.agent.id;}if(!this.dagBuilder.addNode(n.id,a,"user_requirement"))return {success:!1,addedNodes:[],modifiedNodes:[],newVersion:n.version,error:"Failed to add node to DAG"};let c=this.updateDownstreamDependencies(n,i,o.affectedNodes,t.blocking??!1);return c.length>0&&this.dagBuilder.recalculateAnalysis(n),this.incrementExpansionCount(e),this.emit("user_requirement_inserted",{dagId:e,nodeId:i,description:t.description,priority:t.priority,modifiedNodes:c}),{success:!0,addedNodes:[i],modifiedNodes:c,newVersion:n.version}}catch(o){let i=o instanceof Error?o.message:String(o);return p.error("PROGRESSIVE_DAG","Insert failed",{error:i}),{success:false,addedNodes:[],modifiedNodes:[],newVersion:n.version,error:i}}}async analyzeInsertionPoint(e,t){if(t.insertAfter){let n=e.nodes.get(t.insertAfter);if(n){let r=t.insertBefore?[t.insertBefore]:this.findDownstreamNodes(e,t.insertAfter);return {dependencies:[t.insertAfter],level:n.level+1,affectedNodes:r}}}if(t.insertBefore){let n=e.nodes.get(t.insertBefore);if(n)return {dependencies:n.dependencies,level:n.level,affectedNodes:[t.insertBefore]}}return this.llmCall?this.llmAnalyzeInsertionPoint(e,t):this.priorityBasedInsertion(e,t.priority)}async llmAnalyzeInsertionPoint(e,t){let r=`\u5206\u6790\u4EE5\u4E0B DAG \u7ED3\u6784\uFF0C\u786E\u5B9A\u65B0\u9700\u6C42\u7684\u6700\u4F73\u63D2\u5165\u4F4D\u7F6E\u3002
3379
+ {"needsExpansion": false}`,nm=class extends EventEmitter{dagBuilder;agentMatcher;llmCall;maxExpansions;maxNodes;autoAssignAgent;expansionCounts=new Map;nodeCounter=0;constructor(e){super(),this.dagBuilder=e.dagBuilder,this.agentMatcher=e.agentMatcher,this.llmCall=e.llmCall,this.maxExpansions=e.maxExpansions??tm.maxExpansions,this.maxNodes=e.maxNodes??tm.maxNodes,this.autoAssignAgent=e.autoAssignAgent??tm.autoAssignAgent;}setLlmCall(e){this.llmCall=e;}async expandDAG(e){let{dagId:t,triggerNodeId:n,subtasks:r,reason:o}=e;p.info("PROGRESSIVE_DAG","Expanding DAG",{dagId:t,triggerNodeId:n,subtaskCount:r.length});let i=this.checkExpansionLimits(t);if(!i.allowed)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:0,error:i.reason};let a=this.dagBuilder.getDAG(t);if(!a)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:0,error:`DAG not found: ${t}`};let l=[],c=[];try{for(let d of r){let m=await this.addSubtaskNode(a,d,n);m&&l.push(m);}let u=this.updateDependencies(a,l,r);return c.push(...u),c.length>0&&this.dagBuilder.recalculateAnalysis(a),this.incrementExpansionCount(t),this.emit("dag_expanded",{dagId:t,triggerNodeId:n,addedNodes:l,modifiedNodes:c,reason:o}),{success:!0,addedNodes:l,modifiedNodes:c,newVersion:a.version}}catch(u){let d=u instanceof Error?u.message:String(u);return p.error("PROGRESSIVE_DAG","Expansion failed",{error:d}),{success:false,addedNodes:l,modifiedNodes:c,newVersion:a.version,error:d}}}checkExpansionLimits(e){let t=this.dagBuilder.getDAG(e);return t?(this.expansionCounts.get(e)??0)>=this.maxExpansions?{allowed:false,reason:`Max expansions reached: ${this.maxExpansions}`}:t.nodes.size>=this.maxNodes?{allowed:false,reason:`Max nodes reached: ${this.maxNodes}`}:{allowed:true}:{allowed:false,reason:"DAG not found"}}async addSubtaskNode(e,t,n){let r=this.generateNodeId(),o=t.dependsOn??[n],i={id:r,task:{description:t.description,inputMapping:{},outputKey:`output_${r}`,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},assignedAgent:"",dependencies:o,level:0,maxRetries:2,mutable:true};if(this.autoAssignAgent&&this.agentMatcher){let l=await this.agentMatcher.matchOrCreate({subtask:{id:r,description:t.description,dependencies:o,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},requiredCapabilities:t.requiredCapabilities});i.assignedAgent=l.agent.id;}return this.dagBuilder.addNode(e.id,i,"progressive_manager")?r:null}updateDependencies(e,t,n){let r=[];for(let o=0;o<n.length;o++){let i=n[o],a=t[o];if(i.requiredBy?.length&&a)for(let l of i.requiredBy){let c=e.nodes.get(l);c&&!c.dependencies.includes(a)&&(c.dependencies.push(a),r.push(l));}}return r}async analyzeForExpansion(e,t,n,r){if(!this.llmCall)return null;let o=ZE.replace("{taskDescription}",n).replace("{executionResult}",r);try{let a=(await this.llmCall("\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u5206\u6790\u4E13\u5BB6\uFF0C\u64C5\u957F\u8BC6\u522B\u9700\u8981\u989D\u5916\u5904\u7406\u7684\u5B50\u4EFB\u52A1\u3002",o)).match(/\{[\s\S]*\}/);if(!a)return null;let l=JSON.parse(a[0]);return l.needsExpansion?l.subtasks:null}catch(i){return p.warn("PROGRESSIVE_DAG","Analysis failed",{error:i}),null}}generateNodeId(){return `progressive-${++this.nodeCounter}-${Date.now()}`}incrementExpansionCount(e){let t=this.expansionCounts.get(e)??0;this.expansionCounts.set(e,t+1);}getExpansionCount(e){return this.expansionCounts.get(e)??0}resetExpansionCount(e){this.expansionCounts.delete(e);}getRemainingExpansions(e){let t=this.expansionCounts.get(e)??0;return Math.max(0,this.maxExpansions-t)}async insertUserRequirement(e,t){p.info("PROGRESSIVE_DAG","Inserting user requirement",{dagId:e,description:t.description.slice(0,100),priority:t.priority});let n=this.dagBuilder.getDAG(e);if(!n)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:0,error:`DAG not found: ${e}`};let r=this.checkExpansionLimits(e);if(!r.allowed)return {success:false,addedNodes:[],modifiedNodes:[],newVersion:n.version,error:r.reason};try{let o=await this.analyzeInsertionPoint(n,t),i=this.generateNodeId(),a={id:i,task:{description:t.description,inputMapping:{},outputKey:`output_${i}`,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},assignedAgent:"",dependencies:o.dependencies,level:o.level,maxRetries:2,mutable:!0};if(this.autoAssignAgent&&this.agentMatcher){let u=await this.agentMatcher.matchOrCreate({subtask:{id:i,description:t.description,dependencies:o.dependencies,estimatedTime:t.estimatedTime??6e4,estimatedTokens:5e3,requiredCapabilities:t.requiredCapabilities},requiredCapabilities:t.requiredCapabilities});a.assignedAgent=u.agent.id;}if(!this.dagBuilder.addNode(n.id,a,"user_requirement"))return {success:!1,addedNodes:[],modifiedNodes:[],newVersion:n.version,error:"Failed to add node to DAG"};let c=this.updateDownstreamDependencies(n,i,o.affectedNodes,t.blocking??!1);return c.length>0&&this.dagBuilder.recalculateAnalysis(n),this.incrementExpansionCount(e),this.emit("user_requirement_inserted",{dagId:e,nodeId:i,description:t.description,priority:t.priority,modifiedNodes:c}),{success:!0,addedNodes:[i],modifiedNodes:c,newVersion:n.version}}catch(o){let i=o instanceof Error?o.message:String(o);return p.error("PROGRESSIVE_DAG","Insert failed",{error:i}),{success:false,addedNodes:[],modifiedNodes:[],newVersion:n.version,error:i}}}async analyzeInsertionPoint(e,t){if(t.insertAfter){let n=e.nodes.get(t.insertAfter);if(n){let r=t.insertBefore?[t.insertBefore]:this.findDownstreamNodes(e,t.insertAfter);return {dependencies:[t.insertAfter],level:n.level+1,affectedNodes:r}}}if(t.insertBefore){let n=e.nodes.get(t.insertBefore);if(n)return {dependencies:n.dependencies,level:n.level,affectedNodes:[t.insertBefore]}}return this.llmCall?this.llmAnalyzeInsertionPoint(e,t):this.priorityBasedInsertion(e,t.priority)}async llmAnalyzeInsertionPoint(e,t){let r=`\u5206\u6790\u4EE5\u4E0B DAG \u7ED3\u6784\uFF0C\u786E\u5B9A\u65B0\u9700\u6C42\u7684\u6700\u4F73\u63D2\u5165\u4F4D\u7F6E\u3002
3380
3380
 
3381
3381
  ## \u5F53\u524D DAG \u8282\u70B9
3382
3382
  ${Array.from(e.nodes.entries()).map(([o,i])=>`- ${o}: ${i.task.description} (status: ${i.status})`).join(`
@@ -3390,7 +3390,7 @@ ${t.description}
3390
3390
  {
3391
3391
  "insertAfter": "\u5E94\u8BE5\u5728\u54EA\u4E2A\u8282\u70B9\u4E4B\u540E\u63D2\u5165",
3392
3392
  "reason": "\u539F\u56E0"
3393
- }`;try{let i=(await this.llmCall("\u4F60\u662F DAG \u8C03\u5EA6\u4E13\u5BB6\uFF0C\u64C5\u957F\u5206\u6790\u4EFB\u52A1\u4F9D\u8D56\u5173\u7CFB\u3002",r)).match(/\{[\s\S]*\}/);if(i){let a=JSON.parse(i[0]),l=e.nodes.get(a.insertAfter);if(l)return {dependencies:[a.insertAfter],level:l.level+1,affectedNodes:this.findDownstreamNodes(e,a.insertAfter)}}}catch{p.warn("PROGRESSIVE_DAG","LLM analysis failed, using priority-based");}return this.priorityBasedInsertion(e,t.priority)}priorityBasedInsertion(e,t){let n=[],r=[],o=[];for(let[i,a]of e.nodes)a.status==="running"?n.push(i):a.status==="pending"?r.push(i):a.status==="completed"&&o.push(i);if(t==="high"&&n.length>0)return {dependencies:n,level:Math.max(...n.map(i=>e.nodes.get(i).level))+1,affectedNodes:r};if(t==="low"){let i=Math.max(...Array.from(e.nodes.values()).map(l=>l.level));return {dependencies:Array.from(e.nodes.entries()).filter(([,l])=>l.level===i).map(([l])=>l),level:i+1,affectedNodes:[]}}if(o.length>0){let i=o[o.length-1],a=e.nodes.get(i);return {dependencies:[i],level:a.level+1,affectedNodes:r.slice(0,1)}}return {dependencies:[],level:0,affectedNodes:Array.from(e.nodes.keys())}}findDownstreamNodes(e,t){let n=[];for(let[r,o]of e.nodes)o.dependencies.includes(t)&&n.push(r);return n}updateDownstreamDependencies(e,t,n,r){let o=[];for(let i of n){let a=e.nodes.get(i);a&&a.status==="pending"&&r&&(a.dependencies.includes(t)||(a.dependencies.push(t),o.push(i)));}return o}};function Kb(s){return new nm(s)}Z();var gc={minAvailability:.3,minReputation:2,allowDynamicCreation:true,maxAgents:20},eA={programmer:"programmer",coder:"programmer",developer:"programmer",reviewer:"reviewer",architect:"architect",tester:"tester",frontend:"frontend",backend:"backend",fullstack:"fullstack",devops:"devops",security:"security",documenter:"documenter",debugger:"debugger",data:"data",coordinator:"coordinator"},rm=class extends EventEmitter{registry;factory;config;createdAgents=new Map;modelCapabilities;constructor(e,t,n){super(),this.registry=e,this.factory=t,this.config={minAvailability:n?.minAvailability??gc.minAvailability,minReputation:n?.minReputation??gc.minReputation,allowDynamicCreation:n?.allowDynamicCreation??gc.allowDynamicCreation,maxAgents:n?.maxAgents??gc.maxAgents},this.modelCapabilities=n?.modelCapabilities??new Map;}setModelCapabilities(e){this.modelCapabilities=e;}addModelCapability(e){this.modelCapabilities.set(e.modelId,e);}async matchOrCreate(e){let{subtask:t,requiredRole:n,requiredCapabilities:r}=e;p.debug("AGENT_MATCHER","Matching agent for subtask",{subtaskId:t.id,requiredRole:n,requiredCapabilities:r});let o=this.findBestMatch(e);if(o)return this.emit("agent_matched",{subtaskId:t.id,agentId:o.agent.id}),o;if(this.config.allowDynamicCreation){let a=this.createAgent(e);if(a)return this.emit("agent_created",{subtaskId:t.id,agentId:a.agent.id}),a}let i=this.findAnyAvailable();if(i)return i;throw new Error(`No agent available for subtask: ${t.id}`)}findBestMatch(e){let{requiredRole:t,requiredCapabilities:n,taskType:r,modelConstraints:o}=e,i=e.minAvailability??this.config.minAvailability,a=e.minReputation??this.config.minReputation,l=this.registry.getAll(),c=null;for(let u of l){if(u.availability<i||u.reputation<a||u.status!=="active")continue;let d=this.calculateScore(u,t,n,r,o);if(d.score>0&&(!c||d.score>c.score)){let m=this.registry.getInstance(u.id);m&&(c={agent:m,score:d.score,modelCapability:d.modelCapability,reasons:d.reasons});}}if(c){let u=c.modelCapability?c.modelCapability.cost.input+c.modelCapability.cost.output:void 0;return {agent:c.agent,isNewlyCreated:false,score:c.score,reason:c.reasons.join(", ")||"Matched existing agent",modelCapability:c.modelCapability,estimatedCost:u}}return null}calculateScore(e,t,n,r,o){let i=0,a=[];if(t&&e.role.name.toLowerCase().includes(t.toLowerCase())&&(i+=25,a.push(`\u89D2\u8272\u5339\u914D: ${t}`)),n?.length){let u=0;for(let m of n)e.capabilities.includes(m)&&u++;let d=u/n.length*25;i+=d,u>0&&a.push(`\u80FD\u529B\u5339\u914D: ${u}/${n.length}`);}i+=e.availability*15,i+=e.reputation/5*10;let l=e.metadata?.preferredModel,c;if(l&&this.modelCapabilities.size>0){if(c=this.modelCapabilities.get(l),c){if(o&&!this.checkModelConstraints(c,o))return {score:0,reasons:["\u6A21\u578B\u4E0D\u6EE1\u8DB3\u7EA6\u675F\u6761\u4EF6"]};if(r){let u=c.taskTypeScores[r]??.5;i+=u*25,u>=.7&&a.push(`\u6A21\u578B\u64C5\u957F ${r}`);}else i+=12.5;}}else i+=12.5;return {score:i,modelCapability:c,reasons:a}}checkModelConstraints(e,t){return !(t.maxCost!==void 0&&e.cost.input>t.maxCost||t.minContextWindow!==void 0&&e.contextWindow<t.minContextWindow||t.minReliability!==void 0&&e.performance.reliability<t.minReliability||t.requireTools&&!e.supportsTools||t.providerId&&e.providerId!==t.providerId||t.excludeModels?.includes(e.modelId))}createAgent(e){let{requiredRole:t,requiredCapabilities:n}=e;if(this.registry.getAll().length>=this.config.maxAgents)return p.warn("AGENT_MATCHER","Max agents reached"),null;let o=this.mapToRoleId(t);if(!o)return p.warn("AGENT_MATCHER","Unknown role",{requiredRole:t}),null;let i=this.factory.createFromRole(o,{additionalCapabilities:n});return this.registry.register(i),i.start(),this.createdAgents.set(i.id,i),p.info("AGENT_MATCHER","Created new agent",{agentId:i.id,role:o}),{agent:i,isNewlyCreated:true,score:100,reason:`Created new ${o} agent`}}mapToRoleId(e){if(!e)return "programmer";let t=e.toLowerCase();return eA[t]??"programmer"}findAnyAvailable(){let e=this.registry.getAll();for(let t of e)if(t.status==="active"&&t.availability>0){let n=this.registry.getInstance(t.id);if(n)return {agent:n,isNewlyCreated:false,score:1,reason:"Fallback to any available agent"}}return null}async matchAll(e){let t=new Map;for(let n of e){let r=await this.matchOrCreate({subtask:n,requiredCapabilities:n.requiredCapabilities});t.set(n.id,r);}return t}getCreatedAgents(){return Array.from(this.createdAgents.values())}};function Jb(s,e,t){return new rm(s,e,t)}var sm=class extends EventEmitter{config;resourcePool=new Map;waitQueue=[];constructor(e){super(),this.config={maxConcurrency:e?.maxConcurrency??5,resourceWaitTimeout:e?.resourceWaitTimeout??6e4};}calculateCriticalPath(e){let t=this.forwardPass(e),n=this.backwardPass(e,t),r=new Map,o=[];for(let[l,c]of t){let u=n.get(l),d=u.LS-c.ES,m=d===0;r.set(l,{ES:c.ES,EF:c.EF,LS:u.LS,LF:u.LF,slack:d,isCritical:m}),m&&o.push(l);}let i=Math.max(...Array.from(t.values()).map(l=>l.EF)),a=this.analyzeParallelism(e,r);return {criticalPath:o,totalDuration:i,nodeSchedule:r,parallelismAnalysis:a}}forwardPass(e){let t=new Map,n=r=>{if(t.has(r))return t.get(r);let o=e.nodes.get(r);if(!o)return {ES:0,EF:0};let i=0;for(let c of o.dependencies){let u=n(c);i=Math.max(i,u.EF);}let a=o.task.estimatedTime??6e4,l=i+a;return t.set(r,{ES:i,EF:l}),{ES:i,EF:l}};for(let r of e.nodes.keys())n(r);return t}backwardPass(e,t){let n=new Map,r=Math.max(...Array.from(t.values()).map(a=>a.EF)),o=new Map;for(let[a,l]of e.nodes)o.set(a,[]);for(let[a,l]of e.nodes)for(let c of l.dependencies)o.get(c)?.push(a);let i=a=>{if(n.has(a))return n.get(a);let l=e.nodes.get(a);if(!l)return {LS:r,LF:r};let c=o.get(a)||[],u=r;for(let g of c){let h=i(g);u=Math.min(u,h.LS);}let d=l.task.estimatedTime??6e4,m=u-d;return n.set(a,{LS:m,LF:u}),{LS:m,LF:u}};for(let a of e.nodes.keys())i(a);return n}analyzeParallelism(e,t){let n=new Set;for(let l of t.values())n.add(l.ES),n.add(l.EF);let r=Array.from(n).sort((l,c)=>l-c),o=0,i=0;for(let l=0;l<r.length-1;l++){let c=r[l],u=0;for(let d of t.values())d.ES<=c&&c<d.EF&&u++;o=Math.max(o,u),i+=u;}let a=r.length>1?i/(r.length-1):0;return {maxParallelism:o,avgParallelism:a}}registerResource(e){this.resourcePool.set(e,{agentId:e,status:"available"}),this.emit("resource_registered",{agentId:e}),this.processWaitQueue();}async allocateResource(e,t){let n=this.findAvailableResource(t);return n?(n.status="busy",n.currentTask=e,n.allocatedAt=Date.now(),this.emit("resource_allocated",{agentId:n.agentId,nodeId:e}),n):this.waitForResource(e,t)}releaseResource(e){let t=this.resourcePool.get(e);t&&(t.status="available",t.currentTask=void 0,t.allocatedAt=void 0,this.emit("resource_released",{agentId:e}),this.processWaitQueue());}findAvailableResource(e){for(let t of this.resourcePool.values())if(t.status==="available")return t;return null}waitForResource(e,t){return new Promise((n,r)=>{let o=setTimeout(()=>{let i=this.waitQueue.findIndex(a=>a.nodeId===e);i>=0&&this.waitQueue.splice(i,1),r(new Error(`Resource wait timeout for ${e}`));},this.config.resourceWaitTimeout);this.waitQueue.push({nodeId:e,requirements:t,resolve:i=>{clearTimeout(o),n(i);},reject:i=>{clearTimeout(o),r(i);}});})}processWaitQueue(){if(this.waitQueue.length===0)return;let e=this.waitQueue[0],t=this.findAvailableResource(e.requirements);t&&(this.waitQueue.shift(),t.status="busy",t.currentTask=e.nodeId,t.allocatedAt=Date.now(),e.resolve(t));}getPoolStatus(){let e=0,t=0;for(let n of this.resourcePool.values())n.status==="available"?e++:n.status==="busy"&&t++;return {total:this.resourcePool.size,available:e,busy:t}}};function Vb(s){return new sm(s)}var om=class extends EventEmitter{capabilities=new Map;constructor(e){if(super(),e?.presetCapabilities)for(let t of e.presetCapabilities)this.register(t);}get(e){return this.capabilities.get(e)}register(e){this.capabilities.set(e.modelId,e),this.emit("model_registered",{modelId:e.modelId});}getAll(){return Array.from(this.capabilities.values())}findBestForTask(e,t){let n=this.filterByConstraints(t);if(n.length===0)return null;let r=null,o=-1;for(let i of n){let a=i.taskTypeScores[e]??.5;a>o&&(o=a,r=i);}return r}findByStrength(e){return this.getAll().filter(t=>t.strengths.some(n=>n.toLowerCase().includes(e.toLowerCase())))}filterByConstraints(e){return e?this.getAll().filter(t=>!(e.maxCost&&t.cost.input>e.maxCost||e.minContextWindow&&t.contextWindow<e.minContextWindow||e.minReliability&&t.performance.reliability<e.minReliability||e.requireTools&&!t.supportsTools||e.providerId&&t.providerId!==e.providerId||e.excludeModels?.includes(t.modelId))):this.getAll()}matchModel(e,t,n){let r=this.filterByConstraints(n);if(r.length===0)return null;let o=null;for(let i of r){let{score:a,reasons:l}=this.calculateMatchScore(i,e,t);(!o||a>o.score)&&(o={model:i,score:a,reasons:l,estimatedCost:i.cost.input+i.cost.output});}return o}calculateMatchScore(e,t,n){let r=0,o=[],i=e.taskTypeScores[t]??.5;r+=i*40,i>=.8&&o.push(`\u64C5\u957F ${t} \u4EFB\u52A1`);let a=0;for(let u of n)e.strengths.some(d=>d.toLowerCase().includes(u.toLowerCase()))&&a++;let l=n.length>0?a/n.length:.5;r+=l*30,a>0&&o.push(`\u5339\u914D ${a}/${n.length} \u9879\u80FD\u529B`),r+=e.performance.reliability*15;let c=Math.max(0,1-(e.cost.input+e.cost.output)/.1);return r+=c*15,{score:r,reasons:o}}};function Yb(s){return new om(s)}Z();var eo=class extends EventEmitter{llmCall;config;registry;messageBus;biddingEngine;negotiationEngine;consensusBuilder;proposalGenerator;dagBuilder;dagExecutor;replanningEngine;peerReviewEngine;agentFactory;agentMatcher;rgpsDataFlowManager;progressiveManager;negotiationSummarizer;modelCapabilityRegistry;dagScheduler;agentSubscriptions=new Map;started=false;aborted=false;abortController=null;currentExecutingAgentId=null;currentDagId=null;executing=false;pendingUserMessages=[];constructor(e){super(),this.llmCall=e.llmCall,this.config={minComplexityForNetwork:e.minComplexityForNetwork??4,minAgentsRequired:e.minAgentsRequired??2,biddingTimeout:e.biddingTimeout??3e4,negotiationTimeout:e.negotiationTimeout??6e4,executionTimeout:e.executionTimeout??3e5,maxNegotiationRounds:e.maxNegotiationRounds??3,maxReplanAttempts:e.maxReplanAttempts??3,consensusThreshold:e.consensusThreshold??.67,autoCreateDefaultAgents:e.autoCreateDefaultAgents??true,customRoles:e.customRoles},this.registry=Nb(e.registryConfig),this.messageBus=Lb(e.messageBusConfig),this.biddingEngine=Ob(this.registry,this.messageBus,e.biddingConfig),this.negotiationEngine=$b(this.registry,this.messageBus,{...e.negotiationConfig,llmCall:this.llmCall}),this.consensusBuilder=Bb(e.negotiationConfig),this.proposalGenerator=Ub(this.registry,{...e.negotiationConfig,llmCall:this.llmCall}),this.dagBuilder=Gb(e.dagBuilderConfig),this.replanningEngine=Hb(this.registry,this.dagBuilder,e.replanningConfig),this.peerReviewEngine=zb(this.registry,e.peerReviewConfig),this.agentFactory=Rb({...e.agentFactoryConfig,llmCall:this.llmCall,executionCapability:e.executionCapability}),this.agentMatcher=Jb(this.registry,this.agentFactory),this.rgpsDataFlowManager=qb({strictMode:false,autoInfer:true}),this.progressiveManager=Kb({dagBuilder:this.dagBuilder,agentMatcher:this.agentMatcher,llmCall:this.llmCall,maxExpansions:10,maxNodes:50,autoAssignAgent:true}),this.dagExecutor=Wb(this.registry,this.dagBuilder,{...e.dagExecutorConfig,rgpsDataFlowManager:this.rgpsDataFlowManager,agentMatcher:this.agentMatcher,progressiveManager:this.progressiveManager,enableProgressiveExpansion:true}),this.negotiationSummarizer=jb({llmCall:this.llmCall}),this.modelCapabilityRegistry=Yb({presetCapabilities:e.presetModelCapabilities});let t=this.modelCapabilityRegistry.getAll();if(t.length>0){let n=new Map;for(let r of t)n.set(r.modelId,r);this.agentMatcher.setModelCapabilities(n);}this.dagScheduler=Vb({maxConcurrency:e.dagSchedulerMaxConcurrency??5,resourceWaitTimeout:6e4}),this.setupEventListeners();}start(){if(this.started)return;this.started=true,this.registry.start(),this.config.autoCreateDefaultAgents&&this.createDefaultAgents(),this.subscribeExistingAgents();let e=this.registry.getStats();p.info("NETWORK",`Started with ${e.total} agents`,{active:e.active,busy:e.busy}),this.emitEvent({type:"runtime_started"});}stop(){this.started&&(this.started=false,this.registry.stop(),this.clearAgentSubscriptions(),this.cleanupEventListeners(),this.emitEvent({type:"runtime_stopped"}));}isExecuting(){return this.executing}getCurrentExecutingAgentId(){return this.currentExecutingAgentId}injectUserMessage(e){if(!this.executing)return p.warn("NETWORK","Cannot inject message: no task executing"),false;if(p.info("NETWORK","Injecting user message",{message:e.substring(0,100),currentAgentId:this.currentExecutingAgentId,currentDagId:this.currentDagId}),this.pendingUserMessages.push(e),this.currentExecutingAgentId){let t=this.registry.getInstance(this.currentExecutingAgentId);t&&typeof t.injectUserMessage=="function"&&(t.injectUserMessage(e),p.info("NETWORK","Message injected to agent",{agentId:this.currentExecutingAgentId}));}return this.emit("user_message_injected",{message:e,agentId:this.currentExecutingAgentId}),true}consumePendingUserMessages(){let e=[...this.pendingUserMessages];return this.pendingUserMessages=[],e}setCurrentExecutingAgent(e){this.currentExecutingAgentId=e;}cleanupEventListeners(){this.registry.removeAllListeners("agent_registered"),this.registry.removeAllListeners("agent_unregistered"),this.dagExecutor.removeAllListeners("node_started"),this.dagExecutor.removeAllListeners("node_completed"),this.dagExecutor.removeAllListeners("node_failed"),this.dagExecutor.removeAllListeners("replan_required"),this.replanningEngine.removeAllListeners("replan_started"),this.replanningEngine.removeAllListeners("replan_completed"),this.biddingEngine.removeAllListeners("bid_received"),this.progressiveManager.removeAllListeners("dag_expanded"),this.progressiveManager.removeAllListeners("user_requirement_inserted");}async chat(e,t){let n=Date.now();p.debug("NETWORK",">>> chat() started",{promptLength:e.prompt?.length}),this.aborted=false,this.abortController=new AbortController,this.executing=true,this.currentExecutingAgentId=null,this.currentDagId=null,this.pendingUserMessages=[];let r=0,o=0,i=this.llmCall.bind(this),a=async(l,c,u)=>{let d={...u,signal:u?.signal||this.abortController?.signal},m=await i(l,c,d),g=Math.ceil((l.length+c.length)/4),h=Math.ceil(m.length/4);return r+=g,o+=h,t?.onTokenUsage?.({inputTokens:g,outputTokens:h,totalInputTokens:r,totalOutputTokens:o}),m};this.llmCall=a,this.progressiveManager.setLlmCall(a),this.negotiationSummarizer.setLlmCall(a),this.negotiationEngine.setLlmCall(a),this.proposalGenerator.setLlmCall(a),this.replanningEngine.setLlmCall(a),this.peerReviewEngine.setLlmCall(a);try{if(t?.onThinking?.("\u6B63\u5728\u5206\u6790\u4EFB\u52A1..."),this.aborted)throw new Error("Task aborted by user");p.debug("NETWORK",">>> Phase 1: analyzeTask starting");let l=await this.analyzeTask(e.prompt,e.context);if(this.aborted)throw new Error("Task aborted by user");p.debug("NETWORK",">>> Phase 1: analyzeTask completed",{complexity:l.complexity,requiresCollaboration:l.requiresCollaboration}),this.emitEvent({type:"task_analyzed",analysis:l}),t?.onAnalysis?.(l),p.debug("NETWORK",">>> Phase 2: selectMode starting");let c=this.selectMode(l);return p.debug("NETWORK",">>> Phase 2: selectMode completed",{mode:c.mode,reason:c.reason}),this.emitEvent({type:"mode_selected",mode:c.mode,reason:c.reason}),t?.onModeSelect?.(c.mode,c.reason,l.rawAnalysis),c.mode==="simple"?(p.debug("NETWORK",">>> Routing to executeSimpleMode"),this.executeSimpleMode(e,l,n,t)):c.mode==="pipeline"?this.executePipelineMode(e,l,n,c.reason,t):await this.executeNetworkMode(e,l,n,t)}catch(l){let c=l instanceof Error?l.message:String(l);throw this.emitEvent({type:"chat_failed",error:c}),t?.onError?.(l instanceof Error?l:new Error(c)),l}finally{this.llmCall=i,this.executing=false,this.currentExecutingAgentId=null,this.currentDagId=null;}}async executeNetworkMode(e,t,n,r){if(this.aborted)throw new Error("Task aborted by user");r?.onThinking?.("\u6B63\u5728\u5E7F\u64AD\u4EFB\u52A1...");let o={id:`task-${Date.now()}`,description:t.description,userRequest:e.prompt,requiredCapabilities:t.requiredCapabilities,optionalCapabilities:t.optionalCapabilities,estimatedComplexity:t.complexity,priority:t.priority,tokenBudget:e.tokenBudget,context:e.context,broadcastedAt:Date.now(),bidDeadline:Date.now()+this.config.biddingTimeout};this.emitEvent({type:"task_broadcasted",task:o}),r?.onThinking?.("\u6B63\u5728\u6536\u96C6\u7ADE\u6807..."),r?.onBiddingStart?.(o.id),this.emitEvent({type:"bidding_started",taskId:o.id});let i=this.registry.getAll().map(A=>A.id),a=await this.biddingEngine.requestBidsFromAgents(o,i,{timeout:this.config.biddingTimeout,onAgentDecision:A=>{r?.onAgentBidDecision?.(A);}}),l=a.selectedAgents,c=a.bids,u=c.length>0?{agentId:c[0].agentId,confidence:c[0].confidence}:void 0;if(this.emitEvent({type:"bidding_completed",bids:c,selectedAgents:l}),r?.onBiddingComplete?.({taskId:o.id,totalBids:c.length,selectedAgents:l,topBid:u}),l.length<this.config.minAgentsRequired)return this.executePipelineMode(e,t,n,"\u7ADE\u6807 Agent \u6570\u91CF\u4E0D\u8DB3",r);this.emitEvent({type:"agents_selected",agentIds:l}),r?.onThinking?.("\u6B63\u5728\u534F\u5546\u6267\u884C\u8BA1\u5212..."),this.emitEvent({type:"negotiation_started",sessionId:o.id,participants:l}),r?.onNegotiation?.({sessionId:o.id,participants:l,status:"started"});let d=A=>{r?.onNegotiationMessage?.({sessionId:A.sessionId,agentId:A.message.from,type:A.message.type,content:A.message.content,round:A.message.round});};this.negotiationEngine.on("message_received",d);let m=await this.negotiationEngine.runFullNegotiation(o,l,c);this.negotiationEngine.off("message_received",d);let g={sessionId:o.id,success:m.success,proposal:m.proposal,participants:l,rounds:m.rounds,totalMessages:m.messageCount,duration:m.duration,failureReason:m.success?void 0:"Negotiation failed"};if(!g.success||!g.proposal)return this.emitEvent({type:"negotiation_failed",reason:g.failureReason??"\u672A\u80FD\u8FBE\u6210\u5171\u8BC6"}),r?.onNegotiation?.({sessionId:g.sessionId,participants:g.participants,status:"failed",rounds:g.rounds}),this.executePipelineMode(e,t,n,g.failureReason??"\u534F\u5546\u5931\u8D25",r);this.emitEvent({type:"consensus_reached",proposal:g.proposal}),r?.onNegotiation?.({sessionId:g.sessionId,participants:g.participants,status:"consensus",rounds:g.rounds});let h;if(m.session)try{h=await this.negotiationSummarizer.summarize(m.session);}catch(A){p.warn("NETWORK","Negotiation summary failed",{error:A instanceof Error?A.message:String(A)});}r?.onThinking?.("\u6B63\u5728\u6784\u5EFA\u6267\u884C\u8BA1\u5212...");let f=this.dagBuilder.createFromProposal(g.proposal);this.emitEvent({type:"dag_created",dag:f});let v=this.dagScheduler.calculateCriticalPath(f);p.debug("NETWORK","DAG scheduled",{dagId:f.id,criticalPathLength:v.criticalPath.length,estimatedDuration:v.totalDuration});let b=this.computeDAGLevels(f),C=[];for(let[A,O]of f.nodes)C.push({id:A,description:O.task?.description||A,agentId:O.assignedAgent||"unassigned",level:O.level,dependencies:O.dependencies||[]});r?.onDAGCreated?.({id:f.id,nodeCount:f.nodes.size,levelCount:b.length,maxParallelism:Math.max(...b.map(A=>A.length),1),criticalPath:v.criticalPath,estimatedTime:v.totalDuration,nodes:C}),r?.onThinking?.("\u6B63\u5728\u6267\u884C\u4EFB\u52A1..."),this.emitEvent({type:"execution_started",dagId:f.id});let T=A=>{let O=f.nodes.get(A.nodeId);this.currentExecutingAgentId=A.agentId,this.currentDagId=A.dagId,r?.onNodeStart?.({nodeId:A.nodeId,agentId:A.agentId,description:O?.task?.description||""});},w=A=>{let O=f.nodes.get(A.nodeId);this.currentExecutingAgentId===O?.assignedAgent&&(this.currentExecutingAgentId=null);let F=this.formatNodeOutputPreview(A.result?.output||A.output||"");r?.onNodeComplete?.({nodeId:A.nodeId,agentId:O?.assignedAgent||"",description:O?.task?.description||"",output:F,duration:O?.completedAt&&O?.startedAt?O.completedAt-O.startedAt:0,tokenUsage:A.result?.tokenUsage}),this.updateProgress(f,r);},E=A=>{let O=f.nodes.get(A.nodeId);r?.onNodeFail?.({nodeId:A.nodeId,agentId:O?.assignedAgent||"",description:O?.task?.description||"",error:A.error}),this.updateProgress(f,r);},N=new Map,D=A=>{r?.onAgentText?.(A.agentId,A.text);},$=A=>{let O=A.toolId||`${A.agentId}-tool-${A.nodeId}`;N.set(A.agentId,O),r?.onToolStart?.({agentId:A.agentId,toolName:A.tool,toolId:O,args:A.args,targetPath:A.targetPath,description:A.description});},k=A=>{let O=A.toolId||N.get(A.agentId)||`${A.agentId}-tool-${A.nodeId}`;r?.onToolEnd?.({agentId:A.agentId,toolName:A.tool,toolId:O,success:A.success,output:A.output,outputTruncated:A.outputTruncated,args:A.args,summary:A.summary,duration:A.duration});},M=A=>{r?.onReplan?.({dagId:A.dagId,trigger:"node_failure",reason:A.reason,affectedNodes:[]});};this.dagExecutor.on("node_started",T),this.dagExecutor.on("node_completed",w),this.dagExecutor.on("node_failed",E),this.dagExecutor.on("node_text",D),this.dagExecutor.on("node_tool_start",$),this.dagExecutor.on("node_tool_end",k),this.replanningEngine.on("replan_started",M);let _=await this.dagExecutor.execute(f.id,this.abortController?.signal);this.dagExecutor.off("node_started",T),this.dagExecutor.off("node_completed",w),this.dagExecutor.off("node_failed",E),this.dagExecutor.off("node_text",D),this.dagExecutor.off("node_tool_start",$),this.dagExecutor.off("node_tool_end",k),this.replanningEngine.off("replan_started",M),this.updateProgress(f,r),this.emitEvent({type:"execution_completed",result:_}),r?.onThinking?.("\u6B63\u5728\u8FDB\u884C\u4E92\u8BC4..."),this.emitEvent({type:"peer_review_started",dagId:f.id});let P=await this.conductPeerReviews(f,_);this.emitEvent({type:"peer_review_completed",summary:P}),r?.onPeerReview?.({reviewers:P.reputationUpdates.map(A=>A.agentId),averageScore:P.averageScore,summary:`${P.reviewCount} \u6B21\u8BC4\u5BA1\uFF0C\u5E73\u5747 ${P.averageScore.toFixed(1)}/5`});let j=await this.updateReputations(f,_,P);this.emitEvent({type:"reputation_updated",updates:j});let z={output:_.finalOutput??"",summary:{mode:"network",agentCount:l.length,agents:l,negotiationRounds:g.rounds,dagVersion:f.version,totalDuration:Date.now()-n,totalTokens:_.tokenStats?.total??0,successfulTasks:_.completedNodes,failedTasks:_.failedNodes},dag:f,negotiation:g,negotiationSummary:h,peerReviews:P};return this.emitEvent({type:"chat_completed",response:z}),r?.onComplete?.(`\u6267\u884C\u5B8C\u6210: ${_.completedNodes}/${f.nodes.size} \u4EFB\u52A1\u6210\u529F`),r?.onText?.(z.output),z}formatNodeOutputPreview(e){if(!e)return "";let r=e.replace(/```[\s\S]*?```/g,"").replace(/\r\n/g,`
3393
+ }`;try{let i=(await this.llmCall("\u4F60\u662F DAG \u8C03\u5EA6\u4E13\u5BB6\uFF0C\u64C5\u957F\u5206\u6790\u4EFB\u52A1\u4F9D\u8D56\u5173\u7CFB\u3002",r)).match(/\{[\s\S]*\}/);if(i){let a=JSON.parse(i[0]),l=e.nodes.get(a.insertAfter);if(l)return {dependencies:[a.insertAfter],level:l.level+1,affectedNodes:this.findDownstreamNodes(e,a.insertAfter)}}}catch{p.warn("PROGRESSIVE_DAG","LLM analysis failed, using priority-based");}return this.priorityBasedInsertion(e,t.priority)}priorityBasedInsertion(e,t){let n=[],r=[],o=[];for(let[i,a]of e.nodes)a.status==="running"?n.push(i):a.status==="pending"?r.push(i):a.status==="completed"&&o.push(i);if(t==="high"&&n.length>0)return {dependencies:n,level:Math.max(...n.map(i=>e.nodes.get(i).level))+1,affectedNodes:r};if(t==="low"){let i=Math.max(...Array.from(e.nodes.values()).map(l=>l.level));return {dependencies:Array.from(e.nodes.entries()).filter(([,l])=>l.level===i).map(([l])=>l),level:i+1,affectedNodes:[]}}if(o.length>0){let i=o[o.length-1],a=e.nodes.get(i);return {dependencies:[i],level:a.level+1,affectedNodes:r.slice(0,1)}}return {dependencies:[],level:0,affectedNodes:Array.from(e.nodes.keys())}}findDownstreamNodes(e,t){let n=[];for(let[r,o]of e.nodes)o.dependencies.includes(t)&&n.push(r);return n}updateDownstreamDependencies(e,t,n,r){let o=[];for(let i of n){let a=e.nodes.get(i);a&&a.status==="pending"&&r&&(a.dependencies.includes(t)||(a.dependencies.push(t),o.push(i)));}return o}};function Kb(s){return new nm(s)}Z();var gc={minAvailability:.3,minReputation:2,allowDynamicCreation:true,maxAgents:20},tA={programmer:"programmer",coder:"programmer",developer:"programmer",reviewer:"reviewer",architect:"architect",tester:"tester",frontend:"frontend",backend:"backend",fullstack:"fullstack",devops:"devops",security:"security",documenter:"documenter",debugger:"debugger",data:"data",coordinator:"coordinator"},rm=class extends EventEmitter{registry;factory;config;createdAgents=new Map;modelCapabilities;constructor(e,t,n){super(),this.registry=e,this.factory=t,this.config={minAvailability:n?.minAvailability??gc.minAvailability,minReputation:n?.minReputation??gc.minReputation,allowDynamicCreation:n?.allowDynamicCreation??gc.allowDynamicCreation,maxAgents:n?.maxAgents??gc.maxAgents},this.modelCapabilities=n?.modelCapabilities??new Map;}setModelCapabilities(e){this.modelCapabilities=e;}addModelCapability(e){this.modelCapabilities.set(e.modelId,e);}async matchOrCreate(e){let{subtask:t,requiredRole:n,requiredCapabilities:r}=e;p.debug("AGENT_MATCHER","Matching agent for subtask",{subtaskId:t.id,requiredRole:n,requiredCapabilities:r});let o=this.findBestMatch(e);if(o)return this.emit("agent_matched",{subtaskId:t.id,agentId:o.agent.id}),o;if(this.config.allowDynamicCreation){let a=this.createAgent(e);if(a)return this.emit("agent_created",{subtaskId:t.id,agentId:a.agent.id}),a}let i=this.findAnyAvailable();if(i)return i;throw new Error(`No agent available for subtask: ${t.id}`)}findBestMatch(e){let{requiredRole:t,requiredCapabilities:n,taskType:r,modelConstraints:o}=e,i=e.minAvailability??this.config.minAvailability,a=e.minReputation??this.config.minReputation,l=this.registry.getAll(),c=null;for(let u of l){if(u.availability<i||u.reputation<a||u.status!=="active")continue;let d=this.calculateScore(u,t,n,r,o);if(d.score>0&&(!c||d.score>c.score)){let m=this.registry.getInstance(u.id);m&&(c={agent:m,score:d.score,modelCapability:d.modelCapability,reasons:d.reasons});}}if(c){let u=c.modelCapability?c.modelCapability.cost.input+c.modelCapability.cost.output:void 0;return {agent:c.agent,isNewlyCreated:false,score:c.score,reason:c.reasons.join(", ")||"Matched existing agent",modelCapability:c.modelCapability,estimatedCost:u}}return null}calculateScore(e,t,n,r,o){let i=0,a=[];if(t&&e.role.name.toLowerCase().includes(t.toLowerCase())&&(i+=25,a.push(`\u89D2\u8272\u5339\u914D: ${t}`)),n?.length){let u=0;for(let m of n)e.capabilities.includes(m)&&u++;let d=u/n.length*25;i+=d,u>0&&a.push(`\u80FD\u529B\u5339\u914D: ${u}/${n.length}`);}i+=e.availability*15,i+=e.reputation/5*10;let l=e.metadata?.preferredModel,c;if(l&&this.modelCapabilities.size>0){if(c=this.modelCapabilities.get(l),c){if(o&&!this.checkModelConstraints(c,o))return {score:0,reasons:["\u6A21\u578B\u4E0D\u6EE1\u8DB3\u7EA6\u675F\u6761\u4EF6"]};if(r){let u=c.taskTypeScores[r]??.5;i+=u*25,u>=.7&&a.push(`\u6A21\u578B\u64C5\u957F ${r}`);}else i+=12.5;}}else i+=12.5;return {score:i,modelCapability:c,reasons:a}}checkModelConstraints(e,t){return !(t.maxCost!==void 0&&e.cost.input>t.maxCost||t.minContextWindow!==void 0&&e.contextWindow<t.minContextWindow||t.minReliability!==void 0&&e.performance.reliability<t.minReliability||t.requireTools&&!e.supportsTools||t.providerId&&e.providerId!==t.providerId||t.excludeModels?.includes(e.modelId))}createAgent(e){let{requiredRole:t,requiredCapabilities:n}=e;if(this.registry.getAll().length>=this.config.maxAgents)return p.warn("AGENT_MATCHER","Max agents reached"),null;let o=this.mapToRoleId(t);if(!o)return p.warn("AGENT_MATCHER","Unknown role",{requiredRole:t}),null;let i=this.factory.createFromRole(o,{additionalCapabilities:n});return this.registry.register(i),i.start(),this.createdAgents.set(i.id,i),p.info("AGENT_MATCHER","Created new agent",{agentId:i.id,role:o}),{agent:i,isNewlyCreated:true,score:100,reason:`Created new ${o} agent`}}mapToRoleId(e){if(!e)return "programmer";let t=e.toLowerCase();return tA[t]??"programmer"}findAnyAvailable(){let e=this.registry.getAll();for(let t of e)if(t.status==="active"&&t.availability>0){let n=this.registry.getInstance(t.id);if(n)return {agent:n,isNewlyCreated:false,score:1,reason:"Fallback to any available agent"}}return null}async matchAll(e){let t=new Map;for(let n of e){let r=await this.matchOrCreate({subtask:n,requiredCapabilities:n.requiredCapabilities});t.set(n.id,r);}return t}getCreatedAgents(){return Array.from(this.createdAgents.values())}};function Jb(s,e,t){return new rm(s,e,t)}var sm=class extends EventEmitter{config;resourcePool=new Map;waitQueue=[];constructor(e){super(),this.config={maxConcurrency:e?.maxConcurrency??5,resourceWaitTimeout:e?.resourceWaitTimeout??6e4};}calculateCriticalPath(e){let t=this.forwardPass(e),n=this.backwardPass(e,t),r=new Map,o=[];for(let[l,c]of t){let u=n.get(l),d=u.LS-c.ES,m=d===0;r.set(l,{ES:c.ES,EF:c.EF,LS:u.LS,LF:u.LF,slack:d,isCritical:m}),m&&o.push(l);}let i=Math.max(...Array.from(t.values()).map(l=>l.EF)),a=this.analyzeParallelism(e,r);return {criticalPath:o,totalDuration:i,nodeSchedule:r,parallelismAnalysis:a}}forwardPass(e){let t=new Map,n=r=>{if(t.has(r))return t.get(r);let o=e.nodes.get(r);if(!o)return {ES:0,EF:0};let i=0;for(let c of o.dependencies){let u=n(c);i=Math.max(i,u.EF);}let a=o.task.estimatedTime??6e4,l=i+a;return t.set(r,{ES:i,EF:l}),{ES:i,EF:l}};for(let r of e.nodes.keys())n(r);return t}backwardPass(e,t){let n=new Map,r=Math.max(...Array.from(t.values()).map(a=>a.EF)),o=new Map;for(let[a,l]of e.nodes)o.set(a,[]);for(let[a,l]of e.nodes)for(let c of l.dependencies)o.get(c)?.push(a);let i=a=>{if(n.has(a))return n.get(a);let l=e.nodes.get(a);if(!l)return {LS:r,LF:r};let c=o.get(a)||[],u=r;for(let g of c){let h=i(g);u=Math.min(u,h.LS);}let d=l.task.estimatedTime??6e4,m=u-d;return n.set(a,{LS:m,LF:u}),{LS:m,LF:u}};for(let a of e.nodes.keys())i(a);return n}analyzeParallelism(e,t){let n=new Set;for(let l of t.values())n.add(l.ES),n.add(l.EF);let r=Array.from(n).sort((l,c)=>l-c),o=0,i=0;for(let l=0;l<r.length-1;l++){let c=r[l],u=0;for(let d of t.values())d.ES<=c&&c<d.EF&&u++;o=Math.max(o,u),i+=u;}let a=r.length>1?i/(r.length-1):0;return {maxParallelism:o,avgParallelism:a}}registerResource(e){this.resourcePool.set(e,{agentId:e,status:"available"}),this.emit("resource_registered",{agentId:e}),this.processWaitQueue();}async allocateResource(e,t){let n=this.findAvailableResource(t);return n?(n.status="busy",n.currentTask=e,n.allocatedAt=Date.now(),this.emit("resource_allocated",{agentId:n.agentId,nodeId:e}),n):this.waitForResource(e,t)}releaseResource(e){let t=this.resourcePool.get(e);t&&(t.status="available",t.currentTask=void 0,t.allocatedAt=void 0,this.emit("resource_released",{agentId:e}),this.processWaitQueue());}findAvailableResource(e){for(let t of this.resourcePool.values())if(t.status==="available")return t;return null}waitForResource(e,t){return new Promise((n,r)=>{let o=setTimeout(()=>{let i=this.waitQueue.findIndex(a=>a.nodeId===e);i>=0&&this.waitQueue.splice(i,1),r(new Error(`Resource wait timeout for ${e}`));},this.config.resourceWaitTimeout);this.waitQueue.push({nodeId:e,requirements:t,resolve:i=>{clearTimeout(o),n(i);},reject:i=>{clearTimeout(o),r(i);}});})}processWaitQueue(){if(this.waitQueue.length===0)return;let e=this.waitQueue[0],t=this.findAvailableResource(e.requirements);t&&(this.waitQueue.shift(),t.status="busy",t.currentTask=e.nodeId,t.allocatedAt=Date.now(),e.resolve(t));}getPoolStatus(){let e=0,t=0;for(let n of this.resourcePool.values())n.status==="available"?e++:n.status==="busy"&&t++;return {total:this.resourcePool.size,available:e,busy:t}}};function Vb(s){return new sm(s)}var om=class extends EventEmitter{capabilities=new Map;constructor(e){if(super(),e?.presetCapabilities)for(let t of e.presetCapabilities)this.register(t);}get(e){return this.capabilities.get(e)}register(e){this.capabilities.set(e.modelId,e),this.emit("model_registered",{modelId:e.modelId});}getAll(){return Array.from(this.capabilities.values())}findBestForTask(e,t){let n=this.filterByConstraints(t);if(n.length===0)return null;let r=null,o=-1;for(let i of n){let a=i.taskTypeScores[e]??.5;a>o&&(o=a,r=i);}return r}findByStrength(e){return this.getAll().filter(t=>t.strengths.some(n=>n.toLowerCase().includes(e.toLowerCase())))}filterByConstraints(e){return e?this.getAll().filter(t=>!(e.maxCost&&t.cost.input>e.maxCost||e.minContextWindow&&t.contextWindow<e.minContextWindow||e.minReliability&&t.performance.reliability<e.minReliability||e.requireTools&&!t.supportsTools||e.providerId&&t.providerId!==e.providerId||e.excludeModels?.includes(t.modelId))):this.getAll()}matchModel(e,t,n){let r=this.filterByConstraints(n);if(r.length===0)return null;let o=null;for(let i of r){let{score:a,reasons:l}=this.calculateMatchScore(i,e,t);(!o||a>o.score)&&(o={model:i,score:a,reasons:l,estimatedCost:i.cost.input+i.cost.output});}return o}calculateMatchScore(e,t,n){let r=0,o=[],i=e.taskTypeScores[t]??.5;r+=i*40,i>=.8&&o.push(`\u64C5\u957F ${t} \u4EFB\u52A1`);let a=0;for(let u of n)e.strengths.some(d=>d.toLowerCase().includes(u.toLowerCase()))&&a++;let l=n.length>0?a/n.length:.5;r+=l*30,a>0&&o.push(`\u5339\u914D ${a}/${n.length} \u9879\u80FD\u529B`),r+=e.performance.reliability*15;let c=Math.max(0,1-(e.cost.input+e.cost.output)/.1);return r+=c*15,{score:r,reasons:o}}};function Yb(s){return new om(s)}Z();var eo=class extends EventEmitter{llmCall;config;registry;messageBus;biddingEngine;negotiationEngine;consensusBuilder;proposalGenerator;dagBuilder;dagExecutor;replanningEngine;peerReviewEngine;agentFactory;agentMatcher;rgpsDataFlowManager;progressiveManager;negotiationSummarizer;modelCapabilityRegistry;dagScheduler;agentSubscriptions=new Map;started=false;aborted=false;abortController=null;currentExecutingAgentId=null;currentDagId=null;executing=false;pendingUserMessages=[];constructor(e){super(),this.llmCall=e.llmCall,this.config={minComplexityForNetwork:e.minComplexityForNetwork??4,minAgentsRequired:e.minAgentsRequired??2,biddingTimeout:e.biddingTimeout??3e4,negotiationTimeout:e.negotiationTimeout??6e4,executionTimeout:e.executionTimeout??3e5,maxNegotiationRounds:e.maxNegotiationRounds??3,maxReplanAttempts:e.maxReplanAttempts??3,consensusThreshold:e.consensusThreshold??.67,autoCreateDefaultAgents:e.autoCreateDefaultAgents??true,customRoles:e.customRoles},this.registry=Nb(e.registryConfig),this.messageBus=Lb(e.messageBusConfig),this.biddingEngine=Ob(this.registry,this.messageBus,e.biddingConfig),this.negotiationEngine=$b(this.registry,this.messageBus,{...e.negotiationConfig,llmCall:this.llmCall}),this.consensusBuilder=Bb(e.negotiationConfig),this.proposalGenerator=Ub(this.registry,{...e.negotiationConfig,llmCall:this.llmCall}),this.dagBuilder=Gb(e.dagBuilderConfig),this.replanningEngine=Hb(this.registry,this.dagBuilder,e.replanningConfig),this.peerReviewEngine=zb(this.registry,e.peerReviewConfig),this.agentFactory=Rb({...e.agentFactoryConfig,llmCall:this.llmCall,executionCapability:e.executionCapability}),this.agentMatcher=Jb(this.registry,this.agentFactory),this.rgpsDataFlowManager=qb({strictMode:false,autoInfer:true}),this.progressiveManager=Kb({dagBuilder:this.dagBuilder,agentMatcher:this.agentMatcher,llmCall:this.llmCall,maxExpansions:10,maxNodes:50,autoAssignAgent:true}),this.dagExecutor=Wb(this.registry,this.dagBuilder,{...e.dagExecutorConfig,rgpsDataFlowManager:this.rgpsDataFlowManager,agentMatcher:this.agentMatcher,progressiveManager:this.progressiveManager,enableProgressiveExpansion:true}),this.negotiationSummarizer=jb({llmCall:this.llmCall}),this.modelCapabilityRegistry=Yb({presetCapabilities:e.presetModelCapabilities});let t=this.modelCapabilityRegistry.getAll();if(t.length>0){let n=new Map;for(let r of t)n.set(r.modelId,r);this.agentMatcher.setModelCapabilities(n);}this.dagScheduler=Vb({maxConcurrency:e.dagSchedulerMaxConcurrency??5,resourceWaitTimeout:6e4}),this.setupEventListeners();}start(){if(this.started)return;this.started=true,this.registry.start(),this.config.autoCreateDefaultAgents&&this.createDefaultAgents(),this.subscribeExistingAgents();let e=this.registry.getStats();p.info("NETWORK",`Started with ${e.total} agents`,{active:e.active,busy:e.busy}),this.emitEvent({type:"runtime_started"});}stop(){this.started&&(this.started=false,this.registry.stop(),this.clearAgentSubscriptions(),this.cleanupEventListeners(),this.emitEvent({type:"runtime_stopped"}));}isExecuting(){return this.executing}getCurrentExecutingAgentId(){return this.currentExecutingAgentId}injectUserMessage(e){if(!this.executing)return p.warn("NETWORK","Cannot inject message: no task executing"),false;if(p.info("NETWORK","Injecting user message",{message:e.substring(0,100),currentAgentId:this.currentExecutingAgentId,currentDagId:this.currentDagId}),this.pendingUserMessages.push(e),this.currentExecutingAgentId){let t=this.registry.getInstance(this.currentExecutingAgentId);t&&typeof t.injectUserMessage=="function"&&(t.injectUserMessage(e),p.info("NETWORK","Message injected to agent",{agentId:this.currentExecutingAgentId}));}return this.emit("user_message_injected",{message:e,agentId:this.currentExecutingAgentId}),true}consumePendingUserMessages(){let e=[...this.pendingUserMessages];return this.pendingUserMessages=[],e}setCurrentExecutingAgent(e){this.currentExecutingAgentId=e;}cleanupEventListeners(){this.registry.removeAllListeners("agent_registered"),this.registry.removeAllListeners("agent_unregistered"),this.dagExecutor.removeAllListeners("node_started"),this.dagExecutor.removeAllListeners("node_completed"),this.dagExecutor.removeAllListeners("node_failed"),this.dagExecutor.removeAllListeners("replan_required"),this.replanningEngine.removeAllListeners("replan_started"),this.replanningEngine.removeAllListeners("replan_completed"),this.biddingEngine.removeAllListeners("bid_received"),this.progressiveManager.removeAllListeners("dag_expanded"),this.progressiveManager.removeAllListeners("user_requirement_inserted");}async chat(e,t){let n=Date.now();p.debug("NETWORK",">>> chat() started",{promptLength:e.prompt?.length}),this.aborted=false,this.abortController=new AbortController,this.executing=true,this.currentExecutingAgentId=null,this.currentDagId=null,this.pendingUserMessages=[];let r=0,o=0,i=this.llmCall.bind(this),a=async(l,c,u)=>{let d={...u,signal:u?.signal||this.abortController?.signal},m=await i(l,c,d),g=Math.ceil((l.length+c.length)/4),h=Math.ceil(m.length/4);return r+=g,o+=h,t?.onTokenUsage?.({inputTokens:g,outputTokens:h,totalInputTokens:r,totalOutputTokens:o}),m};this.llmCall=a,this.progressiveManager.setLlmCall(a),this.negotiationSummarizer.setLlmCall(a),this.negotiationEngine.setLlmCall(a),this.proposalGenerator.setLlmCall(a),this.replanningEngine.setLlmCall(a),this.peerReviewEngine.setLlmCall(a);try{if(t?.onThinking?.("\u6B63\u5728\u5206\u6790\u4EFB\u52A1..."),this.aborted)throw new Error("Task aborted by user");p.debug("NETWORK",">>> Phase 1: analyzeTask starting");let l=await this.analyzeTask(e.prompt,e.context);if(this.aborted)throw new Error("Task aborted by user");p.debug("NETWORK",">>> Phase 1: analyzeTask completed",{complexity:l.complexity,requiresCollaboration:l.requiresCollaboration}),this.emitEvent({type:"task_analyzed",analysis:l}),t?.onAnalysis?.(l),p.debug("NETWORK",">>> Phase 2: selectMode starting");let c=this.selectMode(l);return p.debug("NETWORK",">>> Phase 2: selectMode completed",{mode:c.mode,reason:c.reason}),this.emitEvent({type:"mode_selected",mode:c.mode,reason:c.reason}),t?.onModeSelect?.(c.mode,c.reason,l.rawAnalysis),c.mode==="simple"?(p.debug("NETWORK",">>> Routing to executeSimpleMode"),this.executeSimpleMode(e,l,n,t)):c.mode==="pipeline"?this.executePipelineMode(e,l,n,c.reason,t):await this.executeNetworkMode(e,l,n,t)}catch(l){let c=l instanceof Error?l.message:String(l);throw this.emitEvent({type:"chat_failed",error:c}),t?.onError?.(l instanceof Error?l:new Error(c)),l}finally{this.llmCall=i,this.executing=false,this.currentExecutingAgentId=null,this.currentDagId=null;}}async executeNetworkMode(e,t,n,r){if(this.aborted)throw new Error("Task aborted by user");r?.onThinking?.("\u6B63\u5728\u5E7F\u64AD\u4EFB\u52A1...");let o={id:`task-${Date.now()}`,description:t.description,userRequest:e.prompt,requiredCapabilities:t.requiredCapabilities,optionalCapabilities:t.optionalCapabilities,estimatedComplexity:t.complexity,priority:t.priority,tokenBudget:e.tokenBudget,context:e.context,broadcastedAt:Date.now(),bidDeadline:Date.now()+this.config.biddingTimeout};this.emitEvent({type:"task_broadcasted",task:o}),r?.onThinking?.("\u6B63\u5728\u6536\u96C6\u7ADE\u6807..."),r?.onBiddingStart?.(o.id),this.emitEvent({type:"bidding_started",taskId:o.id});let i=this.registry.getAll().map(A=>A.id),a=await this.biddingEngine.requestBidsFromAgents(o,i,{timeout:this.config.biddingTimeout,onAgentDecision:A=>{r?.onAgentBidDecision?.(A);}}),l=a.selectedAgents,c=a.bids,u=c.length>0?{agentId:c[0].agentId,confidence:c[0].confidence}:void 0;if(this.emitEvent({type:"bidding_completed",bids:c,selectedAgents:l}),r?.onBiddingComplete?.({taskId:o.id,totalBids:c.length,selectedAgents:l,topBid:u}),l.length<this.config.minAgentsRequired)return this.executePipelineMode(e,t,n,"\u7ADE\u6807 Agent \u6570\u91CF\u4E0D\u8DB3",r);this.emitEvent({type:"agents_selected",agentIds:l}),r?.onThinking?.("\u6B63\u5728\u534F\u5546\u6267\u884C\u8BA1\u5212..."),this.emitEvent({type:"negotiation_started",sessionId:o.id,participants:l}),r?.onNegotiation?.({sessionId:o.id,participants:l,status:"started"});let d=A=>{r?.onNegotiationMessage?.({sessionId:A.sessionId,agentId:A.message.from,type:A.message.type,content:A.message.content,round:A.message.round});};this.negotiationEngine.on("message_received",d);let m=await this.negotiationEngine.runFullNegotiation(o,l,c);this.negotiationEngine.off("message_received",d);let g={sessionId:o.id,success:m.success,proposal:m.proposal,participants:l,rounds:m.rounds,totalMessages:m.messageCount,duration:m.duration,failureReason:m.success?void 0:"Negotiation failed"};if(!g.success||!g.proposal)return this.emitEvent({type:"negotiation_failed",reason:g.failureReason??"\u672A\u80FD\u8FBE\u6210\u5171\u8BC6"}),r?.onNegotiation?.({sessionId:g.sessionId,participants:g.participants,status:"failed",rounds:g.rounds}),this.executePipelineMode(e,t,n,g.failureReason??"\u534F\u5546\u5931\u8D25",r);this.emitEvent({type:"consensus_reached",proposal:g.proposal}),r?.onNegotiation?.({sessionId:g.sessionId,participants:g.participants,status:"consensus",rounds:g.rounds});let h;if(m.session)try{h=await this.negotiationSummarizer.summarize(m.session);}catch(A){p.warn("NETWORK","Negotiation summary failed",{error:A instanceof Error?A.message:String(A)});}r?.onThinking?.("\u6B63\u5728\u6784\u5EFA\u6267\u884C\u8BA1\u5212...");let f=this.dagBuilder.createFromProposal(g.proposal);this.emitEvent({type:"dag_created",dag:f});let v=this.dagScheduler.calculateCriticalPath(f);p.debug("NETWORK","DAG scheduled",{dagId:f.id,criticalPathLength:v.criticalPath.length,estimatedDuration:v.totalDuration});let b=this.computeDAGLevels(f),C=[];for(let[A,O]of f.nodes)C.push({id:A,description:O.task?.description||A,agentId:O.assignedAgent||"unassigned",level:O.level,dependencies:O.dependencies||[]});r?.onDAGCreated?.({id:f.id,nodeCount:f.nodes.size,levelCount:b.length,maxParallelism:Math.max(...b.map(A=>A.length),1),criticalPath:v.criticalPath,estimatedTime:v.totalDuration,nodes:C}),r?.onThinking?.("\u6B63\u5728\u6267\u884C\u4EFB\u52A1..."),this.emitEvent({type:"execution_started",dagId:f.id});let T=A=>{let O=f.nodes.get(A.nodeId);this.currentExecutingAgentId=A.agentId,this.currentDagId=A.dagId,r?.onNodeStart?.({nodeId:A.nodeId,agentId:A.agentId,description:O?.task?.description||""});},w=A=>{let O=f.nodes.get(A.nodeId);this.currentExecutingAgentId===O?.assignedAgent&&(this.currentExecutingAgentId=null);let F=this.formatNodeOutputPreview(A.result?.output||A.output||"");r?.onNodeComplete?.({nodeId:A.nodeId,agentId:O?.assignedAgent||"",description:O?.task?.description||"",output:F,duration:O?.completedAt&&O?.startedAt?O.completedAt-O.startedAt:0,tokenUsage:A.result?.tokenUsage}),this.updateProgress(f,r);},E=A=>{let O=f.nodes.get(A.nodeId);r?.onNodeFail?.({nodeId:A.nodeId,agentId:O?.assignedAgent||"",description:O?.task?.description||"",error:A.error}),this.updateProgress(f,r);},N=new Map,D=A=>{r?.onAgentText?.(A.agentId,A.text);},$=A=>{let O=A.toolId||`${A.agentId}-tool-${A.nodeId}`;N.set(A.agentId,O),r?.onToolStart?.({agentId:A.agentId,toolName:A.tool,toolId:O,args:A.args,targetPath:A.targetPath,description:A.description});},k=A=>{let O=A.toolId||N.get(A.agentId)||`${A.agentId}-tool-${A.nodeId}`;r?.onToolEnd?.({agentId:A.agentId,toolName:A.tool,toolId:O,success:A.success,output:A.output,outputTruncated:A.outputTruncated,args:A.args,summary:A.summary,duration:A.duration});},M=A=>{r?.onReplan?.({dagId:A.dagId,trigger:"node_failure",reason:A.reason,affectedNodes:[]});};this.dagExecutor.on("node_started",T),this.dagExecutor.on("node_completed",w),this.dagExecutor.on("node_failed",E),this.dagExecutor.on("node_text",D),this.dagExecutor.on("node_tool_start",$),this.dagExecutor.on("node_tool_end",k),this.replanningEngine.on("replan_started",M);let _=await this.dagExecutor.execute(f.id,this.abortController?.signal);this.dagExecutor.off("node_started",T),this.dagExecutor.off("node_completed",w),this.dagExecutor.off("node_failed",E),this.dagExecutor.off("node_text",D),this.dagExecutor.off("node_tool_start",$),this.dagExecutor.off("node_tool_end",k),this.replanningEngine.off("replan_started",M),this.updateProgress(f,r),this.emitEvent({type:"execution_completed",result:_}),r?.onThinking?.("\u6B63\u5728\u8FDB\u884C\u4E92\u8BC4..."),this.emitEvent({type:"peer_review_started",dagId:f.id});let P=await this.conductPeerReviews(f,_);this.emitEvent({type:"peer_review_completed",summary:P}),r?.onPeerReview?.({reviewers:P.reputationUpdates.map(A=>A.agentId),averageScore:P.averageScore,summary:`${P.reviewCount} \u6B21\u8BC4\u5BA1\uFF0C\u5E73\u5747 ${P.averageScore.toFixed(1)}/5`});let j=await this.updateReputations(f,_,P);this.emitEvent({type:"reputation_updated",updates:j});let z={output:_.finalOutput??"",summary:{mode:"network",agentCount:l.length,agents:l,negotiationRounds:g.rounds,dagVersion:f.version,totalDuration:Date.now()-n,totalTokens:_.tokenStats?.total??0,successfulTasks:_.completedNodes,failedTasks:_.failedNodes},dag:f,negotiation:g,negotiationSummary:h,peerReviews:P};return this.emitEvent({type:"chat_completed",response:z}),r?.onComplete?.(`\u6267\u884C\u5B8C\u6210: ${_.completedNodes}/${f.nodes.size} \u4EFB\u52A1\u6210\u529F`),r?.onText?.(z.output),z}formatNodeOutputPreview(e){if(!e)return "";let r=e.replace(/```[\s\S]*?```/g,"").replace(/\r\n/g,`
3394
3394
  `).split(`
3395
3395
  `).map(i=>i.trim()).filter(i=>i.length>0).find(i=>!i.startsWith("{")&&!i.startsWith("["));if(!r)return "";let o=r.replace(/\s+/g," ");return o.length>160?`${o.slice(0,157)}...`:o}updateProgress(e,t){let n=0,r=0,o=0,i=0;for(let[,a]of e.nodes)switch(a.status){case "completed":n++;break;case "running":r++;break;case "failed":i++;break;default:o++;}t?.onProgress?.({completed:n,running:r,pending:o,failed:i,total:e.nodes.size});}computeDAGLevels(e){let t=[],n=new Set,r=new Set(e.nodes.keys());for(;r.size>0;){let o=[];for(let i of r)(e.nodes.get(i).dependencies||[]).every(c=>n.has(c))&&o.push(i);if(o.length===0)break;for(let i of o)n.add(i),r.delete(i);t.push(o);}return t}async executeSimpleMode(e,t,n,r){if(this.aborted)throw new Error("Task aborted by user");r?.onThinking?.("\u6B63\u5728\u5206\u914D Agent...");let o=await this.agentMatcher.matchOrCreate({subtask:{id:"simple-task",description:t.description,dependencies:[],estimatedTime:6e4,estimatedTokens:t.estimatedTokens,requiredCapabilities:t.requiredCapabilities},requiredCapabilities:t.requiredCapabilities}),i=o.agent;r?.onNodeStart?.({nodeId:"simple-task",agentId:i.id,description:t.description||e.prompt.slice(0,100)}),r?.onThinking?.(`Agent ${i.id} \u6B63\u5728\u6267\u884C...`);let a=0,l=new Map,c=h=>{r?.onAgentText?.(h.agentId,h.text);},u=h=>{let f=h.toolId||`${h.agentId}-tool-${++a}`;p.debug("NETWORK",`Agent ${h.agentId} tool start: ${h.tool}`),l.set(h.agentId,f),r?.onToolStart?.({agentId:h.agentId,toolName:h.tool,toolId:f,args:h.args,targetPath:h.targetPath,description:h.description});},d=h=>{let f=h.toolId||l.get(h.agentId)||`${h.agentId}-tool-${a}`;p.debug("NETWORK",`Agent ${h.agentId} tool end: ${h.tool}`),r?.onToolEnd?.({agentId:h.agentId,toolName:h.tool,toolId:f,success:h.success,output:h.output,outputTruncated:h.outputTruncated,args:h.args,summary:h.summary,duration:h.duration});};i.on("task_text",c),i.on("task_tool_start",u),i.on("task_tool_end",d),p.debug("NETWORK",`Agent ${i.id} starting executeTask`,{isNewlyCreated:o.isNewlyCreated,score:o.score});let m;try{m=await i.executeTask(e.prompt,void 0,void 0,{abortSignal:this.abortController?.signal});}finally{i.off("task_text",c),i.off("task_tool_start",u),i.off("task_tool_end",d);}p.debug("NETWORK",`Agent ${i.id} completed executeTask`,{outputLength:m.output?.length}),r?.onNodeComplete?.({nodeId:"simple-task",agentId:i.id,description:t.description||e.prompt.slice(0,100),output:this.formatNodeOutputPreview(m.output),duration:Date.now()-n,tokenUsage:m.tokenUsage});let g={output:m.output,summary:{mode:"simple",agentCount:1,agents:[i.id],negotiationRounds:0,dagVersion:0,totalDuration:Date.now()-n,totalTokens:m.tokenUsage?.total??0,successfulTasks:1,failedTasks:0}};return this.emitEvent({type:"chat_completed",response:g}),r?.onComplete?.("\u6267\u884C\u5B8C\u6210 (Simple \u6A21\u5F0F)"),r?.onText?.(g.output),g}async executePipelineMode(e,t,n,r,o){if(this.aborted)throw new Error("Task aborted by user");o?.onThinking?.(`\u964D\u7EA7\u5230 Pipeline \u6A21\u5F0F: ${r}`);let i={id:`pipeline-${Date.now()}`,description:t.description,userRequest:e.prompt,requiredCapabilities:t.requiredCapabilities,optionalCapabilities:t.optionalCapabilities,estimatedComplexity:t.complexity,priority:t.priority,tokenBudget:e.tokenBudget,broadcastedAt:Date.now(),bidDeadline:Date.now()+3e4};o?.onThinking?.("\u6B63\u5728\u751F\u6210\u6267\u884C\u8BA1\u5212...");let a=await this.proposalGenerator.generateProposal(`pipeline-${Date.now()}`,i,[]),l=this.dagBuilder.createFromProposal(a),c=this.dagScheduler.calculateCriticalPath(l),u=this.computeDAGLevels(l),d=[];for(let[N,D]of l.nodes)d.push({id:N,description:D.task?.description||N,agentId:D.assignedAgent||"unassigned",level:D.level,dependencies:D.dependencies||[]});o?.onDAGCreated?.({id:l.id,nodeCount:l.nodes.size,levelCount:u.length,maxParallelism:Math.max(...u.map(N=>N.length),1),criticalPath:c.criticalPath,estimatedTime:c.totalDuration,nodes:d});let m=N=>{let D=l.nodes.get(N.nodeId);o?.onNodeStart?.({nodeId:N.nodeId,agentId:N.agentId,description:D?.task?.description||""});},g=N=>{let D=l.nodes.get(N.nodeId),$=this.formatNodeOutputPreview(N.result?.output||"");o?.onNodeComplete?.({nodeId:N.nodeId,agentId:D?.assignedAgent||"",description:D?.task?.description||"",output:$,duration:D?.completedAt&&D?.startedAt?D.completedAt-D.startedAt:0,tokenUsage:N.result?.tokenUsage}),this.updateProgress(l,o);},h=N=>{let D=l.nodes.get(N.nodeId);o?.onNodeFail?.({nodeId:N.nodeId,agentId:D?.assignedAgent||"",description:D?.task?.description||"",error:N.error}),this.updateProgress(l,o);},f=new Map,v=N=>{o?.onAgentText?.(N.agentId,N.text);},b=N=>{let D=N.toolId||`${N.agentId}-tool-${N.nodeId}`;f.set(N.agentId,D),o?.onToolStart?.({agentId:N.agentId,toolName:N.tool,toolId:D,args:N.args,targetPath:N.targetPath,description:N.description});},C=N=>{let D=N.toolId||f.get(N.agentId)||`${N.agentId}-tool-${N.nodeId}`;o?.onToolEnd?.({agentId:N.agentId,toolName:N.tool,toolId:D,success:N.success,output:N.output,outputTruncated:N.outputTruncated,args:N.args,summary:N.summary,duration:N.duration});};this.dagExecutor.on("node_started",m),this.dagExecutor.on("node_completed",g),this.dagExecutor.on("node_failed",h),this.dagExecutor.on("node_text",v),this.dagExecutor.on("node_tool_start",b),this.dagExecutor.on("node_tool_end",C),o?.onThinking?.("\u6B63\u5728\u6267\u884C\u4EFB\u52A1...");let T=await this.dagExecutor.execute(l.id,this.abortController?.signal);this.dagExecutor.off("node_started",m),this.dagExecutor.off("node_completed",g),this.dagExecutor.off("node_failed",h),this.dagExecutor.off("node_text",v),this.dagExecutor.off("node_tool_start",b),this.dagExecutor.off("node_tool_end",C),this.updateProgress(l,o);let w=new Set;for(let N of l.nodes.values())N.assignedAgent&&w.add(N.assignedAgent);let E={output:T.finalOutput??"",summary:{mode:"pipeline",fallbackReason:r,agentCount:w.size,agents:Array.from(w),negotiationRounds:0,dagVersion:l.version,totalDuration:Date.now()-n,totalTokens:T.tokenStats?.total??0,successfulTasks:T.completedNodes,failedTasks:T.failedNodes},dag:l};return this.emitEvent({type:"chat_completed",response:E}),o?.onComplete?.(`\u6267\u884C\u5B8C\u6210 (Pipeline \u6A21\u5F0F: ${r})`),o?.onText?.(E.output),E}async analyzeTask(e,t){p.debug("NETWORK",">>> analyzeTask: building prompt");let n=`
3396
3396
  \u5206\u6790\u4EE5\u4E0B\u7528\u6237\u8BF7\u6C42\uFF0C\u63D0\u53D6\u4EFB\u52A1\u4FE1\u606F\uFF1A
@@ -3473,7 +3473,7 @@ Neox CLI - AI \u4EE3\u7801\u52A9\u624B (AI Code Assistant) v${s}
3473
3473
  \u66F4\u591A\u4FE1\u606F (More Info):
3474
3474
  \u6587\u6863 (Docs): https://github.com/your-repo/Neox
3475
3475
  \u95EE\u9898 (Issues): https://github.com/your-repo/Neox/issues
3476
- `);}function Qb(s){console.log(`Neox CLI v${s}`);}Z();var oA=he__default.join(Lr,"workspaces"),iA=200,aA=20,lA=50,cA=40,uA=4e3,am=8,dA=240,pA=8,mA=256*1024,lm=6,Ii=240,Zb=512*1024,gA=1500,hA=15e3,fA=6,yA=30,bA="claude-haiku";function vA(s){return s.toLowerCase().replace(/[^a-z0-9-_]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,24)||"workspace"}function CA(s){let e=he__default.resolve(s),t=vA(he__default.basename(e)),n=er.createHash("sha1").update(e).digest("hex").slice(0,12);return `${t}-${n}`}function xA(s){return new Date(s).toISOString().slice(0,10)}function Ei(s){let e=new Date(s),t=n=>String(n).padStart(2,"0");return [e.getFullYear(),t(e.getMonth()+1),t(e.getDate())].join("-")+` ${t(e.getHours())}:${t(e.getMinutes())}`}function jt(s,e){return s?s.length<=e?s:s.slice(0,e).trimEnd()+"...":""}var Ai=class{options;workspacePath=null;workspaceId=null;workspaceName=null;eventsDir=null;memoriesDir=null;memoryPaths=null;graphPaths=null;indexPath=null;summaryPath=null;sessionSummaryPath=null;metaPath=null;seq=0;currentDate=null;currentFile=null;currentFileBytes=0;queue=[];sessionSummaryQueue=[];memoryQueue=[];graphNodeQueue=[];graphEdgeQueue=[];summarizerOverrides;summarizerQueue=[];summarizerTimer=null;summarizerRunning=false;summarizerLastRun=0;summarizerProvider=null;summarizerProviderModel=null;summaryItems=[];summaryDirty=false;runAggregates=new Map;flushTimer=null;isFlushing=false;flushPending=false;ready=false;initPromise=null;createdAt=Date.now();constructor(e={}){this.options={flushIntervalMs:e.flushIntervalMs??iA,batchSize:e.batchSize??aA,indexStride:e.indexStride??lA,summaryWindow:e.summaryWindow??cA,maxSummaryChars:e.maxSummaryChars??uA,source:e.source,agentName:e.agentName},this.summarizerOverrides=e.summarizer,e.workspacePath&&this.setWorkspace(e.workspacePath);}async setWorkspace(e){let t=he__default.resolve(e);if(this.workspacePath===t)return;await this.flush(),this.workspacePath=t,this.workspaceName=he__default.basename(t),this.workspaceId=CA(t);let n=he__default.join(oA,this.workspaceId);this.eventsDir=he__default.join(n,"events"),this.memoriesDir=he__default.join(n,"memories"),this.memoryPaths={progress:he__default.join(this.memoriesDir,"progress.jsonl"),standard:he__default.join(this.memoriesDir,"standards.jsonl"),lesson:he__default.join(this.memoriesDir,"lessons.jsonl"),pinned:he__default.join(this.memoriesDir,"pinned.jsonl")},this.graphPaths={nodes:he__default.join(this.memoriesDir,"graph_nodes.jsonl"),edges:he__default.join(this.memoriesDir,"graph_edges.jsonl")},this.indexPath=he__default.join(this.eventsDir,"index.jsonl"),this.summaryPath=he__default.join(this.eventsDir,"recent_summary.json"),this.sessionSummaryPath=this.memoriesDir?he__default.join(this.memoriesDir,"session_summary.jsonl"):null,this.metaPath=he__default.join(this.eventsDir,"meta.json"),this.currentDate=null,this.currentFile=null,this.currentFileBytes=0,this.sessionSummaryQueue=[],this.memoryQueue=[],this.graphNodeQueue=[],this.graphEdgeQueue=[],this.summarizerQueue=[],this.summarizerProvider=null,this.summarizerProviderModel=null,this.runAggregates.clear(),this.ready=false,this.initPromise=this.initializeWorkspace(),await this.initPromise;}formatFilePath(e){if(!this.workspacePath)return e;let t=he__default.relative(this.workspacePath,e);return !t||t.startsWith("..")?e:t}record(e){if(!this.workspacePath||!this.workspaceId)return;let t={schemaVersion:1,id:er.randomUUID(),seq:++this.seq,ts:e.ts??Date.now(),workspaceId:this.workspaceId,workspacePath:this.workspacePath,type:e.type,sessionId:e.sessionId,runId:e.runId,actor:e.actor,summary:e.summary,reason:e.reason,files:e.files,data:e.data};this.queue.push(t),this.updateSummary(t),this.updateRunAggregate(t),this.maybeQueueSessionSummary(t),this.queueMemoryEntries(this.extractMemoryEntries(t),"event"),this.queueGraphEntries(this.extractGraphEntries(t));let n=t.type==="run_result"||t.type==="run_error";(this.queue.length>=this.options.batchSize||n)&&this.flush();}createRunId(){return er.randomUUID()}async getContextSummary(e){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let t=e?.language??"zh",n=e?.maxItems??this.options.summaryWindow,r=e?.maxSessionItems??am,o=e?.maxMemoryItems??lm,i=e?.maxChars??this.options.maxSummaryChars,a=e?.query?.trim(),l=t==="zh"?{memoryHeader:"## \u9879\u76EE\u8BB0\u5FC6\uFF08\u81EA\u52A8\uFF09",pinned:"### \u56FA\u5B9A",progress:"### \u8FDB\u5EA6",standard:"### \u89C4\u8303",lesson:"### \u6559\u8BAD",sessionHeader:"## \u4F1A\u8BDD\u6458\u8981",activityHeader:"## \u6700\u8FD1\u5DE5\u4F5C\u6458\u8981"}:{memoryHeader:"## Project Memory (Auto)",pinned:"### Pinned",progress:"### Progress",standard:"### Standards",lesson:"### Lessons",sessionHeader:"## Session Summary",activityHeader:"## Recent Workspace Activity"},c=null;if(a){let A=this.tokenizeQuery(a);c={tokens:A,graphMatches:await this.getGraphRunMatches(A)};}let u=a&&c?await this.getRelevantSessionSummaries(a,r,c):await this.getRecentSessionSummaries(r),d=a&&c?await this.getRelevantMemoryItems(a,o,c):{pinned:await this.getRecentMemoryItems("pinned",o),progress:await this.getRecentMemoryItems("progress",o),standard:await this.getRecentMemoryItems("standard",o),lesson:await this.getRecentMemoryItems("lesson",o)},m=d.pinned,g=d.progress,h=d.standard,f=d.lesson,v=this.summaryItems.slice(-n),b=A=>A.map(O=>`- [${Ei(O.ts)}] ${O.summary}`),C=b(u),T=b(m),w=b(g),E=b(h),N=b(f),D=b(v),$=[{key:"pinned",title:l.pinned,lines:T},{key:"progress",title:l.progress,lines:w},{key:"standard",title:l.standard,lines:E},{key:"lesson",title:l.lesson,lines:N}],k={key:"activity",title:l.activityHeader,lines:D},M={key:"session",title:l.sessionHeader,lines:C};if($.every(A=>A.lines.length===0)&&C.length===0&&D.length===0)return null;let _=()=>{let A=[],O=$.filter(F=>F.lines.length>0).map(F=>`${F.title}
3476
+ `);}function Qb(s){console.log(`Neox CLI v${s}`);}Z();var iA=he__default.join(Lr,"workspaces"),aA=200,lA=20,cA=50,uA=40,dA=4e3,am=8,pA=240,mA=8,gA=256*1024,lm=6,Ii=240,Zb=512*1024,hA=1500,fA=15e3,yA=6,bA=30,vA="claude-haiku";function CA(s){return s.toLowerCase().replace(/[^a-z0-9-_]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").slice(0,24)||"workspace"}function xA(s){let e=he__default.resolve(s),t=CA(he__default.basename(e)),n=er.createHash("sha1").update(e).digest("hex").slice(0,12);return `${t}-${n}`}function TA(s){return new Date(s).toISOString().slice(0,10)}function Ei(s){let e=new Date(s),t=n=>String(n).padStart(2,"0");return [e.getFullYear(),t(e.getMonth()+1),t(e.getDate())].join("-")+` ${t(e.getHours())}:${t(e.getMinutes())}`}function jt(s,e){return s?s.length<=e?s:s.slice(0,e).trimEnd()+"...":""}var Ai=class{options;workspacePath=null;workspaceId=null;workspaceName=null;eventsDir=null;memoriesDir=null;memoryPaths=null;graphPaths=null;indexPath=null;summaryPath=null;sessionSummaryPath=null;metaPath=null;seq=0;currentDate=null;currentFile=null;currentFileBytes=0;queue=[];sessionSummaryQueue=[];memoryQueue=[];graphNodeQueue=[];graphEdgeQueue=[];summarizerOverrides;summarizerQueue=[];summarizerTimer=null;summarizerRunning=false;summarizerLastRun=0;summarizerProvider=null;summarizerProviderModel=null;summaryItems=[];summaryDirty=false;runAggregates=new Map;flushTimer=null;isFlushing=false;flushPending=false;ready=false;initPromise=null;createdAt=Date.now();constructor(e={}){this.options={flushIntervalMs:e.flushIntervalMs??aA,batchSize:e.batchSize??lA,indexStride:e.indexStride??cA,summaryWindow:e.summaryWindow??uA,maxSummaryChars:e.maxSummaryChars??dA,source:e.source,agentName:e.agentName},this.summarizerOverrides=e.summarizer,e.workspacePath&&this.setWorkspace(e.workspacePath);}async setWorkspace(e){let t=he__default.resolve(e);if(this.workspacePath===t)return;await this.flush(),this.workspacePath=t,this.workspaceName=he__default.basename(t),this.workspaceId=xA(t);let n=he__default.join(iA,this.workspaceId);this.eventsDir=he__default.join(n,"events"),this.memoriesDir=he__default.join(n,"memories"),this.memoryPaths={progress:he__default.join(this.memoriesDir,"progress.jsonl"),standard:he__default.join(this.memoriesDir,"standards.jsonl"),lesson:he__default.join(this.memoriesDir,"lessons.jsonl"),pinned:he__default.join(this.memoriesDir,"pinned.jsonl")},this.graphPaths={nodes:he__default.join(this.memoriesDir,"graph_nodes.jsonl"),edges:he__default.join(this.memoriesDir,"graph_edges.jsonl")},this.indexPath=he__default.join(this.eventsDir,"index.jsonl"),this.summaryPath=he__default.join(this.eventsDir,"recent_summary.json"),this.sessionSummaryPath=this.memoriesDir?he__default.join(this.memoriesDir,"session_summary.jsonl"):null,this.metaPath=he__default.join(this.eventsDir,"meta.json"),this.currentDate=null,this.currentFile=null,this.currentFileBytes=0,this.sessionSummaryQueue=[],this.memoryQueue=[],this.graphNodeQueue=[],this.graphEdgeQueue=[],this.summarizerQueue=[],this.summarizerProvider=null,this.summarizerProviderModel=null,this.runAggregates.clear(),this.ready=false,this.initPromise=this.initializeWorkspace(),await this.initPromise;}formatFilePath(e){if(!this.workspacePath)return e;let t=he__default.relative(this.workspacePath,e);return !t||t.startsWith("..")?e:t}record(e){if(!this.workspacePath||!this.workspaceId)return;let t={schemaVersion:1,id:er.randomUUID(),seq:++this.seq,ts:e.ts??Date.now(),workspaceId:this.workspaceId,workspacePath:this.workspacePath,type:e.type,sessionId:e.sessionId,runId:e.runId,actor:e.actor,summary:e.summary,reason:e.reason,files:e.files,data:e.data};this.queue.push(t),this.updateSummary(t),this.updateRunAggregate(t),this.maybeQueueSessionSummary(t),this.queueMemoryEntries(this.extractMemoryEntries(t),"event"),this.queueGraphEntries(this.extractGraphEntries(t));let n=t.type==="run_result"||t.type==="run_error";(this.queue.length>=this.options.batchSize||n)&&this.flush();}createRunId(){return er.randomUUID()}async getContextSummary(e){await this.ensureReady(),this.summaryItems.length===0&&await this.loadSummarySnapshot();let t=e?.language??"zh",n=e?.maxItems??this.options.summaryWindow,r=e?.maxSessionItems??am,o=e?.maxMemoryItems??lm,i=e?.maxChars??this.options.maxSummaryChars,a=e?.query?.trim(),l=t==="zh"?{memoryHeader:"## \u9879\u76EE\u8BB0\u5FC6\uFF08\u81EA\u52A8\uFF09",pinned:"### \u56FA\u5B9A",progress:"### \u8FDB\u5EA6",standard:"### \u89C4\u8303",lesson:"### \u6559\u8BAD",sessionHeader:"## \u4F1A\u8BDD\u6458\u8981",activityHeader:"## \u6700\u8FD1\u5DE5\u4F5C\u6458\u8981"}:{memoryHeader:"## Project Memory (Auto)",pinned:"### Pinned",progress:"### Progress",standard:"### Standards",lesson:"### Lessons",sessionHeader:"## Session Summary",activityHeader:"## Recent Workspace Activity"},c=null;if(a){let A=this.tokenizeQuery(a);c={tokens:A,graphMatches:await this.getGraphRunMatches(A)};}let u=a&&c?await this.getRelevantSessionSummaries(a,r,c):await this.getRecentSessionSummaries(r),d=a&&c?await this.getRelevantMemoryItems(a,o,c):{pinned:await this.getRecentMemoryItems("pinned",o),progress:await this.getRecentMemoryItems("progress",o),standard:await this.getRecentMemoryItems("standard",o),lesson:await this.getRecentMemoryItems("lesson",o)},m=d.pinned,g=d.progress,h=d.standard,f=d.lesson,v=this.summaryItems.slice(-n),b=A=>A.map(O=>`- [${Ei(O.ts)}] ${O.summary}`),C=b(u),T=b(m),w=b(g),E=b(h),N=b(f),D=b(v),$=[{key:"pinned",title:l.pinned,lines:T},{key:"progress",title:l.progress,lines:w},{key:"standard",title:l.standard,lines:E},{key:"lesson",title:l.lesson,lines:N}],k={key:"activity",title:l.activityHeader,lines:D},M={key:"session",title:l.sessionHeader,lines:C};if($.every(A=>A.lines.length===0)&&C.length===0&&D.length===0)return null;let _=()=>{let A=[],O=$.filter(F=>F.lines.length>0).map(F=>`${F.title}
3477
3477
  ${F.lines.join(`
3478
3478
  `)}`);return O.length>0&&A.push(`${l.memoryHeader}
3479
3479
  ${O.join(`
@@ -3491,7 +3491,7 @@ ${f.join(`
3491
3491
  `)}`),h.length>0&&w.push(`${u.lastRunHeader}
3492
3492
  ${h.join(`
3493
3493
  `)}`),w.join(`
3494
- `)},b=["session","lastRun","lesson","standard","progress","pinned"],C=new Map([["session",{lines:f}],["lastRun",{lines:h}],...m.map(w=>[w.key,w])]),T=v();if(T.length>o){let w=0;for(;T.length>o&&w<500;){w+=1;let E=false;for(let N of b){let D=C.get(N);if(D&&D.lines.length>0){D.lines.shift(),E=true;break}}if(!E)break;T=v();}}return T.length>o&&(T=jt(T,o)),p.info("MEMORY_INJECT","Context memory hit",{query:c?jt(c,80):void 0,includePersistent:i,includeLastRun:a,includeSessionSummaries:l,memoryCounts:Object.fromEntries(m.map(w=>[w.key,w.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,r=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,v=l?await this.getFileSize(l):0,b=c+u+d,C=g+h+f,T=e+n+b+m,w=t+r+C+v,E=(N,D,$)=>({count:N,sizeBytes:D,path:$});return {shortTerm:E(e,t,this.summaryPath??void 0),session:E(n,r,this.sessionSummaryPath??void 0),longTerm:{total:E(b,C),progress:E(c,g,o),standard:E(u,h,i),lesson:E(d,f,a)},pinned:E(m,v,l),totals:E(T,w)}}async getRecentSessionSummaries(e=am){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(r=>r.sessionId===e.sessionId)),e?.runId&&(n=n.filter(r=>r.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(),r=t.toLowerCase();return !!((n.includes("git_status")||n.includes("git status")||n.includes("gitstatus"))&&r.includes("not a git repository"))}async getRecentMemoryItems(e,t=lm){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 r=await this.readJsonlTail(this.sessionSummaryPath,t*6);return this.rankRelevantItems(r,e,t,void 0,n)}async getRelevantMemoryItems(e,t,n){if(!this.memoryPaths)return {progress:[],standard:[],lesson:[],pinned:[]};let r=["pinned","progress","standard","lesson"],o={pinned:[],progress:[],standard:[],lesson:[]};for(let i of r){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,r,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,v=u.summary&&u.summary.length>0?1:0,b=.35*d+.2*m+.2*f+.15*g+.1*h;return r==="pinned"&&b<.2&&(b=.2),v===0&&(b*=.8),{item:u,score:b}});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 r of n){let o=r.item.files?.[0];if(!o)continue;let i=this.resolveWorkspacePath(o);try{await Se__default.stat(i);}catch{r.score*=.7;}}}resolveWorkspacePath(e){return he__default.isAbsolute(e)||!this.workspacePath?e:he__default.join(this.workspacePath,e)}tokenizeQuery(e){let t=e.trim().toLowerCase();if(!t)return [];let n=t.split(/[^a-z0-9/_\-.]+/g).map(r=>r.trim()).filter(r=>r.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(),r=0;for(let o of e)n.includes(o)&&(r+=1);return r===0?0:Math.min(1,r/e.length)}scorePath(e,t){if(!t||t.length===0)return 0;let n=0;for(let r of t){let o=r.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 r=Math.max(0,e-t)/(1440*60*1e3);return Math.exp(-Math.log(2)*r/7)}async getGraphRunMatches(e){if(!this.graphPaths||e.length===0)return new Set;let t=await this.readJsonlTail(this.graphPaths.nodes,4e3,{tailBytes:Zb,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 r=await this.readJsonlTail(this.graphPaths.edges,6e3,{tailBytes:Zb,requireSummary:false}),o=new Set;for(let i of r)i?.runId&&(n.has(i.to)||n.has(i.from))&&o.add(i.runId);return o}async readJsonlTail(e,t,n){let r=n?.tailBytes??mA,o=n?.requireSummary??true;try{let i=await Se__default.stat(e);if(i.size===0)return [];let a=Math.max(0,i.size-r),l=await Se__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(`
3494
+ `)},b=["session","lastRun","lesson","standard","progress","pinned"],C=new Map([["session",{lines:f}],["lastRun",{lines:h}],...m.map(w=>[w.key,w])]),T=v();if(T.length>o){let w=0;for(;T.length>o&&w<500;){w+=1;let E=false;for(let N of b){let D=C.get(N);if(D&&D.lines.length>0){D.lines.shift(),E=true;break}}if(!E)break;T=v();}}return T.length>o&&(T=jt(T,o)),p.info("MEMORY_INJECT","Context memory hit",{query:c?jt(c,80):void 0,includePersistent:i,includeLastRun:a,includeSessionSummaries:l,memoryCounts:Object.fromEntries(m.map(w=>[w.key,w.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,r=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,v=l?await this.getFileSize(l):0,b=c+u+d,C=g+h+f,T=e+n+b+m,w=t+r+C+v,E=(N,D,$)=>({count:N,sizeBytes:D,path:$});return {shortTerm:E(e,t,this.summaryPath??void 0),session:E(n,r,this.sessionSummaryPath??void 0),longTerm:{total:E(b,C),progress:E(c,g,o),standard:E(u,h,i),lesson:E(d,f,a)},pinned:E(m,v,l),totals:E(T,w)}}async getRecentSessionSummaries(e=am){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(r=>r.sessionId===e.sessionId)),e?.runId&&(n=n.filter(r=>r.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(),r=t.toLowerCase();return !!((n.includes("git_status")||n.includes("git status")||n.includes("gitstatus"))&&r.includes("not a git repository"))}async getRecentMemoryItems(e,t=lm){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 r=await this.readJsonlTail(this.sessionSummaryPath,t*6);return this.rankRelevantItems(r,e,t,void 0,n)}async getRelevantMemoryItems(e,t,n){if(!this.memoryPaths)return {progress:[],standard:[],lesson:[],pinned:[]};let r=["pinned","progress","standard","lesson"],o={pinned:[],progress:[],standard:[],lesson:[]};for(let i of r){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,r,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,v=u.summary&&u.summary.length>0?1:0,b=.35*d+.2*m+.2*f+.15*g+.1*h;return r==="pinned"&&b<.2&&(b=.2),v===0&&(b*=.8),{item:u,score:b}});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 r of n){let o=r.item.files?.[0];if(!o)continue;let i=this.resolveWorkspacePath(o);try{await Se__default.stat(i);}catch{r.score*=.7;}}}resolveWorkspacePath(e){return he__default.isAbsolute(e)||!this.workspacePath?e:he__default.join(this.workspacePath,e)}tokenizeQuery(e){let t=e.trim().toLowerCase();if(!t)return [];let n=t.split(/[^a-z0-9/_\-.]+/g).map(r=>r.trim()).filter(r=>r.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(),r=0;for(let o of e)n.includes(o)&&(r+=1);return r===0?0:Math.min(1,r/e.length)}scorePath(e,t){if(!t||t.length===0)return 0;let n=0;for(let r of t){let o=r.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 r=Math.max(0,e-t)/(1440*60*1e3);return Math.exp(-Math.log(2)*r/7)}async getGraphRunMatches(e){if(!this.graphPaths||e.length===0)return new Set;let t=await this.readJsonlTail(this.graphPaths.nodes,4e3,{tailBytes:Zb,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 r=await this.readJsonlTail(this.graphPaths.edges,6e3,{tailBytes:Zb,requireSummary:false}),o=new Set;for(let i of r)i?.runId&&(n.has(i.to)||n.has(i.from))&&o.add(i.runId);return o}async readJsonlTail(e,t,n){let r=n?.tailBytes??gA,o=n?.requireSummary??true;try{let i=await Se__default.stat(e);if(i.size===0)return [];let a=Math.max(0,i.size-r),l=await Se__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(`
3495
3495
  `);g!==-1&&(u=u.slice(g+1));}let d=u.split(`
3496
3496
  `).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,r="",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]===`
3497
3497
  `&&(n+=1);r=l[l.length-1]||r;}),i.on("error",a=>{a.code,t(0);}),i.on("end",()=>{o&&r!==`
@@ -3505,7 +3505,7 @@ ${h.join(`
3505
3505
  `)+`
3506
3506
  `;await Se__default.appendFile(this.graphPaths.nodes,c,"utf-8");}if(o.length>0){let c=o.map(u=>JSON.stringify(u)).join(`
3507
3507
  `)+`
3508
- `;await Se__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 Se__default.mkdir(this.eventsDir,{recursive:true}),this.memoriesDir&&await Se__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=xA(Date.now());this.currentDate===e&&this.currentFile||(this.currentDate=e,this.currentFile=he__default.join(this.eventsDir,`events-${e}.jsonl`),this.currentFileBytes=await this.getFileSize(this.currentFile));}async getFileSize(e){try{return (await Se__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(r=>!this.isLowValueMemorySummary(r.summary));if(n.length!==0){this.memoryQueue.push(...n);for(let r of n)p.info("MEMORY_WRITE","Memory item recorded",{source:t,category:r.category,summary:jt(r.summary,160),runId:r.runId,sessionId:r.sessionId,files:r.files?.slice(0,3),confidence:r.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:er.randomUUID(),category:"progress",summary:jt(e.summary,Ii),confidence:.6,...n}),e.type==="tool_call_end"&&e.data?.success===false){let r=e.data?.name??"tool",o=e.data?.outputPreview??e.summary??"Tool failed";this.isLowValueToolFailure(r,String(o))||t.push({schemaVersion:1,id:er.randomUUID(),category:"lesson",summary:jt(`Tool failed: ${r} - ${o}`,Ii),confidence:.45,...n});}if(e.type==="run_error"){let r=e.data?.message??e.summary??"Run error";t.push({schemaVersion:1,id:er.randomUUID(),category:"lesson",summary:jt(`Run error: ${r}`,Ii),confidence:.4,...n});}if(e.type==="status"&&e.summary){let r=this.extractRuleMemory(e.summary);r&&t.push({schemaVersion:1,id:er.randomUUID(),category:r.category,summary:jt(r.summary,Ii),confidence:r.confidence,...n});}return t}extractGraphEntries(e){let t=[],n=[];if(!this.graphPaths||!e.runId)return {nodes:t,edges:n};let r=this.buildGraphNode({id:`task:${e.runId}`,type:"task",label:jt(e.summary??e.data?.prompt??"Task",120),event:e});if(e.type==="run_start"&&t.push(r),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:r.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:r.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:er.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(),r=/^(pinned|must|requirement|constraint|must:|禁止|必须|约束|不可)/i,o=/^(rule|standard|guideline|should|prefer|规范|约定|标准|建议|应该)/i;return r.test(n)?{category:"pinned",summary:t,confidence:.8}:o.test(n)?{category:"standard",summary:t,confidence:.65}:null}getSummarizerConfig(){let e=nt(),t=e.memory??{},n=e.orchestrator?.contextSharing?.summarizerModel,r,o="default";return this.summarizerOverrides?.model?(r=this.summarizerOverrides.model,o="override"):t.summarizerModel?(r=t.summarizerModel,o="memory"):n?(r=n,o="orchestrator"):(r=bA,o="default"),{enabled:(this.summarizerOverrides?.enabled??t.summarizerEnabled??true)&&!!r,model:r??null,providerId:this.summarizerOverrides?.providerId??t.summarizerProviderId,idleDelayMs:this.summarizerOverrides?.idleDelayMs??t.summarizerIdleMs??gA,minIntervalMs:this.summarizerOverrides?.minIntervalMs??t.summarizerMinIntervalMs??hA,batchSize:this.summarizerOverrides?.batchSize??t.summarizerBatchSize??fA,queueSize:this.summarizerOverrides?.queueSize??t.summarizerQueueSize??yA,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 r=this.summarizerQueue.splice(0,e.batchSize);if(r.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,r);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 ze(nt()),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 r=n.models?.some(a=>a.name===e.model),o=e.model;if(!r){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}=Hl({provider:n,model:o});return this.summarizerProvider=i,this.summarizerProviderModel=o,{provider:i,model:o}}async summarizeMemoryBatch(e,t,n){let r=this.buildMemorySummaryPrompt(n),o=[{role:"system",content:"You are a memory summarizer for an autonomous coding agent."},{role:"user",content:r}],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:er.randomUUID(),ts:u,category:d.category,summary:jt(d.summary,Ii),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
3508
+ `;await Se__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 Se__default.mkdir(this.eventsDir,{recursive:true}),this.memoriesDir&&await Se__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=TA(Date.now());this.currentDate===e&&this.currentFile||(this.currentDate=e,this.currentFile=he__default.join(this.eventsDir,`events-${e}.jsonl`),this.currentFileBytes=await this.getFileSize(this.currentFile));}async getFileSize(e){try{return (await Se__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(r=>!this.isLowValueMemorySummary(r.summary));if(n.length!==0){this.memoryQueue.push(...n);for(let r of n)p.info("MEMORY_WRITE","Memory item recorded",{source:t,category:r.category,summary:jt(r.summary,160),runId:r.runId,sessionId:r.sessionId,files:r.files?.slice(0,3),confidence:r.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:er.randomUUID(),category:"progress",summary:jt(e.summary,Ii),confidence:.6,...n}),e.type==="tool_call_end"&&e.data?.success===false){let r=e.data?.name??"tool",o=e.data?.outputPreview??e.summary??"Tool failed";this.isLowValueToolFailure(r,String(o))||t.push({schemaVersion:1,id:er.randomUUID(),category:"lesson",summary:jt(`Tool failed: ${r} - ${o}`,Ii),confidence:.45,...n});}if(e.type==="run_error"){let r=e.data?.message??e.summary??"Run error";t.push({schemaVersion:1,id:er.randomUUID(),category:"lesson",summary:jt(`Run error: ${r}`,Ii),confidence:.4,...n});}if(e.type==="status"&&e.summary){let r=this.extractRuleMemory(e.summary);r&&t.push({schemaVersion:1,id:er.randomUUID(),category:r.category,summary:jt(r.summary,Ii),confidence:r.confidence,...n});}return t}extractGraphEntries(e){let t=[],n=[];if(!this.graphPaths||!e.runId)return {nodes:t,edges:n};let r=this.buildGraphNode({id:`task:${e.runId}`,type:"task",label:jt(e.summary??e.data?.prompt??"Task",120),event:e});if(e.type==="run_start"&&t.push(r),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:r.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:r.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:er.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(),r=/^(pinned|must|requirement|constraint|must:|禁止|必须|约束|不可)/i,o=/^(rule|standard|guideline|should|prefer|规范|约定|标准|建议|应该)/i;return r.test(n)?{category:"pinned",summary:t,confidence:.8}:o.test(n)?{category:"standard",summary:t,confidence:.65}:null}getSummarizerConfig(){let e=nt(),t=e.memory??{},n=e.orchestrator?.contextSharing?.summarizerModel,r,o="default";return this.summarizerOverrides?.model?(r=this.summarizerOverrides.model,o="override"):t.summarizerModel?(r=t.summarizerModel,o="memory"):n?(r=n,o="orchestrator"):(r=vA,o="default"),{enabled:(this.summarizerOverrides?.enabled??t.summarizerEnabled??true)&&!!r,model:r??null,providerId:this.summarizerOverrides?.providerId??t.summarizerProviderId,idleDelayMs:this.summarizerOverrides?.idleDelayMs??t.summarizerIdleMs??hA,minIntervalMs:this.summarizerOverrides?.minIntervalMs??t.summarizerMinIntervalMs??fA,batchSize:this.summarizerOverrides?.batchSize??t.summarizerBatchSize??yA,queueSize:this.summarizerOverrides?.queueSize??t.summarizerQueueSize??bA,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 r=this.summarizerQueue.splice(0,e.batchSize);if(r.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,r);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 ze(nt()),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 r=n.models?.some(a=>a.name===e.model),o=e.model;if(!r){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}=Hl({provider:n,model:o});return this.summarizerProvider=i,this.summarizerProviderModel=o,{provider:i,model:o}}async summarizeMemoryBatch(e,t,n){let r=this.buildMemorySummaryPrompt(n),o=[{role:"system",content:"You are a memory summarizer for an autonomous coding agent."},{role:"user",content:r}],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:er.randomUUID(),ts:u,category:d.category,summary:jt(d.summary,Ii),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
3509
3509
 
3510
3510
  \u89C4\u5219\uFF1A
3511
3511
  1. category \u53EA\u80FD\u662F progress | standard | lesson | pinned
@@ -3523,37 +3523,37 @@ ${e.map(n=>{let r=Ei(n.ts),o=n.files&&n.files.length>0?` files=${n.files.join(",
3523
3523
  [
3524
3524
  {"category":"progress","summary":"\u5B8C\u6210\u4E86 X\uFF0C\u4E0B\u4E00\u6B65 Y","files":["src/app.ts"],"confidence":0.7},
3525
3525
  {"category":"lesson","summary":"\u907F\u514D\u91CD\u590D\u6267\u884C Z\uFF0C\u5BB9\u6613\u8D85\u65F6","confidence":0.5}
3526
- ]`}parseSummaryItems(e){if(!e)return [];let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/),n=t?t[1]:e,r=n.indexOf("["),o=n.lastIndexOf("]");if(r===-1||o===-1||o<=r)return [];try{let i=JSON.parse(n.slice(r,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>=pA)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),r=t.tokens,o=e.type==="run_result"?`Completed in ${n}ms, tokens ${r??"n/a"}`:`Failed: ${jt(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?jt(t.outputPreview.replace(/\s+/g," ").trim(),120):"",u=c?` | Result: ${c}`:"",d=jt(`${l} -> ${o}${a}${u}`,dA),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:r};this.sessionSummaryQueue.push(g),p.info("SESSION_SUMMARY_QUEUED","Session summary queued",{runId:g.runId,sessionId:g.sessionId,summary:jt(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 Se__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 Se__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Se__default.rename(t,this.summaryPath),this.summaryDirty=false;}async loadMeta(){if(this.metaPath)try{let e=await Se__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=he__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?he__default.basename(this.currentFile):void 0,currentFileBytes:this.currentFileBytes,source:this.options.source,agentName:this.options.agentName},t=`${this.metaPath}.${Date.now()}.tmp`;await Se__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Se__default.rename(t,this.metaPath);}};Z();function Ln(s){return {v:"0.1",ts:Date.now(),...s}}var SA=256*1024,hc=class{server=null;clients=new Map;options;heartbeatTimer=null;actualPort;a2aAgents=new Map;a2aSeq=0;constructor(e){this.options=e,this.actualPort=e.port;}async start(){if(this.server)return;let e=async(r,o)=>{let i=(r.method||"GET").toUpperCase(),a=new URL$1(r.url||"/",`http://${r.headers.host||"localhost"}`);if(i==="OPTIONS"){this.writeCors(o),o.writeHead(204),o.end();return}if(a.pathname==="/health"){this.writeCors(o),o.writeHead(200,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:true}));return}if(a.pathname==="/info"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}this.writeCors(o),o.writeHead(200,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:true,version:this.options.version,host:this.options.host,port:this.actualPort}));return}if(a.pathname==="/events"&&i==="GET"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}this.openEventStream(r,o,a);return}if(a.pathname==="/run"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}try{let l=await this.readJson(r);if(!l||typeof l.text!="string"){this.writeCors(o),o.writeHead(400,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:!1,error:"Invalid payload"}));return}let c=await this.options.onRun(l);this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:l?.message||"Server error"}));}return}if(a.pathname==="/supervisor"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}if(!this.options.onSupervisor){this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor not available"}));return}try{let l=await this.readJson(r);if(!l||l.text!==void 0&&typeof l.text!="string"){this.writeCors(o),o.writeHead(400,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:!1,error:"Invalid payload"}));return}let c=await this.options.onSupervisor(l);this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","Supervisor request failed",l),this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor error"}));}return}if(a.pathname==="/supervisor/chat"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}if(!this.options.onSupervisorChat){this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor chat not available"}));return}try{let l=await this.readJson(r);if(!l||typeof l.text!="string"){this.writeCors(o),o.writeHead(400,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:!1,error:"Invalid payload"}));return}let c=await this.options.onSupervisorChat(l);this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","Supervisor chat request failed",l),this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor chat error"}));}return}if(a.pathname==="/supervisor/interrupt"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}if(!this.options.onSupervisorInterrupt){this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor interrupt not available"}));return}try{let l=await this.readJson(r),c=await this.options.onSupervisorInterrupt(l??{});this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","Supervisor interrupt failed",l),this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor interrupt error"}));}return}if(a.pathname==="/a2a"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}try{let l=await this.readJson(r),c=await this.handleA2aEnvelope(l);this.writeCors(o),o.writeHead(c.error?400:200,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","A2A request failed",l);let c=this.buildA2aErrorEnvelope("a2a_error",l?.message||"A2A error");this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}return}this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Not found"}));},t=this.options.maxPortRetries??10,n=null;for(let r=0;r<t;r++){let o=this.options.port+r;this.server=wA.createServer(e);try{await new Promise((i,a)=>{let l=c=>{a(c);};this.server?.once("error",l),this.server?.listen(o,this.options.host,()=>{this.server?.removeListener("error",l),i();});}),this.actualPort=o,r>0&&p.info("REMOTE",`Port ${this.options.port} in use, using port ${o} instead`);break}catch(i){if(n=i,i.code!=="EADDRINUSE")throw i;this.server?.close(),this.server=null;}}if(!this.server?.listening)throw n||new Error(`Failed to bind to any port in range ${this.options.port}-${this.options.port+t-1}`);this.ensureA2aServerRecord(),this.heartbeatTimer=setInterval(()=>{this.broadcast({type:"ping",ts:Date.now()});},15e3),p.info("REMOTE","Remote server started",{host:this.options.host,port:this.actualPort});}async stop(){if(!this.server)return;this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null);for(let t of this.clients.keys())try{t.end();}catch{}this.clients.clear();let e=this.server;this.server=null,await new Promise(t=>{e.close(()=>t());}),p.info("REMOTE","Remote server stopped");}updateToken(e){this.options.token=e;}getStatus(){return {running:!!this.server,host:this.options.host,port:this.actualPort,token:this.options.token,clients:this.clients.size}}broadcast(e){let t=JSON.stringify(e);for(let n of this.clients.keys())try{n.write(`data: ${t}
3526
+ ]`}parseSummaryItems(e){if(!e)return [];let t=e.match(/```(?:json)?\s*([\s\S]*?)\s*```/),n=t?t[1]:e,r=n.indexOf("["),o=n.lastIndexOf("]");if(r===-1||o===-1||o<=r)return [];try{let i=JSON.parse(n.slice(r,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>=mA)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),r=t.tokens,o=e.type==="run_result"?`Completed in ${n}ms, tokens ${r??"n/a"}`:`Failed: ${jt(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?jt(t.outputPreview.replace(/\s+/g," ").trim(),120):"",u=c?` | Result: ${c}`:"",d=jt(`${l} -> ${o}${a}${u}`,pA),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:r};this.sessionSummaryQueue.push(g),p.info("SESSION_SUMMARY_QUEUED","Session summary queued",{runId:g.runId,sessionId:g.sessionId,summary:jt(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 Se__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 Se__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Se__default.rename(t,this.summaryPath),this.summaryDirty=false;}async loadMeta(){if(this.metaPath)try{let e=await Se__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=he__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?he__default.basename(this.currentFile):void 0,currentFileBytes:this.currentFileBytes,source:this.options.source,agentName:this.options.agentName},t=`${this.metaPath}.${Date.now()}.tmp`;await Se__default.writeFile(t,JSON.stringify(e,null,2),"utf-8"),await Se__default.rename(t,this.metaPath);}};Z();function Ln(s){return {v:"0.1",ts:Date.now(),...s}}var _A=256*1024,hc=class{server=null;clients=new Map;options;heartbeatTimer=null;actualPort;a2aAgents=new Map;a2aSeq=0;constructor(e){this.options=e,this.actualPort=e.port;}async start(){if(this.server)return;let e=async(r,o)=>{let i=(r.method||"GET").toUpperCase(),a=new URL$1(r.url||"/",`http://${r.headers.host||"localhost"}`);if(i==="OPTIONS"){this.writeCors(o),o.writeHead(204),o.end();return}if(a.pathname==="/health"){this.writeCors(o),o.writeHead(200,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:true}));return}if(a.pathname==="/info"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}this.writeCors(o),o.writeHead(200,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:true,version:this.options.version,host:this.options.host,port:this.actualPort}));return}if(a.pathname==="/events"&&i==="GET"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}this.openEventStream(r,o,a);return}if(a.pathname==="/run"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}try{let l=await this.readJson(r);if(!l||typeof l.text!="string"){this.writeCors(o),o.writeHead(400,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:!1,error:"Invalid payload"}));return}let c=await this.options.onRun(l);this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:l?.message||"Server error"}));}return}if(a.pathname==="/supervisor"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}if(!this.options.onSupervisor){this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor not available"}));return}try{let l=await this.readJson(r);if(!l||l.text!==void 0&&typeof l.text!="string"){this.writeCors(o),o.writeHead(400,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:!1,error:"Invalid payload"}));return}let c=await this.options.onSupervisor(l);this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","Supervisor request failed",l),this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor error"}));}return}if(a.pathname==="/supervisor/chat"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}if(!this.options.onSupervisorChat){this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor chat not available"}));return}try{let l=await this.readJson(r);if(!l||typeof l.text!="string"){this.writeCors(o),o.writeHead(400,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:!1,error:"Invalid payload"}));return}let c=await this.options.onSupervisorChat(l);this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","Supervisor chat request failed",l),this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor chat error"}));}return}if(a.pathname==="/supervisor/interrupt"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}if(!this.options.onSupervisorInterrupt){this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor interrupt not available"}));return}try{let l=await this.readJson(r),c=await this.options.onSupervisorInterrupt(l??{});this.writeCors(o),o.writeHead(c.ok?200:400,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","Supervisor interrupt failed",l),this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Supervisor interrupt error"}));}return}if(a.pathname==="/a2a"&&i==="POST"){if(!this.authorize(r,a)){this.writeUnauthorized(o);return}try{let l=await this.readJson(r),c=await this.handleA2aEnvelope(l);this.writeCors(o),o.writeHead(c.error?400:200,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}catch(l){p.error("REMOTE","A2A request failed",l);let c=this.buildA2aErrorEnvelope("a2a_error",l?.message||"A2A error");this.writeCors(o),o.writeHead(500,{"Content-Type":"application/json"}),o.end(JSON.stringify(c));}return}this.writeCors(o),o.writeHead(404,{"Content-Type":"application/json"}),o.end(JSON.stringify({ok:false,error:"Not found"}));},t=this.options.maxPortRetries??10,n=null;for(let r=0;r<t;r++){let o=this.options.port+r;this.server=kA.createServer(e);try{await new Promise((i,a)=>{let l=c=>{a(c);};this.server?.once("error",l),this.server?.listen(o,this.options.host,()=>{this.server?.removeListener("error",l),i();});}),this.actualPort=o,r>0&&p.info("REMOTE",`Port ${this.options.port} in use, using port ${o} instead`);break}catch(i){if(n=i,i.code!=="EADDRINUSE")throw i;this.server?.close(),this.server=null;}}if(!this.server?.listening)throw n||new Error(`Failed to bind to any port in range ${this.options.port}-${this.options.port+t-1}`);this.ensureA2aServerRecord(),this.heartbeatTimer=setInterval(()=>{this.broadcast({type:"ping",ts:Date.now()});},15e3),p.info("REMOTE","Remote server started",{host:this.options.host,port:this.actualPort});}async stop(){if(!this.server)return;this.heartbeatTimer&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null);for(let t of this.clients.keys())try{t.end();}catch{}this.clients.clear();let e=this.server;this.server=null,await new Promise(t=>{e.close(()=>t());}),p.info("REMOTE","Remote server stopped");}updateToken(e){this.options.token=e;}getStatus(){return {running:!!this.server,host:this.options.host,port:this.actualPort,token:this.options.token,clients:this.clients.size}}broadcast(e){let t=JSON.stringify(e);for(let n of this.clients.keys())try{n.write(`data: ${t}
3527
3527
 
3528
3528
  `);}catch{}}broadcastRuntimeEvent(e){this.broadcast({type:"runtime_event",ts:Date.now(),payload:e});}broadcastSupervisorEvent(e){this.broadcast({type:"supervisor_event",ts:Date.now(),payload:e});}broadcastSupervisorDelta(e){this.broadcast({type:"supervisor_delta",ts:Date.now(),payload:e});}broadcastAgentEvent(e){this.broadcast({type:e.type??"agent_event",ts:Date.now(),payload:e});}broadcastA2a(e){let t=JSON.stringify({type:"a2a_event",ts:Date.now(),payload:e});for(let[n,r]of this.clients.entries())if(this.shouldSendA2aToClient(r,e))try{n.write(`data: ${t}
3529
3529
 
3530
3530
  `);}catch{}}async handleA2aEnvelope(e){if(!e||typeof e.type!="string"||typeof e.id!="string")return this.buildA2aErrorEnvelope("invalid_envelope","Invalid A2A envelope.");if(e.v&&e.v!=="0.1")return this.buildA2aErrorEnvelope("version_mismatch",`Unsupported A2A version ${e.v}.`,e.from);let t=this.getA2aAgentId(),n=e.traceId||e.id;switch(e.from&&this.touchA2aAgent(e.from),e.type){case "hello":{let o=e.payload;if(!o?.agentId)return this.buildA2aErrorEnvelope("invalid_payload","hello requires agentId.",e.from);this.registerA2aAgent(o),o.topics?.length&&this.updateClientTopics(o.agentId,o.topics,false);let i={agentId:t,status:"ok",capabilities:this.options.a2aCapabilities??[],topics:this.options.a2aTopics??[]};return Ln({type:"ack",id:er.randomUUID(),from:t,to:e.from,traceId:n,seq:this.nextA2aSeq(),payload:i})}case "ping":{let i={nonce:e.payload?.nonce};return Ln({type:"pong",id:er.randomUUID(),from:t,to:e.from,traceId:n,seq:this.nextA2aSeq(),payload:i})}case "subscribe":{let o=e.payload;if(!o?.topics?.length)return this.buildA2aErrorEnvelope("invalid_payload","subscribe requires topics.",e.from);let i=o.agentId||e.from;return i&&(this.updateClientTopics(i,o.topics,o.replace??false),this.touchA2aAgent(i,{topics:new Set(o.topics),replace:o.replace})),Ln({type:"ack",id:er.randomUUID(),from:t,to:e.from,traceId:n,seq:this.nextA2aSeq(),payload:{agentId:t,status:"ok"}})}case "unsubscribe":{let o=e.payload;if(!o?.topics?.length)return this.buildA2aErrorEnvelope("invalid_payload","unsubscribe requires topics.",e.from);let i=o.agentId||e.from;return i&&(this.removeClientTopics(i,o.topics),this.touchA2aAgent(i,{removeTopics:new Set(o.topics)})),Ln({type:"ack",id:er.randomUUID(),from:t,to:e.from,traceId:n,seq:this.nextA2aSeq(),payload:{agentId:t,status:"ok"}})}case "request":{if(!e.payload?.method)return this.buildA2aErrorEnvelope("invalid_payload","request requires method.",e.from);if(!this.options.onA2aRequest)return this.buildA2aErrorEnvelope("unsupported","A2A request handler not available.",e.from);try{let i=await this.options.onA2aRequest(e),a={result:i?.result??null};return Ln({type:"response",id:er.randomUUID(),from:t,to:e.from,traceId:n,seq:this.nextA2aSeq(),payload:a,error:i?.error})}catch(i){return this.buildA2aErrorEnvelope("request_failed",i?.message||"A2A request failed.",e.from,n)}}case "event":return this.broadcastA2a(e),Ln({type:"ack",id:er.randomUUID(),from:t,to:e.from,traceId:n,seq:this.nextA2aSeq(),payload:{agentId:t,status:"ok"}});default:return this.buildA2aErrorEnvelope("unsupported_type",`Unsupported type ${e.type}.`,e.from)}}buildA2aErrorEnvelope(e,t,n,r){return Ln({type:"response",id:er.randomUUID(),from:this.getA2aAgentId(),to:n,traceId:r,seq:this.nextA2aSeq(),error:{code:e,message:t}})}ensureA2aServerRecord(){let e=this.getA2aAgentId();this.a2aAgents.has(e)||this.a2aAgents.set(e,{agentId:e,role:"executor",capabilities:new Set(this.options.a2aCapabilities??[]),topics:new Set(this.options.a2aTopics??[]),lastSeen:Date.now()});}registerA2aAgent(e){let t=Date.now();this.a2aAgents.set(e.agentId,{agentId:e.agentId,sessionId:e.sessionId,role:e.role,capabilities:new Set(e.capabilities??[]),topics:new Set(e.topics??[]),meta:e.meta,lastSeen:t});}touchA2aAgent(e,t){let n=this.a2aAgents.get(e),r=Date.now();if(!n){this.a2aAgents.set(e,{agentId:e,capabilities:new Set,topics:t?.topics??new Set,lastSeen:r});return}if(n.lastSeen=r,t?.topics)if(t.replace)n.topics=new Set(t.topics);else for(let o of t.topics)n.topics.add(o);if(t?.removeTopics)for(let o of t.removeTopics)n.topics.delete(o);}updateClientTopics(e,t,n){for(let r of this.clients.values())if(r.agentId===e){if(n)r.topics=new Set(t);else for(let o of t)r.topics.add(o);r.lastSeen=Date.now();}}removeClientTopics(e,t){for(let n of this.clients.values())if(n.agentId===e){for(let r of t)n.topics.delete(r);n.lastSeen=Date.now();}}shouldSendA2aToClient(e,t){if(t.to)return e.agentId===t.to||e.clientId===t.to;if(t.type!=="event")return true;let n=this.extractA2aTopic(t);return !n||e.topics.size===0||e.topics.has("*")?true:e.topics.has(n)}extractA2aTopic(e){let t=e.payload;return !t||typeof t!="object"?null:typeof t.topic=="string"?t.topic:null}getA2aAgentId(){return this.options.a2aAgentId||"neox-cli"}nextA2aSeq(){return this.a2aSeq+=1,this.a2aSeq}openEventStream(e,t,n){this.writeCors(t),t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive"}),t.write(`data: ${JSON.stringify({type:"hello",ts:Date.now()})}
3531
3531
 
3532
- `);let r=n.searchParams.get("clientId")||er.randomUUID(),o=n.searchParams.get("agentId")||void 0,i=n.searchParams.get("topics"),a=new Set;i&&i.split(",").map(l=>l.trim()).filter(Boolean).forEach(l=>a.add(l)),this.clients.set(t,{clientId:r,agentId:o,topics:a,lastSeen:Date.now()}),o&&this.touchA2aAgent(o,{topics:a}),t.on("close",()=>{this.clients.delete(t);});}authorize(e,t){let n=e.headers.authorization||"";return ((n.startsWith("Bearer ")?n.slice(7):"")||t.searchParams.get("token")||e.headers["x-neox-token"])===this.options.token}writeUnauthorized(e){this.writeCors(e),e.writeHead(401,{"Content-Type":"application/json"}),e.end(JSON.stringify({ok:false,error:"Unauthorized"}));}writeCors(e){e.setHeader("Access-Control-Allow-Origin","*"),e.setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS"),e.setHeader("Access-Control-Allow-Headers","Content-Type,Authorization,X-Neox-Token");}async readJson(e){return new Promise((t,n)=>{let r=[],o=0;e.on("data",i=>{if(o+=i.length,o>SA){n(new Error("Payload too large")),e.destroy();return}r.push(i);}),e.on("end",()=>{if(r.length===0){t(null);return}try{let i=Buffer.concat(r).toString("utf-8");t(JSON.parse(i));}catch(i){n(i);}}),e.on("error",n);})}};function cm(){return er.randomBytes(16).toString("hex")}var IA=1e4,EA=200,AA=280,fc=class{state;seq=0;lastSnapshotAt=0;lastDeltaAt=0;pendingDelta=null;options;constructor(e){this.options={snapshotIntervalMs:e.snapshotIntervalMs??IA,deltaThrottleMs:e.deltaThrottleMs??EA,maxOutputPreviewChars:e.maxOutputPreviewChars??AA,agentId:e.agentId,sessionId:e.sessionId,emit:e.emit},this.state={agentId:e.agentId,sessionId:e.sessionId,updatedAt:Date.now()};}getSink(){return {name:"exec_state",handle:(e,t,n)=>{this.handleEvent(t,n);}}}handleEvent(e,t){let n=e.timestamp??Date.now(),r={};switch(t.provider&&t.provider!==this.state.provider&&(r.provider=t.provider),t.model&&t.model!==this.state.model&&(r.model=t.model),e.type){case "status":r.status={state:e.status,message:e.message,updatedAt:n};break;case "plan_update":r.plan={steps:e.plan,updatedAt:n};break;case "tool_call_start":r.tool={name:e.name,status:"running",startedAt:n,args:e.args};break;case "tool_call_end":r.tool={name:e.name,status:e.success?"success":"error",finishedAt:n,durationMs:e.duration,summary:e.summary};break;case "error":r.lastError={message:e.message,at:n};break;case "error_classified":r.lastError={message:e.message,category:e.category,code:e.code,retryable:e.retryable,at:n};break;case "run_result":r.lastResult={outputPreview:this.truncate(e.output),totalTokens:e.totalTokens,durationMs:e.durationMs,iterations:e.iterations,toolCalls:e.toolCalls,at:n};break;case "token_usage":r.metrics={promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,sessionPromptTokens:e.sessionPromptTokens,sessionCompletionTokens:e.sessionCompletionTokens,at:n};break;}Object.keys(r).length!==0&&(r.updatedAt=n,this.applyDelta(r),this.queueDelta(r,n),this.maybeEmitSnapshot(n,e.type));}applyDelta(e){e.provider!==void 0&&(this.state.provider=e.provider),e.model!==void 0&&(this.state.model=e.model),e.status&&(this.state.status=e.status),e.plan&&(this.state.plan=e.plan),e.tool&&(this.state.tool=e.tool),e.lastError&&(this.state.lastError=e.lastError),e.lastResult&&(this.state.lastResult=e.lastResult),e.metrics&&(this.state.metrics=e.metrics),e.updatedAt&&(this.state.updatedAt=e.updatedAt);}queueDelta(e,t){this.pendingDelta||(this.pendingDelta={}),Object.assign(this.pendingDelta,e),t-this.lastDeltaAt>=this.options.deltaThrottleMs&&this.flushDelta(t);}flushDelta(e){if(!this.pendingDelta)return;let t={...this.pendingDelta};this.pendingDelta=null,this.lastDeltaAt=e,this.emitEvent("state_delta",{agentId:this.state.agentId,sessionId:this.state.sessionId,changes:t});}maybeEmitSnapshot(e,t){if(t==="run_result"||t==="error"||t==="error_classified"){this.flushDelta(e),this.emitSnapshot(e);return}e-this.lastSnapshotAt>=this.options.snapshotIntervalMs&&(this.flushDelta(e),this.emitSnapshot(e));}emitSnapshot(e){this.lastSnapshotAt=e,this.emitEvent("state_snapshot",{agentId:this.state.agentId,sessionId:this.state.sessionId,state:this.state});}emitEvent(e,t){let n=Ln({type:"event",id:randomUUID(),from:this.state.agentId,seq:++this.seq,payload:{topic:e,data:t}});this.options.emit(n);}truncate(e){if(!e)return "";let t=this.options.maxOutputPreviewChars;return e.length<=t?e:`${e.slice(0,t).trimEnd()}...`}};Gt();to();Z();var zA=new Set([".wav",".mp3",".m4a",".aiff",".aif",".ogg"]),pm="complete.wav";function Di(s){return {soundEnabled:s.completionAlerts?.soundEnabled??false,soundFile:s.completionAlerts?.soundFile??"",notifyEnabled:s.completionAlerts?.notifyEnabled??false}}function mm(){try{return Je__default.existsSync(Vn)?Je__default.readdirSync(Vn).filter(s=>zA.has(he__default.extname(s).toLowerCase())).sort((s,e)=>s.localeCompare(e)):[]}catch{return []}}function qA(s){if(s){let n=he__default.isAbsolute(s)?s:he__default.join(Vn,s);if(Je__default.existsSync(n))return n}let e=he__default.join(Vn,pm);if(Je__default.existsSync(e))return e;let t=mm();return t.length>0?he__default.join(Vn,t[0]):null}function mv(s,e){let t="Neox CLI",n="Task complete",r=e?.summary?.durationMs,o=r?`${n} - ${(r/1e3).toFixed(1)}s`:n;if(s.notifyEnabled&&VA(t,o),s.soundEnabled){let i=qA(s.soundFile);JA(i);}}function so(s,e,t){try{let n=spawn(s,e,{stdio:"ignore"});n.on("error",r=>{process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to spawn ${s}`,{error:r}),t&&t();}),n.unref();}catch(n){process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to execute ${s}`,{error:n}),t&&t();}}function no(){try{process.stdout.write("\x07");}catch{}}function pv(s){return s.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function KA(s){return s.replace(/'/g,"''")}function JA(s){if(!s||!Je__default.existsSync(s)){no();return}if(process.platform==="darwin"){so("afplay",[s],no);return}if(process.platform==="linux"){so("paplay",[s],()=>{so("aplay",[s],no);});return}if(process.platform==="win32"){let e=he__default.extname(s).toLowerCase();if(e!==".wav"&&e!==".wave"){no();return}let n=`(New-Object Media.SoundPlayer '${KA(s)}').PlaySync()`;so("powershell",["-NoProfile","-Command",n],no);return}no();}function VA(s,e){if(process.platform==="darwin"){let t=`display notification "${pv(e)}" with title "${pv(s)}"`;so("osascript",["-e",t]);return}if(process.platform==="linux"){so("notify-send",[s,e]);return}process.platform==="win32"&&process.env.CLI_DEBUG&&p.debug("ALERT","Notification not supported on Windows without extra tools");}um();function gv(s){return s.map(e=>({id:e.id??e.data?.id,name:e.name??e.data?.name,timestamp:e.timestamp??e.data?.timestamp??Date.now()})).filter(e=>typeof e.id=="string")}Gt();yn();var YA=[{id:"provider",title:"Provider",description:"\u9009\u62E9/\u5207\u6362 Provider"},{id:"model",title:"Model",description:"\u9009\u62E9 Provider \u2192 Model"},{id:"session",title:"Session",description:"\u9009\u62E9/\u5207\u6362\u4F1A\u8BDD"},{id:"workspace",title:"Workspace",description:"\u5DE5\u4F5C\u533A\u7BA1\u7406 (\u5207\u6362/\u6DFB\u52A0/\u5217\u8868)"},{id:"mode",title:"Mode",description:"\u5207\u6362 Agent/Ask \u6A21\u5F0F"},{id:"collab",title:"Collaboration",description:"\u534F\u4F5C\u6A21\u5F0F (\u5355Agent/\u591AAgent)"},{id:"sandbox",title:"Sandbox",description:"\u5207\u6362\u6C99\u7BB1\u6A21\u5F0F"},{id:"thinking",title:"Thinking",description:"\u5207\u6362\u6DF1\u5EA6\u601D\u8003"},{id:"approval",title:"Approval",description:"\u5207\u6362\u5BA1\u6279\u6A21\u5F0F"},{id:"notify",title:"Notify",description:"\u5B8C\u6210\u63D0\u793A (\u58F0\u97F3/\u901A\u77E5)"},{id:"context",title:"Context",description:"\u4E0A\u4E0B\u6587\u7BA1\u7406 (tokens/\u538B\u7F29/\u7F13\u5B58)"},{id:"memory",title:"Memory",description:"\u8BB0\u5FC6\u7EDF\u8BA1 (\u77ED/\u4E2D/\u957F/\u6C38\u4E45)"},{id:"remote",title:"Remote",description:"\u8FDC\u7A0B\u8BBF\u95EE (LAN/VPS)"},{id:"statistic",title:"Statistic",description:"Token \u4F7F\u7528\u7EDF\u8BA1 (\u603B\u89C8/Provider/\u7F13\u5B58)"},{id:"index",title:"Index",description:"\u4EE3\u7801\u7D22\u5F15\u7BA1\u7406 (\u6784\u5EFA/\u67E5\u770B/\u6E05\u9664)"},{id:"help-text",title:"View Help Text",description:"\u67E5\u770B\u5E2E\u52A9\u6587\u6863"},{id:"exit",title:"\u2190 Exit",description:"\u9000\u51FA\u5E2E\u52A9\u83DC\u5355"}];function Ni(s,e){R(s);}function XA(){return ["",x.highlight(" \u57FA\u672C\u547D\u4EE4 (Commands):"),x.dim(" \u6240\u6709\u547D\u4EE4\u652F\u6301\u83DC\u5355\u9009\u62E9\uFF0C\u76F4\u63A5\u8F93\u5165\u547D\u4EE4\u5373\u53EF"),"",x.primary(" /help ")+x.dim("\u5E2E\u52A9\u83DC\u5355"),x.primary(" /exit ")+x.dim("\u9000\u51FA CLI"),x.primary(" /provider ")+x.dim("\u9009\u62E9/\u5207\u6362 Provider"),x.primary(" /model ")+x.dim("\u9009\u62E9 Provider \u2192 Model"),x.primary(" /mode ")+x.dim("\u5207\u6362 Agent/Ask \u6A21\u5F0F"),x.primary(" /collab ")+x.dim("\u534F\u4F5C\u6A21\u5F0F (\u5355Agent/\u591AAgent)"),x.primary(" /approval ")+x.dim("\u5207\u6362\u5BA1\u6279\u6A21\u5F0F Auto/Manual"),x.primary(" /notify ")+x.dim("\u5B8C\u6210\u63D0\u793A\u8BBE\u7F6E (\u58F0\u97F3/\u901A\u77E5)"),x.primary(" /sandbox ")+x.dim("\u5207\u6362\u6C99\u7BB1\u6A21\u5F0F On/Off"),x.primary(" /thinking ")+x.dim("\u5207\u6362\u6DF1\u5EA6\u601D\u8003 On/Off"),x.primary(" /index ")+x.dim("\u4EE3\u7801\u7D22\u5F15\u7BA1\u7406 (\u6784\u5EFA/\u67E5\u770B/\u6E05\u9664)"),x.primary(" /context ")+x.dim("\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355 (tokens/\u538B\u7F29/\u7F13\u5B58)"),x.primary(" /memory ")+x.dim("\u8BB0\u5FC6\u7EDF\u8BA1 (\u77ED/\u4E2D/\u957F/\u6C38\u4E45)"),x.primary(" /remote ")+x.dim("\u8FDC\u7A0B\u8BBF\u95EE\u914D\u7F6E (LAN/VPS)"),x.primary(" /statistic ")+x.dim("Token \u4F7F\u7528\u7EDF\u8BA1 (\u603B\u89C8/Provider/\u7F13\u5B58)"),x.primary(" /workspace ")+x.dim("\u5DE5\u4F5C\u533A\u7BA1\u7406 (list/add/switch)"),"",x.dim(" \u76F4\u63A5\u547D\u4EE4 (\u4E5F\u53EF\u76F4\u63A5\u6307\u5B9A\u53C2\u6570):"),x.dim(" /provider <id> \u5207\u6362\u5230\u6307\u5B9A Provider"),x.dim(" /model <name> \u5207\u6362\u5230\u6307\u5B9A Model"),x.dim(" /mode agent|ask \u76F4\u63A5\u8BBE\u7F6E\u6A21\u5F0F"),x.dim(" /collab on|off \u5207\u6362\u534F\u4F5C\u6A21\u5F0F"),x.dim(" /sandbox on|off \u76F4\u63A5\u8BBE\u7F6E\u6C99\u7BB1"),x.dim(" /thinking on|off \u76F4\u63A5\u8BBE\u7F6E\u601D\u8003"),"",x.primary(" /clear ")+x.dim("\u6E05\u7A7A\u5BF9\u8BDD\u5386\u53F2"),x.primary(" /stats ")+x.dim("\u663E\u793A\u4F1A\u8BDD\u7EDF\u8BA1\u4FE1\u606F"),x.primary(" /config-clear")+x.dim("\u6E05\u9664\u914D\u7F6E\u6587\u4EF6"),x.primary(" /attach <path>")+x.dim("\u6DFB\u52A0\u56FE\u7247\u9644\u4EF6"),x.primary(" /attachments ")+x.dim("\u7BA1\u7406\u9644\u4EF6 (list/clear/remove)")]}function QA(s=Ni){for(let e of XA())s(e);}function ZA(){return ["",x.highlight(" \u4F1A\u8BDD\u547D\u4EE4 (Session Commands):"),"",x.primary(" /sessions ")+x.dim("\u9009\u62E9/\u5207\u6362\u4F1A\u8BDD"),x.primary(" /session <id> ")+x.dim("\u76F4\u63A5\u5207\u6362\u5230\u6307\u5B9A\u4F1A\u8BDD"),x.primary(" /session-new ")+x.dim("\u521B\u5EFA\u65B0\u4F1A\u8BDD"),x.primary(" /session-info ")+x.dim("\u663E\u793A\u4F1A\u8BDD\u4FE1\u606F"),x.primary(" /undo [n] ")+x.dim("\u64A4\u9500\u6700\u8FD1 n \u8F6E\u5BF9\u8BDD"),x.primary(" /checkpoint ")+x.dim("\u521B\u5EFA\u68C0\u67E5\u70B9"),x.primary(" /checkpoints ")+x.dim("\u5217\u51FA\u68C0\u67E5\u70B9"),x.primary(" /rollback <id> ")+x.dim("\u56DE\u6EDA\u5230\u68C0\u67E5\u70B9"),x.primary(" /session-clear ")+x.dim("\u6E05\u7A7A\u4F1A\u8BDD"),x.primary(" /session-export ")+x.dim("\u5BFC\u51FA\u4F1A\u8BDD"),x.primary(" /compact ")+x.dim("\u624B\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587")]}function eM(s=Ni){for(let e of ZA())s(e);}function tM(){return ["",x.highlight(" \u8FDB\u7A0B\u7BA1\u7406 (Process Management):"),"",x.primary(" /processes ")+x.dim("\u67E5\u770B\u8FDB\u7A0B\u5217\u8868"),x.primary(" /ps ")+x.dim("/processes \u7684\u7B80\u5199"),x.primary(" /kill <pid> ")+x.dim("\u7EC8\u6B62\u6307\u5B9A\u8FDB\u7A0B"),x.primary(" /kill all ")+x.dim("\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B")]}function nM(s=Ni){for(let e of tM())s(e);}function rM(){return ["",x.highlight(" \u5FEB\u6377\u952E (Keyboard Shortcuts):"),"",x.dim(" \u83DC\u5355\u9009\u62E9\u65F6:"),x.primary(" \u2191/\u2193 ")+x.dim("\u4E0A\u4E0B\u79FB\u52A8\u9009\u62E9"),x.primary(" Enter ")+x.dim("\u786E\u8BA4\u9009\u62E9"),x.primary(" ESC ")+x.dim("\u53D6\u6D88\u9009\u62E9"),"",x.dim(" \u8FD0\u884C\u65F6:"),x.primary(" ESC ")+x.dim("\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1\uFF08\u6309\u4E24\u6B21\uFF09"),x.primary(" Tab ")+x.dim("\u5207\u6362 Thinking \u6A21\u5F0F"),x.error(" Ctrl+C ")+x.dim("\u9000\u51FA\u7A0B\u5E8F"),""]}function sM(s=Ni){for(let e of rM())s(e);}function xc(s=Ni){QA(s),eM(s),nM(s),sM(s);}function hv(){return YA.map(s=>({title:s.title,value:s.id,description:s.description}))}to();yn();async function Tc(s){let{runtimeHost:e,colors:t,promptSelect:n,sessionEnabled:r,activateSession:o,logInfo:i}=s;if(!r){i("Session disabled","Session persistence is not enabled.");return}let a=await e.listSessions();if(a.length===0){i("No sessions","No sessions found. Start chatting to create one.");return}let l=e.getCurrentSessionId();try{let c=a.slice(0,15).map(h=>{let f=l&&h.sessionId===l,v=vc(h.updatedAt);return {label:f?`\u25CF ${h.sessionId}`:h.sessionId,value:h.sessionId,description:`${h.itemCount} items, ${v}${f?" (current)":""}`}}),u=[{label:"\u2B05\uFE0F Back",value:"__back__",description:"Return to previous menu"},{label:"\u2500".repeat(40),value:"__separator__",description:""},...c],d=await n("Select session",u,l||void 0);if(d==="__back__")return;if(d==="__separator__")return Tc(s);if(d===l){i("Session","Already on this session.");return}let m=await e.switchSession(d),g=await o(m,{loadHistory:!0});i("Session switched",`${d}${g>0?` (${g} messages loaded)`:""}`);}catch(c){c.message!=="cancelled"&&i("Session switch failed",c.message);}}async function yv(s,e){let{runtimeHost:t,sessionEnabled:n,activateSession:r,colors:o}=s;if(!n){R(o.error(" [x] Session persistence is disabled"));return}try{let i=await t.switchSession(e),a=await r(i,{loadHistory:!0});R(""),R(o.success(` \u2713 Switched to session: ${e}`)),a>0&&R(o.dim(` Loaded ${a} messages`)),R("");}catch(i){R(o.error(` [x] ${i.message}`));}}async function bv(s,e){let{runtimeHost:t,sessionEnabled:n,activateSession:r,colors:o,uiController:i}=s;if(!n){i?i.addInfo(o.error("[x] Session persistence is disabled")):R(o.error(" [x] Session persistence is disabled"));return}try{let a=await t.createSession(e);await r(a,{loadHistory:!1}),await t.createCheckpoint("session_start"),i?i.addInfo(o.success(`\u2713 Created new session: ${a.sessionId}`)):(R(""),R(o.success(` \u2713 Created new session: ${a.sessionId}`)),R(""));}catch(a){i?i.addInfo(o.error(`[x] Failed to create session: ${a.message}`)):R(o.error(` [x] Failed to create session: ${a.message}`));}}async function vv(s){let{runtimeHost:e,colors:t}=s;try{let n=await e.getSessionInfo();R(""),R(t.highlight(" Session Info:")),R(""),R(t.dim(" Session ID: ")+t.info(n.sessionId)),R(t.dim(" Turns: ")+t.info(n.turnCount.toString())),R(t.dim(" Messages: ")+t.info(n.messageCount.toString())),R(t.dim(" Checkpoints: ")+t.info(n.checkpointCount.toString())),n.meta&&(R(t.dim(" Model: ")+t.info(n.meta.model||"N/A")),n.meta.createdAt&&R(t.dim(" Created: ")+t.info(new Date(n.meta.createdAt).toLocaleString()))),R("");}catch{R(t.dim(" No active session"));}}async function Cv(s,e){let{runtimeHost:t,colors:n}=s;try{let r=parseInt(e||"1")||1,o=await t.undoTurns(r);if(o.success){if(R(""),R(n.success(` \u2713 Undone ${o.undoneCount} turn(s)`)),o.messages.length>0){R(n.dim(" Removed messages:"));for(let i of o.messages.slice(0,4)){let a=(i.content||"").slice(0,50);R(n.dim(` [${i.role}] ${a}${a.length>=50?"...":""}`));}o.messages.length>4&&R(n.dim(` ... and ${o.messages.length-4} more`));}R("");}else R(n.warning(" \u26A0 Nothing to undo"));}catch(r){R(n.error(` [x] Undo failed: ${r.message}`));}}async function xv(s,e){let{runtimeHost:t,colors:n}=s;try{let r=await t.createCheckpoint(e||void 0);R(""),R(n.success(` \u2713 Checkpoint created: ${r}`)),e&&R(n.dim(` Name: ${e}`)),R("");}catch(r){R(n.error(` [x] Failed to create checkpoint: ${r.message}`));}}async function Tv(s){let{runtimeHost:e,normalizeCheckpoints:t,colors:n}=s;try{let r=t(await e.listCheckpoints());if(r.length===0){R(""),R(n.dim(" No checkpoints")),R("");return}R(""),R(n.highlight(" Checkpoints:")),R("");for(let o of r){let i=new Date(o.timestamp).toLocaleString();R(n.info(` ${o.id}`)+(o.name?n.primary(` [${o.name}]`):"")+n.dim(` (${i})`));}R(""),R(n.dim(" Use /rollback <id> to restore")),R("");}catch(r){R(n.error(` [x] Failed to list checkpoints: ${r.message}`));}}async function wv(s,e){let{runtimeHost:t,normalizeCheckpoints:n,colors:r}=s;try{if(!e){let i=n(await t.listCheckpoints());if(i.length===0){R(r.warning(" \u26A0 No checkpoints available")),R(r.dim(" Checkpoints are auto-created before each turn"));return}let a=i.find(u=>u.name==="session_start"),l=i.filter(u=>u.name?.startsWith("turn_")),c=i.filter(u=>u.name!=="session_start"&&!u.name?.startsWith("turn_"));if(R(""),R(r.highlight(" Available Checkpoints:")),R(""),a){R(r.success(" Session Start:"));let u=new Date(a.timestamp).toLocaleString();R(r.dim(` ${a.id}`)),R(r.dim(` ${u}`)),R("");}l.length>0&&(R(r.primary(" Turn Checkpoints:")),l.slice().reverse().forEach(u=>{let d=new Date(u.timestamp).toLocaleString(),m=u.name?.match(/turn_(\d+)/),g=m?`Turn ${m[1]}`:u.name;R(r.dim(` ${u.id} \u2190 ${g}`)),R(r.dim(` ${d}`)),R("");})),c.length>0&&(R(r.highlight(" Manual Checkpoints:")),c.forEach(u=>{let d=new Date(u.timestamp).toLocaleString();R(r.dim(` ${u.id} (${u.name||"unnamed"})`)),R(r.dim(` ${d}`)),R("");})),R(r.dim(" Usage: /rollback <checkpoint_id>")),R(r.dim(" Tip: Checkpoints are auto-created before each turn")),R("");return}let o=await t.rollbackTo(e);R(""),R(r.success(` \u2713 Rolled back to checkpoint: ${e}`)),R(r.dim(` Removed ${o.removedCount} items`)),R("");}catch(o){R(r.error(` [x] Rollback failed: ${o.message}`));}}async function kv(s){let{runtimeHost:e,colors:t}=s;try{await e.clearSession(),R(""),R(t.success(" \u2713 Session cleared")),R("");}catch(n){R(t.error(` [x] Failed to clear session: ${n.message}`));}}async function Sv(s,e){let{currentSession:t,sessionManager:n,colors:r}=s;if(!t){R(r.error(" [x] No active session"));return}try{let o=t.sessionId,i=await n.exportSession(o);e?(await Je.promises.writeFile(e,i,"utf-8"),R(""),R(r.success(` \u2713 Session exported to: ${e}`)),R("")):(R(""),R(r.highlight(" Session Export (JSON):")),R(""),R(i),R(""));}catch(o){R(r.error(` [x] Export failed: ${o.message}`));}}async function _v(s,e){let{sessionEnabled:t,compatProfile:n,uiController:r,runtimeHost:o,logInfo:i,colors:a}=s,{autoCompactionInProgress:l}=s;if(!t)return i("\u4F1A\u8BDD\u5DF2\u7981\u7528","\u538B\u7F29\u4EC5\u9002\u7528\u4E8E\u542F\u7528\u4E86\u6301\u4E45\u5316\u7684\u4F1A\u8BDD\u3002"),l;if(!n)return i("\u7F3A\u5C11\u6A21\u578B\u4E0A\u4E0B\u6587\u753B\u50CF","\u8BF7\u68C0\u67E5 Provider/Model \u914D\u7F6E\u3002"),l;if(l)return i("\u538B\u7F29\u8FDB\u884C\u4E2D","\u8BF7\u7A0D\u5019\u7247\u523B\u3002"),l;l=true;try{r&&r.updateStatus("[~] Manual compaction...","compacting"),await(s.withRuntimeEvents??(async u=>u()))(()=>o.compactSession()),r&&r.updateStatus("Compaction complete!","complete");}catch(c){i("\u624B\u52A8\u538B\u7F29\u5931\u8D25",c?.message||String(c)),r&&(r.updateStatus("Compaction failed","error"),r.addInfo("\u274C \u538B\u7F29\u5931\u8D25",c?.message||String(c)));}finally{l=false;}return l}to();Gt();yn();async function Iv(s){gt.refreshStatus();let e=gt.getBackgroundRunning();if(R(""),R(x.highlight(" \u540E\u53F0\u8FDB\u7A0B (Background Processes)")),R(""),e.length===0){R(x.dim(" \u6CA1\u6709\u8FD0\u884C\u4E2D\u7684\u540E\u53F0\u8FDB\u7A0B")),R(""),R(x.dim(" \u63D0\u793A: \u4F7F\u7528 execute_shell \u7684 background=true \u53C2\u6570\u542F\u52A8\u540E\u53F0\u8FDB\u7A0B")),R("");return}R(x.success(` \u{1F7E2} ${e.length} \u4E2A\u540E\u53F0\u8FDB\u7A0B\u6B63\u5728\u8FD0\u884C:`)),R(""),e.forEach(t=>{let n=Date.now()-t.startTime.getTime(),r=ev(n),o=t.command.length>50?t.command.substring(0,47)+"...":t.command;R(x.dim(" ")+x.warning(`PID ${t.pid}`)),R(x.dim(" \u547D\u4EE4: ")+x.info(o)),R(x.dim(" \u8FD0\u884C: ")+x.dim(r)),R(x.dim(" \u76EE\u5F55: ")+x.dim(t.cwd)),R("");}),R(x.dim(" \u547D\u4EE4:")),R(x.dim(" /kill <pid> ")+x.dim("\u7EC8\u6B62\u6307\u5B9A\u8FDB\u7A0B")),R(x.dim(" /kill all ")+x.dim("\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B")),R("");}async function Ev(s){if(!s){R(""),R(x.error(" \u7528\u6CD5: /kill <pid> \u6216 /kill all")),R(x.dim(" \u4F7F\u7528 /processes \u67E5\u770B\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B")),R("");return}if(gt.refreshStatus(),s.toLowerCase()==="all"){let r=gt.getBackgroundRunning();if(r.length===0){R(""),R(x.info(" \u6CA1\u6709\u8FD0\u884C\u4E2D\u7684\u540E\u53F0\u8FDB\u7A0B")),R("");return}R(""),R(x.warning(` \u5373\u5C06\u7EC8\u6B62 ${r.length} \u4E2A\u540E\u53F0\u8FDB\u7A0B:`)),r.forEach(i=>{R(x.dim(` PID ${i.pid}: ${i.command.substring(0,40)}...`));}),R("");let{confirm:o}=await Rc({type:"confirm",name:"confirm",message:"\u786E\u8BA4\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B?",initial:false});if(o){let i=gt.killAll(true);R(""),R(x.success(` \u2713 \u5DF2\u7EC8\u6B62 ${i.killed} \u4E2A\u8FDB\u7A0B`)),i.failed>0&&R(x.warning(` \u26A0 ${i.failed} \u4E2A\u8FDB\u7A0B\u7EC8\u6B62\u5931\u8D25`)),R("");}else R(x.dim(" \u5DF2\u53D6\u6D88"));return}let e=parseInt(s,10);if(isNaN(e)){R(""),R(x.error(` \u65E0\u6548\u7684 PID: ${s}`)),R("");return}let t=gt.get(e);if(!t)try{process.kill(e,0),R(""),R(x.warning(` PID ${e} \u4E0D\u5728\u8FDB\u7A0B\u7BA1\u7406\u5668\u4E2D\uFF0C\u5C1D\u8BD5\u76F4\u63A5\u7EC8\u6B62...`));let{confirm:r}=await Rc({type:"confirm",name:"confirm",message:`\u786E\u8BA4\u7EC8\u6B62 PID ${e}?`,initial:!1});r?(process.kill(e,"SIGTERM"),R(x.success(` \u2713 \u5DF2\u53D1\u9001 SIGTERM \u5230 PID ${e}`))):R(x.dim(" \u5DF2\u53D6\u6D88")),R("");return}catch{R(""),R(x.error(` \u8FDB\u7A0B ${e} \u4E0D\u5B58\u5728`)),R("");return}if(t.status!=="running"){R(""),R(x.info(` \u8FDB\u7A0B ${e} \u5DF2\u7ECF\u7ED3\u675F (\u72B6\u6001: ${t.status})`)),R("");return}R(""),R(x.warning(" \u5373\u5C06\u7EC8\u6B62\u8FDB\u7A0B:")),R(x.dim(` PID: ${t.pid}`)),R(x.dim(` \u547D\u4EE4: ${t.command}`)),R(x.dim(` \u7C7B\u578B: ${t.background?"\u540E\u53F0":"\u540C\u6B65"}`)),R("");let{confirm:n}=await Rc({type:"confirm",name:"confirm",message:"\u786E\u8BA4\u7EC8\u6B62\u6B64\u8FDB\u7A0B?",initial:true});if(n){let r=t.background?gt.killProcessGroup(e):gt.kill(e,"SIGTERM",true);R(""),r?R(x.success(` \u2713 \u5DF2\u7EC8\u6B62\u8FDB\u7A0B ${e}`)):R(x.error(` \u2717 \u65E0\u6CD5\u7EC8\u6B62\u8FDB\u7A0B ${e}`)),R("");}else R(x.dim(" \u5DF2\u53D6\u6D88"));}Oi();Gt();to();br();hm();Z();function aM(s){let e=s.getProviders();if(!e||e.length===0){s.logInfo("No provider configured","Add a provider before managing models.");return}lM(s,e);}function lM(s,e){let t=[];t.push(""),t.push(x.highlight(" Available Models")),t.push("");for(let r of e){let o=Xt[r.protocol]||"OpenAI",i=r.id===s.providerId,a=i?x.success(" [current]"):"";t.push(x.primary(` \u25B8 ${r.name} (${r.id})`)+a),t.push(x.dim(` Protocol: ${o}`)),r.models.length===0?t.push(x.dim(" No models configured")):r.models.forEach((l,c)=>{let u=[];i&&l.name===s.model&&u.push("current"),l.name===r.defaultModel&&u.push("default"),t.push(` ${x.dim(`${c+1}.`)} ${l.name}${Pi(u)}`);}),t.push("");}if(t.push(x.dim(" Commands:")),t.push(x.dim(" /model use [providerId] <name> switch model")),t.push(x.dim(" /model add add model")),t.push(x.dim(" /model remove <name> remove model")),t.push(x.dim(" /model default <name> set default model")),t.push(x.dim(" /model list <providerId> list provider models")),t.push(""),s.outputFn){for(let r of t)s.outputFn(r);return}let n=t.slice(1,-1);s.logInfo("Available models",n.join(`
3532
+ `);let r=n.searchParams.get("clientId")||er.randomUUID(),o=n.searchParams.get("agentId")||void 0,i=n.searchParams.get("topics"),a=new Set;i&&i.split(",").map(l=>l.trim()).filter(Boolean).forEach(l=>a.add(l)),this.clients.set(t,{clientId:r,agentId:o,topics:a,lastSeen:Date.now()}),o&&this.touchA2aAgent(o,{topics:a}),t.on("close",()=>{this.clients.delete(t);});}authorize(e,t){let n=e.headers.authorization||"";return ((n.startsWith("Bearer ")?n.slice(7):"")||t.searchParams.get("token")||e.headers["x-neox-token"])===this.options.token}writeUnauthorized(e){this.writeCors(e),e.writeHead(401,{"Content-Type":"application/json"}),e.end(JSON.stringify({ok:false,error:"Unauthorized"}));}writeCors(e){e.setHeader("Access-Control-Allow-Origin","*"),e.setHeader("Access-Control-Allow-Methods","GET,POST,OPTIONS"),e.setHeader("Access-Control-Allow-Headers","Content-Type,Authorization,X-Neox-Token");}async readJson(e){return new Promise((t,n)=>{let r=[],o=0;e.on("data",i=>{if(o+=i.length,o>_A){n(new Error("Payload too large")),e.destroy();return}r.push(i);}),e.on("end",()=>{if(r.length===0){t(null);return}try{let i=Buffer.concat(r).toString("utf-8");t(JSON.parse(i));}catch(i){n(i);}}),e.on("error",n);})}};function cm(){return er.randomBytes(16).toString("hex")}var EA=1e4,AA=200,MA=280,fc=class{state;seq=0;lastSnapshotAt=0;lastDeltaAt=0;pendingDelta=null;options;constructor(e){this.options={snapshotIntervalMs:e.snapshotIntervalMs??EA,deltaThrottleMs:e.deltaThrottleMs??AA,maxOutputPreviewChars:e.maxOutputPreviewChars??MA,agentId:e.agentId,sessionId:e.sessionId,emit:e.emit},this.state={agentId:e.agentId,sessionId:e.sessionId,updatedAt:Date.now()};}getSink(){return {name:"exec_state",handle:(e,t,n)=>{this.handleEvent(t,n);}}}handleEvent(e,t){let n=e.timestamp??Date.now(),r={};switch(t.provider&&t.provider!==this.state.provider&&(r.provider=t.provider),t.model&&t.model!==this.state.model&&(r.model=t.model),e.type){case "status":r.status={state:e.status,message:e.message,updatedAt:n};break;case "plan_update":r.plan={steps:e.plan,updatedAt:n};break;case "tool_call_start":r.tool={name:e.name,status:"running",startedAt:n,args:e.args};break;case "tool_call_end":r.tool={name:e.name,status:e.success?"success":"error",finishedAt:n,durationMs:e.duration,summary:e.summary};break;case "error":r.lastError={message:e.message,at:n};break;case "error_classified":r.lastError={message:e.message,category:e.category,code:e.code,retryable:e.retryable,at:n};break;case "run_result":r.lastResult={outputPreview:this.truncate(e.output),totalTokens:e.totalTokens,durationMs:e.durationMs,iterations:e.iterations,toolCalls:e.toolCalls,at:n};break;case "token_usage":r.metrics={promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,sessionPromptTokens:e.sessionPromptTokens,sessionCompletionTokens:e.sessionCompletionTokens,at:n};break;}Object.keys(r).length!==0&&(r.updatedAt=n,this.applyDelta(r),this.queueDelta(r,n),this.maybeEmitSnapshot(n,e.type));}applyDelta(e){e.provider!==void 0&&(this.state.provider=e.provider),e.model!==void 0&&(this.state.model=e.model),e.status&&(this.state.status=e.status),e.plan&&(this.state.plan=e.plan),e.tool&&(this.state.tool=e.tool),e.lastError&&(this.state.lastError=e.lastError),e.lastResult&&(this.state.lastResult=e.lastResult),e.metrics&&(this.state.metrics=e.metrics),e.updatedAt&&(this.state.updatedAt=e.updatedAt);}queueDelta(e,t){this.pendingDelta||(this.pendingDelta={}),Object.assign(this.pendingDelta,e),t-this.lastDeltaAt>=this.options.deltaThrottleMs&&this.flushDelta(t);}flushDelta(e){if(!this.pendingDelta)return;let t={...this.pendingDelta};this.pendingDelta=null,this.lastDeltaAt=e,this.emitEvent("state_delta",{agentId:this.state.agentId,sessionId:this.state.sessionId,changes:t});}maybeEmitSnapshot(e,t){if(t==="run_result"||t==="error"||t==="error_classified"){this.flushDelta(e),this.emitSnapshot(e);return}e-this.lastSnapshotAt>=this.options.snapshotIntervalMs&&(this.flushDelta(e),this.emitSnapshot(e));}emitSnapshot(e){this.lastSnapshotAt=e,this.emitEvent("state_snapshot",{agentId:this.state.agentId,sessionId:this.state.sessionId,state:this.state});}emitEvent(e,t){let n=Ln({type:"event",id:randomUUID(),from:this.state.agentId,seq:++this.seq,payload:{topic:e,data:t}});this.options.emit(n);}truncate(e){if(!e)return "";let t=this.options.maxOutputPreviewChars;return e.length<=t?e:`${e.slice(0,t).trimEnd()}...`}};Gt();to();Z();var qA=new Set([".wav",".mp3",".m4a",".aiff",".aif",".ogg"]),pm="complete.wav";function Di(s){return {soundEnabled:s.completionAlerts?.soundEnabled??false,soundFile:s.completionAlerts?.soundFile??"",notifyEnabled:s.completionAlerts?.notifyEnabled??false}}function mm(){try{return Je__default.existsSync(Vn)?Je__default.readdirSync(Vn).filter(s=>qA.has(he__default.extname(s).toLowerCase())).sort((s,e)=>s.localeCompare(e)):[]}catch{return []}}function KA(s){if(s){let n=he__default.isAbsolute(s)?s:he__default.join(Vn,s);if(Je__default.existsSync(n))return n}let e=he__default.join(Vn,pm);if(Je__default.existsSync(e))return e;let t=mm();return t.length>0?he__default.join(Vn,t[0]):null}function mv(s,e){let t="Neox CLI",n="Task complete",r=e?.summary?.durationMs,o=r?`${n} - ${(r/1e3).toFixed(1)}s`:n;if(s.notifyEnabled&&YA(t,o),s.soundEnabled){let i=KA(s.soundFile);VA(i);}}function so(s,e,t){try{let n=spawn(s,e,{stdio:"ignore"});n.on("error",r=>{process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to spawn ${s}`,{error:r}),t&&t();}),n.unref();}catch(n){process.env.CLI_DEBUG&&p.debug("ALERT",`Failed to execute ${s}`,{error:n}),t&&t();}}function no(){try{process.stdout.write("\x07");}catch{}}function pv(s){return s.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function JA(s){return s.replace(/'/g,"''")}function VA(s){if(!s||!Je__default.existsSync(s)){no();return}if(process.platform==="darwin"){so("afplay",[s],no);return}if(process.platform==="linux"){so("paplay",[s],()=>{so("aplay",[s],no);});return}if(process.platform==="win32"){let e=he__default.extname(s).toLowerCase();if(e!==".wav"&&e!==".wave"){no();return}let n=`(New-Object Media.SoundPlayer '${JA(s)}').PlaySync()`;so("powershell",["-NoProfile","-Command",n],no);return}no();}function YA(s,e){if(process.platform==="darwin"){let t=`display notification "${pv(e)}" with title "${pv(s)}"`;so("osascript",["-e",t]);return}if(process.platform==="linux"){so("notify-send",[s,e]);return}process.platform==="win32"&&process.env.CLI_DEBUG&&p.debug("ALERT","Notification not supported on Windows without extra tools");}um();function gv(s){return s.map(e=>({id:e.id??e.data?.id,name:e.name??e.data?.name,timestamp:e.timestamp??e.data?.timestamp??Date.now()})).filter(e=>typeof e.id=="string")}Gt();yn();var XA=[{id:"provider",title:"Provider",description:"\u9009\u62E9/\u5207\u6362 Provider"},{id:"model",title:"Model",description:"\u9009\u62E9 Provider \u2192 Model"},{id:"session",title:"Session",description:"\u9009\u62E9/\u5207\u6362\u4F1A\u8BDD"},{id:"workspace",title:"Workspace",description:"\u5DE5\u4F5C\u533A\u7BA1\u7406 (\u5207\u6362/\u6DFB\u52A0/\u5217\u8868)"},{id:"mode",title:"Mode",description:"\u5207\u6362 Agent/Ask \u6A21\u5F0F"},{id:"collab",title:"Collaboration",description:"\u534F\u4F5C\u6A21\u5F0F (\u5355Agent/\u591AAgent)"},{id:"sandbox",title:"Sandbox",description:"\u5207\u6362\u6C99\u7BB1\u6A21\u5F0F"},{id:"thinking",title:"Thinking",description:"\u5207\u6362\u6DF1\u5EA6\u601D\u8003"},{id:"approval",title:"Approval",description:"\u5207\u6362\u5BA1\u6279\u6A21\u5F0F"},{id:"notify",title:"Notify",description:"\u5B8C\u6210\u63D0\u793A (\u58F0\u97F3/\u901A\u77E5)"},{id:"context",title:"Context",description:"\u4E0A\u4E0B\u6587\u7BA1\u7406 (tokens/\u538B\u7F29/\u7F13\u5B58)"},{id:"memory",title:"Memory",description:"\u8BB0\u5FC6\u7EDF\u8BA1 (\u77ED/\u4E2D/\u957F/\u6C38\u4E45)"},{id:"remote",title:"Remote",description:"\u8FDC\u7A0B\u8BBF\u95EE (LAN/VPS)"},{id:"statistic",title:"Statistic",description:"Token \u4F7F\u7528\u7EDF\u8BA1 (\u603B\u89C8/Provider/\u7F13\u5B58)"},{id:"index",title:"Index",description:"\u4EE3\u7801\u7D22\u5F15\u7BA1\u7406 (\u6784\u5EFA/\u67E5\u770B/\u6E05\u9664)"},{id:"help-text",title:"View Help Text",description:"\u67E5\u770B\u5E2E\u52A9\u6587\u6863"},{id:"exit",title:"\u2190 Exit",description:"\u9000\u51FA\u5E2E\u52A9\u83DC\u5355"}];function Ni(s,e){R(s);}function QA(){return ["",x.highlight(" \u57FA\u672C\u547D\u4EE4 (Commands):"),x.dim(" \u6240\u6709\u547D\u4EE4\u652F\u6301\u83DC\u5355\u9009\u62E9\uFF0C\u76F4\u63A5\u8F93\u5165\u547D\u4EE4\u5373\u53EF"),"",x.primary(" /help ")+x.dim("\u5E2E\u52A9\u83DC\u5355"),x.primary(" /exit ")+x.dim("\u9000\u51FA CLI"),x.primary(" /provider ")+x.dim("\u9009\u62E9/\u5207\u6362 Provider"),x.primary(" /model ")+x.dim("\u9009\u62E9 Provider \u2192 Model"),x.primary(" /mode ")+x.dim("\u5207\u6362 Agent/Ask \u6A21\u5F0F"),x.primary(" /collab ")+x.dim("\u534F\u4F5C\u6A21\u5F0F (\u5355Agent/\u591AAgent)"),x.primary(" /approval ")+x.dim("\u5207\u6362\u5BA1\u6279\u6A21\u5F0F Auto/Manual"),x.primary(" /notify ")+x.dim("\u5B8C\u6210\u63D0\u793A\u8BBE\u7F6E (\u58F0\u97F3/\u901A\u77E5)"),x.primary(" /sandbox ")+x.dim("\u5207\u6362\u6C99\u7BB1\u6A21\u5F0F On/Off"),x.primary(" /thinking ")+x.dim("\u5207\u6362\u6DF1\u5EA6\u601D\u8003 On/Off"),x.primary(" /index ")+x.dim("\u4EE3\u7801\u7D22\u5F15\u7BA1\u7406 (\u6784\u5EFA/\u67E5\u770B/\u6E05\u9664)"),x.primary(" /context ")+x.dim("\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355 (tokens/\u538B\u7F29/\u7F13\u5B58)"),x.primary(" /memory ")+x.dim("\u8BB0\u5FC6\u7EDF\u8BA1 (\u77ED/\u4E2D/\u957F/\u6C38\u4E45)"),x.primary(" /remote ")+x.dim("\u8FDC\u7A0B\u8BBF\u95EE\u914D\u7F6E (LAN/VPS)"),x.primary(" /statistic ")+x.dim("Token \u4F7F\u7528\u7EDF\u8BA1 (\u603B\u89C8/Provider/\u7F13\u5B58)"),x.primary(" /workspace ")+x.dim("\u5DE5\u4F5C\u533A\u7BA1\u7406 (list/add/switch)"),"",x.dim(" \u76F4\u63A5\u547D\u4EE4 (\u4E5F\u53EF\u76F4\u63A5\u6307\u5B9A\u53C2\u6570):"),x.dim(" /provider <id> \u5207\u6362\u5230\u6307\u5B9A Provider"),x.dim(" /model <name> \u5207\u6362\u5230\u6307\u5B9A Model"),x.dim(" /mode agent|ask \u76F4\u63A5\u8BBE\u7F6E\u6A21\u5F0F"),x.dim(" /collab on|off \u5207\u6362\u534F\u4F5C\u6A21\u5F0F"),x.dim(" /sandbox on|off \u76F4\u63A5\u8BBE\u7F6E\u6C99\u7BB1"),x.dim(" /thinking on|off \u76F4\u63A5\u8BBE\u7F6E\u601D\u8003"),"",x.primary(" /clear ")+x.dim("\u6E05\u7A7A\u5BF9\u8BDD\u5386\u53F2"),x.primary(" /stats ")+x.dim("\u663E\u793A\u4F1A\u8BDD\u7EDF\u8BA1\u4FE1\u606F"),x.primary(" /config-clear")+x.dim("\u6E05\u9664\u914D\u7F6E\u6587\u4EF6"),x.primary(" /attach <path>")+x.dim("\u6DFB\u52A0\u56FE\u7247\u9644\u4EF6"),x.primary(" /attachments ")+x.dim("\u7BA1\u7406\u9644\u4EF6 (list/clear/remove)")]}function ZA(s=Ni){for(let e of QA())s(e);}function eM(){return ["",x.highlight(" \u4F1A\u8BDD\u547D\u4EE4 (Session Commands):"),"",x.primary(" /sessions ")+x.dim("\u9009\u62E9/\u5207\u6362\u4F1A\u8BDD"),x.primary(" /session <id> ")+x.dim("\u76F4\u63A5\u5207\u6362\u5230\u6307\u5B9A\u4F1A\u8BDD"),x.primary(" /session-new ")+x.dim("\u521B\u5EFA\u65B0\u4F1A\u8BDD"),x.primary(" /session-info ")+x.dim("\u663E\u793A\u4F1A\u8BDD\u4FE1\u606F"),x.primary(" /undo [n] ")+x.dim("\u64A4\u9500\u6700\u8FD1 n \u8F6E\u5BF9\u8BDD"),x.primary(" /checkpoint ")+x.dim("\u521B\u5EFA\u68C0\u67E5\u70B9"),x.primary(" /checkpoints ")+x.dim("\u5217\u51FA\u68C0\u67E5\u70B9"),x.primary(" /rollback <id> ")+x.dim("\u56DE\u6EDA\u5230\u68C0\u67E5\u70B9"),x.primary(" /session-clear ")+x.dim("\u6E05\u7A7A\u4F1A\u8BDD"),x.primary(" /session-export ")+x.dim("\u5BFC\u51FA\u4F1A\u8BDD"),x.primary(" /compact ")+x.dim("\u624B\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587")]}function tM(s=Ni){for(let e of eM())s(e);}function nM(){return ["",x.highlight(" \u8FDB\u7A0B\u7BA1\u7406 (Process Management):"),"",x.primary(" /processes ")+x.dim("\u67E5\u770B\u8FDB\u7A0B\u5217\u8868"),x.primary(" /ps ")+x.dim("/processes \u7684\u7B80\u5199"),x.primary(" /kill <pid> ")+x.dim("\u7EC8\u6B62\u6307\u5B9A\u8FDB\u7A0B"),x.primary(" /kill all ")+x.dim("\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B")]}function rM(s=Ni){for(let e of nM())s(e);}function sM(){return ["",x.highlight(" \u5FEB\u6377\u952E (Keyboard Shortcuts):"),"",x.dim(" \u83DC\u5355\u9009\u62E9\u65F6:"),x.primary(" \u2191/\u2193 ")+x.dim("\u4E0A\u4E0B\u79FB\u52A8\u9009\u62E9"),x.primary(" Enter ")+x.dim("\u786E\u8BA4\u9009\u62E9"),x.primary(" ESC ")+x.dim("\u53D6\u6D88\u9009\u62E9"),"",x.dim(" \u8FD0\u884C\u65F6:"),x.primary(" ESC ")+x.dim("\u4E2D\u65AD\u5F53\u524D\u4EFB\u52A1\uFF08\u6309\u4E24\u6B21\uFF09"),x.primary(" Tab ")+x.dim("\u5207\u6362 Thinking \u6A21\u5F0F"),x.error(" Ctrl+C ")+x.dim("\u9000\u51FA\u7A0B\u5E8F"),""]}function oM(s=Ni){for(let e of sM())s(e);}function xc(s=Ni){ZA(s),tM(s),rM(s),oM(s);}function hv(){return XA.map(s=>({title:s.title,value:s.id,description:s.description}))}to();yn();async function Tc(s){let{runtimeHost:e,colors:t,promptSelect:n,sessionEnabled:r,activateSession:o,logInfo:i}=s;if(!r){i("Session disabled","Session persistence is not enabled.");return}let a=await e.listSessions();if(a.length===0){i("No sessions","No sessions found. Start chatting to create one.");return}let l=e.getCurrentSessionId();try{let c=a.slice(0,15).map(h=>{let f=l&&h.sessionId===l,v=vc(h.updatedAt);return {label:f?`\u25CF ${h.sessionId}`:h.sessionId,value:h.sessionId,description:`${h.itemCount} items, ${v}${f?" (current)":""}`}}),u=[{label:"\u2B05\uFE0F Back",value:"__back__",description:"Return to previous menu"},{label:"\u2500".repeat(40),value:"__separator__",description:""},...c],d=await n("Select session",u,l||void 0);if(d==="__back__")return;if(d==="__separator__")return Tc(s);if(d===l){i("Session","Already on this session.");return}let m=await e.switchSession(d),g=await o(m,{loadHistory:!0});i("Session switched",`${d}${g>0?` (${g} messages loaded)`:""}`);}catch(c){c.message!=="cancelled"&&i("Session switch failed",c.message);}}async function yv(s,e){let{runtimeHost:t,sessionEnabled:n,activateSession:r,colors:o}=s;if(!n){R(o.error(" [x] Session persistence is disabled"));return}try{let i=await t.switchSession(e),a=await r(i,{loadHistory:!0});R(""),R(o.success(` \u2713 Switched to session: ${e}`)),a>0&&R(o.dim(` Loaded ${a} messages`)),R("");}catch(i){R(o.error(` [x] ${i.message}`));}}async function bv(s,e){let{runtimeHost:t,sessionEnabled:n,activateSession:r,colors:o,uiController:i}=s;if(!n){i?i.addInfo(o.error("[x] Session persistence is disabled")):R(o.error(" [x] Session persistence is disabled"));return}try{let a=await t.createSession(e);await r(a,{loadHistory:!1}),await t.createCheckpoint("session_start"),i?i.addInfo(o.success(`\u2713 Created new session: ${a.sessionId}`)):(R(""),R(o.success(` \u2713 Created new session: ${a.sessionId}`)),R(""));}catch(a){i?i.addInfo(o.error(`[x] Failed to create session: ${a.message}`)):R(o.error(` [x] Failed to create session: ${a.message}`));}}async function vv(s){let{runtimeHost:e,colors:t}=s;try{let n=await e.getSessionInfo();R(""),R(t.highlight(" Session Info:")),R(""),R(t.dim(" Session ID: ")+t.info(n.sessionId)),R(t.dim(" Turns: ")+t.info(n.turnCount.toString())),R(t.dim(" Messages: ")+t.info(n.messageCount.toString())),R(t.dim(" Checkpoints: ")+t.info(n.checkpointCount.toString())),n.meta&&(R(t.dim(" Model: ")+t.info(n.meta.model||"N/A")),n.meta.createdAt&&R(t.dim(" Created: ")+t.info(new Date(n.meta.createdAt).toLocaleString()))),R("");}catch{R(t.dim(" No active session"));}}async function Cv(s,e){let{runtimeHost:t,colors:n}=s;try{let r=parseInt(e||"1")||1,o=await t.undoTurns(r);if(o.success){if(R(""),R(n.success(` \u2713 Undone ${o.undoneCount} turn(s)`)),o.messages.length>0){R(n.dim(" Removed messages:"));for(let i of o.messages.slice(0,4)){let a=(i.content||"").slice(0,50);R(n.dim(` [${i.role}] ${a}${a.length>=50?"...":""}`));}o.messages.length>4&&R(n.dim(` ... and ${o.messages.length-4} more`));}R("");}else R(n.warning(" \u26A0 Nothing to undo"));}catch(r){R(n.error(` [x] Undo failed: ${r.message}`));}}async function xv(s,e){let{runtimeHost:t,colors:n}=s;try{let r=await t.createCheckpoint(e||void 0);R(""),R(n.success(` \u2713 Checkpoint created: ${r}`)),e&&R(n.dim(` Name: ${e}`)),R("");}catch(r){R(n.error(` [x] Failed to create checkpoint: ${r.message}`));}}async function Tv(s){let{runtimeHost:e,normalizeCheckpoints:t,colors:n}=s;try{let r=t(await e.listCheckpoints());if(r.length===0){R(""),R(n.dim(" No checkpoints")),R("");return}R(""),R(n.highlight(" Checkpoints:")),R("");for(let o of r){let i=new Date(o.timestamp).toLocaleString();R(n.info(` ${o.id}`)+(o.name?n.primary(` [${o.name}]`):"")+n.dim(` (${i})`));}R(""),R(n.dim(" Use /rollback <id> to restore")),R("");}catch(r){R(n.error(` [x] Failed to list checkpoints: ${r.message}`));}}async function wv(s,e){let{runtimeHost:t,normalizeCheckpoints:n,colors:r}=s;try{if(!e){let i=n(await t.listCheckpoints());if(i.length===0){R(r.warning(" \u26A0 No checkpoints available")),R(r.dim(" Checkpoints are auto-created before each turn"));return}let a=i.find(u=>u.name==="session_start"),l=i.filter(u=>u.name?.startsWith("turn_")),c=i.filter(u=>u.name!=="session_start"&&!u.name?.startsWith("turn_"));if(R(""),R(r.highlight(" Available Checkpoints:")),R(""),a){R(r.success(" Session Start:"));let u=new Date(a.timestamp).toLocaleString();R(r.dim(` ${a.id}`)),R(r.dim(` ${u}`)),R("");}l.length>0&&(R(r.primary(" Turn Checkpoints:")),l.slice().reverse().forEach(u=>{let d=new Date(u.timestamp).toLocaleString(),m=u.name?.match(/turn_(\d+)/),g=m?`Turn ${m[1]}`:u.name;R(r.dim(` ${u.id} \u2190 ${g}`)),R(r.dim(` ${d}`)),R("");})),c.length>0&&(R(r.highlight(" Manual Checkpoints:")),c.forEach(u=>{let d=new Date(u.timestamp).toLocaleString();R(r.dim(` ${u.id} (${u.name||"unnamed"})`)),R(r.dim(` ${d}`)),R("");})),R(r.dim(" Usage: /rollback <checkpoint_id>")),R(r.dim(" Tip: Checkpoints are auto-created before each turn")),R("");return}let o=await t.rollbackTo(e);R(""),R(r.success(` \u2713 Rolled back to checkpoint: ${e}`)),R(r.dim(` Removed ${o.removedCount} items`)),R("");}catch(o){R(r.error(` [x] Rollback failed: ${o.message}`));}}async function kv(s){let{runtimeHost:e,colors:t}=s;try{await e.clearSession(),R(""),R(t.success(" \u2713 Session cleared")),R("");}catch(n){R(t.error(` [x] Failed to clear session: ${n.message}`));}}async function Sv(s,e){let{currentSession:t,sessionManager:n,colors:r}=s;if(!t){R(r.error(" [x] No active session"));return}try{let o=t.sessionId,i=await n.exportSession(o);e?(await Je.promises.writeFile(e,i,"utf-8"),R(""),R(r.success(` \u2713 Session exported to: ${e}`)),R("")):(R(""),R(r.highlight(" Session Export (JSON):")),R(""),R(i),R(""));}catch(o){R(r.error(` [x] Export failed: ${o.message}`));}}async function _v(s,e){let{sessionEnabled:t,compatProfile:n,uiController:r,runtimeHost:o,logInfo:i,colors:a}=s,{autoCompactionInProgress:l}=s;if(!t)return i("\u4F1A\u8BDD\u5DF2\u7981\u7528","\u538B\u7F29\u4EC5\u9002\u7528\u4E8E\u542F\u7528\u4E86\u6301\u4E45\u5316\u7684\u4F1A\u8BDD\u3002"),l;if(!n)return i("\u7F3A\u5C11\u6A21\u578B\u4E0A\u4E0B\u6587\u753B\u50CF","\u8BF7\u68C0\u67E5 Provider/Model \u914D\u7F6E\u3002"),l;if(l)return i("\u538B\u7F29\u8FDB\u884C\u4E2D","\u8BF7\u7A0D\u5019\u7247\u523B\u3002"),l;l=true;try{r&&r.updateStatus("[~] Manual compaction...","compacting"),await(s.withRuntimeEvents??(async u=>u()))(()=>o.compactSession()),r&&r.updateStatus("Compaction complete!","complete");}catch(c){i("\u624B\u52A8\u538B\u7F29\u5931\u8D25",c?.message||String(c)),r&&(r.updateStatus("Compaction failed","error"),r.addInfo("\u274C \u538B\u7F29\u5931\u8D25",c?.message||String(c)));}finally{l=false;}return l}to();Gt();yn();async function Iv(s){gt.refreshStatus();let e=gt.getBackgroundRunning();if(R(""),R(x.highlight(" \u540E\u53F0\u8FDB\u7A0B (Background Processes)")),R(""),e.length===0){R(x.dim(" \u6CA1\u6709\u8FD0\u884C\u4E2D\u7684\u540E\u53F0\u8FDB\u7A0B")),R(""),R(x.dim(" \u63D0\u793A: \u4F7F\u7528 execute_shell \u7684 background=true \u53C2\u6570\u542F\u52A8\u540E\u53F0\u8FDB\u7A0B")),R("");return}R(x.success(` \u{1F7E2} ${e.length} \u4E2A\u540E\u53F0\u8FDB\u7A0B\u6B63\u5728\u8FD0\u884C:`)),R(""),e.forEach(t=>{let n=Date.now()-t.startTime.getTime(),r=ev(n),o=t.command.length>50?t.command.substring(0,47)+"...":t.command;R(x.dim(" ")+x.warning(`PID ${t.pid}`)),R(x.dim(" \u547D\u4EE4: ")+x.info(o)),R(x.dim(" \u8FD0\u884C: ")+x.dim(r)),R(x.dim(" \u76EE\u5F55: ")+x.dim(t.cwd)),R("");}),R(x.dim(" \u547D\u4EE4:")),R(x.dim(" /kill <pid> ")+x.dim("\u7EC8\u6B62\u6307\u5B9A\u8FDB\u7A0B")),R(x.dim(" /kill all ")+x.dim("\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B")),R("");}async function Ev(s){if(!s){R(""),R(x.error(" \u7528\u6CD5: /kill <pid> \u6216 /kill all")),R(x.dim(" \u4F7F\u7528 /processes \u67E5\u770B\u8FD0\u884C\u4E2D\u7684\u8FDB\u7A0B")),R("");return}if(gt.refreshStatus(),s.toLowerCase()==="all"){let r=gt.getBackgroundRunning();if(r.length===0){R(""),R(x.info(" \u6CA1\u6709\u8FD0\u884C\u4E2D\u7684\u540E\u53F0\u8FDB\u7A0B")),R("");return}R(""),R(x.warning(` \u5373\u5C06\u7EC8\u6B62 ${r.length} \u4E2A\u540E\u53F0\u8FDB\u7A0B:`)),r.forEach(i=>{R(x.dim(` PID ${i.pid}: ${i.command.substring(0,40)}...`));}),R("");let{confirm:o}=await Rc({type:"confirm",name:"confirm",message:"\u786E\u8BA4\u7EC8\u6B62\u6240\u6709\u540E\u53F0\u8FDB\u7A0B?",initial:false});if(o){let i=gt.killAll(true);R(""),R(x.success(` \u2713 \u5DF2\u7EC8\u6B62 ${i.killed} \u4E2A\u8FDB\u7A0B`)),i.failed>0&&R(x.warning(` \u26A0 ${i.failed} \u4E2A\u8FDB\u7A0B\u7EC8\u6B62\u5931\u8D25`)),R("");}else R(x.dim(" \u5DF2\u53D6\u6D88"));return}let e=parseInt(s,10);if(isNaN(e)){R(""),R(x.error(` \u65E0\u6548\u7684 PID: ${s}`)),R("");return}let t=gt.get(e);if(!t)try{process.kill(e,0),R(""),R(x.warning(` PID ${e} \u4E0D\u5728\u8FDB\u7A0B\u7BA1\u7406\u5668\u4E2D\uFF0C\u5C1D\u8BD5\u76F4\u63A5\u7EC8\u6B62...`));let{confirm:r}=await Rc({type:"confirm",name:"confirm",message:`\u786E\u8BA4\u7EC8\u6B62 PID ${e}?`,initial:!1});r?(process.kill(e,"SIGTERM"),R(x.success(` \u2713 \u5DF2\u53D1\u9001 SIGTERM \u5230 PID ${e}`))):R(x.dim(" \u5DF2\u53D6\u6D88")),R("");return}catch{R(""),R(x.error(` \u8FDB\u7A0B ${e} \u4E0D\u5B58\u5728`)),R("");return}if(t.status!=="running"){R(""),R(x.info(` \u8FDB\u7A0B ${e} \u5DF2\u7ECF\u7ED3\u675F (\u72B6\u6001: ${t.status})`)),R("");return}R(""),R(x.warning(" \u5373\u5C06\u7EC8\u6B62\u8FDB\u7A0B:")),R(x.dim(` PID: ${t.pid}`)),R(x.dim(` \u547D\u4EE4: ${t.command}`)),R(x.dim(` \u7C7B\u578B: ${t.background?"\u540E\u53F0":"\u540C\u6B65"}`)),R("");let{confirm:n}=await Rc({type:"confirm",name:"confirm",message:"\u786E\u8BA4\u7EC8\u6B62\u6B64\u8FDB\u7A0B?",initial:true});if(n){let r=t.background?gt.killProcessGroup(e):gt.kill(e,"SIGTERM",true);R(""),r?R(x.success(` \u2713 \u5DF2\u7EC8\u6B62\u8FDB\u7A0B ${e}`)):R(x.error(` \u2717 \u65E0\u6CD5\u7EC8\u6B62\u8FDB\u7A0B ${e}`)),R("");}else R(x.dim(" \u5DF2\u53D6\u6D88"));}Oi();Gt();to();br();hm();Z();function lM(s){let e=s.getProviders();if(!e||e.length===0){s.logInfo("No provider configured","Add a provider before managing models.");return}cM(s,e);}function cM(s,e){let t=[];t.push(""),t.push(x.highlight(" Available Models")),t.push("");for(let r of e){let o=Xt[r.protocol]||"OpenAI",i=r.id===s.providerId,a=i?x.success(" [current]"):"";t.push(x.primary(` \u25B8 ${r.name} (${r.id})`)+a),t.push(x.dim(` Protocol: ${o}`)),r.models.length===0?t.push(x.dim(" No models configured")):r.models.forEach((l,c)=>{let u=[];i&&l.name===s.model&&u.push("current"),l.name===r.defaultModel&&u.push("default"),t.push(` ${x.dim(`${c+1}.`)} ${l.name}${Pi(u)}`);}),t.push("");}if(t.push(x.dim(" Commands:")),t.push(x.dim(" /model use [providerId] <name> switch model")),t.push(x.dim(" /model add add model")),t.push(x.dim(" /model remove <name> remove model")),t.push(x.dim(" /model default <name> set default model")),t.push(x.dim(" /model list <providerId> list provider models")),t.push(""),s.outputFn){for(let r of t)s.outputFn(r);return}let n=t.slice(1,-1);s.logInfo("Available models",n.join(`
3533
3533
  `));}function Av(s,e){if(!e||e.models.length===0){s.logInfo(`No models for ${e?.name||"provider"}`,"Use /model add to register a model.");return}let t=e.defaultModel,n=Xt[e.protocol]||"OpenAI",r=[];if(r.push(""),r.push(x.highlight(` Available Models - ${e.name} (${e.id})`)),r.push(x.dim(` Protocol: ${n}`)),r.push(""),e.models.forEach((i,a)=>{let l=[];e.id===s.providerId&&i.name===s.model&&l.push("current"),i.name===t&&l.push("default"),r.push(` ${x.primary(`${a+1}.`)} ${i.name}${Pi(l)}`);}),r.push(""),r.push(x.dim(" Commands:")),r.push(x.dim(" /model use [providerId] <name> switch model")),r.push(x.dim(" /model add add model")),r.push(x.dim(" /model remove <name> remove model")),r.push(x.dim(" /model default <name> set default model")),r.push(x.dim(" /model list <providerId> list other provider models")),r.push(""),s.outputFn){for(let i of r)s.outputFn(i);return}let o=r.slice(1,-1);s.logInfo("Available models",o.join(`
3534
- `));}async function Mv(s,e){if(e){let t=s.getProvider(e);if(!t){s.logInfo("Provider not found",`Unknown provider "${e}".`);return}Av(s,t);return}aM(s);}async function vm(s,e){if(!s.providerSettings){s.logInfo("No provider configured","Set up a provider before selecting models.");return}if(!s.providerSettings.models.some(t=>t.name===e)){let t=s.providerSettings.models.map(n=>n.name).join(", ");s.logInfo("Invalid model",t?`Available models: ${t}`:"No models configured.");return}if(e===s.model){s.logInfo("Model unchanged",`${e} is already active.`);return}try{s.setLastSelectedModel(s.providerId,e),await s.applyProviderState({providerId:s.providerId,provider:s.provider,model:e,providerSettings:s.providerSettings}),s.updateProviderDisplay(s.getProviderDisplayName(),e),s.logInfo("Model updated",`Model set to ${e}`);}catch(t){s.logInfo("Failed to change model",t.message);}}function cM(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(0)}K`:`${s}`}function uM(s){return [...wc(s).slice(0,15).map(t=>{let n=Dt.getModel(t);if(!n)return {name:t,description:t};let r=cM(n.maxInputTokens),o=[];n.supportsVision&&o.push("\u{1F441}\uFE0F"),n.supportsThinking&&o.push("\u{1F4AD}");let i=o.length>0?`${o.join(" ")} `:"";return {name:t,description:`${n.displayName} ${i}(${r} ctx)`}}),{name:"__custom__",description:"Enter custom model name"}]}async function Pv(s,e){if(!(e.protocol==="openai-responses"||e.protocol==="openai"&&e.baseUrl?.includes("responses"))||!await s.promptYesNo("Configure OpenAI Responses API reasoning settings?",false))return;let r=await s.promptSelect("Reasoning effort level",[{label:"Low",value:"low",description:"Minimal reasoning overhead"},{label:"Medium",value:"medium",description:"Balanced reasoning"},{label:"High",value:"high",description:"Deep thinking (slower, more thorough)"}],"low"),o=await s.promptSelect("Summary mode",[{label:"Auto",value:"auto",description:"Automatic summary generation"},{label:"Concise",value:"concise",description:"Brief summaries"},{label:"Detailed",value:"detailed",description:"Comprehensive summaries"}],"auto"),i=await s.promptYesNo("Configure verbosity level? (advanced)",false),a;return i&&(a=await s.promptSelect("Verbosity level",[{label:"Low",value:"low",description:"Minimal output detail"},{label:"Medium",value:"medium",description:"Standard detail"},{label:"High",value:"high",description:"Maximum detail"}],"low")),{effort:r,summary:o,...a&&{verbosity:a}}}async function Ec(s,e,t=false){let n=s.getProviders();if(!n||n.length===0){s.logInfo("No provider configured","Add a provider before managing models.");return}try{for(;;){let r,o;if(t&&e){let g=s.getProvider(e);if(!g){s.logInfo("Provider not found",`Unknown provider "${e}".`);return}r=g,o=void 0;}else if(e?.trim()&&!t){if(!s.providerSettings){s.logInfo("No provider configured","Add a provider before managing models.");return}r=s.providerSettings,o=e.trim();}else {if(n.length===1)r=n[0];else {let g=await s.selectProviderFromList("Select provider to add model to");if(!g)return;if(g.id==="__add__"){let{handleProviderAddCommand:h}=await Promise.resolve().then(()=>(Oi(),Ic));await h(s);let f=s.getProviders();if(!f||f.length===0)return;continue}r=g;}o=void 0;}let i;if(o)i=o;else {let g=uM(r.protocol);p.debug("MODEL_ADD","Getting model presets",{protocol:r.protocol,presetCount:g.length,firstThree:g.slice(0,3)});let h=[{label:"\u2190 Back",value:"__back__",description:"Return to provider selection"},...g.map(v=>({label:v.name==="__custom__"?"\u270F\uFE0F Custom model name":v.name,value:v.name,description:v.description}))],f=await s.promptSelect(`Select a model to add to ${r.name}`,h);if(!f||f==="__back__"){if(n.length===1||t)return;continue}f==="__custom__"?i=await s.promptText("Enter custom model name",{}):i=f;}if(r.models.find(g=>g.name===i)){if(s.logInfo("Model already exists",`Model "${i}" is already added to provider ${r.name}.`),o||n.length===1||t)return;continue}let l=await s.promptYesNo("Set as default model?",!1),c=await Pv(s,r),u={};c&&(u.reasoning=c);let d=s.addModel(r.id,i,l,u),m=!1;r.id===s.providerId?m=await s.promptYesNo("Use this model immediately?",!0):m=await s.promptYesNo(`Switch to ${r.name} with this model?`,!1),s.refreshProviderSettings(),s.logInfo("Model added",`Model "${i}" added to provider ${d.name}.`),(m||l)&&(r.id!==s.providerId?(s.setLastSelectedModel(r.id,i),s.setDefaultProvider(r.id),await s.applyProviderState({providerId:r.id,provider:r.protocol,model:i,providerSettings:d}),s.updateProviderDisplay(s.getProviderDisplayName(),i),s.logInfo("Provider and model updated",`${s.getProviderDisplayName()} / ${i}`)):await vm(s,i));break}}catch(r){r.message==="cancelled"?s.logInfo("Model addition cancelled"):s.logInfo("Failed to add model",r.message);}}async function Cm(s,e,t){let n=null,r=t;if(e){let o=s.getProvider(e);if(o)n=o;else if(!r)r=e;else {s.logInfo("Provider not found",`Unknown provider "${e}".`);return}}if(!n)if(s.getProviderCount()<=1&&s.providerSettings)n=s.providerSettings;else {let o=await s.selectProviderFromList("Select provider for model");if(!o)return;if(o.id==="__add__"){let{handleProviderAddCommand:i}=await Promise.resolve().then(()=>(Oi(),Ic));await i(s);return}n=o;}if(r){if(!n.models.some(i=>i.name===r)){s.logInfo("Model not found",`Model "${r}" does not exist for ${n.name}.`);return}}else {if(r=await s.selectModelFromProvider(n,`Select model for ${n.name}`)||void 0,!r)return;if(r==="__add__"){await Ec(s,n.id,true);return}if(r==="__delete__"){await Ac(s,void 0,n.id);return}}if(n.id!==s.providerId){if(!s.resolveModel(n.id)){s.logInfo("Provider has no models",`Configure models for ${n.name} via /model add.`);return}s.setLastSelectedModel(n.id,r),s.setDefaultProvider(n.id),await s.applyProviderState({providerId:n.id,provider:n.protocol,model:r,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),r),s.logInfo("Provider and model updated",`Provider: ${s.getProviderDisplayName()}
3535
- Model: ${r}`);}else await vm(s,r);Av(s,n);}async function Ac(s,e,t){let n=t||s.providerId,r=s.getProvider(n);if(!r){s.logInfo("No provider configured","Add a provider before managing models.");return}let o=e?e.trim():"";if(!(!o&&(o=await s.selectModelFromProvider(r,`Select a model to remove from ${r.name}`),!o||o==="__back__"||o==="__add__"||o==="__delete__"))){if(!r.models.some(i=>i.name===o)){s.logInfo("Model not found",`Model "${o}" does not exist for ${r.name}.`);return}try{if(!await s.promptConfirmKeyword(`Type REMOVE to delete model "${o}" from ${r.name}`,"remove")){s.logInfo("Model removal cancelled");return}let a=s.removeModel(n,o);if(s.providerId===n&&s.model===o){let c=s.resolveModel(n);if(!c){s.logInfo("Model removed",`Removed ${o}. Add another model with /model add.`);return}s.setLastSelectedModel(n,c),await s.applyProviderState({providerId:n,provider:s.provider,model:c,providerSettings:a}),s.updateProviderDisplay(s.getProviderDisplayName(),c),s.logInfo("Model removed",`Removed ${o}. Switched to ${c}.`);}else s.refreshProviderSettings(),s.logInfo("Model removed",`Removed ${o} from ${r.name}.`);}catch(i){i.message==="cancelled"?s.logInfo("Model removal cancelled"):s.logInfo("Failed to remove model",i.message);}}}async function Rv(s,e){if(!s.providerSettings){s.logInfo("No provider configured","Add a provider before managing models.");return}let t=e?e.trim():"";if(!(!t&&(t=await s.selectModelFromCurrentProvider("Select a model to set as default"),!t))){if(!s.providerSettings.models.some(n=>n.name===t)){s.logInfo("Model not found",`Model "${t}" does not exist for ${s.providerSettings.name}.`);return}try{let n=s.updateProvider(s.providerId,{defaultModel:t});s.setLastSelectedModel(s.providerId,t),await s.applyProviderState({providerId:s.providerId,provider:s.provider,model:t,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),t),s.logInfo("Default model updated",`${t} is now default for ${n.name}.`);}catch(n){s.logInfo("Failed to set default model",n.message);}}}async function Dv(s){let e=s.getProviders();if(!e||e.length===0){s.logInfo("No provider configured","Add a provider with /provider add first.");return}try{for(;;){let t;if(e.length===1)t=e[0];else {let r=await s.selectProviderFromList("Select provider");if(!r)return;if(r.id==="__add__"){let{handleProviderAddCommand:o}=await Promise.resolve().then(()=>(Oi(),Ic));await o(s);return}t=r;}if(t.models.length===0){s.logInfo("No models",`Provider "${t.name}" has no models. Use /model add to add one.`);return}let n=await s.selectModelFromProvider(t,`Select model (${t.name})`);if(!n){if(e.length===1)return;continue}if(n==="__add__"){await Ec(s,t.id,!0);return}if(n==="__delete__"){await Ac(s,void 0,t.id);return}t.id!==s.providerId?(s.setLastSelectedModel(t.id,n),s.setDefaultProvider(t.id),await s.applyProviderState({providerId:t.id,provider:t.protocol,model:n,providerSettings:t}),s.updateProviderDisplay(s.getProviderDisplayName(),n),s.logInfo("Provider and model updated",`${s.getProviderDisplayName()} / ${n}`)):await vm(s,n);break}}catch(t){t.message==="cancelled"?s.logInfo("Selection cancelled"):s.logInfo("Selection failed",t.message);}}async function Nv(s,e,t){let n=s.providerId,r=s.getProvider(n);if(!r){s.logInfo("No provider configured","Add a provider before configuring models.");return}let o=e?.trim()||"";if(!o&&(o=await s.selectModelFromProvider(r,`Select a model to configure (${r.name})`)||"",!o||o.startsWith("__")))return;if(!r.models.find(a=>a.name===o)){s.logInfo("Model not found",`Model "${o}" does not exist for ${r.name}.`);return}try{s.logInfo(`Configuring model: ${o}`,`Provider: ${r.name} (${r.protocol})`);let a=await Pv(s,r);if(!a){s.logInfo("Configuration cancelled","No changes made.");return}let l=s.updateModelConfig(n,o,{reasoning:a});n===s.providerId&&s.refreshProviderSettings(),s.logInfo("Model configuration updated",`Updated reasoning settings for ${o}`);}catch(a){a.message==="cancelled"?s.logInfo("Configuration cancelled"):s.logInfo("Failed to configure model",a.message);}}Gt();yn();function dM(s){return s.includes("gemini-3")||s.includes("preview")}async function Lv(s,e){let n=(e.trim().split(/\s+/)[1]||"").toLowerCase(),r=s.logInfo||((g,h)=>{R(""),R(x.info(` ${g}`)),h&&R(x.dim(` ${h}`)),R("");}),o=s.providerSettings.protocol==="anthropic",i=s.providerSettings.protocol==="gemini",a=o||i,l=o?s.model.includes("opus-4-5")||s.model.includes("opus-4.5")||s.model.endsWith("-thinking"):i?dM(s.model):false;if(!a){r("Extended thinking","\u4EC5\u9002\u7528\u4E8E Claude (Anthropic) \u6216 Gemini \u6A21\u578B");return}let c=()=>{s.setThinkingMode("enabled"),s.llmProvider&&"setThinking"in s.llmProvider&&(o?s.llmProvider.setThinking({type:"enabled"}):i&&s.llmProvider.setThinking({type:"enabled"}));let g=o?"Claude":"Gemini",h=l?"":`
3534
+ `));}async function Mv(s,e){if(e){let t=s.getProvider(e);if(!t){s.logInfo("Provider not found",`Unknown provider "${e}".`);return}Av(s,t);return}lM(s);}async function vm(s,e){if(!s.providerSettings){s.logInfo("No provider configured","Set up a provider before selecting models.");return}if(!s.providerSettings.models.some(t=>t.name===e)){let t=s.providerSettings.models.map(n=>n.name).join(", ");s.logInfo("Invalid model",t?`Available models: ${t}`:"No models configured.");return}if(e===s.model){s.logInfo("Model unchanged",`${e} is already active.`);return}try{s.setLastSelectedModel(s.providerId,e),await s.applyProviderState({providerId:s.providerId,provider:s.provider,model:e,providerSettings:s.providerSettings}),s.updateProviderDisplay(s.getProviderDisplayName(),e),s.logInfo("Model updated",`Model set to ${e}`);}catch(t){s.logInfo("Failed to change model",t.message);}}function uM(s){return s>=1e6?`${(s/1e6).toFixed(1)}M`:s>=1e3?`${(s/1e3).toFixed(0)}K`:`${s}`}function dM(s){return [...wc(s).slice(0,15).map(t=>{let n=Dt.getModel(t);if(!n)return {name:t,description:t};let r=uM(n.maxInputTokens),o=[];n.supportsVision&&o.push("\u{1F441}\uFE0F"),n.supportsThinking&&o.push("\u{1F4AD}");let i=o.length>0?`${o.join(" ")} `:"";return {name:t,description:`${n.displayName} ${i}(${r} ctx)`}}),{name:"__custom__",description:"Enter custom model name"}]}async function Pv(s,e){if(!(e.protocol==="openai-responses"||e.protocol==="openai"&&e.baseUrl?.includes("responses"))||!await s.promptYesNo("Configure OpenAI Responses API reasoning settings?",false))return;let r=await s.promptSelect("Reasoning effort level",[{label:"Low",value:"low",description:"Minimal reasoning overhead"},{label:"Medium",value:"medium",description:"Balanced reasoning"},{label:"High",value:"high",description:"Deep thinking (slower, more thorough)"}],"low"),o=await s.promptSelect("Summary mode",[{label:"Auto",value:"auto",description:"Automatic summary generation"},{label:"Concise",value:"concise",description:"Brief summaries"},{label:"Detailed",value:"detailed",description:"Comprehensive summaries"}],"auto"),i=await s.promptYesNo("Configure verbosity level? (advanced)",false),a;return i&&(a=await s.promptSelect("Verbosity level",[{label:"Low",value:"low",description:"Minimal output detail"},{label:"Medium",value:"medium",description:"Standard detail"},{label:"High",value:"high",description:"Maximum detail"}],"low")),{effort:r,summary:o,...a&&{verbosity:a}}}async function Ec(s,e,t=false){let n=s.getProviders();if(!n||n.length===0){s.logInfo("No provider configured","Add a provider before managing models.");return}try{for(;;){let r,o;if(t&&e){let g=s.getProvider(e);if(!g){s.logInfo("Provider not found",`Unknown provider "${e}".`);return}r=g,o=void 0;}else if(e?.trim()&&!t){if(!s.providerSettings){s.logInfo("No provider configured","Add a provider before managing models.");return}r=s.providerSettings,o=e.trim();}else {if(n.length===1)r=n[0];else {let g=await s.selectProviderFromList("Select provider to add model to");if(!g)return;if(g.id==="__add__"){let{handleProviderAddCommand:h}=await Promise.resolve().then(()=>(Oi(),Ic));await h(s);let f=s.getProviders();if(!f||f.length===0)return;continue}r=g;}o=void 0;}let i;if(o)i=o;else {let g=dM(r.protocol);p.debug("MODEL_ADD","Getting model presets",{protocol:r.protocol,presetCount:g.length,firstThree:g.slice(0,3)});let h=[{label:"\u2190 Back",value:"__back__",description:"Return to provider selection"},...g.map(v=>({label:v.name==="__custom__"?"\u270F\uFE0F Custom model name":v.name,value:v.name,description:v.description}))],f=await s.promptSelect(`Select a model to add to ${r.name}`,h);if(!f||f==="__back__"){if(n.length===1||t)return;continue}f==="__custom__"?i=await s.promptText("Enter custom model name",{}):i=f;}if(r.models.find(g=>g.name===i)){if(s.logInfo("Model already exists",`Model "${i}" is already added to provider ${r.name}.`),o||n.length===1||t)return;continue}let l=await s.promptYesNo("Set as default model?",!1),c=await Pv(s,r),u={};c&&(u.reasoning=c);let d=s.addModel(r.id,i,l,u),m=!1;r.id===s.providerId?m=await s.promptYesNo("Use this model immediately?",!0):m=await s.promptYesNo(`Switch to ${r.name} with this model?`,!1),s.refreshProviderSettings(),s.logInfo("Model added",`Model "${i}" added to provider ${d.name}.`),(m||l)&&(r.id!==s.providerId?(s.setLastSelectedModel(r.id,i),s.setDefaultProvider(r.id),await s.applyProviderState({providerId:r.id,provider:r.protocol,model:i,providerSettings:d}),s.updateProviderDisplay(s.getProviderDisplayName(),i),s.logInfo("Provider and model updated",`${s.getProviderDisplayName()} / ${i}`)):await vm(s,i));break}}catch(r){r.message==="cancelled"?s.logInfo("Model addition cancelled"):s.logInfo("Failed to add model",r.message);}}async function Cm(s,e,t){let n=null,r=t;if(e){let o=s.getProvider(e);if(o)n=o;else if(!r)r=e;else {s.logInfo("Provider not found",`Unknown provider "${e}".`);return}}if(!n)if(s.getProviderCount()<=1&&s.providerSettings)n=s.providerSettings;else {let o=await s.selectProviderFromList("Select provider for model");if(!o)return;if(o.id==="__add__"){let{handleProviderAddCommand:i}=await Promise.resolve().then(()=>(Oi(),Ic));await i(s);return}n=o;}if(r){if(!n.models.some(i=>i.name===r)){s.logInfo("Model not found",`Model "${r}" does not exist for ${n.name}.`);return}}else {if(r=await s.selectModelFromProvider(n,`Select model for ${n.name}`)||void 0,!r)return;if(r==="__add__"){await Ec(s,n.id,true);return}if(r==="__delete__"){await Ac(s,void 0,n.id);return}}if(n.id!==s.providerId){if(!s.resolveModel(n.id)){s.logInfo("Provider has no models",`Configure models for ${n.name} via /model add.`);return}s.setLastSelectedModel(n.id,r),s.setDefaultProvider(n.id),await s.applyProviderState({providerId:n.id,provider:n.protocol,model:r,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),r),s.logInfo("Provider and model updated",`Provider: ${s.getProviderDisplayName()}
3535
+ Model: ${r}`);}else await vm(s,r);Av(s,n);}async function Ac(s,e,t){let n=t||s.providerId,r=s.getProvider(n);if(!r){s.logInfo("No provider configured","Add a provider before managing models.");return}let o=e?e.trim():"";if(!(!o&&(o=await s.selectModelFromProvider(r,`Select a model to remove from ${r.name}`),!o||o==="__back__"||o==="__add__"||o==="__delete__"))){if(!r.models.some(i=>i.name===o)){s.logInfo("Model not found",`Model "${o}" does not exist for ${r.name}.`);return}try{if(!await s.promptConfirmKeyword(`Type REMOVE to delete model "${o}" from ${r.name}`,"remove")){s.logInfo("Model removal cancelled");return}let a=s.removeModel(n,o);if(s.providerId===n&&s.model===o){let c=s.resolveModel(n);if(!c){s.logInfo("Model removed",`Removed ${o}. Add another model with /model add.`);return}s.setLastSelectedModel(n,c),await s.applyProviderState({providerId:n,provider:s.provider,model:c,providerSettings:a}),s.updateProviderDisplay(s.getProviderDisplayName(),c),s.logInfo("Model removed",`Removed ${o}. Switched to ${c}.`);}else s.refreshProviderSettings(),s.logInfo("Model removed",`Removed ${o} from ${r.name}.`);}catch(i){i.message==="cancelled"?s.logInfo("Model removal cancelled"):s.logInfo("Failed to remove model",i.message);}}}async function Rv(s,e){if(!s.providerSettings){s.logInfo("No provider configured","Add a provider before managing models.");return}let t=e?e.trim():"";if(!(!t&&(t=await s.selectModelFromCurrentProvider("Select a model to set as default"),!t))){if(!s.providerSettings.models.some(n=>n.name===t)){s.logInfo("Model not found",`Model "${t}" does not exist for ${s.providerSettings.name}.`);return}try{let n=s.updateProvider(s.providerId,{defaultModel:t});s.setLastSelectedModel(s.providerId,t),await s.applyProviderState({providerId:s.providerId,provider:s.provider,model:t,providerSettings:n}),s.updateProviderDisplay(s.getProviderDisplayName(),t),s.logInfo("Default model updated",`${t} is now default for ${n.name}.`);}catch(n){s.logInfo("Failed to set default model",n.message);}}}async function Dv(s){let e=s.getProviders();if(!e||e.length===0){s.logInfo("No provider configured","Add a provider with /provider add first.");return}try{for(;;){let t;if(e.length===1)t=e[0];else {let r=await s.selectProviderFromList("Select provider");if(!r)return;if(r.id==="__add__"){let{handleProviderAddCommand:o}=await Promise.resolve().then(()=>(Oi(),Ic));await o(s);return}t=r;}if(t.models.length===0){s.logInfo("No models",`Provider "${t.name}" has no models. Use /model add to add one.`);return}let n=await s.selectModelFromProvider(t,`Select model (${t.name})`);if(!n){if(e.length===1)return;continue}if(n==="__add__"){await Ec(s,t.id,!0);return}if(n==="__delete__"){await Ac(s,void 0,t.id);return}t.id!==s.providerId?(s.setLastSelectedModel(t.id,n),s.setDefaultProvider(t.id),await s.applyProviderState({providerId:t.id,provider:t.protocol,model:n,providerSettings:t}),s.updateProviderDisplay(s.getProviderDisplayName(),n),s.logInfo("Provider and model updated",`${s.getProviderDisplayName()} / ${n}`)):await vm(s,n);break}}catch(t){t.message==="cancelled"?s.logInfo("Selection cancelled"):s.logInfo("Selection failed",t.message);}}async function Nv(s,e,t){let n=s.providerId,r=s.getProvider(n);if(!r){s.logInfo("No provider configured","Add a provider before configuring models.");return}let o=e?.trim()||"";if(!o&&(o=await s.selectModelFromProvider(r,`Select a model to configure (${r.name})`)||"",!o||o.startsWith("__")))return;if(!r.models.find(a=>a.name===o)){s.logInfo("Model not found",`Model "${o}" does not exist for ${r.name}.`);return}try{s.logInfo(`Configuring model: ${o}`,`Provider: ${r.name} (${r.protocol})`);let a=await Pv(s,r);if(!a){s.logInfo("Configuration cancelled","No changes made.");return}let l=s.updateModelConfig(n,o,{reasoning:a});n===s.providerId&&s.refreshProviderSettings(),s.logInfo("Model configuration updated",`Updated reasoning settings for ${o}`);}catch(a){a.message==="cancelled"?s.logInfo("Configuration cancelled"):s.logInfo("Failed to configure model",a.message);}}Gt();yn();function pM(s){return s.includes("gemini-3")||s.includes("preview")}async function Lv(s,e){let n=(e.trim().split(/\s+/)[1]||"").toLowerCase(),r=s.logInfo||((g,h)=>{R(""),R(x.info(` ${g}`)),h&&R(x.dim(` ${h}`)),R("");}),o=s.providerSettings.protocol==="anthropic",i=s.providerSettings.protocol==="gemini",a=o||i,l=o?s.model.includes("opus-4-5")||s.model.includes("opus-4.5")||s.model.endsWith("-thinking"):i?pM(s.model):false;if(!a){r("Extended thinking","\u4EC5\u9002\u7528\u4E8E Claude (Anthropic) \u6216 Gemini \u6A21\u578B");return}let c=()=>{s.setThinkingMode("enabled"),s.llmProvider&&"setThinking"in s.llmProvider&&(o?s.llmProvider.setThinking({type:"enabled"}):i&&s.llmProvider.setThinking({type:"enabled"}));let g=o?"Claude":"Gemini",h=l?"":`
3536
3536
  \u26A0 \u5F53\u524D\u6A21\u578B\u53EF\u80FD\u4E0D\u5B8C\u5168\u9002\u914D`;r(`${g} thinking enabled`,`\u6A21\u578B: ${s.model}${h}`);},u=()=>{s.setThinkingMode("disabled"),s.llmProvider&&"setThinking"in s.llmProvider&&(o?s.llmProvider.setThinking({type:"disabled"}):i&&s.llmProvider.setThinking({type:"disabled"})),r(`${o?"Claude":"Gemini"} thinking disabled`,`\u6A21\u578B: ${s.model}`);};if(n==="on"||n==="enable"||n==="enabled"){c();return}if(n==="off"||n==="disable"||n==="disabled"){u();return}if(s.promptSelect&&n!=="status"){let g=s.thinkingMode==="enabled"?"on":"off",h=o?"Claude":"Gemini";try{let f=await s.promptSelect(`${h} Thinking`,[{label:"Off",value:"off",description:"\u5173\u95ED\u6DF1\u5EA6\u601D\u8003"},{label:"On",value:"on",description:"\u5F00\u542F\u6DF1\u5EA6\u601D\u8003\uFF08\u9002\u7528\u4E8E\u590D\u6742\u4EFB\u52A1\uFF09"}],g);f==="on"&&s.thinkingMode!=="enabled"?c():f==="off"&&s.thinkingMode!=="disabled"?u():r("Extended Thinking",`\u5F53\u524D\u72B6\u6001: ${s.thinkingMode==="enabled"?"\u5DF2\u5F00\u542F":"\u5DF2\u5173\u95ED"}`);}catch(f){f.message!=="cancelled"&&r("Thinking selection failed",f.message);}return}let d=s.thinkingMode==="enabled"?"\u5DF2\u5F00\u542F":s.thinkingMode==="disabled"?"\u5DF2\u5173\u95ED":"\u672A\u8BBE\u7F6E";r("Extended Thinking",`\u72B6\u6001: ${d}
3537
3537
  Provider: ${o?"Claude":i?"Gemini":"Unknown"}
3538
- \u6A21\u578B: ${s.model}`);}Gt();yn();async function Ov(s){if(R(""),R(x.warning(" \u26A0\uFE0F This will delete your configuration file and reset all settings.")),R(x.dim(" You will need to reconfigure providers and API keys.")),R(""),!(await Rc({type:"confirm",name:"value",message:"Are you sure you want to clear the configuration?",initial:false})).value){R(""),R(x.info(" Configuration clear cancelled.")),R("");return}try{Je.existsSync(sn)?(Je.unlinkSync(sn),R(""),R(x.success(" \u2713 Configuration file deleted successfully!")),R(x.dim(` ${sn}`)),R(""),R(x.info(" Please restart the CLI to reconfigure.")),R(""),await s.cleanup(),process.exit(0)):(R(""),R(x.info(" No configuration file found.")),R(""));}catch(t){R(""),R(x.error(" \u2717 Failed to delete configuration file.")),R(x.dim(` ${t.message}`)),R("");}}async function $v(s,e){let t="Usage: /approval auto | manual",n=e?e.toLowerCase():"";if(!n)try{n=await s.promptSelect("\u9009\u62E9\u5BA1\u6279\u6A21\u5F0F (Approval Mode)",[{label:"auto - \u81EA\u52A8\u6267\u884C (Default)",value:"auto",description:"\u5DE5\u5177\u65E0\u9700\u786E\u8BA4\u5373\u53EF\u8FD0\u884C"},{label:"manual - \u9700\u8981\u5BA1\u6279",value:"manual",description:"\u6BCF\u6B21\u5DE5\u5177\u8FD0\u884C\u524D\u624B\u52A8\u786E\u8BA4"}],s.approvalMode,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4");}catch(i){i?.message!=="cancelled"&&s.logInfo("\u5BA1\u6279\u6A21\u5F0F\u5207\u6362\u5931\u8D25",i?.message);return}if(n!=="auto"&&n!=="manual"){s.logInfo("\u65E0\u6548\u7684\u5BA1\u6279\u6A21\u5F0F",`${t}`);return}if(s.approvalMode===n){s.logInfo("\u5BA1\u6279\u6A21\u5F0F\u672A\u53D8\u5316",`\u4ECD\u4E3A ${n}`);return}s.setApprovalMode(n);let r={...s.userConfig,approvalMode:n};s.updateConfig(r),Ae(r);let o=n==="manual"?"\u5DF2\u5207\u6362\u4E3A\u9700\u8981\u5BA1\u6279\u6A21\u5F0F\uFF1A\u6267\u884C\u5DE5\u5177\u524D\u5C06\u5F39\u51FA Yes/No\u3002":"\u5DF2\u5207\u6362\u4E3A\u81EA\u52A8\u6A21\u5F0F\uFF1A\u5DE5\u5177\u6267\u884C\u4E0D\u518D\u63D0\u793A\u5BA1\u6279\u3002";s.logInfo("\u5BA1\u6279\u6A21\u5F0F\u5DF2\u66F4\u65B0",o);}async function Bv(s,e){let t=Di(s.userConfig),n=e?.toLowerCase();if(!n){let r=t.soundFile?t.soundFile:`Default: ${pm}`,o=t.soundEnabled?"On":"Off",i=t.notifyEnabled?"On":"Off";try{n=await s.promptSelect("Completion alerts",[{label:`Sound: ${o}`,value:"sound",description:"Play a sound when a task completes"},{label:`Sound file: ${r}`,value:"soundfile",description:`Sound folder: ${Vn}`},{label:`Notification: ${i}`,value:"notify",description:"Send a system notification on completion"}],"sound","Use Up/Down to select, Enter to confirm, ESC to cancel");}catch(a){a?.message!=="cancelled"&&s.logInfo("Selection cancelled",a?.message);return}}switch(n){case "sound":{try{let r=await s.promptSelect("Enable completion sound",[{label:"On",value:"on"},{label:"Off",value:"off"}],t.soundEnabled?"on":"off");xm(s,{soundEnabled:r==="on"}),s.logInfo("Completion sound updated",r==="on"?"Enabled":"Disabled");}catch(r){r?.message!=="cancelled"&&s.logInfo("Selection cancelled",r?.message);}break}case "notify":{try{let r=await s.promptSelect("Enable completion notifications",[{label:"On",value:"on"},{label:"Off",value:"off"}],t.notifyEnabled?"on":"off");xm(s,{notifyEnabled:r==="on"}),s.logInfo("Completion notifications updated",r==="on"?"Enabled":"Disabled");}catch(r){r?.message!=="cancelled"&&s.logInfo("Selection cancelled",r?.message);}break}case "soundfile":{let r=mm();if(r.length===0){s.logInfo("No sound files found",`Place audio files in: ${Vn}`);return}let o=r.map(a=>({label:a,value:a,description:t.soundFile===a?"Current":void 0})),i=r.includes(t.soundFile)?t.soundFile:r[0];try{let a=await s.promptSelect("Select completion sound",o,i,"Use Up/Down to select, Enter to confirm, ESC to cancel");xm(s,{soundFile:a}),s.logInfo("Sound file updated",a);}catch(a){a?.message!=="cancelled"&&s.logInfo("Selection cancelled",a?.message);}break}default:s.logInfo("Invalid action","Use /notify to view available options");}}function xm(s,e){let n={...Di(s.userConfig),...e},r={...s.userConfig,completionAlerts:n};s.updateConfig(r),Ae(r);}Gt();async function Uv(s,e){let t=Vo(s.workspacePath),n=await t.getStats();if(!e)try{e=await s.promptSelect("\u4EE3\u7801\u7D22\u5F15\u7BA1\u7406",[{label:n.hasIndex?"\u{1F4CA} \u67E5\u770B\u7D22\u5F15\u72B6\u6001":"\u{1F4CA} \u7D22\u5F15\u72B6\u6001 (\u672A\u6784\u5EFA)",value:"status",description:n.hasIndex?`${n.fileCount} \u4E2A\u6587\u4EF6, ${n.symbolCount} \u4E2A\u7B26\u53F7`:"\u5C1A\u672A\u6784\u5EFA\u7D22\u5F15"},{label:"\u{1F528} \u6784\u5EFA\u7D22\u5F15",value:"build",description:"\u89E3\u6790\u9879\u76EE\u4EE3\u7801\uFF0C\u63D0\u53D6\u51FD\u6570/\u7C7B/\u63A5\u53E3\u7B49\u7B26\u53F7"},{label:"\u{1F504} \u91CD\u5EFA\u7D22\u5F15",value:"rebuild",description:"\u5F3A\u5236\u91CD\u65B0\u6784\u5EFA\u7D22\u5F15 (\u5FFD\u7565\u7F13\u5B58)"},{label:"\u{1F5D1}\uFE0F \u6E05\u9664\u7D22\u5F15",value:"clear",description:"\u5220\u9664\u6240\u6709\u7D22\u5F15\u6587\u4EF6"},{label:"\u2699\uFE0F \u914D\u7F6E\u7D22\u5F15",value:"config",description:"\u8BBE\u7F6E\u7D22\u5F15\u8BED\u8A00\u3001\u6392\u9664\u8DEF\u5F84\u7B49"}],"status","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4");}catch(r){r?.message!=="cancelled"&&s.logInfo("\u7D22\u5F15\u64CD\u4F5C\u5931\u8D25",r?.message);return}switch(e){case "status":await mM(s,t);break;case "build":await Fv(s,t,false);break;case "rebuild":await Fv(s,t,true);break;case "clear":await gM(s,t);break;case "config":await hM(s);break;default:s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /index \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}async function mM(s,e){let t=await e.getStats(),n=[];if(!t.hasIndex)n.push(x.warning("\u72B6\u6001: \u672A\u6784\u5EFA")),n.push(""),n.push(x.dim("\u8FD0\u884C /index build \u6784\u5EFA\u7D22\u5F15"));else {n.push(x.success("\u72B6\u6001: \u5DF2\u6784\u5EFA \u2713")),n.push(`\u6587\u4EF6\u6570: ${t.fileCount}`),n.push(`\u7B26\u53F7\u6570: ${t.symbolCount}`);let r=(t.size/1024).toFixed(1),o=(t.size/(1024*1024)).toFixed(2),i=t.size>1024*1024?`${o}MB`:`${r}KB`;n.push(`\u7D22\u5F15\u5927\u5C0F: ${i}`),t.lastUpdated&&n.push(`\u6700\u540E\u66F4\u65B0: ${t.lastUpdated.toLocaleString()}`);}s.logInfo("\u{1F4CA} \u4EE3\u7801\u7D22\u5F15\u72B6\u6001",n.join(`
3538
+ \u6A21\u578B: ${s.model}`);}Gt();yn();async function Ov(s){if(R(""),R(x.warning(" \u26A0\uFE0F This will delete your configuration file and reset all settings.")),R(x.dim(" You will need to reconfigure providers and API keys.")),R(""),!(await Rc({type:"confirm",name:"value",message:"Are you sure you want to clear the configuration?",initial:false})).value){R(""),R(x.info(" Configuration clear cancelled.")),R("");return}try{Je.existsSync(sn)?(Je.unlinkSync(sn),R(""),R(x.success(" \u2713 Configuration file deleted successfully!")),R(x.dim(` ${sn}`)),R(""),R(x.info(" Please restart the CLI to reconfigure.")),R(""),await s.cleanup(),process.exit(0)):(R(""),R(x.info(" No configuration file found.")),R(""));}catch(t){R(""),R(x.error(" \u2717 Failed to delete configuration file.")),R(x.dim(` ${t.message}`)),R("");}}async function $v(s,e){let t="Usage: /approval auto | manual",n=e?e.toLowerCase():"";if(!n)try{n=await s.promptSelect("\u9009\u62E9\u5BA1\u6279\u6A21\u5F0F (Approval Mode)",[{label:"auto - \u81EA\u52A8\u6267\u884C (Default)",value:"auto",description:"\u5DE5\u5177\u65E0\u9700\u786E\u8BA4\u5373\u53EF\u8FD0\u884C"},{label:"manual - \u9700\u8981\u5BA1\u6279",value:"manual",description:"\u6BCF\u6B21\u5DE5\u5177\u8FD0\u884C\u524D\u624B\u52A8\u786E\u8BA4"}],s.approvalMode,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4");}catch(i){i?.message!=="cancelled"&&s.logInfo("\u5BA1\u6279\u6A21\u5F0F\u5207\u6362\u5931\u8D25",i?.message);return}if(n!=="auto"&&n!=="manual"){s.logInfo("\u65E0\u6548\u7684\u5BA1\u6279\u6A21\u5F0F",`${t}`);return}if(s.approvalMode===n){s.logInfo("\u5BA1\u6279\u6A21\u5F0F\u672A\u53D8\u5316",`\u4ECD\u4E3A ${n}`);return}s.setApprovalMode(n);let r={...s.userConfig,approvalMode:n};s.updateConfig(r),Ae(r);let o=n==="manual"?"\u5DF2\u5207\u6362\u4E3A\u9700\u8981\u5BA1\u6279\u6A21\u5F0F\uFF1A\u6267\u884C\u5DE5\u5177\u524D\u5C06\u5F39\u51FA Yes/No\u3002":"\u5DF2\u5207\u6362\u4E3A\u81EA\u52A8\u6A21\u5F0F\uFF1A\u5DE5\u5177\u6267\u884C\u4E0D\u518D\u63D0\u793A\u5BA1\u6279\u3002";s.logInfo("\u5BA1\u6279\u6A21\u5F0F\u5DF2\u66F4\u65B0",o);}async function Bv(s,e){let t=Di(s.userConfig),n=e?.toLowerCase();if(!n){let r=t.soundFile?t.soundFile:`Default: ${pm}`,o=t.soundEnabled?"On":"Off",i=t.notifyEnabled?"On":"Off";try{n=await s.promptSelect("Completion alerts",[{label:`Sound: ${o}`,value:"sound",description:"Play a sound when a task completes"},{label:`Sound file: ${r}`,value:"soundfile",description:`Sound folder: ${Vn}`},{label:`Notification: ${i}`,value:"notify",description:"Send a system notification on completion"}],"sound","Use Up/Down to select, Enter to confirm, ESC to cancel");}catch(a){a?.message!=="cancelled"&&s.logInfo("Selection cancelled",a?.message);return}}switch(n){case "sound":{try{let r=await s.promptSelect("Enable completion sound",[{label:"On",value:"on"},{label:"Off",value:"off"}],t.soundEnabled?"on":"off");xm(s,{soundEnabled:r==="on"}),s.logInfo("Completion sound updated",r==="on"?"Enabled":"Disabled");}catch(r){r?.message!=="cancelled"&&s.logInfo("Selection cancelled",r?.message);}break}case "notify":{try{let r=await s.promptSelect("Enable completion notifications",[{label:"On",value:"on"},{label:"Off",value:"off"}],t.notifyEnabled?"on":"off");xm(s,{notifyEnabled:r==="on"}),s.logInfo("Completion notifications updated",r==="on"?"Enabled":"Disabled");}catch(r){r?.message!=="cancelled"&&s.logInfo("Selection cancelled",r?.message);}break}case "soundfile":{let r=mm();if(r.length===0){s.logInfo("No sound files found",`Place audio files in: ${Vn}`);return}let o=r.map(a=>({label:a,value:a,description:t.soundFile===a?"Current":void 0})),i=r.includes(t.soundFile)?t.soundFile:r[0];try{let a=await s.promptSelect("Select completion sound",o,i,"Use Up/Down to select, Enter to confirm, ESC to cancel");xm(s,{soundFile:a}),s.logInfo("Sound file updated",a);}catch(a){a?.message!=="cancelled"&&s.logInfo("Selection cancelled",a?.message);}break}default:s.logInfo("Invalid action","Use /notify to view available options");}}function xm(s,e){let n={...Di(s.userConfig),...e},r={...s.userConfig,completionAlerts:n};s.updateConfig(r),Ae(r);}Gt();async function Uv(s,e){let t=Vo(s.workspacePath),n=await t.getStats();if(!e)try{e=await s.promptSelect("\u4EE3\u7801\u7D22\u5F15\u7BA1\u7406",[{label:n.hasIndex?"\u{1F4CA} \u67E5\u770B\u7D22\u5F15\u72B6\u6001":"\u{1F4CA} \u7D22\u5F15\u72B6\u6001 (\u672A\u6784\u5EFA)",value:"status",description:n.hasIndex?`${n.fileCount} \u4E2A\u6587\u4EF6, ${n.symbolCount} \u4E2A\u7B26\u53F7`:"\u5C1A\u672A\u6784\u5EFA\u7D22\u5F15"},{label:"\u{1F528} \u6784\u5EFA\u7D22\u5F15",value:"build",description:"\u89E3\u6790\u9879\u76EE\u4EE3\u7801\uFF0C\u63D0\u53D6\u51FD\u6570/\u7C7B/\u63A5\u53E3\u7B49\u7B26\u53F7"},{label:"\u{1F504} \u91CD\u5EFA\u7D22\u5F15",value:"rebuild",description:"\u5F3A\u5236\u91CD\u65B0\u6784\u5EFA\u7D22\u5F15 (\u5FFD\u7565\u7F13\u5B58)"},{label:"\u{1F5D1}\uFE0F \u6E05\u9664\u7D22\u5F15",value:"clear",description:"\u5220\u9664\u6240\u6709\u7D22\u5F15\u6587\u4EF6"},{label:"\u2699\uFE0F \u914D\u7F6E\u7D22\u5F15",value:"config",description:"\u8BBE\u7F6E\u7D22\u5F15\u8BED\u8A00\u3001\u6392\u9664\u8DEF\u5F84\u7B49"}],"status","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4");}catch(r){r?.message!=="cancelled"&&s.logInfo("\u7D22\u5F15\u64CD\u4F5C\u5931\u8D25",r?.message);return}switch(e){case "status":await gM(s,t);break;case "build":await Fv(s,t,false);break;case "rebuild":await Fv(s,t,true);break;case "clear":await hM(s,t);break;case "config":await fM(s);break;default:s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /index \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}async function gM(s,e){let t=await e.getStats(),n=[];if(!t.hasIndex)n.push(x.warning("\u72B6\u6001: \u672A\u6784\u5EFA")),n.push(""),n.push(x.dim("\u8FD0\u884C /index build \u6784\u5EFA\u7D22\u5F15"));else {n.push(x.success("\u72B6\u6001: \u5DF2\u6784\u5EFA \u2713")),n.push(`\u6587\u4EF6\u6570: ${t.fileCount}`),n.push(`\u7B26\u53F7\u6570: ${t.symbolCount}`);let r=(t.size/1024).toFixed(1),o=(t.size/(1024*1024)).toFixed(2),i=t.size>1024*1024?`${o}MB`:`${r}KB`;n.push(`\u7D22\u5F15\u5927\u5C0F: ${i}`),t.lastUpdated&&n.push(`\u6700\u540E\u66F4\u65B0: ${t.lastUpdated.toLocaleString()}`);}s.logInfo("\u{1F4CA} \u4EE3\u7801\u7D22\u5F15\u72B6\u6001",n.join(`
3539
3539
  `));}async function Fv(s,e,t){s.logInfo(t?"\u{1F504} \u6B63\u5728\u91CD\u5EFA\u7D22\u5F15...":"\u{1F528} \u6B63\u5728\u6784\u5EFA\u7D22\u5F15...");let n=Date.now(),r=await e.buildIndex({force:t,onProgress:(c,u,d)=>{}}),o=((Date.now()-n)/1e3).toFixed(2),i=[];if(i.push(`\u6587\u4EF6\u6570: ${r.filesIndexed}`),i.push(`\u7B26\u53F7\u6570: ${r.symbolsFound}`),i.push(`\u8017\u65F6: ${o}s`),r.errors.length>0){i.push(""),i.push(x.warning("\u9519\u8BEF:"));for(let c of r.errors.slice(0,3))i.push(x.dim(` ${c.file}: ${c.error}`));r.errors.length>3&&i.push(x.dim(` ... \u8FD8\u6709 ${r.errors.length-3} \u4E2A\u9519\u8BEF`));}let a=r.success?x.success("\u2713 \u7D22\u5F15\u6784\u5EFA\u5B8C\u6210"):x.warning("\u26A0\uFE0F \u7D22\u5F15\u6784\u5EFA\u5B8C\u6210 (\u6709\u9519\u8BEF)");s.logInfo(a,i.join(`
3540
- `));let l={...s.userConfig,smartRead:{...s.userConfig.smartRead,enabled:true}};s.updateConfig(l),Ae(l);}async function gM(s,e){if(!(await e.getStats()).hasIndex){s.logInfo("\u7D22\u5F15\u4E0D\u5B58\u5728","\u65E0\u9700\u6E05\u9664");return}try{if(await s.promptSelect("\u26A0\uFE0F \u786E\u5B9A\u8981\u6E05\u9664\u6240\u6709\u7D22\u5F15\u6587\u4EF6\u5417?",[{label:"\u53D6\u6D88",value:"no",description:"\u4FDD\u7559\u7D22\u5F15\u6587\u4EF6"},{label:"\u786E\u5B9A\u6E05\u9664",value:"yes",description:"\u5220\u9664\u6240\u6709\u7D22\u5F15\u6587\u4EF6"}],"no","\u6309 \u2191\u2193 \u9009\u62E9")!=="yes"){s.logInfo("\u64CD\u4F5C\u5DF2\u53D6\u6D88");return}await e.clear(),s.logInfo(x.success("\u2713 \u7D22\u5F15\u5DF2\u6E05\u9664"));}catch(n){n?.message!=="cancelled"&&s.logInfo("\u6E05\u9664\u5931\u8D25",n?.message);}}async function hM(s){let e=s.userConfig.smartRead||{enabled:true},t=[{label:"Web \u5F00\u53D1 (TS + JS)",value:"web",languages:["typescript","javascript"]},{label:"Full Stack (TS + JS + Python)",value:"fullstack",languages:["typescript","javascript","python"]},{label:"\u5168\u90E8\u8BED\u8A00",value:"all",languages:["typescript","javascript","python","java","go","rust"]},{label:"\u4EC5 TypeScript",value:"ts",languages:["typescript"]},{label:"\u4EC5 Python",value:"python",languages:["python"]},{label:"\u4EC5 Go",value:"go",languages:["go"]}];try{let n=await s.promptSelect("\u9009\u62E9\u8981\u7D22\u5F15\u7684\u8BED\u8A00",t.map(i=>({label:i.label,value:i.value,description:i.languages.join(", ")})),"fullstack","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4"),r=t.find(i=>i.value===n);if(!r){s.logInfo("\u914D\u7F6E\u5DF2\u53D6\u6D88");return}let o={...s.userConfig,smartRead:{...e,enabled:!0,languages:r.languages}};s.updateConfig(o),Ae(o),s.logInfo(x.success("\u2713 \u914D\u7F6E\u5DF2\u4FDD\u5B58"),`\u8BED\u8A00: ${r.languages.join(", ")}
3541
- \u8FD0\u884C /index rebuild \u4EE5\u5E94\u7528\u65B0\u914D\u7F6E`);}catch(n){n?.message!=="cancelled"&&s.logInfo("\u914D\u7F6E\u5931\u8D25",n?.message);}}function fM(s){if(s===0)return {systemTokens:0,toolTokens:0,messageTokens:0};let e=Math.floor(s*.125),t=Math.floor(s*.25),n=s-e-t;return {systemTokens:e,toolTokens:t,messageTokens:Math.max(0,n)}}function yM(s){return {compressionMode:s.context?.compressionMode??"sync",thresholdPercent:s.context?.thresholdPercent??85}}async function $n(s,e){let t=yM(s.userConfig);if(!e)try{e=await s.promptSelect("\u4E0A\u4E0B\u6587\u7BA1\u7406",[{label:"\u25CF \u67E5\u770B\u8BE6\u7EC6\u72B6\u6001",value:"show",description:"\u663E\u793A context \u4F7F\u7528\u60C5\u51B5\u548C\u5206\u7C7B\u5360\u6BD4"},{label:"\u25CF \u8BBE\u7F6E\u538B\u7F29\u9608\u503C",value:"threshold",description:`\u5F53\u524D: ${t.thresholdPercent}% - \u89E6\u53D1\u538B\u7F29\u7684 token \u4F7F\u7528\u7387`},{label:"\u25CF \u5207\u6362\u538B\u7F29\u6A21\u5F0F",value:"mode",description:t.compressionMode==="sync"?"\u5F53\u524D: \u540C\u6B65LLM\u538B\u7F29":"\u5F53\u524D: \u5F02\u6B65LLM\u538B\u7F29"}],"show","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(n){n?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",n?.message);return}switch(e){case "show":await bM(s,t);break;case "threshold":await CM(s,t);break;case "mode":await vM(s,t);break;default:s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /context \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}async function bM(s,e){if(s.uiController&&"showContextMenu"in s.uiController){await s.uiController.showContextMenu(),await $n(s);return}let t=i=>i>=1e3?`${(i/1e3).toFixed(1)}k`:i.toString(),n=[];n.push("\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E"),n.push("\u2502 Context Window Details \u2502"),n.push("\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"),n.push("");let r=false;if(s.memoryPressure){let i=s.memoryPressure.getSnapshot();if(i&&i.profile&&i.pressure!==void 0){r=true;let{profile:a,tokensUsed:l,pressure:c}=i,u=Math.round(c*100),d=a.contextWindow||0,m=d-l,g=Math.floor(d*(e.thresholdPercent/100)),h=Math.max(0,g-l);n.push(`Total: ${t(l)} / ${t(d)} tokens (${u}%)`),n.push(`Remaining: ${t(m)} tokens`),n.push("");let f=e.compressionMode==="sync"?"Sync LLM":"Async LLM";n.push(`Compression: ${f} (${e.thresholdPercent}% threshold)`),n.push(""),h>0?n.push(`Compaction in: ${t(h)} tokens`):n.push("\u26A0\uFE0F Compaction threshold reached!"),n.push("");let v=fM(l);if(v.systemTokens>0||v.toolTokens>0||v.messageTokens>0){n.push("Context Breakdown:"),n.push("");let b=l>0?Math.round(v.systemTokens/l*100):0,C=l>0?Math.round(v.toolTokens/l*100):0,T=l>0?Math.round(v.messageTokens/l*100):0;n.push(` \u25A0 System: ${t(v.systemTokens)} (${b}%)`),n.push(` \u25A0 Tools: ${t(v.toolTokens)} (${C}%)`),n.push(` \u25A0 Messages: ${t(v.messageTokens)} (${T}%)`),n.push("");}}}if(!r){n.push("Total: 0 / -- tokens (0%)"),n.push("Remaining: -- tokens"),n.push("");let i=e.compressionMode==="sync"?"Sync LLM":"Async LLM";n.push(`Compression: ${i} (${e.thresholdPercent}% threshold)`),n.push(""),n.push("\u{1F4A1} Send a message to see context usage details"),n.push("");}let o=n.join(`
3542
- `);s.logInfo("Context Details",o);try{await s.promptSelect("",[{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355"}],"back","\u6309 Enter \u8FD4\u56DE")==="back"&&await $n(s);}catch{}}async function vM(s,e){try{let t=await s.promptSelect("\u9009\u62E9\u538B\u7F29\u6A21\u5F0F",[{label:"\u25B8 \u540C\u6B65LLM\u538B\u7F29 (\u63A8\u8350)",value:"sync",description:"\u963B\u585E\u5F0FLLM\u538B\u7F29\uFF0C\u538B\u7F29\u65F6\u6682\u505C\u5BF9\u8BDD"},{label:"\u25B8 \u5F02\u6B65LLM\u538B\u7F29",value:"async",description:"\u540E\u53F0LLM\u538B\u7F29\uFF0C\u538B\u7F29\u65F6\u53EF\u7EE7\u7EED\u5BF9\u8BDD"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator",description:""},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355"}],e.compressionMode,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CESC \u53D6\u6D88");if(t==="back"){await $n(s);return}if(t==="separator"){await $n(s);return}if(t===e.compressionMode)s.logInfo("\u538B\u7F29\u6A21\u5F0F\u672A\u6539\u53D8");else {let n={...s.userConfig,context:{...e,compressionMode:t}};s.updateConfig(n),Ae(n),s.runner&&s.runner.setCompressionMode(t),s.uiController&&"setCompressionMode"in s.uiController&&s.uiController.setCompressionMode(t),s.updateCompressionMode&&s.updateCompressionMode(t),s.logInfo(`\u2713 \u538B\u7F29\u6A21\u5F0F\u5DF2\u5207\u6362\u4E3A: ${t==="sync"?"\u540C\u6B65LLM\u538B\u7F29":"\u5F02\u6B65LLM\u538B\u7F29"}`);}await $n(s);}catch(t){t?.message!=="cancelled"&&s.logInfo("\u5207\u6362\u5931\u8D25",t?.message);}}async function CM(s,e){try{let t=await s.promptSelect("\u9009\u62E9\u89E6\u53D1\u538B\u7F29\u7684\u9608\u503C",[{label:"20% (\u6D4B\u8BD5)",value:"20",description:"\u6D4B\u8BD5\u81EA\u52A8\u538B\u7F29\u529F\u80FD"},{label:"70%",value:"70",description:"\u8F83\u65E9\u89E6\u53D1\uFF0C\u66F4\u79EF\u6781\u7684\u538B\u7F29"},{label:"80%",value:"80",description:"\u5E73\u8861\u9009\u62E9"},{label:"85% (\u9ED8\u8BA4)",value:"85",description:"\u63A8\u8350\u8BBE\u7F6E"},{label:"90%",value:"90",description:"\u5EF6\u8FDF\u89E6\u53D1\uFF0C\u4FDD\u7559\u66F4\u591A\u4E0A\u4E0B\u6587"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator",description:""},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355"}],String(e.thresholdPercent),"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CESC \u53D6\u6D88");if(t==="back"){await $n(s);return}if(t==="separator"){await $n(s);return}let n=parseInt(t,10);if(n===e.thresholdPercent)s.logInfo("\u9608\u503C\u672A\u6539\u53D8");else {let r={...s.userConfig,context:{...e,thresholdPercent:n}};s.updateConfig(r),Ae(r),s.uiController&&"setCompactionThreshold"in s.uiController&&s.uiController.setCompactionThreshold(n),s.updateCompactionThreshold&&s.updateCompactionThreshold(n),s.logInfo(`\u2713 \u538B\u7F29\u9608\u503C\u5DF2\u8BBE\u7F6E\u4E3A: ${n}%`);}await $n(s);}catch(t){t?.message!=="cancelled"&&s.logInfo("\u8BBE\u7F6E\u5931\u8D25",t?.message);}}Gt();yn();ul();function ot(s){return s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString()}function Tm(s,e){s.outputLines?s.outputLines(e):e.forEach(t=>R(t));}function Wv(s){let e=new Date(s),n=new Date().getTime()-s;return n<6e4?"\u521A\u521A":n<36e5?`${Math.floor(n/6e4)} \u5206\u949F\u524D`:n<864e5?`${Math.floor(n/36e5)} \u5C0F\u65F6\u524D`:n<6048e5?`${Math.floor(n/864e5)} \u5929\u524D`:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}async function jv(s){try{s.clearOutputLines&&s.clearOutputLines();let e=await on.getSummary();if(e.totalRequests===0){s.logInfo("\u6682\u65E0\u4F7F\u7528\u8BB0\u5F55");return}let t=[];if(t.push(""),t.push(x.highlight("\u{1F4CA} Token \u4F7F\u7528\u7EDF\u8BA1\u603B\u89C8")),t.push(""),t.push(x.primary(" \u603B\u8BF7\u6C42\u6570: ")+x.success(ot(e.totalRequests)+" \u6B21")),t.push(x.primary(" \u603B Tokens: ")+x.success(ot(e.totalTokens))),t.push(x.primary(" Input: ")+x.dim(ot(e.totalInputTokens))),t.push(x.primary(" Output: ")+x.dim(ot(e.totalOutputTokens))),e.totalCachedTokens>0){t.push(""),t.push(x.highlight(" \u7F13\u5B58\u7EDF\u8BA1:"));let r=(e.cacheHitRate*100).toFixed(1);t.push(x.primary(" \u603B\u7F13\u5B58\u547D\u4E2D: ")+x.success(ot(e.totalCachedTokens))+x.dim(` (${r}% \u547D\u4E2D\u7387)`)),e.totalOpenaiCachedTokens>0&&t.push(x.primary(" OpenAI \u7F13\u5B58: ")+x.dim(ot(e.totalOpenaiCachedTokens))+x.success(" (50% \u8282\u7701)")),e.totalAnthropicCacheReadTokens>0&&t.push(x.primary(" Claude Read: ")+x.dim(ot(e.totalAnthropicCacheReadTokens))+x.success(" (90% \u8282\u7701)")),e.totalAnthropicCacheCreationTokens>0&&t.push(x.primary(" Claude Write: ")+x.dim(ot(e.totalAnthropicCacheCreationTokens))+x.warning(" (+25% \u6210\u672C)"));}t.push(""),t.push(x.primary(" Provider \u6570: ")+x.dim(e.providerCount.toString())),t.push(x.primary(" \u6700\u540E\u8BF7\u6C42: ")+x.dim(Wv(e.lastRequestTime))),t.push(""),Tm(s,t);let n=await s.promptSelect("\u7EE7\u7EED\u67E5\u770B",[{label:"\u25CF Provider \u7EDF\u8BA1",value:"providers",description:"\u67E5\u770B\u5404\u4E2A Provider \u7684\u8BE6\u7EC6\u7EDF\u8BA1"},{label:"\u25CF \u8BE6\u7EC6\u8BB0\u5F55",value:"records",description:"\u67E5\u770B\u6307\u5B9A Provider \u7684\u8BF7\u6C42\u8BB0\u5F55"},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E3B\u83DC\u5355"}],"back","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");if(n==="back"){s.clearOutputLines&&s.clearOutputLines(),await oo(s);return}n==="providers"?await Pc(s):n==="records"&&await $i(s);}catch(e){s.clearOutputLines&&s.clearOutputLines(),e.message!=="cancelled"&&e.message!=="User cancelled"&&R(x.error("\u52A0\u8F7D\u7EDF\u8BA1\u5931\u8D25: "+e.message));}}function xM(s){let e=[];e.push(x.success("\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")),e.push(x.primary(`${s.provider}`)+x.dim(` (${s.totalRequests} \u6B21\u8BF7\u6C42)`)),e.push(""),e.push(x.dim("Input: ")+x.primary(ot(s.totalInputTokens).padEnd(8))+x.dim("Output: ")+x.success(ot(s.totalOutputTokens).padEnd(8))+x.dim("Total: ")+x.warning(ot(s.totalTokens))),s.totalCachedTokens>0&&(e.push(""),s.totalOpenaiCachedTokens>0&&e.push(x.dim("OpenAI \u7F13\u5B58: ")+x.code(ot(s.totalOpenaiCachedTokens))+x.success(" (50% \u8282\u7701)")),s.totalAnthropicCacheReadTokens>0&&e.push(x.dim("Claude Read: ")+x.info(ot(s.totalAnthropicCacheReadTokens))+x.success(" (90% \u8282\u7701)")),s.totalAnthropicCacheCreationTokens>0&&e.push(x.dim("Claude Write: ")+x.code(ot(s.totalAnthropicCacheCreationTokens))+x.warning(" (+25% \u6210\u672C)")));let t=s.totalRequests>0?(s.successRequests/s.totalRequests*100).toFixed(1):"0";e.push(""),e.push(x.dim("\u6210\u529F\u7387: ")+x.success(t+"%")+x.dim(" \u5E73\u5747\u8017\u65F6: ")+x.warning(s.avgDuration+"ms"));let n=Object.entries(s.models);if(n.length>0){e.push(""),e.push(x.dim("\u6A21\u578B\u5206\u5E03:"));for(let[r,o]of n.slice(0,3)){let i=r.length>30?r.slice(0,27)+"...":r;e.push(x.dim(` ${i.padEnd(30)} `)+x.primary(ot(o.totalTokens).padEnd(8))+x.dim(` (${o.requests} \u6B21)`));}n.length>3&&e.push(x.dim(` ... \u8FD8\u6709 ${n.length-3} \u4E2A\u6A21\u578B`));}return e.push(""),e}async function Pc(s){try{let e=await on.getProviderStats();if(e.length===0){s.logInfo("\u6682\u65E0 Provider \u7EDF\u8BA1");return}let t=2,n=Math.ceil(e.length/t),r=0;for(;;){s.clearOutputLines&&s.clearOutputLines();let o=r*t,i=Math.min(o+t,e.length),a=e.slice(o,i),l=[];l.push(""),l.push(x.highlight("\u{1F4C8} Provider \u7EDF\u8BA1")+x.dim(` (\u7B2C ${r+1}/${n} \u9875)`)),l.push("");for(let d of a)l.push(...xM(d));l.push(x.success("\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")),l.push(""),Tm(s,l);let c=[];r>0&&c.push({label:"\u2190 \u4E0A\u4E00\u9875",value:"prev",description:`\u67E5\u770B\u7B2C ${r} \u9875`}),r<n-1&&c.push({label:"\u2192 \u4E0B\u4E00\u9875",value:"next",description:`\u67E5\u770B\u7B2C ${r+2} \u9875`}),c.push({label:"\u25CF \u8BE6\u7EC6\u8BB0\u5F55",value:"records",description:"\u67E5\u770B\u6307\u5B9A Provider \u7684\u8BF7\u6C42\u8BB0\u5F55"}),c.push({label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E3B\u83DC\u5355"});let u=await s.promptSelect("\u7EE7\u7EED\u67E5\u770B",c,"back","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");if(u==="prev"){r--;continue}else if(u==="next"){r++;continue}if(u==="back"){s.clearOutputLines&&s.clearOutputLines(),await oo(s);return}if(u==="records"){await $i(s);return}}}catch(e){s.clearOutputLines&&s.clearOutputLines(),e.message!=="cancelled"&&e.message!=="User cancelled"&&R(x.error("\u52A0\u8F7D Provider \u7EDF\u8BA1\u5931\u8D25: "+e.message));}}async function $i(s){try{s.clearOutputLines&&s.clearOutputLines();let e=await on.getProviderStats();if(e.length===0){s.logInfo("\u6682\u65E0 Provider \u7EDF\u8BA1");return}let t=e.map(i=>({label:i.provider,value:i.provider,description:`${i.totalRequests} \u6B21\u8BF7\u6C42, ${ot(i.totalTokens)} tokens`}));t.push({label:"\u2190 \u8FD4\u56DE",value:"__back__",description:"\u8FD4\u56DE\u4E3B\u83DC\u5355"});let n=await s.promptSelect("\u9009\u62E9 Provider \u67E5\u770B\u8BE6\u7EC6\u8BB0\u5F55",t,e[0].provider,"\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");if(n==="__back__"){s.clearOutputLines&&s.clearOutputLines(),await oo(s);return}s.clearOutputLines&&s.clearOutputLines();let r=await on.getProviderRecords(n,50);if(r.length===0){s.logInfo("\u8BE5 Provider \u6682\u65E0\u8BB0\u5F55");return}let o=[];o.push(""),o.push(x.highlight(`\u{1F4DD} ${n} - \u6700\u8FD1 ${r.length} \u6761\u8BB0\u5F55`)),o.push(""),o.push(x.dim(" \u7C7B\u578B ")+x.dim("\u6A21\u578B ")+x.dim("Input ")+x.dim("Output ")+x.dim("Cache ")+x.dim("\u8017\u65F6 ")+x.dim("\u72B6\u6001 ")+x.dim("\u65F6\u95F4")),o.push(x.dim(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));for(let i of r){let a=i.requestType==="health-check"?"\u6D4B\u8BD5":"\u5BF9\u8BDD",l=i.model.length>14?i.model.slice(0,11)+"...":i.model,c=ot(i.inputTokens).padEnd(7),u=ot(i.outputTokens).padEnd(7),d=i.cachedTokens?ot(i.cachedTokens).padEnd(7):"-".padEnd(7),m=(i.duration+"ms").padEnd(7),g=i.success?x.success("\u2713"):x.error("\u2717"),h=Wv(i.timestamp);o.push(x.dim(" "+a.padEnd(8))+x.primary(l.padEnd(16))+x.dim(c)+x.success(u)+x.code(d)+x.warning(m)+g+" "+x.dim(h));}o.push(""),Tm(s,o);try{let i=await s.promptSelect("\u7EE7\u7EED\u67E5\u770B",[{label:"\u2190 \u8FD4\u56DE\u4E3B\u83DC\u5355",value:"back",description:"\u8FD4\u56DE\u7EDF\u8BA1\u4E3B\u83DC\u5355"},{label:"\u25CF Provider \u7EDF\u8BA1",value:"providers",description:"\u8FD4\u56DE Provider \u7EDF\u8BA1\u5217\u8868"},{label:"\u25CF \u67E5\u770B\u5176\u4ED6 Provider",value:"other",description:"\u67E5\u770B\u5176\u4ED6 Provider \u7684\u8BE6\u7EC6\u8BB0\u5F55"}],"back","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");s.clearOutputLines&&s.clearOutputLines(),i==="other"?await $i(s):i==="providers"?await Pc(s):i==="back"&&await oo(s);}catch{s.clearOutputLines&&s.clearOutputLines();}}catch(e){e.message==="cancelled"||e.message==="User cancelled"?s.clearOutputLines&&s.clearOutputLines():s.logInfo("\u52A0\u8F7D\u8BE6\u7EC6\u8BB0\u5F55\u5931\u8D25",e.message);}}async function Gv(s){try{let e=await on.getProviderStats(),t=[{label:"\u6E05\u9664\u6240\u6709\u7EDF\u8BA1",value:"all",description:"\u26A0\uFE0F \u6E05\u9664\u6240\u6709 Provider \u7684\u7EDF\u8BA1\u6570\u636E"}];if(e.length>0)for(let r of e)t.push({label:`\u6E05\u9664 ${r.provider}`,value:r.provider,description:`\u6E05\u9664\u8BE5 Provider \u7684 ${r.totalRequests} \u6761\u8BB0\u5F55`});t.push({label:"\u53D6\u6D88",value:"cancel",description:"\u8FD4\u56DE\u4E0A\u4E00\u7EA7"});let n=await s.promptSelect("\u6E05\u9664\u7EDF\u8BA1\u6570\u636E",t,"cancel","\u26A0\uFE0F \u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D");if(n==="cancel")return;n==="all"?(await on.clearAll(),s.logInfo("\u5DF2\u6E05\u9664\u6240\u6709\u7EDF\u8BA1\u6570\u636E")):(await on.clearProvider(n),s.logInfo(`\u5DF2\u6E05\u9664 ${n} \u7684\u7EDF\u8BA1\u6570\u636E`));}catch(e){R(x.error("\u6E05\u9664\u7EDF\u8BA1\u5931\u8D25: "+e.message));}}async function oo(s,e){if(e)switch(e){case "summary":await jv(s);return;case "providers":await Pc(s);return;case "records":await $i(s);return;case "clear":await Gv(s);return;default:R(x.error(`\u672A\u77E5\u64CD\u4F5C: ${e}`)),R(x.dim("\u53EF\u7528\u64CD\u4F5C: summary, providers, records, clear"));return}try{let t=await s.promptSelect("Token \u4F7F\u7528\u7EDF\u8BA1",[{label:"\u25CF \u67E5\u770B\u603B\u89C8",value:"summary",description:"\u663E\u793A\u6574\u4F53 Token \u4F7F\u7528\u7EDF\u8BA1"},{label:"\u25CF Provider \u7EDF\u8BA1",value:"providers",description:"\u67E5\u770B\u5404\u4E2A Provider \u7684\u8BE6\u7EC6\u7EDF\u8BA1"},{label:"\u25CF \u8BE6\u7EC6\u8BB0\u5F55",value:"records",description:"\u67E5\u770B\u6307\u5B9A Provider \u7684\u8BF7\u6C42\u8BB0\u5F55"},{label:"\u25CF \u6E05\u9664\u7EDF\u8BA1",value:"clear",description:"\u6E05\u9664\u7EDF\u8BA1\u6570\u636E"},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E00\u7EA7"}],"summary","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u9000\u51FA");if(t==="back")return;switch(t){case "summary":await jv(s);break;case "providers":await Pc(s);break;case "records":await $i(s);break;case "clear":await Gv(s);break}}catch(t){t.message!=="User cancelled"&&t.message!=="cancelled"&&R(x.error("\u7EDF\u8BA1\u547D\u4EE4\u5931\u8D25: "+t.message));}}Gt();yn();async function Hv(s,e){let t=e?.toLowerCase();if(!t)try{t=await s.promptSelect("\u8BB0\u5FC6\u7CFB\u7EDF",[{label:"\u25CF \u67E5\u770B\u8BB0\u5FC6\u7EDF\u8BA1",value:"show",description:"\u77ED\u671F/\u4E2D\u671F/\u957F\u671F/\u6C38\u4E45 \u6761\u6570\u4E0E\u5927\u5C0F"},{label:"\u25CF \u67E5\u770B\u8DEF\u5F84",value:"paths",description:"\u663E\u793A\u8BB0\u5FC6\u6587\u4EF6\u8DEF\u5F84"},{label:"\u25CF \u914D\u7F6E\u6458\u8981\u6A21\u578B",value:"config",description:"\u5F00\u5173\u8BB0\u5FC6\u6458\u8981\u4E0E\u9009\u62E9\u6A21\u578B"},{label:"\u25CF \u8C03\u8BD5\u6CE8\u5165\u5185\u5BB9",value:"debug",description:"\u663E\u793A\u5F53\u524D\u4F1A\u6CE8\u5165\u7684\u8BB0\u5FC6\u6458\u8981"}],"show","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(n){n?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",n?.message);return}switch(t){case "show":case "stats":await SM(s);break;case "paths":await _M(s);break;case "config":case "configure":await TM(s);break;case "debug":await IM(s);break;default:s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /memory \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}async function TM(s){let e=s.userConfig.memory??{},t=e.summarizerEnabled??true,n=e.summarizerModel??"",r=e.summarizerProviderId??"",o;try{o=await s.promptSelect("\u8BB0\u5FC6\u6458\u8981\u8BBE\u7F6E",[{label:`\u25CF \u6458\u8981\u5F00\u5173: ${t?"\u5F00\u542F":"\u5173\u95ED"}`,value:"toggle",description:"\u63A7\u5236\u81EA\u52A8\u8BB0\u5FC6\u6458\u8981"},{label:`\u25CF \u6458\u8981\u6A21\u578B: ${n||"\u9ED8\u8BA4"}`,value:"model",description:"\u9009\u62E9\u6458\u8981\u6A21\u578B\uFF08\u5982 haiku/gpt\uFF09"},{label:`\u25CF \u6458\u8981 Provider: ${r||"\u81EA\u52A8"}`,value:"provider",description:"\u6307\u5B9A\u6458\u8981\u4F7F\u7528\u7684 Provider\uFF08\u53EF\u9009\uFF09"},{label:"\u25CF \u8FD4\u56DE",value:"back"}],"toggle","Enter \u9009\u62E9\uFF0CESC \u53D6\u6D88");}catch(i){i?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",i?.message);return}if(o!=="back"){if(o==="toggle"){let i=await s.promptSelect("\u662F\u5426\u542F\u7528\u8BB0\u5FC6\u6458\u8981",[{label:"\u5F00\u542F",value:"on"},{label:"\u5173\u95ED",value:"off"}],t?"on":"off");Bi(s,{summarizerEnabled:i==="on"}),s.logInfo("\u8BB0\u5FC6\u6458\u8981\u5DF2\u66F4\u65B0",i==="on"?"\u5DF2\u5F00\u542F":"\u5DF2\u5173\u95ED");return}if(o==="model"){let i;try{i=await wM(s,n);}catch(c){c?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",c?.message);return}let{model:a,existsInConfig:l}=i;if(a==="__cancel__")return;if(a==="__default__"){Bi(s,{summarizerModel:void 0}),s.logInfo("\u6458\u8981\u6A21\u578B\u5DF2\u66F4\u65B0","\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B");return}if(Bi(s,{summarizerModel:a}),!l){s.logInfo("\u6458\u8981\u6A21\u578B\u5DF2\u8BBE\u7F6E",`\u6A21\u578B "${a}" \u672A\u5728 provider \u914D\u7F6E\u4E2D\u627E\u5230\uFF0C\u53EF\u80FD\u65E0\u6CD5\u751F\u6548`);return}s.logInfo("\u6458\u8981\u6A21\u578B\u5DF2\u8BBE\u7F6E",a);return}if(o==="provider"){let i;try{i=await kM(s,r);}catch(a){a?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",a?.message);return}if(!i)return;if(i==="__auto__"){Bi(s,{summarizerProviderId:void 0}),s.logInfo("\u6458\u8981 Provider \u5DF2\u66F4\u65B0","\u81EA\u52A8\u9009\u62E9");return}Bi(s,{summarizerProviderId:i}),s.logInfo("\u6458\u8981 Provider \u5DF2\u8BBE\u7F6E",i);}}}async function wM(s,e){let t=new ze(s.userConfig),n=new Set;for(let l of t.getProviders())for(let c of l.models??[])c?.name&&n.add(c.name);let r=["claude-haiku-4-5-20251001","claude-haiku","gpt-4o-mini","gpt-4.1-mini","gpt-4o","gemini-1.5-flash","gemini-2.0-flash"],o=Array.from(new Set([...r,...n])),i=[{label:"\u9ED8\u8BA4\uFF08\u81EA\u52A8\u9009\u62E9\uFF09",value:"__default__",description:"\u4F7F\u7528\u9ED8\u8BA4\u6458\u8981\u6A21\u578B"},...o.map(l=>({label:l,value:l,description:n.has(l)?void 0:"\u672A\u5728 provider \u914D\u7F6E\u4E2D\u627E\u5230"})),{label:"\u81EA\u5B9A\u4E49\u6A21\u578B",value:"__custom__",description:"\u8F93\u5165\u81EA\u5B9A\u4E49\u6A21\u578B\u540D\u79F0"}],a=await s.promptSelect("\u9009\u62E9\u6458\u8981\u6A21\u578B",i,e||"__default__");if(a==="__custom__"){let c=(await s.promptText("\u8F93\u5165\u6A21\u578B\u540D\u79F0",{allowEmpty:false})).trim();return {model:c||"__cancel__",existsInConfig:n.has(c)}}return {model:a||"__cancel__",existsInConfig:n.has(a)}}async function kM(s,e){let n=new ze(s.userConfig).getProviders();if(n.length===0)return s.logInfo("\u672A\u914D\u7F6E Provider","\u8BF7\u5148\u901A\u8FC7 /provider \u6DFB\u52A0"),null;let r=[{label:"\u81EA\u52A8\u9009\u62E9",value:"__auto__",description:"\u6839\u636E\u6A21\u578B\u81EA\u52A8\u5339\u914D"},...n.map(i=>({label:i.id,value:i.id,description:i.name}))];return await s.promptSelect("\u9009\u62E9\u6458\u8981 Provider",r,e||"__auto__")}function Bi(s,e){let t={...s.userConfig.memory??{}};"summarizerEnabled"in e&&(t.summarizerEnabled=e.summarizerEnabled),"summarizerModel"in e&&(e.summarizerModel?t.summarizerModel=e.summarizerModel:delete t.summarizerModel),"summarizerProviderId"in e&&(e.summarizerProviderId?t.summarizerProviderId=e.summarizerProviderId:delete t.summarizerProviderId);let n={...s.userConfig,memory:t};s.updateConfig(n),Ae(n);}async function SM(s){let e=await s.actionLog.getMemoryStats(),t=EM(e);wm(s,t);}async function _M(s){let e=await s.actionLog.getMemoryStats(),t=AM(e);wm(s,t);}async function IM(s){let e=await s.actionLog.getMemoryInjectionSummary({language:s.userConfig.language??"zh",includePersistent:true,includeLastRun:true}),t=[];t.push(""),t.push(x.highlight(" \u8BB0\u5FC6\u6CE8\u5165\u9884\u89C8")),t.push(""),e?e.split(`
3543
- `).forEach(n=>{t.push(x.info(` ${n}`));}):t.push(x.dim(" (\u65E0\u53EF\u7528\u8BB0\u5FC6)")),t.push(""),wm(s,t);}function EM(s){let e=o=>o.toLocaleString("en-US"),t=o=>{if(o<1024)return `${o} B`;let i=o/1024;if(i<1024)return `${i.toFixed(1)} KB`;let a=i/1024;return a<1024?`${a.toFixed(2)} MB`:`${(a/1024).toFixed(2)} GB`},n=s.longTerm.total,r=[];return r.push(""),r.push(x.highlight(" \u8BB0\u5FC6\u7EDF\u8BA1")),r.push(""),r.push(x.dim(" \u77ED\u671F (recent): ")+x.info(`${e(s.shortTerm.count)} \u6761, ${t(s.shortTerm.sizeBytes)}`)),r.push(x.dim(" \u4E2D\u671F (session): ")+x.info(`${e(s.session.count)} \u6761, ${t(s.session.sizeBytes)}`)),r.push(x.dim(" \u957F\u671F (progress/standard/lesson): ")+x.info(`${e(n.count)} \u6761, ${t(n.sizeBytes)}`)),r.push(x.dim(" - progress: ")+x.info(`${e(s.longTerm.progress.count)} \u6761, ${t(s.longTerm.progress.sizeBytes)}`)),r.push(x.dim(" - standard: ")+x.info(`${e(s.longTerm.standard.count)} \u6761, ${t(s.longTerm.standard.sizeBytes)}`)),r.push(x.dim(" - lesson: ")+x.info(`${e(s.longTerm.lesson.count)} \u6761, ${t(s.longTerm.lesson.sizeBytes)}`)),r.push(x.dim(" \u6C38\u4E45 (pinned): ")+x.info(`${e(s.pinned.count)} \u6761, ${t(s.pinned.sizeBytes)}`)),r.push(""),r.push(x.dim(" \u603B\u8BA1: ")+x.info(`${e(s.totals.count)} \u6761, ${t(s.totals.sizeBytes)}`)),r.push(""),r}function AM(s){let e=[];return e.push(""),e.push(x.highlight(" \u8BB0\u5FC6\u8DEF\u5F84")),e.push(""),s.shortTerm.path&&e.push(x.dim(" \u77ED\u671F: ")+x.info(s.shortTerm.path)),s.session.path&&e.push(x.dim(" \u4E2D\u671F: ")+x.info(s.session.path)),s.longTerm.progress.path&&e.push(x.dim(" \u8FDB\u5EA6: ")+x.info(s.longTerm.progress.path)),s.longTerm.standard.path&&e.push(x.dim(" \u89C4\u8303: ")+x.info(s.longTerm.standard.path)),s.longTerm.lesson.path&&e.push(x.dim(" \u6559\u8BAD: ")+x.info(s.longTerm.lesson.path)),s.pinned.path&&e.push(x.dim(" \u6C38\u4E45: ")+x.info(s.pinned.path)),e.push(""),e}function wm(s,e){if(s.uiController){let t=s.uiController;if(typeof t.setCommandOutputLines=="function"){t.setCommandOutputLines(e);return}if(typeof t.printCommandOutput=="function"){for(let n of e)t.printCommandOutput(n);return}}for(let t of e)R(t);}var zv="0.0.0.0",qv=7090;async function RM(s){try{let{renderUnicodeCompact:e}=await import('uqr');return {qr:e(s,{ecc:"M",border:1})}}catch(e){return {qr:null,error:e instanceof Error?e.message:String(e)}}}async function DM(s){try{let e=await import('qrcode'),t=e.default??e;if(!t||typeof t.toFile!="function")return {filePath:null,error:"QRCode module missing or invalid."};let n=Date.now(),r=join(tmpdir(),`neox-qr-${n}.png`);await t.toFile(r,s,{type:"png",errorCorrectionLevel:"H",margin:4,scale:10,color:{dark:"#000000",light:"#FFFFFF"}});let{exec:o}=await import('child_process'),{promisify:i}=await import('util'),a=i(o),l=process.platform,c;return l==="darwin"?c=`open "${r}"`:l==="win32"?c=`start "" "${r}"`:c=`xdg-open "${r}"`,await a(c),{filePath:r}}catch(e){return {filePath:null,error:e instanceof Error?e.message:String(e)}}}function NM(s){let e=s.urls[0],t=e?new URL(e).hostname:s.host&&s.host!==zv?s.host:"127.0.0.1";return {payload:`neox://pair?${new URLSearchParams({mode:s.networkMode,host:t,port:String(s.port),token:s.token||""}).toString()}`,lanUrl:`http://${t}:${s.port}`}}function LM(s){return s.remote??{}}function Kv(s){return s==="vps"?"vps":"lan"}async function Jv(s,e){let t=s.getStatus(),n=e?.toLowerCase();if(!n)try{n=await s.promptSelect("\u8FDC\u7A0B\u8BBF\u95EE (Remote Access)",[{label:`\u25CF \u5F00\u5173: ${t.enabled?"\u5F00\u542F":"\u5173\u95ED"}`,value:"toggle",description:"\u542F\u7528\u6216\u5173\u95ED\u8FDC\u7A0B\u8BBF\u95EE"},{label:`\u25CF \u7F51\u7EDC\u6A21\u5F0F: ${t.networkMode.toUpperCase()}`,value:"network",description:"LAN \u6216 VPS \u4E2D\u8F6C"},{label:`\u25CF \u7AEF\u53E3: ${t.port}`,value:"port",description:"\u672C\u5730\u670D\u52A1\u76D1\u542C\u7AEF\u53E3"},{label:"\u25CF \u663E\u793A\u4E8C\u7EF4\u7801",value:"qr",description:"\u624B\u673A\u626B\u7801\u5FEB\u901F\u914D\u5BF9"},{label:"\u25CF \u663E\u793A\u914D\u5BF9\u4FE1\u606F",value:"pair",description:"\u67E5\u770B\u8FDE\u63A5\u5730\u5740\u4E0E Token"},{label:"\u25CF \u91CD\u65B0\u751F\u6210 Token",value:"token",description:"\u66F4\u65B0\u914D\u5BF9 Token"},{label:"\u25CF \u8FD4\u56DE",value:"back"}],"toggle","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(r){r?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",r?.message);return}if(n!=="back"){if(n==="on"||n==="off"||n==="toggle"){let r=n==="on"?true:n==="off"?false:!t.enabled;if(km(s,{enabled:r}),r){await s.startRemote();let o=s.getStatus(),i=[`\u6A21\u5F0F: ${o.networkMode.toUpperCase()}`,`\u5730\u5740: ${o.host}:${o.port}`,`Token: ${o.token||"(\u672A\u751F\u6210)"}`];if(o.urls.length>0){i.push("LAN \u5730\u5740:");for(let a of o.urls)i.push(`- ${a}`);}s.logInfo("\u8FDC\u7A0B\u8BBF\u95EE\u5DF2\u5F00\u542F",i.join(`
3540
+ `));let l={...s.userConfig,smartRead:{...s.userConfig.smartRead,enabled:true}};s.updateConfig(l),Ae(l);}async function hM(s,e){if(!(await e.getStats()).hasIndex){s.logInfo("\u7D22\u5F15\u4E0D\u5B58\u5728","\u65E0\u9700\u6E05\u9664");return}try{if(await s.promptSelect("\u26A0\uFE0F \u786E\u5B9A\u8981\u6E05\u9664\u6240\u6709\u7D22\u5F15\u6587\u4EF6\u5417?",[{label:"\u53D6\u6D88",value:"no",description:"\u4FDD\u7559\u7D22\u5F15\u6587\u4EF6"},{label:"\u786E\u5B9A\u6E05\u9664",value:"yes",description:"\u5220\u9664\u6240\u6709\u7D22\u5F15\u6587\u4EF6"}],"no","\u6309 \u2191\u2193 \u9009\u62E9")!=="yes"){s.logInfo("\u64CD\u4F5C\u5DF2\u53D6\u6D88");return}await e.clear(),s.logInfo(x.success("\u2713 \u7D22\u5F15\u5DF2\u6E05\u9664"));}catch(n){n?.message!=="cancelled"&&s.logInfo("\u6E05\u9664\u5931\u8D25",n?.message);}}async function fM(s){let e=s.userConfig.smartRead||{enabled:true},t=[{label:"Web \u5F00\u53D1 (TS + JS)",value:"web",languages:["typescript","javascript"]},{label:"Full Stack (TS + JS + Python)",value:"fullstack",languages:["typescript","javascript","python"]},{label:"\u5168\u90E8\u8BED\u8A00",value:"all",languages:["typescript","javascript","python","java","go","rust"]},{label:"\u4EC5 TypeScript",value:"ts",languages:["typescript"]},{label:"\u4EC5 Python",value:"python",languages:["python"]},{label:"\u4EC5 Go",value:"go",languages:["go"]}];try{let n=await s.promptSelect("\u9009\u62E9\u8981\u7D22\u5F15\u7684\u8BED\u8A00",t.map(i=>({label:i.label,value:i.value,description:i.languages.join(", ")})),"fullstack","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4"),r=t.find(i=>i.value===n);if(!r){s.logInfo("\u914D\u7F6E\u5DF2\u53D6\u6D88");return}let o={...s.userConfig,smartRead:{...e,enabled:!0,languages:r.languages}};s.updateConfig(o),Ae(o),s.logInfo(x.success("\u2713 \u914D\u7F6E\u5DF2\u4FDD\u5B58"),`\u8BED\u8A00: ${r.languages.join(", ")}
3541
+ \u8FD0\u884C /index rebuild \u4EE5\u5E94\u7528\u65B0\u914D\u7F6E`);}catch(n){n?.message!=="cancelled"&&s.logInfo("\u914D\u7F6E\u5931\u8D25",n?.message);}}function yM(s){if(s===0)return {systemTokens:0,toolTokens:0,messageTokens:0};let e=Math.floor(s*.125),t=Math.floor(s*.25),n=s-e-t;return {systemTokens:e,toolTokens:t,messageTokens:Math.max(0,n)}}function bM(s){return {compressionMode:s.context?.compressionMode??"sync",thresholdPercent:s.context?.thresholdPercent??85}}async function $n(s,e){let t=bM(s.userConfig);if(!e)try{e=await s.promptSelect("\u4E0A\u4E0B\u6587\u7BA1\u7406",[{label:"\u25CF \u67E5\u770B\u8BE6\u7EC6\u72B6\u6001",value:"show",description:"\u663E\u793A context \u4F7F\u7528\u60C5\u51B5\u548C\u5206\u7C7B\u5360\u6BD4"},{label:"\u25CF \u8BBE\u7F6E\u538B\u7F29\u9608\u503C",value:"threshold",description:`\u5F53\u524D: ${t.thresholdPercent}% - \u89E6\u53D1\u538B\u7F29\u7684 token \u4F7F\u7528\u7387`},{label:"\u25CF \u5207\u6362\u538B\u7F29\u6A21\u5F0F",value:"mode",description:t.compressionMode==="sync"?"\u5F53\u524D: \u540C\u6B65LLM\u538B\u7F29":"\u5F53\u524D: \u5F02\u6B65LLM\u538B\u7F29"}],"show","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(n){n?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",n?.message);return}switch(e){case "show":await vM(s,t);break;case "threshold":await xM(s,t);break;case "mode":await CM(s,t);break;default:s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /context \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}async function vM(s,e){if(s.uiController&&"showContextMenu"in s.uiController){await s.uiController.showContextMenu(),await $n(s);return}let t=i=>i>=1e3?`${(i/1e3).toFixed(1)}k`:i.toString(),n=[];n.push("\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E"),n.push("\u2502 Context Window Details \u2502"),n.push("\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F"),n.push("");let r=false;if(s.memoryPressure){let i=s.memoryPressure.getSnapshot();if(i&&i.profile&&i.pressure!==void 0){r=true;let{profile:a,tokensUsed:l,pressure:c}=i,u=Math.round(c*100),d=a.contextWindow||0,m=d-l,g=Math.floor(d*(e.thresholdPercent/100)),h=Math.max(0,g-l);n.push(`Total: ${t(l)} / ${t(d)} tokens (${u}%)`),n.push(`Remaining: ${t(m)} tokens`),n.push("");let f=e.compressionMode==="sync"?"Sync LLM":"Async LLM";n.push(`Compression: ${f} (${e.thresholdPercent}% threshold)`),n.push(""),h>0?n.push(`Compaction in: ${t(h)} tokens`):n.push("\u26A0\uFE0F Compaction threshold reached!"),n.push("");let v=yM(l);if(v.systemTokens>0||v.toolTokens>0||v.messageTokens>0){n.push("Context Breakdown:"),n.push("");let b=l>0?Math.round(v.systemTokens/l*100):0,C=l>0?Math.round(v.toolTokens/l*100):0,T=l>0?Math.round(v.messageTokens/l*100):0;n.push(` \u25A0 System: ${t(v.systemTokens)} (${b}%)`),n.push(` \u25A0 Tools: ${t(v.toolTokens)} (${C}%)`),n.push(` \u25A0 Messages: ${t(v.messageTokens)} (${T}%)`),n.push("");}}}if(!r){n.push("Total: 0 / -- tokens (0%)"),n.push("Remaining: -- tokens"),n.push("");let i=e.compressionMode==="sync"?"Sync LLM":"Async LLM";n.push(`Compression: ${i} (${e.thresholdPercent}% threshold)`),n.push(""),n.push("\u{1F4A1} Send a message to see context usage details"),n.push("");}let o=n.join(`
3542
+ `);s.logInfo("Context Details",o);try{await s.promptSelect("",[{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355"}],"back","\u6309 Enter \u8FD4\u56DE")==="back"&&await $n(s);}catch{}}async function CM(s,e){try{let t=await s.promptSelect("\u9009\u62E9\u538B\u7F29\u6A21\u5F0F",[{label:"\u25B8 \u540C\u6B65LLM\u538B\u7F29 (\u63A8\u8350)",value:"sync",description:"\u963B\u585E\u5F0FLLM\u538B\u7F29\uFF0C\u538B\u7F29\u65F6\u6682\u505C\u5BF9\u8BDD"},{label:"\u25B8 \u5F02\u6B65LLM\u538B\u7F29",value:"async",description:"\u540E\u53F0LLM\u538B\u7F29\uFF0C\u538B\u7F29\u65F6\u53EF\u7EE7\u7EED\u5BF9\u8BDD"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator",description:""},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355"}],e.compressionMode,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CESC \u53D6\u6D88");if(t==="back"){await $n(s);return}if(t==="separator"){await $n(s);return}if(t===e.compressionMode)s.logInfo("\u538B\u7F29\u6A21\u5F0F\u672A\u6539\u53D8");else {let n={...s.userConfig,context:{...e,compressionMode:t}};s.updateConfig(n),Ae(n),s.runner&&s.runner.setCompressionMode(t),s.uiController&&"setCompressionMode"in s.uiController&&s.uiController.setCompressionMode(t),s.updateCompressionMode&&s.updateCompressionMode(t),s.logInfo(`\u2713 \u538B\u7F29\u6A21\u5F0F\u5DF2\u5207\u6362\u4E3A: ${t==="sync"?"\u540C\u6B65LLM\u538B\u7F29":"\u5F02\u6B65LLM\u538B\u7F29"}`);}await $n(s);}catch(t){t?.message!=="cancelled"&&s.logInfo("\u5207\u6362\u5931\u8D25",t?.message);}}async function xM(s,e){try{let t=await s.promptSelect("\u9009\u62E9\u89E6\u53D1\u538B\u7F29\u7684\u9608\u503C",[{label:"20% (\u6D4B\u8BD5)",value:"20",description:"\u6D4B\u8BD5\u81EA\u52A8\u538B\u7F29\u529F\u80FD"},{label:"70%",value:"70",description:"\u8F83\u65E9\u89E6\u53D1\uFF0C\u66F4\u79EF\u6781\u7684\u538B\u7F29"},{label:"80%",value:"80",description:"\u5E73\u8861\u9009\u62E9"},{label:"85% (\u9ED8\u8BA4)",value:"85",description:"\u63A8\u8350\u8BBE\u7F6E"},{label:"90%",value:"90",description:"\u5EF6\u8FDF\u89E6\u53D1\uFF0C\u4FDD\u7559\u66F4\u591A\u4E0A\u4E0B\u6587"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator",description:""},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E0B\u6587\u7BA1\u7406\u83DC\u5355"}],String(e.thresholdPercent),"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CESC \u53D6\u6D88");if(t==="back"){await $n(s);return}if(t==="separator"){await $n(s);return}let n=parseInt(t,10);if(n===e.thresholdPercent)s.logInfo("\u9608\u503C\u672A\u6539\u53D8");else {let r={...s.userConfig,context:{...e,thresholdPercent:n}};s.updateConfig(r),Ae(r),s.uiController&&"setCompactionThreshold"in s.uiController&&s.uiController.setCompactionThreshold(n),s.updateCompactionThreshold&&s.updateCompactionThreshold(n),s.logInfo(`\u2713 \u538B\u7F29\u9608\u503C\u5DF2\u8BBE\u7F6E\u4E3A: ${n}%`);}await $n(s);}catch(t){t?.message!=="cancelled"&&s.logInfo("\u8BBE\u7F6E\u5931\u8D25",t?.message);}}Gt();yn();ul();function ot(s){return s>=1e6?(s/1e6).toFixed(1)+"M":s>=1e3?(s/1e3).toFixed(1)+"K":s.toString()}function Tm(s,e){s.outputLines?s.outputLines(e):e.forEach(t=>R(t));}function Wv(s){let e=new Date(s),n=new Date().getTime()-s;return n<6e4?"\u521A\u521A":n<36e5?`${Math.floor(n/6e4)} \u5206\u949F\u524D`:n<864e5?`${Math.floor(n/36e5)} \u5C0F\u65F6\u524D`:n<6048e5?`${Math.floor(n/864e5)} \u5929\u524D`:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}async function jv(s){try{s.clearOutputLines&&s.clearOutputLines();let e=await on.getSummary();if(e.totalRequests===0){s.logInfo("\u6682\u65E0\u4F7F\u7528\u8BB0\u5F55");return}let t=[];if(t.push(""),t.push(x.highlight("\u{1F4CA} Token \u4F7F\u7528\u7EDF\u8BA1\u603B\u89C8")),t.push(""),t.push(x.primary(" \u603B\u8BF7\u6C42\u6570: ")+x.success(ot(e.totalRequests)+" \u6B21")),t.push(x.primary(" \u603B Tokens: ")+x.success(ot(e.totalTokens))),t.push(x.primary(" Input: ")+x.dim(ot(e.totalInputTokens))),t.push(x.primary(" Output: ")+x.dim(ot(e.totalOutputTokens))),e.totalCachedTokens>0){t.push(""),t.push(x.highlight(" \u7F13\u5B58\u7EDF\u8BA1:"));let r=(e.cacheHitRate*100).toFixed(1);t.push(x.primary(" \u603B\u7F13\u5B58\u547D\u4E2D: ")+x.success(ot(e.totalCachedTokens))+x.dim(` (${r}% \u547D\u4E2D\u7387)`)),e.totalOpenaiCachedTokens>0&&t.push(x.primary(" OpenAI \u7F13\u5B58: ")+x.dim(ot(e.totalOpenaiCachedTokens))+x.success(" (50% \u8282\u7701)")),e.totalAnthropicCacheReadTokens>0&&t.push(x.primary(" Claude Read: ")+x.dim(ot(e.totalAnthropicCacheReadTokens))+x.success(" (90% \u8282\u7701)")),e.totalAnthropicCacheCreationTokens>0&&t.push(x.primary(" Claude Write: ")+x.dim(ot(e.totalAnthropicCacheCreationTokens))+x.warning(" (+25% \u6210\u672C)"));}t.push(""),t.push(x.primary(" Provider \u6570: ")+x.dim(e.providerCount.toString())),t.push(x.primary(" \u6700\u540E\u8BF7\u6C42: ")+x.dim(Wv(e.lastRequestTime))),t.push(""),Tm(s,t);let n=await s.promptSelect("\u7EE7\u7EED\u67E5\u770B",[{label:"\u25CF Provider \u7EDF\u8BA1",value:"providers",description:"\u67E5\u770B\u5404\u4E2A Provider \u7684\u8BE6\u7EC6\u7EDF\u8BA1"},{label:"\u25CF \u8BE6\u7EC6\u8BB0\u5F55",value:"records",description:"\u67E5\u770B\u6307\u5B9A Provider \u7684\u8BF7\u6C42\u8BB0\u5F55"},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E3B\u83DC\u5355"}],"back","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");if(n==="back"){s.clearOutputLines&&s.clearOutputLines(),await oo(s);return}n==="providers"?await Pc(s):n==="records"&&await $i(s);}catch(e){s.clearOutputLines&&s.clearOutputLines(),e.message!=="cancelled"&&e.message!=="User cancelled"&&R(x.error("\u52A0\u8F7D\u7EDF\u8BA1\u5931\u8D25: "+e.message));}}function TM(s){let e=[];e.push(x.success("\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")),e.push(x.primary(`${s.provider}`)+x.dim(` (${s.totalRequests} \u6B21\u8BF7\u6C42)`)),e.push(""),e.push(x.dim("Input: ")+x.primary(ot(s.totalInputTokens).padEnd(8))+x.dim("Output: ")+x.success(ot(s.totalOutputTokens).padEnd(8))+x.dim("Total: ")+x.warning(ot(s.totalTokens))),s.totalCachedTokens>0&&(e.push(""),s.totalOpenaiCachedTokens>0&&e.push(x.dim("OpenAI \u7F13\u5B58: ")+x.code(ot(s.totalOpenaiCachedTokens))+x.success(" (50% \u8282\u7701)")),s.totalAnthropicCacheReadTokens>0&&e.push(x.dim("Claude Read: ")+x.info(ot(s.totalAnthropicCacheReadTokens))+x.success(" (90% \u8282\u7701)")),s.totalAnthropicCacheCreationTokens>0&&e.push(x.dim("Claude Write: ")+x.code(ot(s.totalAnthropicCacheCreationTokens))+x.warning(" (+25% \u6210\u672C)")));let t=s.totalRequests>0?(s.successRequests/s.totalRequests*100).toFixed(1):"0";e.push(""),e.push(x.dim("\u6210\u529F\u7387: ")+x.success(t+"%")+x.dim(" \u5E73\u5747\u8017\u65F6: ")+x.warning(s.avgDuration+"ms"));let n=Object.entries(s.models);if(n.length>0){e.push(""),e.push(x.dim("\u6A21\u578B\u5206\u5E03:"));for(let[r,o]of n.slice(0,3)){let i=r.length>30?r.slice(0,27)+"...":r;e.push(x.dim(` ${i.padEnd(30)} `)+x.primary(ot(o.totalTokens).padEnd(8))+x.dim(` (${o.requests} \u6B21)`));}n.length>3&&e.push(x.dim(` ... \u8FD8\u6709 ${n.length-3} \u4E2A\u6A21\u578B`));}return e.push(""),e}async function Pc(s){try{let e=await on.getProviderStats();if(e.length===0){s.logInfo("\u6682\u65E0 Provider \u7EDF\u8BA1");return}let t=2,n=Math.ceil(e.length/t),r=0;for(;;){s.clearOutputLines&&s.clearOutputLines();let o=r*t,i=Math.min(o+t,e.length),a=e.slice(o,i),l=[];l.push(""),l.push(x.highlight("\u{1F4C8} Provider \u7EDF\u8BA1")+x.dim(` (\u7B2C ${r+1}/${n} \u9875)`)),l.push("");for(let d of a)l.push(...TM(d));l.push(x.success("\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")),l.push(""),Tm(s,l);let c=[];r>0&&c.push({label:"\u2190 \u4E0A\u4E00\u9875",value:"prev",description:`\u67E5\u770B\u7B2C ${r} \u9875`}),r<n-1&&c.push({label:"\u2192 \u4E0B\u4E00\u9875",value:"next",description:`\u67E5\u770B\u7B2C ${r+2} \u9875`}),c.push({label:"\u25CF \u8BE6\u7EC6\u8BB0\u5F55",value:"records",description:"\u67E5\u770B\u6307\u5B9A Provider \u7684\u8BF7\u6C42\u8BB0\u5F55"}),c.push({label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E3B\u83DC\u5355"});let u=await s.promptSelect("\u7EE7\u7EED\u67E5\u770B",c,"back","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");if(u==="prev"){r--;continue}else if(u==="next"){r++;continue}if(u==="back"){s.clearOutputLines&&s.clearOutputLines(),await oo(s);return}if(u==="records"){await $i(s);return}}}catch(e){s.clearOutputLines&&s.clearOutputLines(),e.message!=="cancelled"&&e.message!=="User cancelled"&&R(x.error("\u52A0\u8F7D Provider \u7EDF\u8BA1\u5931\u8D25: "+e.message));}}async function $i(s){try{s.clearOutputLines&&s.clearOutputLines();let e=await on.getProviderStats();if(e.length===0){s.logInfo("\u6682\u65E0 Provider \u7EDF\u8BA1");return}let t=e.map(i=>({label:i.provider,value:i.provider,description:`${i.totalRequests} \u6B21\u8BF7\u6C42, ${ot(i.totalTokens)} tokens`}));t.push({label:"\u2190 \u8FD4\u56DE",value:"__back__",description:"\u8FD4\u56DE\u4E3B\u83DC\u5355"});let n=await s.promptSelect("\u9009\u62E9 Provider \u67E5\u770B\u8BE6\u7EC6\u8BB0\u5F55",t,e[0].provider,"\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");if(n==="__back__"){s.clearOutputLines&&s.clearOutputLines(),await oo(s);return}s.clearOutputLines&&s.clearOutputLines();let r=await on.getProviderRecords(n,50);if(r.length===0){s.logInfo("\u8BE5 Provider \u6682\u65E0\u8BB0\u5F55");return}let o=[];o.push(""),o.push(x.highlight(`\u{1F4DD} ${n} - \u6700\u8FD1 ${r.length} \u6761\u8BB0\u5F55`)),o.push(""),o.push(x.dim(" \u7C7B\u578B ")+x.dim("\u6A21\u578B ")+x.dim("Input ")+x.dim("Output ")+x.dim("Cache ")+x.dim("\u8017\u65F6 ")+x.dim("\u72B6\u6001 ")+x.dim("\u65F6\u95F4")),o.push(x.dim(" \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));for(let i of r){let a=i.requestType==="health-check"?"\u6D4B\u8BD5":"\u5BF9\u8BDD",l=i.model.length>14?i.model.slice(0,11)+"...":i.model,c=ot(i.inputTokens).padEnd(7),u=ot(i.outputTokens).padEnd(7),d=i.cachedTokens?ot(i.cachedTokens).padEnd(7):"-".padEnd(7),m=(i.duration+"ms").padEnd(7),g=i.success?x.success("\u2713"):x.error("\u2717"),h=Wv(i.timestamp);o.push(x.dim(" "+a.padEnd(8))+x.primary(l.padEnd(16))+x.dim(c)+x.success(u)+x.code(d)+x.warning(m)+g+" "+x.dim(h));}o.push(""),Tm(s,o);try{let i=await s.promptSelect("\u7EE7\u7EED\u67E5\u770B",[{label:"\u2190 \u8FD4\u56DE\u4E3B\u83DC\u5355",value:"back",description:"\u8FD4\u56DE\u7EDF\u8BA1\u4E3B\u83DC\u5355"},{label:"\u25CF Provider \u7EDF\u8BA1",value:"providers",description:"\u8FD4\u56DE Provider \u7EDF\u8BA1\u5217\u8868"},{label:"\u25CF \u67E5\u770B\u5176\u4ED6 Provider",value:"other",description:"\u67E5\u770B\u5176\u4ED6 Provider \u7684\u8BE6\u7EC6\u8BB0\u5F55"}],"back","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u8FD4\u56DE");s.clearOutputLines&&s.clearOutputLines(),i==="other"?await $i(s):i==="providers"?await Pc(s):i==="back"&&await oo(s);}catch{s.clearOutputLines&&s.clearOutputLines();}}catch(e){e.message==="cancelled"||e.message==="User cancelled"?s.clearOutputLines&&s.clearOutputLines():s.logInfo("\u52A0\u8F7D\u8BE6\u7EC6\u8BB0\u5F55\u5931\u8D25",e.message);}}async function Gv(s){try{let e=await on.getProviderStats(),t=[{label:"\u6E05\u9664\u6240\u6709\u7EDF\u8BA1",value:"all",description:"\u26A0\uFE0F \u6E05\u9664\u6240\u6709 Provider \u7684\u7EDF\u8BA1\u6570\u636E"}];if(e.length>0)for(let r of e)t.push({label:`\u6E05\u9664 ${r.provider}`,value:r.provider,description:`\u6E05\u9664\u8BE5 Provider \u7684 ${r.totalRequests} \u6761\u8BB0\u5F55`});t.push({label:"\u53D6\u6D88",value:"cancel",description:"\u8FD4\u56DE\u4E0A\u4E00\u7EA7"});let n=await s.promptSelect("\u6E05\u9664\u7EDF\u8BA1\u6570\u636E",t,"cancel","\u26A0\uFE0F \u6B64\u64CD\u4F5C\u4E0D\u53EF\u6062\u590D");if(n==="cancel")return;n==="all"?(await on.clearAll(),s.logInfo("\u5DF2\u6E05\u9664\u6240\u6709\u7EDF\u8BA1\u6570\u636E")):(await on.clearProvider(n),s.logInfo(`\u5DF2\u6E05\u9664 ${n} \u7684\u7EDF\u8BA1\u6570\u636E`));}catch(e){R(x.error("\u6E05\u9664\u7EDF\u8BA1\u5931\u8D25: "+e.message));}}async function oo(s,e){if(e)switch(e){case "summary":await jv(s);return;case "providers":await Pc(s);return;case "records":await $i(s);return;case "clear":await Gv(s);return;default:R(x.error(`\u672A\u77E5\u64CD\u4F5C: ${e}`)),R(x.dim("\u53EF\u7528\u64CD\u4F5C: summary, providers, records, clear"));return}try{let t=await s.promptSelect("Token \u4F7F\u7528\u7EDF\u8BA1",[{label:"\u25CF \u67E5\u770B\u603B\u89C8",value:"summary",description:"\u663E\u793A\u6574\u4F53 Token \u4F7F\u7528\u7EDF\u8BA1"},{label:"\u25CF Provider \u7EDF\u8BA1",value:"providers",description:"\u67E5\u770B\u5404\u4E2A Provider \u7684\u8BE6\u7EC6\u7EDF\u8BA1"},{label:"\u25CF \u8BE6\u7EC6\u8BB0\u5F55",value:"records",description:"\u67E5\u770B\u6307\u5B9A Provider \u7684\u8BF7\u6C42\u8BB0\u5F55"},{label:"\u25CF \u6E05\u9664\u7EDF\u8BA1",value:"clear",description:"\u6E05\u9664\u7EDF\u8BA1\u6570\u636E"},{label:"\u2190 \u8FD4\u56DE",value:"back",description:"\u8FD4\u56DE\u4E0A\u4E00\u7EA7"}],"summary","\u4E0A\u4E0B\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u786E\u8BA4\uFF0CESC \u9000\u51FA");if(t==="back")return;switch(t){case "summary":await jv(s);break;case "providers":await Pc(s);break;case "records":await $i(s);break;case "clear":await Gv(s);break}}catch(t){t.message!=="User cancelled"&&t.message!=="cancelled"&&R(x.error("\u7EDF\u8BA1\u547D\u4EE4\u5931\u8D25: "+t.message));}}Gt();yn();async function Hv(s,e){let t=e?.toLowerCase();if(!t)try{t=await s.promptSelect("\u8BB0\u5FC6\u7CFB\u7EDF",[{label:"\u25CF \u67E5\u770B\u8BB0\u5FC6\u7EDF\u8BA1",value:"show",description:"\u77ED\u671F/\u4E2D\u671F/\u957F\u671F/\u6C38\u4E45 \u6761\u6570\u4E0E\u5927\u5C0F"},{label:"\u25CF \u67E5\u770B\u8DEF\u5F84",value:"paths",description:"\u663E\u793A\u8BB0\u5FC6\u6587\u4EF6\u8DEF\u5F84"},{label:"\u25CF \u914D\u7F6E\u6458\u8981\u6A21\u578B",value:"config",description:"\u5F00\u5173\u8BB0\u5FC6\u6458\u8981\u4E0E\u9009\u62E9\u6A21\u578B"},{label:"\u25CF \u8C03\u8BD5\u6CE8\u5165\u5185\u5BB9",value:"debug",description:"\u663E\u793A\u5F53\u524D\u4F1A\u6CE8\u5165\u7684\u8BB0\u5FC6\u6458\u8981"}],"show","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(n){n?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",n?.message);return}switch(t){case "show":case "stats":await _M(s);break;case "paths":await IM(s);break;case "config":case "configure":await wM(s);break;case "debug":await EM(s);break;default:s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /memory \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}async function wM(s){let e=s.userConfig.memory??{},t=e.summarizerEnabled??true,n=e.summarizerModel??"",r=e.summarizerProviderId??"",o;try{o=await s.promptSelect("\u8BB0\u5FC6\u6458\u8981\u8BBE\u7F6E",[{label:`\u25CF \u6458\u8981\u5F00\u5173: ${t?"\u5F00\u542F":"\u5173\u95ED"}`,value:"toggle",description:"\u63A7\u5236\u81EA\u52A8\u8BB0\u5FC6\u6458\u8981"},{label:`\u25CF \u6458\u8981\u6A21\u578B: ${n||"\u9ED8\u8BA4"}`,value:"model",description:"\u9009\u62E9\u6458\u8981\u6A21\u578B\uFF08\u5982 haiku/gpt\uFF09"},{label:`\u25CF \u6458\u8981 Provider: ${r||"\u81EA\u52A8"}`,value:"provider",description:"\u6307\u5B9A\u6458\u8981\u4F7F\u7528\u7684 Provider\uFF08\u53EF\u9009\uFF09"},{label:"\u25CF \u8FD4\u56DE",value:"back"}],"toggle","Enter \u9009\u62E9\uFF0CESC \u53D6\u6D88");}catch(i){i?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",i?.message);return}if(o!=="back"){if(o==="toggle"){let i=await s.promptSelect("\u662F\u5426\u542F\u7528\u8BB0\u5FC6\u6458\u8981",[{label:"\u5F00\u542F",value:"on"},{label:"\u5173\u95ED",value:"off"}],t?"on":"off");Bi(s,{summarizerEnabled:i==="on"}),s.logInfo("\u8BB0\u5FC6\u6458\u8981\u5DF2\u66F4\u65B0",i==="on"?"\u5DF2\u5F00\u542F":"\u5DF2\u5173\u95ED");return}if(o==="model"){let i;try{i=await kM(s,n);}catch(c){c?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",c?.message);return}let{model:a,existsInConfig:l}=i;if(a==="__cancel__")return;if(a==="__default__"){Bi(s,{summarizerModel:void 0}),s.logInfo("\u6458\u8981\u6A21\u578B\u5DF2\u66F4\u65B0","\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B");return}if(Bi(s,{summarizerModel:a}),!l){s.logInfo("\u6458\u8981\u6A21\u578B\u5DF2\u8BBE\u7F6E",`\u6A21\u578B "${a}" \u672A\u5728 provider \u914D\u7F6E\u4E2D\u627E\u5230\uFF0C\u53EF\u80FD\u65E0\u6CD5\u751F\u6548`);return}s.logInfo("\u6458\u8981\u6A21\u578B\u5DF2\u8BBE\u7F6E",a);return}if(o==="provider"){let i;try{i=await SM(s,r);}catch(a){a?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",a?.message);return}if(!i)return;if(i==="__auto__"){Bi(s,{summarizerProviderId:void 0}),s.logInfo("\u6458\u8981 Provider \u5DF2\u66F4\u65B0","\u81EA\u52A8\u9009\u62E9");return}Bi(s,{summarizerProviderId:i}),s.logInfo("\u6458\u8981 Provider \u5DF2\u8BBE\u7F6E",i);}}}async function kM(s,e){let t=new ze(s.userConfig),n=new Set;for(let l of t.getProviders())for(let c of l.models??[])c?.name&&n.add(c.name);let r=["claude-haiku-4-5-20251001","claude-haiku","gpt-4o-mini","gpt-4.1-mini","gpt-4o","gemini-1.5-flash","gemini-2.0-flash"],o=Array.from(new Set([...r,...n])),i=[{label:"\u9ED8\u8BA4\uFF08\u81EA\u52A8\u9009\u62E9\uFF09",value:"__default__",description:"\u4F7F\u7528\u9ED8\u8BA4\u6458\u8981\u6A21\u578B"},...o.map(l=>({label:l,value:l,description:n.has(l)?void 0:"\u672A\u5728 provider \u914D\u7F6E\u4E2D\u627E\u5230"})),{label:"\u81EA\u5B9A\u4E49\u6A21\u578B",value:"__custom__",description:"\u8F93\u5165\u81EA\u5B9A\u4E49\u6A21\u578B\u540D\u79F0"}],a=await s.promptSelect("\u9009\u62E9\u6458\u8981\u6A21\u578B",i,e||"__default__");if(a==="__custom__"){let c=(await s.promptText("\u8F93\u5165\u6A21\u578B\u540D\u79F0",{allowEmpty:false})).trim();return {model:c||"__cancel__",existsInConfig:n.has(c)}}return {model:a||"__cancel__",existsInConfig:n.has(a)}}async function SM(s,e){let n=new ze(s.userConfig).getProviders();if(n.length===0)return s.logInfo("\u672A\u914D\u7F6E Provider","\u8BF7\u5148\u901A\u8FC7 /provider \u6DFB\u52A0"),null;let r=[{label:"\u81EA\u52A8\u9009\u62E9",value:"__auto__",description:"\u6839\u636E\u6A21\u578B\u81EA\u52A8\u5339\u914D"},...n.map(i=>({label:i.id,value:i.id,description:i.name}))];return await s.promptSelect("\u9009\u62E9\u6458\u8981 Provider",r,e||"__auto__")}function Bi(s,e){let t={...s.userConfig.memory??{}};"summarizerEnabled"in e&&(t.summarizerEnabled=e.summarizerEnabled),"summarizerModel"in e&&(e.summarizerModel?t.summarizerModel=e.summarizerModel:delete t.summarizerModel),"summarizerProviderId"in e&&(e.summarizerProviderId?t.summarizerProviderId=e.summarizerProviderId:delete t.summarizerProviderId);let n={...s.userConfig,memory:t};s.updateConfig(n),Ae(n);}async function _M(s){let e=await s.actionLog.getMemoryStats(),t=AM(e);wm(s,t);}async function IM(s){let e=await s.actionLog.getMemoryStats(),t=MM(e);wm(s,t);}async function EM(s){let e=await s.actionLog.getMemoryInjectionSummary({language:s.userConfig.language??"zh",includePersistent:true,includeLastRun:true}),t=[];t.push(""),t.push(x.highlight(" \u8BB0\u5FC6\u6CE8\u5165\u9884\u89C8")),t.push(""),e?e.split(`
3543
+ `).forEach(n=>{t.push(x.info(` ${n}`));}):t.push(x.dim(" (\u65E0\u53EF\u7528\u8BB0\u5FC6)")),t.push(""),wm(s,t);}function AM(s){let e=o=>o.toLocaleString("en-US"),t=o=>{if(o<1024)return `${o} B`;let i=o/1024;if(i<1024)return `${i.toFixed(1)} KB`;let a=i/1024;return a<1024?`${a.toFixed(2)} MB`:`${(a/1024).toFixed(2)} GB`},n=s.longTerm.total,r=[];return r.push(""),r.push(x.highlight(" \u8BB0\u5FC6\u7EDF\u8BA1")),r.push(""),r.push(x.dim(" \u77ED\u671F (recent): ")+x.info(`${e(s.shortTerm.count)} \u6761, ${t(s.shortTerm.sizeBytes)}`)),r.push(x.dim(" \u4E2D\u671F (session): ")+x.info(`${e(s.session.count)} \u6761, ${t(s.session.sizeBytes)}`)),r.push(x.dim(" \u957F\u671F (progress/standard/lesson): ")+x.info(`${e(n.count)} \u6761, ${t(n.sizeBytes)}`)),r.push(x.dim(" - progress: ")+x.info(`${e(s.longTerm.progress.count)} \u6761, ${t(s.longTerm.progress.sizeBytes)}`)),r.push(x.dim(" - standard: ")+x.info(`${e(s.longTerm.standard.count)} \u6761, ${t(s.longTerm.standard.sizeBytes)}`)),r.push(x.dim(" - lesson: ")+x.info(`${e(s.longTerm.lesson.count)} \u6761, ${t(s.longTerm.lesson.sizeBytes)}`)),r.push(x.dim(" \u6C38\u4E45 (pinned): ")+x.info(`${e(s.pinned.count)} \u6761, ${t(s.pinned.sizeBytes)}`)),r.push(""),r.push(x.dim(" \u603B\u8BA1: ")+x.info(`${e(s.totals.count)} \u6761, ${t(s.totals.sizeBytes)}`)),r.push(""),r}function MM(s){let e=[];return e.push(""),e.push(x.highlight(" \u8BB0\u5FC6\u8DEF\u5F84")),e.push(""),s.shortTerm.path&&e.push(x.dim(" \u77ED\u671F: ")+x.info(s.shortTerm.path)),s.session.path&&e.push(x.dim(" \u4E2D\u671F: ")+x.info(s.session.path)),s.longTerm.progress.path&&e.push(x.dim(" \u8FDB\u5EA6: ")+x.info(s.longTerm.progress.path)),s.longTerm.standard.path&&e.push(x.dim(" \u89C4\u8303: ")+x.info(s.longTerm.standard.path)),s.longTerm.lesson.path&&e.push(x.dim(" \u6559\u8BAD: ")+x.info(s.longTerm.lesson.path)),s.pinned.path&&e.push(x.dim(" \u6C38\u4E45: ")+x.info(s.pinned.path)),e.push(""),e}function wm(s,e){if(s.uiController){let t=s.uiController;if(typeof t.setCommandOutputLines=="function"){t.setCommandOutputLines(e);return}if(typeof t.printCommandOutput=="function"){for(let n of e)t.printCommandOutput(n);return}}for(let t of e)R(t);}var zv="0.0.0.0",qv=7090;async function DM(s){try{let{renderUnicodeCompact:e}=await import('uqr');return {qr:e(s,{ecc:"M",border:1})}}catch(e){return {qr:null,error:e instanceof Error?e.message:String(e)}}}async function NM(s){try{let e=await import('qrcode'),t=e.default??e;if(!t||typeof t.toFile!="function")return {filePath:null,error:"QRCode module missing or invalid."};let n=Date.now(),r=join(tmpdir(),`neox-qr-${n}.png`);await t.toFile(r,s,{type:"png",errorCorrectionLevel:"H",margin:4,scale:10,color:{dark:"#000000",light:"#FFFFFF"}});let{exec:o}=await import('child_process'),{promisify:i}=await import('util'),a=i(o),l=process.platform,c;return l==="darwin"?c=`open "${r}"`:l==="win32"?c=`start "" "${r}"`:c=`xdg-open "${r}"`,await a(c),{filePath:r}}catch(e){return {filePath:null,error:e instanceof Error?e.message:String(e)}}}function LM(s){let e=s.urls[0],t=e?new URL(e).hostname:s.host&&s.host!==zv?s.host:"127.0.0.1";return {payload:`neox://pair?${new URLSearchParams({mode:s.networkMode,host:t,port:String(s.port),token:s.token||""}).toString()}`,lanUrl:`http://${t}:${s.port}`}}function OM(s){return s.remote??{}}function Kv(s){return s==="vps"?"vps":"lan"}async function Jv(s,e){let t=s.getStatus(),n=e?.toLowerCase();if(!n)try{n=await s.promptSelect("\u8FDC\u7A0B\u8BBF\u95EE (Remote Access)",[{label:`\u25CF \u5F00\u5173: ${t.enabled?"\u5F00\u542F":"\u5173\u95ED"}`,value:"toggle",description:"\u542F\u7528\u6216\u5173\u95ED\u8FDC\u7A0B\u8BBF\u95EE"},{label:`\u25CF \u7F51\u7EDC\u6A21\u5F0F: ${t.networkMode.toUpperCase()}`,value:"network",description:"LAN \u6216 VPS \u4E2D\u8F6C"},{label:`\u25CF \u7AEF\u53E3: ${t.port}`,value:"port",description:"\u672C\u5730\u670D\u52A1\u76D1\u542C\u7AEF\u53E3"},{label:"\u25CF \u663E\u793A\u4E8C\u7EF4\u7801",value:"qr",description:"\u624B\u673A\u626B\u7801\u5FEB\u901F\u914D\u5BF9"},{label:"\u25CF \u663E\u793A\u914D\u5BF9\u4FE1\u606F",value:"pair",description:"\u67E5\u770B\u8FDE\u63A5\u5730\u5740\u4E0E Token"},{label:"\u25CF \u91CD\u65B0\u751F\u6210 Token",value:"token",description:"\u66F4\u65B0\u914D\u5BF9 Token"},{label:"\u25CF \u8FD4\u56DE",value:"back"}],"toggle","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(r){r?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",r?.message);return}if(n!=="back"){if(n==="on"||n==="off"||n==="toggle"){let r=n==="on"?true:n==="off"?false:!t.enabled;if(km(s,{enabled:r}),r){await s.startRemote();let o=s.getStatus(),i=[`\u6A21\u5F0F: ${o.networkMode.toUpperCase()}`,`\u5730\u5740: ${o.host}:${o.port}`,`Token: ${o.token||"(\u672A\u751F\u6210)"}`];if(o.urls.length>0){i.push("LAN \u5730\u5740:");for(let a of o.urls)i.push(`- ${a}`);}s.logInfo("\u8FDC\u7A0B\u8BBF\u95EE\u5DF2\u5F00\u542F",i.join(`
3544
3544
  `));}else await s.stopRemote(),s.logInfo("\u8FDC\u7A0B\u8BBF\u95EE\u5DF2\u5173\u95ED","\u5DF2\u65AD\u5F00\u8FDC\u7A0B\u8FDE\u63A5");return}if(n==="network"){let r;try{r=await s.promptSelect("\u9009\u62E9\u7F51\u7EDC\u6A21\u5F0F",[{label:"LAN (\u5C40\u57DF\u7F51)",value:"lan",description:"\u540C\u4E00\u5185\u7F51\u8FDE\u63A5"},{label:"VPS (\u516C\u7F51\u4E2D\u8F6C)",value:"vps",description:"\u9700\u8981 VPS \u4E2D\u8F6C"}],t.networkMode);}catch(i){i?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",i?.message);return}let o=Kv(r);km(s,{networkMode:o}),o==="vps"?s.logInfo("\u5DF2\u5207\u6362\u5230 VPS \u6A21\u5F0F","VPS \u4E2D\u8F6C\u914D\u7F6E\u5C06\u5728\u540E\u7EED\u5B9E\u73B0"):s.logInfo("\u5DF2\u5207\u6362\u5230 LAN \u6A21\u5F0F","\u53EF\u76F4\u63A5\u4F7F\u7528\u5C40\u57DF\u7F51\u8FDE\u63A5"),await s.startRemote();return}if(n==="port"){let r="";try{r=await s.promptText("\u8F93\u5165\u76D1\u542C\u7AEF\u53E3",{defaultValue:String(t.port||qv),allowEmpty:!1});}catch(i){i?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",i?.message);return}let o=parseInt(r,10);if(!Number.isFinite(o)||o<1||o>65535){s.logInfo("\u65E0\u6548\u7AEF\u53E3","\u8BF7\u8F93\u5165 1-65535 \u4E4B\u95F4\u7684\u7AEF\u53E3");return}km(s,{port:o}),await s.startRemote(),s.logInfo("\u7AEF\u53E3\u5DF2\u66F4\u65B0",`\u5F53\u524D\u7AEF\u53E3: ${o}`);return}if(n==="token"){let r=s.regenerateToken();s.logInfo("Token \u5DF2\u66F4\u65B0",`\u65B0\u7684 Token: ${r}`),await s.startRemote();return}if(n==="pair"||n==="status"){let r=s.getStatus();r.token||(s.regenerateToken(),r=s.getStatus());let o=[`\u72B6\u6001: ${r.enabled?"\u5F00\u542F":"\u5173\u95ED"} / ${r.running?"\u8FD0\u884C\u4E2D":"\u672A\u8FD0\u884C"}`,`\u6A21\u5F0F: ${r.networkMode.toUpperCase()}`,`\u5730\u5740: ${r.host}:${r.port}`,`Token: ${r.token||"(\u672A\u751F\u6210)"}`];if(r.urls.length>0){o.push("LAN \u5730\u5740:");for(let i of r.urls)o.push(`- ${i}`);}s.logInfo("\u8FDC\u7A0B\u914D\u5BF9\u4FE1\u606F",o.join(`
3545
- `));return}if(n==="qr"){let r=s.getStatus();r.token||(s.regenerateToken(),r=s.getStatus());let o=NM(r);s.clearOutputLines&&s.clearOutputLines();let i=await DM(o.payload),a=await RM(o.payload),l=[`LAN \u5730\u5740: ${o.lanUrl}`,`Token: ${r.token||"(\u672A\u751F\u6210)"}`,`\u534F\u8BAE: ${o.payload}`];i.filePath?(l.push(`\u4E8C\u7EF4\u7801\u56FE\u7247: ${i.filePath}`),l.push("(\u5DF2\u5728\u65B0\u7A97\u53E3\u6253\u5F00\uFF0C\u8BF7\u4F7F\u7528\u624B\u673A\u626B\u63CF)")):i.error&&l.push(`\u56FE\u7247\u751F\u6210\u5931\u8D25: ${i.error}`);let c=a.qr?l:[...l,a.error?`\u7EC8\u7AEF\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25: ${a.error}`:"\u7EC8\u7AEF\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25: \u672A\u77E5\u9519\u8BEF"];if(a.qr){let u=a.qr.split(`
3545
+ `));return}if(n==="qr"){let r=s.getStatus();r.token||(s.regenerateToken(),r=s.getStatus());let o=LM(r);s.clearOutputLines&&s.clearOutputLines();let i=await NM(o.payload),a=await DM(o.payload),l=[`LAN \u5730\u5740: ${o.lanUrl}`,`Token: ${r.token||"(\u672A\u751F\u6210)"}`,`\u534F\u8BAE: ${o.payload}`];i.filePath?(l.push(`\u4E8C\u7EF4\u7801\u56FE\u7247: ${i.filePath}`),l.push("(\u5DF2\u5728\u65B0\u7A97\u53E3\u6253\u5F00\uFF0C\u8BF7\u4F7F\u7528\u624B\u673A\u626B\u63CF)")):i.error&&l.push(`\u56FE\u7247\u751F\u6210\u5931\u8D25: ${i.error}`);let c=a.qr?l:[...l,a.error?`\u7EC8\u7AEF\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25: ${a.error}`:"\u7EC8\u7AEF\u4E8C\u7EF4\u7801\u751F\u6210\u5931\u8D25: \u672A\u77E5\u9519\u8BEF"];if(a.qr){let u=a.qr.split(`
3546
3546
  `);u[u.length-1]===""&&u.pop();let d=typeof process.stdout?.rows=="number"?process.stdout.rows:0,m=d>0?Math.max(8,d-10):24,g=u.length>m,h=`\u7EC8\u7AEF\u4E8C\u7EF4\u7801\u8FC7\u5927(${u.length}\u884C)\uFF0C\u5DF2\u7701\u7565\uFF08\u8BF7\u626B\u56FE\u7247\uFF09`;s.outputLines?(g?s.outputLines([...l,h]):s.outputLines([...u,"",...l]),s.logInfo("\u8FDC\u7A0B\u914D\u5BF9\u4E8C\u7EF4\u7801",l.join(`
3547
3547
  `))):g?s.logInfo("\u8FDC\u7A0B\u914D\u5BF9\u4E8C\u7EF4\u7801",[...l,h].join(`
3548
3548
  `)):s.logInfo("\u8FDC\u7A0B\u914D\u5BF9\u4E8C\u7EF4\u7801",`${a.qr}
3549
3549
  ${l.join(`
3550
3550
  `)}`);}else s.logInfo("\u8FDC\u7A0B\u914D\u5BF9\u4FE1\u606F",c.join(`
3551
- `));return}s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /remote \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}function km(s,e){let t=LM(s.userConfig),n={enabled:t.enabled??false,networkMode:Kv(t.networkMode),host:t.host||zv,port:t.port||qv,token:t.token,allowVoice:t.allowVoice??true,autoApprove:t.autoApprove??true,...e},r={...s.userConfig,remote:n};s.updateConfig(r),Ae(r);}async function Qv(s,e){if(s.userConfig.supervisor||s.userConfig.collab?.supervisorAgent){let o={...s.userConfig};if(o.supervisor&&delete o.supervisor,o.collab?.supervisorAgent){let i={...o.collab};delete i.supervisorAgent,Object.keys(i).length===0?delete o.collab:o.collab=i;}s.updateConfig(o),Ae(o);}s.logInfo("\u76D1\u7763 Agent \u5DF2\u79FB\u9664","\u8BE5\u914D\u7F6E\u5DF2\u5E9F\u5F03\u5E76\u4F1A\u81EA\u52A8\u6E05\u7406\u3002");}Gt();yn();function Zv(s,e){if(!s)return "\u672A\u914D\u7F6E";let n=e.find(r=>r.id===s.providerId)?.name||s.providerId;return `${s.model} (${n})`}function Fi(s){return !s||s.length===0?"":s.map(e=>`[${e}]`).join(" ")}function eC(s){return typeof s=="number"&&Number.isFinite(s)&&s>0?String(Math.floor(s)):`\u9ED8\u8BA4(${js})`}async function tC(s,e){let t=new ze,n=new Nt(t),r=s.getProviders(),o=e?.toLowerCase();if(!o)try{let i=n.getMainAgent(),a=n.getWorkerPool(),l=a.filter(m=>m.enabled).length,c=n.getMaxConcurrent(),u=n.getCCBReviewMode(),d=rC(u);o=await s.promptSelect("\u534F\u4F5C\u6A21\u5F0F\u914D\u7F6E",[{label:`\u25CF \u4E3B Agent (Main): ${Zv(i,r)}`,value:"main",description:"\u5904\u7406\u7528\u6237\u8F93\u5165\uFF0C\u8C03\u5EA6\u4EFB\u52A1"},{label:`\u25CF Worker \u6A21\u578B\u6C60: ${l}/${a.length} \u5DF2\u542F\u7528`,value:"worker",description:"\u53EF\u9009\u914D\u7F6E\uFF0C\u4E0D\u914D\u7F6E\u5219\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B"},{label:`\u25CF \u6700\u5927\u5E76\u53D1 Worker: ${eC(c)}`,value:"max_concurrent",description:"\u63A7\u5236 spawn/delegate \u5E76\u53D1\u4E0A\u9650"},{label:`\u25CF CCB \u8BC4\u5BA1\u6A21\u5F0F: ${d}`,value:"ccb_mode",description:"cooperate \u6A21\u5F0F\u4E0B\u7684\u8BC4\u5BA1\u65B9\u5F0F"},{label:"\u25CF \u8FD0\u884C\u6A21\u5F0F\u5207\u6362",value:"mode",description:"single / collab / cooperate / network"},{label:"\u25CF \u67E5\u770B\u6240\u6709\u914D\u7F6E",value:"show",description:"\u663E\u793A\u5F53\u524D\u534F\u4F5C\u914D\u7F6E\u8BE6\u60C5"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator1"},{label:"\u26A1 \u81EA\u52A8\u4F18\u5316\u81EA\u7EC4\u7F51\u914D\u7F6E",value:"optimize_network",description:"\u5206\u6790\u9879\u76EE\uFF0C\u52A8\u6001\u751F\u6210\u9002\u5408\u7684 Agent \u89D2\u8272\uFF08\u6D88\u8017 token\uFF09"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],"main","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(i){i?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",i?.message);return}if(!(o==="back"||o==="separator"||o==="separator1")){if(o==="show"){BM(s,n,r);return}if(o==="main"){await UM(s,n,r);return}if(o==="worker"){await jM(s,n,r);return}if(o==="max_concurrent"){await FM(s,n);return}if(o==="mode"){await YM(s);return}if(o==="ccb_mode"){await VM(s,n);return}if(o==="optimize_network"){await QM(s);return}}}function BM(s,e,t){let n=e.getMainAgent(),r=e.getWorkerPool(),o=e.getMaxConcurrent(),i=[];i.push("\u250C\u2500 \u4E3B Agent (Main)"),i.push(`\u2502 \u6A21\u578B: ${Zv(n,t)}`),i.push(`\u2502 \u6700\u5927\u5E76\u53D1: ${eC(o)}`),i.push("\u2502"),i.push("\u2514\u2500 Worker \u6A21\u578B\u6C60 (\u53EF\u9009\uFF0C\u4E0D\u914D\u7F6E\u5219\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B)"),r.length===0?i.push(" (\u7A7A)"):r.forEach((a,l)=>{let u=t.find(h=>h.id===a.providerId)?.name||a.providerId,d=a.enabled?"\u2713":"\u25CB",m=Fi(a.traits),g=l===r.length-1?"\u2514\u2500":"\u251C\u2500";i.push(` ${g} [${d}] ${a.model} (${u}) ${m}`);}),s.logInfo("\u534F\u4F5C\u6A21\u5F0F\u914D\u7F6E",i.join(`
3552
- `));}async function FM(s,e){try{let t=e.getMaxConcurrent(),r=(await s.promptText("\u8BBE\u7F6E\u6700\u5927\u5E76\u53D1 Worker \u6570\u91CF",{defaultValue:typeof t=="number"&&t>0?String(Math.floor(t)):String(js),allowEmpty:!0,hint:"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u503C"})).trim();if(!r){e.setMaxConcurrent(void 0),s.logInfo("\u5DF2\u6062\u590D\u9ED8\u8BA4\u5E76\u53D1\u4E0A\u9650",String(js));return}let o=Number(r);if(!Number.isFinite(o)||o<=0){s.logInfo("\u8F93\u5165\u65E0\u6548","\u8BF7\u8F93\u5165\u5927\u4E8E 0 \u7684\u6574\u6570");return}let i=Math.floor(o);e.setMaxConcurrent(i),s.logInfo("\u6700\u5927\u5E76\u53D1\u5DF2\u66F4\u65B0",String(i));}catch(t){t?.message!=="cancelled"&&s.logInfo("\u914D\u7F6E\u5931\u8D25",t?.message);}}async function UM(s,e,t){try{let n=await nC(s,t,"\u9009\u62E9\u4E3B Agent \u7684 Provider");if(!n)return;let r=await JM(s,t,n,"\u9009\u62E9\u4E3B Agent \u7684\u6A21\u578B");if(!r)return;e.setMainAgent({providerId:n,model:r}),s.logInfo("\u4E3B Agent \u5DF2\u914D\u7F6E",`${r} (${t.find(o=>o.id===n)?.name})`);}catch(n){n?.message!=="cancelled"&&s.logInfo("\u914D\u7F6E\u5931\u8D25",n?.message);}}async function jM(s,e,t){try{let n=await s.promptSelect("Worker \u6A21\u578B\u6C60",[{label:"\u25CF \u6DFB\u52A0\u6A21\u578B",value:"add",description:"\u4ECE\u5DF2\u914D\u7F6E\u7684 Provider \u6DFB\u52A0\u6A21\u578B"},{label:"\u25CF \u7F16\u8F91 Traits",value:"traits",description:"\u81EA\u5B9A\u4E49\u6A21\u578B\u7279\u6027\u6807\u7B7E\uFF08\u4E2D\u82F1\u6587\u5747\u53EF\uFF09"},{label:"\u25CF \u5207\u6362\u542F\u7528\u72B6\u6001",value:"toggle",description:"\u542F\u7528/\u7981\u7528 Worker \u6A21\u578B"},{label:"\u25CF \u79FB\u9664\u6A21\u578B",value:"remove",description:"\u4ECE Worker \u6C60\u79FB\u9664\u6A21\u578B"},{label:"\u25CF \u67E5\u770B\u5F53\u524D Worker \u6C60",value:"list",description:"\u663E\u793A\u6240\u6709 Worker \u6A21\u578B\u53CA traits"},{label:"\u25CF \u4E00\u952E\u6DFB\u52A0\u6240\u6709\u6A21\u578B",value:"add_all",description:"\u6DFB\u52A0\u6240\u6709 Provider \u7684\u6240\u6709\u6A21\u578B"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],"add","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(n==="back"||n==="separator")return;if(n==="list"){WM(s,e,t);return}if(n==="add"){await HM(s,e,t);return}if(n==="toggle"){await zM(s,e,t);return}if(n==="remove"){await qM(s,e,t);return}if(n==="add_all"){await KM(s,e,t);return}if(n==="traits"){await GM(s,e,t);return}}catch(n){n?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",n?.message);}}async function GM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6C60\u4E3A\u7A7A","\u8BF7\u5148\u6DFB\u52A0\u6A21\u578B");return}let r=n.map(m=>{let h=t.find(v=>v.id===m.providerId)?.name||m.providerId,f=Fi(m.traits);return {label:`\u25B8 ${m.model} (${h})`,value:`${m.providerId}::${m.model}`,description:f||"(\u65E0 traits)"}});r.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let o=await s.promptSelect("\u9009\u62E9\u8981\u7F16\u8F91 Traits \u7684\u6A21\u578B",r,void 0,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;let[i,a]=o.split("::"),c=n.find(m=>m.providerId===i&&m.model===a)?.traits||[],d=(await s.promptText(`\u7F16\u8F91 ${a} \u7684 Traits\uFF08\u9017\u53F7\u5206\u9694\uFF0C\u4E2D\u82F1\u6587\u5747\u53EF\uFF09`,{defaultValue:c.join(", "),allowEmpty:true,hint:"\u4F8B\u5982: coding, fast, \u4EE3\u7801, UI\u8BBE\u8BA1"})).split(/[,,]/).map(m=>m.trim()).filter(m=>m.length>0);e.updateWorkerTraits(i,a,d),s.logInfo("Traits \u5DF2\u66F4\u65B0",`${a}: ${Fi(d)||"(\u7A7A)"}`);}function WM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6A21\u578B\u6C60","(\u7A7A - \u8BF7\u5148\u6DFB\u52A0\u6A21\u578B)");return}let r=[];n.forEach((o,i)=>{let l=t.find(d=>d.id===o.providerId)?.name||o.providerId,c=o.enabled?"\u2713":"\u25CB",u=Fi(o.traits);r.push(`[${c}] ${o.model} (${l})${u?" "+u:""}`);}),s.logInfo(`Worker \u6A21\u578B\u6C60 (${n.length} \u4E2A)`,r.join(`
3553
- `));}async function HM(s,e,t){let n=await nC(s,t,"\u9009\u62E9\u8981\u6DFB\u52A0\u6A21\u578B\u7684 Provider");if(!n)return;let r=t.find(u=>u.id===n);if(!r)return;let o=e.getWorkerPool(),i=new Set(o.filter(u=>u.providerId===n).map(u=>u.model)),a=r.models.filter(u=>!i.has(u.name));if(a.length===0){s.logInfo("\u6CA1\u6709\u53EF\u6DFB\u52A0\u7684\u6A21\u578B","\u8BE5 Provider \u7684\u6240\u6709\u6A21\u578B\u90FD\u5DF2\u5728 Worker \u6C60\u4E2D");return}let l=a.map(u=>({label:`\u25B8 ${u.name}`,value:u.name,description:u.description||""}));l.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let c=await s.promptSelect("\u9009\u62E9\u8981\u6DFB\u52A0\u7684\u6A21\u578B",l,a[0]?.name,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");c==="back"||c==="separator"||(e.addWorkerModel(n,c,true),s.logInfo("\u6A21\u578B\u5DF2\u6DFB\u52A0\u5230 Worker \u6C60",`${c} (${r.name})`));}async function zM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6C60\u4E3A\u7A7A","\u8BF7\u5148\u6DFB\u52A0\u6A21\u578B");return}let r=n.map(c=>{let d=t.find(h=>h.id===c.providerId)?.name||c.providerId,m=c.enabled?"\u2713":"\u25CB",g=Fi(c.traits);return {label:`[${m}] ${c.model} (${d}) ${g}`,value:`${c.providerId}::${c.model}`,description:c.enabled?"\u70B9\u51FB\u7981\u7528":"\u70B9\u51FB\u542F\u7528"}});r.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let o=await s.promptSelect("\u5207\u6362\u6A21\u578B\u542F\u7528\u72B6\u6001",r,void 0,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u5207\u6362\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;let[i,a]=o.split("::");e.toggleWorkerModel(i,a);let l=e.getWorkerPool().find(c=>c.providerId===i&&c.model===a);s.logInfo(`\u6A21\u578B\u5DF2${l?.enabled?"\u542F\u7528":"\u7981\u7528"}`,a);}async function qM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6C60\u4E3A\u7A7A","\u6CA1\u6709\u53EF\u79FB\u9664\u7684\u6A21\u578B");return}let r=n.map(l=>{let u=t.find(d=>d.id===l.providerId)?.name||l.providerId;return {label:`\u25B8 ${l.model} (${u})`,value:`${l.providerId}::${l.model}`}});r.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let o=await s.promptSelect("\u9009\u62E9\u8981\u79FB\u9664\u7684\u6A21\u578B",r,void 0,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u79FB\u9664\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;let[i,a]=o.split("::");e.removeWorkerModel(i,a),s.logInfo("\u6A21\u578B\u5DF2\u79FB\u9664",a);}async function KM(s,e,t){let n=e.getWorkerPool(),r=new Set(n.map(i=>`${i.providerId}::${i.model}`)),o=0;for(let i of t)for(let a of i.models){let l=`${i.id}::${a.name}`;r.has(l)||(e.addWorkerModel(i.id,a.name,true),o++);}o===0?s.logInfo("\u6CA1\u6709\u65B0\u6A21\u578B\u53EF\u6DFB\u52A0","\u6240\u6709\u6A21\u578B\u90FD\u5DF2\u5728 Worker \u6C60\u4E2D"):s.logInfo(`\u5DF2\u6DFB\u52A0 ${o} \u4E2A\u6A21\u578B`,"\u6240\u6709\u6A21\u578B\u9ED8\u8BA4\u542F\u7528");}async function nC(s,e,t){if(e.length===0)return s.logInfo("\u672A\u914D\u7F6E Provider","\u8BF7\u5148\u4F7F\u7528 /provider add \u6DFB\u52A0 Provider"),null;let n=e.map(o=>({label:`\u25B8 ${o.name} (${o.protocol})`,value:o.id,description:o.baseUrl||"\u9ED8\u8BA4 API"}));n.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let r=await s.promptSelect(t,n,e[0]?.id,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");return r==="back"||r==="separator"?null:r}async function JM(s,e,t,n){let r=e.find(a=>a.id===t);if(!r)return null;let o=r.models.map(a=>({label:`\u25B8 ${a.name}`,value:a.name,description:a.description||""}));o.push({label:"\u25B8 \u81EA\u5B9A\u4E49\u6A21\u578B\u540D\u79F0",value:"__custom__",description:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D\u79F0"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let i=await s.promptSelect(n,o,r.models[0]?.name,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");return i==="back"||i==="separator"?null:i==="__custom__"?(await s.promptText("\u8F93\u5165\u6A21\u578B\u540D\u79F0",{allowEmpty:false})).trim():i}async function VM(s,e){let t=e.getCCBReviewMode(),r=e.getWorkerPool().filter(o=>o.enabled);try{let o=await s.promptSelect("CCB \u8BC4\u5BA1\u6A21\u5F0F (cooperate \u6A21\u5F0F\u4E0B\u751F\u6548)",[{label:t==="single-role"?"\u25CF \u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1 (\u5F53\u524D)":"\u25CB \u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1",value:"single-role",description:"\u53EA\u7528\u5B9E\u73B0\u8005\u89D2\u8272\u8BC4\u5BA1\uFF0C\u901F\u5EA6\u6700\u5FEB\u3001\u6210\u672C\u6700\u4F4E"},{label:t==="multi-role"?"\u25CF \u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1 (\u5F53\u524D)":"\u25CB \u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1",value:"multi-role",description:"\u540C\u4E00\u6A21\u578B\u626E\u6F14\u67B6\u6784\u5E08/\u5B9E\u73B0\u8005/\u521B\u65B0\u8005\u4E09\u4E2A\u89D2\u8272\u8BC4\u5BA1"},{label:t==="multi-model"?"\u25CF \u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1 (\u5F53\u524D)":"\u25CB \u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1",value:"multi-model",description:`Worker \u6C60\u4E2D\u4E0D\u540C\u6A21\u578B\u626E\u6F14\u4E0D\u540C\u89D2\u8272 (${r.length} \u4E2A\u6A21\u578B\u53EF\u7528)`},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],t,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;if(o===t){s.logInfo("\u5DF2\u7ECF\u662F\u5F53\u524D\u6A21\u5F0F",rC(t));return}if(o==="multi-model"&&r.length===0){s.logInfo("\u26A0\uFE0F Worker \u6C60\u4E3A\u7A7A",'\u8BF7\u5148\u5728 "Worker \u6A21\u578B\u6C60" \u4E2D\u6DFB\u52A0\u5E76\u542F\u7528\u6A21\u578B');return}if(e.setCCBReviewMode(o),o==="multi-model"){let i=r.slice(0,3).map(l=>l.model).join(", "),a=r.length>3?` \u7B49 ${r.length} \u4E2A\u6A21\u578B`:"";s.logInfo("\u5DF2\u5207\u6362\u5230\u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1",`\u5C06\u4F7F\u7528: ${i}${a}`);}else o==="multi-role"?s.logInfo("\u5DF2\u5207\u6362\u5230\u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1","\u540C\u4E00\u6A21\u578B\u5C06\u626E\u6F14\u67B6\u6784\u5E08\u3001\u5B9E\u73B0\u8005\u3001\u521B\u65B0\u8005\u4E09\u4E2A\u89D2\u8272"):s.logInfo("\u5DF2\u5207\u6362\u5230\u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1","\u53EA\u4F7F\u7528\u5B9E\u73B0\u8005\u89D2\u8272\u8FDB\u884C\u5FEB\u901F\u8BC4\u5BA1");}catch(o){o?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",o?.message);}}function rC(s){switch(s){case "single-role":return "\u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1";case "multi-role":return "\u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1";case "multi-model":return "\u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1";default:return s}}async function YM(s){let e=s.currentMode||"single";try{let t=await s.promptSelect("\u9009\u62E9\u8FD0\u884C\u6A21\u5F0F",[{label:e==="single"?"\u25CF single - \u5355 Agent \u6A21\u5F0F (\u5F53\u524D)":"\u25CB single - \u5355 Agent \u6A21\u5F0F",value:"single",description:"\u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3\uFF0C\u5355\u4E00\u6A21\u578B\u5904\u7406\u6240\u6709\u4EFB\u52A1"},{label:e==="collab"?"\u25CF collab - \u534F\u4F5C\u6A21\u5F0F (\u5F53\u524D)":"\u25CB collab - \u534F\u4F5C\u6A21\u5F0F",value:"collab",description:"\u5E76\u884C\u4EFB\u52A1\uFF0C\u6210\u672C\u4F18\u5316\uFF0CMain + Worker \u6A21\u578B\u6C60"},{label:e==="cooperate"?"\u25CF cooperate - \u5408\u4F5C\u6A21\u5F0F (\u5F53\u524D)":"\u25CB cooperate - \u5408\u4F5C\u6A21\u5F0F",value:"cooperate",description:"\u9759\u6001 DAG + CCB \u8BC4\u5BA1\u6D41\u7A0B\uFF0C\u9002\u5408\u89C4\u8303\u5316\u6D41\u7A0B"},{label:e==="network"?"\u25CF network - \u81EA\u7EC4\u7EC7\u7F51\u7EDC\u6A21\u5F0F (\u5F53\u524D)":"\u25CB network - \u81EA\u7EC4\u7EC7\u7F51\u7EDC\u6A21\u5F0F",value:"network",description:"LLM \u81EA\u4E3B\u5206\u89E3\u4EFB\u52A1\uFF0C\u52A8\u6001 DAG\uFF0C\u9002\u5408\u5927\u578B\u9879\u76EE"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],e,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(t==="back"||t==="separator")return;if(t===e){s.logInfo(`\u5DF2\u7ECF\u662F ${t} \u6A21\u5F0F`,"\u65E0\u9700\u5207\u6362");return}s.setMode?(s.setMode(t),s.logInfo(`\u5DF2\u5207\u6362\u5230 ${t} \u6A21\u5F0F`,XM(t))):s.logInfo("\u6A21\u5F0F\u5207\u6362\u5931\u8D25","\u4E0A\u4E0B\u6587\u672A\u63D0\u4F9B setMode \u65B9\u6CD5");}catch(t){t?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",t?.message);}}function XM(s){switch(s){case "single":return "\u5355 Agent \u6A21\u5F0F - \u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3";case "collab":return "\u534F\u4F5C\u6A21\u5F0F - \u5E76\u884C\u4EFB\u52A1\uFF0C\u6210\u672C\u4F18\u5316";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 - LLM \u5206\u89E3\uFF0C\u52A8\u6001 DAG";default:return ""}}async function QM(s){if(!s.llmCall){s.logInfo("\u529F\u80FD\u4E0D\u53EF\u7528","\u9700\u8981\u914D\u7F6E LLM \u624D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD");return}if(!s.workDir){s.logInfo("\u529F\u80FD\u4E0D\u53EF\u7528","\u672A\u68C0\u6D4B\u5230\u5DE5\u4F5C\u76EE\u5F55");return}try{if(await s.promptSelect("\u26A1 \u81EA\u52A8\u4F18\u5316\u81EA\u7EC4\u7F51\u914D\u7F6E",[{label:"\u2713 \u5F00\u59CB\u5206\u6790",value:"confirm",description:"\u5206\u6790\u9879\u76EE\u5E76\u751F\u6210\u9002\u5408\u7684 Agent \u89D2\u8272\u914D\u7F6E"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u53D6\u6D88",value:"cancel"}],"confirm","\u26A0\uFE0F \u6B64\u64CD\u4F5C\u5C06\u6D88\u8017\u7EA6 1000-2000 tokens")!=="confirm")return;s.logInfo("\u{1F50D} \u6B63\u5728\u5206\u6790\u9879\u76EE...",s.workDir);let t=await ZM(s);if(!t){s.logInfo("\u5206\u6790\u5931\u8D25","\u65E0\u6CD5\u83B7\u53D6\u9879\u76EE\u4FE1\u606F");return}s.logInfo("\u{1F4CA} \u9879\u76EE\u4FE1\u606F\u5DF2\u6536\u96C6",`\u53D1\u73B0 ${t.files.length} \u4E2A\u5173\u952E\u6587\u4EF6`),s.logInfo("\u{1F916} \u6B63\u5728\u751F\u6210\u89D2\u8272\u914D\u7F6E...","\u8BF7\u7A0D\u5019");let n=await eP(s,t);if(!n||n.length===0){s.logInfo("\u751F\u6210\u5931\u8D25","LLM \u672A\u8FD4\u56DE\u6709\u6548\u7684\u89D2\u8272\u914D\u7F6E");return}let r=n.map((i,a)=>`${a+1}. ${i.name} - ${i.description}
3551
+ `));return}s.logInfo("\u65E0\u6548\u7684\u64CD\u4F5C","\u4F7F\u7528 /remote \u67E5\u770B\u53EF\u7528\u64CD\u4F5C");}}function km(s,e){let t=OM(s.userConfig),n={enabled:t.enabled??false,networkMode:Kv(t.networkMode),host:t.host||zv,port:t.port||qv,token:t.token,allowVoice:t.allowVoice??true,autoApprove:t.autoApprove??true,...e},r={...s.userConfig,remote:n};s.updateConfig(r),Ae(r);}async function Qv(s,e){if(s.userConfig.supervisor||s.userConfig.collab?.supervisorAgent){let o={...s.userConfig};if(o.supervisor&&delete o.supervisor,o.collab?.supervisorAgent){let i={...o.collab};delete i.supervisorAgent,Object.keys(i).length===0?delete o.collab:o.collab=i;}s.updateConfig(o),Ae(o);}s.logInfo("\u76D1\u7763 Agent \u5DF2\u79FB\u9664","\u8BE5\u914D\u7F6E\u5DF2\u5E9F\u5F03\u5E76\u4F1A\u81EA\u52A8\u6E05\u7406\u3002");}Gt();yn();function Zv(s,e){if(!s)return "\u672A\u914D\u7F6E";let n=e.find(r=>r.id===s.providerId)?.name||s.providerId;return `${s.model} (${n})`}function Fi(s){return !s||s.length===0?"":s.map(e=>`[${e}]`).join(" ")}function eC(s){return typeof s=="number"&&Number.isFinite(s)&&s>0?String(Math.floor(s)):`\u9ED8\u8BA4(${js})`}async function tC(s,e){let t=new ze,n=new Nt(t),r=s.getProviders(),o=e?.toLowerCase();if(!o)try{let i=n.getMainAgent(),a=n.getWorkerPool(),l=a.filter(m=>m.enabled).length,c=n.getMaxConcurrent(),u=n.getCCBReviewMode(),d=rC(u);o=await s.promptSelect("\u534F\u4F5C\u6A21\u5F0F\u914D\u7F6E",[{label:`\u25CF \u4E3B Agent (Main): ${Zv(i,r)}`,value:"main",description:"\u5904\u7406\u7528\u6237\u8F93\u5165\uFF0C\u8C03\u5EA6\u4EFB\u52A1"},{label:`\u25CF Worker \u6A21\u578B\u6C60: ${l}/${a.length} \u5DF2\u542F\u7528`,value:"worker",description:"\u53EF\u9009\u914D\u7F6E\uFF0C\u4E0D\u914D\u7F6E\u5219\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B"},{label:`\u25CF \u6700\u5927\u5E76\u53D1 Worker: ${eC(c)}`,value:"max_concurrent",description:"\u63A7\u5236 spawn/delegate \u5E76\u53D1\u4E0A\u9650"},{label:`\u25CF CCB \u8BC4\u5BA1\u6A21\u5F0F: ${d}`,value:"ccb_mode",description:"cooperate \u6A21\u5F0F\u4E0B\u7684\u8BC4\u5BA1\u65B9\u5F0F"},{label:"\u25CF \u8FD0\u884C\u6A21\u5F0F\u5207\u6362",value:"mode",description:"single / collab / cooperate / network"},{label:"\u25CF \u67E5\u770B\u6240\u6709\u914D\u7F6E",value:"show",description:"\u663E\u793A\u5F53\u524D\u534F\u4F5C\u914D\u7F6E\u8BE6\u60C5"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator1"},{label:"\u26A1 \u81EA\u52A8\u4F18\u5316\u81EA\u7EC4\u7F51\u914D\u7F6E",value:"optimize_network",description:"\u5206\u6790\u9879\u76EE\uFF0C\u52A8\u6001\u751F\u6210\u9002\u5408\u7684 Agent \u89D2\u8272\uFF08\u6D88\u8017 token\uFF09"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],"main","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");}catch(i){i?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u53D6\u6D88",i?.message);return}if(!(o==="back"||o==="separator"||o==="separator1")){if(o==="show"){FM(s,n,r);return}if(o==="main"){await jM(s,n,r);return}if(o==="worker"){await GM(s,n,r);return}if(o==="max_concurrent"){await UM(s,n);return}if(o==="mode"){await XM(s);return}if(o==="ccb_mode"){await YM(s,n);return}if(o==="optimize_network"){await ZM(s);return}}}function FM(s,e,t){let n=e.getMainAgent(),r=e.getWorkerPool(),o=e.getMaxConcurrent(),i=[];i.push("\u250C\u2500 \u4E3B Agent (Main)"),i.push(`\u2502 \u6A21\u578B: ${Zv(n,t)}`),i.push(`\u2502 \u6700\u5927\u5E76\u53D1: ${eC(o)}`),i.push("\u2502"),i.push("\u2514\u2500 Worker \u6A21\u578B\u6C60 (\u53EF\u9009\uFF0C\u4E0D\u914D\u7F6E\u5219\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B)"),r.length===0?i.push(" (\u7A7A)"):r.forEach((a,l)=>{let u=t.find(h=>h.id===a.providerId)?.name||a.providerId,d=a.enabled?"\u2713":"\u25CB",m=Fi(a.traits),g=l===r.length-1?"\u2514\u2500":"\u251C\u2500";i.push(` ${g} [${d}] ${a.model} (${u}) ${m}`);}),s.logInfo("\u534F\u4F5C\u6A21\u5F0F\u914D\u7F6E",i.join(`
3552
+ `));}async function UM(s,e){try{let t=e.getMaxConcurrent(),r=(await s.promptText("\u8BBE\u7F6E\u6700\u5927\u5E76\u53D1 Worker \u6570\u91CF",{defaultValue:typeof t=="number"&&t>0?String(Math.floor(t)):String(js),allowEmpty:!0,hint:"\u7559\u7A7A\u4F7F\u7528\u9ED8\u8BA4\u503C"})).trim();if(!r){e.setMaxConcurrent(void 0),s.logInfo("\u5DF2\u6062\u590D\u9ED8\u8BA4\u5E76\u53D1\u4E0A\u9650",String(js));return}let o=Number(r);if(!Number.isFinite(o)||o<=0){s.logInfo("\u8F93\u5165\u65E0\u6548","\u8BF7\u8F93\u5165\u5927\u4E8E 0 \u7684\u6574\u6570");return}let i=Math.floor(o);e.setMaxConcurrent(i),s.logInfo("\u6700\u5927\u5E76\u53D1\u5DF2\u66F4\u65B0",String(i));}catch(t){t?.message!=="cancelled"&&s.logInfo("\u914D\u7F6E\u5931\u8D25",t?.message);}}async function jM(s,e,t){try{let n=await nC(s,t,"\u9009\u62E9\u4E3B Agent \u7684 Provider");if(!n)return;let r=await VM(s,t,n,"\u9009\u62E9\u4E3B Agent \u7684\u6A21\u578B");if(!r)return;e.setMainAgent({providerId:n,model:r}),s.logInfo("\u4E3B Agent \u5DF2\u914D\u7F6E",`${r} (${t.find(o=>o.id===n)?.name})`);}catch(n){n?.message!=="cancelled"&&s.logInfo("\u914D\u7F6E\u5931\u8D25",n?.message);}}async function GM(s,e,t){try{let n=await s.promptSelect("Worker \u6A21\u578B\u6C60",[{label:"\u25CF \u6DFB\u52A0\u6A21\u578B",value:"add",description:"\u4ECE\u5DF2\u914D\u7F6E\u7684 Provider \u6DFB\u52A0\u6A21\u578B"},{label:"\u25CF \u7F16\u8F91 Traits",value:"traits",description:"\u81EA\u5B9A\u4E49\u6A21\u578B\u7279\u6027\u6807\u7B7E\uFF08\u4E2D\u82F1\u6587\u5747\u53EF\uFF09"},{label:"\u25CF \u5207\u6362\u542F\u7528\u72B6\u6001",value:"toggle",description:"\u542F\u7528/\u7981\u7528 Worker \u6A21\u578B"},{label:"\u25CF \u79FB\u9664\u6A21\u578B",value:"remove",description:"\u4ECE Worker \u6C60\u79FB\u9664\u6A21\u578B"},{label:"\u25CF \u67E5\u770B\u5F53\u524D Worker \u6C60",value:"list",description:"\u663E\u793A\u6240\u6709 Worker \u6A21\u578B\u53CA traits"},{label:"\u25CF \u4E00\u952E\u6DFB\u52A0\u6240\u6709\u6A21\u578B",value:"add_all",description:"\u6DFB\u52A0\u6240\u6709 Provider \u7684\u6240\u6709\u6A21\u578B"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],"add","\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(n==="back"||n==="separator")return;if(n==="list"){HM(s,e,t);return}if(n==="add"){await zM(s,e,t);return}if(n==="toggle"){await qM(s,e,t);return}if(n==="remove"){await KM(s,e,t);return}if(n==="add_all"){await JM(s,e,t);return}if(n==="traits"){await WM(s,e,t);return}}catch(n){n?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",n?.message);}}async function WM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6C60\u4E3A\u7A7A","\u8BF7\u5148\u6DFB\u52A0\u6A21\u578B");return}let r=n.map(m=>{let h=t.find(v=>v.id===m.providerId)?.name||m.providerId,f=Fi(m.traits);return {label:`\u25B8 ${m.model} (${h})`,value:`${m.providerId}::${m.model}`,description:f||"(\u65E0 traits)"}});r.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let o=await s.promptSelect("\u9009\u62E9\u8981\u7F16\u8F91 Traits \u7684\u6A21\u578B",r,void 0,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;let[i,a]=o.split("::"),c=n.find(m=>m.providerId===i&&m.model===a)?.traits||[],d=(await s.promptText(`\u7F16\u8F91 ${a} \u7684 Traits\uFF08\u9017\u53F7\u5206\u9694\uFF0C\u4E2D\u82F1\u6587\u5747\u53EF\uFF09`,{defaultValue:c.join(", "),allowEmpty:true,hint:"\u4F8B\u5982: coding, fast, \u4EE3\u7801, UI\u8BBE\u8BA1"})).split(/[,,]/).map(m=>m.trim()).filter(m=>m.length>0);e.updateWorkerTraits(i,a,d),s.logInfo("Traits \u5DF2\u66F4\u65B0",`${a}: ${Fi(d)||"(\u7A7A)"}`);}function HM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6A21\u578B\u6C60","(\u7A7A - \u8BF7\u5148\u6DFB\u52A0\u6A21\u578B)");return}let r=[];n.forEach((o,i)=>{let l=t.find(d=>d.id===o.providerId)?.name||o.providerId,c=o.enabled?"\u2713":"\u25CB",u=Fi(o.traits);r.push(`[${c}] ${o.model} (${l})${u?" "+u:""}`);}),s.logInfo(`Worker \u6A21\u578B\u6C60 (${n.length} \u4E2A)`,r.join(`
3553
+ `));}async function zM(s,e,t){let n=await nC(s,t,"\u9009\u62E9\u8981\u6DFB\u52A0\u6A21\u578B\u7684 Provider");if(!n)return;let r=t.find(u=>u.id===n);if(!r)return;let o=e.getWorkerPool(),i=new Set(o.filter(u=>u.providerId===n).map(u=>u.model)),a=r.models.filter(u=>!i.has(u.name));if(a.length===0){s.logInfo("\u6CA1\u6709\u53EF\u6DFB\u52A0\u7684\u6A21\u578B","\u8BE5 Provider \u7684\u6240\u6709\u6A21\u578B\u90FD\u5DF2\u5728 Worker \u6C60\u4E2D");return}let l=a.map(u=>({label:`\u25B8 ${u.name}`,value:u.name,description:u.description||""}));l.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let c=await s.promptSelect("\u9009\u62E9\u8981\u6DFB\u52A0\u7684\u6A21\u578B",l,a[0]?.name,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");c==="back"||c==="separator"||(e.addWorkerModel(n,c,true),s.logInfo("\u6A21\u578B\u5DF2\u6DFB\u52A0\u5230 Worker \u6C60",`${c} (${r.name})`));}async function qM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6C60\u4E3A\u7A7A","\u8BF7\u5148\u6DFB\u52A0\u6A21\u578B");return}let r=n.map(c=>{let d=t.find(h=>h.id===c.providerId)?.name||c.providerId,m=c.enabled?"\u2713":"\u25CB",g=Fi(c.traits);return {label:`[${m}] ${c.model} (${d}) ${g}`,value:`${c.providerId}::${c.model}`,description:c.enabled?"\u70B9\u51FB\u7981\u7528":"\u70B9\u51FB\u542F\u7528"}});r.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let o=await s.promptSelect("\u5207\u6362\u6A21\u578B\u542F\u7528\u72B6\u6001",r,void 0,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u5207\u6362\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;let[i,a]=o.split("::");e.toggleWorkerModel(i,a);let l=e.getWorkerPool().find(c=>c.providerId===i&&c.model===a);s.logInfo(`\u6A21\u578B\u5DF2${l?.enabled?"\u542F\u7528":"\u7981\u7528"}`,a);}async function KM(s,e,t){let n=e.getWorkerPool();if(n.length===0){s.logInfo("Worker \u6C60\u4E3A\u7A7A","\u6CA1\u6709\u53EF\u79FB\u9664\u7684\u6A21\u578B");return}let r=n.map(l=>{let u=t.find(d=>d.id===l.providerId)?.name||l.providerId;return {label:`\u25B8 ${l.model} (${u})`,value:`${l.providerId}::${l.model}`}});r.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let o=await s.promptSelect("\u9009\u62E9\u8981\u79FB\u9664\u7684\u6A21\u578B",r,void 0,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u79FB\u9664\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;let[i,a]=o.split("::");e.removeWorkerModel(i,a),s.logInfo("\u6A21\u578B\u5DF2\u79FB\u9664",a);}async function JM(s,e,t){let n=e.getWorkerPool(),r=new Set(n.map(i=>`${i.providerId}::${i.model}`)),o=0;for(let i of t)for(let a of i.models){let l=`${i.id}::${a.name}`;r.has(l)||(e.addWorkerModel(i.id,a.name,true),o++);}o===0?s.logInfo("\u6CA1\u6709\u65B0\u6A21\u578B\u53EF\u6DFB\u52A0","\u6240\u6709\u6A21\u578B\u90FD\u5DF2\u5728 Worker \u6C60\u4E2D"):s.logInfo(`\u5DF2\u6DFB\u52A0 ${o} \u4E2A\u6A21\u578B`,"\u6240\u6709\u6A21\u578B\u9ED8\u8BA4\u542F\u7528");}async function nC(s,e,t){if(e.length===0)return s.logInfo("\u672A\u914D\u7F6E Provider","\u8BF7\u5148\u4F7F\u7528 /provider add \u6DFB\u52A0 Provider"),null;let n=e.map(o=>({label:`\u25B8 ${o.name} (${o.protocol})`,value:o.id,description:o.baseUrl||"\u9ED8\u8BA4 API"}));n.push({label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let r=await s.promptSelect(t,n,e[0]?.id,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");return r==="back"||r==="separator"?null:r}async function VM(s,e,t,n){let r=e.find(a=>a.id===t);if(!r)return null;let o=r.models.map(a=>({label:`\u25B8 ${a.name}`,value:a.name,description:a.description||""}));o.push({label:"\u25B8 \u81EA\u5B9A\u4E49\u6A21\u578B\u540D\u79F0",value:"__custom__",description:"\u624B\u52A8\u8F93\u5165\u6A21\u578B\u540D\u79F0"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"});let i=await s.promptSelect(n,o,r.models[0]?.name,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");return i==="back"||i==="separator"?null:i==="__custom__"?(await s.promptText("\u8F93\u5165\u6A21\u578B\u540D\u79F0",{allowEmpty:false})).trim():i}async function YM(s,e){let t=e.getCCBReviewMode(),r=e.getWorkerPool().filter(o=>o.enabled);try{let o=await s.promptSelect("CCB \u8BC4\u5BA1\u6A21\u5F0F (cooperate \u6A21\u5F0F\u4E0B\u751F\u6548)",[{label:t==="single-role"?"\u25CF \u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1 (\u5F53\u524D)":"\u25CB \u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1",value:"single-role",description:"\u53EA\u7528\u5B9E\u73B0\u8005\u89D2\u8272\u8BC4\u5BA1\uFF0C\u901F\u5EA6\u6700\u5FEB\u3001\u6210\u672C\u6700\u4F4E"},{label:t==="multi-role"?"\u25CF \u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1 (\u5F53\u524D)":"\u25CB \u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1",value:"multi-role",description:"\u540C\u4E00\u6A21\u578B\u626E\u6F14\u67B6\u6784\u5E08/\u5B9E\u73B0\u8005/\u521B\u65B0\u8005\u4E09\u4E2A\u89D2\u8272\u8BC4\u5BA1"},{label:t==="multi-model"?"\u25CF \u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1 (\u5F53\u524D)":"\u25CB \u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1",value:"multi-model",description:`Worker \u6C60\u4E2D\u4E0D\u540C\u6A21\u578B\u626E\u6F14\u4E0D\u540C\u89D2\u8272 (${r.length} \u4E2A\u6A21\u578B\u53EF\u7528)`},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],t,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(o==="back"||o==="separator")return;if(o===t){s.logInfo("\u5DF2\u7ECF\u662F\u5F53\u524D\u6A21\u5F0F",rC(t));return}if(o==="multi-model"&&r.length===0){s.logInfo("\u26A0\uFE0F Worker \u6C60\u4E3A\u7A7A",'\u8BF7\u5148\u5728 "Worker \u6A21\u578B\u6C60" \u4E2D\u6DFB\u52A0\u5E76\u542F\u7528\u6A21\u578B');return}if(e.setCCBReviewMode(o),o==="multi-model"){let i=r.slice(0,3).map(l=>l.model).join(", "),a=r.length>3?` \u7B49 ${r.length} \u4E2A\u6A21\u578B`:"";s.logInfo("\u5DF2\u5207\u6362\u5230\u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1",`\u5C06\u4F7F\u7528: ${i}${a}`);}else o==="multi-role"?s.logInfo("\u5DF2\u5207\u6362\u5230\u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1","\u540C\u4E00\u6A21\u578B\u5C06\u626E\u6F14\u67B6\u6784\u5E08\u3001\u5B9E\u73B0\u8005\u3001\u521B\u65B0\u8005\u4E09\u4E2A\u89D2\u8272"):s.logInfo("\u5DF2\u5207\u6362\u5230\u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1","\u53EA\u4F7F\u7528\u5B9E\u73B0\u8005\u89D2\u8272\u8FDB\u884C\u5FEB\u901F\u8BC4\u5BA1");}catch(o){o?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",o?.message);}}function rC(s){switch(s){case "single-role":return "\u5355\u89D2\u8272\u5FEB\u901F\u8BC4\u5BA1";case "multi-role":return "\u5355\u6A21\u578B\u591A\u89D2\u8272\u8BC4\u5BA1";case "multi-model":return "\u591A\u6A21\u578B\u534F\u4F5C\u8BC4\u5BA1";default:return s}}async function XM(s){let e=s.currentMode||"single";try{let t=await s.promptSelect("\u9009\u62E9\u8FD0\u884C\u6A21\u5F0F",[{label:e==="single"?"\u25CF single - \u5355 Agent \u6A21\u5F0F (\u5F53\u524D)":"\u25CB single - \u5355 Agent \u6A21\u5F0F",value:"single",description:"\u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3\uFF0C\u5355\u4E00\u6A21\u578B\u5904\u7406\u6240\u6709\u4EFB\u52A1"},{label:e==="collab"?"\u25CF collab - \u534F\u4F5C\u6A21\u5F0F (\u5F53\u524D)":"\u25CB collab - \u534F\u4F5C\u6A21\u5F0F",value:"collab",description:"\u5E76\u884C\u4EFB\u52A1\uFF0C\u6210\u672C\u4F18\u5316\uFF0CMain + Worker \u6A21\u578B\u6C60"},{label:e==="cooperate"?"\u25CF cooperate - \u5408\u4F5C\u6A21\u5F0F (\u5F53\u524D)":"\u25CB cooperate - \u5408\u4F5C\u6A21\u5F0F",value:"cooperate",description:"\u9759\u6001 DAG + CCB \u8BC4\u5BA1\u6D41\u7A0B\uFF0C\u9002\u5408\u89C4\u8303\u5316\u6D41\u7A0B"},{label:e==="network"?"\u25CF network - \u81EA\u7EC4\u7EC7\u7F51\u7EDC\u6A21\u5F0F (\u5F53\u524D)":"\u25CB network - \u81EA\u7EC4\u7EC7\u7F51\u7EDC\u6A21\u5F0F",value:"network",description:"LLM \u81EA\u4E3B\u5206\u89E3\u4EFB\u52A1\uFF0C\u52A8\u6001 DAG\uFF0C\u9002\u5408\u5927\u578B\u9879\u76EE"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u8FD4\u56DE",value:"back"}],e,"\u6309 \u2191\u2193 \u9009\u62E9\uFF0CEnter \u786E\u8BA4\uFF0CESC \u53D6\u6D88");if(t==="back"||t==="separator")return;if(t===e){s.logInfo(`\u5DF2\u7ECF\u662F ${t} \u6A21\u5F0F`,"\u65E0\u9700\u5207\u6362");return}s.setMode?(s.setMode(t),s.logInfo(`\u5DF2\u5207\u6362\u5230 ${t} \u6A21\u5F0F`,QM(t))):s.logInfo("\u6A21\u5F0F\u5207\u6362\u5931\u8D25","\u4E0A\u4E0B\u6587\u672A\u63D0\u4F9B setMode \u65B9\u6CD5");}catch(t){t?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",t?.message);}}function QM(s){switch(s){case "single":return "\u5355 Agent \u6A21\u5F0F - \u65E5\u5E38\u5F00\u53D1\uFF0C\u5FEB\u901F\u8FED\u4EE3";case "collab":return "\u534F\u4F5C\u6A21\u5F0F - \u5E76\u884C\u4EFB\u52A1\uFF0C\u6210\u672C\u4F18\u5316";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 - LLM \u5206\u89E3\uFF0C\u52A8\u6001 DAG";default:return ""}}async function ZM(s){if(!s.llmCall){s.logInfo("\u529F\u80FD\u4E0D\u53EF\u7528","\u9700\u8981\u914D\u7F6E LLM \u624D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD");return}if(!s.workDir){s.logInfo("\u529F\u80FD\u4E0D\u53EF\u7528","\u672A\u68C0\u6D4B\u5230\u5DE5\u4F5C\u76EE\u5F55");return}try{if(await s.promptSelect("\u26A1 \u81EA\u52A8\u4F18\u5316\u81EA\u7EC4\u7F51\u914D\u7F6E",[{label:"\u2713 \u5F00\u59CB\u5206\u6790",value:"confirm",description:"\u5206\u6790\u9879\u76EE\u5E76\u751F\u6210\u9002\u5408\u7684 Agent \u89D2\u8272\u914D\u7F6E"},{label:"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500",value:"separator"},{label:"\u2190 \u53D6\u6D88",value:"cancel"}],"confirm","\u26A0\uFE0F \u6B64\u64CD\u4F5C\u5C06\u6D88\u8017\u7EA6 1000-2000 tokens")!=="confirm")return;s.logInfo("\u{1F50D} \u6B63\u5728\u5206\u6790\u9879\u76EE...",s.workDir);let t=await eP(s);if(!t){s.logInfo("\u5206\u6790\u5931\u8D25","\u65E0\u6CD5\u83B7\u53D6\u9879\u76EE\u4FE1\u606F");return}s.logInfo("\u{1F4CA} \u9879\u76EE\u4FE1\u606F\u5DF2\u6536\u96C6",`\u53D1\u73B0 ${t.files.length} \u4E2A\u5173\u952E\u6587\u4EF6`),s.logInfo("\u{1F916} \u6B63\u5728\u751F\u6210\u89D2\u8272\u914D\u7F6E...","\u8BF7\u7A0D\u5019");let n=await tP(s,t);if(!n||n.length===0){s.logInfo("\u751F\u6210\u5931\u8D25","LLM \u672A\u8FD4\u56DE\u6709\u6548\u7684\u89D2\u8272\u914D\u7F6E");return}let r=n.map((i,a)=>`${a+1}. ${i.name} - ${i.description}
3554
3554
  \u80FD\u529B: ${i.capabilities.join(", ")}`);s.logInfo(`\u2728 \u751F\u6210\u4E86 ${n.length} \u4E2A\u89D2\u8272`,r.join(`
3555
3555
 
3556
- `)),await s.promptSelect("\u662F\u5426\u5E94\u7528\u8FD9\u4E9B\u89D2\u8272\u914D\u7F6E\uFF1F",[{label:"\u2713 \u5E94\u7528\u914D\u7F6E",value:"apply",description:"\u5C06\u8FD9\u4E9B\u89D2\u8272\u4FDD\u5B58\u5230\u81EA\u7EC4\u7F51\u914D\u7F6E"},{label:"\u25CB \u4EC5\u67E5\u770B\uFF0C\u4E0D\u5E94\u7528",value:"view",description:"\u89D2\u8272\u914D\u7F6E\u4E0D\u4F1A\u88AB\u4FDD\u5B58"},{label:"\u2190 \u53D6\u6D88",value:"cancel"}],"apply")==="apply"&&(tP(s,n),s.logInfo("\u2705 \u89D2\u8272\u914D\u7F6E\u5DF2\u4FDD\u5B58",`\u5171 ${n.length} \u4E2A\u89D2\u8272\u5C06\u5728 network \u6A21\u5F0F\u4E0B\u751F\u6548`));}catch(e){e?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",e?.message||String(e));}}async function ZM(s){let e={files:[]};try{if(s.readFile){let t=await s.readFile(`${s.workDir}/package.json`);if(t)try{e.packageJson=JSON.parse(t),e.files.push("package.json");}catch{}let n=await s.readFile(`${s.workDir}/README.md`)||await s.readFile(`${s.workDir}/readme.md`);n&&(e.readme=n.slice(0,2e3),e.files.push("README.md"));}if(s.listDir){let t=await s.listDir(s.workDir);e.files.push(...t.filter(r=>!r.startsWith(".")&&!["node_modules","dist","build",".git"].includes(r)));let n=await s.listDir(`${s.workDir}/src`);n&&n.length>0&&(e.srcStructure=n.slice(0,20));}return e.files.length>0?e:null}catch{return null}}async function eP(s,e){if(!s.llmCall)return [];let t=[];if(e.packageJson){let r=e.packageJson;t.push(`\u9879\u76EE\u540D\u79F0: ${r.name||"\u672A\u77E5"}`),t.push(`\u63CF\u8FF0: ${r.description||"\u65E0"}`);let o=Object.keys(r.dependencies||{}).slice(0,15),i=Object.keys(r.devDependencies||{}).slice(0,10);o.length>0&&t.push(`\u4E3B\u8981\u4F9D\u8D56: ${o.join(", ")}`),i.length>0&&t.push(`\u5F00\u53D1\u4F9D\u8D56: ${i.join(", ")}`);}e.srcStructure&&t.push(`src \u76EE\u5F55\u7ED3\u6784: ${e.srcStructure.join(", ")}`),t.push(`\u6839\u76EE\u5F55\u6587\u4EF6: ${e.files.join(", ")}`),e.readme&&t.push(`README \u6458\u8981:
3556
+ `)),await s.promptSelect("\u662F\u5426\u5E94\u7528\u8FD9\u4E9B\u89D2\u8272\u914D\u7F6E\uFF1F",[{label:"\u2713 \u5E94\u7528\u914D\u7F6E",value:"apply",description:"\u5C06\u8FD9\u4E9B\u89D2\u8272\u4FDD\u5B58\u5230\u81EA\u7EC4\u7F51\u914D\u7F6E"},{label:"\u25CB \u4EC5\u67E5\u770B\uFF0C\u4E0D\u5E94\u7528",value:"view",description:"\u89D2\u8272\u914D\u7F6E\u4E0D\u4F1A\u88AB\u4FDD\u5B58"},{label:"\u2190 \u53D6\u6D88",value:"cancel"}],"apply")==="apply"&&(nP(s,n),s.logInfo("\u2705 \u89D2\u8272\u914D\u7F6E\u5DF2\u4FDD\u5B58",`\u5171 ${n.length} \u4E2A\u89D2\u8272\u5C06\u5728 network \u6A21\u5F0F\u4E0B\u751F\u6548`));}catch(e){e?.message!=="cancelled"&&s.logInfo("\u64CD\u4F5C\u5931\u8D25",e?.message||String(e));}}async function eP(s){let e={files:[]};try{if(s.readFile){let t=await s.readFile(`${s.workDir}/package.json`);if(t)try{e.packageJson=JSON.parse(t),e.files.push("package.json");}catch{}let n=await s.readFile(`${s.workDir}/README.md`)||await s.readFile(`${s.workDir}/readme.md`);n&&(e.readme=n.slice(0,2e3),e.files.push("README.md"));}if(s.listDir){let t=await s.listDir(s.workDir);e.files.push(...t.filter(r=>!r.startsWith(".")&&!["node_modules","dist","build",".git"].includes(r)));let n=await s.listDir(`${s.workDir}/src`);n&&n.length>0&&(e.srcStructure=n.slice(0,20));}return e.files.length>0?e:null}catch{return null}}async function tP(s,e){if(!s.llmCall)return [];let t=[];if(e.packageJson){let r=e.packageJson;t.push(`\u9879\u76EE\u540D\u79F0: ${r.name||"\u672A\u77E5"}`),t.push(`\u63CF\u8FF0: ${r.description||"\u65E0"}`);let o=Object.keys(r.dependencies||{}).slice(0,15),i=Object.keys(r.devDependencies||{}).slice(0,10);o.length>0&&t.push(`\u4E3B\u8981\u4F9D\u8D56: ${o.join(", ")}`),i.length>0&&t.push(`\u5F00\u53D1\u4F9D\u8D56: ${i.join(", ")}`);}e.srcStructure&&t.push(`src \u76EE\u5F55\u7ED3\u6784: ${e.srcStructure.join(", ")}`),t.push(`\u6839\u76EE\u5F55\u6587\u4EF6: ${e.files.join(", ")}`),e.readme&&t.push(`README \u6458\u8981:
3557
3557
  ${e.readme.slice(0,500)}`);let n=`\u57FA\u4E8E\u4EE5\u4E0B\u9879\u76EE\u4FE1\u606F\uFF0C\u751F\u6210\u9002\u5408\u8FD9\u4E2A\u9879\u76EE\u7684 Agent \u89D2\u8272\u914D\u7F6E\u3002
3558
3558
 
3559
3559
  ## \u9879\u76EE\u4FE1\u606F
@@ -3580,7 +3580,7 @@ ${t.join(`
3580
3580
  [
3581
3581
  {"id": "programmer", "name": "\u7A0B\u5E8F\u5458", "description": "\u7F16\u5199\u6838\u5FC3\u4EE3\u7801", "capabilities": ["coding", "debugging"], "priority": 1},
3582
3582
  {"id": "ui-designer", "name": "UI\u8BBE\u8BA1\u5E08", "description": "\u4F18\u5316\u754C\u9762\u548C\u4EA4\u4E92", "capabilities": ["ui", "css", "design"], "priority": 2}
3583
- ]`;try{let o=(await s.llmCall("\u4F60\u662F\u4E00\u4E2A AI \u4EE3\u7406\u56E2\u961F\u914D\u7F6E\u4E13\u5BB6\uFF0C\u64C5\u957F\u5206\u6790\u9879\u76EE\u5E76\u751F\u6210\u6700\u4F18\u7684\u89D2\u8272\u5206\u5DE5\u3002",n)).match(/\[[\s\S]*\]/);return o?JSON.parse(o[0]).filter(a=>a.id&&a.name&&a.description&&Array.isArray(a.capabilities)&&typeof a.priority=="number").slice(0,6):[]}catch{return []}}function tP(s,e){let t=s.userConfig;t.collab||(t.collab={workerPool:[]}),t.collab.networkRoles=e,Ae(t),s.updateConfig(t);}Fc();p.info("CLI","Starting Neox CLI");process.env.CLI_DEBUG==="1"&&(Ht.start(5e3),p.info("CLI","Health monitor started for debugging"));var JY={log:console.log.bind(console),error:console.error.bind(console),warn:console.warn.bind(console)};process.env.CLI_DEBUG==="1"&&(console.log=(...s)=>{let e=s.map(t=>typeof t=="string"?t:JSON.stringify(t)).join(" ");p.debug("CONSOLE",e);},console.error=(...s)=>{let e=s.map(t=>typeof t=="string"?t:JSON.stringify(t)).join(" ");p.error("CONSOLE",e);},console.warn=(...s)=>{let e=s.map(t=>typeof t=="string"?t:JSON.stringify(t)).join(" ");p.warn("CONSOLE",e);});setInterval(()=>{performance$1.clearMarks(),performance$1.clearMeasures();},6e4);var mP=fileURLToPath(import.meta.url);dirname(mP);var lC=false,_m=class{runner=null;memory;llmProvider;providerControls=null;workDir;model;provider;providerId;providerSettings;providerStore;sessionRequests=0;uiController=null;userConfig={};platformServices=dl();actionLog;hostService=new Dn({platformServices:this.platformServices});orchestrator;promptLock=null;promptLockResolver=null;approvalMode="auto";structuredOutput;compatProfile=null;memoryPressure;lastMemoryPressureState="unknown";autoCompactionInProgress=false;interactionMode="agent";pendingAttachments=[];tools=[];lastToolCallArgs=new Map;toolIdToName=new Map;toolIdToArgs=new Map;sessionSync=null;sessionManager;sessionEnabled=true;cliArgs;runtimeHost;isTaskRunning=false;exiting=false;runtimeInputTokens=0;runtimeOutputTokens=0;streamingTokenCount=0;currentSession;thinkingMode;permissionManager;remoteServer=null;remoteInputQueue=[];remoteQueueActive=false;helpMenuLastSelection="model";a2aAgentId="neox-cli";currentRunMode="single";singleRuntime=null;collabRuntime=null;cooperateRuntime=null;networkRuntime=null;networkUsageSink=null;initRunModeFromConfig(){let e=this.userConfig.runMode;e&&xn.isValidMode(e)?this.currentRunMode=e:this.currentRunMode="single",p.info("MODE",`Run mode initialized: ${this.currentRunMode}`);}initThreeRuntimes(){let e=this.buildInstructions(),t="";if(typeof e=="string")t=e;else if(typeof e=="function"){let r=e({runContext:{}},{name:"Neox",description:"AI coding assistant"});t=typeof r=="string"?r:"";}let n={services:this.platformServices,permissionManager:this.permissionManager,tools:this.tools,memory:this.memory,workDir:this.workDir,providerId:this.providerId,modelName:this.model,resolveProvider:(r,o)=>{let i=this.resolveProviderForRun(r,o);if(!i.provider){let a=this.resolveProvider(r);return {provider:a,llmConfig:{model:o||this.model,maxInputTokens:a.contextWindow||128e3}}}return i},systemPrompt:t,ccbReviewMode:new Nt().getCCBReviewMode(),workerModels:new Nt().getEnabledWorkerModels().map(r=>({providerId:r.providerId,model:r.model,traits:r.traits}))};try{this.singleRuntime=new Vs(n),p.info("MODE","SingleAgentRuntime initialized");}catch(r){p.error("MODE","Failed to init SingleAgentRuntime",{error:r});}try{this.collabRuntime=new Xs(n),p.info("MODE","CollabAgentRuntime initialized");}catch(r){p.error("MODE","Failed to init CollabAgentRuntime",{error:r});}try{this.cooperateRuntime=new Tr(n),p.info("MODE","CooperateRuntime initialized (Five-Layer Architecture)");}catch(r){p.error("MODE","Failed to init CooperateRuntime",{error:r});}try{let r=async(o,i,a)=>{if(!this.llmProvider)throw new Error("LLM Provider not initialized yet");p.debug("NETWORK_LLMCALL",">>> llmCall started",{systemPromptLength:o?.length,userPromptLength:i?.length,hasOnText:!!a?.onText});let l=[{role:"system",content:o},{role:"user",content:i}],c="",u=0,d=0,m=0,g=0,h=0,f=0;if(a?.onText&&this.llmProvider.chatStreamed){p.debug("NETWORK_LLMCALL",">>> using chatStreamed for streaming");let w=this.llmProvider.chatStreamed(l,{model:this.model,signal:a?.signal});for await(let E of w)E.type==="content_block_delta"&&E.delta?.text?(c+=E.delta.text,a.onText(E.delta.text)):E.type==="message_delta"&&E.usage?d=E.usage.output_tokens||0:E.type==="message_start"&&E.message?.usage&&(u=E.message.usage.input_tokens||0,m=E.message.usage.cache_read_input_tokens||0,g=E.message.usage.cache_creation_input_tokens||0);}else {p.debug("NETWORK_LLMCALL",">>> using chat() non-streaming");let w=12e4,E=new Promise((k,M)=>{setTimeout(()=>{M(new Error(`llmCall timeout after ${w/1e3}s`));},w);}),N=this.llmProvider.chat(l,{model:this.model,signal:a?.signal}),D=await Promise.race([N,E]);c=D.choices?.[0]?.message?.content||"";let $=D.usage;u=$?.prompt_tokens||0,d=$?.completion_tokens||0,h=$?.prompt_tokens_details?.cached_tokens||0,m=$?.cache_read_input_tokens||0,g=$?.cache_creation_input_tokens||0,f=$?.cached_tokens||0;}let v=Math.ceil((o.length+i.length)/4),b=Math.ceil(c.length/4),C=u||v,T=d||b;return this.networkUsageSink&&this.networkUsageSink({input:C,output:T,cacheRead:m||void 0,cacheCreation:g||void 0,openaiCached:h||void 0,cachedTokens:f||void 0}),p.debug("NETWORK_LLMCALL",">>> llmCall returning",{contentLength:c.length}),c};this.networkRuntime=new eo({llmCall:r,executionCapability:{orchestrator:this.orchestrator,tools:this.tools,permissionManager:this.permissionManager,memory:this.memory,workDir:this.workDir,providerId:this.providerId,modelName:this.model,resolveProvider:(o,i)=>this.resolveProviderForRun(o,i),maxIterations:30},minComplexityForNetwork:4,minAgentsRequired:2,biddingTimeout:3e4,negotiationTimeout:6e4,executionTimeout:3e5,maxNegotiationRounds:3,maxReplanAttempts:3,consensusThreshold:.67,autoCreateDefaultAgents:!0,customRoles:this.userConfig.collab?.networkRoles}),p.info("MODE","NetworkRuntime created (will start when llmProvider is ready)");}catch(r){p.error("MODE","Failed to init NetworkRuntime",{error:r});}}setRunMode(e){if(this.currentRunMode!==e){if(this.abortCurrentRunMode(),this.currentRunMode=e,this.saveRunModeToConfig(e),this.uiController){if(e==="cooperate"){let n=new Nt().getEnabledWorkerModels().map(r=>this.getModelShortName(r.model));this.uiController.updateCooperateStats({models:n.map(r=>({shortName:r,status:"idle"})),totalInputTokens:0,totalOutputTokens:0});}else this.uiController.clearCooperateStats();this.uiController.setRunMode(e);}p.info("MODE",`Switched to ${e} mode`);}}abortCurrentRunMode(){switch(this.currentRunMode){case "single":this.singleRuntime?.abort();break;case "collab":this.collabRuntime?.abort();break;case "cooperate":this.cooperateRuntime?.abort();break;case "network":this.networkRuntime?.stop();break}}saveRunModeToConfig(e){p.info("MODE",`Saving run mode to config: ${e}`),this.userConfig={...this.userConfig,runMode:e},Ae(this.userConfig),p.info("MODE",`Run mode saved: ${e}`);}getCurrentRunMode(){return this.currentRunMode}getCompactionThreshold(){return (this.userConfig.context||{}).thresholdPercent||85}getCompressionMode(){return (this.userConfig.context||{}).compressionMode||"sync"}getRemoteConfig(){return this.userConfig.remote??{}}getNormalizedRemoteConfig(e=false){let t=this.getRemoteConfig();return {enabled:t.enabled??false,networkMode:t.networkMode==="vps"?"vps":"lan",host:t.host||"0.0.0.0",port:t.port||7090,token:t.token||(e?cm():""),allowVoice:t.allowVoice??true,autoApprove:t.autoApprove??true}}updateRemoteConfig(e){let n={...this.getNormalizedRemoteConfig(),...e},r={...this.userConfig,remote:n};this.userConfig=r,Ae(r);}getRemoteStatus(){let e=this.getNormalizedRemoteConfig(),t=this.remoteServer?.getStatus(),n=t?.running?t.port:e.port;return {enabled:e.enabled,running:t?.running??false,networkMode:e.networkMode,host:e.host,port:n,token:e.token,clients:t?.clients??0,urls:this.getLanUrls(n)}}getLanUrls(e){let t=[],n=gi.networkInterfaces();for(let r of Object.keys(n)){let o=n[r]||[];for(let i of o)i.family==="IPv4"&&!i.internal&&t.push(`http://${i.address}:${e}`);}return t}regenerateRemoteToken(){let e=cm();return this.updateRemoteConfig({token:e}),this.remoteServer&&this.remoteServer.updateToken(e),e}async startRemoteServer(){let e=this.getNormalizedRemoteConfig(true);if(!e.enabled)return;let t=this.getRemoteConfig();if((!t.token||!t.host||!t.port||!t.networkMode)&&this.updateRemoteConfig(e),e.networkMode!=="lan"){this.logInfo("\u8FDC\u7A0B\u6A21\u5F0F\u5C1A\u672A\u542F\u7528","\u5F53\u524D\u4EC5\u652F\u6301 LAN \u6A21\u5F0F");return}this.remoteServer&&(await this.remoteServer.stop(),this.remoteServer=null),this.remoteServer=new hc({host:e.host,port:e.port,token:e.token,version:Mi,onRun:async n=>this.handleRemoteRun(n),onA2aRequest:async n=>this.handleA2aRequest(n),a2aAgentId:this.a2aAgentId,a2aCapabilities:["exec.delegate","exec.interrupt","exec.status","exec.progress","exec.plan","exec.summary"],a2aTopics:["state_snapshot","state_delta"]}),await this.remoteServer.start();}async stopRemoteServer(){this.remoteServer&&(await this.remoteServer.stop(),this.remoteServer=null);}enqueueExecutorRun(e,t,n){let r=e.trim();if(!r)return {ok:false,error:"Empty input"};this.remoteInputQueue.push({text:r,voice:n,source:t});let o=this.remoteInputQueue.length;return this.drainRemoteQueue(),{ok:true,queued:o>1,position:o}}async handleRemoteRun(e){return this.enqueueExecutorRun(e.text,"remote",e.voice)}async handleA2aRequest(e){let t=e.payload?.method,n=e.payload?.params??{};if(!t)return {error:{code:"invalid_method",message:"Missing method."}};switch(t){case "exec.status":return {result:{ok:true,running:this.isTaskRunning,status:"",summary:"",progress:null,updatedAt:null}};case "exec.progress":return {result:{ok:true,running:this.isTaskRunning,progress:null,updatedAt:null}};case "exec.plan":return {result:{ok:true,plan:null,progress:null,note:"Plan snapshot not available. Use progress signals instead."}};case "exec.summary":{let r=this.userConfig.language??"zh";return {result:{ok:true,summary:await this.actionLog.getContextSummary({language:r,maxItems:typeof n.maxItems=="number"?n.maxItems:void 0,maxChars:typeof n.maxChars=="number"?n.maxChars:void 0,query:typeof n.query=="string"?n.query:void 0})??"",query:n.query??""}}}case "exec.delegate":{let r=typeof n.prompt=="string"?n.prompt.trim():"";return r?{result:{...this.enqueueExecutorRun(r,"remote"),requestId:e.id,sessionId:typeof n.sessionId=="string"?n.sessionId:"a2a"}}:{error:{code:"empty_input",message:"Empty delegate prompt."}}}case "exec.interrupt":return this.runtimeHost.interrupt(),{result:{ok:true,message:"Executor interrupted."}};default:return {error:{code:"unsupported_method",message:`Unsupported method ${t}.`}}}}async drainRemoteQueue(){if(!this.remoteQueueActive){this.remoteQueueActive=true;try{for(;this.remoteInputQueue.length>0;){if(this.isTaskRunning){await new Promise(t=>setTimeout(t,200));continue}let e=this.remoteInputQueue.shift();e&&await this.handleUserInput(e.text,void 0,e.source);}}finally{this.remoteQueueActive=false;}}}currentMode="agent";constructor(e,t,n,r){this.cliArgs=r||im(),this.userConfig=nt(),this.approvalMode=this.userConfig.approvalMode||"auto",this.providerStore=new ze(this.userConfig),this.workDir=he.resolve(t||this.cliArgs.workDir||process.cwd()),this.actionLog=new Ai({workspacePath:this.workDir,source:"cli",agentName:"Neox CLI"}),this.structuredOutput=cv(this.cliArgs.outputSchema),this.sessionManager=new Pn,this.sessionEnabled=!this.cliArgs.noSession;let o=this.resolveProvider(n);this.providerSettings=o,this.providerId=o.id,this.provider=o.protocol;let i=e||this.providerStore.resolveModel(o.id);if(!i)throw new Error(`Provider "${o.name}" does not have any models configured. Use /model add to configure one.`);this.model=i,this.providerStore.setLastSelectedModel(o.id,this.model),this.refreshProviderSettings(),this.orchestrator=new Nn({hostService:this.hostService,resolveProvider:(a,l)=>this.resolveProviderForRun(a,l),actionLog:this.actionLog}),process.chdir(this.workDir),process.env.NEOX_WORKDIR=this.workDir,this.saveWorkspaceHistory(this.getWorkspaceHistory()),this.initRunModeFromConfig();}async init(){await ay(this.platformServices),await this.actionLog.setWorkspace(this.workDir);let e=this.approvalMode==="auto";e?this.currentMode="auto":this.approvalMode==="manual"&&(this.currentMode="agent"),this.permissionManager=mf(e),this.tools=await Ls(this.workDir,this.platformServices),this.memory=Js(500),this.initThreeRuntimes();let t={maxIterations:0,temperature:.7,mode:this.currentMode};this.hostService.setWorkspace(this.workDir);let n=this.buildRuntimeHostConfig(t);this.runtimeHost=await this.hostService.getOrCreateHost(n),this.runtimeHost.setSandboxMode(Br()),df((r,o,i,a)=>this.promptSelect(r,o,i,a)),this.compatProfile&&!this.memoryPressure&&this.resetMemoryPressureMonitor();}applyProviderDefaults(){this.providerSettings&&(this.providerSettings.protocol==="anthropic"&&(this.model.includes("opus-4-5")||this.model.includes("opus-4.5")||this.model.endsWith("-thinking"))&&(this.thinkingMode="enabled",process.env.CLI_DEBUG==="1"&&p.debug("PROVIDER",`Claude thinking auto-enabled for model: ${this.model}`)),this.providerSettings.protocol==="gemini"&&(this.model.includes("gemini-3")||this.model.includes("preview"))&&(this.thinkingMode="enabled",process.env.CLI_DEBUG==="1"&&p.debug("PROVIDER",`Gemini thinking auto-enabled for model: ${this.model}`)));}resolveProviderForRun(e,t){let n=e?this.getProviderByIdentifier(e):this.providerSettings;if(!n)return {provider:null,llmConfig:null};let r=t||(n.id===this.providerId?this.model:this.providerStore.resolveModel(n.id));if(!r)return {provider:n,llmConfig:null};let o=n.models?.find(a=>a.name===r),i=n.id===this.providerId&&r===this.model?this.compatProfile??null:_l(r,o?.compat);return {provider:n,llmConfig:{model:r,providerName:n.name,compatProfile:i,maxInputTokens:n.maxInputTokens}}}buildAgentConfigForRun(){return {maxIterations:0,temperature:.7,mode:this.currentMode}}syncRuntimeHostForRun(e){this.runtimeHost!==e&&(this.runtimeHost=e),this.runtimeHost.setSandboxMode(Br()),this.sessionEnabled&&this.currentSession&&this.sessionSync&&this.runtimeHost.setSession(this.currentSession,this.sessionSync);}async runCollabModeTask(e,t){if(!this.collabRuntime){p.warn("MODE","CollabAgentRuntime not initialized, falling back to single mode");let v=await this.runOrchestratedTask(e,t);this.maybeTriggerCompletionAlerts(v);return}p.info("MODE","Running collab mode task"),this.uiController&&this.uiController.updateStatus("\u{1F91D} \u534F\u4F5C\u6A21\u5F0F\u6267\u884C\u4E2D...","thinking");let n=0,r=new Set,o=0,i=new Map,a=new Map,l=new Map,c=new Map,u=new Map,d=new Map,m=v=>{if(!v)return;let b=v.trim();if(b)return b.length>18?b.substring(0,15)+"...":b},g=v=>{p.info("MODE",`\u{1F514} Worker start event received: ${v.agentId}`,{task:v.task.substring(0,50)});let b=m(v.model);if(l.set(v.agentId,"running"),c.set(v.agentId,v.task),this.uiController&&(this.uiController.startTaskTimer(),this.uiController.updateStatus(`[${v.agentId}] \u5F00\u59CB\u6267\u884C...`,"thinking"),v.agentId!=="Main"&&(o++,d.set(v.agentId,o),this.uiController.addAgentSpawnEntry(v.agentId,o,v.task,b)),this.uiController.startWorkerStreaming(v.agentId),r.add(v.agentId)),v.agentId==="Main")u.set(v.agentId,b?`Main Agent (${b})`:"Main Agent");else {let C=d.get(v.agentId)??o;u.set(v.agentId,b?`Worker-${C}`:`Worker-${C}`);}n=0;},h=v=>{let{agentId:b,event:C,tracker:T}=v;if(p.debug("MODE",`\u{1F514} Worker event: ${b} - ${C.type}`,{eventType:C.type,hasDelta:!!C.delta,deltaLength:C.delta?.length,hasUiController:!!this.uiController}),!this.uiController)return;let w=["spawn_agent","delegate_task","query_agent","send_message","wait_result","wait_all","terminate_agent"];switch(C.type){case "tool_call_start":{let E=C.name;C.toolId||`${b}_${E}_${C.timestamp||Date.now()}`;if(this.uiController.completeWorkerStreaming(b),w.includes(E)){let D=C.args||C.input||{},$="",k,M,_;switch(E){case "spawn_agent":$="\u{1F9E0} \u51B3\u5B9A\u521B\u5EFA\u534F\u4F5C Agent",_=`\u4EFB\u52A1: ${D.task?.substring(0,80)||"\u4EFB\u52A1"}`,D.traits?.length&&(_+=`
3583
+ ]`;try{let o=(await s.llmCall("\u4F60\u662F\u4E00\u4E2A AI \u4EE3\u7406\u56E2\u961F\u914D\u7F6E\u4E13\u5BB6\uFF0C\u64C5\u957F\u5206\u6790\u9879\u76EE\u5E76\u751F\u6210\u6700\u4F18\u7684\u89D2\u8272\u5206\u5DE5\u3002",n)).match(/\[[\s\S]*\]/);return o?JSON.parse(o[0]).filter(a=>a.id&&a.name&&a.description&&Array.isArray(a.capabilities)&&typeof a.priority=="number").slice(0,6):[]}catch{return []}}function nP(s,e){let t=s.userConfig;t.collab||(t.collab={workerPool:[]}),t.collab.networkRoles=e,Ae(t),s.updateConfig(t);}Fc();p.info("CLI","Starting Neox CLI");process.env.CLI_DEBUG==="1"&&(Ht.start(5e3),p.info("CLI","Health monitor started for debugging"));var VY={log:console.log.bind(console),error:console.error.bind(console),warn:console.warn.bind(console)};process.env.CLI_DEBUG==="1"&&(console.log=(...s)=>{let e=s.map(t=>typeof t=="string"?t:JSON.stringify(t)).join(" ");p.debug("CONSOLE",e);},console.error=(...s)=>{let e=s.map(t=>typeof t=="string"?t:JSON.stringify(t)).join(" ");p.error("CONSOLE",e);},console.warn=(...s)=>{let e=s.map(t=>typeof t=="string"?t:JSON.stringify(t)).join(" ");p.warn("CONSOLE",e);});setInterval(()=>{performance$1.clearMarks(),performance$1.clearMeasures();},6e4);var gP=fileURLToPath(import.meta.url);dirname(gP);var lC=false,_m=class{runner=null;memory;llmProvider;providerControls=null;workDir;model;provider;providerId;providerSettings;providerStore;sessionRequests=0;uiController=null;userConfig={};platformServices=dl();actionLog;hostService=new Dn({platformServices:this.platformServices});orchestrator;promptLock=null;promptLockResolver=null;approvalMode="auto";structuredOutput;compatProfile=null;memoryPressure;lastMemoryPressureState="unknown";autoCompactionInProgress=false;interactionMode="agent";pendingAttachments=[];tools=[];lastToolCallArgs=new Map;toolIdToName=new Map;toolIdToArgs=new Map;sessionSync=null;sessionManager;sessionEnabled=true;cliArgs;runtimeHost;isTaskRunning=false;exiting=false;runtimeInputTokens=0;runtimeOutputTokens=0;streamingTokenCount=0;currentSession;thinkingMode;permissionManager;remoteServer=null;remoteInputQueue=[];remoteQueueActive=false;helpMenuLastSelection="model";a2aAgentId="neox-cli";currentRunMode="single";singleRuntime=null;collabRuntime=null;cooperateRuntime=null;networkRuntime=null;networkUsageSink=null;initRunModeFromConfig(){let e=this.userConfig.runMode;e&&xn.isValidMode(e)?this.currentRunMode=e:this.currentRunMode="single",p.info("MODE",`Run mode initialized: ${this.currentRunMode}`);}initThreeRuntimes(){let e=this.buildInstructions(),t="";if(typeof e=="string")t=e;else if(typeof e=="function"){let r=e({runContext:{}},{name:"Neox",description:"AI coding assistant"});t=typeof r=="string"?r:"";}let n={services:this.platformServices,permissionManager:this.permissionManager,tools:this.tools,memory:this.memory,workDir:this.workDir,providerId:this.providerId,modelName:this.model,resolveProvider:(r,o)=>{let i=this.resolveProviderForRun(r,o);if(!i.provider){let a=this.resolveProvider(r);return {provider:a,llmConfig:{model:o||this.model,maxInputTokens:a.contextWindow||128e3}}}return i},systemPrompt:t,ccbReviewMode:new Nt().getCCBReviewMode(),workerModels:new Nt().getEnabledWorkerModels().map(r=>({providerId:r.providerId,model:r.model,traits:r.traits}))};try{this.singleRuntime=new Vs(n),p.info("MODE","SingleAgentRuntime initialized");}catch(r){p.error("MODE","Failed to init SingleAgentRuntime",{error:r});}try{this.collabRuntime=new Xs(n),p.info("MODE","CollabAgentRuntime initialized");}catch(r){p.error("MODE","Failed to init CollabAgentRuntime",{error:r});}try{this.cooperateRuntime=new Tr(n),p.info("MODE","CooperateRuntime initialized (Five-Layer Architecture)");}catch(r){p.error("MODE","Failed to init CooperateRuntime",{error:r});}try{let r=async(o,i,a)=>{if(!this.llmProvider)throw new Error("LLM Provider not initialized yet");p.debug("NETWORK_LLMCALL",">>> llmCall started",{systemPromptLength:o?.length,userPromptLength:i?.length,hasOnText:!!a?.onText});let l=[{role:"system",content:o},{role:"user",content:i}],c="",u=0,d=0,m=0,g=0,h=0,f=0;if(a?.onText&&this.llmProvider.chatStreamed){p.debug("NETWORK_LLMCALL",">>> using chatStreamed for streaming");let w=this.llmProvider.chatStreamed(l,{model:this.model,signal:a?.signal});for await(let E of w)E.type==="content_block_delta"&&E.delta?.text?(c+=E.delta.text,a.onText(E.delta.text)):E.type==="message_delta"&&E.usage?d=E.usage.output_tokens||0:E.type==="message_start"&&E.message?.usage&&(u=E.message.usage.input_tokens||0,m=E.message.usage.cache_read_input_tokens||0,g=E.message.usage.cache_creation_input_tokens||0);}else {p.debug("NETWORK_LLMCALL",">>> using chat() non-streaming");let w=12e4,E=new Promise((k,M)=>{setTimeout(()=>{M(new Error(`llmCall timeout after ${w/1e3}s`));},w);}),N=this.llmProvider.chat(l,{model:this.model,signal:a?.signal}),D=await Promise.race([N,E]);c=D.choices?.[0]?.message?.content||"";let $=D.usage;u=$?.prompt_tokens||0,d=$?.completion_tokens||0,h=$?.prompt_tokens_details?.cached_tokens||0,m=$?.cache_read_input_tokens||0,g=$?.cache_creation_input_tokens||0,f=$?.cached_tokens||0;}let v=Math.ceil((o.length+i.length)/4),b=Math.ceil(c.length/4),C=u||v,T=d||b;return this.networkUsageSink&&this.networkUsageSink({input:C,output:T,cacheRead:m||void 0,cacheCreation:g||void 0,openaiCached:h||void 0,cachedTokens:f||void 0}),p.debug("NETWORK_LLMCALL",">>> llmCall returning",{contentLength:c.length}),c};this.networkRuntime=new eo({llmCall:r,executionCapability:{orchestrator:this.orchestrator,tools:this.tools,permissionManager:this.permissionManager,memory:this.memory,workDir:this.workDir,providerId:this.providerId,modelName:this.model,resolveProvider:(o,i)=>this.resolveProviderForRun(o,i),maxIterations:30},minComplexityForNetwork:4,minAgentsRequired:2,biddingTimeout:3e4,negotiationTimeout:6e4,executionTimeout:3e5,maxNegotiationRounds:3,maxReplanAttempts:3,consensusThreshold:.67,autoCreateDefaultAgents:!0,customRoles:this.userConfig.collab?.networkRoles}),p.info("MODE","NetworkRuntime created (will start when llmProvider is ready)");}catch(r){p.error("MODE","Failed to init NetworkRuntime",{error:r});}}setRunMode(e){if(this.currentRunMode!==e){if(this.abortCurrentRunMode(),this.currentRunMode=e,this.saveRunModeToConfig(e),this.uiController){if(e==="cooperate"){let n=new Nt().getEnabledWorkerModels().map(r=>this.getModelShortName(r.model));this.uiController.updateCooperateStats({models:n.map(r=>({shortName:r,status:"idle"})),totalInputTokens:0,totalOutputTokens:0});}else this.uiController.clearCooperateStats();this.uiController.setRunMode(e);}p.info("MODE",`Switched to ${e} mode`);}}abortCurrentRunMode(){switch(this.currentRunMode){case "single":this.singleRuntime?.abort();break;case "collab":this.collabRuntime?.abort();break;case "cooperate":this.cooperateRuntime?.abort();break;case "network":this.networkRuntime?.stop();break}}saveRunModeToConfig(e){p.info("MODE",`Saving run mode to config: ${e}`),this.userConfig={...this.userConfig,runMode:e},Ae(this.userConfig),p.info("MODE",`Run mode saved: ${e}`);}getCurrentRunMode(){return this.currentRunMode}getCompactionThreshold(){return (this.userConfig.context||{}).thresholdPercent||85}getCompressionMode(){return (this.userConfig.context||{}).compressionMode||"sync"}getRemoteConfig(){return this.userConfig.remote??{}}getNormalizedRemoteConfig(e=false){let t=this.getRemoteConfig();return {enabled:t.enabled??false,networkMode:t.networkMode==="vps"?"vps":"lan",host:t.host||"0.0.0.0",port:t.port||7090,token:t.token||(e?cm():""),allowVoice:t.allowVoice??true,autoApprove:t.autoApprove??true}}updateRemoteConfig(e){let n={...this.getNormalizedRemoteConfig(),...e},r={...this.userConfig,remote:n};this.userConfig=r,Ae(r);}getRemoteStatus(){let e=this.getNormalizedRemoteConfig(),t=this.remoteServer?.getStatus(),n=t?.running?t.port:e.port;return {enabled:e.enabled,running:t?.running??false,networkMode:e.networkMode,host:e.host,port:n,token:e.token,clients:t?.clients??0,urls:this.getLanUrls(n)}}getLanUrls(e){let t=[],n=gi.networkInterfaces();for(let r of Object.keys(n)){let o=n[r]||[];for(let i of o)i.family==="IPv4"&&!i.internal&&t.push(`http://${i.address}:${e}`);}return t}regenerateRemoteToken(){let e=cm();return this.updateRemoteConfig({token:e}),this.remoteServer&&this.remoteServer.updateToken(e),e}async startRemoteServer(){let e=this.getNormalizedRemoteConfig(true);if(!e.enabled)return;let t=this.getRemoteConfig();if((!t.token||!t.host||!t.port||!t.networkMode)&&this.updateRemoteConfig(e),e.networkMode!=="lan"){this.logInfo("\u8FDC\u7A0B\u6A21\u5F0F\u5C1A\u672A\u542F\u7528","\u5F53\u524D\u4EC5\u652F\u6301 LAN \u6A21\u5F0F");return}this.remoteServer&&(await this.remoteServer.stop(),this.remoteServer=null),this.remoteServer=new hc({host:e.host,port:e.port,token:e.token,version:Mi,onRun:async n=>this.handleRemoteRun(n),onA2aRequest:async n=>this.handleA2aRequest(n),a2aAgentId:this.a2aAgentId,a2aCapabilities:["exec.delegate","exec.interrupt","exec.status","exec.progress","exec.plan","exec.summary"],a2aTopics:["state_snapshot","state_delta"]}),await this.remoteServer.start();}async stopRemoteServer(){this.remoteServer&&(await this.remoteServer.stop(),this.remoteServer=null);}enqueueExecutorRun(e,t,n){let r=e.trim();if(!r)return {ok:false,error:"Empty input"};this.remoteInputQueue.push({text:r,voice:n,source:t});let o=this.remoteInputQueue.length;return this.drainRemoteQueue(),{ok:true,queued:o>1,position:o}}async handleRemoteRun(e){return this.enqueueExecutorRun(e.text,"remote",e.voice)}async handleA2aRequest(e){let t=e.payload?.method,n=e.payload?.params??{};if(!t)return {error:{code:"invalid_method",message:"Missing method."}};switch(t){case "exec.status":return {result:{ok:true,running:this.isTaskRunning,status:"",summary:"",progress:null,updatedAt:null}};case "exec.progress":return {result:{ok:true,running:this.isTaskRunning,progress:null,updatedAt:null}};case "exec.plan":return {result:{ok:true,plan:null,progress:null,note:"Plan snapshot not available. Use progress signals instead."}};case "exec.summary":{let r=this.userConfig.language??"zh";return {result:{ok:true,summary:await this.actionLog.getContextSummary({language:r,maxItems:typeof n.maxItems=="number"?n.maxItems:void 0,maxChars:typeof n.maxChars=="number"?n.maxChars:void 0,query:typeof n.query=="string"?n.query:void 0})??"",query:n.query??""}}}case "exec.delegate":{let r=typeof n.prompt=="string"?n.prompt.trim():"";return r?{result:{...this.enqueueExecutorRun(r,"remote"),requestId:e.id,sessionId:typeof n.sessionId=="string"?n.sessionId:"a2a"}}:{error:{code:"empty_input",message:"Empty delegate prompt."}}}case "exec.interrupt":return this.runtimeHost.interrupt(),{result:{ok:true,message:"Executor interrupted."}};default:return {error:{code:"unsupported_method",message:`Unsupported method ${t}.`}}}}async drainRemoteQueue(){if(!this.remoteQueueActive){this.remoteQueueActive=true;try{for(;this.remoteInputQueue.length>0;){if(this.isTaskRunning){await new Promise(t=>setTimeout(t,200));continue}let e=this.remoteInputQueue.shift();e&&await this.handleUserInput(e.text,void 0,e.source);}}finally{this.remoteQueueActive=false;}}}currentMode="agent";constructor(e,t,n,r){this.cliArgs=r||im(),this.userConfig=nt(),this.approvalMode=this.userConfig.approvalMode||"auto",this.providerStore=new ze(this.userConfig),this.workDir=he.resolve(t||this.cliArgs.workDir||process.cwd()),this.actionLog=new Ai({workspacePath:this.workDir,source:"cli",agentName:"Neox CLI"}),this.structuredOutput=cv(this.cliArgs.outputSchema),this.sessionManager=new Pn,this.sessionEnabled=!this.cliArgs.noSession;let o=this.resolveProvider(n);this.providerSettings=o,this.providerId=o.id,this.provider=o.protocol;let i=e||this.providerStore.resolveModel(o.id);if(!i)throw new Error(`Provider "${o.name}" does not have any models configured. Use /model add to configure one.`);this.model=i,this.providerStore.setLastSelectedModel(o.id,this.model),this.refreshProviderSettings(),this.orchestrator=new Nn({hostService:this.hostService,resolveProvider:(a,l)=>this.resolveProviderForRun(a,l),actionLog:this.actionLog}),process.chdir(this.workDir),process.env.NEOX_WORKDIR=this.workDir,this.saveWorkspaceHistory(this.getWorkspaceHistory()),this.initRunModeFromConfig();}async init(){await ay(this.platformServices),await this.actionLog.setWorkspace(this.workDir);let e=this.approvalMode==="auto";e?this.currentMode="auto":this.approvalMode==="manual"&&(this.currentMode="agent"),this.permissionManager=mf(e),this.tools=await Ls(this.workDir,this.platformServices),this.memory=Js(500),this.initThreeRuntimes();let t={maxIterations:0,temperature:.7,mode:this.currentMode};this.hostService.setWorkspace(this.workDir);let n=this.buildRuntimeHostConfig(t);this.runtimeHost=await this.hostService.getOrCreateHost(n),this.runtimeHost.setSandboxMode(Br()),df((r,o,i,a)=>this.promptSelect(r,o,i,a)),this.compatProfile&&!this.memoryPressure&&this.resetMemoryPressureMonitor();}applyProviderDefaults(){this.providerSettings&&(this.providerSettings.protocol==="anthropic"&&(this.model.includes("opus-4-5")||this.model.includes("opus-4.5")||this.model.endsWith("-thinking"))&&(this.thinkingMode="enabled",process.env.CLI_DEBUG==="1"&&p.debug("PROVIDER",`Claude thinking auto-enabled for model: ${this.model}`)),this.providerSettings.protocol==="gemini"&&(this.model.includes("gemini-3")||this.model.includes("preview"))&&(this.thinkingMode="enabled",process.env.CLI_DEBUG==="1"&&p.debug("PROVIDER",`Gemini thinking auto-enabled for model: ${this.model}`)));}resolveProviderForRun(e,t){let n=e?this.getProviderByIdentifier(e):this.providerSettings;if(!n)return {provider:null,llmConfig:null};let r=t||(n.id===this.providerId?this.model:this.providerStore.resolveModel(n.id));if(!r)return {provider:n,llmConfig:null};let o=n.models?.find(a=>a.name===r),i=n.id===this.providerId&&r===this.model?this.compatProfile??null:_l(r,o?.compat);return {provider:n,llmConfig:{model:r,providerName:n.name,compatProfile:i,maxInputTokens:n.maxInputTokens}}}buildAgentConfigForRun(){return {maxIterations:0,temperature:.7,mode:this.currentMode}}syncRuntimeHostForRun(e){this.runtimeHost!==e&&(this.runtimeHost=e),this.runtimeHost.setSandboxMode(Br()),this.sessionEnabled&&this.currentSession&&this.sessionSync&&this.runtimeHost.setSession(this.currentSession,this.sessionSync);}async runCollabModeTask(e,t){if(!this.collabRuntime){p.warn("MODE","CollabAgentRuntime not initialized, falling back to single mode");let v=await this.runOrchestratedTask(e,t);this.maybeTriggerCompletionAlerts(v);return}p.info("MODE","Running collab mode task"),this.uiController&&this.uiController.updateStatus("\u{1F91D} \u534F\u4F5C\u6A21\u5F0F\u6267\u884C\u4E2D...","thinking");let n=0,r=new Set,o=0,i=new Map,a=new Map,l=new Map,c=new Map,u=new Map,d=new Map,m=v=>{if(!v)return;let b=v.trim();if(b)return b.length>18?b.substring(0,15)+"...":b},g=v=>{p.info("MODE",`\u{1F514} Worker start event received: ${v.agentId}`,{task:v.task.substring(0,50)});let b=m(v.model);if(l.set(v.agentId,"running"),c.set(v.agentId,v.task),this.uiController&&(this.uiController.startTaskTimer(),this.uiController.updateStatus(`[${v.agentId}] \u5F00\u59CB\u6267\u884C...`,"thinking"),v.agentId!=="Main"&&(o++,d.set(v.agentId,o),this.uiController.addAgentSpawnEntry(v.agentId,o,v.task,b)),this.uiController.startWorkerStreaming(v.agentId),r.add(v.agentId)),v.agentId==="Main")u.set(v.agentId,b?`Main Agent (${b})`:"Main Agent");else {let C=d.get(v.agentId)??o;u.set(v.agentId,b?`Worker-${C}`:`Worker-${C}`);}n=0;},h=v=>{let{agentId:b,event:C,tracker:T}=v;if(p.debug("MODE",`\u{1F514} Worker event: ${b} - ${C.type}`,{eventType:C.type,hasDelta:!!C.delta,deltaLength:C.delta?.length,hasUiController:!!this.uiController}),!this.uiController)return;let w=["spawn_agent","delegate_task","query_agent","send_message","wait_result","wait_all","terminate_agent"];switch(C.type){case "tool_call_start":{let E=C.name;C.toolId||`${b}_${E}_${C.timestamp||Date.now()}`;if(this.uiController.completeWorkerStreaming(b),w.includes(E)){let D=C.args||C.input||{},$="",k,M,_;switch(E){case "spawn_agent":$="\u{1F9E0} \u51B3\u5B9A\u521B\u5EFA\u534F\u4F5C Agent",_=`\u4EFB\u52A1: ${D.task?.substring(0,80)||"\u4EFB\u52A1"}`,D.traits?.length&&(_+=`
3584
3584
  \u7279\u6027: ${D.traits.join(", ")}`),D.model&&(_+=`
3585
3585
  \u6A21\u578B: ${D.model}`);break;case "delegate_task":$="\u{1F9E0} \u51B3\u5B9A\u59D4\u6D3E\u5B50\u4EFB\u52A1",_=`\u4EFB\u52A1: ${D.task?.substring(0,80)||"\u4EFB\u52A1"}`,D.traits?.length&&(_+=`
3586
3586
  \u7279\u6027: ${D.traits.join(", ")}`),D.model&&(_+=`
@@ -3605,7 +3605,7 @@ ${t.join(`
3605
3605
 
3606
3606
  Type /help for available commands`);}}async rebuildAgentAndRunner(){if(!this.providerSettings)throw new Error("No provider configured.");this.memory=Js(500),this.tools=await Ls(this.workDir,this.platformServices),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(Br()),this.resetMemoryPressureMonitor(),this.sessionEnabled&&this.currentSession){this.sessionSync=new Gs({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):(R(""),R(x.highlight(` ${e}`)),t&&R(x.dim(t)),R(""));}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 he.join(n,t.slice(2))}return he.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,r=o=>{try{let i=this.normalizeWorkspacePath(o);n.has(i)||(n.add(i),t.push(i));}catch{}};r(this.workDir);for(let o of e)r(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},Ae(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,r)=>{let o=he.resolve(n)===this.workDir,i=this.formatWorkspaceLabel(n),a=o?x.success("*"):x.dim(" ");t.push(`${x.dim(` ${r+1}.`)} ${a} ${x.info(i)}`);}),t.push(""),this.uiController&&typeof this.uiController.setCommandOutputLines=="function"){this.uiController.setCommandOutputLines(t);return}for(let n of t)R(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 r=await this.promptSelect("Workspace",n,t);if(r==="__list__"){this.showWorkspaceList(e);return}if(r==="__add__"){let o=await this.promptText("Workspace path",{allowEmpty:false});await this.switchWorkspace(o);return}await this.switchWorkspace(r);}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(!Je.existsSync(t)){this.logInfo("\u5DE5\u4F5C\u533A\u4E0D\u5B58\u5728",t);return}if(!Je.statSync(t).isDirectory()){this.logInfo("\u76EE\u6807\u4E0D\u662F\u76EE\u5F55",t);return}if(he.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.tools=await Ls(this.workDir,this.platformServices),this.memory=Js(500);let r={maxIterations:0,temperature:.7,mode:this.currentMode},o=this.buildRuntimeHostConfig(r);if(this.runtimeHost=await this.hostService.getOrCreateHost(o),this.runtimeHost.setSandboxMode(Br()),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 r=this.normalizeWorkspacePath(n),o=[r,...this.getWorkspaceHistory()];this.saveWorkspaceHistory(o),this.logInfo("\u5DF2\u6DFB\u52A0\u5DE5\u4F5C\u533A",this.formatWorkspaceLabel(r));}catch(r){this.logInfo("\u5DE5\u4F5C\u533A\u8DEF\u5F84\u65E0\u6548",r?.message||String(r));}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:gv,withRuntimeEvents:e=>this.withRuntimeEvents(e),promptSelect:(e,t,n)=>this.promptSelect(e,t,n)}}async withRuntimeEvents(e){let t=dm(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,r)=>this.providerStore.addModel(e,t,n,r),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,r)=>this.promptSelect(e,t,n,r),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,r)=>this.promptSelect(e,t,n,r),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,r)=>this.promptSelect(e,t,n,r),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;}}}getIndexCommandContext(){return {userConfig:this.userConfig,workspacePath:this.workDir,promptSelect:(e,t,n,r)=>this.promptSelect(e,t,n,r),logInfo:(e,t)=>this.logInfo(e,t),updateConfig:e=>{this.userConfig=e;}}}getContextCommandContext(){return {userConfig:this.userConfig,promptSelect:(e,t,n,r)=>this.promptSelect(e,t,n,r),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,r)=>this.promptSelect(e,t,n,r),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,r)=>this.promptSelect(e,t,n,r),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,promptSelect:(e,t,n,r)=>this.promptSelect(e,t,n,r),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;}}}getCollabCommandContext(){return {userConfig:this.userConfig,promptSelect:(e,t,n,r)=>this.promptSelect(e,t,n,r),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}
3607
3607
 
3608
- ${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,r)=>this.promptSelect(e,t,n,r),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}}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=he.isAbsolute(t)?t:he.resolve(process.cwd(),t);if(!Je.existsSync(n)){this.logInfo("\u6587\u4EF6\u4E0D\u5B58\u5728",n);return}let r=he.extname(n).toLowerCase(),o=bc[r];if(!o){this.logInfo("\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6",`\u5141\u8BB8\u7684\u7C7B\u578B: ${Object.keys(bc).join(", ")}`);return}try{let i=await Je.promises.readFile(n),a=`data:${o};base64,${i.toString("base64")}`;this.pendingAttachments.push({type:"image",data:a,name:he.basename(n)}),this.logInfo("\u5DF2\u6DFB\u52A0\u56FE\u7247\u9644\u4EF6",he.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}R(""),R(x.highlight(" Pending attachments:")),this.pendingAttachments.forEach((e,t)=>{let n=e.type==="url"?e.data:e.name||`Image ${t+1}`;R(x.dim(` ${t+1}. `)+x.info(n));}),R("");}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 hP(){if(process.platform==="win32"){let e=process.env.USERPROFILE,t=process.env.APPDATA;if(e){let n=he.join(e,".codex","config.toml");if(Je.existsSync(n))return n}if(t){let n=he.join(t,"codex","config.toml");if(Je.existsSync(n))return n}return null}else {let e=process.env.HOME;if(!e)return null;let t=he.join(e,".codex","config.toml");return Je.existsSync(t)?t:null}}function fP(s){let e={providers:{}},t=s.split(`
3609
- `),n="",r="";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",r=a[1],e.providers[r]={name:r};continue}if(i.startsWith("[")&&i.endsWith("]")){n="",r="";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"&&r){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[r];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 yP(){let s=[],e=hP();if(!e)return s;try{let t=Je.readFileSync(e,"utf-8"),n=fP(t),r=he.join(he.dirname(e),"auth.json"),o={};if(Je.existsSync(r))try{o=JSON.parse(Je.readFileSync(r,"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"),s.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 s}function mC(){let s=[],e=process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_AUTH_TOKEN;e&&e.trim()&&s.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"];s.push({name:n?"OpenAI Proxy":"OpenAI",protocol:l,apiKey:t.trim(),baseUrl:n,models:c});}let r=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY;r&&r.trim()&&s.push({name:"Gemini",protocol:"gemini",apiKey:r.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()&&s.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()&&s.push({name:"Doubao",protocol:"doubao",apiKey:i.trim(),baseUrl:process.env.DOUBAO_BASE_URL?.trim(),models:["doubao-pro-256k"]});let a=yP();for(let l of a)s.push(l);if(a.length===0){let l=process.env.CODEX_API_KEY,c=process.env.CODEX_BASE_URL?.trim();l&&l.trim()&&s.push({name:"Codex",protocol:"openai-responses",apiKey:l.trim(),baseUrl:c,models:["gpt-5.2-codex","gpt-5.1-codex"]});}return s}function gC(){let s=nt(),t=new ze(s).getDefaultProvider();return !(t&&t.apiKey&&t.apiKey.trim().length>0)}async function bP(){let s=mC();return new Promise(e=>{let t=false,n=rs(I.createElement(Gy,{detectedProviders:s,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 vP(){let s=mC();if(s.length===0)return false;let e=nt(),t=new ze(e);for(let n of s)t.addProvider({name:n.name,protocol:n.protocol,apiKey:n.apiKey,baseUrl:n.baseUrl,models:n.models,defaultModel:n.models[0],setAsDefault:s.length===1});return console.log(),console.log(Ie.green(`\u2713 \u5DF2\u4ECE\u73AF\u5883\u53D8\u91CF\u521B\u5EFA ${s.length} \u4E2A Provider\uFF01`)),console.log(Ie.dim(` \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230: ${sn}`)),console.log(),true}async function hC(){let s=nt(),t=new ze(s).getDefaultProvider();if(t&&t.apiKey&&t.apiKey.trim().length>0)return;let n=await CP();n||(console.log(),console.log(Ie.red("\u914D\u7F6E\u5DF2\u53D6\u6D88")),process.exit(1));let r=n.protocol,o=n.baseUrl?.trim()||wr[r],i=[n.model],a={providers:{}};new ze(a).addProvider({name:n.name.trim(),protocol:r,apiKey:n.apiKey.trim(),baseUrl:o,defaultModel:n.model,models:i,setAsDefault:true}),console.log(),console.log(Ie.green(`\u2713 Provider "${n.name.trim()}" \u914D\u7F6E\u6210\u529F!`)),console.log(Ie.dim(` \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230: ${sn}`)),console.log();}async function CP(){return new Promise(s=>{let e=false,t=rs(I.createElement(Wy,{onComplete:n=>{e||(e=true,t.unmount(),s(n));},onCancel:()=>{e||(e=true,t.unmount(),s(null));}}),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});})}async function xP(){let s=im();p.info("CLI","Arguments parsed",{model:s.model,provider:s.provider,workDir:s.workDir}),s.help&&(Xb(Mi),process.exit(0)),s.version&&(Qb(Mi),process.exit(0));try{if(gC()){let t=await bP();if(t==="exit"&&process.exit(0),t==="auto"&&vP(),t==="manual"){console.log(),console.log(Ie.yellow("\u8BF7\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u5E76\u586B\u5165\u60A8\u7684 API Key:")),console.log(Ie.cyan(` ${sn}`)),console.log();let{spawn:n}=await import('child_process'),r=process.env.EDITOR||process.env.VISUAL||(process.platform==="darwin"?"open":"xdg-open");console.log(Ie.dim(` \u4F7F\u7528 ${r} \u6253\u5F00\u914D\u7F6E\u6587\u4EF6...`)),n(r,[sn],{detached:!0,stdio:"ignore"}).unref(),console.log(),console.log(Ie.dim("\u7F16\u8F91\u5B8C\u6210\u540E\uFF0C\u8BF7\u91CD\u65B0\u8FD0\u884C CLI\u3002")),console.log(),process.exit(0);}}await hC();let e=new _m(s.model,s.workDir,s.provider,s);await e.init(),p.info("CLI","CLI initialized successfully"),await e.runInteractive();}catch(e){throw p.error("CLI","Fatal error in main",{error:e.message,stack:e.stack}),e}}process.on("SIGINT",()=>{gt.getBackgroundRunning().length>0&&gt.killAll(true);});var cC=Date.now(),TP=1e3,wP=5e3,kP=6e4,SP=setInterval(()=>{let s=Date.now(),e=s-cC;cC=s,e>wP&&e<kP&&p.warn("EVENT_LOOP",`\u26A0\uFE0F Event loop blocked for ${Math.round(e/1e3)}s`,{elapsedMs:e,elapsedSec:Math.round(e/1e3)});},TP);SP.unref();process.on("SIGTERM",()=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] SIGTERM received"),gt.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(`
3610
- `).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 s=process.stdin.isRaw;p.debug("TTY_STATE",` wasRaw: ${s}`),s!==!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(s){p.warn("SIGNAL","SIGCONT: failed to recover stdin",{error:s});}});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:s}=await Promise.resolve().then(()=>(iC(),oC));await s(),process.exit(0);}xP().catch(s=>{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: ${s.message}`),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in main() catch")),console.error(Ie.red(`
3611
- [x] Unexpected error:`),s.message),process.exit(1);});export{JY as originalConsole};
3608
+ ${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,r)=>this.promptSelect(e,t,n,r),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}}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=he.isAbsolute(t)?t:he.resolve(process.cwd(),t);if(!Je.existsSync(n)){this.logInfo("\u6587\u4EF6\u4E0D\u5B58\u5728",n);return}let r=he.extname(n).toLowerCase(),o=bc[r];if(!o){this.logInfo("\u4EC5\u652F\u6301\u56FE\u7247\u9644\u4EF6",`\u5141\u8BB8\u7684\u7C7B\u578B: ${Object.keys(bc).join(", ")}`);return}try{let i=await Je.promises.readFile(n),a=`data:${o};base64,${i.toString("base64")}`;this.pendingAttachments.push({type:"image",data:a,name:he.basename(n)}),this.logInfo("\u5DF2\u6DFB\u52A0\u56FE\u7247\u9644\u4EF6",he.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}R(""),R(x.highlight(" Pending attachments:")),this.pendingAttachments.forEach((e,t)=>{let n=e.type==="url"?e.data:e.name||`Image ${t+1}`;R(x.dim(` ${t+1}. `)+x.info(n));}),R("");}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 fP(){if(process.platform==="win32"){let e=process.env.USERPROFILE,t=process.env.APPDATA;if(e){let n=he.join(e,".codex","config.toml");if(Je.existsSync(n))return n}if(t){let n=he.join(t,"codex","config.toml");if(Je.existsSync(n))return n}return null}else {let e=process.env.HOME;if(!e)return null;let t=he.join(e,".codex","config.toml");return Je.existsSync(t)?t:null}}function yP(s){let e={providers:{}},t=s.split(`
3609
+ `),n="",r="";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",r=a[1],e.providers[r]={name:r};continue}if(i.startsWith("[")&&i.endsWith("]")){n="",r="";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"&&r){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[r];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 bP(){let s=[],e=fP();if(!e)return s;try{let t=Je.readFileSync(e,"utf-8"),n=yP(t),r=he.join(he.dirname(e),"auth.json"),o={};if(Je.existsSync(r))try{o=JSON.parse(Je.readFileSync(r,"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"),s.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 s}function mC(){let s=[],e=process.env.ANTHROPIC_API_KEY||process.env.ANTHROPIC_AUTH_TOKEN;e&&e.trim()&&s.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"];s.push({name:n?"OpenAI Proxy":"OpenAI",protocol:l,apiKey:t.trim(),baseUrl:n,models:c});}let r=process.env.GEMINI_API_KEY||process.env.GOOGLE_API_KEY;r&&r.trim()&&s.push({name:"Gemini",protocol:"gemini",apiKey:r.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()&&s.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()&&s.push({name:"Doubao",protocol:"doubao",apiKey:i.trim(),baseUrl:process.env.DOUBAO_BASE_URL?.trim(),models:["doubao-pro-256k"]});let a=bP();for(let l of a)s.push(l);if(a.length===0){let l=process.env.CODEX_API_KEY,c=process.env.CODEX_BASE_URL?.trim();l&&l.trim()&&s.push({name:"Codex",protocol:"openai-responses",apiKey:l.trim(),baseUrl:c,models:["gpt-5.2-codex","gpt-5.1-codex"]});}return s}function gC(){let s=nt(),t=new ze(s).getDefaultProvider();return !(t&&t.apiKey&&t.apiKey.trim().length>0)}async function vP(){let s=mC();return new Promise(e=>{let t=false,n=rs(I.createElement(Gy,{detectedProviders:s,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 CP(){let s=mC();if(s.length===0)return false;let e=nt(),t=new ze(e);for(let n of s)t.addProvider({name:n.name,protocol:n.protocol,apiKey:n.apiKey,baseUrl:n.baseUrl,models:n.models,defaultModel:n.models[0],setAsDefault:s.length===1});return console.log(),console.log(Ie.green(`\u2713 \u5DF2\u4ECE\u73AF\u5883\u53D8\u91CF\u521B\u5EFA ${s.length} \u4E2A Provider\uFF01`)),console.log(Ie.dim(` \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230: ${sn}`)),console.log(),true}async function hC(){let s=nt(),t=new ze(s).getDefaultProvider();if(t&&t.apiKey&&t.apiKey.trim().length>0)return;let n=await xP();n||(console.log(),console.log(Ie.red("\u914D\u7F6E\u5DF2\u53D6\u6D88")),process.exit(1));let r=n.protocol,o=n.baseUrl?.trim()||wr[r],i=[n.model],a={providers:{}};new ze(a).addProvider({name:n.name.trim(),protocol:r,apiKey:n.apiKey.trim(),baseUrl:o,defaultModel:n.model,models:i,setAsDefault:true}),console.log(),console.log(Ie.green(`\u2713 Provider "${n.name.trim()}" \u914D\u7F6E\u6210\u529F!`)),console.log(Ie.dim(` \u914D\u7F6E\u5DF2\u4FDD\u5B58\u5230: ${sn}`)),console.log();}async function xP(){return new Promise(s=>{let e=false,t=rs(I.createElement(Wy,{onComplete:n=>{e||(e=true,t.unmount(),s(n));},onCancel:()=>{e||(e=true,t.unmount(),s(null));}}),{stdout:process.stdout,stdin:process.stdin,exitOnCtrlC:false,patchConsole:false});})}async function TP(){let s=im();p.info("CLI","Arguments parsed",{model:s.model,provider:s.provider,workDir:s.workDir}),s.help&&(Xb(Mi),process.exit(0)),s.version&&(Qb(Mi),process.exit(0));try{if(gC()){let t=await vP();if(t==="exit"&&process.exit(0),t==="auto"&&CP(),t==="manual"){console.log(),console.log(Ie.yellow("\u8BF7\u7F16\u8F91\u914D\u7F6E\u6587\u4EF6\u5E76\u586B\u5165\u60A8\u7684 API Key:")),console.log(Ie.cyan(` ${sn}`)),console.log();let{spawn:n}=await import('child_process'),r=process.env.EDITOR||process.env.VISUAL||(process.platform==="darwin"?"open":"xdg-open");console.log(Ie.dim(` \u4F7F\u7528 ${r} \u6253\u5F00\u914D\u7F6E\u6587\u4EF6...`)),n(r,[sn],{detached:!0,stdio:"ignore"}).unref(),console.log(),console.log(Ie.dim("\u7F16\u8F91\u5B8C\u6210\u540E\uFF0C\u8BF7\u91CD\u65B0\u8FD0\u884C CLI\u3002")),console.log(),process.exit(0);}}await hC();let e=new _m(s.model,s.workDir,s.provider,s);await e.init(),p.info("CLI","CLI initialized successfully"),await e.runInteractive();}catch(e){throw p.error("CLI","Fatal error in main",{error:e.message,stack:e.stack}),e}}process.on("SIGINT",()=>{gt.getBackgroundRunning().length>0&&gt.killAll(true);});var cC=Date.now(),wP=1e3,kP=5e3,SP=6e4,_P=setInterval(()=>{let s=Date.now(),e=s-cC;cC=s,e>kP&&e<SP&&p.warn("EVENT_LOOP",`\u26A0\uFE0F Event loop blocked for ${Math.round(e/1e3)}s`,{elapsedMs:e,elapsedSec:Math.round(e/1e3)});},wP);_P.unref();process.on("SIGTERM",()=>{p.debug("TTY_STATE","\u{1F534} [CRITICAL] SIGTERM received"),gt.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(`
3610
+ `).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 s=process.stdin.isRaw;p.debug("TTY_STATE",` wasRaw: ${s}`),s!==!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(s){p.warn("SIGNAL","SIGCONT: failed to recover stdin",{error:s});}});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:s}=await Promise.resolve().then(()=>(iC(),oC));await s(),process.exit(0);}TP().catch(s=>{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: ${s.message}`),process.stdin.setRawMode(false),p.debug("TTY_STATE","\u2705 setRawMode(false) completed in main() catch")),console.error(Ie.red(`
3611
+ [x] Unexpected error:`),s.message),process.exit(1);});export{VY as originalConsole};