niumagents-cli 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nium.js +557 -379
- package/package.json +97 -97
package/dist/nium.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
`))):(console.log(oe.yellow(`\u26A0\uFE0F \u672A\u627E\u5230 config.example.json: ${e}`)),cl(c,JSON.stringify({models:{defaultModel:{apiKey:"your-api-key-here",baseURL:"https://api.openai.com/v1",model:"gpt-4o",provider:"openai",maxToken:128e3},liteModel:{apiKey:"your-api-key-here",baseURL:"https://api.openai.com/v1",model:"gpt-3.5-turbo",provider:"openai",maxToken:16385}},mcpServers:[]},null,2)),console.log(oe.green("\u2713 \u521B\u5EFA\u9ED8\u8BA4\u7684 .nium/config.json \u6587\u4EF6")),console.log(oe.yellow(`
|
|
5
|
-
\u26A0\uFE0F \u8BF7\u7F16\u8F91 .nium/config.json \u6587\u4EF6\u914D\u7F6E API \u5BC6\u94A5\u548C\u6A21\u578B
|
|
6
|
-
`)))}let t=se(o,"agents");ke(t)||(Qt(t,{recursive:!0}),console.log(oe.green("\u2713 \u521B\u5EFA .nium/agents \u76EE\u5F55")));let n=se(o,"docs");ke(n)||(Qt(n,{recursive:!0}),console.log(oe.green("\u2713 \u521B\u5EFA .nium/docs \u76EE\u5F55")));let r=se(o,"archives");ke(r)||(Qt(r,{recursive:!0}),console.log(oe.green("\u2713 \u521B\u5EFA .nium/archives \u76EE\u5F55")));let s=se(o,"logs");ke(s)||(Qt(s,{recursive:!0}),console.log(oe.green("\u2713 \u521B\u5EFA .nium/logs \u76EE\u5F55")));let i=gl(),a=se(o,".env");return ke(a)||(ke(i)?(ui(i,a),console.log(oe.green("\u2713 \u590D\u5236 examples/.env.example \u5230 .nium/.env"))):(console.log(oe.yellow(`\u26A0\uFE0F \u672A\u627E\u5230 .env.example: ${i}`)),console.log(oe.yellow(" \u5C06\u4F7F\u7528\u9ED8\u8BA4\u73AF\u5883\u53D8\u91CF\u914D\u7F6E")))),o}catch(t){console.log(oe.red(`\u274C \u521D\u59CB\u5316\u5DE5\u4F5C\u76EE\u5F55\u5931\u8D25: ${t.message}`)),process.exit(1)}}function le(o){return se(mi(),o)}var Zt,vo,bo,To,Le=S(()=>{Zt=typeof __dirname<"u"?__dirname:gi(ll(import.meta.url)),vo=null,bo=null,To=null});var ko,gr,Po=S(()=>{ko={level:"INFO",debugMode:!1,consoleOutput:!0,fileOutput:!0,enableTimestamp:!0,rotationStrategy:"daily",maxFileSize:10485760,maxFiles:30},gr={ERROR:0,WARN:1,INFO:2,SUCCESS:2,DEBUG:3,TRACE:4}});import gt from"chalk";var en,D,tn=S(()=>{en=class{colors;constructor(){this.colors={INFO:gt.blue,WARN:gt.yellow,ERROR:gt.red,SUCCESS:gt.green,DEBUG:gt.magenta,TRACE:gt.gray}}format(e){let t="";if(e.timestamp){let n=new Date(e.timestamp).toLocaleString("zh-CN");t+=`[${n}] `}return t+=`[${e.level.padEnd(7)}] ${e.message}`,e.context&&(t+=` ${JSON.stringify(e.context)}`),t}colorize(e,t){let n=this.colors[t];return n(e)}},D=new en});import{existsSync as pl,readFileSync as ml,appendFileSync as fi,writeFileSync as dl,createReadStream as fl}from"fs";import{createInterface as hl}from"readline";var pe,me,nn=S(()=>{pe=class{filePath;constructor(e){this.filePath=e}append(e){try{let t=JSON.stringify(e)+`
|
|
7
|
-
`;fi(this.filePath,t,"utf-8")}catch(t){throw new Error(`Failed to append to JSONL file: ${t.message}`)}}appendBatch(e){try{let t=e.map(n=>JSON.stringify(n)).join(`
|
|
2
|
+
var Fl=Object.defineProperty;var $r=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var C=(o,e)=>()=>(o&&(e=o(o=0)),e);var j=(o,e)=>{for(var t in e)Fl(o,t,{get:e[t],enumerable:!0})};import ne from"chalk";function jl(o){ht={...ht,...o}}function _o(o){ht.enableDebug=o}function sn(o,e,t,n=!0){let r=[],s=/^[✓✗⚠ℹ◆●]/.test(t);return n&&ht.enableSymbol&&o!=="INFO"&&!s&&r.push(ki[o](Ol[o])),e&&ht.enablePrefix&&r.push(ne.gray(`[${e}]`)),r.push(ki[o](t)),r.join(" ")}function ke(o,e=null){console.error(sn("ERROR",e,o))}function W(o,e=null){console.warn(sn("WARN",e,o))}function se(o,e=null){console.log(sn("INFO",e,o,!1))}function _(o,e=null){console.log(sn("SUCCESS",e,o))}function No(o,e=null){ht.enableDebug&&console.log(sn("DEBUG",e,o))}function an(o){console.log(o)}function Mr(o="\u2500",e=50){console.log(ne.gray(o.repeat(e)))}function _l(o,e="\u2550",t=50){let n=Math.max(0,Math.floor((t-o.length-2)/2)),r=e.repeat(t),s=e.repeat(n)+` ${o} `+e.repeat(n);console.log(ne.cyan(r)),console.log(ne.cyan(s)),console.log(ne.cyan(r))}function Nl(o,e,t){let n=Math.round(o/e*100),r="\u2588".repeat(Math.floor(n/5))+"\u2591".repeat(20-Math.floor(n/5));console.log(ne.blue(`[${o}/${e}]`)+" "+ne.cyan(r)+" "+ne.white(`${n}%`)+" "+ne.gray(t))}function Ul(o){for(let[e,t]of Object.entries(o))console.log(ne.cyan(` ${e}: `)+ne.white(t))}function Uo(){console.clear()}var Ol,ki,ht,cn=C(()=>{Ol={SUCCESS:"\u2713",ERROR:"\u2717",WARN:"\u26A0",INFO:"\u2139",DEBUG:"\u25C6"},ki={ERROR:ne.red,WARN:ne.yellow,INFO:ne.blue,SUCCESS:ne.green,DEBUG:ne.magenta},ht={enableDebug:!1,enablePrefix:!0,enableSymbol:!0}});import{existsSync as Me,mkdirSync as ln,copyFileSync as Ei,writeFileSync as Wl}from"fs";import{join as ie,dirname as Pi}from"path";import{fileURLToPath as Vl}from"url";function $i(){let o=[ie(un,"..","..","examples"),ie(un,"..","examples"),ie(un,"examples"),ie(un,"..","..","..","examples")];for(let e of o)if(Me(e))return Pi(e);return ie(un,"..")}function Mi(){return Wo||(Wo=ie(process.cwd(),".nium")),Wo}function zl(){if(!zo){let o=$i();zo=ie(o,"examples","config.example.json")}return zo}function Hl(){if(!Vo){let o=$i();Vo=ie(o,"examples",".env.example")}return Vo}function Ii(){let o=Mi(),e=zl();try{if(!Me(o)){se("\u521D\u59CB\u5316\u5DE5\u4F5C\u76EE\u5F55...","Init"),ln(o,{recursive:!0}),_("\u521B\u5EFA .nium \u76EE\u5F55","Init");let c=ie(o,"config.json");Me(e)?(Ei(e,c),_("\u590D\u5236 config.example.json \u5230 .nium/config.json","Init"),W("\u8BF7\u7F16\u8F91 .nium/config.json \u6587\u4EF6\u914D\u7F6E API \u5BC6\u94A5\u548C\u6A21\u578B","Init")):(W(`\u672A\u627E\u5230 config.example.json: ${e}`,"Init"),Wl(c,JSON.stringify({models:{defaultModel:{apiKey:"your-api-key-here",baseURL:"https://api.openai.com/v1",model:"gpt-4o",provider:"openai",maxToken:128e3},liteModel:{apiKey:"your-api-key-here",baseURL:"https://api.openai.com/v1",model:"gpt-3.5-turbo",provider:"openai",maxToken:16385}},mcpServers:[]},null,2)),_("\u521B\u5EFA\u9ED8\u8BA4\u7684 .nium/config.json \u6587\u4EF6","Init"),W("\u8BF7\u7F16\u8F91 .nium/config.json \u6587\u4EF6\u914D\u7F6E API \u5BC6\u94A5\u548C\u6A21\u578B","Init"))}let t=ie(o,"agents");Me(t)||(ln(t,{recursive:!0}),_("\u521B\u5EFA .nium/agents \u76EE\u5F55","Init"));let n=ie(o,"docs");Me(n)||(ln(n,{recursive:!0}),_("\u521B\u5EFA .nium/docs \u76EE\u5F55","Init"));let r=ie(o,"archives");Me(r)||(ln(r,{recursive:!0}),_("\u521B\u5EFA .nium/archives \u76EE\u5F55","Init"));let s=ie(o,"logs");Me(s)||(ln(s,{recursive:!0}),_("\u521B\u5EFA .nium/logs \u76EE\u5F55","Init"));let i=Hl(),a=ie(o,".env");return Me(a)||(Me(i)?(Ei(i,a),_("\u590D\u5236 examples/.env.example \u5230 .nium/.env","Init")):(W(`\u672A\u627E\u5230 .env.example: ${i}`,"Init"),W("\u5C06\u4F7F\u7528\u9ED8\u8BA4\u73AF\u5883\u53D8\u91CF\u914D\u7F6E","Init"))),o}catch(t){ke(`\u521D\u59CB\u5316\u5DE5\u4F5C\u76EE\u5F55\u5931\u8D25: ${t.message}`,"Init"),process.exit(1)}}function ge(o){return ie(Mi(),o)}var un,Wo,Vo,zo,je=C(()=>{cn();un=typeof __dirname<"u"?__dirname:Pi(Vl(import.meta.url)),Wo=null,Vo=null,zo=null});var Ho,Ir,Jo=C(()=>{Ho={level:"INFO",debugMode:!1,consoleOutput:!0,fileOutput:!0,enableTimestamp:!0,rotationStrategy:"daily",maxFileSize:10485760,maxFiles:30},Ir={ERROR:0,WARN:1,INFO:2,SUCCESS:2,DEBUG:3,TRACE:4}});import yt from"chalk";var gn,D,pn=C(()=>{gn=class{colors;constructor(){this.colors={INFO:yt.blue,WARN:yt.yellow,ERROR:yt.red,SUCCESS:yt.green,DEBUG:yt.magenta,TRACE:yt.gray}}format(e){let t="";if(e.timestamp){let i=new Date(e.timestamp).toLocaleString("zh-CN");t+=`[${i}] `}let n={INFO:"",WARN:"\u26A0",ERROR:"\u2717",SUCCESS:"\u2713",DEBUG:"\u25C6",TRACE:"\u25CF"},r=/^[✓✗⚠ℹ◆●]/.test(e.message),s=e.level==="INFO"||r?"":`${n[e.level]} `;return t+=`[${e.level.padEnd(7)}] ${s}${e.message}`,e.context&&(t+=` ${JSON.stringify(e.context)}`),t}colorize(e,t){let n=this.colors[t];return n(e)}},D=new gn});import{existsSync as Jl,readFileSync as Gl,appendFileSync as Ai,writeFileSync as Bl,createReadStream as ql}from"fs";import{createInterface as Kl}from"readline";var me,fe,dn=C(()=>{me=class{filePath;constructor(e){this.filePath=e}append(e){try{let t=JSON.stringify(e)+`
|
|
3
|
+
`;Ai(this.filePath,t,"utf-8")}catch(t){throw new Error(`Failed to append to JSONL file: ${t.message}`)}}appendBatch(e){try{let t=e.map(n=>JSON.stringify(n)).join(`
|
|
8
4
|
`)+`
|
|
9
|
-
`;
|
|
10
|
-
`;
|
|
11
|
-
`).filter(c=>c.trim().length>0),r=[],s=e.startLine||0,i=e.limit?s+e.limit:n.length,a=n.slice(s,i);for(let c of a)try{let l=JSON.parse(c);(!e.filter||e.filter(l))&&r.push(l)}catch{console.warn(`Invalid JSON line in ${this.filePath}: ${c.substring(0,50)}...`)}return r}catch(t){throw new Error(`Failed to read JSONL file: ${t.message}`)}}async readStream(e,t={}){if(this.exists())return new Promise((n,r)=>{let s=
|
|
12
|
-
`,"utf-8");let t=new
|
|
5
|
+
`;Ai(this.filePath,t,"utf-8")}catch(t){throw new Error(`Failed to append batch to JSONL file: ${t.message}`)}}create(e){try{let t=JSON.stringify(e)+`
|
|
6
|
+
`;Bl(this.filePath,t,"utf-8")}catch(t){throw new Error(`Failed to create JSONL file: ${t.message}`)}}getFilePath(){return this.filePath}},fe=class{filePath;constructor(e){this.filePath=e}exists(){return Jl(this.filePath)}readAllSync(e={}){if(!this.exists())return[];try{let n=Gl(this.filePath,"utf-8").split(`
|
|
7
|
+
`).filter(c=>c.trim().length>0),r=[],s=e.startLine||0,i=e.limit?s+e.limit:n.length,a=n.slice(s,i);for(let c of a)try{let l=JSON.parse(c);(!e.filter||e.filter(l))&&r.push(l)}catch{console.warn(`Invalid JSON line in ${this.filePath}: ${c.substring(0,50)}...`)}return r}catch(t){throw new Error(`Failed to read JSONL file: ${t.message}`)}}async readStream(e,t={}){if(this.exists())return new Promise((n,r)=>{let s=ql(this.filePath,{encoding:"utf-8"}),i=Kl({input:s,crlfDelay:1/0}),a=0,c=0,l=t.startLine||0,{limit:u}=t;i.on("line",async p=>{try{if(p.trim().length===0)return;if(a<l){a++;return}if(u&&c>=u){i.close();return}let g=JSON.parse(p);(!t.filter||t.filter(g))&&(await e(g,a),c++),a++}catch{console.warn(`Invalid JSON line at line ${a}: ${p.substring(0,50)}...`),a++}}),i.on("close",()=>{n()}),i.on("error",p=>{r(new Error(`Failed to read JSONL stream: ${p.message}`))})})}async count(){if(!this.exists())return 0;let e=0;return await this.readStream(()=>{e++}),e}getFilePath(){return this.filePath}}});import{existsSync as Go,mkdirSync as Yl,renameSync as Xl,writeFileSync as Li}from"fs";import{join as mn}from"path";function Ar(){return re.initLogger()}function Ri(o){re.configureLogger(o)}function Lr(o){re.setDebugMode(o)}function Di(o){re.setLogLevel(o)}function Fi(o){re.setFormatter(o)}var fn,re,Bo=C(()=>{je();dn();Jo();pn();fn=class{config;logsDir;currentLogPath;logDatePath;isInitialized=!1;formatter;constructor(){this.config={...Ho},this.logsDir=ge("logs"),this.currentLogPath=mn(this.logsDir,"current.jsonl"),this.logDatePath=mn(this.logsDir,".current_date"),this.formatter=D}getTodayDateString(){let e=new Date,t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${r}`}async getLogFileDate(){try{return Go(this.logDatePath)&&new fe(this.logDatePath).readAllSync()[0]?.date||null}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(D.colorize(`\u8BFB\u53D6\u65E5\u5FD7\u6587\u4EF6\u65E5\u671F\u5931\u8D25: ${t}`,"ERROR")),null}}async archiveLogFile(e){try{let t=mn(this.logsDir,`${e}.jsonl`);if(Go(t)){let r=new fe(this.currentLogPath).readAllSync();await new me(t).appendBatch(r),console.log(D.colorize(`\u2713 \u65E5\u5FD7\u5DF2\u8FFD\u52A0\u5230\u5F52\u6863\u6587\u4EF6: ${e}.jsonl`,"SUCCESS"))}else Xl(this.currentLogPath,t),console.log(D.colorize(`\u2713 \u65E5\u5FD7\u5DF2\u5F52\u6863: ${e}.jsonl`,"SUCCESS"))}catch(t){let n=t instanceof Error?t.message:String(t);console.error(D.colorize(`\u5F52\u6863\u65E5\u5FD7\u5931\u8D25: ${n}`,"ERROR"))}}async createNewLogFile(e){try{Li(this.currentLogPath,"","utf-8"),Li(this.logDatePath,JSON.stringify({date:e})+`
|
|
8
|
+
`,"utf-8");let t=new me(this.currentLogPath),n={timestamp:new Date().toISOString(),level:"INFO",message:`\u65E5\u5FD7\u6587\u4EF6\u521B\u5EFA - \u65E5\u671F: ${e}`,date:e};await t.append(n)}catch(t){let n=t instanceof Error?t.message:String(t);console.error(D.colorize(`\u521B\u5EFA\u65E5\u5FD7\u6587\u4EF6\u5931\u8D25: ${n}`,"ERROR"))}}async initLogger(){try{Go(this.logsDir)||(Yl(this.logsDir,{recursive:!0}),console.log(D.colorize("\u521B\u5EFA\u65E5\u5FD7\u76EE\u5F55: .nium/logs","DEBUG")));let e=this.getTodayDateString(),t=await this.getLogFileDate();(!t||t!==e)&&(t&&(console.log(D.colorize(`\u68C0\u6D4B\u5230\u65E7\u65E5\u5FD7\u6587\u4EF6 (${t})\uFF0C\u6B63\u5728\u5F52\u6863...`,"WARN")),await this.archiveLogFile(t)),await this.createNewLogFile(e),console.log(D.colorize(`\u2713 \u521B\u5EFA\u65B0\u65E5\u5FD7\u6587\u4EF6: ${e}`,"SUCCESS"))),this.isInitialized=!0}catch(e){let t=e instanceof Error?e.message:String(e);console.error(D.colorize(`\u521D\u59CB\u5316\u65E5\u5FD7\u7CFB\u7EDF\u5931\u8D25: ${t}`,"ERROR"))}}configureLogger(e){this.config={...this.config,...e},e.logDir&&(this.logsDir=e.logDir,this.currentLogPath=mn(this.logsDir,"current.jsonl"),this.logDatePath=mn(this.logsDir,".current_date")),e.formatter&&(this.formatter=e.formatter)}setFormatter(e){this.formatter=e}shouldLog(e){let t=this.config.debugMode?"DEBUG":this.config.level;return Ir[e]<=Ir[t]}extractSessionId(e){if(e&&typeof e=="object")return e.sessionId||e.id}hasContextLogMethod(e,t){return e&&typeof e[t]=="function"}async writeLog(e,t,n=null){try{if(!this.shouldLog(e))return;this.isInitialized||await this.initLogger();let r=typeof t=="string"?t:JSON.stringify(t),s=e.toLowerCase();if(this.hasContextLogMethod(n,s)){n[s](t);return}let i=new Date().toISOString(),a=this.getTodayDateString(),c={timestamp:i,level:e,message:r,sessionId:this.extractSessionId(n),date:a};if(this.config.consoleOutput){let l=this.formatter.format(c),u=this.formatter.colorize(l,e);console.log(u)}this.config.fileOutput&&await new me(this.currentLogPath).append(c)}catch(r){let s=r instanceof Error?r.message:String(r);console.error(D.colorize(`\u5199\u5165\u65E5\u5FD7\u5931\u8D25: ${s}`,"ERROR"))}}setDebugMode(e){this.config.debugMode=e}setLogLevel(e){this.config.level=e}},re=new fn});import{join as Oi}from"path";async function ji(o){try{let e=ge("logs"),t=Oi(e,"current.jsonl"),n=new fe(t);return await n.exists()?await n.readAllSync({filter:o?.level?s=>s.level===o.level:void 0,limit:o?.limit}):[]}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(D.colorize(`\u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${t}`,"ERROR")),[]}}async function _i(o,e){try{let t=ge("logs"),n=Oi(t,`${o}.jsonl`),r=new fe(n);return await r.exists()?await r.readAllSync({filter:e?.level?i=>i.level===e.level:void 0,limit:e?.limit}):[]}catch(t){let n=t instanceof Error?t.message:String(t);return console.error(D.colorize(`\u8BFB\u53D6\u5F52\u6863\u65E5\u5FD7\u5931\u8D25: ${n}`,"ERROR")),[]}}function Ni(o){return`[${new Date(o.timestamp).toLocaleString("zh-CN")}] [${o.level.padEnd(7)}] ${o.message}`}function Ui(o){let e={total:o.length,byLevel:{INFO:0,WARN:0,ERROR:0,SUCCESS:0,DEBUG:0,TRACE:0}};for(let t of o)t.level in e.byLevel&&e.byLevel[t.level]++;return e}var Wi=C(()=>{je();dn();pn()});async function Vi(o,e=null){await re.writeLog("INFO",o,e)}async function M(o,e=null){await re.writeLog("INFO",o,e)}async function zi(o,e=null){await re.writeLog("SUCCESS",o,e)}async function qo(o,e=null){await re.writeLog("WARN",o,e)}async function G(o,e=null){await qo(o,e)}async function X(o,e=null){await re.writeLog("ERROR",o,e)}async function x(o,e=null){await re.writeLog("DEBUG",o,e)}async function Hi(o,e=null){await re.writeLog("TRACE",o,e)}function B(o,e=null){Vi(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Qe(o,e=null){M(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function hn(o,e=null){zi(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Ct(o,e=null){qo(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Ko(o,e=null){G(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function he(o,e=null){X(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Z(o,e=null){x(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Ql(o,e=null){Hi(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}var Ji=C(()=>{Bo();pn()});var Yo={};j(Yo,{ChalkFormatter:()=>gn,DEFAULT_CONFIG:()=>Ho,LOG_LEVEL_PRIORITIES:()=>Ir,LoggerManager:()=>fn,configureLogger:()=>Ri,consoleClear:()=>Uo,consoleDebug:()=>No,consoleError:()=>ke,consoleInfo:()=>se,consolePlain:()=>an,consoleProgress:()=>Nl,consoleSeparator:()=>Mr,consoleStats:()=>Ul,consoleSuccess:()=>_,consoleTitle:()=>_l,consoleWarn:()=>W,default:()=>re,defaultFormatter:()=>D,formatLogEntry:()=>Ni,getLogStats:()=>Ui,initLogger:()=>Ar,log:()=>Vi,logDebug:()=>x,logDebugSync:()=>Z,logError:()=>X,logErrorSync:()=>he,logInfo:()=>M,logInfoSync:()=>Qe,logSuccess:()=>zi,logSuccessSync:()=>hn,logSync:()=>B,logTrace:()=>Hi,logTraceSync:()=>Ql,logWarn:()=>G,logWarnSync:()=>Ko,logWarning:()=>qo,logWarningSync:()=>Ct,loggerManager:()=>re,readArchivedLogs:()=>_i,readCurrentLogs:()=>ji,setConsoleDebugMode:()=>_o,setConsoleLoggerConfig:()=>jl,setDebugMode:()=>Lr,setFormatter:()=>Fi,setLogLevel:()=>Di});var Y=C(()=>{Jo();pn();Bo();Wi();Ji();cn()});import{existsSync as Gi,mkdirSync as Zl,readdirSync as eu}from"fs";import{join as Bi}from"path";function qi(){Gi(xt)||Zl(xt,{recursive:!0})}function Ki(o){if(!o||!o.messages||o.messages.length===0)return null;qi();let e=new Date().toISOString().replace(/[:.]/g,"-"),t=o.sessionId?o.sessionId.substring(0,8):"unknown",n=o.currentTask?o.currentTask.substring(0,30).replace(/[^\w\u4e00-\u9fa5]/g,"_"):"unnamed",r=`session_${t}_${e}_${n}.jsonl`,s=Bi(xt,r),i={type:"session_metadata",data:{sessionId:o.sessionId,currentTask:o.currentTask,createdAt:o.createdAt,archivedAt:new Date().toISOString(),messageCount:o.messages.length,taskCount:o.tasks?o.tasks.length:0}};try{let a=new me(s);if(a.create(i),o.tasks&&o.tasks.length>0){let c={type:"tasks_data",data:o.tasks};a.append(c)}o.messages&&o.messages.length>0&&o.messages.map(l=>({...l,id:l.id||`msg_${Date.now()}_${Math.random().toString(36).substr(2,9)}`})).forEach(l=>{a.append({type:"message",data:l})})}catch(a){return console.error("\u5F52\u6863\u4F1A\u8BDD\u5931\u8D25:",a),null}return s}function tu(){return qi(),Gi(xt)?eu(xt).filter(e=>e.endsWith(".jsonl")).map(e=>{let t=Bi(xt,e);try{let r=new fe(t).readAllSync({limit:1})[0];return!r||r.type!=="session_metadata"?null:{fileName:e,filePath:t,sessionId:r.data.sessionId,sessionIdShort:r.data.sessionId?r.data.sessionId.substring(0,8):"unknown",currentTask:r.data.currentTask||"\u672A\u547D\u540D\u4EFB\u52A1",timestamp:r.data.archivedAt,archivedAt:r.data.archivedAt,messageCount:r.data.messageCount||0,taskCount:r.data.taskCount||0}}catch(n){return console.error(`\u8BFB\u53D6\u5F52\u6863\u6587\u4EF6\u5931\u8D25: ${e}`,n),null}}).filter(e=>e!==null).sort((e,t)=>new Date(t.archivedAt).getTime()-new Date(e.archivedAt).getTime()):[]}function Yi(){let o=tu();if(o.length===0)return"\u6682\u65E0\u5F52\u6863\u4F1A\u8BDD";let e=`
|
|
13
9
|
=== \u5F52\u6863\u4F1A\u8BDD\u5217\u8868 ===
|
|
14
10
|
|
|
15
11
|
`;return o.forEach((t,n)=>{let s=new Date(t.archivedAt).toLocaleString("zh-CN");e+=`[${n+1}] ${t.currentTask}
|
|
@@ -19,8 +15,7 @@ var al=Object.defineProperty;var S=(o,e)=>()=>(o&&(e=o(o=0)),e);var j=(o,e)=>{fo
|
|
|
19
15
|
`,e+=` \u6D88\u606F\u6570\u91CF: ${t.messageCount}
|
|
20
16
|
`,e+=` \u6587\u4EF6\u540D: ${t.fileName}
|
|
21
17
|
|
|
22
|
-
`}),e}var
|
|
23
|
-
\u2705 \u4EFB\u52A1\u5B8C\u6210: ${v.currentTask}`)),console.log(dt.blue(`\u{1F4CA} Token\u603B\u5F00\u9500: ${e.toLocaleString()} tokens`))}v.currentTask=null,v.currentTaskId=null,ie()}}function ht(){return kl()}var Re,v,De=S(()=>{Y();Le();Lo();nn();fr();Re=le("session.jsonl");v=Do()});var Fo,_i=S(()=>{Fo={name:"coder",description:"\u4EE3\u7801\u7F16\u5199\u548C\u5F00\u53D1\uFF0C\u5305\u62EC\u65B0\u6587\u4EF6\u521B\u5EFA\u548C\u73B0\u6709\u6587\u4EF6\u4FEE\u6539\uFF0C\u652F\u6301\u591A\u8BED\u8A00\u9879\u76EE",keywords:["code","\u4EE3\u7801","\u7F16\u7A0B","\u5F00\u53D1","\u5199\u4EE3\u7801","\u4EE3\u7801\u4FEE\u6539","\u65B0\u5EFA\u6587\u4EF6","\u4F9D\u8D56\u68C0\u67E5","\u5B9E\u73B0\u529F\u80FD","\u6DFB\u52A0\u7279\u6027","\u4FEE\u590Dbug","\u91CD\u6784","\u5B9E\u73B0","\u5F00\u53D1","\u7F16\u5199","\u521B\u5EFA\u7C7B","\u521B\u5EFA\u51FD\u6570","\u6DFB\u52A0\u65B9\u6CD5","\u5199\u4E00\u4E2A","\u751F\u6210\u4EE3\u7801","\u65B0\u589E\u529F\u80FD","feature","implement","develop","create","add function","add","method","write code","generate code","refactor code","fix code","update code","modify code","\u7F16\u7801","\u5199\u529F\u80FD","\u52A0\u529F\u80FD","\u6539\u4EE3\u7801","\u5199\u63A5\u53E3","\u5199API","\u5F00\u53D1\u63A5\u53E3","\u5B9E\u73B0\u63A5\u53E3"],prompt:`\u4F60\u662F\u4E00\u4F4D\u8DE8\u8BED\u8A00\u4EE3\u7801\u7F16\u5199\u4E13\u5BB6\u3002\u4F60\u7684\u4EFB\u52A1\u662F\u6839\u636E\u7528\u6237\u9700\u6C42\u7F16\u5199\u9AD8\u8D28\u91CF\u3001\u53EF\u7EF4\u62A4\u7684\u4EE3\u7801\uFF0C\u652F\u6301\u591A\u79CD\u7F16\u7A0B\u8BED\u8A00\u548C\u9879\u76EE\u7C7B\u578B\u3002
|
|
18
|
+
`}),e}var xt,Xo=C(()=>{je();dn();xt=ge("archives")});function Ze(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(o){let e=Math.random()*16|0;return(o==="x"?e:e&3|8).toString(16)})}function Qo(){return"S"+Ze()}function Rr(){return"T"+Ze()}var Dr=C(()=>{});var Zi={};j(Zi,{SESSION_FILE:()=>_e,archiveSession:()=>et,associateMessageWithTask:()=>Qi,completeCurrentTask:()=>vt,loadSession:()=>es,saveSession:()=>ce,sessionState:()=>b,setCurrentTaskId:()=>St,startNewTask:()=>Fr});import{writeFileSync as nu,existsSync as Xi}from"fs";function Zo(){return{sessionId:Qo(),messages:[],tasks:[],currentTask:null,currentTaskId:null,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()}}function ru(){try{b.messages&&b.messages.length>0&&Ki(b)&&x("\u4F1A\u8BDD\u5DF2\u5F52\u6863"),b=Zo(),new me(_e).create(b)}catch(o){let e=o instanceof Error?o.message:String(o);W(`Failed to archive session - ${e}`,"Session"),b=Zo();try{new me(_e).create(b)}catch{}}}function es(){try{if(Xi(_e)){let e=new fe(_e).readAllSync(),t=e.length>0?e[0]:null;return b={sessionId:t&&t.sessionId||Qo(),messages:t&&t.messages||[],tasks:t&&t.tasks||[],currentTask:t&&t.currentTask||null,currentTaskId:t&&t.currentTaskId||null,createdAt:t&&t.createdAt||new Date().toISOString(),updatedAt:new Date().toISOString()},!0}}catch(o){let e=o instanceof Error?o.message:String(o);W(`Could not load session - ${e}`,"Session")}return!1}function Fr(o){let e=Rr(),t={id:e,description:o,createdAt:new Date().toISOString(),messageIds:[]};return b.tasks.push(t),b.currentTask=o,b.currentTaskId=e,e}function Qi(o){if(b.currentTaskId&&o){let e=b.currentTaskId;o.taskId=e;let t=b.tasks.find(n=>n.id===e);if(t&&!o.id){let n=Ze();o.id=n,t.messageIds.push(n)}}return o}function St(o){b.currentTaskId=o,b.updatedAt=new Date().toISOString(),ce(),se(`\u5F53\u524D\u4EFB\u52A1ID\u5DF2\u8BBE\u7F6E\u4E3A: ${o}`,"Session")}function ce(o,e=null){try{if(e&&e!==b.currentTask&&Fr(e),o){let n=o.map(r=>Qi({...r}));b={...b,messages:n,updatedAt:new Date().toISOString()}}else b={...b,updatedAt:new Date().toISOString()};Xi(_e)&&nu(_e,"","utf-8"),new me(_e).create(b)}catch(t){let n=t instanceof Error?t.message:String(t);W(`Could not save session - ${n}`,"Session")}}function et(){return ru()}function ou(){if(b.currentTask&&b.currentTaskId){let o=b.tasks.find(e=>e.id===b.currentTaskId);if(o){let e=o.tokenCount||0;_(`\u4EFB\u52A1\u5B8C\u6210: ${b.currentTask}`,"Session"),se(`Token\u603B\u5F00\u9500: ${e.toLocaleString()} tokens`,"Session")}b.currentTask=null,b.currentTaskId=null,ce()}}function vt(){return ou()}var _e,b,Ne=C(()=>{cn();Y();je();Xo();dn();Dr();_e=ge("session.jsonl");b=Zo()});var ts,ea=C(()=>{ts={name:"coder",description:"\u4EE3\u7801\u7F16\u5199\u548C\u5F00\u53D1\uFF0C\u5305\u62EC\u65B0\u6587\u4EF6\u521B\u5EFA\u548C\u73B0\u6709\u6587\u4EF6\u4FEE\u6539\uFF0C\u652F\u6301\u591A\u8BED\u8A00\u9879\u76EE",keywords:["code","\u4EE3\u7801","\u7F16\u7A0B","\u5F00\u53D1","\u5199\u4EE3\u7801","\u4EE3\u7801\u4FEE\u6539","\u65B0\u5EFA\u6587\u4EF6","\u4F9D\u8D56\u68C0\u67E5","\u5B9E\u73B0\u529F\u80FD","\u6DFB\u52A0\u7279\u6027","\u4FEE\u590Dbug","\u91CD\u6784","\u5B9E\u73B0","\u5F00\u53D1","\u7F16\u5199","\u521B\u5EFA\u7C7B","\u521B\u5EFA\u51FD\u6570","\u6DFB\u52A0\u65B9\u6CD5","\u5199\u4E00\u4E2A","\u751F\u6210\u4EE3\u7801","\u65B0\u589E\u529F\u80FD","feature","implement","develop","create","add function","add","method","write code","generate code","refactor code","fix code","update code","modify code","\u7F16\u7801","\u5199\u529F\u80FD","\u52A0\u529F\u80FD","\u6539\u4EE3\u7801","\u5199\u63A5\u53E3","\u5199API","\u5F00\u53D1\u63A5\u53E3","\u5B9E\u73B0\u63A5\u53E3"],prompt:`\u4F60\u662F\u4E00\u4F4D\u8DE8\u8BED\u8A00\u4EE3\u7801\u7F16\u5199\u4E13\u5BB6\u3002\u4F60\u7684\u4EFB\u52A1\u662F\u6839\u636E\u7528\u6237\u9700\u6C42\u7F16\u5199\u9AD8\u8D28\u91CF\u3001\u53EF\u7EF4\u62A4\u7684\u4EE3\u7801\uFF0C\u652F\u6301\u591A\u79CD\u7F16\u7A0B\u8BED\u8A00\u548C\u9879\u76EE\u7C7B\u578B\u3002
|
|
24
19
|
|
|
25
20
|
## \u6838\u5FC3\u89C4\u5219
|
|
26
21
|
|
|
@@ -127,12 +122,22 @@ var al=Object.defineProperty;var S=(o,e)=>()=>(o&&(e=o(o=0)),e);var j=(o,e)=>{fo
|
|
|
127
122
|
- \u91CD\u547D\u540D\u6807\u8BC6\u7B26\u6216\u6279\u91CF\u66FF\u6362 \u2192 \u4F7F\u7528 \`searchReplace()\`
|
|
128
123
|
- \u7B80\u5355\u5B57\u7B26\u4E32\u66FF\u6362 \u2192 \u4F7F\u7528 \`searchReplace()\`
|
|
129
124
|
|
|
130
|
-
6. **\
|
|
125
|
+
6. **\u4EE3\u7801\u9A8C\u8BC1**\uFF08\u63A8\u8350\uFF09\uFF1A
|
|
126
|
+
- \u5728\u5199\u5165\u6587\u4EF6\u540E\uFF0C\u4F7F\u7528 \`validate()\` \u5DE5\u5177\u9A8C\u8BC1\u4EE3\u7801\u8D28\u91CF
|
|
127
|
+
- \u9A8C\u8BC1\u4F1A\u68C0\u67E5\u8BED\u6CD5\u9519\u8BEF\u3001\u7C7B\u578B\u9519\u8BEF\u548C\u4EE3\u7801\u89C4\u8303\u95EE\u9898
|
|
128
|
+
- \u652F\u6301\u7684\u8BED\u8A00\uFF1A
|
|
129
|
+
- **TypeScript**: \u4F7F\u7528 tsc \u8FDB\u884C\u7C7B\u578B\u68C0\u67E5
|
|
130
|
+
- **JavaScript**: \u4F7F\u7528 ESLint \u8FDB\u884C\u4EE3\u7801\u89C4\u8303\u68C0\u67E5
|
|
131
|
+
- **Python**: \u4F7F\u7528 py_compile\u3001Flake8\u3001Mypy \u8FDB\u884C\u9A8C\u8BC1
|
|
132
|
+
- \u5982\u679C\u9A8C\u8BC1\u5931\u8D25\uFF0C\u6839\u636E\u9519\u8BEF\u4FE1\u606F\u4FEE\u590D\u4EE3\u7801
|
|
133
|
+
- \u793A\u4F8B\uFF1A\`validate({ path: "src/utils/helper.ts" })\`
|
|
134
|
+
|
|
135
|
+
7. **\u4F9D\u8D56\u68C0\u67E5**\uFF1A
|
|
131
136
|
- \u9A8C\u8BC1\u6240\u6709\u4F9D\u8D56\u90FD\u5DF2\u6B63\u786E\u5F15\u5165\u5230\u4F9D\u8D56\u58F0\u660E\u6587\u4EF6
|
|
132
137
|
- \u4F7F\u7528 \`read()\` \u68C0\u67E5\u4F9D\u8D56\u6587\u4EF6\uFF08package.json, pom.xml \u7B49\uFF09
|
|
133
138
|
- \u5982\u679C\u7F3A\u5C11\u4F9D\u8D56\uFF0C\u63D0\u793A\u7528\u6237\u6DFB\u52A0\u6216\u4F7F\u7528\u5305\u7BA1\u7406\u547D\u4EE4\u6DFB\u52A0
|
|
134
139
|
|
|
135
|
-
|
|
140
|
+
8. **\u9A8C\u8BC1\u5B8C\u6210**\uFF1A\u786E\u4FDD\u4EE3\u7801\u7B26\u5408\u6240\u6709\u8981\u6C42
|
|
136
141
|
|
|
137
142
|
## \u6587\u4EF6\u64CD\u4F5C\u5B89\u5168\u7EA6\u675F
|
|
138
143
|
|
|
@@ -205,15 +210,15 @@ var al=Object.defineProperty;var S=(o,e)=>()=>(o&&(e=o(o=0)),e);var j=(o,e)=>{fo
|
|
|
205
210
|
- \u4F7F\u7528 \`grep()\` \u6216 \`search\` \u5DE5\u5177\u67E5\u627E\u6240\u6709\u5F15\u7528
|
|
206
211
|
- \u5236\u5B9A\u5168\u9762\u7684\u66F4\u65B0\u8BA1\u5212\uFF0C\u786E\u4FDD\u6240\u6709\u4F9D\u8D56\u90FD\u5F97\u5230\u9002\u5F53\u5904\u7406
|
|
207
212
|
|
|
208
|
-
\u786E\u4FDD\u5728\u5B8C\u6210\u4EE3\u7801\u7F16\u5199\u548C\u6587\u4EF6\u5199\u5165\u4E4B\u540E\uFF0C\u5FC5\u987B\u6267\u884C\u4F9D\u8D56\u68C0\u67E5\u6B65\u9AA4\uFF01`}});var
|
|
213
|
+
\u786E\u4FDD\u5728\u5B8C\u6210\u4EE3\u7801\u7F16\u5199\u548C\u6587\u4EF6\u5199\u5165\u4E4B\u540E\uFF0C\u5FC5\u987B\u6267\u884C\u4F9D\u8D56\u68C0\u67E5\u6B65\u9AA4\uFF01`}});var wt={};j(wt,{LITE_MODEL:()=>Ie,MODEL:()=>ye,getDefaultModelConfig:()=>tt,getLiteModelConfig:()=>yn,getLiteModelMaxToken:()=>os,getMCPServerConfigs:()=>ss,getMaxToken:()=>rs,getProvider:()=>au});import{readFileSync as su}from"fs";function ns(){if(!Or)try{let o=ge("config.json"),e=su(o,"utf-8");Or=JSON.parse(e)}catch(o){console.error("Failed to load config.json:",o.message),Or={models:{defaultModel:{apiKey:"",authToken:"",baseURL:"https://api.openai.com/v1",model:"gpt-4o-mini",provider:"openai"}}}}return Or}function tt(){let o=ns(),e={apiKey:"",authToken:"",baseURL:"https://api.openai.com/v1",model:"gpt-4o-mini",provider:"openai",maxToken:128e3},t=o.models?.defaultModel||e;return t.provider==="anthropic"&&t.disableExperimentalBetas===void 0&&(t.disableExperimentalBetas=!0),t}function yn(){let e=ns().models?.liteModel||tt();return e.provider==="anthropic"&&e.disableExperimentalBetas===void 0&&(e.disableExperimentalBetas=!0),e}function ta(){return tt().model||"gpt-4o-mini"}function iu(){return yn().model||ta()}function au(){return tt().provider||"openai"}function ye(){return ta()}function Ie(){return iu()}function rs(){return tt().maxToken||128e3}function os(){return yn().maxToken||16385}function ss(){return ns().mcpServers||[]}var Or,le=C(()=>{je();Or=null});var nt,jr=C(()=>{nt=class{config;constructor(e){this.config=e}getModelName(){return this.config.model}getProviderType(){return this.config.provider}_getApiKey(){return this.config.apiKey}_getAuthToken(){return this.config.authToken}_getBaseURL(){return this.config.baseURL}}});import cu from"openai";var is,na,ra=C(()=>{jr();is=class extends nt{client=null;constructor(e){super(e)}_initClient(){if(!this.client){let e={baseURL:this.config.baseURL||"https://api.openai.com/v1",defaultHeaders:{}};this.config.apiKey?e.apiKey=this.config.apiKey:this.config.authToken&&(this.config.authToken.startsWith("Bearer ")?e.apiKey=this.config.authToken.slice(7):e.apiKey=this.config.authToken),this.client=new cu(e)}return this.client}async callModel(e){let{model:t=this.getModelName(),messages:n,temperature:r=.1,max_tokens:s,tools:i,tool_choice:a}=e,c=this._initClient(),l=[...n],u={model:t,messages:l,temperature:r,max_tokens:s};i&&i.length>0&&(u.tools=i.map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.input_schema}})),a&&(a.type==="any"||(u.tool_choice=a)));let p=await c.chat.completions.create(u);return this._processReasoningContent(p),p}_processReasoningContent(e){if(e.choices&&e.choices[0]&&e.choices[0].message&&e.choices[0].message.reasoning_content){let{message:t}=e.choices[0],n=t.reasoning_content;if(t.tool_calls&&t.tool_calls.length>0){t.content?typeof t.content=="string"&&(t.content=`${n}
|
|
209
214
|
|
|
210
|
-
${t.content}`):t.content=n;return}try{let r=[];try{let s=JSON.parse(n);Array.isArray(s)&&s.length>0?(r=s.filter(i=>i&&i.name).map(i=>({id:`call_${i.name}_${Date.now()}`,type:"function",function:{name:i.name,arguments:JSON.stringify(i.parameters||{})}})),t.tool_calls=r):t.content||(t.content=n)}catch{t.content||(t.content=n)}}catch(r){console.warn("Failed to process reasoning_content:",r)}}}},
|
|
215
|
+
${t.content}`):t.content=n;return}try{let r=[];try{let s=JSON.parse(n);Array.isArray(s)&&s.length>0?(r=s.filter(i=>i&&i.name).map(i=>({id:`call_${i.name}_${Date.now()}`,type:"function",function:{name:i.name,arguments:JSON.stringify(i.parameters||{})}})),t.tool_calls=r):t.content||(t.content=n)}catch{t.content||(t.content=n)}}catch(r){console.warn("Failed to process reasoning_content:",r)}}}},na=is});var as,oa,sa=C(()=>{jr();Y();as=class extends nt{client=null;constructor(e){super(e)}async _initClient(){if(!this.client){let{Anthropic:e}=await import("@anthropic-ai/sdk"),t={};this.config.apiKey?t.apiKey=this.config.apiKey:this.config.authToken&&(this.config.authToken.startsWith("Bearer ")?t.apiKey=this.config.authToken.slice(7):t.apiKey=this.config.authToken),this.config.disableExperimentalBetas!==!1&&(t.defaultHeaders={...t.defaultHeaders,"anthropic-beta":""}),this.client=new e(t)}return this.client}async callModel(e){let{model:t=this.getModelName(),messages:n,temperature:r=.1,max_tokens:s=4096,tools:i,tool_choice:a}=e,c=await this._initClient(),l=[...n],u="",p=l.filter(f=>f.role==="system");p.length>0&&(u=p.map(f=>f.content).join(`
|
|
211
216
|
|
|
212
|
-
`)),l=l.filter(f=>f.role!=="system");let
|
|
217
|
+
`)),l=l.filter(f=>f.role!=="system");let g=[],d=0;for(;d<l.length;){let f=l[d];if(f.role==="assistant"){let y=[];if(f.content&&typeof f.content=="string"&&y.push({type:"text",text:f.content}),f.tool_calls&&f.tool_calls.length>0)for(let S of f.tool_calls)y.push({type:"tool_use",id:S.id,name:S.function.name,input:JSON.parse(S.function.arguments)});y.length>0&&g.push({role:"assistant",content:y}),d++}else if(f.role==="tool"){let y=[];for(;d<l.length&&l[d].role==="tool";){let S=l[d];y.push({type:"tool_result",tool_use_id:S.tool_call_id,content:S.content||"No result"}),d++}y.length>0&&g.push({role:"user",content:y})}else if(f.role==="user"){let y=typeof f.content=="string"?[{type:"text",text:f.content}]:Array.isArray(f.content)?f.content:[{type:"text",text:String(f.content)}];g.push({role:"user",content:y}),d++}else d++}let m={model:t,max_tokens:s,temperature:r,system:u||"You are a helpful assistant.",messages:g};i&&i.length>0&&(m.tools=i,a&&(m.tool_choice=a));let h=await c.messages.create(m);x(`[Anthropic Provider] Response content blocks: ${JSON.stringify(h.content,null,2)}`);let w=[],v="";for(let f of h.content)if(f.type==="text")v+=f.text;else if(f.type==="tool_use")x(`[Anthropic Provider] Tool use block: ${JSON.stringify({id:f.id,name:f.name,input:f.input,inputKeys:Object.keys(f.input||{})},null,2)}`),w.push({id:f.id,type:"function",function:{name:f.name,arguments:JSON.stringify(f.input)}});else if(f.type==="thinking"){let y=f.thinking||"";y&&(v=y+(v?`
|
|
213
218
|
|
|
214
|
-
`+
|
|
219
|
+
`+v:""))}return{choices:[{message:{content:v||null,tool_calls:w.length>0?w:void 0},finish_reason:h.stop_reason==="end_turn"?"stop":h.stop_reason}]}}},oa=as});var Cn,ia=C(()=>{le();jr();ra();sa();Cn=class{static async getProvider(){let e=tt();return this.createProvider(e)}static async getLiteProvider(){let e=yn();return this.createProvider(e)}static async createProvider(e){switch(e.provider||"openai"){case"anthropic":return new oa(e);case"openai":default:return new na(e)}}}});function bt(o){return o&&typeof o=="object"&&o.__tool_result===!0}function xn(o){return bt(o)?o.result:o}var $,V=C(()=>{$=class{get name(){return this.getDefinition().name}get description(){return this.getDefinition().description}get inputSchema(){return this.getDefinition().input_schema}createToolResult(e,t=null,n=!0){return{__tool_result:!0,result:e,display:t!==null?t:e,shouldPrint:n}}formatError(e,t){let n=t instanceof Error?t.message:String(t);return`Error: ${e} failed - ${n}`}formatAction(e){let t=this.name,n=Object.entries(e).map(([r,s])=>{let i=s;return typeof s=="string"&&s.length>50&&(i=s.substring(0,50)+"..."),`${r}=${JSON.stringify(i)}`}).join(", ");return`${t}(${n})`}formatObservation(e){if(bt(e)){let{display:t}=e;return Array.isArray(t)?t.join(`
|
|
215
220
|
`):String(t)}return Array.isArray(e)?e.join(`
|
|
216
|
-
`):String(e)}shouldPrintObservation(e){return
|
|
221
|
+
`):String(e)}shouldPrintObservation(e){return bt(e)?e.shouldPrint:!0}}});var Ce,Sn=C(()=>{V();Ce=class extends ${getDefinition(){let e=this.getBaseDefinition(),t="IMPORTANT: User confirmation is automatically required - DO NOT call askUser tool before calling this tool.",{description:n}=e;if(!n.includes("User confirmation is automatically required"))if(n.trim().startsWith("IMPORTANT:"))if(n.match(/^IMPORTANT:[^\n]*(\n[^\n]*)*?\n\n/)){let s=n.indexOf(`
|
|
217
222
|
`);n=n.slice(0,s)+`
|
|
218
223
|
- User confirmation is automatically required - DO NOT call askUser tool before calling this tool`+n.slice(s)}else{let s=n.indexOf(`
|
|
219
224
|
`);s!==-1?n=n.slice(0,s)+`
|
|
@@ -221,7 +226,7 @@ ${t.content}`):t.content=n;return}try{let r=[];try{let s=JSON.parse(n);Array.isA
|
|
|
221
226
|
|
|
222
227
|
`+n}else n=t+`
|
|
223
228
|
|
|
224
|
-
`+n;return{...e,description:n,requiresConfirmation:!0}}getConfirmationMessage(e){return null}}});var
|
|
229
|
+
`+n;return{...e,description:n,requiresConfirmation:!0}}getConfirmationMessage(e){return null}}});var cs={};j(cs,{BaseTool:()=>$,ConfirmableTool:()=>Ce,extractToolResult:()=>xn,isToolResult:()=>bt});var ls=C(()=>{V();Sn()});import{readFileSync as aa,statSync as lu}from"fs";import{resolve as uu}from"path";function vn(o){return ca.execute(o)}var Tt,ca,wn,la=C(()=>{V();Tt=class extends ${lastReadPath="";getDefinition(){return{name:"read",description:`Read content from a specified file path.
|
|
225
230
|
|
|
226
231
|
\u{1F4CB} USE CASES:
|
|
227
232
|
- View file content for analysis or editing
|
|
@@ -243,17 +248,17 @@ ${t.content}`):t.content=n;return}try{let r=[];try{let s=JSON.parse(n);Array.isA
|
|
|
243
248
|
\u{1F4DD} RETURN VALUE:
|
|
244
249
|
- Complete file content as string (for small files)
|
|
245
250
|
- Array of file chunks (for large files with chunking)
|
|
246
|
-
- Success message (with silent: true)`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to read (relative or absolute)"},silent:{type:"boolean",description:"If true, returns success message instead of full content"},chunkSize:{type:"number",description:"Return content in chunks of specified bytes (optional)"},autoChunk:{type:"boolean",description:"Automatically split large files into chunks (optional)"}},required:["path"]}}}execute(e){try{let t=e.path.trim(),n=
|
|
247
|
-
`).length;return`\u8BFB\u53D6\u6587\u4EF6 ${this.lastReadPath}\uFF0C\u5171 ${n} \u884C`}return super.formatObservation(e)}},
|
|
251
|
+
- Success message (with silent: true)`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to read (relative or absolute)"},silent:{type:"boolean",description:"If true, returns success message instead of full content"},chunkSize:{type:"number",description:"Return content in chunks of specified bytes (optional)"},autoChunk:{type:"boolean",description:"Automatically split large files into chunks (optional)"}},required:["path"]}}}execute(e){try{let t=e.path.trim(),n=uu(t);if(this.lastReadPath=t,e.silent)return aa(n,"utf-8"),this.createToolResult("file content",`\u6587\u4EF6 ${t} \u8BFB\u53D6\u6210\u529F\uFF08\u9759\u9ED8\u6A21\u5F0F\uFF0C\u5185\u5BB9\u672A\u663E\u793A\uFF09`,!0);let r=aa(n,"utf-8");if(e.chunkSize||e.autoChunk){let a=lu(n).size,c=1024*1024,l=5*1024*1024,u=e.chunkSize||c;if(e.autoChunk&&a<=l)return r;u=Math.max(1,u);let p=[];for(let g=0;g<r.length;g+=u)p.push(r.slice(g,g+u));return this.createToolResult(p,`\u6587\u4EF6 ${t} \u5DF2\u5206\u5757\u8BFB\u53D6\uFF0C\u5171 ${p.length} \u5757\uFF0C\u6BCF\u5757 ${u} \u5B57\u8282`,!0)}return r}catch(t){let r=`Error: Cannot read file ${e.path.trim()} - ${t instanceof Error?t.message:String(t)}`;return this.createToolResult(r,r,!0)}}formatObservation(e){if(typeof e=="object"&&e.__tool_result)return super.formatObservation(e);if(Array.isArray(e)&&this.lastReadPath)return`\u8BFB\u53D6\u6587\u4EF6 ${this.lastReadPath}\uFF0C\u5171 ${e.length} \u5757`;if(typeof e=="string"&&this.lastReadPath){let n=e.split(`
|
|
252
|
+
`).length;return`\u8BFB\u53D6\u6587\u4EF6 ${this.lastReadPath}\uFF0C\u5171 ${n} \u884C`}return super.formatObservation(e)}},ca=new Tt;wn=ca});function ua(o){if(typeof o!="string")return o;let e=o.replace(/\\n/g,`
|
|
248
253
|
`).replace(/\\t/g," ").replace(/\\r/g,"\r").replace(/\\"/g,'"').replace(/\\'/g,"'");return e=e.replace(/\r\n/g,`
|
|
249
254
|
`).replace(/\r/g,`
|
|
250
|
-
`),e}function
|
|
255
|
+
`),e}function _r(o){return o.includes(`\r
|
|
251
256
|
`)?`\r
|
|
252
257
|
`:o.includes(`
|
|
253
258
|
`)?`
|
|
254
|
-
`:o.includes("\r")?"\r":
|
|
259
|
+
`:o.includes("\r")?"\r":us}var us,gs=C(()=>{us=process.platform==="win32"?`\r
|
|
255
260
|
`:`
|
|
256
|
-
`});import{mkdirSync as
|
|
261
|
+
`});import{mkdirSync as gu}from"fs";import{resolve as pu}from"path";function bn(o){return ga.execute(o)}var kt,ga,rt,ps=C(()=>{V();kt=class extends ${getDefinition(){return{name:"mkdir",description:"Create a directory and all necessary parent directories (like mkdir -p). Returns a confirmation message.",input_schema:{type:"object",properties:{path:{type:"string",description:"The directory path to create"}},required:["path"]}}}execute(e){try{let t=pu(e.path);return gu(t,{recursive:!0}),`Directory created: ${e.path}`}catch(t){return this.formatError(`Cannot create directory ${e.path}`,t)}}},ga=new kt;rt=ga});import{readFileSync as du,writeFileSync as pa,existsSync as mu}from"fs";import{resolve as fu,dirname as hu}from"path";function Tn(o){return da.execute(o)}var Et,da,kn,ma=C(()=>{gs();ps();V();Et=class extends ${getDefinition(){return{name:"write",description:`Write content to a file - ONLY for creating NEW files.
|
|
257
262
|
|
|
258
263
|
\u{1F4CB} USE CASES:
|
|
259
264
|
- Create brand new files that don't exist yet
|
|
@@ -286,9 +291,9 @@ echo 'test'" }) - Create new shell script
|
|
|
286
291
|
|
|
287
292
|
\u{1F4DD} RETURN VALUE:
|
|
288
293
|
- "done" on successful write
|
|
289
|
-
- Error message if write fails`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to write to"},content:{type:"string",description:"Complete file content to write (required, cannot be empty)"}},required:["path","content"]}}}execute(e){try{let t=
|
|
294
|
+
- Error message if write fails`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to write to"},content:{type:"string",description:"Complete file content to write (required, cannot be empty)"}},required:["path","content"]}}}execute(e){try{let t=fu(e.path),n=hu(t),r=rt.execute({path:n});if(r.startsWith("Error:"))return r;let s=ua(e.content);typeof s!="string"&&(s=String(s||""));let i=us;if(mu(t)){let a=du(t,"utf-8");i=_r(a);let c=`${t}.base`;pa(c,a,"utf-8")}return i===`\r
|
|
290
295
|
`&&(s=s.replace(/\n/g,`\r
|
|
291
|
-
`)),
|
|
296
|
+
`)),pa(t,s,"utf-8"),"done"}catch(t){return this.formatError(`Cannot write ${e.path}`,t)}}},da=new Et;kn=da});import{unlinkSync as yu,existsSync as Cu,statSync as xu,rmdirSync as Su}from"fs";import{resolve as vu}from"path";function En(o){return typeof o=="object"&&o!==null&&"path"in o?ds.execute(o):ds.execute({path:o})}var Pt,ds,Pn,fa=C(()=>{Sn();Pt=class extends Ce{getBaseDefinition(){return{name:"delete",description:`Delete a file, multiple files or directories at the specified path(s).
|
|
292
297
|
|
|
293
298
|
IMPORTANT:
|
|
294
299
|
- This action cannot be undone
|
|
@@ -300,31 +305,31 @@ Examples:
|
|
|
300
305
|
- deleteFile("temp.txt") - delete a single file named temp.txt
|
|
301
306
|
- deleteFile("temp_dir") - delete a single empty directory named temp_dir
|
|
302
307
|
- deleteFile({ path: "temp.txt" }) - delete a single file
|
|
303
|
-
- deleteFile({ path: ["file1.txt", "dir1", "file2.txt"] }) - delete multiple files and directories`,input_schema:{type:"object",properties:{path:{type:"string",description:"The file path to delete (relative or absolute), or an array of file paths",oneOf:[{type:"string",description:"The file path to delete (relative or absolute)"},{type:"array",items:{type:"string",description:"A file path to delete"},description:"Array of file paths to delete"}]}},required:["path"]}}}getConfirmationMessage(e){let t=Array.isArray(e.path)?e.path:[e.path];return t.length===1?`\u5220\u9664: ${t[0]}`:`\u5220\u9664 ${t.length} \u4E2A\u6587\u4EF6/\u76EE\u5F55`}execute(e){try{let t=Array.isArray(e.path)?e.path:[e.path],n=[];for(let l of t)try{let
|
|
308
|
+
- deleteFile({ path: ["file1.txt", "dir1", "file2.txt"] }) - delete multiple files and directories`,input_schema:{type:"object",properties:{path:{type:"string",description:"The file path to delete (relative or absolute), or an array of file paths",oneOf:[{type:"string",description:"The file path to delete (relative or absolute)"},{type:"array",items:{type:"string",description:"A file path to delete"},description:"Array of file paths to delete"}]}},required:["path"]}}}getConfirmationMessage(e){let t=Array.isArray(e.path)?e.path:[e.path];return t.length===1?`\u5220\u9664: ${t[0]}`:`\u5220\u9664 ${t.length} \u4E2A\u6587\u4EF6/\u76EE\u5F55`}execute(e){try{let t=Array.isArray(e.path)?e.path:[e.path],n=[];for(let l of t)try{let u=vu(l);if(!Cu(u)){n.push(`Warning: Path not found - ${l}`);continue}xu(u).isDirectory()?(Su(u),n.push(`Directory deleted: ${l}`)):(yu(u),n.push(`File deleted: ${l}`))}catch(u){n.push(`Error: Cannot delete ${l} - ${u instanceof Error?u.message:"Unknown error"}`)}if(t.length===1)return n[0];let r=n.filter(l=>l.startsWith("File deleted")).length,s=n.filter(l=>l.startsWith("Directory deleted")).length,i=n.filter(l=>l.startsWith("Error")).length,a=n.filter(l=>l.startsWith("Warning")).length,c=r+s;return`${n.join(`
|
|
304
309
|
`)}
|
|
305
310
|
|
|
306
|
-
Summary: ${c} items deleted (${r} files, ${s} directories), ${a} warnings, ${i} errors`}catch(t){return this.formatError("Cannot process delete operation",t)}}},
|
|
311
|
+
Summary: ${c} items deleted (${r} files, ${s} directories), ${a} warnings, ${i} errors`}catch(t){return this.formatError("Cannot process delete operation",t)}}},ds=new Pt;Pn=ds});import{renameSync as wu,existsSync as Nr,statSync as bu,mkdirSync as Tu}from"fs";import{resolve as ha,dirname as ku}from"path";function $n(o){return o&&typeof o=="object"&&"source"in o&&"destination"in o?ya.execute(o):"Error: Invalid input format. Expected { source: string, destination: string }"}var $t,ya,Mn,Ca=C(()=>{Sn();$t=class extends Ce{getBaseDefinition(){return{name:"move",description:`Move or rename a file or directory from source to destination.
|
|
307
312
|
|
|
308
313
|
Examples:
|
|
309
314
|
- moveFile({ source: "old.txt", destination: "new.txt" }) - rename a file
|
|
310
315
|
- moveFile({ source: "file.txt", destination: "folder/file.txt" }) - move a file to a different directory
|
|
311
316
|
- moveFile({ source: "old_folder", destination: "new_folder" }) - rename a directory
|
|
312
|
-
- moveFile({ source: "folder/file.txt", destination: "new_location/file.txt" }) - move a file with rename`,input_schema:{type:"object",properties:{source:{type:"string",description:"The source file or directory path to move"},destination:{type:"string",description:"The destination path (new name or location)"}},required:["source","destination"]}}}getConfirmationMessage(e){return`\u79FB\u52A8/\u91CD\u547D\u540D: ${e.source} \u2192 ${e.destination}`}execute(e){try{let{source:t,destination:n}=e,r=
|
|
317
|
+
- moveFile({ source: "folder/file.txt", destination: "new_location/file.txt" }) - move a file with rename`,input_schema:{type:"object",properties:{source:{type:"string",description:"The source file or directory path to move"},destination:{type:"string",description:"The destination path (new name or location)"}},required:["source","destination"]}}}getConfirmationMessage(e){return`\u79FB\u52A8/\u91CD\u547D\u540D: ${e.source} \u2192 ${e.destination}`}execute(e){try{let{source:t,destination:n}=e,r=ha(t),s=ha(n);if(!Nr(r))return`Error: Source path does not exist - ${t}`;if(Nr(s))return`Error: Destination already exists - ${n}`;let i=ku(s);return Nr(i)||Tu(i,{recursive:!0}),wu(r,s),Nr(s)?`${bu(r).isDirectory()?"Directory":"File"} moved successfully from "${t}" to "${n}"`:`Error: Failed to move ${t} to ${n}`}catch(t){return this.formatError("Move operation",t)}}},ya=new $t;Mn=ya});import{existsSync as Ur,statSync as xa,readFileSync as Sa,writeFileSync as va,mkdirSync as wa,readdirSync as Eu}from"fs";import{resolve as ba,join as Ta,dirname as Pu}from"path";function In(o){return o&&typeof o=="object"&&"source"in o&&"destination"in o?ka.execute(o):"Error: Invalid input format. Expected { source: string, destination: string }"}var Mt,ka,An,Ea=C(()=>{Sn();Mt=class extends Ce{getBaseDefinition(){return{name:"copy",description:`Copy a file or directory from source to destination.
|
|
313
318
|
|
|
314
319
|
Examples:
|
|
315
320
|
- copyFile({ source: "file.txt", destination: "file_copy.txt" }) - copy a file
|
|
316
321
|
- copyFile({ source: "file.txt", destination: "folder/file.txt" }) - copy a file to a different directory
|
|
317
322
|
- copyFile({ source: "folder", destination: "folder_copy" }) - copy an entire directory (recursively)
|
|
318
|
-
- copyFile({ source: "folder/subdir", destination: "new_location/subdir" }) - copy a subdirectory`,input_schema:{type:"object",properties:{source:{type:"string",description:"The source file or directory path to copy"},destination:{type:"string",description:"The destination path (new location)"}},required:["source","destination"]}}}getConfirmationMessage(e){return`\u590D\u5236: ${e.source} \u2192 ${e.destination}`}execute(e){try{let{source:t,destination:n}=e,r=
|
|
323
|
+
- copyFile({ source: "folder/subdir", destination: "new_location/subdir" }) - copy a subdirectory`,input_schema:{type:"object",properties:{source:{type:"string",description:"The source file or directory path to copy"},destination:{type:"string",description:"The destination path (new location)"}},required:["source","destination"]}}}getConfirmationMessage(e){return`\u590D\u5236: ${e.source} \u2192 ${e.destination}`}execute(e){try{let{source:t,destination:n}=e,r=ba(t),s=ba(n);if(!Ur(r))return`Error: Source path does not exist - ${t}`;if(r===s)return"Error: Source and destination paths are identical";let i=xa(r),a=0,c=0;if(i.isDirectory())return this.copyDirectory(r,s,a,c),`Directory copied successfully from "${t}" to "${n}" (${a} files, ${c} directories)`;{let l=Pu(s);return Ur(l)||wa(l,{recursive:!0}),va(s,Sa(r)),Ur(s)?`File copied successfully from "${t}" to "${n}"`:`Error: Failed to copy file from "${t}" to "${n}"`}}catch(t){return this.formatError("Copy operation",t)}}copyDirectory(e,t,n,r){Ur(t)||(wa(t,{recursive:!0}),r++),Eu(e).forEach(i=>{let a=Ta(e,i),c=Ta(t,i);xa(a).isDirectory()?this.copyDirectory(a,c,n,r):(va(c,Sa(a)),n++)})}},ka=new Mt;An=ka});import{diff3Merge as $u}from"node-diff3";function Pa(o,e,t){let n=o.split(`
|
|
319
324
|
`),r=e.split(`
|
|
320
325
|
`),s=t.split(`
|
|
321
|
-
`);console.log(` [merge] \u5F00\u59CB\u4E09\u8DEF\u5408\u5E76: base=${n.length}\u884C, current=${r.length}\u884C, incoming=${s.length}\u884C`);let i=Date.now(),a
|
|
322
|
-
`),current:
|
|
323
|
-
`),incoming:
|
|
324
|
-
`)}),l.push("<<<<<<< CURRENT"),l.push(...
|
|
325
|
-
`),hasConflicts:
|
|
326
|
+
`);console.log(` [merge] \u5F00\u59CB\u4E09\u8DEF\u5408\u5E76: base=${n.length}\u884C, current=${r.length}\u884C, incoming=${s.length}\u884C`);let i=Date.now(),a=$u(r,n,s,{excludeFalseConflicts:!0}),c=((Date.now()-i)/1e3).toFixed(2);console.log(` [merge] diff3Merge \u5B8C\u6210\uFF0C\u8017\u65F6 ${c}s\uFF0C\u7ED3\u679C\u533A\u57DF\u6570: ${a.length}`);let l=[],u=[];for(let p of a)if(p.ok)l.push(...p.ok);else if(p.conflict){let g=l.length+1,d=p.conflict.a||[],m=p.conflict.o||[],h=p.conflict.b||[];u.push({lineNumber:g,base:m.join(`
|
|
327
|
+
`),current:d.join(`
|
|
328
|
+
`),incoming:h.join(`
|
|
329
|
+
`)}),l.push("<<<<<<< CURRENT"),l.push(...d),l.push("======="),l.push(...h),l.push(">>>>>>> INCOMING")}return{merged:l.join(`
|
|
330
|
+
`),hasConflicts:u.length>0,conflicts:u}}var $a=C(()=>{});import{readFileSync as Ma,writeFileSync as Wr,existsSync as ms,unlinkSync as fs}from"fs";import{resolve as Mu}from"path";function hs(o){return o.replace(/\r\n/g,`
|
|
326
331
|
`).replace(/\r/g,`
|
|
327
|
-
`)}function
|
|
332
|
+
`)}function Ln(o){return Ia.execute(o)}var Iu,It,Ia,Rn,Aa=C(()=>{gs();$a();V();Iu={lineRatioThreshold:.5,minLineDiff:100},It=class extends ${getDefinition(){return{name:"merge",description:`Smart file merge tool - THE SAFE CHOICE for modifying existing files.
|
|
328
333
|
|
|
329
334
|
\u{1F4CB} USE CASES:
|
|
330
335
|
- Update existing files without losing concurrent changes
|
|
@@ -367,7 +372,7 @@ Examples:
|
|
|
367
372
|
\u{1F4DD} RETURN VALUE:
|
|
368
373
|
- "Merge successful" messages on success
|
|
369
374
|
- Conflict details with markers if merge conflicts exist
|
|
370
|
-
- Warning message for large deletions requiring confirmation`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to merge/modify"},newContent:{type:"string",description:"Complete new version of the entire file content"},confirmLargeChange:{type:"boolean",description:"Set to true to confirm large deletions (>50% difference)"}},required:["path","newContent"]}}}execute(e){try{return!e.newContent||e.newContent.trim().length===0?this.formatError("Merge","newContent parameter is required"):this.performThreeWayMerge(e)}catch(t){return this.formatError("Merge",t)}}checkLargeDeletion(e,t,n=
|
|
375
|
+
- Warning message for large deletions requiring confirmation`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to merge/modify"},newContent:{type:"string",description:"Complete new version of the entire file content"},confirmLargeChange:{type:"boolean",description:"Set to true to confirm large deletions (>50% difference)"}},required:["path","newContent"]}}}execute(e){try{return!e.newContent||e.newContent.trim().length===0?this.formatError("Merge","newContent parameter is required"):this.performThreeWayMerge(e)}catch(t){return this.formatError("Merge",t)}}checkLargeDeletion(e,t,n=Iu){if(t>=e)return{isLargeDeletion:!1,deletionRatio:0,message:""};let r=e-t,s=e>0?r/e:0,i=r>=n.minLineDiff&&s>=n.lineRatioThreshold,a="";if(i){let c=Math.round(s*100);a=`\u26A0\uFE0F LARGE DELETION DETECTED: ${e} \u2192 ${t} lines (${c}% deleted, ${r} lines removed).
|
|
371
376
|
|
|
372
377
|
This may indicate:
|
|
373
378
|
- Incomplete content (missing parts of the file)
|
|
@@ -375,30 +380,30 @@ This may indicate:
|
|
|
375
380
|
- Wrong file content
|
|
376
381
|
|
|
377
382
|
To proceed, call merge() again with confirmLargeChange=true.
|
|
378
|
-
Or review your newContent to ensure it's complete.`}return{isLargeDeletion:i,deletionRatio:s,message:a}}performThreeWayMerge(e){try{console.log(` [MergeTool] \u5F00\u59CB\u667A\u80FD\u5408\u5E76: ${e.path}`);let t=
|
|
379
|
-
`?"CRLF":"LF"}`);let i=
|
|
383
|
+
Or review your newContent to ensure it's complete.`}return{isLargeDeletion:i,deletionRatio:s,message:a}}performThreeWayMerge(e){try{console.log(` [MergeTool] \u5F00\u59CB\u667A\u80FD\u5408\u5E76: ${e.path}`);let t=Mu(e.path),n=`${t}.base`;if(!ms(t))return console.log(" [MergeTool] \u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u521B\u5EFA\u65B0\u6587\u4EF6"),this.writeNewFile(t,n,e.newContent);console.log(" [MergeTool] \u8BFB\u53D6\u5F53\u524D\u6587\u4EF6\u5185\u5BB9...");let r=Ma(t,"utf-8");console.log(` [MergeTool] \u5F53\u524D\u6587\u4EF6\u5927\u5C0F: ${r.length} \u5B57\u7B26`);let s=_r(r);console.log(` [MergeTool] \u68C0\u6D4B\u5230\u884C\u7ED3\u675F\u7B26: ${s===`\r
|
|
384
|
+
`?"CRLF":"LF"}`);let i=hs(r),a=hs(e.newContent),c=i.split(`
|
|
380
385
|
`).length,l=a.split(`
|
|
381
|
-
`).length;if(!e.confirmLargeChange){let
|
|
382
|
-
`&&(
|
|
383
|
-
`)),
|
|
384
|
-
`).length}\u884C, current=${c}\u884C, incoming=${l}\u884C`);let
|
|
386
|
+
`).length;if(!e.confirmLargeChange){let v=this.checkLargeDeletion(c,l);if(v.isLargeDeletion)return console.log(` [MergeTool] \u68C0\u6D4B\u5230\u5927\u5E45\u5220\u51CF\uFF08${c} \u2192 ${l}\u884C\uFF09\uFF0C\u9700\u8981\u786E\u8BA4`),v.message}let u=r,p=!1;ms(n)&&(console.log(" [MergeTool] \u53D1\u73B0\u57FA\u7840\u7248\u672C\u6587\u4EF6\uFF0C\u8BFB\u53D6\u4E2D..."),u=Ma(n,"utf-8"),p=!0,console.log(` [MergeTool] \u57FA\u7840\u7248\u672C\u5927\u5C0F: ${u.length} \u5B57\u7B26`));let g=hs(u);if(g===i){console.log(" [MergeTool] \u65E0\u5E76\u53D1\u4FEE\u6539\uFF08base === current\uFF09\uFF0C\u76F4\u63A5\u5199\u5165");let v=a;if(s===`\r
|
|
387
|
+
`&&(v=v.replace(/\n/g,`\r
|
|
388
|
+
`)),Wr(t,v,"utf-8"),p)try{fs(n)}catch{}return"Merge successful (direct write, no concurrent edits)."}console.log(" [MergeTool] \u68C0\u6D4B\u5230\u5E76\u53D1\u4FEE\u6539\uFF0C\u6267\u884C\u4E09\u8DEF\u5408\u5E76..."),console.log(` [MergeTool] base=${g.split(`
|
|
389
|
+
`).length}\u884C, current=${c}\u884C, incoming=${l}\u884C`);let d=Date.now(),m=Pa(g,i,a),h=((Date.now()-d)/1e3).toFixed(2);console.log(` [MergeTool] threeWayMerge \u5B8C\u6210\uFF0C\u8017\u65F6 ${h}s, \u6709\u51B2\u7A81: ${m.hasConflicts}`);let w=m.merged;if(s===`\r
|
|
385
390
|
`&&(w=w.replace(/\n/g,`\r
|
|
386
|
-
`)),
|
|
391
|
+
`)),m.hasConflicts)return Wr(t,w,"utf-8"),`Merge completed with CONFLICTS. File saved with conflict markers.
|
|
387
392
|
Conflicts:
|
|
388
|
-
${
|
|
393
|
+
${m.conflicts.map(T=>`Line ${T.lineNumber}: BASE="${T.base.substring(0,50)}..." | CURRENT="${T.current.substring(0,50)}..." | INCOMING="${T.incoming.substring(0,50)}..."`).join(`
|
|
389
394
|
`)}
|
|
390
395
|
|
|
391
|
-
Please resolve conflicts manually or use write() to overwrite.`;if(
|
|
396
|
+
Please resolve conflicts manually or use write() to overwrite.`;if(Wr(t,w,"utf-8"),p)try{fs(n)}catch{}return"Merge successful (three-way merge, concurrent edits preserved)."}catch(t){return this.formatError("Merge",t)}}writeNewFile(e,t,n){try{let r=typeof n=="string"?n:String(n||"");if(Wr(e,r,"utf-8"),ms(t))try{fs(t)}catch{}return`File created: ${e}`}catch(r){return this.formatError("Failed to create file",r)}}},Ia=new It;Rn=Ia});import{EOL as ys}from"os";function La(o,e={}){let{preserveEscapes:t=!1,targetFormat:n="lf"}=e,r=o;if(t||(r=r.replace(/\\n/g,`
|
|
392
397
|
`).replace(/\\t/g," ").replace(/\\r/g,"\r").replace(/\\"/g,'"').replace(/\\'/g,"'")),r=r.replace(/\r\n/g,`
|
|
393
398
|
`).replace(/\r/g,`
|
|
394
399
|
`),n!=="preserve"&&n!=="lf")switch(n){case"crlf":r=r.replace(/\n/g,`\r
|
|
395
|
-
`);break;case"cr":r=r.replace(/\n/g,"\r");break;case"platform":
|
|
400
|
+
`);break;case"cr":r=r.replace(/\n/g,"\r");break;case"platform":ys===`\r
|
|
396
401
|
`&&(r=r.replace(/\n/g,`\r
|
|
397
|
-
`));break}return r}function
|
|
402
|
+
`));break}return r}function Au(o){if(!o)return{style:"none",dominant:ys,statistics:{crlf:0,lf:0,cr:0},confidence:0};let e={crlf:(o.match(/\r\n/g)||[]).length,lf:(o.match(/(?<!\r)\n/g)||[]).length,cr:(o.match(/\r(?!\n)/g)||[]).length},t=e.crlf+e.lf+e.cr;if(t===0)return{style:"none",dominant:ys,statistics:e,confidence:0};let n=`
|
|
398
403
|
`,r=e.lf,s="lf";e.crlf>r&&(n=`\r
|
|
399
|
-
`,r=e.crlf,s="crlf"),e.cr>r&&(n="\r",r=e.cr,s="cr");let i=r/t,a;return i===1||i>.8?a=s:a="mixed",{style:a,dominant:n,statistics:e,confidence:i}}var
|
|
404
|
+
`,r=e.crlf,s="crlf"),e.cr>r&&(n="\r",r=e.cr,s="cr");let i=r/t,a;return i===1||i>.8?a=s:a="mixed",{style:a,dominant:n,statistics:e,confidence:i}}var Vr,Ra=C(()=>{Vr=class{originalContent;normalizedContent;originalStyle;constructor(e){this.originalContent=e,this.originalStyle=Au(e),this.normalizedContent=La(e,{preserveEscapes:!0,targetFormat:"lf"})}getNormalizedContent(){return this.normalizedContent}getOriginalStyle(){return this.originalStyle}restoreLineEndings(e){return this.originalStyle.style==="crlf"||this.originalStyle.dominant===`\r
|
|
400
405
|
`?e.replace(/\n/g,`\r
|
|
401
|
-
`):this.originalStyle.style==="cr"||this.originalStyle.dominant==="\r"?e.replace(/\n/g,"\r"):e}convertTo(e){return
|
|
406
|
+
`):this.originalStyle.style==="cr"||this.originalStyle.dominant==="\r"?e.replace(/\n/g,"\r"):e}convertTo(e){return La(this.originalContent,{preserveEscapes:!0,targetFormat:e})}}});import{existsSync as Lu,readFileSync as Ru,writeFileSync as Du}from"fs";import{resolve as Fu}from"path";function Dn(o){return Da.execute(o)}var At,Da,Fn,Fa=C(()=>{V();Ra();At=class extends ${getDefinition(){return{name:"searchReplace",description:`Perform TARGETED SEARCH & REPLACE operations on files.
|
|
402
407
|
|
|
403
408
|
\u{1F3AF} PERFECT FOR:
|
|
404
409
|
- Small configuration updates (port numbers, URLs, etc.)
|
|
@@ -419,21 +424,65 @@ Please resolve conflicts manually or use write() to overwrite.`;if(vr(t,w,"utf-8
|
|
|
419
424
|
\u{1F4A1} TIPS:
|
|
420
425
|
- Use precise search text to avoid unintended replacements
|
|
421
426
|
- Test with small changes first
|
|
422
|
-
- For complex modifications, consider using merge() tool instead`,input_schema:{type:"object",properties:{path:{type:"string",description:"The file path to perform search/replace operations on"},operations:{type:"array",description:"Array of search/replace operations. Each operation replaces search text with replace text.",items:{type:"object",properties:{search:{type:"string",description:"Exact text to search for"},replace:{type:"string",description:"Text to replace the search text with"}},required:["search","replace"]}}},required:["path","operations"]}}}execute(e){try{if(!e.path||e.path.trim().length===0)return this.formatError("SearchReplace","Path parameter is required");if(!e.operations||!Array.isArray(e.operations)||e.operations.length===0)return this.formatError("SearchReplace","Operations array is required and must not be empty");let t=
|
|
423
|
-
`)&&(p=p.replace(/\n/g,`\r
|
|
424
|
-
`)),tu(t,p,"utf-8")}let l=`Search/replace completed. ${a} of ${e.operations.length} operations applied successfully.`,g=c.length>0?`
|
|
427
|
+
- For complex modifications, consider using merge() tool instead`,input_schema:{type:"object",properties:{path:{type:"string",description:"The file path to perform search/replace operations on"},operations:{type:"array",description:"Array of search/replace operations. Each operation replaces search text with replace text.",items:{type:"object",properties:{search:{type:"string",description:"Exact text to search for"},replace:{type:"string",description:"Text to replace the search text with"}},required:["search","replace"]}}},required:["path","operations"]}}}execute(e){try{if(!e.path||e.path.trim().length===0)return this.formatError("SearchReplace","Path parameter is required");if(!e.operations||!Array.isArray(e.operations)||e.operations.length===0)return this.formatError("SearchReplace","Operations array is required and must not be empty");let t=Fu(e.path);if(!Lu(t))return this.formatError("SearchReplace",`File not found: ${t}`);let n=Ru(t,"utf-8"),r=new Vr(n),s=r.getOriginalStyle(),i=r.getNormalizedContent(),a=0,c=[];for(let[p,g]of e.operations.entries()){let{search:d,replace:m}=g;if(!d||d.trim().length===0){c.push(`\u274C Operation ${p+1}: empty search text`);continue}try{i.includes(d)?(i=i.replace(d,m),a++,c.push(`\u2705 Operation ${p+1}: "${d.substring(0,30)}..." \u2192 "${m.substring(0,30)}..."`)):c.push(`\u274C Operation ${p+1}: search text not found "${d.substring(0,30)}..."`)}catch(h){c.push(`\u274C Operation ${p+1}: ${h instanceof Error?h.message:String(h)}`)}}if(a>0){let p=r.restoreLineEndings(i);Du(t,p,"utf-8")}let l=`Search/replace completed. ${a} of ${e.operations.length} operations applied successfully.`,u=c.length>0?`
|
|
425
428
|
|
|
426
429
|
Operation details:
|
|
427
430
|
${c.join(`
|
|
428
|
-
`)}`:"";return l+
|
|
429
|
-
|
|
431
|
+
`)}`:"";return l+u}catch(t){return this.formatError("SearchReplace",t)}}formatError(e,t){let n=t instanceof Error?t.message:String(t);return`[${e} Error] ${n}`}},Da=new At;Fn=Da});var Q,Ae=C(()=>{Q=class{getCommonDirectoryDescriptions(){return{src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u6240\u6709\u4E3B\u8981\u7684\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",dist:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",components:"\u7EC4\u4EF6\u76EE\u5F55",pages:"\u9875\u9762\u76EE\u5F55",public:"\u516C\u5171\u8D44\u6E90\u76EE\u5F55",assets:"\u9759\u6001\u8D44\u6E90\u76EE\u5F55",utils:"\u5DE5\u5177\u51FD\u6570\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",services:"\u670D\u52A1\u5C42\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",controllers:"\u63A7\u5236\u5668\u76EE\u5F55",routes:"\u8DEF\u7531\u5B9A\u4E49\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",plugins:"\u63D2\u4EF6\u76EE\u5F55",hooks:"\u94A9\u5B50\u51FD\u6570\u76EE\u5F55",types:"\u7C7B\u578B\u5B9A\u4E49\u76EE\u5F55",interfaces:"\u63A5\u53E3\u5B9A\u4E49\u76EE\u5F55",schemas:"\u6570\u636E\u7ED3\u6784\u5B9A\u4E49\u76EE\u5F55"}}findEntryPoints(e,t){return[]}findEntryPointsByConfig(e,t,n){let r=new Set,{existsSync:s,readFileSync:i}=$r("fs"),{resolve:a}=$r("path");if(n.commonEntries&&n.commonEntries.forEach(c=>{if(e.includes(c))r.add(c);else if(c.includes("*")){let l=new RegExp(c.replace(/\*/g,"[^/]+").replace(/\/\*\*/g,".+"));e.forEach(u=>{l.test(u)&&r.add(u)})}}),n.configFileChecks)for(let c of n.configFileChecks){let l=a(t,c.filePath);if(s(l))try{let u=i(l,"utf-8");c.parseFn(u,e).forEach(g=>r.add(g))}catch{}}if(n.contentChecks)for(let c of n.contentChecks)e.forEach(l=>{if(!c.filter||c.filter(l))try{let u=i(a(t,l),"utf-8");c.pattern.test(u)&&r.add(l)}catch{}});return Array.from(r)}detectCodeStandards(e){return[]}detectCodeStandardsByFiles(e,t){let n=[],{existsSync:r,readFileSync:s}=$r("fs"),{resolve:i}=$r("path");for(let[a,c]of Object.entries(t)){let l=!1;if(Array.isArray(c)){for(let u of c)if(r(i(e,u))){l=!0;break}}else for(let u of c.files){let p=i(e,u);if(r(p))if(c.contentCheck)try{let g=s(p,"utf-8");if(c.contentCheck(g)){l=!0;break}}catch{}else{l=!0;break}}l&&n.push(a)}return n}async validateCode(e,t){return{valid:!0,message:`No validator available for ${this.getLanguageName()}`}}}});import{existsSync as Cs,readFileSync as Ou}from"fs";import{resolve as xs}from"path";var zr,Oa=C(()=>{Ae();zr=class extends Q{getLanguageName(){return"JavaScript/TypeScript"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u6240\u6709\u4E3B\u8981\u7684 JavaScript/TypeScript \u4EE3\u7801",lib:"\u7F16\u8BD1\u540E\u7684\u5E93\u6587\u4EF6\u76EE\u5F55",dist:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u6253\u5305\u540E\u7684\u751F\u4EA7\u4EE3\u7801",public:"\u516C\u5171\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u9759\u6001\u6587\u4EF6",assets:"\u9759\u6001\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u56FE\u7247\u3001\u6837\u5F0F\u7B49",components:"React/Vue \u7EC4\u4EF6\u76EE\u5F55",pages:"\u9875\u9762\u7EC4\u4EF6\u76EE\u5F55",hooks:"React \u94A9\u5B50\u51FD\u6570\u76EE\u5F55",context:"React \u4E0A\u4E0B\u6587\u76EE\u5F55",redux:"Redux \u72B6\u6001\u7BA1\u7406\u76EE\u5F55",store:"\u72B6\u6001\u7BA1\u7406\u76EE\u5F55",actions:"Redux \u52A8\u4F5C\u76EE\u5F55",reducers:"Redux \u5F52\u7EA6\u5668\u76EE\u5F55",slices:"Redux Toolkit \u5207\u7247\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",utils:"\u5DE5\u5177\u51FD\u6570\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",services:"API \u670D\u52A1\u76EE\u5F55",api:"API \u63A5\u53E3\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",types:"TypeScript \u7C7B\u578B\u5B9A\u4E49\u76EE\u5F55",interfaces:"TypeScript \u63A5\u53E3\u5B9A\u4E49\u76EE\u5F55",schemas:"\u6570\u636E\u7ED3\u6784\u5B9A\u4E49\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u6D4B\u8BD5\u7B49\u811A\u672C",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",__tests__:"Jest \u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55",spec:"Jasmine/Mocha \u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=xs(e,"package.json");if(Cs(r))try{let s=Ou(r,"utf-8"),i=JSON.parse(s);i.engines&&(i.engines.node&&(n["Node.js"]=i.engines.node),i.engines.npm&&(n.npm=i.engines.npm),i.engines.yarn&&(n.yarn=i.engines.yarn),i.engines.pnpm&&(n.pnpm=i.engines.pnpm))}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["index.js","index.ts","index.mjs","index.cjs","app.js","app.ts","main.js","main.ts","server.js","server.ts","src/index.js","src/index.ts","src/main.js","src/main.ts","src/app.js","src/app.ts","next.config.js","vite.config.js","webpack.config.js","rollup.config.js"],configFileChecks:[{filePath:"package.json",parseFn:(n,r)=>{let s=[],i=JSON.parse(n);return i.main&&s.push(i.main),i.bin&&(typeof i.bin=="string"?s.push(i.bin):s.push(...Object.values(i.bin))),s}}]})}detectCodeStandards(e){let t={ESLint:[".eslintrc.js",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml",".eslintrc"],Prettier:[".prettierrc",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml",".prettierrc.js","prettier.config.js"],EditorConfig:[".editorconfig"],TypeScript:["tsconfig.json"],Flow:[".flowconfig"],Jest:["jest.config.js","jest.config.ts","jest.config.json"],Vitest:["vitest.config.js","vitest.config.ts"],Mocha:["mocha.opts",".mocharc.js"],Jasmine:["jasmine.json"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".js",".mjs",".cjs",".jsx",".ts",".tsx",".vue",".svelte",".astro"]}getCommonTestExtensions(){return[".test.js",".test.ts",".test.jsx",".test.tsx",".spec.js",".spec.ts",".spec.jsx",".spec.tsx"]}getCommonConfigFiles(){return["package.json","tsconfig.json","tsconfig.node.json","jsconfig.json",".eslintrc.js",".eslintrc.json",".prettierrc",".prettierrc.json",".editorconfig","vite.config.js","vite.config.ts","webpack.config.js","webpack.config.ts","rollup.config.js","rollup.config.ts","next.config.js","next.config.mjs","nuxt.config.js","nuxt.config.ts","astro.config.mjs","astro.config.ts"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}async validateCode(e,t){let{execSync:n}=await import("child_process"),{extname:r}=await import("path"),s=r(e);return s===".ts"||s===".tsx"?await this.validateTypeScript(e,t,n):await this.validateJavaScript(e,t,n)}async validateTypeScript(e,t,n){try{let r=xs(t,"tsconfig.json");if(!Cs(r))return{valid:!0,message:"No tsconfig.json found, skipping TypeScript validation"};let s=n(`npx tsc --noEmit --pretty false --skipLibCheck --noResolve "${e}"`,{encoding:"utf-8",stdio:"pipe",cwd:t,timeout:3e4});return{valid:!0,message:"TypeScript validation passed"}}catch(r){let s=r.stderr||r.stdout||r.message,i=this.parseTypeScriptErrors(s);return i.length===0?{valid:!1,message:`TypeScript validation failed:
|
|
432
|
+
${s}`}:{valid:!1,message:`TypeScript validation failed with ${i.length} error(s)`,errors:i}}}async validateJavaScript(e,t,n){try{if(![".eslintrc.js",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml",".eslintrc"].some(c=>Cs(xs(t,c))))return{valid:!0,message:"No ESLint configuration found, skipping JavaScript validation"};let i=n(`npx eslint --format json ${e}`,{encoding:"utf-8",stdio:"pipe",cwd:t,timeout:3e4}),a=JSON.parse(i);return a.length===0||a[0].errorCount===0?{valid:!0,message:"ESLint validation passed",warnings:a[0]?.warningCount>0?this.parseEslintMessages(a[0].messages,"warning"):void 0}:{valid:!1,message:`ESLint validation failed with ${a[0].errorCount} error(s)`,errors:this.parseEslintMessages(a[0].messages,"error"),warnings:this.parseEslintMessages(a[0].messages,"warning")}}catch(r){if(r.message?.includes("not found")||r.code==="ENOENT")return{valid:!0,message:"ESLint not available, skipping JavaScript validation"};try{let s=JSON.parse(r.stdout||"[]");if(s.length>0&&s[0].errorCount>0)return{valid:!1,message:`ESLint validation failed with ${s[0].errorCount} error(s)`,errors:this.parseEslintMessages(s[0].messages,"error"),warnings:this.parseEslintMessages(s[0].messages,"warning")}}catch{}return{valid:!1,message:`JavaScript validation failed: ${r.message}`}}}parseTypeScriptErrors(e){let t=[],n=e.split(`
|
|
433
|
+
`);for(let r of n){let s=r.match(/\((\d+),(\d+)\):\s+(error|warning)\s+TS(\d+):\s+(.+)/);s&&t.push({line:parseInt(s[1]),column:parseInt(s[2]),severity:s[3],code:`TS${s[4]}`,message:s[5]})}return t}parseEslintMessages(e,t){return e.filter(n=>n.severity===(t==="error"?2:1)).map(n=>({line:n.line,column:n.column,severity:t,code:n.ruleId,message:n.message}))}}});import{existsSync as Le,readFileSync as On,writeFileSync as ju,mkdirSync as _u}from"fs";import{resolve as Lt,dirname as Nu}from"path";var Hr,ja=C(()=>{Ae();Hr=class extends Q{getLanguageName(){return"Java"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u6839\u76EE\u5F55","src/main/java":"\u4E3B\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u751F\u4EA7\u4EE3\u7801","src/main/resources":"\u4E3B\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u914D\u7F6E\u6587\u4EF6\u548C\u9759\u6001\u8D44\u6E90","src/test/java":"\u6D4B\u8BD5\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5","src/test/resources":"\u6D4B\u8BD5\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u6D4B\u8BD5\u914D\u7F6E\u6587\u4EF6",target:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u7C7B\u6587\u4EF6\u548C\u6253\u5305\u4EA7\u7269",lib:"\u5916\u90E8\u4F9D\u8D56\u5E93\u76EE\u5F55",libs:"\u5916\u90E8\u4F9D\u8D56\u5E93\u76EE\u5F55",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55",gradle:"Gradle \u6784\u5EFA\u7CFB\u7EDF\u76EE\u5F55",maven:"Maven \u6784\u5EFA\u7CFB\u7EDF\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C"}}async detectVersions(e,t){let n={},r=Lt(e,"pom.xml");if(Le(r))try{let a=On(r,"utf-8"),c=a.match(/<java\.version>([^<]+)<\/java\.version>/)||a.match(/<maven\.compiler\.source>([^<]+)<\/maven\.compiler\.source>/);c&&(n.Java=c[1])}catch{}let s=Lt(e,"build.gradle"),i=Lt(e,"build.gradle.kts");if(Le(s))try{let a=On(s,"utf-8"),c=a.match(/sourceCompatibility\s*=\s*['"]?([^'"\\s]+)['"]?/)||a.match(/targetCompatibility\s*=\s*['"]?([^'"\\s]+)['"]?/);c&&(n.Java=c[1])}catch{}else if(Le(i))try{let a=On(i,"utf-8"),c=a.match(/sourceCompatibility\s*=\s*JavaVersion\.VERSION_(\d+_\d+)/)||a.match(/targetCompatibility\s*=\s*JavaVersion\.VERSION_(\d+_\d+)/);c&&(n.Java=c[1].replace("_","."))}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["src/main/java/**/Main.java","src/main/java/**/Application.java","src/main/java/**/App.java","src/main/java/**/Bootstrap.java","src/main/java/**/Launcher.java"],contentChecks:[{pattern:/public static void main\(String\[\] args\)/,filter:n=>n.endsWith(".java")}]})}detectCodeStandards(e){let t={Checkstyle:["checkstyle.xml","google_checks.xml","sun_checks.xml"],PMD:["pmd.xml",".pmd"],FindBugs:["findbugs.xml",".findbugs"],SpotBugs:["spotbugs.xml",".spotbugs"],SonarQube:["sonar-project.properties"],EditorConfig:[".editorconfig"],Maven:["pom.xml"],Gradle:["build.gradle","build.gradle.kts"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".java",".class",".jar",".war",".ear"]}getCommonTestExtensions(){return["Test.java","Tests.java"]}getCommonConfigFiles(){return["pom.xml","build.gradle","build.gradle.kts","settings.gradle","gradle.properties","checkstyle.xml","pmd.xml","spotbugs.xml","sonar-project.properties",".editorconfig"]}async analyzeDependencies(e,t){let n={dependencies:[],conflicts:[],recommendations:[]};try{let r=Lt(e,"pom.xml"),s=Lt(e,"build.gradle"),i=Lt(e,"build.gradle.kts");if(!Le(r)&&!Le(s)&&!Le(i))return n;Le(r)?await this.analyzeMavenDependencies(r,n):Le(s)?this.analyzeGradleDependencies(s,n):Le(i)&&this.analyzeGradleDependencies(i,n),this.detectDependencyConflicts(n),this.generateRecommendations(n)}catch(r){console.error("\u4F9D\u8D56\u5206\u6790\u5931\u8D25:",r)}return n}async analyzeMavenDependencies(e,t){let n=On(e,"utf-8"),r=await import("xml2js");return new Promise((s,i)=>{r.parseString(n,{explicitArray:!1},(a,c)=>{if(a){i(a);return}let{project:l}=c;if(!l){s();return}let u=l.dependencies?.dependency;u&&(Array.isArray(u)?u:[u]).forEach(g=>{t.dependencies.push({groupId:g.groupId,artifactId:g.artifactId,version:g.version||"unknown",scope:g.scope||"compile",type:g.type||"jar"})}),s()})})}analyzeGradleDependencies(e,t){let n=On(e,"utf-8");[/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*['"]([^:'"]+):([^:'"]+):([^:'"]+)['"]/gms,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*['"]([^:'"]+):([^:'"]+)['"]/gms,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*\(\s*group\s*:\s*['"]([^'"]+)['"],\s*name\s*:\s*['"]([^'"]+)['"],\s*version\s*:\s*['"]([^'"]+)['"][^)]*\)/gms,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*\(\s*["']([^"']+):([^"']+):([^"']+)["']\s*\)/gms].forEach(s=>{let i;for(;(i=s.exec(n))!==null;){let a,c,l,u;if(i.length===5)[,a,c,l,u]=i;else if(i.length===4)[,a,c,l]=i,u="managed";else continue;t.dependencies.push({groupId:c,artifactId:l,version:u,scope:a.toLowerCase(),type:"jar"})}})}detectDependencyConflicts(e){let t=new Map;e.dependencies.forEach(n=>{if(n.groupId&&n.artifactId){let r=`${n.groupId}:${n.artifactId}`;t.has(r)||t.set(r,new Set),t.get(r)?.add(n.version)}}),t.forEach((n,r)=>{if(n.size>1){let[s,i]=r.split(":");e.conflicts.push({groupId:s,artifactId:i,versions:Array.from(n),severity:this.calculateConflictSeverity(Array.from(n))})}})}calculateConflictSeverity(e){let t=e.map(r=>{let s=r.match(/^(\d+)/);return s?parseInt(s[1]):0});return new Set(t).size>1?"high":e.length>2?"medium":"low"}generateRecommendations(e){let t=[];e.conflicts.length>0&&t.push(`${e.conflicts.length} \u4E2A\u4F9D\u8D56\u5B58\u5728\u7248\u672C\u51B2\u7A81\uFF0C\u5EFA\u8BAE\u7EDF\u4E00\u7248\u672C`),e.dependencies.some(s=>s.groupId==="org.springframework.boot")&&t.push("\u9879\u76EE\u4F7F\u7528Spring Boot\uFF0C\u5EFA\u8BAE\u4F7F\u7528Spring Dependency Management\u63D2\u4EF6\u7BA1\u7406\u4F9D\u8D56\u7248\u672C");let r=this.detectJavaVersion(e);if(r){let s=parseInt(r);s<11?t.push("Java\u7248\u672C\u8F83\u65E7\uFF0C\u5EFA\u8BAE\u5347\u7EA7\u5230Java 11\u6216\u66F4\u9AD8\u7248\u672C"):s>=17&&t.push("\u4F7F\u7528\u73B0\u4EE3Java\u7248\u672C\uFF0C\u53EF\u4EE5\u4EAB\u53D7\u6700\u65B0\u7279\u6027")}e.recommendations=t}detectJavaVersion(e){}saveDependencyAnalysis(e,t){try{let n=`${t}/.nium/java-dependency-analysis.json`;_u(Nu(n),{recursive:!0}),ju(n,JSON.stringify({scanTime:new Date().toISOString(),dependencies:e.dependencies,conflicts:e.conflicts,recommendations:e.recommendations},null,2))}catch(n){console.error("\u4FDD\u5B58\u4F9D\u8D56\u5206\u6790\u7ED3\u679C\u5931\u8D25:",n)}}}});import{existsSync as jn,readFileSync as Ss}from"fs";import{resolve as _n}from"path";var Jr,_a=C(()=>{Ae();Jr=class extends Q{getLanguageName(){return"Python"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 Python \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",main:"\u4E3B\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",__pycache__:"Python \u7F16\u8BD1\u7F13\u5B58\u76EE\u5F55",venv:"\u865A\u62DF\u73AF\u5883\u76EE\u5F55",".venv":"\u865A\u62DF\u73AF\u5883\u76EE\u5F55",env:"\u73AF\u5883\u53D8\u91CF\u914D\u7F6E\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",data:"\u6570\u636E\u6587\u4EF6\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",dist:"\u6253\u5305\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u53D1\u5E03\u7684\u5305\u6587\u4EF6",requirements:"\u4F9D\u8D56\u7BA1\u7406\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=_n(e,".python-version");if(jn(r))try{let a=Ss(r,"utf-8");n.Python=a.trim()}catch{}let s=_n(e,"pyproject.toml");if(jn(s))try{let c=Ss(s,"utf-8").match(/python\s*=\s*['"]([^'"]+)['"]/);c&&(n.Python=c[1])}catch{}let i=_n(e,"setup.py");if(jn(i))try{let c=Ss(i,"utf-8").match(/python_requires\s*=\s*['"]([^'"]+)['"]/);c&&(n.Python=c[1])}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["main.py","__main__.py","app.py","run.py","manage.py","server.py","cli.py","setup.py","src/main.py","src/__main__.py","src/app.py"],configFileChecks:[{filePath:"setup.py",parseFn:(n,r)=>{let s=[],i=n.match(/entry_points\s*=\s*\{[^}]+\}/s);if(i){let c=i[0].match(/console_scripts\s*:\s*\[([^\]]+)\]/s);if(c){let u=c[1].match(/([^=]+)\s*=\s*([^,]+)/g);u&&u.forEach(p=>{let[g,d]=p.split("=").map(h=>h.trim()),m=d.replace(/\./g,"/").replace(":","/")+".py";s.push(m)})}}return s}}]})}detectCodeStandards(e){let t={Black:{files:["pyproject.toml","setup.cfg"],contentCheck:n=>n.includes("[tool.black]")},Pylint:[".pylintrc","pylintrc","setup.cfg"],Flake8:[".flake8","flake8.cfg","setup.cfg"],Mypy:["mypy.ini",".mypy.ini","setup.cfg","pyproject.toml"],isort:[".isort.cfg","setup.cfg","pyproject.toml"],Bandit:[".bandit","bandit.yml"],Pytest:["pytest.ini","setup.cfg","conftest.py"],EditorConfig:[".editorconfig"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".py",".pyc",".pyo",".pyd",".pyx",".pxd",".pxi"]}getCommonTestExtensions(){return[".test.py",".spec.py","_test.py","test_*.py","*_test.py"]}getCommonConfigFiles(){return["pyproject.toml","setup.py","setup.cfg","requirements.txt","requirements-dev.txt","Pipfile","Pipfile.lock","poetry.lock",".pylintrc",".flake8","mypy.ini",".isort.cfg","pytest.ini","conftest.py",".editorconfig"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}async validateCode(e,t){let{execSync:n}=await import("child_process"),r=await Promise.all([this.validatePythonSyntax(e,t,n),this.validateWithFlake8(e,t,n),this.validateWithMypy(e,t,n)]),s=r.find(a=>!a.valid);if(s)return s;let i=r.flatMap(a=>a.warnings||[]).filter((a,c,l)=>l.findIndex(u=>u.message===a.message)===c);return{valid:!0,message:"Python validation passed",warnings:i.length>0?i:void 0}}async validatePythonSyntax(e,t,n){try{let r="python3";try{n("python3 --version",{stdio:"pipe"})}catch{r="python"}return n(`${r} -m py_compile "${e}"`,{encoding:"utf-8",stdio:"pipe",cwd:t,timeout:1e4}),{valid:!0,message:"Python syntax check passed"}}catch(r){if(r.message?.includes("not found")||r.message?.includes("not recognized")||r.code==="ENOENT"||r.message?.includes("Command failed"))return{valid:!0,message:"Python not available, skipping validation"};let s=r.stderr||r.stdout||r.message,i=this.parsePythonSyntaxErrors(s);return{valid:!1,message:"Python syntax errors found",errors:i.length>0?i:[{severity:"error",message:s}]}}}async validateWithFlake8(e,t,n){try{if(![".flake8","setup.cfg","tox.ini"].some(a=>jn(_n(t,a))))return{valid:!0,message:"No Flake8 configuration found, skipping"};let i="python3";try{n("python3 --version",{stdio:"pipe"})}catch{i="python"}return n(`${i} -m flake8 --format=json "${e}"`,{encoding:"utf-8",stdio:"pipe",cwd:t,timeout:15e3}),{valid:!0,message:"Flake8 validation passed"}}catch(r){if(r.message?.includes("No module named")||r.code==="ENOENT")return{valid:!0,message:"Flake8 not available, skipping"};let s=r.stdout||r.stderr||"",i=this.parseFlake8Errors(s);return i.length===0?{valid:!0,message:"Flake8 validation completed"}:{valid:!1,message:`Flake8 found ${i.length} issue(s)`,errors:i.filter(a=>a.severity==="error"),warnings:i.filter(a=>a.severity==="warning")}}}async validateWithMypy(e,t,n){try{if(!["mypy.ini",".mypy.ini","setup.cfg","pyproject.toml"].some(a=>jn(_n(t,a))))return{valid:!0,message:"No Mypy configuration found, skipping"};let i="python3";try{n("python3 --version",{stdio:"pipe"})}catch{i="python"}return n(`${i} -m mypy --show-column-numbers "${e}"`,{encoding:"utf-8",stdio:"pipe",cwd:t,timeout:2e4}),{valid:!0,message:"Mypy type checking passed"}}catch(r){if(r.message?.includes("No module named")||r.code==="ENOENT")return{valid:!0,message:"Mypy not available, skipping"};let s=r.stdout||r.stderr||"",i=this.parseMypyErrors(s);return i.length===0?{valid:!0,message:"Mypy validation completed"}:{valid:!1,message:`Mypy found ${i.length} type error(s)`,errors:i}}}parsePythonSyntaxErrors(e){let t=[],n=e.split(`
|
|
434
|
+
`);for(let r of n){let s=r.match(/File "([^"]+)", line (\d+)/);if(s){let i=n[n.indexOf(r)+1];t.push({line:parseInt(s[2]),severity:"error",message:i?.trim()||"Syntax error"})}}return t}parseFlake8Errors(e){let t=[],n=e.split(`
|
|
435
|
+
`);for(let r of n){let s=r.match(/([^:]+):(\d+):(\d+):\s+([A-Z]\d+)\s+(.+)/);if(s){let i=s[4],a=i.startsWith("E")||i.startsWith("F")?"error":"warning";t.push({line:parseInt(s[2]),column:parseInt(s[3]),severity:a,code:i,message:s[5]})}}return t}parseMypyErrors(e){let t=[],n=e.split(`
|
|
436
|
+
`);for(let r of n){let s=r.match(/([^:]+):(\d+):(\d+):\s+(error|warning|note):\s+(.+)/);if(s){let i=s[4]==="error"?"error":s[4]==="warning"?"warning":"info";t.push({line:parseInt(s[2]),column:parseInt(s[3]),severity:i,message:s[5]})}}return t}}});import{existsSync as Na,readFileSync as Ua}from"fs";import{resolve as Wa}from"path";var Gr,Va=C(()=>{Ae();Gr=class extends Q{getLanguageName(){return"Go"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF08\u4F20\u7EDF Go \u9879\u76EE\u7ED3\u6784\uFF09",cmd:"\u547D\u4EE4\u884C\u5DE5\u5177\u76EE\u5F55\uFF0C\u5305\u542B\u53EF\u6267\u884C\u7A0B\u5E8F\u7684\u5165\u53E3\u70B9",internal:"\u5185\u90E8\u5305\u76EE\u5F55\uFF0C\u4EC5\u672C\u9879\u76EE\u53EF\u4F7F\u7528",pkg:"\u53EF\u5BFC\u51FA\u5305\u76EE\u5F55\uFF0C\u4F9B\u5176\u4ED6\u9879\u76EE\u4F7F\u7528",api:"API \u5B9A\u4E49\u76EE\u5F55",web:"Web \u5E94\u7528\u76F8\u5173\u4EE3\u7801\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",handlers:"\u8BF7\u6C42\u5904\u7406\u5668\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",vendor:"\u7B2C\u4E09\u65B9\u4F9D\u8D56\u5E93\u76EE\u5F55",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Wa(e,"go.mod");if(Na(r))try{let a=Ua(r,"utf-8").match(/^go\s+(\d+\.\d+)/m);a&&(n.Go=a[1])}catch{}let s=Wa(e,"go.sum");if(Na(s))try{let a=Ua(s,"utf-8").match(/^golang\.org\/x\/sys\/v\d+\/[^\s]+\s+go(\d+\.\d+)/);a&&!n.Go&&(n.Go=a[1])}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["main.go","cmd/main.go","cmd/app/main.go","cmd/server/main.go","cmd/cli/main.go","src/main.go"],contentChecks:[{pattern:/func main\(\)/,filter:n=>n.endsWith(".go")}]})}detectCodeStandards(e){let t={GoFmt:[".gofmt"],GoLint:[".golint"],"GolangCI-Lint":[".golangci.yml",".golangci.yaml"],EditorConfig:[".editorconfig"],GoMod:["go.mod"],GoSum:["go.sum"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".go",".mod",".sum"]}getCommonTestExtensions(){return["_test.go",".test.go"]}getCommonConfigFiles(){return["go.mod","go.sum",".golangci.yml",".golangci.yaml",".editorconfig","Makefile"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as Uu,readFileSync as Wu}from"fs";import{resolve as Vu}from"path";var Br,za=C(()=>{Ae();Br=class extends Q{getLanguageName(){return"Rust"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 Rust \u4EE3\u7801","src/bin":"\u4E8C\u8FDB\u5236\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u591A\u4E2A\u53EF\u6267\u884C\u7A0B\u5E8F","src/lib.rs":"\u5E93\u9879\u76EE\u7684\u4E3B\u5165\u53E3\u6587\u4EF6","src/main.rs":"\u4E8C\u8FDB\u5236\u9879\u76EE\u7684\u4E3B\u5165\u53E3\u6587\u4EF6",target:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6\u548C\u4F9D\u8D56",tests:"\u96C6\u6210\u6D4B\u8BD5\u76EE\u5F55\uFF0C\u5305\u542B\u96C6\u6210\u6D4B\u8BD5\u4EE3\u7801",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",benches:"\u57FA\u51C6\u6D4B\u8BD5\u76EE\u5F55\uFF0C\u5305\u542B\u6027\u80FD\u6D4B\u8BD5\u4EE3\u7801",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",".cargo":"Cargo \u914D\u7F6E\u76EE\u5F55",vendor:"\u7B2C\u4E09\u65B9\u4F9D\u8D56\u5E93\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Vu(e,"Cargo.toml");if(Uu(r))try{let i=Wu(r,"utf-8").match(/rust-version\s*=\s*['"]([^'"]+)['"]/);i&&(n.Rust=i[1])}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["src/main.rs","src/lib.rs","src/bin/main.rs","src/bin/*.rs"]})}detectCodeStandards(e){let t={Rustfmt:["rustfmt.toml",".rustfmt.toml"],Clippy:["clippy.toml",".clippy.toml"],EditorConfig:[".editorconfig"],Cargo:["Cargo.toml","Cargo.lock"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".rs",".toml",".lock"]}getCommonTestExtensions(){return["_test.rs",".test.rs","tests/*.rs"]}getCommonConfigFiles(){return["Cargo.toml","Cargo.lock","rustfmt.toml","clippy.toml",".editorconfig","Makefile"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as Ha,readFileSync as Ja}from"fs";import{resolve as Ga}from"path";var qr,Ba=C(()=>{Ae();qr=class extends Q{getLanguageName(){return"PHP"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 PHP \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",public:"\u516C\u5171\u8BBF\u95EE\u76EE\u5F55\uFF0C\u5305\u542B\u5165\u53E3\u6587\u4EF6\u548C\u9759\u6001\u8D44\u6E90","index.php":"\u7F51\u7AD9\u5165\u53E3\u6587\u4EF6",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",vendor:"Composer \u4F9D\u8D56\u5E93\u76EE\u5F55",composer:"Composer \u76F8\u5173\u6587\u4EF6\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",controllers:"\u63A7\u5236\u5668\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",views:"\u89C6\u56FE\u6A21\u677F\u76EE\u5F55",routes:"\u8DEF\u7531\u5B9A\u4E49\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Ga(e,"composer.json");if(Ha(r))try{let i=Ja(r,"utf-8"),a=JSON.parse(i);a.require&&a.require.php&&(n.PHP=a.require.php)}catch{}let s=Ga(e,".php-version");if(Ha(s))try{let i=Ja(s,"utf-8");n.PHP=i.trim()}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["index.php","public/index.php","app/index.php","src/index.php","cli.php","artisan","bin/console","composer.json"]})}detectCodeStandards(e){let t={PHP_CodeSniffer:["phpcs.xml","phpcs.xml.dist",".phpcs.xml",".phpcs.xml.dist"],PHPStan:["phpstan.neon","phpstan.neon.dist","phpstan.yml","phpstan.yml.dist"],Psalm:["psalm.xml","psalm.xml.dist","psalm.yml","psalm.yml.dist"],"PHP-CS-Fixer":[".php-cs-fixer.php",".php-cs-fixer.dist.php"],EditorConfig:[".editorconfig"],PHPUnit:["phpunit.xml","phpunit.xml.dist"],Composer:["composer.json","composer.lock"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".php",".phtml",".phar",".json",".lock"]}getCommonTestExtensions(){return[".test.php",".spec.php","Test.php","Tests.php","tests/*.php"]}getCommonConfigFiles(){return["composer.json","composer.lock","phpcs.xml","phpstan.neon","psalm.xml",".php-cs-fixer.php","phpunit.xml",".editorconfig",".php-version"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as qa,readFileSync as Ka}from"fs";import{resolve as Ya}from"path";var Kr,Xa=C(()=>{Ae();Kr=class extends Q{getLanguageName(){return"Ruby"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 Ruby \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",vendor:"\u7B2C\u4E09\u65B9\u4F9D\u8D56\u5E93\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",controllers:"\u63A7\u5236\u5668\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",views:"\u89C6\u56FE\u6A21\u677F\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",routes:"\u8DEF\u7531\u5B9A\u4E49\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",spec:"RSpec \u6D4B\u8BD5\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",Gemfile:"RubyGems \u4F9D\u8D56\u914D\u7F6E\u6587\u4EF6"}}async detectVersions(e,t){let n={},r=Ya(e,".ruby-version");if(qa(r))try{let i=Ka(r,"utf-8");n.Ruby=i.trim()}catch{}let s=Ya(e,"Gemfile");if(qa(s))try{let a=Ka(s,"utf-8").match(/ruby\s+['"]([^'"]+)['"]/);a&&!n.Ruby&&(n.Ruby=a[1])}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["main.rb","app.rb","bin/rails","bin/rake","bin/console","config.ru","Rakefile","Gemfile"]})}detectCodeStandards(e){let t={RuboCop:[".rubocop.yml",".rubocop.yaml",".rubocop_todo.yml"],RSpec:["spec/spec_helper.rb","spec/rails_helper.rb"],Minitest:["test/test_helper.rb"],EditorConfig:[".editorconfig"],Bundler:["Gemfile","Gemfile.lock"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".rb",".gemspec",".rake",".ru",".lock"]}getCommonTestExtensions(){return["_test.rb",".test.rb","test_*.rb","*_test.rb","spec/**/*.rb","test/**/*.rb"]}getCommonConfigFiles(){return["Gemfile","Gemfile.lock",".rubocop.yml",".ruby-version",".ruby-gemset","Rakefile","config.ru",".editorconfig"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as zu,readFileSync as Qa}from"fs";import{resolve as Za}from"path";import{globSync as vs}from"glob";var Yr,ec=C(()=>{Ae();Yr=class extends Q{getLanguageName(){return".NET"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 .NET \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",bin:"\u7F16\u8BD1\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6",obj:"\u4E2D\u95F4\u7F16\u8BD1\u8F93\u51FA\u76EE\u5F55",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",packages:"NuGet \u5305\u76EE\u5F55",nuget:"NuGet \u76F8\u5173\u6587\u4EF6\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",Controllers:"\u63A7\u5236\u5668\u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",Models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",Views:"\u89C6\u56FE\u6A21\u677F\u76EE\u5F55\uFF08ASP.NET MVC \u9879\u76EE\uFF09",Pages:"Razor Pages \u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",wwwroot:"\u9759\u6001\u8D44\u6E90\u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=[...vs("*.csproj",{cwd:e}),...vs("*.vbproj",{cwd:e}),...vs("*.fsproj",{cwd:e})];for(let i of r)try{let a=Za(e,i),c=Qa(a,"utf-8"),l=c.match(/<TargetFramework>([^<]+)<\/TargetFramework>/)||c.match(/<TargetFrameworks>([^<]+)<\/TargetFrameworks>/);if(l){n[".NET Framework"]=l[1];break}let u=c.match(/<LangVersion>([^<]+)<\/LangVersion>/);u&&(n["C# Version"]=u[1])}catch{}let s=Za(e,"global.json");if(zu(s))try{let i=Qa(s,"utf-8"),a=JSON.parse(i);a.sdk&&a.sdk.version&&(n[".NET SDK"]=a.sdk.version)}catch{}return n}findEntryPoints(e,t){return this.findEntryPointsByConfig(e,t,{commonEntries:["Program.cs","Startup.cs","App.xaml.cs","MainWindow.xaml.cs","Program.vb","Startup.vb","App.xaml.vb","MainWindow.xaml.vb","Program.fs","Startup.fs"]})}detectCodeStandards(e){let t={StyleCop:[".stylecop","stylecop.json","stylecop.ruleset"],EditorConfig:[".editorconfig"],xUnit:["xunit.runner.json"],NUnit:["nunit.config","nunit3.config"],MSTest:["app.config","web.config"],NuGet:["nuget.config","packages.config"]};return this.detectCodeStandardsByFiles(e,t)}getCommonSourceExtensions(){return[".cs",".vb",".fs",".csproj",".vbproj",".fsproj",".config",".json",".xml"]}getCommonTestExtensions(){return["Test.cs","Tests.cs","Test.vb","Tests.vb","Test.fs","Tests.fs","*Test.csproj","*Tests.csproj"]}getCommonConfigFiles(){return["*.csproj","*.vbproj","*.fsproj","appsettings.json","app.config","web.config","nuget.config","packages.config","global.json",".editorconfig"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});var ws,Ue,bs=C(()=>{Oa();ja();_a();Va();za();Ba();Xa();ec();ws=class o{static instance;handlers=new Map;constructor(){this.registerHandlers()}static getInstance(){return o.instance||(o.instance=new o),o.instance}registerHandlers(){[new zr,new Hr,new Jr,new Gr,new Br,new qr,new Kr,new Yr].forEach(t=>{let n=t.getLanguageName();this.handlers.set(n.toLowerCase(),t),this.registerLanguageAliases(n,t)})}registerLanguageAliases(e,t){let n={"javascript/typescript":["javascript","typescript","node.js","nodejs"],java:["java","jdk","jvm"],python:["python","py"],go:["go","golang"],rust:["rust","rs"],php:["php"],ruby:["ruby","rb"],".net":["c#/.net","csharp","dotnet",".net","vb.net","f#"]},r=e.toLowerCase();n[r]&&n[r].forEach(s=>{this.handlers.set(s.toLowerCase(),t)})}getHandler(e){if(!e)return null;let t=e.toLowerCase();return this.handlers.get(t)||null}getSupportedLanguages(){return Array.from(new Set(Array.from(this.handlers.values()).map(e=>e.getLanguageName())))}getDirectoryDescriptions(e){let t=this.getHandler(e);return t?t.getDirectoryDescriptions():{src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u6240\u6709\u4E3B\u8981\u7684\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",dist:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55"}}async detectVersions(e,t,n){let r=this.getHandler(e);return r?await r.detectVersions(t,n):{}}findEntryPoints(e,t,n){let r=this.getHandler(e);return r?r.findEntryPoints(t,n):[]}detectCodeStandards(e,t){let n=this.getHandler(e);return n?n.detectCodeStandards(t):[]}getCommonSourceExtensions(e){let t=this.getHandler(e);return t?t.getCommonSourceExtensions():[]}getCommonTestExtensions(e){let t=this.getHandler(e);return t?t.getCommonTestExtensions():[]}getCommonConfigFiles(e){let t=this.getHandler(e);return t?t.getCommonConfigFiles():[]}getDirectoryDescriptionsForLanguages(e){let t={};return e.forEach(n=>{let r=this.getDirectoryDescriptions(n);Object.assign(t,r)}),t}async detectVersionsForLanguages(e,t,n){let r={};for(let s of e){let i=await this.detectVersions(s,t,n);Object.assign(r,i)}return r}findEntryPointsForLanguages(e,t,n){let r=[];for(let s of e){let i=this.findEntryPoints(s,t,n);r.push(...i)}return[...new Set(r)]}detectCodeStandardsForLanguages(e,t){let n=[];for(let r of e){let s=this.detectCodeStandards(r,t);n.push(...s)}return[...new Set(n)]}async validateCode(e,t,n){n||(n=this.detectLanguageFromFile(e));let r=this.getHandler(n);return r?await r.validateCode(e,t):{valid:!0,message:`No language handler found for: ${n}`}}detectLanguageFromFile(e){let t=e.split(".").pop()?.toLowerCase()||"";return{js:"javascript",jsx:"javascript",ts:"typescript",tsx:"typescript",mjs:"javascript",cjs:"javascript",py:"python",java:"java",go:"go",rs:"rust",php:"php",rb:"ruby",cs:"csharp",vb:"vb.net",fs:"f#"}[t]||"unknown"}},Ue=ws.getInstance()});import{resolve as Hu}from"path";import{existsSync as Ju}from"fs";async function Nn(o){return await tc.execute(o)}var Rt,tc,Un,nc=C(()=>{V();bs();Rt=class extends ${getDefinition(){return{name:"validate",description:`Validate code files for syntax errors, type errors, and code style issues.
|
|
437
|
+
|
|
438
|
+
\u{1F4CB} USE CASES:
|
|
439
|
+
- Verify generated code has no syntax errors
|
|
440
|
+
- Check TypeScript type correctness
|
|
441
|
+
- Validate Python code style with Flake8/Mypy
|
|
442
|
+
- Ensure code quality before committing
|
|
443
|
+
|
|
444
|
+
\u{1F511} PARAMETERS:
|
|
445
|
+
- path: File path to validate (relative or absolute)
|
|
446
|
+
- language: Programming language (optional, auto-detected from file extension)
|
|
447
|
+
|
|
448
|
+
\u{1F4A1} EXAMPLES:
|
|
449
|
+
- validate({ path: "src/utils/helper.ts" }) - Validate TypeScript file
|
|
450
|
+
- validate({ path: "lib/api.py", language: "python" }) - Validate Python file
|
|
451
|
+
- validate({ path: "app.js" }) - Validate JavaScript file
|
|
452
|
+
|
|
453
|
+
\u{1F4DD} RETURN VALUE:
|
|
454
|
+
- Success message if validation passes
|
|
455
|
+
- Detailed error messages with line numbers if validation fails
|
|
456
|
+
|
|
457
|
+
\u{1F3AF} SUPPORTED LANGUAGES:
|
|
458
|
+
- JavaScript/TypeScript: tsc type checking, ESLint
|
|
459
|
+
- Python: syntax check, Flake8, Mypy
|
|
460
|
+
- Other languages: gracefully skipped if no validator available
|
|
461
|
+
|
|
462
|
+
\u{1F517} RELATED TOOLS:
|
|
463
|
+
- read: View the content of files before or after validation
|
|
464
|
+
- merge: Modify files to fix validation errors
|
|
465
|
+
- searchReplace: Batch fix validation errors across multiple files
|
|
466
|
+
- shell: Run custom validation commands for unsupported languages`,input_schema:{type:"object",properties:{path:{type:"string",description:"File path to validate"},language:{type:"string",description:"Programming language (optional, auto-detected)"}},required:["path"]}}}async execute(e){try{let t=Hu(e.path);if(!Ju(t))return`Error: File not found: ${e.path}`;let n=process.cwd(),r=await Ue.validateCode(t,n,e.language);return this.formatValidationResult(r,e.path)}catch(t){return this.formatError(`Cannot validate ${e.path}`,t)}}formatValidationResult(e,t){if(e.valid){let n=`\u2705 Validation passed: ${t}
|
|
467
|
+
${e.message}`;return e.warnings&&e.warnings.length>0&&(n+=`
|
|
468
|
+
|
|
469
|
+
\u26A0\uFE0F Warnings (${e.warnings.length}):`,e.warnings.forEach((r,s)=>{let i=r.line?`Line ${r.line}${r.column?`:${r.column}`:""}`:"Unknown location";n+=`
|
|
470
|
+
${s+1}. [${i}] ${r.message}`,r.code&&(n+=` (${r.code})`)})),n}else{let n=`\u274C Validation failed: ${t}
|
|
471
|
+
${e.message}`;return e.errors&&e.errors.length>0&&(n+=`
|
|
472
|
+
|
|
473
|
+
Errors (${e.errors.length}):`,e.errors.forEach((r,s)=>{let i=r.line?`Line ${r.line}${r.column?`:${r.column}`:""}`:"Unknown location";n+=`
|
|
474
|
+
${s+1}. [${i}] ${r.message}`,r.code&&(n+=` (${r.code})`)})),e.warnings&&e.warnings.length>0&&(n+=`
|
|
475
|
+
|
|
476
|
+
Warnings (${e.warnings.length}):`,e.warnings.forEach((r,s)=>{let i=r.line?`Line ${r.line}${r.column?`:${r.column}`:""}`:"Unknown location";n+=`
|
|
477
|
+
${s+1}. [${i}] ${r.message}`,r.code&&(n+=` (${r.code})`)})),n}}},tc=new Rt;Un=tc});var Ts={};j(Ts,{CopyTool:()=>Mt,DeleteTool:()=>Pt,MergeTool:()=>It,MkdirTool:()=>kt,MoveTool:()=>$t,ReadTool:()=>Tt,SearchReplaceTool:()=>At,ValidateTool:()=>Rt,WriteTool:()=>Et,copyFile:()=>In,copyTool:()=>An,deleteFile:()=>En,deleteTool:()=>Pn,merge:()=>Ln,mergeTool:()=>Rn,mkdir:()=>bn,mkdirTool:()=>rt,moveFile:()=>$n,moveTool:()=>Mn,read:()=>vn,readTool:()=>wn,searchReplace:()=>Dn,searchReplaceTool:()=>Fn,validate:()=>Nn,validateTool:()=>Un,write:()=>Tn,writeTool:()=>kn});var Xr=C(()=>{la();ma();ps();fa();Ca();Ea();Aa();Fa();nc()});import{readFileSync as Gu,existsSync as Bu}from"fs";import{resolve as qu}from"path";function Yu(o){let e=qu(o,".niumignore"),t=[];if(Bu(e))try{Gu(e,"utf-8").split(`
|
|
478
|
+
`).forEach(r=>{let s=r.trim();s&&!s.startsWith("#")&&t.push(Xu(s))})}catch(n){console.warn(`Error reading .niumignore file: ${n instanceof Error?n.message:"Unknown error"}`)}return t}function Ee(o,e=!0){let t=Yu(o);return e?[...Ku,...t]:t}function Xu(o){if(o.startsWith("!")){let e=o.slice(1);return e.includes("/")||e.includes("\\")?o:`!**/${e}`}return o.includes("*")||o.includes("?")||o.includes("{")||o.includes("[")?o:o.endsWith("/")?`**/${o.slice(0,-1)}/**`:o.startsWith("*.")?o:!o.includes("/")&&!o.includes("\\")?`**/${o}/**`:o}var Ku,Dt=C(()=>{Ku=["**/.git/**","**/.svn/**","**/.hg/**","**/node_modules/**","**/vendor/**","**/.pnpm/**","**/bower_components/**","**/dist/**","**/build/**","**/out/**","**/target/**","**/.next/**","**/.nuxt/**","**/.output/**","**/.idea/**","**/.vscode/**","**/.vs/**","**/*.swp","**/*.swo","**/*~","**/.DS_Store","**/Thumbs.db","**/desktop.ini","**/.cache/**","**/tmp/**","**/temp/**","**/__pycache__/**","**/*.pyc","**/.pytest_cache/**","**/*.log","**/logs/**","**/.nium/archives/**","**/.nium/session.json","**/package-lock.json","**/yarn.lock","**/pnpm-lock.yaml","**/Gemfile.lock","**/Pipfile.lock","**/poetry.lock","**/Cargo.lock"]});import{globSync as rc}from"glob";function Wn(o){return oc.execute(o)}var Ft,oc,Vn,sc=C(()=>{V();Dt();Ft=class extends ${getDefinition(){return{name:"glob",description:`Search for files matching a glob pattern.
|
|
430
479
|
|
|
431
480
|
Examples:
|
|
432
481
|
- glob("*.js") - all .js files in current directory
|
|
433
482
|
- glob("**/*.ts") - all .ts files recursively
|
|
434
483
|
- glob("src/**/*.{js,ts}") - all .js and .ts files under src/
|
|
435
484
|
|
|
436
|
-
Returns an array of matching file paths.`,input_schema:{type:"object",properties:{pattern:{type:"string",description:'The glob pattern to match (e.g., "*.js", "**/*.ts")'},cwd:{type:"string",description:"Optional: the directory to search in (defaults to current directory)"}},required:["pattern"]}}}execute(e){try{let t=e.cwd||process.cwd(),n
|
|
485
|
+
Returns an array of matching file paths.`,input_schema:{type:"object",properties:{pattern:{type:"string",description:'The glob pattern to match (e.g., "*.js", "**/*.ts")'},cwd:{type:"string",description:"Optional: the directory to search in (defaults to current directory)"}},required:["pattern"]}}}execute(e){try{let t=e.cwd||process.cwd(),n=Ee(t),r=rc(e.pattern,{nodir:!0,cwd:e.cwd,ignore:n});if(r.length===0&&!e.pattern.startsWith("*")&&!e.pattern.startsWith("**")){let s=`**/${e.pattern}`;r=rc(s,{nodir:!0,cwd:e.cwd,ignore:n})}return r.length>0?r:`No files matching pattern: ${e.pattern}`}catch(t){return this.formatError("Glob pattern",t)}}},oc=new Ft;Vn=oc});import{readFileSync as ic}from"fs";import{dirname as Qu}from"path";import{globSync as Zu}from"glob";function zn(o){return ac.execute(o)}var Ot,ac,Hn,cc=C(()=>{V();Dt();Y();Ot=class extends ${getDefinition(){return{name:"grep",description:`Search for text patterns in files using regular expressions with glob support.
|
|
437
486
|
|
|
438
487
|
\u{1F4CB} USE CASES:
|
|
439
488
|
- Find code patterns and function definitions
|
|
@@ -464,8 +513,62 @@ Returns an array of matching file paths.`,input_schema:{type:"object",properties
|
|
|
464
513
|
- Cross-platform glob pattern matching
|
|
465
514
|
- Ignores system and gitignore files
|
|
466
515
|
- Case-sensitive matching (use regex flags for case-insensitive)
|
|
467
|
-
- Handles large files efficiently`,input_schema:{type:"object",properties:{pattern:{type:"string",description:"Regular expression pattern to search for"},path:{type:"string",description:"File path or glob pattern (e.g., 'src/main.js' or '**/*.js')"}},required:["pattern","path"]}}}execute(e){try{let t=[];try{let i=e.path.includes("/")||e.path.includes("\\")?
|
|
468
|
-
`),l=[];c.forEach((
|
|
516
|
+
- Handles large files efficiently`,input_schema:{type:"object",properties:{pattern:{type:"string",description:"Regular expression pattern to search for"},path:{type:"string",description:"File path or glob pattern (e.g., 'src/main.js' or '**/*.js')"}},required:["pattern","path"]}}}execute(e){try{let t=[];try{let i=e.path.includes("/")||e.path.includes("\\")?Qu(e.path):process.cwd(),c={nodir:!0,windowsPathsNoEscape:!0,absolute:!1,ignore:Ee(i)};if(e.path.includes("*")||e.path.includes("?")||e.path.includes("{")){if(x(`Processing glob pattern: ${e.path}`),t=Zu(e.path,c),t.length===0)return`No files found matching pattern: ${e.path}`;x(`Found ${t.length} files matching pattern`)}else try{let u=ic(e.path,"utf-8");t=[e.path]}catch(u){return u instanceof Error?`Error: ${u.message}`:`Error: Could not read file: ${e.path}`}}catch(i){return console.error("Glob error:",i),i instanceof Error?`Error: Grep failed - ${i.message}`:`Error: Grep failed - Unknown error processing glob pattern: ${e.path}`}if(t.length===0)return`No files found matching pattern: ${e.path}`;let n=new RegExp(e.pattern),r=[],s=0;return t.forEach(i=>{try{let c=ic(i,"utf-8").split(`
|
|
517
|
+
`),l=[];c.forEach((u,p)=>{n.test(u)&&(l.push(`${i}:${p+1}: ${u}`),s++)}),l.length>0&&r.push(...l)}catch(a){r.push(`Error reading file ${i}: ${a instanceof Error?a.message:"Unknown error"}`)}}),s>0?(t.length>1&&r.unshift(`Found ${s} matches in ${t.length} files`),r):`No matches found for pattern: ${e.pattern} in ${t.length} files`}catch(t){return this.formatError("Grep",t)}}},ac=new Ot;Hn=ac});import{readFileSync as eg,existsSync as tg}from"fs";import{join as ng}from"path";import{globSync as rg}from"glob";function Jn(o){return lc.execute(o)}var jt,lc,Gn,uc=C(()=>{V();Dt();jt=class extends ${getDefinition(){return{name:"search-docs",description:`Search for content in documentation files using keywords and regular expressions.
|
|
518
|
+
|
|
519
|
+
\u{1F4CB} USE CASES:
|
|
520
|
+
- Find information in project documentation
|
|
521
|
+
- Search for specific topics across multiple docs
|
|
522
|
+
- Locate configuration guidelines in docs
|
|
523
|
+
- Find usage examples and tutorials
|
|
524
|
+
- Search for API documentation
|
|
525
|
+
|
|
526
|
+
\u{1F511} PARAMETERS:
|
|
527
|
+
- query: Search query string or regular expression pattern (required)
|
|
528
|
+
- path: Documentation directory or file path (default: ".niums/docs")
|
|
529
|
+
- maxResults: Maximum number of results to return (default: 10)
|
|
530
|
+
|
|
531
|
+
\u{1F4A1} EXAMPLES:
|
|
532
|
+
- search-docs({ query: "API", path: ".niums/docs" }) - Search for API in docs
|
|
533
|
+
- search-docs({ query: "configuration", maxResults: 5 }) - Get top 5 results for configuration
|
|
534
|
+
- search-docs({ query: "function.*example", path: ".niums/docs/examples" }) - Regex search in examples
|
|
535
|
+
|
|
536
|
+
\u{1F4DD} RETURN VALUE:
|
|
537
|
+
- Array of matching results with file paths, line numbers, and content
|
|
538
|
+
- Results sorted by relevance score
|
|
539
|
+
- Each result formatted as: "path:line: content"
|
|
540
|
+
- Summary statistics for multiple files
|
|
541
|
+
- Helpful error messages for invalid queries or no matches
|
|
542
|
+
|
|
543
|
+
\u{1F517} RELATED TOOLS:
|
|
544
|
+
- read: View the full content of files found in search results
|
|
545
|
+
- grep: Search for code patterns in source files (complementary to documentation search)
|
|
546
|
+
- glob: Find specific documentation files by pattern before searching`,input_schema:{type:"object",properties:{query:{type:"string",description:"Search query string or regular expression pattern"},path:{type:"string",description:"Documentation directory or file path (default: .niums/docs)"},maxResults:{type:"number",description:"Maximum number of results to return (default: 10)"}},required:["query"]}}}execute(e){try{let t=e.path||".niums/docs",n=e.maxResults||10,{query:r}=e;if(!tg(t))return`Documentation directory not found: ${t}`;let s=process.cwd(),a={nodir:!0,windowsPathsNoEscape:!0,absolute:!1,ignore:Ee(s),cwd:s},c=ng(t,"**/*.{md,markdown,txt,rst,html,htm}"),l=rg(c,a);if(l.length===0)return`No documentation files found in: ${t}`;let u=new RegExp(r,"i"),p=[];if(l.forEach(m=>{try{eg(m,"utf-8").split(`
|
|
547
|
+
`).forEach((v,T)=>{if(u.test(v)){let f=this.calculateMatchScore(v,r,T);p.push({path:m,line:T+1,content:v.trim(),score:f})}})}catch{}}),p.length===0)return`No matches found for query: ${r} in ${l.length} files`;p.sort((m,h)=>h.score-m.score);let g=p.slice(0,n),d=[];return d.push(`Found ${p.length} matches in ${l.length} files, showing top ${g.length} results:`),g.forEach(m=>{d.push(`${m.path}:${m.line}: ${m.content}`)}),d}catch(t){return this.formatError("Search Docs",t)}}calculateMatchScore(e,t,n){let r=100/(e.length+1);return e.toLowerCase().startsWith(t.toLowerCase())&&(r+=50),e.toLowerCase()===t.toLowerCase()&&(r+=100),r+=100/(n+1),r}},lc=new jt;Gn=lc});import{readFileSync as gc,writeFileSync as og,existsSync as sg,mkdirSync as ig}from"fs";import{join as Bn}from"path";import{globSync as ag}from"glob";function qn(o={}){return pc.execute(o)}var _t,pc,Kn,dc=C(()=>{V();Dt();_t=class extends ${getDefinition(){return{name:"build-doc-index",description:`Build and update documentation index for efficient search.
|
|
548
|
+
|
|
549
|
+
\u{1F4CB} USE CASES:
|
|
550
|
+
- Create initial documentation index
|
|
551
|
+
- Update index when docs are added or modified
|
|
552
|
+
- Refresh index to ensure search accuracy
|
|
553
|
+
- Maintain up-to-date metadata for docs
|
|
554
|
+
|
|
555
|
+
\u{1F511} PARAMETERS:
|
|
556
|
+
- path: Documentation directory path (default: ".niums/docs")
|
|
557
|
+
|
|
558
|
+
\u{1F4A1} EXAMPLES:
|
|
559
|
+
- build-doc-index() - Build index for default docs directory
|
|
560
|
+
- build-doc-index({ path: ".niums/docs" }) - Build index for specific docs directory
|
|
561
|
+
- build-doc-index({ path: "docs/" }) - Build index for custom docs location
|
|
562
|
+
|
|
563
|
+
\u{1F4DD} RETURN VALUE:
|
|
564
|
+
- Success message with index statistics
|
|
565
|
+
- Path to generated index file
|
|
566
|
+
- Number of documents indexed
|
|
567
|
+
- Any warnings or errors encountered`,input_schema:{type:"object",properties:{path:{type:"string",description:"Documentation directory path (default: .niums/docs)"}}}}}execute(e){try{let t=e.path||".niums/docs",n=process.cwd(),r=Bn(n,t);if(!sg(r))return`Documentation directory not found: ${r}`;let i={nodir:!0,windowsPathsNoEscape:!0,absolute:!1,ignore:Ee(n),cwd:n},a=Bn(t,"**/*.{md,markdown,txt,rst,html,htm}"),c=ag(a,i);if(c.length===0)return`No documentation files found in: ${t}`;let l=[];c.forEach(d=>{try{let m=Bn(n,d),h=gc(m,"utf-8"),w=gc(m,"utf-8").length,v=this.extractDocMetadata(d,h,w);l.push(v)}catch{}});let u={documents:l,lastIndexed:new Date().toISOString(),totalDocuments:l.length},p=Bn(n,t);ig(p,{recursive:!0});let g=Bn(p,".index.json");return og(g,JSON.stringify(u,null,2),"utf-8"),`Successfully built documentation index:
|
|
568
|
+
- Index file: ${g}
|
|
569
|
+
- Total documents indexed: ${u.totalDocuments}
|
|
570
|
+
- Last indexed: ${u.lastIndexed}
|
|
571
|
+
- Documentation directory: ${t}`}catch(t){return this.formatError("Build Doc Index",t)}}extractDocMetadata(e,t,n){let r=this.extractTitle(e,t),s=this.extractSummary(t),i=this.extractKeywords(t),a=new Date().toISOString();return{path:e,title:r,summary:s,keywords:i,lastModified:a,size:n}}extractTitle(e,t){let n=t.match(/^#\s+(.+)$/m);if(n&&n[1])return n[1].trim();let r=t.match(/<h1[^>]*>(.+?)<\/h1>/i);return r&&r[1]?r[1].trim():(e.split(/[\\/]/).pop()||e).replace(/\.(md|markdown|txt|rst|html|htm)$/i,"").replace(/[-_]/g," ").replace(/\b\w/g,a=>a.toUpperCase())}extractSummary(e){let t=e.replace(/\s+/g," ").replace(/[#*_~`]|\[|\]|\(|\)|<[^>]*>|\n/g," ").trim();return t.length>150?t.substring(0,150)+"...":t}extractKeywords(e){let t=e.replace(/\s+/g," ").replace(/[#*_~`]|\[|\]|\(|\)|<[^>]*>|\n/g," ").toLowerCase(),r=["api","configuration","usage","example","tutorial","guide","documentation","setup","installation","usage","examples","howto","faq","reference","overview","introduction","concept","architecture","design","implementation","deployment","testing","troubleshooting","best practices","tips","tricks"].filter(u=>t.includes(u)),s=t.split(/\s+/).filter(u=>u.length>3),i={};s.forEach(u=>{i[u]=(i[u]||0)+1});let a=Object.entries(i).sort(([,u],[,p])=>p-u).map(([u])=>u).slice(0,5),c=[...r,...a];return Array.from(new Set(c))}},pc=new _t;Kn=pc});var ks={};j(ks,{BuildDocIndexTool:()=>_t,GlobTool:()=>Ft,GrepTool:()=>Ot,SearchDocsTool:()=>jt,buildDocIndex:()=>qn,buildDocIndexTool:()=>Kn,glob:()=>Wn,globTool:()=>Vn,grep:()=>zn,grepTool:()=>Hn,searchDocs:()=>Jn,searchDocsTool:()=>Gn});var Qr=C(()=>{sc();cc();uc();dc()});import{execSync as cg,exec as lg,spawnSync as ug}from"child_process";import*as Zr from"os";async function fc(){if(mc)return Es;mc=!0;try{let o=await import("iconv-lite");return Es=o.default||o,Es}catch{return console.warn("iconv-lite not available, using utf8 fallback for Windows encoding"),null}}function Yn(o){return Promise.resolve(Ut.execute(o))}var Es,mc,Nt,Ut,hc=C(()=>{V();Es=null,mc=!1;Nt=class o extends ${static HIGH_RISK_COMMANDS=["rm -rf","rm -r","del /q /s","erase /f /s","format","mkfs","dd if=","mv /force","shred","wipe","truncate -s 0","> filename","chmod -R 000","chown -R root:root"];isHighRiskCommand(e){if(!e)return!1;let t=e.toLowerCase().trim();return o.HIGH_RISK_COMMANDS.some(n=>t.includes(n.toLowerCase()))}isUnixCommand(e){return["ls","pwd","which","cat","rm","cp","mv","mkdir","grep","find","head","tail","touch","chmod","chown","ps","kill","ifconfig","netstat","top","df","du","wc","awk","sed","tar","gzip","ssh"].includes(e.toLowerCase())}convertUnixToWindowsCommand(e){let t={ls:"dir","ls -la":"dir","ls -l":"dir","ls -a":"dir /a",pwd:"cd",which:"where",cat:"type",rm:"del","rm -rf":"rmdir /s /q","rm -r":"rmdir /s /q",cp:"copy","cp -r":"xcopy /e /i /y",mv:"move",mkdir:"mkdir","mkdir -p":"mkdir",grep:"findstr",find:"findstr",head:"more",tail:"more +n",touch:"type nul >",chmod:"attrib",chown:"attrib",ps:"tasklist",kill:"taskkill",ifconfig:"ipconfig",netstat:"netstat",top:"tasklist /v",df:"wmic logicaldisk get size,freespace,caption",du:"dir /s",wc:'find /c /v ""'};if(t[e])return t[e];let n=Object.entries(t).sort((r,s)=>s[0].length-r[0].length);for(let[r,s]of n)if(e.startsWith(r+" ")){if(r==="rm -rf"||r==="rm -r"){let i=e.substring(r.length).trim();return`${s} ${i}`}return e.replace(r,s)}return e}getShellCommand(e){let t=Zr.platform(),n=e||"";return t==="win32"&&n&&(n=this.convertUnixToWindowsCommand(n)),t==="win32"?{shell:"cmd.exe",args:[],cmd:n}:{shell:"/bin/sh",args:["-c"],cmd:n}}getDefinition(){return{name:"shell",description:`Execute shell commands on the system with intelligent cross-platform support.
|
|
469
572
|
|
|
470
573
|
\u{1F30D} **\u667A\u80FD\u73AF\u5883\u611F\u77E5**
|
|
471
574
|
\u6B64\u5DE5\u5177\u4F1A\u6839\u636E\u5F53\u524D\u8FD0\u884C\u5E73\u53F0\u81EA\u52A8\u4F18\u5316\u547D\u4EE4\u6267\u884C\uFF1A
|
|
@@ -557,38 +660,38 @@ Returns an array of matching file paths.`,input_schema:{type:"object",properties
|
|
|
557
660
|
`,i+=` - dnf: sudo dnf install <package-name> (Fedora)
|
|
558
661
|
`))),i+=`
|
|
559
662
|
\u26A0\uFE0F Please install the required command before proceeding.
|
|
560
|
-
`,i+=" The AI assistant cannot continue without this tool being available.",i}async execute(e){try{let{command:t,timeout:n=6e4,captureOutput:r=!0}=e;if(!t){let
|
|
561
|
-
${
|
|
663
|
+
`,i+=" The AI assistant cannot continue without this tool being available.",i}async execute(e){try{let{command:t,timeout:n=6e4,captureOutput:r=!0}=e;if(!t){let g=Zr.platform(),m=`Running on ${g} with ${g==="win32"?"cmd.exe":"/bin/sh"}`,h=`Executing command: ${t}`;return console.error("[SHELL TOOL ERROR] Command is undefined or null"),console.error("[SHELL TOOL ERROR] Input received:",JSON.stringify(e,null,2)),console.error("[SHELL TOOL ERROR] Stack trace:",new Error().stack),this.createToolResult({error:"Command is undefined or null",success:!1},`${m}
|
|
664
|
+
${h}
|
|
562
665
|
|
|
563
666
|
Command failed with error:
|
|
564
|
-
TypeError: Command is undefined or null`)}let s
|
|
667
|
+
TypeError: Command is undefined or null`)}let s=Zr.platform(),{shell:i,args:a,cmd:c}=this.getShellCommand(t),l={shell:i,timeout:n,encoding:"utf8",windowsHide:!0,windowsVerbatimArguments:s==="win32"},u=`Running on ${s} with ${i}`,p=`Executing command: ${t}`;if(r)try{let g="";if(s==="win32"){let d=`chcp 65001 >nul 2>&1 && ${c}`,m=ug("cmd.exe",["/c",d],{stdio:"pipe",windowsHide:!0,encoding:"buffer"}),h=m.stdout||Buffer.alloc(0),w=m.stderr||Buffer.alloc(0),v=Buffer.concat([h,w]);try{let T=await fc();if(T){let f=["cp936","gbk","utf8","gb2312","big5"],y=!1;for(let S of f)try{if(g=T.decode(v,S),/[\u4e00-\u9fff]/.test(g)||g.length>0){y=!0;break}}catch{continue}y||(g=v.toString("utf8"))}else g=v.toString("utf8");m.status===0&&g&&g.trim()&&(g+=`
|
|
565
668
|
|
|
566
|
-
\u2705 Windows\u7F16\u7801\u5DF2\u4F18\u5316\u5904\u7406`)}catch{
|
|
669
|
+
\u2705 Windows\u7F16\u7801\u5DF2\u4F18\u5316\u5904\u7406`)}catch{g=v.toString("utf8")}}else{let d=[...a,c].join(" ");g=cg(d,l).toString()}if(this.isCommandNotFoundError(g,s)){let d=this.extractCommandName(t),m=this.generateCommandNotFoundMessage(d,s);return this.createToolResult({error:g,success:!1,commandNotFound:!0},`${u}
|
|
567
670
|
${p}
|
|
568
671
|
|
|
569
|
-
${
|
|
672
|
+
${m}
|
|
570
673
|
|
|
571
674
|
Original error:
|
|
572
|
-
${
|
|
675
|
+
${g}`,!0)}return this.createToolResult(g,`${u}
|
|
573
676
|
${p}
|
|
574
677
|
|
|
575
678
|
Command output:
|
|
576
|
-
${
|
|
679
|
+
${g}`)}catch(g){let d="";if(s==="win32"&&g.stderr){let m=Buffer.isBuffer(g.stderr)?g.stderr:Buffer.from(g.stderr),h=await fc();if(h)try{let w=["cp936","gbk","utf8","gb2312"],v="";for(let T of w)try{if(v=h.decode(m,T),v.length>0){d+=v;break}}catch{continue}v||(d+=m.toString("utf8"))}catch{d+=m.toString("utf8")}else d+=m.toString("utf8")}else g.stderr&&(d+=g.stderr),g.stdout&&(d+=g.stdout),d||(d=String(g));if(this.isCommandNotFoundError(d,s)){let m=this.extractCommandName(t),h=this.generateCommandNotFoundMessage(m,s),w=h;return s==="win32"&&this.isUnixCommand(m)&&(w=`\u{1F504} Command Auto-Conversion: Unix command '${m}' was automatically converted to Windows equivalent
|
|
577
680
|
|
|
578
|
-
${
|
|
681
|
+
${h}`),this.createToolResult({error:d,success:!1,commandNotFound:!0},`${u}
|
|
579
682
|
${p}
|
|
580
683
|
|
|
581
684
|
${w}
|
|
582
685
|
|
|
583
686
|
Original error:
|
|
584
|
-
${
|
|
687
|
+
${d}`,!0)}return this.createToolResult({error:d,success:!1},`${u}
|
|
585
688
|
${p}
|
|
586
689
|
|
|
587
690
|
Command failed with error:
|
|
588
|
-
${
|
|
691
|
+
${d}`,!0)}else{let g=t;s==="win32"?g=`chcp 65001 > nul && ${c}`:g=[...a,c].join(" ");let d=lg(g,l);return this.createToolResult({success:!0,message:"Command started in background"},`${u}
|
|
589
692
|
${p}
|
|
590
693
|
|
|
591
|
-
Command started in background. No output will be captured.`,!0)}}catch(t){return this.formatError("Cannot execute shell command",t)}}formatAction(e){let t=super.formatAction(e);return this.isHighRiskCommand(e.command)?`${t} \u26A0\uFE0F HIGH RISK COMMAND - Requires confirmation!`:t}},
|
|
694
|
+
Command started in background. No output will be captured.`,!0)}}catch(t){return this.formatError("Cannot execute shell command",t)}}formatAction(e){let t=super.formatAction(e);return this.isHighRiskCommand(e.command)?`${t} \u26A0\uFE0F HIGH RISK COMMAND - Requires confirmation!`:t}},Ut=new Nt});var Ps={};j(Ps,{ShellTool:()=>Nt,shell:()=>Yn,shellTool:()=>Ut});var eo=C(()=>{hc()});var Ms={};j(Ms,{THINK_TOOL:()=>to,ThinkTool:()=>ot,extractThought:()=>no,isThinkTool:()=>zt,think:()=>Wt,thinkTool:()=>Vt});function Wt(o){return $s.execute(o)}function zt(o){return o==="think"}function no(o){if(!o||!o.function||o.function.name!=="think")return null;try{return JSON.parse(o.function.arguments).thought||null}catch{return null}}var ot,$s,Vt,to,Xn=C(()=>{V();ot=class extends ${getDefinition(){return{name:"think",description:`Use this tool to think, reason, and reflect before taking actions.
|
|
592
695
|
This is a zero-side-effect tool that makes your thinking process observable.
|
|
593
696
|
|
|
594
697
|
IMPORTANT: You should call this tool:
|
|
@@ -596,12 +699,175 @@ IMPORTANT: You should call this tool:
|
|
|
596
699
|
- AFTER receiving an Observation (to reflect on the result)
|
|
597
700
|
- When you need to analyze complex situations
|
|
598
701
|
|
|
599
|
-
The thought content will be logged but won't change any data or state.`,input_schema:{type:"object",properties:{thought:{type:"string",description:"Your internal reasoning, analysis, or reflection. Be detailed and explicit about your thought process."}},required:["thought"]}}}execute(e){return"Noted. Continue with your action."}}
|
|
702
|
+
The thought content will be logged but won't change any data or state.`,input_schema:{type:"object",properties:{thought:{type:"string",description:"Your internal reasoning, analysis, or reflection. Be detailed and explicit about your thought process."}},required:["thought"]}}}execute(e){return"Noted. Continue with your action."}},$s=new ot;Vt=$s,to=$s.getDefinition()});var Fs={};j(Fs,{SYSTEM_PROMPT:()=>st,generateAgentMatchingPrompt:()=>Ds,generateSystemPrompt:()=>Cc,generateTaskComplexityEvaluationPrompt:()=>Is,generateTaskPlanningConversionPrompt:()=>Rs,generateTaskPlanningMarkdownPrompt:()=>Ls,generateTaskPlanningPrompt:()=>As});function Cc(o=Qn(),e="all"){let t=o.map(a=>`- ${a.name}: ${a.description}`).join(`
|
|
703
|
+
`),n=yc.all,r=yc[e]||[];return`<instructions>
|
|
704
|
+
${[...new Set([...n,...r])].map(a=>gg[a]).join(`
|
|
705
|
+
`)}
|
|
706
|
+
|
|
707
|
+
<available_tools>
|
|
708
|
+
You have access to the following tools (detailed schemas are provided separately):
|
|
709
|
+
|
|
710
|
+
${t}
|
|
711
|
+
|
|
712
|
+
The system will provide you with the exact parameter schemas for each tool. When using tools, pay special attention to required parameters and their formats.
|
|
713
|
+
Use the tool definitions to understand what parameters each tool requires.
|
|
714
|
+
</available_tools>
|
|
715
|
+
</instructions>`}function Is(o){return`\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u590D\u6742\u5EA6\u8BC4\u4F30\u4E13\u5BB6\u3002\u8BF7\u8BC4\u4F30\u4EE5\u4E0B\u4EFB\u52A1\u7684\u590D\u6742\u5EA6\u3002
|
|
716
|
+
|
|
717
|
+
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
718
|
+
${o}
|
|
600
719
|
|
|
601
|
-
|
|
602
|
-
|
|
720
|
+
\u8BC4\u4F30\u6807\u51C6\uFF1A
|
|
721
|
+
- SIMPLE\uFF08\u7B80\u5355\u4EFB\u52A1\uFF09\uFF1A\u5355\u4E00\u660E\u786E\u7684\u64CD\u4F5C\uFF0C\u6BD4\u5982\u8BFB\u53D6\u6587\u4EF6\u3001\u521B\u5EFA\u7B80\u5355\u6587\u4EF6\u3001\u6267\u884C\u5355\u4E2A\u547D\u4EE4\u7B49\uFF0C\u4E0D\u9700\u8981\u590D\u6742\u601D\u8003\u6216\u89C4\u5212
|
|
722
|
+
- MEDIUM\uFF08\u4E2D\u7B49\u4EFB\u52A1\uFF09\uFF1A\u9700\u89812-3\u4E2A\u6B65\u9AA4\u7684\u64CD\u4F5C\uFF0C\u53EF\u80FD\u6D89\u53CA\u7B80\u5355\u7684\u6587\u4EF6\u4FEE\u6539\u6216\u57FA\u672C\u903B\u8F91
|
|
723
|
+
- COMPLEX\uFF08\u590D\u6742\u4EFB\u52A1\uFF09\uFF1A\u9700\u8981\u591A\u4E2A\u6B65\u9AA4\uFF083\u4E2A\u4EE5\u4E0A\uFF09\u3001\u6D89\u53CA\u591A\u4E2A\u6587\u4EF6\u4FEE\u6539\u3001\u9700\u8981\u8BE6\u7EC6\u89C4\u5212\u6216\u903B\u8F91\u63A8\u7406\u7684\u4EFB\u52A1
|
|
724
|
+
|
|
725
|
+
\u8BF7\u53EA\u56DE\u590D "SIMPLE"\u3001"MEDIUM" \u6216 "COMPLEX"\uFF0C\u4E0D\u8981\u6709\u5176\u4ED6\u5185\u5BB9\u3002`}function As(o,e=[]){let t=e.length>0?e.map(r=>`${r.name}(${r.description})`).join(", "):"default",n=e.length>0?`
|
|
726
|
+
|
|
727
|
+
\u53EF\u7528\u7684\u5B50\u667A\u80FD\u4F53\uFF1A
|
|
728
|
+
${e.map(r=>`- ${r.name}: ${r.description}`).join(`
|
|
729
|
+
`)}`:"";return`\u4F60\u662F\u4E00\u4F4D\u4EFB\u52A1\u89C4\u5212\u4E13\u5BB6\u3002\u8BF7\u4E3A\u4EE5\u4E0B\u7528\u6237\u8BF7\u6C42\u751F\u6210\u4E00\u4E2A\u9AD8\u8D28\u91CF\u7684\u6267\u884C\u8BA1\u5212\u3002
|
|
730
|
+
|
|
731
|
+
\u7528\u6237\u8BF7\u6C42\uFF1A
|
|
732
|
+
${o}
|
|
733
|
+
${n}
|
|
734
|
+
|
|
735
|
+
## \u89C4\u5212\u8981\u6C42
|
|
736
|
+
|
|
737
|
+
1. **\u6B65\u9AA4\u9897\u7C92\u5EA6**: \u6BCF\u4E2A\u6B65\u9AA4\u5E94\u8BE5\u662F\u5927\u9897\u7C92\u5EA6\u7684\u4EFB\u52A1\u62C6\u5206(2-4\u4E2A\u6B65\u9AA4)
|
|
738
|
+
|
|
739
|
+
2. **\u5DE5\u5177\u6743\u9650\u63A7\u5236** (\u91CD\u8981):
|
|
740
|
+
- \u5F53\u6B65\u9AA4\u4F7F\u7528 **default \u901A\u7528\u667A\u80FD\u4F53** \u65F6\uFF0C\u5FC5\u987B\u6307\u5B9A \`allowedTools\` \u5217\u8868
|
|
741
|
+
- \u5F53\u6B65\u9AA4\u4F7F\u7528 **\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53** \u65F6\uFF0C\`allowedTools\` \u53EF\u4EE5\u7701\u7565(\u5B50\u667A\u80FD\u4F53\u6709\u5B8C\u6574\u6743\u9650)
|
|
742
|
+
|
|
743
|
+
3. **\u5E38\u89C1\u6B65\u9AA4\u7684\u5DE5\u5177\u914D\u7F6E**:
|
|
744
|
+
|
|
745
|
+
| \u6B65\u9AA4\u6027\u8D28 | allowedTools \u914D\u7F6E | \u793A\u4F8B\u573A\u666F |
|
|
746
|
+
|---------|------------------|---------|
|
|
747
|
+
| \u7EAF\u5206\u6790\u89C4\u5212 | \`["read", "glob", "grep", "quickProjectScan", "think", "askUser"]\` | \u9700\u6C42\u5206\u6790\u3001\u6280\u672F\u9009\u578B\u3001\u65B9\u6848\u8BBE\u8BA1 |
|
|
748
|
+
| \u4EE3\u7801\u63A2\u7D22 | \`["read", "glob", "grep", "quickProjectScan", "shell", "think"]\` | \u5206\u6790\u73B0\u6709\u67B6\u6784\u3001\u67E5\u627E\u6A21\u5757 |
|
|
749
|
+
| \u4EE3\u7801\u5B9E\u73B0 | \`["read", "write", "merge", "delete", "mkdir", "glob", "grep", "shell", "think"]\` | \u521B\u5EFA\u6587\u4EF6\u3001\u5B9E\u73B0\u529F\u80FD |
|
|
750
|
+
| \u6D4B\u8BD5\u9A8C\u8BC1 | \`["read", "shell", "glob", "grep", "think"]\` | \u8FD0\u884C\u6D4B\u8BD5\u3001\u67E5\u770B\u7ED3\u679C |
|
|
751
|
+
|
|
752
|
+
4. **\u5B50\u667A\u80FD\u4F53\u9009\u62E9**:
|
|
753
|
+
\u53EF\u7528\u5B50\u667A\u80FD\u4F53: ${t}
|
|
754
|
+
- explorer: \u4E13\u95E8\u7528\u4E8E\u9879\u76EE\u63A2\u7D22\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u53EA\u8BFB\u6743\u9650
|
|
755
|
+
- coder: \u4E13\u95E8\u7528\u4E8E\u4EE3\u7801\u5B9E\u73B0\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u8BFB\u5199\u6743\u9650
|
|
756
|
+
- default: \u901A\u7528\u667A\u80FD\u4F53\uFF0C\u9700\u8981\u660E\u786E\u6307\u5B9A allowedTools
|
|
757
|
+
|
|
758
|
+
## \u793A\u4F8B\u89C4\u5212
|
|
759
|
+
|
|
760
|
+
### \u274C \u9519\u8BEF\u793A\u4F8B
|
|
761
|
+
\`\`\`json
|
|
762
|
+
{
|
|
763
|
+
"steps": [
|
|
764
|
+
{
|
|
765
|
+
"description": "\u5B8C\u6210\u9700\u6C42\u5206\u6790\u4E0E\u6280\u672F\u9009\u578B",
|
|
766
|
+
"subAgent": "default"
|
|
767
|
+
// \u274C \u7F3A\u5C11 allowedTools\uFF0C\u667A\u80FD\u4F53\u53EF\u80FD\u6EE5\u7528\u5199\u5DE5\u5177
|
|
768
|
+
}
|
|
769
|
+
]
|
|
770
|
+
}
|
|
771
|
+
\`\`\`
|
|
772
|
+
|
|
773
|
+
### \u2705 \u6B63\u786E\u793A\u4F8B1: \u4F7F\u7528 default \u667A\u80FD\u4F53 + \u660E\u786E\u5DE5\u5177\u6743\u9650
|
|
774
|
+
\`\`\`json
|
|
775
|
+
{
|
|
776
|
+
"overview": "\u521D\u59CB\u5316\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF",
|
|
777
|
+
"steps": [
|
|
778
|
+
{
|
|
779
|
+
"description": "\u5206\u6790\u5F53\u524D\u9879\u76EE\u6280\u672F\u6808(\u901A\u8FC7\u8BFB\u53D6 project.json)\uFF0C\u8F93\u51FA\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\u7684\u6280\u672F\u65B9\u6848\u6587\u6863\uFF0C\u5305\u62EC\u6570\u636E\u5E93\u8BBE\u8BA1\u3001API\u63A5\u53E3\u89C4\u8303\u3001\u8BA4\u8BC1\u65B9\u6848",
|
|
780
|
+
"subAgent": "default",
|
|
781
|
+
"allowedTools": ["read", "glob", "grep", "quickProjectScan", "think", "askUser"]
|
|
782
|
+
},
|
|
783
|
+
{
|
|
784
|
+
"description": "\u57FA\u4E8E\u65B9\u6848\u6587\u6863\uFF0C\u5B9E\u73B0\u7528\u6237\u6A21\u578B\u3001CRUD API\u3001JWT\u8BA4\u8BC1\u4E2D\u95F4\u4EF6\u7B49\u6838\u5FC3\u529F\u80FD",
|
|
785
|
+
"subAgent": "default",
|
|
786
|
+
"allowedTools": ["read", "write", "merge", "mkdir", "glob", "grep", "shell", "think"]
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
"description": "\u8FD0\u884C\u9879\u76EE\u6D4B\u8BD5\u5957\u4EF6\uFF0C\u9A8C\u8BC1\u7528\u6237\u6CE8\u518C\u3001\u767B\u5F55\u3001\u6743\u9650\u9A8C\u8BC1\u529F\u80FD\u662F\u5426\u6B63\u5E38",
|
|
790
|
+
"subAgent": "default",
|
|
791
|
+
"allowedTools": ["read", "shell", "glob", "grep", "think"]
|
|
792
|
+
}
|
|
793
|
+
],
|
|
794
|
+
"expectedResult": "\u5B8C\u6210\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\u7684\u5B8C\u6574\u5B9E\u73B0\u5E76\u901A\u8FC7\u6D4B\u8BD5"
|
|
795
|
+
}
|
|
796
|
+
\`\`\`
|
|
797
|
+
|
|
798
|
+
### \u2705 \u6B63\u786E\u793A\u4F8B2: \u4F7F\u7528\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53(\u65E0\u9700\u6307\u5B9A allowedTools)
|
|
799
|
+
\`\`\`json
|
|
800
|
+
{
|
|
801
|
+
"overview": "\u91CD\u6784\u9879\u76EE\u67B6\u6784",
|
|
802
|
+
"steps": [
|
|
803
|
+
{
|
|
804
|
+
"description": "\u63A2\u7D22\u73B0\u6709\u9879\u76EE\u7ED3\u6784\uFF0C\u5206\u6790\u6A21\u5757\u4F9D\u8D56\u5173\u7CFB\u548C\u4EE3\u7801\u7EC4\u7EC7\u65B9\u5F0F",
|
|
805
|
+
"subAgent": "explorer"
|
|
806
|
+
// \u2705 \u4F7F\u7528 explorer \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
"description": "\u6839\u636E\u5206\u6790\u7ED3\u679C\uFF0C\u91CD\u6784\u4EE3\u7801\u7ED3\u6784\uFF0C\u4F18\u5316\u6A21\u5757\u5212\u5206",
|
|
810
|
+
"subAgent": "coder"
|
|
811
|
+
// \u2705 \u4F7F\u7528 coder \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
812
|
+
}
|
|
813
|
+
],
|
|
814
|
+
"expectedResult": "\u5B8C\u6210\u67B6\u6784\u91CD\u6784\u5E76\u4FDD\u6301\u529F\u80FD\u5B8C\u6574\u6027"
|
|
815
|
+
}
|
|
816
|
+
\`\`\`
|
|
817
|
+
|
|
818
|
+
\u8BF7\u4F7F\u7528 create_task_plan \u5DE5\u5177\u8FD4\u56DE\u7ED3\u6784\u5316\u7684\u4EFB\u52A1\u89C4\u5212\u3002`}function Ls(o,e=[]){let t=e.length>0?`
|
|
819
|
+
\u53EF\u7528\u7684\u5B50\u667A\u80FD\u4F53\uFF1A
|
|
820
|
+
${e.map(n=>`- ${n.name}: ${n.description}`).join(`
|
|
821
|
+
`)}`:"";return`\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u89C4\u5212\u4E13\u5BB6\u3002\u8BF7\u4E3A\u4EE5\u4E0B\u4EFB\u52A1\u751F\u6210\u8BE6\u7EC6\u3001\u7ED3\u6784\u5316\u7684\u6267\u884C\u8BA1\u5212\u3002
|
|
822
|
+
|
|
823
|
+
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
824
|
+
${o}
|
|
825
|
+
${t}
|
|
826
|
+
|
|
827
|
+
\u8BF7\u6309\u7167\u4EE5\u4E0BMarkdown\u683C\u5F0F\u8F93\u51FA\u4EFB\u52A1\u89C4\u5212\uFF1A
|
|
828
|
+
|
|
829
|
+
# \u4EFB\u52A1\u89C4\u5212
|
|
830
|
+
|
|
831
|
+
## \u4EFB\u52A1\u6982\u8FF0
|
|
832
|
+
[\u7B80\u8981\u63CF\u8FF0\u4EFB\u52A1\u76EE\u6807\uFF0C\u5305\u62EC\u8F93\u5165\u3001\u5904\u7406\u548C\u9884\u671F\u8F93\u51FA]
|
|
833
|
+
|
|
834
|
+
## \u6267\u884C\u6B65\u9AA4
|
|
835
|
+
1. [\u6B65\u9AA41\u63CF\u8FF0 - \u6E05\u6670\u8BF4\u660E\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u548C\u76EE\u6807] (\u63A8\u8350\u5B50\u667A\u80FD\u4F53: [\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u6216"default"])
|
|
836
|
+
2. [\u6B65\u9AA42\u63CF\u8FF0 - \u6E05\u6670\u8BF4\u660E\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u548C\u76EE\u6807] (\u63A8\u8350\u5B50\u667A\u80FD\u4F53: [\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u6216"default"])
|
|
837
|
+
3. [\u6B65\u9AA43\u63CF\u8FF0 - \u6E05\u6670\u8BF4\u660E\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u548C\u76EE\u6807] (\u63A8\u8350\u5B50\u667A\u80FD\u4F53: [\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u6216"default"])
|
|
838
|
+
...
|
|
839
|
+
|
|
840
|
+
## \u9884\u671F\u7ED3\u679C
|
|
841
|
+
[\u8BE6\u7EC6\u63CF\u8FF0\u5B8C\u6210\u540E\u7684\u9884\u671F\u7ED3\u679C\uFF0C\u5305\u62EC\u5177\u4F53\u4EA4\u4ED8\u7269\u3001\u529F\u80FD\u7279\u6027\u6216\u4EE3\u7801\u53D8\u66F4]
|
|
842
|
+
|
|
843
|
+
## \u6CE8\u610F\u4E8B\u9879
|
|
844
|
+
[\u5217\u51FA\u6267\u884C\u8FC7\u7A0B\u4E2D\u9700\u8981\u7279\u522B\u6CE8\u610F\u7684\u4E8B\u9879\u3001\u6F5C\u5728\u98CE\u9669\u6216\u6280\u672F\u8003\u91CF]
|
|
845
|
+
|
|
846
|
+
\u91CD\u8981\u89C4\u5219\uFF1A
|
|
847
|
+
- \u6267\u884C\u6B65\u9AA4\u5E94\u8BE5\u662F\u5927\u9897\u7C92\u5EA6\u7684\u4EFB\u52A1\u62C6\u5206\uFF0C\u5173\u6CE8\u4E3B\u8981\u9636\u6BB5\u548C\u76EE\u6807
|
|
848
|
+
- \u5FC5\u987B\u5305\u542B2-4\u4E2A\u903B\u8F91\u6B65\u9AA4\uFF0C\u786E\u4FDD\u8986\u76D6\u6240\u6709\u5FC5\u8981\u5DE5\u4F5C
|
|
849
|
+
- \u6B65\u9AA4\u4E4B\u95F4\u5FC5\u987B\u6709\u660E\u786E\u7684\u4F9D\u8D56\u5173\u7CFB\u548C\u987A\u5E8F\u903B\u8F91
|
|
850
|
+
- \u6BCF\u4E2A\u6B65\u9AA4\u5FC5\u987B\u6807\u6CE8\u6700\u9002\u5408\u7684\u63A8\u8350\u5B50\u667A\u80FD\u4F53
|
|
851
|
+
- \u4EFB\u52A1\u6982\u8FF0\u5E94\u8BE5\u7B80\u660E\u627C\u8981\u5730\u6982\u62EC\u6574\u4E2A\u4EFB\u52A1\u7684\u76EE\u7684\u548C\u8303\u56F4
|
|
852
|
+
- \u9884\u671F\u7ED3\u679C\u5E94\u8BE5\u5177\u4F53\u3001\u53EF\u8861\u91CF\uFF0C\u660E\u786E\u8BF4\u660E\u5B8C\u6210\u540E\u7684\u72B6\u6001`}function Rs(o){return`\u8BF7\u5C06\u4EE5\u4E0B Markdown \u683C\u5F0F\u7684\u4EFB\u52A1\u89C4\u5212\u8F6C\u6362\u4E3A\u7ED3\u6784\u5316\u683C\u5F0F\u3002
|
|
853
|
+
|
|
854
|
+
${o}
|
|
855
|
+
|
|
856
|
+
\u8BF7\u4F7F\u7528 create_task_plan \u5DE5\u5177\u8FD4\u56DE\u7ED3\u6784\u5316\u7684\u4EFB\u52A1\u89C4\u5212\u6570\u636E\u3002`}function Ds(o,e){return`\u4F60\u662F\u4E00\u4E2A\u667A\u80FD\u4F53\u5339\u914D\u4E13\u5BB6\u3002\u8BF7\u4ED4\u7EC6\u5206\u6790\u4EE5\u4E0B\u4EFB\u52A1\u63CF\u8FF0\uFF0C\u5E76\u4ECE\u63D0\u4F9B\u7684\u667A\u80FD\u4F53\u5217\u8868\u4E2D\u9009\u62E9\u6700\u5339\u914D\u3001\u6700\u9AD8\u6548\u7684\u4E00\u4E2A\u3002
|
|
857
|
+
|
|
858
|
+
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
859
|
+
${o}
|
|
860
|
+
|
|
861
|
+
\u53EF\u7528\u667A\u80FD\u4F53\uFF1A
|
|
862
|
+
${e}
|
|
863
|
+
|
|
864
|
+
\u5339\u914D\u6807\u51C6\uFF1A
|
|
865
|
+
1. \u667A\u80FD\u4F53\u7684\u4E13\u4E1A\u9886\u57DF\u4E0E\u4EFB\u52A1\u9700\u6C42\u7684\u5339\u914D\u5EA6
|
|
866
|
+
2. \u667A\u80FD\u4F53\u7684\u80FD\u529B\u8303\u56F4\u662F\u5426\u6DB5\u76D6\u4EFB\u52A1\u6240\u9700\u7684\u6240\u6709\u6280\u80FD
|
|
867
|
+
3. \u667A\u80FD\u4F53\u7684\u4E13\u957F\u662F\u5426\u80FD\u591F\u89E3\u51B3\u4EFB\u52A1\u4E2D\u7684\u6838\u5FC3\u6311\u6218
|
|
868
|
+
4. \u8003\u8651\u4EFB\u52A1\u7684\u590D\u6742\u5EA6\u548C\u667A\u80FD\u4F53\u7684\u5904\u7406\u80FD\u529B
|
|
603
869
|
|
|
604
|
-
|
|
870
|
+
\u8BF7\u53EA\u8FD4\u56DE\u6700\u4F73\u5339\u914D\u7684\u667A\u80FD\u4F53\u540D\u79F0\uFF08\u5B8C\u5168\u5339\u914D\u667A\u80FD\u4F53\u540D\u79F0\u5B57\u7B26\u4E32\uFF09\uFF0C\u5982\u679C\u6CA1\u6709\u5408\u9002\u7684\u5339\u914D\u6216\u5339\u914D\u5EA6\u4E0D\u8DB360%\uFF0C\u8BF7\u8FD4\u56DE"default"\u3002`}var gg,yc,st,it=C(()=>{Ht();gg={core:"You are an expert code assistant that follows the ReAct (Reasoning + Acting) pattern with enhanced thinking capabilities. Your primary goal is to solve coding tasks accurately, efficiently, and with high code quality.",environment_awareness:`
|
|
605
871
|
\u{1F30D} **\u6838\u5FC3\u539F\u5219\uFF1A\u4F60\u5FC5\u987B\u59CB\u7EC8\u611F\u77E5\u5E76\u9002\u5E94\u8FD0\u884C\u73AF\u5883**
|
|
606
872
|
|
|
607
873
|
**\u73AF\u5883\u611F\u77E5\u662F\u4F60\u7684\u7B2C\u4E00\u4F18\u5148\u7EA7**\uFF1A\u5728\u601D\u8003\u3001\u89C4\u5212\u548C\u6267\u884C\u4EFB\u4F55\u4EFB\u52A1\u4E4B\u524D\uFF0C\u4F60\u5FC5\u987B\uFF1A
|
|
@@ -618,9 +884,7 @@ You have access to a comprehensive set of tools, with the 'think' tool being spe
|
|
|
618
884
|
1. \u8BC6\u522B\u7528\u6237\u8BF7\u6C42\u7684\u6F5C\u5728\u5E73\u53F0\u4F9D\u8D56\u6027
|
|
619
885
|
2. \u9009\u62E9\u6700\u9002\u5408\u5F53\u524D\u5E73\u53F0\u7684\u5B9E\u73B0\u65B9\u6848
|
|
620
886
|
3. \u5982\u679C\u6D89\u53CAshell\u547D\u4EE4\uFF0C\u4F7F\u7528\u5E73\u53F0\u539F\u751F\u547D\u4EE4
|
|
621
|
-
4. \u4E3B\u52A8\u8BF4\u660E\u8DE8\u5E73\u53F0\u8003\u8651\u56E0\u7D20
|
|
622
|
-
</environment_awareness>
|
|
623
|
-
|
|
887
|
+
4. \u4E3B\u52A8\u8BF4\u660E\u8DE8\u5E73\u53F0\u8003\u8651\u56E0\u7D20`,workflow:`
|
|
624
888
|
<workflow>
|
|
625
889
|
You must follow this strict thinking pattern for EVERY response:
|
|
626
890
|
|
|
@@ -646,18 +910,7 @@ You must follow this strict thinking pattern for EVERY response:
|
|
|
646
910
|
- Decide on the next appropriate action
|
|
647
911
|
|
|
648
912
|
This cycle continues: think \u2192 act \u2192 observe \u2192 think \u2192 act \u2192 ... until task completion.
|
|
649
|
-
</workflow
|
|
650
|
-
|
|
651
|
-
<available_tools>
|
|
652
|
-
You have access to the following tools (detailed schemas are provided separately):
|
|
653
|
-
|
|
654
|
-
${o.map(t=>`- ${t.name}: ${t.description}`).join(`
|
|
655
|
-
`)}
|
|
656
|
-
|
|
657
|
-
The system will provide you with the exact parameter schemas for each tool. When using tools, pay special attention to required parameters and their formats.
|
|
658
|
-
Use the tool definitions to understand what parameters each tool requires.
|
|
659
|
-
</available_tools>
|
|
660
|
-
|
|
913
|
+
</workflow>`,critical_rules:`
|
|
661
914
|
<critical_rules>
|
|
662
915
|
1. ALWAYS call 'think' tool FIRST before taking any action
|
|
663
916
|
2. ALWAYS call 'think' tool AFTER receiving an Observation to reflect
|
|
@@ -674,8 +927,7 @@ Use the tool definitions to understand what parameters each tool requires.
|
|
|
674
927
|
6. Think deeply and systematically: analyze context, plan actions, reflect on results
|
|
675
928
|
7. If you encounter errors or unexpected results, use 'think' to analyze the problem and determine the best next step
|
|
676
929
|
8. ALWAYS maintain high code quality standards - follow project conventions, add appropriate comments, and write clean code
|
|
677
|
-
</critical_rules
|
|
678
|
-
|
|
930
|
+
</critical_rules>`,code_modification:`
|
|
679
931
|
<code_modification_workflow>
|
|
680
932
|
When modifying existing code:
|
|
681
933
|
1. Call think() to plan your approach and identify risks
|
|
@@ -721,8 +973,7 @@ FILE PATH SAFETY CONSTRAINTS:
|
|
|
721
973
|
- If user requests writing outside project directory, politely refuse and explain the security constraint
|
|
722
974
|
- Valid paths: "src/...", "lib/...", "config/...", "tests/...", "docs/...", etc.
|
|
723
975
|
- Invalid paths: "/etc/...", "../../../...", "C:Windows...", "/usr/local/..."
|
|
724
|
-
</code_modification_workflow
|
|
725
|
-
|
|
976
|
+
</code_modification_workflow>`,language_constraints:`
|
|
726
977
|
<language_constraints>
|
|
727
978
|
- ALWAYS analyze the project's primary programming language and file context before generating code
|
|
728
979
|
- Check .nium/project/project.json for language documentation
|
|
@@ -735,8 +986,7 @@ FILE PATH SAFETY CONSTRAINTS:
|
|
|
735
986
|
- For multi-language projects, follow the specific context of the file layer you're modifying
|
|
736
987
|
- When unsure, use glob() to explore file extensions and project structure first
|
|
737
988
|
- Maintain consistent code style within each language layer
|
|
738
|
-
</language_constraints
|
|
739
|
-
|
|
989
|
+
</language_constraints>`,specialized_task_routing:`
|
|
740
990
|
<specialized_task_routing>
|
|
741
991
|
For coding tasks that involve:
|
|
742
992
|
- Implementing new features or functions
|
|
@@ -759,8 +1009,7 @@ Example routing:
|
|
|
759
1009
|
- User: "\u91CD\u6784\u8FD9\u4E2A\u6A21\u5757\u63D0\u9AD8\u6027\u80FD" \u2192 Call plan() to route to coder agent
|
|
760
1010
|
|
|
761
1011
|
For simple tasks that don't involve code generation (reading files, exploring structure, running commands), you can handle them directly.
|
|
762
|
-
</specialized_task_routing
|
|
763
|
-
|
|
1012
|
+
</specialized_task_routing>`,project_exploration:`
|
|
764
1013
|
<project_exploration_guidelines>
|
|
765
1014
|
IMPORTANT: Avoid redundant project exploration in plan mode
|
|
766
1015
|
|
|
@@ -790,8 +1039,7 @@ When working within a plan/task context:
|
|
|
790
1039
|
Example:
|
|
791
1040
|
\u274C Bad: Call quickProjectScan() in every step of a plan task
|
|
792
1041
|
\u2705 Good: Call read('.nium/project/project.json') to get project info
|
|
793
|
-
</project_exploration_guidelines
|
|
794
|
-
|
|
1042
|
+
</project_exploration_guidelines>`,project_type_detection:`
|
|
795
1043
|
<project_type_detection>
|
|
796
1044
|
IMPORTANT: Identify project build system before making assumptions
|
|
797
1045
|
|
|
@@ -833,8 +1081,7 @@ Example 2 - Adding a dependency:
|
|
|
833
1081
|
2. Call think to plan based on detected build system
|
|
834
1082
|
3. Read the appropriate file
|
|
835
1083
|
4. Add dependency using correct syntax for that build system
|
|
836
|
-
</project_type_detection
|
|
837
|
-
|
|
1084
|
+
</project_type_detection>`,best_practices:`
|
|
838
1085
|
<best_practices>
|
|
839
1086
|
- Write modular, reusable code where appropriate
|
|
840
1087
|
- Add clear comments explaining complex logic or non-obvious implementation details
|
|
@@ -842,8 +1089,7 @@ Example 2 - Adding a dependency:
|
|
|
842
1089
|
- Follow language-specific coding standards and conventions
|
|
843
1090
|
- When modifying existing code, preserve the original author's intent while making improvements
|
|
844
1091
|
- Test your solutions conceptually before implementation
|
|
845
|
-
</best_practices
|
|
846
|
-
|
|
1092
|
+
</best_practices>`,examples:`
|
|
847
1093
|
<examples>
|
|
848
1094
|
<example>
|
|
849
1095
|
<scenario>User asks: Create a config.json file</scenario>
|
|
@@ -895,171 +1141,32 @@ Step 6 - Final answer:
|
|
|
895
1141
|
"Successfully added the new function to utils.js using safe merge, maintaining consistency with existing code style."
|
|
896
1142
|
</correct_response>
|
|
897
1143
|
</example>
|
|
898
|
-
</examples
|
|
899
|
-
|
|
1144
|
+
</examples>`,final_note:`
|
|
900
1145
|
<final_note>
|
|
901
1146
|
The key difference from traditional tool calling:
|
|
902
1147
|
- OLD: You called tools directly and reasoned implicitly
|
|
903
1148
|
- NEW: You call think() to make reasoning explicit, THEN call tools
|
|
904
1149
|
|
|
905
1150
|
This makes your decision-making process transparent, debuggable, and more reliable. Always prioritize clarity and thoroughness in your thinking process.
|
|
906
|
-
</final_note
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
\
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
\
|
|
913
|
-
-
|
|
914
|
-
|
|
915
|
-
-
|
|
916
|
-
|
|
917
|
-
\
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
\u7528\
|
|
924
|
-
${o}
|
|
925
|
-
${n}
|
|
926
|
-
|
|
927
|
-
## \u89C4\u5212\u8981\u6C42
|
|
928
|
-
|
|
929
|
-
1. **\u6B65\u9AA4\u9897\u7C92\u5EA6**: \u6BCF\u4E2A\u6B65\u9AA4\u5E94\u8BE5\u662F\u5927\u9897\u7C92\u5EA6\u7684\u4EFB\u52A1\u62C6\u5206(2-4\u4E2A\u6B65\u9AA4)
|
|
930
|
-
|
|
931
|
-
2. **\u5DE5\u5177\u6743\u9650\u63A7\u5236** (\u91CD\u8981):
|
|
932
|
-
- \u5F53\u6B65\u9AA4\u4F7F\u7528 **default \u901A\u7528\u667A\u80FD\u4F53** \u65F6\uFF0C\u5FC5\u987B\u6307\u5B9A \`allowedTools\` \u5217\u8868
|
|
933
|
-
- \u5F53\u6B65\u9AA4\u4F7F\u7528 **\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53** \u65F6\uFF0C\`allowedTools\` \u53EF\u4EE5\u7701\u7565(\u5B50\u667A\u80FD\u4F53\u6709\u5B8C\u6574\u6743\u9650)
|
|
934
|
-
|
|
935
|
-
3. **\u5E38\u89C1\u6B65\u9AA4\u7684\u5DE5\u5177\u914D\u7F6E**:
|
|
936
|
-
|
|
937
|
-
| \u6B65\u9AA4\u6027\u8D28 | allowedTools \u914D\u7F6E | \u793A\u4F8B\u573A\u666F |
|
|
938
|
-
|---------|------------------|---------|
|
|
939
|
-
| \u7EAF\u5206\u6790\u89C4\u5212 | \`["read", "glob", "grep", "quickProjectScan", "think", "askUser"]\` | \u9700\u6C42\u5206\u6790\u3001\u6280\u672F\u9009\u578B\u3001\u65B9\u6848\u8BBE\u8BA1 |
|
|
940
|
-
| \u4EE3\u7801\u63A2\u7D22 | \`["read", "glob", "grep", "quickProjectScan", "shell", "think"]\` | \u5206\u6790\u73B0\u6709\u67B6\u6784\u3001\u67E5\u627E\u6A21\u5757 |
|
|
941
|
-
| \u4EE3\u7801\u5B9E\u73B0 | \`["read", "write", "merge", "delete", "mkdir", "glob", "grep", "shell", "think"]\` | \u521B\u5EFA\u6587\u4EF6\u3001\u5B9E\u73B0\u529F\u80FD |
|
|
942
|
-
| \u6D4B\u8BD5\u9A8C\u8BC1 | \`["read", "shell", "glob", "grep", "think"]\` | \u8FD0\u884C\u6D4B\u8BD5\u3001\u67E5\u770B\u7ED3\u679C |
|
|
943
|
-
|
|
944
|
-
4. **\u5B50\u667A\u80FD\u4F53\u9009\u62E9**:
|
|
945
|
-
\u53EF\u7528\u5B50\u667A\u80FD\u4F53: ${t}
|
|
946
|
-
- explorer: \u4E13\u95E8\u7528\u4E8E\u9879\u76EE\u63A2\u7D22\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u53EA\u8BFB\u6743\u9650
|
|
947
|
-
- coder: \u4E13\u95E8\u7528\u4E8E\u4EE3\u7801\u5B9E\u73B0\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u8BFB\u5199\u6743\u9650
|
|
948
|
-
- default: \u901A\u7528\u667A\u80FD\u4F53\uFF0C\u9700\u8981\u660E\u786E\u6307\u5B9A allowedTools
|
|
949
|
-
|
|
950
|
-
## \u793A\u4F8B\u89C4\u5212
|
|
951
|
-
|
|
952
|
-
### \u274C \u9519\u8BEF\u793A\u4F8B
|
|
953
|
-
\`\`\`json
|
|
954
|
-
{
|
|
955
|
-
"steps": [
|
|
956
|
-
{
|
|
957
|
-
"description": "\u5B8C\u6210\u9700\u6C42\u5206\u6790\u4E0E\u6280\u672F\u9009\u578B",
|
|
958
|
-
"subAgent": "default"
|
|
959
|
-
// \u274C \u7F3A\u5C11 allowedTools\uFF0C\u667A\u80FD\u4F53\u53EF\u80FD\u6EE5\u7528\u5199\u5DE5\u5177
|
|
960
|
-
}
|
|
961
|
-
]
|
|
962
|
-
}
|
|
963
|
-
\`\`\`
|
|
964
|
-
|
|
965
|
-
### \u2705 \u6B63\u786E\u793A\u4F8B1: \u4F7F\u7528 default \u667A\u80FD\u4F53 + \u660E\u786E\u5DE5\u5177\u6743\u9650
|
|
966
|
-
\`\`\`json
|
|
967
|
-
{
|
|
968
|
-
"overview": "\u521D\u59CB\u5316\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF",
|
|
969
|
-
"steps": [
|
|
970
|
-
{
|
|
971
|
-
"description": "\u5206\u6790\u5F53\u524D\u9879\u76EE\u6280\u672F\u6808(\u901A\u8FC7\u8BFB\u53D6 project.json)\uFF0C\u8F93\u51FA\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\u7684\u6280\u672F\u65B9\u6848\u6587\u6863\uFF0C\u5305\u62EC\u6570\u636E\u5E93\u8BBE\u8BA1\u3001API\u63A5\u53E3\u89C4\u8303\u3001\u8BA4\u8BC1\u65B9\u6848",
|
|
972
|
-
"subAgent": "default",
|
|
973
|
-
"allowedTools": ["read", "glob", "grep", "quickProjectScan", "think", "askUser"]
|
|
974
|
-
},
|
|
975
|
-
{
|
|
976
|
-
"description": "\u57FA\u4E8E\u65B9\u6848\u6587\u6863\uFF0C\u5B9E\u73B0\u7528\u6237\u6A21\u578B\u3001CRUD API\u3001JWT\u8BA4\u8BC1\u4E2D\u95F4\u4EF6\u7B49\u6838\u5FC3\u529F\u80FD",
|
|
977
|
-
"subAgent": "default",
|
|
978
|
-
"allowedTools": ["read", "write", "merge", "mkdir", "glob", "grep", "shell", "think"]
|
|
979
|
-
},
|
|
980
|
-
{
|
|
981
|
-
"description": "\u8FD0\u884C\u9879\u76EE\u6D4B\u8BD5\u5957\u4EF6\uFF0C\u9A8C\u8BC1\u7528\u6237\u6CE8\u518C\u3001\u767B\u5F55\u3001\u6743\u9650\u9A8C\u8BC1\u529F\u80FD\u662F\u5426\u6B63\u5E38",
|
|
982
|
-
"subAgent": "default",
|
|
983
|
-
"allowedTools": ["read", "shell", "glob", "grep", "think"]
|
|
984
|
-
}
|
|
985
|
-
],
|
|
986
|
-
"expectedResult": "\u5B8C\u6210\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\u7684\u5B8C\u6574\u5B9E\u73B0\u5E76\u901A\u8FC7\u6D4B\u8BD5"
|
|
987
|
-
}
|
|
988
|
-
\`\`\`
|
|
989
|
-
|
|
990
|
-
### \u2705 \u6B63\u786E\u793A\u4F8B2: \u4F7F\u7528\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53(\u65E0\u9700\u6307\u5B9A allowedTools)
|
|
991
|
-
\`\`\`json
|
|
992
|
-
{
|
|
993
|
-
"overview": "\u91CD\u6784\u9879\u76EE\u67B6\u6784",
|
|
994
|
-
"steps": [
|
|
995
|
-
{
|
|
996
|
-
"description": "\u63A2\u7D22\u73B0\u6709\u9879\u76EE\u7ED3\u6784\uFF0C\u5206\u6790\u6A21\u5757\u4F9D\u8D56\u5173\u7CFB\u548C\u4EE3\u7801\u7EC4\u7EC7\u65B9\u5F0F",
|
|
997
|
-
"subAgent": "explorer"
|
|
998
|
-
// \u2705 \u4F7F\u7528 explorer \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
999
|
-
},
|
|
1000
|
-
{
|
|
1001
|
-
"description": "\u6839\u636E\u5206\u6790\u7ED3\u679C\uFF0C\u91CD\u6784\u4EE3\u7801\u7ED3\u6784\uFF0C\u4F18\u5316\u6A21\u5757\u5212\u5206",
|
|
1002
|
-
"subAgent": "coder"
|
|
1003
|
-
// \u2705 \u4F7F\u7528 coder \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
1004
|
-
}
|
|
1005
|
-
],
|
|
1006
|
-
"expectedResult": "\u5B8C\u6210\u67B6\u6784\u91CD\u6784\u5E76\u4FDD\u6301\u529F\u80FD\u5B8C\u6574\u6027"
|
|
1007
|
-
}
|
|
1008
|
-
\`\`\`
|
|
1009
|
-
|
|
1010
|
-
\u8BF7\u4F7F\u7528 create_task_plan \u5DE5\u5177\u8FD4\u56DE\u7ED3\u6784\u5316\u7684\u4EFB\u52A1\u89C4\u5212\u3002`}function as(o,e=[]){let t=e.length>0?`
|
|
1011
|
-
\u53EF\u7528\u7684\u5B50\u667A\u80FD\u4F53\uFF1A
|
|
1012
|
-
${e.map(n=>`- ${n.name}: ${n.description}`).join(`
|
|
1013
|
-
`)}`:"";return`\u4F60\u662F\u4E00\u4E2A\u4EFB\u52A1\u89C4\u5212\u4E13\u5BB6\u3002\u8BF7\u4E3A\u4EE5\u4E0B\u4EFB\u52A1\u751F\u6210\u8BE6\u7EC6\u3001\u7ED3\u6784\u5316\u7684\u6267\u884C\u8BA1\u5212\u3002
|
|
1014
|
-
|
|
1015
|
-
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
1016
|
-
${o}
|
|
1017
|
-
${t}
|
|
1018
|
-
|
|
1019
|
-
\u8BF7\u6309\u7167\u4EE5\u4E0BMarkdown\u683C\u5F0F\u8F93\u51FA\u4EFB\u52A1\u89C4\u5212\uFF1A
|
|
1020
|
-
|
|
1021
|
-
# \u4EFB\u52A1\u89C4\u5212
|
|
1022
|
-
|
|
1023
|
-
## \u4EFB\u52A1\u6982\u8FF0
|
|
1024
|
-
[\u7B80\u8981\u63CF\u8FF0\u4EFB\u52A1\u76EE\u6807\uFF0C\u5305\u62EC\u8F93\u5165\u3001\u5904\u7406\u548C\u9884\u671F\u8F93\u51FA]
|
|
1025
|
-
|
|
1026
|
-
## \u6267\u884C\u6B65\u9AA4
|
|
1027
|
-
1. [\u6B65\u9AA41\u63CF\u8FF0 - \u6E05\u6670\u8BF4\u660E\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u548C\u76EE\u6807] (\u63A8\u8350\u5B50\u667A\u80FD\u4F53: [\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u6216"default"])
|
|
1028
|
-
2. [\u6B65\u9AA42\u63CF\u8FF0 - \u6E05\u6670\u8BF4\u660E\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u548C\u76EE\u6807] (\u63A8\u8350\u5B50\u667A\u80FD\u4F53: [\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u6216"default"])
|
|
1029
|
-
3. [\u6B65\u9AA43\u63CF\u8FF0 - \u6E05\u6670\u8BF4\u660E\u8981\u5B8C\u6210\u7684\u5DE5\u4F5C\u548C\u76EE\u6807] (\u63A8\u8350\u5B50\u667A\u80FD\u4F53: [\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u6216"default"])
|
|
1030
|
-
...
|
|
1031
|
-
|
|
1032
|
-
## \u9884\u671F\u7ED3\u679C
|
|
1033
|
-
[\u8BE6\u7EC6\u63CF\u8FF0\u5B8C\u6210\u540E\u7684\u9884\u671F\u7ED3\u679C\uFF0C\u5305\u62EC\u5177\u4F53\u4EA4\u4ED8\u7269\u3001\u529F\u80FD\u7279\u6027\u6216\u4EE3\u7801\u53D8\u66F4]
|
|
1034
|
-
|
|
1035
|
-
## \u6CE8\u610F\u4E8B\u9879
|
|
1036
|
-
[\u5217\u51FA\u6267\u884C\u8FC7\u7A0B\u4E2D\u9700\u8981\u7279\u522B\u6CE8\u610F\u7684\u4E8B\u9879\u3001\u6F5C\u5728\u98CE\u9669\u6216\u6280\u672F\u8003\u91CF]
|
|
1037
|
-
|
|
1038
|
-
\u91CD\u8981\u89C4\u5219\uFF1A
|
|
1039
|
-
- \u6267\u884C\u6B65\u9AA4\u5E94\u8BE5\u662F\u5927\u9897\u7C92\u5EA6\u7684\u4EFB\u52A1\u62C6\u5206\uFF0C\u5173\u6CE8\u4E3B\u8981\u9636\u6BB5\u548C\u76EE\u6807
|
|
1040
|
-
- \u5FC5\u987B\u5305\u542B2-4\u4E2A\u903B\u8F91\u6B65\u9AA4\uFF0C\u786E\u4FDD\u8986\u76D6\u6240\u6709\u5FC5\u8981\u5DE5\u4F5C
|
|
1041
|
-
- \u6B65\u9AA4\u4E4B\u95F4\u5FC5\u987B\u6709\u660E\u786E\u7684\u4F9D\u8D56\u5173\u7CFB\u548C\u987A\u5E8F\u903B\u8F91
|
|
1042
|
-
- \u6BCF\u4E2A\u6B65\u9AA4\u5FC5\u987B\u6807\u6CE8\u6700\u9002\u5408\u7684\u63A8\u8350\u5B50\u667A\u80FD\u4F53
|
|
1043
|
-
- \u4EFB\u52A1\u6982\u8FF0\u5E94\u8BE5\u7B80\u660E\u627C\u8981\u5730\u6982\u62EC\u6574\u4E2A\u4EFB\u52A1\u7684\u76EE\u7684\u548C\u8303\u56F4
|
|
1044
|
-
- \u9884\u671F\u7ED3\u679C\u5E94\u8BE5\u5177\u4F53\u3001\u53EF\u8861\u91CF\uFF0C\u660E\u786E\u8BF4\u660E\u5B8C\u6210\u540E\u7684\u72B6\u6001`}function cs(o){return`\u8BF7\u5C06\u4EE5\u4E0B Markdown \u683C\u5F0F\u7684\u4EFB\u52A1\u89C4\u5212\u8F6C\u6362\u4E3A\u7ED3\u6784\u5316\u683C\u5F0F\u3002
|
|
1045
|
-
|
|
1046
|
-
${o}
|
|
1047
|
-
|
|
1048
|
-
\u8BF7\u4F7F\u7528 create_task_plan \u5DE5\u5177\u8FD4\u56DE\u7ED3\u6784\u5316\u7684\u4EFB\u52A1\u89C4\u5212\u6570\u636E\u3002`}function ls(o,e){return`\u4F60\u662F\u4E00\u4E2A\u667A\u80FD\u4F53\u5339\u914D\u4E13\u5BB6\u3002\u8BF7\u4ED4\u7EC6\u5206\u6790\u4EE5\u4E0B\u4EFB\u52A1\u63CF\u8FF0\uFF0C\u5E76\u4ECE\u63D0\u4F9B\u7684\u667A\u80FD\u4F53\u5217\u8868\u4E2D\u9009\u62E9\u6700\u5339\u914D\u3001\u6700\u9AD8\u6548\u7684\u4E00\u4E2A\u3002
|
|
1049
|
-
|
|
1050
|
-
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
1051
|
-
${o}
|
|
1052
|
-
|
|
1053
|
-
\u53EF\u7528\u667A\u80FD\u4F53\uFF1A
|
|
1054
|
-
${e}
|
|
1055
|
-
|
|
1056
|
-
\u5339\u914D\u6807\u51C6\uFF1A
|
|
1057
|
-
1. \u667A\u80FD\u4F53\u7684\u4E13\u4E1A\u9886\u57DF\u4E0E\u4EFB\u52A1\u9700\u6C42\u7684\u5339\u914D\u5EA6
|
|
1058
|
-
2. \u667A\u80FD\u4F53\u7684\u80FD\u529B\u8303\u56F4\u662F\u5426\u6DB5\u76D6\u4EFB\u52A1\u6240\u9700\u7684\u6240\u6709\u6280\u80FD
|
|
1059
|
-
3. \u667A\u80FD\u4F53\u7684\u4E13\u957F\u662F\u5426\u80FD\u591F\u89E3\u51B3\u4EFB\u52A1\u4E2D\u7684\u6838\u5FC3\u6311\u6218
|
|
1060
|
-
4. \u8003\u8651\u4EFB\u52A1\u7684\u590D\u6742\u5EA6\u548C\u667A\u80FD\u4F53\u7684\u5904\u7406\u80FD\u529B
|
|
1061
|
-
|
|
1062
|
-
\u8BF7\u53EA\u8FD4\u56DE\u6700\u4F73\u5339\u914D\u7684\u667A\u80FD\u4F53\u540D\u79F0\uFF08\u5B8C\u5168\u5339\u914D\u667A\u80FD\u4F53\u540D\u79F0\u5B57\u7B26\u4E32\uFF09\uFF0C\u5982\u679C\u6CA1\u6709\u5408\u9002\u7684\u5339\u914D\u6216\u5339\u914D\u5EA6\u4E0D\u8DB360%\uFF0C\u8BF7\u8FD4\u56DE"default"\u3002`}var et,tt=S(()=>{Ot();et=Ma()});var Oe={};j(Oe,{TaskComplexity:()=>Ar,evaluateTaskComplexity:()=>du,generatePlanSummary:()=>Dn,generateTaskPlan:()=>Rn,getTaskFilePath:()=>xu,listTaskPlans:()=>vu,loadTaskPlan:()=>wu,updateTaskStatus:()=>nt});import R from"chalk";import ye from"fs";import ve from"path";async function du(o){let e=ss(o);try{let t=await ee({model:Pe(),messages:[{role:"user",content:e}],temperature:.1,max_tokens:10,useCompression:!0}),{content:n}=t.choices[0].message;return(n?n.trim():"").toUpperCase().includes("COMPLEX")?(console.log(R.yellow("[\u4EFB\u52A1\u8BC4\u4F30] \u68C0\u6D4B\u5230\u590D\u6742\u4EFB\u52A1\uFF0C\u5C06\u8FDB\u884C\u4EFB\u52A1\u89C4\u5212")),Ar.COMPLEX):(console.log(R.blue("[\u4EFB\u52A1\u8BC4\u4F30] \u68C0\u6D4B\u5230\u7B80\u5355\u4EFB\u52A1\uFF0C\u4F7F\u7528\u5355\u6B65\u9AA4\u6A21\u5F0F")),Ar.SIMPLE)}catch(t){return console.log(R.yellow(`[\u4EFB\u52A1\u8BC4\u4F30] \u8BC4\u4F30\u5931\u8D25\uFF0C\u9ED8\u8BA4\u4E3A\u7B80\u5355\u4EFB\u52A1: ${t.message}`)),Ar.SIMPLE}}function Ia(o=[]){let e=o.length>0?o.map(t=>t.name).join(", "):"default";return{name:"create_task_plan",description:"\u751F\u6210\u8BE6\u7EC6\u7684\u4EFB\u52A1\u6267\u884C\u89C4\u5212\uFF0C\u5305\u542B\u591A\u4E2A\u6B65\u9AA4\u548C\u63A8\u8350\u7684\u5B50\u667A\u80FD\u4F53",input_schema:{type:"object",properties:{overview:{type:"string",description:"\u4EFB\u52A1\u6982\u8FF0\uFF0C\u7B80\u8981\u63CF\u8FF0\u4EFB\u52A1\u76EE\u6807"},steps:{type:"array",description:"\u6267\u884C\u6B65\u9AA4\u5217\u8868\uFF0C\u5FC5\u987B\u5305\u542B2-4\u4E2A\u6B65\u9AA4",items:{type:"object",properties:{description:{type:"string",description:"\u6B65\u9AA4\u7684\u8BE6\u7EC6\u63CF\u8FF0\uFF0C\u5E94\u8BE5\u662F\u5927\u9897\u7C92\u5EA6\u7684\u4EFB\u52A1\u62C6\u5206"},subAgent:{type:"string",description:`\u63A8\u8350\u4F7F\u7528\u7684\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u3002\u53EF\u7528\u9009\u9879: ${e}\u3002\u5982\u679C\u6CA1\u6709\u5408\u9002\u7684\u5B50\u667A\u80FD\u4F53\uFF0C\u4F7F\u7528"default"`},allowedTools:{type:"array",description:`\u8BE5\u6B65\u9AA4\u5141\u8BB8\u4F7F\u7528\u7684\u5DE5\u5177\u5217\u8868\uFF08\u4EC5\u5F53 subAgent \u4E3A "default" \u65F6\u751F\u6548\uFF09\u3002
|
|
1151
|
+
</final_note>`,error_handling:`
|
|
1152
|
+
<error_handling_strategies>
|
|
1153
|
+
**\u9047\u5230\u9519\u8BEF\u65F6\u7684\u5904\u7406\u7B56\u7565**\uFF1A
|
|
1154
|
+
1. **\u5206\u6790\u9519\u8BEF\u4FE1\u606F**\uFF1A\u4ED4\u7EC6\u9605\u8BFB\u9519\u8BEF\u63D0\u793A\uFF0C\u5B9A\u4F4D\u9519\u8BEF\u7C7B\u578B\u548C\u4F4D\u7F6E
|
|
1155
|
+
2. **\u5206\u7C7B\u5904\u7406**\uFF1A
|
|
1156
|
+
- \u5DE5\u5177\u8C03\u7528\u9519\u8BEF\uFF1A\u68C0\u67E5\u53C2\u6570\u683C\u5F0F\u3001\u8DEF\u5F84\u6B63\u786E\u6027\u3001\u6743\u9650\u95EE\u9898
|
|
1157
|
+
- \u4EE3\u7801\u7F16\u8BD1\u9519\u8BEF\uFF1A\u68C0\u67E5\u8BED\u6CD5\u3001\u4F9D\u8D56\u5173\u7CFB\u3001\u7C7B\u578B\u5B9A\u4E49
|
|
1158
|
+
- \u547D\u4EE4\u6267\u884C\u9519\u8BEF\uFF1A\u68C0\u67E5\u547D\u4EE4\u8BED\u6CD5\u3001\u5E73\u53F0\u517C\u5BB9\u6027\u3001\u73AF\u5883\u914D\u7F6E
|
|
1159
|
+
3. **\u91CD\u8BD5\u673A\u5236**\uFF1A
|
|
1160
|
+
- \u4E34\u65F6\u7F51\u7EDC\u6216\u8D44\u6E90\u95EE\u9898\uFF1A\u53EF\u91CD\u8BD51-2\u6B21
|
|
1161
|
+
- \u660E\u786E\u7684\u9519\u8BEF\uFF1A\u4E0D\u91CD\u8BD5\uFF0C\u76F4\u63A5\u5206\u6790\u5E76\u4FEE\u590D
|
|
1162
|
+
4. **\u964D\u7EA7\u65B9\u6848**\uFF1A\u5F53\u9996\u9009\u5DE5\u5177\u6216\u65B9\u6CD5\u5931\u8D25\u65F6\uFF0C\u51C6\u5907\u66FF\u4EE3\u65B9\u6848
|
|
1163
|
+
5. **\u7528\u6237\u6C9F\u901A**\uFF1A\u5F53\u65E0\u6CD5\u72EC\u7ACB\u89E3\u51B3\u95EE\u9898\u65F6\uFF0C\u6E05\u6670\u63CF\u8FF0\u95EE\u9898\u5E76\u8BF7\u6C42\u5FC5\u8981\u4FE1\u606F
|
|
1164
|
+
|
|
1165
|
+
**\u5E38\u89C1\u9519\u8BEF\u5904\u7406\u793A\u4F8B**\uFF1A
|
|
1166
|
+
- \u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E\uFF0C\u6587\u4EF6\u662F\u5426\u5B58\u5728
|
|
1167
|
+
- \u547D\u4EE4\u6267\u884C\u5931\u8D25\uFF1A\u68C0\u67E5\u547D\u4EE4\u8BED\u6CD5\uFF0C\u662F\u5426\u9002\u5408\u5F53\u524D\u5E73\u53F0
|
|
1168
|
+
- \u5DE5\u5177\u8C03\u7528\u53C2\u6570\u9519\u8BEF\uFF1A\u68C0\u67E5\u53C2\u6570\u7C7B\u578B\u548C\u683C\u5F0F\u662F\u5426\u7B26\u5408\u5DE5\u5177\u5B9A\u4E49
|
|
1169
|
+
</error_handling_strategies>`},yc={all:["core","environment_awareness","workflow","critical_rules","error_handling"],code:["code_modification","language_constraints","specialized_task_routing","best_practices"],exploration:["project_exploration","project_type_detection"],simple:["best_practices"]};st=Cc()});var We={};j(We,{TaskComplexity:()=>xe,evaluateTaskComplexity:()=>mg,generatePlanSummary:()=>er,generateTaskPlan:()=>Zn,getTaskFilePath:()=>Sg,listTaskPlans:()=>wg,loadTaskPlan:()=>vg,updateTaskStatus:()=>at});import Se from"fs";import Pe from"path";function pg(o){let e=o.toLowerCase(),t=[/^(读取|查看|显示|打开|列出)/,/^(解释|说明|介绍)/,/文件.*内容/,/^帮我.*查/,/^(read|view|show|open|list)/i,/^(explain|describe|introduce)/i,/file.*content/i,/^help me.*check/i,/^search/i],n=[/实现.*功能/,/(重构|优化).*代码库/,/生成.*并.*测试/,/修复.*并.*验证/,/(创建|添加).*多个/,/implement.*feature/i,/(refactor|optimize).*codebase/i,/generate.*and.*test/i,/fix.*and.*verify/i,/(create|add).*multiple/i,/build.*system/i];for(let s of t)if(s.test(e))return{result:xe.SIMPLE,confidence:.9};for(let s of n)if(s.test(e))return{result:xe.COMPLEX,confidence:.85};let r=e.match(/[\u4e00-\u9fa5a-z]+/gi)||[];return r.length<5&&o.length<50?{result:xe.SIMPLE,confidence:.7}:r.length>20||o.length>200?{result:xe.COMPLEX,confidence:.75}:{result:xe.SIMPLE,confidence:.5}}async function dg(o){let e=Is(o);try{let t=await ee({model:Ie(),messages:[{role:"user",content:e}],temperature:.1,max_tokens:10,useCompression:!0,tools:[]}),{content:n}=t.choices[0].message,r=(n?n.trim():"").toUpperCase();return r==="COMPLEX"||r==="MEDIUM"?xe.COMPLEX:xe.SIMPLE}catch(t){return W(`LLM\u8BC4\u4F30\u5931\u8D25\uFF0C\u9ED8\u8BA4\u4E3A\u7B80\u5355\u4EFB\u52A1: ${t.message}`,"Task"),xe.SIMPLE}}async function mg(o){let e=pg(o);if(e.confidence>.8)return se(`\u5FEB\u901F\u542F\u53D1\u5F0F\u8BC4\u4F30: ${e.result}, \u7F6E\u4FE1\u5EA6: ${e.confidence.toFixed(2)}`,"Task"),e.result;se(`\u542F\u53D1\u5F0F\u8BC4\u4F30\u4E0D\u786E\u5B9A\uFF08\u7F6E\u4FE1\u5EA6: ${e.confidence.toFixed(2)}\uFF09\uFF0C\u4F7F\u7528LLM\u7CBE\u786E\u8BC4\u4F30`,"Task");let t=await dg(o);return t===xe.COMPLEX?W("LLM\u68C0\u6D4B\u5230\u590D\u6742\u4EFB\u52A1\uFF0C\u5C06\u8FDB\u884C\u4EFB\u52A1\u89C4\u5212","Task"):se("LLM\u68C0\u6D4B\u5230\u7B80\u5355\u4EFB\u52A1\uFF0C\u4F7F\u7528\u5355\u6B65\u9AA4\u6A21\u5F0F","Task"),t}function xc(o=[]){let e=o.length>0?o.map(t=>t.name).join(", "):"default";return{name:"create_task_plan",description:"\u751F\u6210\u8BE6\u7EC6\u7684\u4EFB\u52A1\u6267\u884C\u89C4\u5212\uFF0C\u5305\u542B\u591A\u4E2A\u6B65\u9AA4\u548C\u63A8\u8350\u7684\u5B50\u667A\u80FD\u4F53",input_schema:{type:"object",properties:{overview:{type:"string",description:"\u4EFB\u52A1\u6982\u8FF0\uFF0C\u7B80\u8981\u63CF\u8FF0\u4EFB\u52A1\u76EE\u6807"},steps:{type:"array",description:"\u6267\u884C\u6B65\u9AA4\u5217\u8868\uFF0C\u5FC5\u987B\u5305\u542B2-4\u4E2A\u6B65\u9AA4",items:{type:"object",properties:{description:{type:"string",description:"\u6B65\u9AA4\u7684\u8BE6\u7EC6\u63CF\u8FF0\uFF0C\u5E94\u8BE5\u662F\u5927\u9897\u7C92\u5EA6\u7684\u4EFB\u52A1\u62C6\u5206"},subAgent:{type:"string",description:`\u63A8\u8350\u4F7F\u7528\u7684\u5B50\u667A\u80FD\u4F53\u540D\u79F0\u3002\u53EF\u7528\u9009\u9879: ${e}\u3002\u5982\u679C\u6CA1\u6709\u5408\u9002\u7684\u5B50\u667A\u80FD\u4F53\uFF0C\u4F7F\u7528"default"`},allowedTools:{type:"array",description:`\u8BE5\u6B65\u9AA4\u5141\u8BB8\u4F7F\u7528\u7684\u5DE5\u5177\u5217\u8868\uFF08\u4EC5\u5F53 subAgent \u4E3A "default" \u65F6\u751F\u6548\uFF09\u3002
|
|
1063
1170
|
\u5E38\u7528\u5DE5\u5177\u7EC4\u5408\uFF1A
|
|
1064
1171
|
- \u53EA\u8BFB\u5206\u6790: ["read", "glob", "grep", "quickProjectScan", "think", "askUser"]
|
|
1065
1172
|
- \u4EE3\u7801\u63A2\u7D22: ["read", "glob", "grep", "quickProjectScan", "shell", "think"]
|
|
@@ -1067,7 +1174,7 @@ ${e}
|
|
|
1067
1174
|
- \u6D4B\u8BD5\u9A8C\u8BC1: ["read", "shell", "glob", "grep", "think"]
|
|
1068
1175
|
|
|
1069
1176
|
\u5982\u679C\u4E3A\u7A7A\u6570\u7EC4\u6216\u4E0D\u6307\u5B9A\uFF0C\u5219\u4F7F\u7528\u6240\u6709\u53EF\u7528\u5DE5\u5177\u3002
|
|
1070
|
-
\u5982\u679C\u4F7F\u7528\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53(\u975Edefault)\uFF0C\u6B64\u5B57\u6BB5\u4F1A\u88AB\u5FFD\u7565\u3002`,items:{type:"string"}}},required:["description","subAgent"]},minItems:2,maxItems:4},expectedResult:{type:"string",description:"\u9884\u671F\u7ED3\u679C\uFF0C\u63CF\u8FF0\u5B8C\u6210\u540E\u7684\u9884\u671F\u6548\u679C"}},required:["overview","steps","expectedResult"]}}}async function
|
|
1177
|
+
\u5982\u679C\u4F7F\u7528\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53(\u975Edefault)\uFF0C\u6B64\u5B57\u6BB5\u4F1A\u88AB\u5FFD\u7565\u3002`,items:{type:"string"}}},required:["description","subAgent"]},minItems:2,maxItems:4},expectedResult:{type:"string",description:"\u9884\u671F\u7ED3\u679C\uFF0C\u63CF\u8FF0\u5B8C\u6210\u540E\u7684\u9884\u671F\u6548\u679C"}},required:["overview","steps","expectedResult"]}}}async function fg(o,e=[]){se("\u5C1D\u8BD5\u65B9\u68481: Function Calling","Task");let t=As(o,e),n=xc(e),s=(await ee({model:ye(),messages:[{role:"user",content:t}],temperature:.3,max_tokens:2e3,tools:[n],tool_choice:{type:"function",function:{name:"create_task_plan"}}}))?.choices?.[0]?.message?.tool_calls;if(!s||s.length===0)throw new Error("\u6A21\u578B\u6CA1\u6709\u8FD4\u56DE function call");let i=JSON.parse(s[0].function.arguments);if(!i.steps||i.steps.length<2)throw new Error(`\u6B65\u9AA4\u6570\u91CF\u4E0D\u8DB3: ${i.steps?.length||0}`);return i}async function hg(o,e=[]){W("\u5C1D\u8BD5\u65B9\u68482: Markdown + Function Call \u8F6C\u6362","Task");let t=Ls(o,e),r=(await ee({model:ye(),messages:[{role:"user",content:t}],temperature:.3,max_tokens:2e3,tools:[]}))?.choices?.[0]?.message?.content||"";if(!r)throw new Error("\u65E0\u6CD5\u751F\u6210 Markdown \u89C4\u5212");let s=Rs(r),i=xc(e),c=(await ee({model:ye(),messages:[{role:"user",content:s}],temperature:.1,max_tokens:1500,tools:[i],tool_choice:{type:"function",function:{name:"create_task_plan"}}}))?.choices?.[0]?.message?.tool_calls;if(!c||c.length===0)throw new Error("\u65E0\u6CD5\u8F6C\u6362 Markdown \u4E3A\u7ED3\u6784\u5316\u6570\u636E");let l=JSON.parse(c[0].function.arguments);return l.markdown=r,l}function yg(o){return W("\u4F7F\u7528\u9ED8\u8BA4\u964D\u7EA7\u65B9\u6848","Task"),{overview:o,steps:[{description:"\u9700\u6C42\u5206\u6790\u4E0E\u6280\u672F\u65B9\u6848\u8BBE\u8BA1",subAgent:"default"},{description:"\u6838\u5FC3\u529F\u80FD\u5B9E\u73B0",subAgent:"default"},{description:"\u6D4B\u8BD5\u9A8C\u8BC1\u4E0E\u4EE3\u7801\u4F18\u5316",subAgent:"default"}],expectedResult:"\u5B8C\u6210\u4EFB\u52A1\u7684\u6240\u6709\u6B65\u9AA4\uFF0C\u8FBE\u5230\u9884\u671F\u7684\u529F\u80FD\u76EE\u6807"}}function Cg(o){let e=o.steps.map((t,n)=>`- [ ] ${t.description}
|
|
1071
1178
|
- \u63A8\u8350\u5B50\u667A\u80FD\u4F53: ${t.subAgent}`).join(`
|
|
1072
1179
|
|
|
1073
1180
|
`);return`# \u4EFB\u52A1\u89C4\u5212
|
|
@@ -1079,29 +1186,27 @@ ${o.overview}
|
|
|
1079
1186
|
${e}
|
|
1080
1187
|
|
|
1081
1188
|
## \u9884\u671F\u7ED3\u679C
|
|
1082
|
-
${o.expectedResult}`}async function
|
|
1189
|
+
${o.expectedResult}`}async function Zn(o,e=[]){if(!o||typeof o!="string")throw new Error("\u65E0\u6548\u7684\u7528\u6237\u8BF7\u6C42");se("\u6B63\u5728\u751F\u6210\u4EFB\u52A1\u89C4\u5212...","Task");let t=null,n="unknown";try{t=await fg(o,e),n="Function Calling",_("Function Calling \u65B9\u6848\u6210\u529F","Task")}catch(c){W(`Function Calling \u5931\u8D25: ${c.message}`,"Task");try{t=await hg(o,e),n="Markdown + Conversion",_("Markdown \u8F6C\u6362\u65B9\u6848\u6210\u529F","Task")}catch(l){W(`Markdown \u8F6C\u6362\u5931\u8D25: ${l.message}`,"Task"),t=yg(o),n="Default Fallback",W("\u4F7F\u7528\u9ED8\u8BA4\u964D\u7EA7\u65B9\u6848","Task")}}let r=t.markdown||Cg(t),s=t.steps.map((c,l)=>({step:l+1,description:c.description,status:"pending",subAgent:c.subAgent||"default",allowedTools:c.allowedTools||void 0})),i=Rr(),a={markdown:r,tasks:s,taskId:i,strategy:n};return await xg(r,i,a),_(`\u4EFB\u52A1\u89C4\u5212\u751F\u6210\u5B8C\u6210 (\u7B56\u7565: ${n})`,"Task"),se(`\u5171\u5305\u542B ${s.length} \u4E2A\u4EFB\u52A1\u6B65\u9AA4`,"Task"),Mr(),an(r),Mr(),a}async function xg(o,e,t){let n=Pe.join(process.cwd(),".nium","tasks");Se.existsSync(n)||Se.mkdirSync(n,{recursive:!0});let r=`# \u4EFB\u52A1\u89C4\u5212 (ID: ${e})
|
|
1083
1190
|
|
|
1084
1191
|
## \u4EFB\u52A1\u6982\u8FF0
|
|
1085
1192
|
${o.substring(o.indexOf("## \u4EFB\u52A1\u6982\u8FF0")+7)}
|
|
1086
1193
|
|
|
1087
1194
|
## \u66F4\u65B0\u65F6\u95F4
|
|
1088
|
-
${new Date().toLocaleString()}`,s=
|
|
1089
|
-
`),a=!1,c=1,l=[];for(let
|
|
1090
|
-
`),"utf8"),
|
|
1091
|
-
\
|
|
1092
|
-
`);e
|
|
1093
|
-
|
|
1094
|
-
`}
|
|
1095
|
-
`)
|
|
1096
|
-
`)}function bu(o,e){let t=[];if(t.push("\u{1F4CA} \u9879\u76EE\u57FA\u7840\u4FE1\u606F\u6458\u8981"),t.push("\u2550".repeat(50)),t.push(""),t.push(`\u{1F4E6} \u9879\u76EE\u540D\u79F0: ${o.projectName||"\u672A\u77E5"}`),t.push(`\u{1F4CC} \u7248\u672C: ${o.version||"\u672A\u77E5"}`),o.description&&t.push(`\u{1F4DD} \u63CF\u8FF0: ${o.description}`),t.push(""),t.push(`\u{1F310} \u4E3B\u8981\u8BED\u8A00: ${o.primaryLanguage||"\u672A\u77E5"}`),o.buildTool&&t.push(`\u{1F527} \u6784\u5EFA\u5DE5\u5177: ${o.buildTool}`),o.packageManager&&t.push(`\u{1F4E6} \u5305\u7BA1\u7406\u5668: ${o.packageManager}`),o.runtime&&t.push(`\u2699\uFE0F \u8FD0\u884C\u65F6: ${o.runtime}`),t.push(""),o.fileStats){t.push("\u{1F4C1} \u6587\u4EF6\u7EDF\u8BA1:");let n=o.fileStats;t.push(` \u603B\u6587\u4EF6\u6570: ${n.totalFiles||0}`),t.push(` \u6E90\u4EE3\u7801\u6587\u4EF6: ${n.sourceFiles||0}`),t.push(` \u914D\u7F6E\u6587\u4EF6: ${n.configFiles||0}`),t.push(` \u6587\u6863\u6587\u4EF6: ${n.docFiles||0}`),t.push(` \u6D4B\u8BD5\u6587\u4EF6: ${n.testFiles||0}`),t.push("")}return o.dependencyCount&&(t.push("\u{1F4DA} \u4F9D\u8D56\u7EDF\u8BA1:"),t.push(` \u751F\u4EA7\u4F9D\u8D56: ${o.dependencyCount.production||0} \u4E2A`),t.push(` \u5F00\u53D1\u4F9D\u8D56: ${o.dependencyCount.development||0} \u4E2A`),t.push("")),o.languages&&o.languages.length>0&&(t.push("\u{1F30D} \u8BED\u8A00\u5206\u5E03:"),o.languages.slice(0,5).forEach(n=>{t.push(` ${n.language}: ${n.count} \u4E2A\u6587\u4EF6 (${n.percentage})`)}),t.push("")),t.join(`
|
|
1097
|
-
`)}function Tu(o,e){let t=[],n=0;if((o.projectName||o.version||o.description)&&(o.projectName&&t.push(`**\u9879\u76EE\u540D\u79F0**: ${o.projectName}`),o.version&&t.push(`**\u7248\u672C**: ${o.version}`),o.description&&t.push(`**\u63CF\u8FF0**: ${o.description}`),n++),n>=e||((o.primaryLanguage||o.buildTool)&&(t.push(""),o.primaryLanguage&&t.push(`**\u4E3B\u8981\u8BED\u8A00**: ${o.primaryLanguage}`),o.buildTool&&t.push(`**\u6784\u5EFA\u5DE5\u5177**: ${o.buildTool}`),o.packageManager&&t.push(`**\u5305\u7BA1\u7406\u5668**: ${o.packageManager}`),o.runtime&&t.push(`**\u8FD0\u884C\u65F6**: ${o.runtime}`),n++),n>=e))return t.join(`
|
|
1195
|
+
${new Date().toLocaleString()}`,s=Pe.join(n,`${e}.md`);if(Se.writeFileSync(s,r,"utf8"),_(`\u4EFB\u52A1\u89C4\u5212\u5DF2\u4FDD\u5B58\u5230: ${s}`,"Task"),t){let i={taskId:t.taskId,createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),status:"pending",currentStep:0,totalSteps:t.tasks.length,strategy:t.strategy,markdown:t.markdown,tasks:t.tasks.map(c=>({step:c.step,description:c.description,status:c.status,subAgent:c.subAgent,startTime:null,endTime:null,duration:null,error:null}))},a=Pe.join(n,`${e}.json`);Se.writeFileSync(a,JSON.stringify(i,null,2),"utf8"),_(`JSON \u6570\u636E\u5DF2\u4FDD\u5B58\u5230: ${a}`,"Task")}}async function at(o,e,t){let n=Pe.join(process.cwd(),".nium","tasks"),r=Pe.join(n,`${o}.md`);if(!Se.existsSync(r))return ke(`\u4EFB\u52A1\u6587\u4EF6\u4E0D\u5B58\u5728: ${r}`,"Task"),!1;try{let i=Se.readFileSync(r,"utf8").split(`
|
|
1196
|
+
`),a=!1,c=1,l=[];for(let u of i){if(u.trim().includes("## \u6267\u884C\u6B65\u9AA4")||u.trim().includes("##\u6267\u884C\u6B65\u9AA4")){a=!0,l.push(u);continue}if(u.trim().includes("## \u66F4\u65B0\u65F6\u95F4")){l.push("## \u66F4\u65B0\u65F6\u95F4"),l.push(new Date().toLocaleString());continue}if(a&&u.trim().startsWith("##")&&!u.trim().includes("\u66F4\u65B0\u65F6\u95F4")){a=!1,l.push(u);continue}if(a){let p=u.trim().match(/^-\s*\[(.)\]\s*(.+)/);if(p&&c===e){let g=" ";t==="in_progress"&&(g="-"),t==="completed"&&(g="x"),l.push(`- [${g}] ${p[2]}`),c++;continue}p&&c++}l.push(u)}return Se.writeFileSync(r,l.join(`
|
|
1197
|
+
`),"utf8"),_(`\u4EFB\u52A1 ${o} \u6B65\u9AA4 ${e} \u72B6\u6001\u5DF2\u66F4\u65B0\u4E3A ${t}`,"Task"),!0}catch(s){return ke(`\u66F4\u65B0\u4EFB\u52A1\u72B6\u6001\u5931\u8D25: ${s.message}`,"Task"),!1}}function Sg(o){let e=Pe.join(process.cwd(),".nium","tasks");return Pe.join(e,`${o}.md`)}function vg(o){let e=Pe.join(process.cwd(),".nium","tasks"),t=Pe.join(e,`${o}.json`);if(!Se.existsSync(t))return ke(`\u4EFB\u52A1\u6587\u4EF6\u4E0D\u5B58\u5728: ${t}`,"Task"),null;try{let n=Se.readFileSync(t,"utf8"),r=JSON.parse(n);return _(`\u6210\u529F\u52A0\u8F7D\u4EFB\u52A1: ${o}`,"Task"),r}catch(n){return ke(`\u89E3\u6790\u4EFB\u52A1\u6587\u4EF6\u5931\u8D25: ${n.message}`,"Task"),null}}function wg(){let o=Pe.join(process.cwd(),".nium","tasks");return Se.existsSync(o)?Se.readdirSync(o).filter(n=>n.endsWith(".json")).map(n=>n.replace(".json","")):[]}function er(o){if(!o||!o.tasks||o.tasks.length===0)return"\u65E0\u6709\u6548\u4EFB\u52A1\u6B65\u9AA4";let e=[];e.push(`
|
|
1198
|
+
\u4EFB\u52A1\u89C4\u5212\u6458\u8981:`),e.push("\u2500".repeat(50));for(let t of o.tasks){let n=t.subAgent!=="default"?`[${t.subAgent}]`:"[\u9ED8\u8BA4\u667A\u80FD\u4F53]";e.push(`${t.step}. ${t.description} ${n}`)}return e.push("\u2500".repeat(50)),e.join(`
|
|
1199
|
+
`)}var xe,$e=C(()=>{le();ve();Dr();it();cn();xe={SIMPLE:"simple",COMPLEX:"complex"}});function tr(o,e={format:"markdown"}){let{format:t,maxSections:n=100,detailed:r=!0,customTitle:s}=e;switch(t){case"markdown":return Sc(o,r,s);case"text":return bg(o,r);case"summary":return Tg(o,n);default:return Sc(o,r,s)}}function Sc(o,e,t){let n=[];return n.push(t||`# \u9879\u76EE\u7ED3\u6784\u4FE1\u606F
|
|
1200
|
+
`),kg(n,o,e),Eg(n,o,e),Pg(n,o,e),$g(n,o,e),Mg(n,o,e),Ig(n,o,e),Ag(n,o,e),n.length<=1?"\u6682\u65E0\u8BE6\u7EC6\u9879\u76EE\u7ED3\u6784\u4FE1\u606F\u3002":n.join(`
|
|
1201
|
+
`)}function bg(o,e){let t=[];if(t.push("\u{1F4CA} \u9879\u76EE\u57FA\u7840\u4FE1\u606F\u6458\u8981"),t.push("\u2550".repeat(50)),t.push(""),t.push(`\u{1F4E6} \u9879\u76EE\u540D\u79F0: ${o.projectName||"\u672A\u77E5"}`),t.push(`\u{1F4CC} \u7248\u672C: ${o.version||"\u672A\u77E5"}`),o.description&&t.push(`\u{1F4DD} \u63CF\u8FF0: ${o.description}`),t.push(""),t.push(`\u{1F310} \u4E3B\u8981\u8BED\u8A00: ${o.primaryLanguage||"\u672A\u77E5"}`),o.buildTool&&t.push(`\u{1F527} \u6784\u5EFA\u5DE5\u5177: ${o.buildTool}`),o.packageManager&&t.push(`\u{1F4E6} \u5305\u7BA1\u7406\u5668: ${o.packageManager}`),o.runtime&&t.push(`\u2699\uFE0F \u8FD0\u884C\u65F6: ${o.runtime}`),t.push(""),o.fileStats){t.push("\u{1F4C1} \u6587\u4EF6\u7EDF\u8BA1:");let n=o.fileStats;t.push(` \u603B\u6587\u4EF6\u6570: ${n.totalFiles||0}`),t.push(` \u6E90\u4EE3\u7801\u6587\u4EF6: ${n.sourceFiles||0}`),t.push(` \u914D\u7F6E\u6587\u4EF6: ${n.configFiles||0}`),t.push(` \u6587\u6863\u6587\u4EF6: ${n.docFiles||0}`),t.push(` \u6D4B\u8BD5\u6587\u4EF6: ${n.testFiles||0}`),t.push("")}return o.dependencyCount&&(t.push("\u{1F4DA} \u4F9D\u8D56\u7EDF\u8BA1:"),t.push(` \u751F\u4EA7\u4F9D\u8D56: ${o.dependencyCount.production||0} \u4E2A`),t.push(` \u5F00\u53D1\u4F9D\u8D56: ${o.dependencyCount.development||0} \u4E2A`),t.push("")),o.languages&&o.languages.length>0&&(t.push("\u{1F30D} \u8BED\u8A00\u5206\u5E03:"),o.languages.slice(0,5).forEach(n=>{t.push(` ${n.language}: ${n.count} \u4E2A\u6587\u4EF6 (${n.percentage})`)}),t.push("")),t.join(`
|
|
1202
|
+
`)}function Tg(o,e){let t=[],n=0;if((o.projectName||o.version||o.description)&&(o.projectName&&t.push(`**\u9879\u76EE\u540D\u79F0**: ${o.projectName}`),o.version&&t.push(`**\u7248\u672C**: ${o.version}`),o.description&&t.push(`**\u63CF\u8FF0**: ${o.description}`),n++),n>=e||((o.primaryLanguage||o.buildTool)&&(t.push(""),o.primaryLanguage&&t.push(`**\u4E3B\u8981\u8BED\u8A00**: ${o.primaryLanguage}`),o.buildTool&&t.push(`**\u6784\u5EFA\u5DE5\u5177**: ${o.buildTool}`),o.packageManager&&t.push(`**\u5305\u7BA1\u7406\u5668**: ${o.packageManager}`),o.runtime&&t.push(`**\u8FD0\u884C\u65F6**: ${o.runtime}`),n++),n>=e))return t.join(`
|
|
1098
1203
|
`);if(o.fileStats){t.push("");let r=o.fileStats;r.totalFiles&&t.push(`**\u603B\u6587\u4EF6\u6570**: ${r.totalFiles}`),r.sourceFiles&&t.push(`**\u6E90\u6587\u4EF6**: ${r.sourceFiles}`),r.configFiles&&t.push(`**\u914D\u7F6E\u6587\u4EF6**: ${r.configFiles}`),r.testFiles&&t.push(`**\u6D4B\u8BD5\u6587\u4EF6**: ${r.testFiles}`),n++}return n>=e||(o.languages&&o.languages.length>0&&(t.push(""),t.push("**\u8BED\u8A00\u5206\u5E03**:"),o.languages.slice(0,5).forEach(r=>{t.push(`- ${r.language}: ${r.percentage}%`)}),n++),n>=e)||(o.dependencies&&Object.keys(o.dependencies).length>0&&(t.push(""),t.push("**\u4E3B\u8981\u4F9D\u8D56**:"),Object.entries(o.dependencies).slice(0,5).forEach(([s,i])=>{t.push(`- ${s}: ${i}`)}),n++),n>=e)?t.join(`
|
|
1099
1204
|
`):(o.codeStandards&&o.codeStandards.length>0&&(t.push(""),t.push("**\u4EE3\u7801\u89C4\u8303**:"),o.codeStandards.slice(0,3).forEach(r=>{t.push(`- ${r}`)})),t.length>0?t.join(`
|
|
1100
|
-
`):"\u6682\u65E0\u9879\u76EE\u4FE1\u606F\u3002")}function
|
|
1205
|
+
`):"\u6682\u65E0\u9879\u76EE\u4FE1\u606F\u3002")}function kg(o,e,t){!e.projectName&&!e.version&&!e.description||(o.push("## \u9879\u76EE\u57FA\u672C\u4FE1\u606F"),e.projectName&&o.push(`**\u9879\u76EE\u540D\u79F0**: ${e.projectName}`),e.version&&o.push(`**\u7248\u672C**: ${e.version}`),e.description&&o.push(`**\u63CF\u8FF0**: ${e.description}`),o.push(""))}function Eg(o,e,t){!e.primaryLanguage&&!e.buildTool&&!e.packageManager&&!e.runtime||(o.push("## \u6280\u672F\u6808\u4FE1\u606F"),e.primaryLanguage&&o.push(`**\u4E3B\u8981\u7F16\u7A0B\u8BED\u8A00**: ${e.primaryLanguage}`),e.buildTool&&o.push(`**\u6784\u5EFA\u5DE5\u5177**: ${e.buildTool}`),e.packageManager&&o.push(`**\u5305\u7BA1\u7406\u5668**: ${e.packageManager}`),e.runtime&&o.push(`**\u8FD0\u884C\u65F6**: ${e.runtime}`),o.push(""))}function Pg(o,e,t){if(!e.fileStats)return;let n=e.fileStats;o.push("## \u6587\u4EF6\u7EDF\u8BA1"),n.totalFiles&&o.push(`- **\u603B\u6587\u4EF6\u6570**: ${n.totalFiles}`),n.sourceFiles&&o.push(`- **\u6E90\u6587\u4EF6**: ${n.sourceFiles}`),n.configFiles&&o.push(`- **\u914D\u7F6E\u6587\u4EF6**: ${n.configFiles}`),n.docFiles&&o.push(`- **\u6587\u6863\u6587\u4EF6**: ${n.docFiles}`),n.testFiles&&o.push(`- **\u6D4B\u8BD5\u6587\u4EF6**: ${n.testFiles}`),o.push("")}function $g(o,e,t){!e.languages||e.languages.length===0||(o.push("## \u7F16\u7A0B\u8BED\u8A00\u5206\u6790"),t?e.languages.forEach(n=>{o.push(`- **${n.language}**: ${n.count} \u4E2A\u6587\u4EF6 (${n.percentage}%)`)}):e.languages.slice(0,5).forEach(n=>{o.push(`- **${n.language}**: ${n.percentage}%`)}),o.push(""))}function Mg(o,e,t){let n=e.dependencies&&Object.keys(e.dependencies).length>0,r=e.devDependencies&&Object.keys(e.devDependencies).length>0;!n&&!r||(o.push("## \u4F9D\u8D56\u5173\u7CFB"),n&&(o.push("### \u751F\u4EA7\u4F9D\u8D56"),(t?Object.entries(e.dependencies):Object.entries(e.dependencies).slice(0,10)).forEach(([i,a])=>{o.push(`- **${i}**: ${a}`)}),!t&&Object.keys(e.dependencies).length>10&&o.push(`
|
|
1101
1206
|
*...\u8FD8\u6709 ${Object.keys(e.dependencies).length-10} \u4E2A\u4F9D\u8D56*`),o.push("")),r&&(o.push("### \u5F00\u53D1\u4F9D\u8D56"),(t?Object.entries(e.devDependencies):Object.entries(e.devDependencies).slice(0,10)).forEach(([i,a])=>{o.push(`- **${i}**: ${a}`)}),!t&&Object.keys(e.devDependencies).length>10&&o.push(`
|
|
1102
|
-
*...\u8FD8\u6709 ${Object.keys(e.devDependencies).length-10} \u4E2A\u4F9D\u8D56*`),o.push("")))}function
|
|
1103
|
-
*...\u8FD8\u6709 ${e.entryPoints.length-5} \u4E2A\u5165\u53E3\u6587\u4EF6*`),o.push("")}function
|
|
1104
|
-
*...\u8FD8\u6709 ${e.codeStandards.length-5} \u4E2A\u89C4\u8303*`),o.push("")}var
|
|
1207
|
+
*...\u8FD8\u6709 ${Object.keys(e.devDependencies).length-10} \u4E2A\u4F9D\u8D56*`),o.push("")))}function Ig(o,e,t){if(!e.entryPoints||e.entryPoints.length===0)return;o.push("## \u5165\u53E3\u6587\u4EF6"),(t?e.entryPoints:e.entryPoints.slice(0,5)).forEach(r=>{o.push(`- \`${r}\``)}),!t&&e.entryPoints.length>5&&o.push(`
|
|
1208
|
+
*...\u8FD8\u6709 ${e.entryPoints.length-5} \u4E2A\u5165\u53E3\u6587\u4EF6*`),o.push("")}function Ag(o,e,t){if(!e.codeStandards||e.codeStandards.length===0)return;o.push("## \u4EE3\u7801\u89C4\u8303"),(t?e.codeStandards:e.codeStandards.slice(0,5)).forEach(r=>{o.push(`- ${r}`)}),!t&&e.codeStandards.length>5&&o.push(`
|
|
1209
|
+
*...\u8FD8\u6709 ${e.codeStandards.length-5} \u4E2A\u89C4\u8303*`),o.push("")}var ro=C(()=>{});import*as Jt from"os";var Ve,ze,He,Je,vc=C(()=>{Y();ro();Ve=class{originalTask;plan;stepSummaries;sharedState;stepDependencies;explorationHistory;constructor(){this.originalTask=null,this.plan={tasks:[],currentStep:0,totalSteps:0},this.stepSummaries=new Map,this.sharedState={projectInfo:null,rules:null,dependencies:null,recentFiles:[],knownIssues:[]},this.stepDependencies=new Map,this.explorationHistory=null}initializeTask(e,t){this.originalTask=e,this.plan={tasks:t.tasks||[],currentStep:0,totalSteps:t.tasks?.length||0},M(`\u5168\u5C40\u4E0A\u4E0B\u6587\u521D\u59CB\u5316: ${this.plan.totalSteps} \u4E2A\u6B65\u9AA4`)}recordStepCompletion(e,t,n={},r){this.stepSummaries.set(e,{summary:t,metadata:n,timestamp:new Date().toISOString()}),r&&r.buildHistoryIndex(e,t,n),x(`\u6B65\u9AA4 ${e} \u6458\u8981\u5DF2\u8BB0\u5F55: ${t.substring(0,50)}...`)}getStepSummary(e){return this.stepSummaries.get(e)}updateSharedState(e,t){this.sharedState.hasOwnProperty(e)?(this.sharedState[e]=t,x(`\u5171\u4EAB\u72B6\u6001\u66F4\u65B0: ${e}`)):x(`\u8B66\u544A: \u672A\u77E5\u7684\u5171\u4EAB\u72B6\u6001\u952E: ${e}`)}addRecentFile(e){this.sharedState.recentFiles.unshift(e),this.sharedState.recentFiles.length>10&&this.sharedState.recentFiles.pop()}setStepDependencies(e,t){this.stepDependencies.set(e,t)}getCompactSummary(){return{task:this.originalTask,progress:`${this.plan.currentStep}/${this.plan.totalSteps}`,completedSteps:Array.from(this.stepSummaries.keys()),recentFiles:this.sharedState.recentFiles.slice(0,5)}}getPlan(){return this.plan}setCurrentStep(e){this.plan.currentStep=e}getSharedState(){return this.sharedState}getStepDependencies(){return this.stepDependencies}getOriginalTask(){return this.originalTask}recordExplorationResult(e){let t=e.length>200?e.substring(0,200)+"...":e;this.explorationHistory={timestamp:Date.now(),content:e,summary:t},M("\u5DF2\u8BB0\u5F55\u9879\u76EE\u63A2\u7D22\u7ED3\u679C\u5230\u5168\u5C40\u4E0A\u4E0B\u6587")}getExplorationHistory(){return this.explorationHistory}},ze=class{globalContext;historyIndex=new Map;constructor(e){this.globalContext=e}async selectRelevantHistory(e,t,n){let r=[],s=new Set,i=this.calculateTargetHistoryCount(t),a=Math.min(i*2,20);x(`\u4EFB\u52A1\u590D\u6742\u5EA6\u5206\u6790: \u76EE\u6807\u5386\u53F2\u6570\u91CF=${i}, \u6700\u5927\u7D22\u5F15\u7ED3\u679C=${a}`);let c=this.globalContext.getStepDependencies().get(e)||[];for(let g of c){let d=this.globalContext.getStepSummary(g);d&&(r.push({stepId:g,type:"dependency",content:d.summary,metadata:d.metadata}),s.add(g))}let l=this.findRelevantStepsWithIndex(t,a);for(let g of l){if(s.has(g)||g>=e)continue;let d=this.globalContext.getStepSummary(g);if(d&&(r.push({stepId:g,type:"recent",content:d.summary,metadata:d.metadata}),s.add(g),r.length>=i))break}let u=Math.max(3,Math.floor(i/2));if(r.length<u){let g=this.getRecentCompletedSteps(i);for(let d of g){if(s.has(d)||d>=e)continue;let m=this.globalContext.getStepSummary(d);if(m&&(r.push({stepId:d,type:"recent",content:m.summary,metadata:m.metadata}),s.add(d),r.length>=u))break}}if(n==="explorer")x("\u8DF3\u8FC7\u63A2\u7D22\u5386\u53F2\u6CE8\u5165 (\u5F53\u524D\u4E3A explorer \u667A\u80FD\u4F53)");else{let g=this.globalContext.getExplorationHistory();g&&(r.push({stepId:0,type:"exploration",content:g.content,metadata:{timestamp:g.timestamp,summary:g.summary}}),x(`\u5DF2\u6DFB\u52A0\u63A2\u7D22\u5386\u53F2\u5230\u4E0A\u4E0B\u6587 (\u667A\u80FD\u4F53: ${n||"unknown"})`))}return x(`\u4E3A\u6B65\u9AA4 ${e} \u9009\u62E9\u4E86 ${r.length} \u6761\u76F8\u5173\u5386\u53F2 (\u4F7F\u7528\u7D22\u5F15\u4F18\u5316)`),r}getRecentCompletedSteps(e){return Array.from(this.globalContext.getStepDependencies().keys()).slice(-e)}calculateTargetHistoryCount(e){let t=5;e.length>300?t+=5:e.length>150?t+=3:e.length>80&&(t+=1);let n=["\u91CD\u6784","refactor","\u4F18\u5316","optimize","\u8BBE\u8BA1","design","\u67B6\u6784","architecture","\u5B9E\u73B0","implement","\u5F00\u53D1","develop","\u96C6\u6210","integrate","\u8FC1\u79FB","migrate","\u4FEE\u590D","fix","\u8C03\u8BD5","debug","\u5206\u6790","analyze","\u8BC4\u4F30","evaluate"],r=["\u8BFB\u53D6","read","\u67E5\u770B","view","\u663E\u793A","display","\u6253\u5370","print","\u5217\u51FA","list","\u67E5\u627E","find","\u641C\u7D22","search"],s=e.toLowerCase(),i=n.filter(u=>s.includes(u)).length;t+=i*2;let a=r.filter(u=>s.includes(u)).length;t-=a;let c=e.match(/\.(ts|js|tsx|jsx|py|java|go|rs|cpp|c|h|md|json|yaml|yml)/gi);c&&c.length>3?t+=3:c&&c.length>1&&(t+=1);let l=e.match(/模块|组件|系统|服务|module|component|system|service/gi);return l&&l.length>2&&(t+=2),Math.max(5,Math.min(t,20))}buildHistoryIndex(e,t,n){let r=this.extractKeywords(t);n&&(n.toolsUsed&&Array.isArray(n.toolsUsed)&&n.toolsUsed.forEach(i=>{i&&i.length>0&&r.push(i.toLowerCase())}),n.filesAccessed&&Array.isArray(n.filesAccessed)&&n.filesAccessed.forEach(i=>{if(i){let a=i.split(/[/\\]/).pop()?.split(".")[0];a&&a.length>2&&r.push(a.toLowerCase()),i.split(/[/\\]/).filter(l=>l&&l.length>2).forEach(l=>{["src","dist","node_modules","test","tests","lib","bin"].includes(l.toLowerCase())||r.push(l.toLowerCase())})}}));let s=[...new Set(r)];s.forEach(i=>{this.historyIndex.has(i)||this.historyIndex.set(i,new Set),this.historyIndex.get(i).add(e)}),x(`\u4E3A\u6B65\u9AA4 ${e} \u6784\u5EFA\u4E86\u7D22\u5F15\uFF0C\u5305\u542B ${s.length} \u4E2A\u5173\u952E\u8BCD\uFF08\u6458\u8981: ${r.length-(s.length-r.length)}, \u5143\u6570\u636E: ${s.length-r.length}\uFF09`)}extractKeywords(e){let t=this.getStopWords();return e.toLowerCase().replace(/[^\w\s\u4e00-\u9fa5]/g," ").split(/[\s\u3000]+/).filter(n=>n.length<2?!1:!t.has(n)).slice(0,20)}getStopWords(){return new Set(["the","is","at","which","on","and","or","but","in","with","to","for","of","a","an","as","by","from","has","have","had","be","been","being","are","was","were","will","would","should","could","may","might","can","do","does","did","done","this","that","these","those","it","its","they","them","their","we","our","you","your","he","she","his","her","him","me","my","i","am","not","no","yes","all","any","some","each","every","both","few","more","most","into","through","during","before","after","above","below","up","down","out","off","over","under","again","further","then","once","here","there","when","where","why","how","what","who","whom","whose","which","about","against","between","into","through","\u7684","\u4E86","\u5728","\u662F","\u6211","\u6709","\u548C","\u5C31","\u4E0D","\u4EBA","\u90FD","\u4E00","\u4E00\u4E2A","\u4E0A","\u4E5F","\u5F88","\u5230","\u8BF4","\u8981","\u53BB","\u4F60","\u4F1A","\u7740","\u6CA1\u6709","\u770B","\u597D","\u81EA\u5DF1","\u8FD9","\u90A3","\u91CC","\u4E2A","\u5C31\u662F","\u554A","\u51FA","\u6765","\u4E48","\u5417","\u5462","\u5427","\u54E6","\u5566","\u5440","\u561B","\u54C8","\u54EA","\u4EC0\u4E48","\u600E\u4E48","\u4E3A\u4EC0\u4E48","\u591A\u5C11","\u51E0\u4E2A","\u8FD9\u4E2A","\u90A3\u4E2A","\u8FD9\u4E9B","\u90A3\u4E9B","\u8FD9\u6837","\u90A3\u6837","\u5982\u4F55","\u53EF\u4EE5","\u80FD\u591F","\u5E94\u8BE5","\u5FC5\u987B","\u9700\u8981","\u60F3\u8981","\u5E0C\u671B","\u89C9\u5F97","\u8BA4\u4E3A","\u77E5\u9053","\u660E\u767D","\u5DF2\u7ECF","\u6B63\u5728","\u5C06\u8981","\u66FE\u7ECF","\u4E00\u76F4","\u603B\u662F","\u7ECF\u5E38","\u6709\u65F6","\u5076\u5C14","\u4ECE\u6765","\u6C38\u8FDC","\u975E\u5E38","\u5F88\u591A","\u4E00\u4E9B","\u6240\u6709","\u6BCF\u4E2A","\u4EFB\u4F55","\u67D0\u4E2A","\u53E6\u5916","\u5176\u4ED6","\u522B\u7684","\u5176\u5B83","\u56E0\u4E3A","\u6240\u4EE5","\u4F46\u662F","\u7136\u800C","\u867D\u7136","\u5982\u679C","\u5047\u5982","\u9664\u975E","\u53EA\u8981","\u65E0\u8BBA","\u4E0D\u7BA1","\u800C\u4E14","\u5E76\u4E14","\u6216\u8005","\u8FD8\u662F","\u4E0D\u4EC5","\u800C\u4E14","\u65E2\u7136","\u7531\u4E8E","\u4E3A\u4E86","\u4EE5\u4FBF","\u4EE5\u514D","step","task","action","result","success","failed","error","warning","info","\u6B65\u9AA4","\u4EFB\u52A1","\u64CD\u4F5C","\u7ED3\u679C","\u6210\u529F","\u5931\u8D25","\u9519\u8BEF","\u8B66\u544A","\u4FE1\u606F","\u5B8C\u6210","\u6267\u884C"])}findRelevantStepsWithIndex(e,t=5){let n=this.extractKeywords(e),r=new Map;return n.forEach(s=>{let i=this.historyIndex.get(s);i&&i.forEach(a=>{r.set(a,(r.get(a)||0)+1)})}),Array.from(r.entries()).sort((s,i)=>i[1]-s[1]).slice(0,t).map(([s])=>s)}isLikelyRelevant(e,t){let n=new Set(this.extractKeywords(e));return this.extractKeywords(t).filter(i=>n.has(i)).length>=2}async selectRelevantHistoryWithLLM(e,t,n){let{MODEL:r}=await Promise.resolve().then(()=>(le(),wt)),{callModelAPI:s}=await Promise.resolve().then(()=>(ve(),Gt)),i=Array.from(this.globalContext.getStepDependencies().entries()).map(([c,l])=>{let u=this.globalContext.getStepSummary(c);return u?`\u6B65\u9AA4${c}: ${u.summary}`:""}).filter(Boolean).join(`
|
|
1105
1210
|
`);if(!i){if(!(n==="explorer")){let l=this.globalContext.getExplorationHistory();if(l)return[{stepId:0,type:"exploration",content:l.content,metadata:{timestamp:l.timestamp,summary:l.summary}}]}return[]}let a=`\u4EFB\u52A1: ${this.globalContext.getOriginalTask()||""}
|
|
1106
1211
|
|
|
1107
1212
|
\u5DF2\u5B8C\u6210\u7684\u5386\u53F2\u6B65\u9AA4\u6458\u8981:
|
|
@@ -1111,7 +1216,7 @@ ${i}
|
|
|
1111
1216
|
|
|
1112
1217
|
\u95EE\u9898: \u5F53\u524D\u6B65\u9AA4\u9700\u8981\u54EA\u4E9B\u5386\u53F2\u6B65\u9AA4\u7684\u4FE1\u606F\uFF1F\u8BF7\u5206\u6790\u4F9D\u8D56\u5173\u7CFB\u3002
|
|
1113
1218
|
\u8F93\u51FA\u683C\u5F0F: \u8FD4\u56DEJSON\u6570\u7EC4\uFF0C\u5305\u542B\u76F8\u5173\u6B65\u9AA4ID\uFF0C\u4F8B\u5982 [1, 3]\u3002\u5982\u679C\u4E0D\u9700\u8981\u5386\u53F2\u4FE1\u606F\uFF0C\u8FD4\u56DE []\u3002
|
|
1114
|
-
\u53EA\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981\u5176\u4ED6\u89E3\u91CA\u3002`;try{let l=(await s({model:r(),messages:[{role:"user",content:a}],temperature:.1,max_tokens:100})).choices[0].message.content?.trim()||"[]",p=JSON.parse(l).map(
|
|
1219
|
+
\u53EA\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981\u5176\u4ED6\u89E3\u91CA\u3002`;try{let l=(await s({model:r(),messages:[{role:"user",content:a}],temperature:.1,max_tokens:100,tools:[]})).choices[0].message.content?.trim()||"[]",p=JSON.parse(l).map(d=>{let m=this.globalContext.getStepSummary(d);return m?{stepId:d,type:"llm_selected",content:m.summary,metadata:m.metadata}:null}).filter(d=>d!==null);if(n==="explorer")x("\u8DF3\u8FC7\u63A2\u7D22\u5386\u53F2\u6CE8\u5165 (LLM\u6A21\u5F0F, \u5F53\u524D\u4E3A explorer \u667A\u80FD\u4F53)");else{let d=this.globalContext.getExplorationHistory();d&&(p.push({stepId:0,type:"exploration",content:d.content,metadata:{timestamp:d.timestamp,summary:d.summary}}),x(`\u5DF2\u6DFB\u52A0\u63A2\u7D22\u5386\u53F2\u5230\u4E0A\u4E0B\u6587 (LLM\u6A21\u5F0F, \u667A\u80FD\u4F53: ${n||"unknown"})`))}return M(`LLM \u4E3A\u6B65\u9AA4 ${e} \u9009\u62E9\u4E86 ${p.length} \u6761\u76F8\u5173\u5386\u53F2`),p}catch(c){return x(`LLM \u9009\u62E9\u5386\u53F2\u5931\u8D25\uFF0C\u964D\u7EA7\u5230\u542F\u53D1\u5F0F\u65B9\u6CD5: ${c instanceof Error?c.message:String(c)}`),this.selectRelevantHistory(e,t,n)}}},He=class{globalContext;disclosure;platformInfoCache=null;projectInfoCache=null;projectInfoCacheTime=0;PROJECT_INFO_CACHE_TTL=300*1e3;constructor(e,t){this.globalContext=e,this.disclosure=t}async buildIsolatedContext(e,t,n="",r=!1,s,i){let a=[];n&&a.push({role:"system",content:n});let c=await this.buildProjectEnvironmentContext();c&&a.push({role:"system",content:`## \u9879\u76EE\u73AF\u5883\u4FE1\u606F
|
|
1115
1220
|
|
|
1116
1221
|
${c}`}),a.push({role:"user",content:`\u539F\u59CB\u4EFB\u52A1: ${this.globalContext.getOriginalTask()||""}`}),this.globalContext.getSharedState().rules&&a.push({role:"system",content:`\u26A0\uFE0F \u3010\u91CD\u8981\u3011\u9879\u76EE\u89C4\u5219 - \u6A21\u578B\u5FC5\u987B\u4E25\u683C\u9075\u5B88
|
|
1117
1222
|
|
|
@@ -1122,10 +1227,10 @@ ${c}`}),a.push({role:"user",content:`\u539F\u59CB\u4EFB\u52A1: ${this.globalCont
|
|
|
1122
1227
|
${this.globalContext.getSharedState().rules}
|
|
1123
1228
|
|
|
1124
1229
|
===============================
|
|
1125
|
-
\u26A0\uFE0F \u91CD\u8981\u63D0\u9192\uFF1A\u5728\u6267\u884C\u6240\u6709\u4EFB\u52A1\u65F6\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u4E0A\u8FF0\u9879\u76EE\u89C4\u5219\u548C\u7EA6\u5B9A\uFF0C\u786E\u4FDD\u751F\u6210\u7684\u4EE3\u7801\u3001\u6587\u4EF6\u7ED3\u6784\u548C\u5B9E\u73B0\u65B9\u5F0F\u7B26\u5408\u9879\u76EE\u8981\u6C42\u3002\u5982\u679C\u8FDD\u53CD\u89C4\u5219\uFF0C\u53EF\u80FD\u5BFC\u81F4\u4EFB\u52A1\u5931\u8D25\u6216\u9700\u8981\u91CD\u65B0\u6267\u884C\u3002`});let l;if(r?l=await this.disclosure.selectRelevantHistoryWithLLM(e,t,i):l=await this.disclosure.selectRelevantHistory(e,t,i),l.length>0){let
|
|
1230
|
+
\u26A0\uFE0F \u91CD\u8981\u63D0\u9192\uFF1A\u5728\u6267\u884C\u6240\u6709\u4EFB\u52A1\u65F6\uFF0C\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u4E0A\u8FF0\u9879\u76EE\u89C4\u5219\u548C\u7EA6\u5B9A\uFF0C\u786E\u4FDD\u751F\u6210\u7684\u4EE3\u7801\u3001\u6587\u4EF6\u7ED3\u6784\u548C\u5B9E\u73B0\u65B9\u5F0F\u7B26\u5408\u9879\u76EE\u8981\u6C42\u3002\u5982\u679C\u8FDD\u53CD\u89C4\u5219\uFF0C\u53EF\u80FD\u5BFC\u81F4\u4EFB\u52A1\u5931\u8D25\u6216\u9700\u8981\u91CD\u65B0\u6267\u884C\u3002`});let l;if(r?l=await this.disclosure.selectRelevantHistoryWithLLM(e,t,i):l=await this.disclosure.selectRelevantHistory(e,t,i),l.length>0){let u=l.map(p=>`[\u6B65\u9AA4${p.stepId}] ${p.content}`).join(`
|
|
1126
1231
|
|
|
1127
1232
|
`);a.push({role:"user",content:`\u76F8\u5173\u5386\u53F2\u4FE1\u606F:
|
|
1128
|
-
${
|
|
1233
|
+
${u}`})}return a.push({role:"user",content:`\u5F53\u524D\u4EFB\u52A1 (\u6B65\u9AA4 ${e}/${this.globalContext.getPlan().totalSteps}):
|
|
1129
1234
|
${t}`}),s&&s.length>0&&a.push({role:"system",content:`\u26A0\uFE0F \u672C\u6B65\u9AA4\u5DE5\u5177\u4F7F\u7528\u9650\u5236:
|
|
1130
1235
|
\u4F60\u53EA\u80FD\u4F7F\u7528\u4EE5\u4E0B\u5DE5\u5177: ${s.join(", ")}
|
|
1131
1236
|
|
|
@@ -1135,7 +1240,9 @@ ${t}`}),s&&s.length>0&&a.push({role:"system",content:`\u26A0\uFE0F \u672C\u6B65\
|
|
|
1135
1240
|
- You MUST use Action: merge(path, content) to modify existing files
|
|
1136
1241
|
- NEVER just output code without saving it using Action:
|
|
1137
1242
|
- Follow the exact format: "Thought: ..." then "Action: tool_name(args)"
|
|
1138
|
-
- When task is done, use "Answer: ..." to finish`})
|
|
1243
|
+
- When task is done, use "Answer: ..." to finish`}),M(`\u4E3A\u6B65\u9AA4 ${e} \u6784\u5EFA\u4E86\u9694\u79BB\u4E0A\u4E0B\u6587\uFF0C\u5305\u542B ${a.length} \u6761\u6D88\u606F`),s&&M(`\u5DE5\u5177\u9650\u5236: ${s.join(", ")}`),x(`\u4E0A\u4E0B\u6587\u8BE6\u60C5: \u5386\u53F2 ${l.length} \u6761, \u6587\u4EF6 ${this.globalContext.getSharedState().recentFiles.length} \u4E2A`),a}buildSimpleContext(e,t=""){let n=[];return t&&n.push({role:"system",content:t}),n.push({role:"user",content:e}),M("\u6784\u5EFA\u4E86\u7B80\u5316\u4E0A\u4E0B\u6587\uFF08\u7B80\u5355\u4EFB\u52A1\u6A21\u5F0F\uFF09"),n}async buildProjectEnvironmentContext(){try{this.platformInfoCache||(this.platformInfoCache=this.buildPlatformInfo(),x("\u5E73\u53F0\u4FE1\u606F\u5DF2\u7F13\u5B58"));let e=Date.now();(!this.projectInfoCache||e-this.projectInfoCacheTime>this.PROJECT_INFO_CACHE_TTL)&&(this.projectInfoCache=await this.buildProjectInfo(),this.projectInfoCacheTime=e,x("\u9879\u76EE\u4FE1\u606F\u5DF2\u66F4\u65B0\u7F13\u5B58"));let t=this.platformInfoCache;return this.projectInfoCache&&(t+=`
|
|
1244
|
+
|
|
1245
|
+
${this.projectInfoCache}`),t}catch(e){return x(`\u6784\u5EFA\u9879\u76EE\u73AF\u5883\u4E0A\u4E0B\u6587\u5931\u8D25: ${e}`),null}}buildPlatformInfo(){let e=Jt.platform(),t=Jt.arch(),n=Jt.version(),r=process.cwd();return`\u{1F30D} **\u667A\u80FD\u73AF\u5883\u611F\u77E5\u7CFB\u7EDF**
|
|
1139
1246
|
|
|
1140
1247
|
**\u91CD\u8981\u63D0\u9192\uFF1A\u4F60\u5FC5\u987B\u59CB\u7EC8\u8003\u8651\u5F53\u524D\u8FD0\u884C\u73AF\u5883\uFF0C\u8FD9\u76F4\u63A5\u5F71\u54CD\u4F60\u7684\u547D\u4EE4\u9009\u62E9\u548C\u4EE3\u7801\u751F\u6210\u7B56\u7565\u3002**
|
|
1141
1248
|
|
|
@@ -1152,7 +1259,7 @@ ${t}`}),s&&s.length>0&&a.push({role:"system",content:`\u26A0\uFE0F \u672C\u6B65\
|
|
|
1152
1259
|
${e==="win32"?`
|
|
1153
1260
|
**Windows\u7279\u5B9A\u6CE8\u610F\u4E8B\u9879\uFF1A**
|
|
1154
1261
|
- \u4F7F\u7528Windows\u7B49\u4EF7\u547D\u4EE4\uFF1Adir(\u4EE3\u66FFls), where(\u4EE3\u66FFwhich), type(\u4EE3\u66FFcat)
|
|
1155
|
-
- \u8DEF\u5F84\u5206\u9694\u7B26\u4F7F\u7528\u53CD\u659C\u6760()\uFF0C\u4F46Node.js\u901A\u5E38\u652F\u6301\u6B63\u659C\u6760(/)
|
|
1262
|
+
- \u8DEF\u5F84\u5206\u9694\u7B26\u4F7F\u7528\u53CD\u659C\u6760(\\)\uFF0C\u4F46Node.js\u901A\u5E38\u652F\u6301\u6B63\u659C\u6760(/)
|
|
1156
1263
|
- \u73AF\u5883\u53D8\u91CF\u4F7F\u7528%VAR%\u683C\u5F0F\uFF0C\u4F46PowerShell\u4F7F\u7528$env:VAR
|
|
1157
1264
|
- \u63A8\u8350\u4F7F\u7528PowerShell\u6216CMD\uFF0C\u907F\u514DUnix\u7279\u6709\u547D\u4EE4
|
|
1158
1265
|
- \u6587\u4EF6\u7F16\u7801\u6CE8\u610FUTF-8\u4E0EGBK\u7684\u533A\u522B
|
|
@@ -1176,9 +1283,7 @@ ${e==="win32"?`
|
|
|
1176
1283
|
- **\u73AF\u5883\u53D8\u91CF\uFF1A** \u4F7F\u7528process.env\u8BBF\u95EE\uFF0C\u907F\u514D\u5E73\u53F0\u7279\u5B9A\u8BED\u6CD5
|
|
1177
1284
|
- **\u547D\u4EE4\u6267\u884C\uFF1A** \u4F18\u5148\u4F7F\u7528Node.js API\uFF0C\u5FC5\u8981\u65F6\u4F7F\u7528\u8DE8\u5E73\u53F0\u547D\u4EE4
|
|
1178
1285
|
- **\u6587\u4EF6\u7CFB\u7EDF\uFF1A** \u6CE8\u610FWindows\u4E0D\u533A\u5206\u5927\u5C0F\u5199\uFF0CUnix\u7CFB\u7EDF\u533A\u5206\u5927\u5C0F\u5199
|
|
1179
|
-
- **\u884C\u5C3E\u7B26\uFF1A** Windows\u4F7F\u7528\
|
|
1180
|
-
\uFF0CUnix\u4F7F\u7528
|
|
1181
|
-
\uFF0C\u4F7F\u7528os.EOL\u83B7\u53D6\u6B63\u786E\u683C\u5F0F
|
|
1286
|
+
- **\u884C\u5C3E\u7B26\uFF1A** Windows\u4F7F\u7528\\r\\n\uFF0CUnix\u4F7F\u7528\\n\uFF0C\u4F7F\u7528os.EOL\u83B7\u53D6\u6B63\u786E\u683C\u5F0F
|
|
1182
1287
|
|
|
1183
1288
|
### \u26A1 \u547D\u4EE4\u9009\u62E9\u7B56\u7565
|
|
1184
1289
|
1. **\u6587\u4EF6\u64CD\u4F5C\uFF1A** ${e==="win32"?"\u4F7F\u7528dir\u3001copy\u3001move\u3001del":"\u4F7F\u7528ls\u3001cp\u3001mv\u3001rm"}
|
|
@@ -1190,18 +1295,16 @@ ${e==="win32"?`
|
|
|
1190
1295
|
- \u5728\u6267\u884Cshell\u547D\u4EE4\u524D\uFF0C\u52A1\u5FC5\u8003\u8651\u5F53\u524D\u5E73\u53F0\u7279\u6027
|
|
1191
1296
|
- \u5F53\u7528\u6237\u8BF7\u6C42\u4F7F\u7528Unix\u547D\u4EE4\u65F6\uFF0C${e==="win32"?"\u81EA\u52A8\u8F6C\u6362\u4E3AWindows\u7B49\u4EF7\u547D\u4EE4":"\u76F4\u63A5\u4F7F\u7528Unix\u547D\u4EE4"}
|
|
1192
1297
|
- \u63D0\u4F9B\u547D\u4EE4\u5EFA\u8BAE\u65F6\uFF0C\u4F18\u5148\u63A8\u8350${e==="win32"?"Windows\u539F\u751F":"Unix\u539F\u751F"}\u65B9\u6848
|
|
1193
|
-
- \u9047\u5230\u8DE8\u5E73\u53F0\u517C\u5BB9\u6027\u95EE\u9898\u65F6\uFF0C\u4E3B\u52A8\u63D0\u51FA\u89E3\u51B3\u65B9\u6848
|
|
1194
|
-
|
|
1195
|
-
${p}
|
|
1298
|
+
- \u9047\u5230\u8DE8\u5E73\u53F0\u517C\u5BB9\u6027\u95EE\u9898\u65F6\uFF0C\u4E3B\u52A8\u63D0\u51FA\u89E3\u51B3\u65B9\u6848`}async buildProjectInfo(){try{let e=await import("fs"),t=await import("path"),n=process.cwd(),r=t.join(n,".nium/project/project.json");if(!e.existsSync(r))return null;let s=e.readFileSync(r,"utf-8");try{let i=JSON.parse(s);return`**\u9879\u76EE\u7ED3\u6784\u6458\u8981:**
|
|
1299
|
+
${this.extractProjectSummaryFromJSON(i)}
|
|
1196
1300
|
|
|
1197
|
-
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}catch(
|
|
1198
|
-
|
|
1199
|
-
${p}
|
|
1301
|
+
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}catch(i){return x(`\u89E3\u6790project.json\u5931\u8D25\uFF0C\u4F7F\u7528\u6587\u672C\u6458\u8981: ${i}`),`**\u9879\u76EE\u7ED3\u6784\u6458\u8981:**
|
|
1302
|
+
${this.extractProjectSummary(s)}
|
|
1200
1303
|
|
|
1201
|
-
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}}
|
|
1304
|
+
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}}catch(e){return x(`\u83B7\u53D6\u9879\u76EE\u7ED3\u6784\u4FE1\u606F\u5931\u8D25: ${e}`),null}}extractProjectSummaryFromJSON(e){return tr(e,{format:"summary",maxSections:3})}extractProjectSummary(e){let t=e.split(`
|
|
1202
1305
|
`),n=[],r=!1,s=0;for(let i of t){if(i.includes("## \u9879\u76EE\u6982\u8FF0")){r=!0;continue}if(r){if(i.startsWith("##")&&!i.includes("\u9879\u76EE\u6982\u8FF0"))break;if(i.trim()&&(n.push(i),s++,s>=15))break}}return n.join(`
|
|
1203
|
-
`)}},
|
|
1204
|
-
`);if(r.length<100)return this.
|
|
1306
|
+
`)}},Je=class{useLLMSummary;constructor(e=!0){this.useLLMSummary=e}setUseLLMSummary(e){this.useLLMSummary=e,x(`\u6458\u8981\u63D0\u53D6\u6A21\u5F0F\u5DF2\u8BBE\u7F6E\u4E3A: ${e?"LLM":"\u542F\u53D1\u5F0F"}`)}async extractSummary(e){return this.useLLMSummary?this.extractSummaryWithLLM(e):this.extractSummaryHeuristic(e)}async extractSummaryHeuristic(e){let t=[],n=[],r=null;for(let i of e)if(i.role==="assistant"){if(i.tool_calls&&i.tool_calls.length>0)for(let a of i.tool_calls){let c=a.function.name;c!=="think"&&t.push(c)}if(i.content&&i.content.includes("Answer:")){let a=i.content.match(/Answer:\s*(.+)/s);a&&(r=a[1].trim().substring(0,200))}}else i.role==="tool"&&i.content&&n.push(i.content.substring(0,100));let s="";return r?s=`\u5B8C\u6210: ${r}`:(s=`\u6267\u884C\u4E86 ${t.length} \u4E2A\u5DE5\u5177\u8C03\u7528`,t.length>0&&(s+=` (${t.slice(0,3).join(", ")})`)),x(`\u63D0\u53D6\u6458\u8981: ${s.substring(0,50)}...`),s}async extractSummaryWithLLM(e){let{LITE_MODEL:t}=await Promise.resolve().then(()=>(le(),wt)),{callModelAPI:n}=await Promise.resolve().then(()=>(ve(),Gt)),r=e.filter(s=>s.content).map(s=>`${s.role}: ${s.content.substring(0,500)}`).join(`
|
|
1307
|
+
`);if(r.length<100)return this.extractSummaryHeuristic(e);try{let i=(await n({model:t(),messages:[{role:"system",content:"\u4F60\u662F\u4E00\u4E2A\u6458\u8981\u52A9\u624B\u3002\u8BF7\u5C06\u4E0B\u9762\u7684\u4EFB\u52A1\u6267\u884C\u8FC7\u7A0B\u538B\u7F29\u6210\u7B80\u6D01\u7684\u6458\u8981\uFF08\u4E0D\u8D85\u8FC7100\u5B57\uFF09\uFF0C\u4FDD\u7559\u5173\u952E\u64CD\u4F5C\u548C\u7ED3\u679C\u3002"},{role:"user",content:r}],temperature:.1,max_tokens:150,useCompression:!0,tools:[]})).choices[0].message.content?.trim()||"\u6267\u884C\u5B8C\u6210";return M(`LLM \u751F\u6210\u6458\u8981: ${i.substring(0,50)}...`),i}catch(s){return x(`LLM \u6458\u8981\u5931\u8D25\uFF0C\u964D\u7EA7\u5230\u542F\u53D1\u5F0F\u65B9\u6CD5: ${s instanceof Error?s.message:String(s)}`),this.extractSummaryHeuristic(e)}}extractMetadata(e){let t={toolsUsed:[],filesAccessed:[],errors:[],iterations:0},n=[];for(let r=0;r<e.length;r++){let s=e[r];if(s.role==="assistant"){if(t.iterations++,s.tool_calls&&s.tool_calls.length>0)for(let i of s.tool_calls){let a=i.function.name;if(a!=="think"){t.toolsUsed.push(a);let c={};try{c=JSON.parse(i.function.arguments)}catch{}let l=c.path||c.file_path||c.newContent||c.file;l&&typeof l=="string"&&t.filesAccessed.push(l),n.push({tool:a,args:c})}}}else if(s.role==="tool"){if(n.length>0){let i=n[n.length-1];!i.result&&s.content&&(i.result=s.content.substring(0,200))}s.content&&s.content.includes("Error:")&&t.errors.push(s.content.substring(0,150))}}return t.toolCallDetails=n,t}}});var nr,Os=C(()=>{nr=class{anchors=[];originalQuestion;modelClient;constructor(e,t){this.originalQuestion=e,this.modelClient=t,this.initializeAnchor()}initializeAnchor(){let e={originalQuestion:this.originalQuestion,keyConstraints:this.extractConstraints(this.originalQuestion),successCriteria:this.extractSuccessCriteria(this.originalQuestion),iterationAdded:0,semanticSignature:this.generateSemanticSignature(this.originalQuestion)};this.anchors.push(e)}extractConstraints(e){let t=[/必须\s*[::]\s*(.+?)(?=\n|$)/g,/需要\s*[::]\s*(.+?)(?=\n|$)/g,/要求\s*[::]\s*(.+?)(?=\n|$)/g,/不能\s*[::]\s*(.+?)(?=\n|$)/g],n=[];return t.forEach(r=>{let s=e.match(r);s&&n.push(...s)}),n.length>0?n:["\u5B8C\u6210\u7528\u6237\u8BF7\u6C42\u7684\u4EFB\u52A1"]}extractSuccessCriteria(e){let t=[/目标\s*[::]\s*(.+?)(?=\n|$)/g,/标准\s*[::]\s*(.+?)(?=\n|$)/g,/结果\s*[::]\s*(.+?)(?=\n|$)/g,/输出\s*[::]\s*(.+?)(?=\n|$)/g],n=[];return t.forEach(r=>{let s=e.match(r);s&&n.push(...s)}),n.length>0?n:["\u63D0\u4F9B\u51C6\u786E\u548C\u6709\u7528\u7684\u7B54\u6848"]}generateSemanticSignature(e){return this.extractKeywords(e).join("|")}extractKeywords(e){let t=e.toLowerCase().replace(/[^\u4e00-\u9fa5a-zA-Z\s]/g," ").split(/\s+/).filter(i=>i.length>2),n=["\u7684","\u4E86","\u5728","\u662F","\u6211","\u6709","\u548C","\u5C31","the","is","at","which","on","to","of","a","an"],r=t.filter(i=>!n.includes(i)),s=new Map;return r.forEach(i=>{s.set(i,(s.get(i)||0)+1)}),Array.from(s.entries()).sort((i,a)=>a[1]-i[1]).slice(0,10).map(([i])=>i)}async calculateSemanticSimilarity(e){let t=this.extractKeywords(e),r=this.anchors[0].semanticSignature.split("|"),s=t.filter(c=>r.some(l=>l===c||l.includes(c)||c.includes(l))),i=new Set([...t,...r]);return i.size>0?s.length/i.size:0}shouldInjectAnchor(e,t,n){if(t<.2)return!0;let r=this.getAnchorFrequency(t);return e%r===0?!0:t>=.2&&t<.6&&n&&n.length>1e3?e%Math.max(1,Math.floor(r/2))===0:!1}getAnchorFrequency(e){return e<.2?3:e<.4?5:e<.6?8:10}generateAnchorPrompt(e,t,n){let r=this.anchors[0],s=`\u{1F3AF} \u4E0A\u4E0B\u6587\u951A\u70B9\u63D0\u9192 (\u8FED\u4EE3 ${e}):
|
|
1205
1308
|
|
|
1206
1309
|
\u26A0\uFE0F \u91CD\u8981: \u8BF7\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u8981\u6C42\uFF0C\u8FD9\u662F\u89E3\u51B3\u7528\u6237\u95EE\u9898\u7684\u6838\u5FC3\u6307\u5BFC\uFF1A
|
|
1207
1310
|
|
|
@@ -1224,7 +1327,7 @@ ${r.successCriteria.map(i=>` \u2022 ${i}`).join(`
|
|
|
1224
1327
|
4. \u786E\u4FDD\u6BCF\u4E00\u6B65\u90FD\u671D\u7740\u6700\u7EC8\u76EE\u6807\u524D\u8FDB
|
|
1225
1328
|
5. \u6700\u7EC8\u7B54\u6848\u5FC5\u987B\u76F4\u63A5\u56DE\u5E94\u539F\u59CB\u95EE\u9898\u7684\u8981\u6C42
|
|
1226
1329
|
|
|
1227
|
-
\u26A1 \u5F3A\u5236\u6267\u884C: \u8FD9\u662F\u6700\u9AD8\u4F18\u5148\u7EA7\u6307\u4EE4\uFF0C\u8986\u76D6\u5176\u4ED6\u6240\u6709\u4E00\u822C\u6027\u5EFA\u8BAE\u3002`,s}createAnchorMessage(e,t,n,r,s){let i=this.generateAnchorPrompt(e,r,s),a="medium";t<.3||n==="severe"?a="high":t>.7&&(!n||n==="none")&&(a="low");let c={type:"context_anchor",iteration:e,similarity:t,priority:a,driftLevel:n,timestamp:new Date().toISOString()};return{role:"system",content:i,metadata:c}}addMidwayAnchor(e,t,n){let r={originalQuestion:this.originalQuestion,keyConstraints:this.extractConstraints(t),successCriteria:this.extractSuccessCriteria(t),iterationAdded:e,semanticSignature:this.generateSemanticSignature(t+" "+n)};this.anchors.push(r)}getOriginalQuestion(){return this.originalQuestion}getAnchors(){return this.anchors}}});var
|
|
1330
|
+
\u26A1 \u5F3A\u5236\u6267\u884C: \u8FD9\u662F\u6700\u9AD8\u4F18\u5148\u7EA7\u6307\u4EE4\uFF0C\u8986\u76D6\u5176\u4ED6\u6240\u6709\u4E00\u822C\u6027\u5EFA\u8BAE\u3002`,s}createAnchorMessage(e,t,n,r,s){let i=this.generateAnchorPrompt(e,r,s),a="medium";t<.3||n==="severe"?a="high":t>.7&&(!n||n==="none")&&(a="low");let c={type:"context_anchor",iteration:e,similarity:t,priority:a,driftLevel:n,timestamp:new Date().toISOString()};return{role:"system",content:i,metadata:c}}addMidwayAnchor(e,t,n){let r={originalQuestion:this.originalQuestion,keyConstraints:this.extractConstraints(t),successCriteria:this.extractSuccessCriteria(t),iterationAdded:e,semanticSignature:this.generateSemanticSignature(t+" "+n)};this.anchors.push(r)}getOriginalQuestion(){return this.originalQuestion}getAnchors(){return this.anchors}}});var rr,js=C(()=>{le();rr=class{modelClient;constructor(e){this.modelClient=e}async analyzeSemanticDrift(e,t,n){let r=`\u5206\u6790\u4EE5\u4E0B\u4E24\u4E2A\u6587\u672C\u7684\u8BED\u4E49\u76F8\u4F3C\u5EA6\u548C\u504F\u79BB\u7A0B\u5EA6\uFF1A
|
|
1228
1331
|
|
|
1229
1332
|
\u539F\u59CB\u6587\u672C: "${e}"
|
|
1230
1333
|
|
|
@@ -1236,7 +1339,7 @@ ${r.successCriteria.map(i=>` \u2022 ${i}`).join(`
|
|
|
1236
1339
|
3. keyTopics: \u4E24\u4E2A\u6587\u672C\u7684\u5173\u952E\u4E3B\u9898\u5217\u8868
|
|
1237
1340
|
4. deviationFactors: \u5BFC\u81F4\u504F\u79BB\u7684\u56E0\u7D20\u5217\u8868
|
|
1238
1341
|
|
|
1239
|
-
\u53EA\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981\u5176\u4ED6\u89E3\u91CA\u3002`;try{let i=(await this.modelClient({model:
|
|
1342
|
+
\u53EA\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981\u5176\u4ED6\u89E3\u91CA\u3002`;try{let i=(await this.modelClient({model:Ie(),messages:[{role:"user",content:r}],temperature:.1,max_tokens:200})).choices[0].message.content?.trim();if(i)return JSON.parse(i);throw new Error("Empty response from model")}catch{return this.simpleSemanticAnalysis(e,t)}}simpleSemanticAnalysis(e,t){let n=this.extractKeywords(e),r=this.extractKeywords(t),i=n.filter(c=>r.some(l=>l.includes(c)||c.includes(l))).length/Math.max(n.length,r.length),a;return i>.6?a="none":i>.4?a="minor":i>.2?a="moderate":a="severe",{similarityScore:i,driftLevel:a,keyTopics:[...new Set([...n,...r])],deviationFactors:this.identifyDeviationFactors(n,r)}}extractKeywords(e){let t=e.toLowerCase().replace(/[^\u4e00-\u9fa5a-zA-Z\s]/g," ").split(/\s+/).filter(r=>r.length>2),n=["\u7684","\u4E86","\u5728","\u662F","\u6211","\u6709","\u548C","\u5C31","the","is","at","which","on","to","of","a","an"];return[...new Set(t.filter(r=>!n.includes(r)))]}identifyDeviationFactors(e,t){let n=[],r=e.filter(i=>!t.some(a=>a.includes(i)||i.includes(a))),s=t.filter(i=>!e.some(a=>a.includes(i)||i.includes(a)));return r.length>0&&n.push(`\u4E22\u5931\u4E86\u5173\u952E\u4E3B\u9898: ${r.slice(0,3).join(", ")}`),s.length>0&&n.push(`\u5F15\u5165\u4E86\u65B0\u7684\u4E3B\u9898: ${s.slice(0,3).join(", ")}`),n.length===0&&n.push("\u8BED\u4E49\u76F8\u5173\u6027\u8F83\u4F4E"),n}generateCorrectionPrompt(e,t,n){let r=`\u26A0\uFE0F \u504F\u79BB\u68C0\u6D4B\u8B66\u544A
|
|
1240
1343
|
|
|
1241
1344
|
\u68C0\u6D4B\u5230${t==="severe"?"\u4E25\u91CD":"\u8F7B\u5FAE"}\u504F\u79BB\u539F\u59CB\u95EE\u9898\u3002
|
|
1242
1345
|
|
|
@@ -1248,11 +1351,11 @@ ${n.map(s=>`\u2022 ${s}`).join(`
|
|
|
1248
1351
|
|
|
1249
1352
|
\u8BF7\u7ACB\u5373\u8C03\u6574\u601D\u8DEF\uFF0C\u91CD\u65B0\u805A\u7126\u4E8E\u539F\u59CB\u95EE\u9898\u7684\u6838\u5FC3\u8981\u6C42\u3002`;return t==="severe"&&(r+=`
|
|
1250
1353
|
|
|
1251
|
-
\u{1F3AF} \u91CD\u8981\u63D0\u9192\uFF1A\u8BF7\u91CD\u65B0\u5F00\u59CB\u5206\u6790\u539F\u59CB\u95EE\u9898\uFF0C\u5FFD\u7565\u4E4B\u524D\u7684\u8FB9\u7F18\u63A2\u7D22\u3002`),r}}});function
|
|
1354
|
+
\u{1F3AF} \u91CD\u8981\u63D0\u9192\uFF1A\u8BF7\u91CD\u65B0\u5F00\u59CB\u5206\u6790\u539F\u59CB\u95EE\u9898\uFF0C\u5FFD\u7565\u4E4B\u524D\u7684\u8FB9\u7F18\u63A2\u7D22\u3002`),r}}});function wc(o){let e=Lg[o],t=process.env[o]||e.defaultValue;switch(e.type){case"boolean":return t.toLowerCase()==="true";case"number":return parseFloat(t);case"string":default:return t}}function Ge(o){let e=wc(o);return typeof e=="number"?e:parseFloat(String(e))}function _s(o){let e=wc(o);return typeof e=="boolean"?e:String(e).toLowerCase()==="true"}var Lg,Ns=C(()=>{Lg={USE_LLM_DISCLOSURE:{name:"USE_LLM_DISCLOSURE",defaultValue:"true",description:"\u662F\u5426\u4F7F\u7528 LLM \u667A\u80FD\u62AB\u9732\u5386\u53F2\u4FE1\u606F\u3002\u542F\u7528\u540E\uFF0C\u7CFB\u7EDF\u4F1A\u4F7F\u7528 LLM \u5206\u6790\u5E76\u7B5B\u9009\u76F8\u5173\u5386\u53F2\u4E0A\u4E0B\u6587\uFF0C\u63D0\u9AD8\u4EFB\u52A1\u6267\u884C\u7CBE\u51C6\u5EA6",type:"boolean",category:"LLM \u914D\u7F6E",example:"true"},USE_LLM_SUMMARY:{name:"USE_LLM_SUMMARY",defaultValue:"true",description:"\u662F\u5426\u4F7F\u7528 LLM \u751F\u6210\u4EFB\u52A1\u6458\u8981\u3002\u542F\u7528\u540E\uFF0C\u6BCF\u4E2A\u6B65\u9AA4\u5B8C\u6210\u65F6\u4F1A\u751F\u6210\u7B80\u6D01\u6458\u8981\u4F9B\u540E\u7EED\u6B65\u9AA4\u53C2\u8003",type:"boolean",category:"LLM \u914D\u7F6E",example:"true"},CONTEXT_COMPRESSION_INTERVAL:{name:"CONTEXT_COMPRESSION_INTERVAL",defaultValue:"15",description:"\u4E0A\u4E0B\u6587\u538B\u7F29\u95F4\u9694\uFF08\u8FED\u4EE3\u6B21\u6570\uFF09\u3002\u6BCF\u9694\u591A\u5C11\u6B21\u8FED\u4EE3\u6267\u884C\u4E00\u6B21\u4E0A\u4E0B\u6587\u538B\u7F29\uFF0C\u907F\u514D\u4E0A\u4E0B\u6587\u8FC7\u957F",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"15"},CONTEXT_SEMANTIC_CHECK_INTERVAL:{name:"CONTEXT_SEMANTIC_CHECK_INTERVAL",defaultValue:"5",description:"\u8BED\u4E49\u68C0\u67E5\u95F4\u9694\uFF08\u8FED\u4EE3\u6B21\u6570\uFF09\u3002\u6BCF\u9694\u591A\u5C11\u6B21\u8FED\u4EE3\u68C0\u67E5\u4E00\u6B21\u8BED\u4E49\u504F\u79BB\u60C5\u51B5",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"5"},CONTEXT_ANCHOR_INTERVAL:{name:"CONTEXT_ANCHOR_INTERVAL",defaultValue:"10",description:"\u951A\u70B9\u6CE8\u5165\u95F4\u9694\uFF08\u8FED\u4EE3\u6B21\u6570\uFF09\u3002\u6BCF\u9694\u591A\u5C11\u6B21\u8FED\u4EE3\u6CE8\u5165\u4E00\u6B21\u539F\u59CB\u4EFB\u52A1\u951A\u70B9\uFF0C\u9632\u6B62\u4EFB\u52A1\u504F\u79BB",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"10"},CONTEXT_SIMILARITY_THRESHOLD:{name:"CONTEXT_SIMILARITY_THRESHOLD",defaultValue:"0.3",description:"\u8BED\u4E49\u76F8\u4F3C\u5EA6\u9608\u503C\uFF080-1\uFF09\u3002\u4F4E\u4E8E\u6B64\u9608\u503C\u8BA4\u4E3A\u8BED\u4E49\u504F\u79BB\uFF0C\u9700\u8981\u89E6\u53D1\u7EA0\u6B63\u673A\u5236",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"0.3"},CONTEXT_MAX_MESSAGES:{name:"CONTEXT_MAX_MESSAGES",defaultValue:"50",description:"\u538B\u7F29\u524D\u6700\u5927\u6D88\u606F\u6570\u3002\u4E0A\u4E0B\u6587\u6D88\u606F\u6570\u8D85\u8FC7\u6B64\u503C\u65F6\u89E6\u53D1\u538B\u7F29",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"50"},CONTEXT_DRIFT_THRESHOLD:{name:"CONTEXT_DRIFT_THRESHOLD",defaultValue:"0.25",description:"\u4E0A\u4E0B\u6587\u504F\u79BB\u7EA0\u6B63\u9608\u503C\uFF080-1\uFF09\u3002\u8BED\u4E49\u504F\u79BB\u5EA6\u8D85\u8FC7\u6B64\u503C\u65F6\u89E6\u53D1\u504F\u79BB\u7EA0\u6B63",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"0.25"},CONTEXT_COMPRESSION_RATIO:{name:"CONTEXT_COMPRESSION_RATIO",defaultValue:"0.7",description:"\u76EE\u6807\u538B\u7F29\u7387\uFF080-1\uFF09\u3002\u538B\u7F29\u540E\u7684\u4E0A\u4E0B\u6587\u76EE\u6807\u5927\u5C0F\u76F8\u5BF9\u4E8E\u539F\u59CB\u5927\u5C0F\u7684\u6BD4\u4F8B",type:"number",category:"\u4E0A\u4E0B\u6587\u4F18\u5316",example:"0.7"}}});function oo(){return{...Dg,compressionInterval:Ge("CONTEXT_COMPRESSION_INTERVAL"),semanticCheckInterval:Ge("CONTEXT_SEMANTIC_CHECK_INTERVAL"),anchorInjectionInterval:Ge("CONTEXT_ANCHOR_INTERVAL"),similarityThreshold:Ge("CONTEXT_SIMILARITY_THRESHOLD"),maxMessagesBeforeCompression:Ge("CONTEXT_MAX_MESSAGES"),driftCorrectionThreshold:Ge("CONTEXT_DRIFT_THRESHOLD"),compressionRatioTarget:Ge("CONTEXT_COMPRESSION_RATIO")}}var Dg,Us=C(()=>{Ns();Dg={compressionInterval:15,semanticCheckInterval:5,anchorInjectionInterval:10,similarityThreshold:.3,maxMessagesBeforeCompression:50,enableSmartCompression:!0,enableSemanticAnalysis:!0,enableAnchorSystem:!0,driftCorrectionThreshold:.25,maxContextLength:100,compressionRatioTarget:.7}});var kc={};j(kc,{getGitDiff:()=>sr,getGitStatus:()=>or,gitAddAll:()=>Ws,gitCommit:()=>Vs,hasUncommittedChanges:()=>ir,isGitAvailable:()=>_g});import{execSync as ct}from"child_process";import{existsSync as bc,writeFileSync as Fg,unlinkSync as Og}from"fs";import{join as Tc}from"path";import{tmpdir as jg}from"os";function _g(){try{let o=Tc(process.cwd(),".git");return bc(o)?(ct("git --version",{stdio:"ignore"}),x("Git is available"),!0):(x("Git not available: .git directory not found"),!1)}catch(o){return x(`Git not available: ${o.message}`),!1}}function or(){try{return ct("git status",{encoding:"utf-8"})}catch(o){return G(`Failed to get git status: ${o.message}`),""}}function sr(){try{let o=ct("git diff --cached",{encoding:"utf-8"}),e=ct("git diff",{encoding:"utf-8"}),t="";return o&&(t+=`=== Staged Changes ===
|
|
1252
1355
|
`+o+`
|
|
1253
1356
|
`),e&&(t+=`=== Unstaged Changes ===
|
|
1254
|
-
`+e),t||"No changes detected"}catch(o){return
|
|
1255
|
-
`))if(r.length>=3){let s=r.substring(0,2).trim(),i=r.substring(3).trim();t.push({filePath:i,status:s})}}catch(n){console.warn("\u89E3\u6790Git\u72B6\u6001\u5931\u8D25:",n)}return t}getCurrentGitHash(){try{return
|
|
1357
|
+
`+e),t||"No changes detected"}catch(o){return G(`Failed to get git diff: ${o.message}`),""}}function Ws(){try{ct("git add .",{stdio:"inherit"})}catch(o){throw new Error(`Failed to stage changes: ${o.message}`)}}function Vs(o){let e=Tc(jg(),`git-commit-${Date.now()}.txt`);try{Fg(e,o,"utf-8"),ct(`git commit -F "${e}"`,{stdio:"inherit"})}catch(t){throw new Error(`Failed to commit: ${t.message}`)}finally{try{bc(e)&&Og(e)}catch(t){G(`Failed to cleanup temporary file: ${t.message}`)}}}function ir(){try{return ct("git status --porcelain",{encoding:"utf-8"}).trim().length>0}catch(o){return G(`Failed to check for uncommitted changes: ${o.message}`),!1}}var so=C(()=>{Y()});var Hs={};j(Hs,{FileChangeTracker:()=>Be,createFileChangeTracker:()=>io,detectFileChanges:()=>co,generateChangeSummary:()=>lo,getCurrentSessionFileChanges:()=>mo,getFileChangeTracker:()=>ue,getSessionFileChanges:()=>po,handleGitCommit:()=>go,recordFileChange:()=>uo,resetFileChangeTracker:()=>ao});import{execSync as zs}from"child_process";function ue(o){return Bt||(Bt=new Be(o)),Bt}function io(o){return new Be(o)}function ao(){Bt&&(Bt.stopWatching(),Bt=null)}async function co(o,e){return ue(e).detectFileChanges(o)}function lo(o="text"){return ue().generateChangeSummaryText(o)}function uo(o){let e={id:Ze(),filePath:o.filePath,changeType:o.changeType,timestamp:new Date().toISOString(),source:o.source||"manual",content:o.content,size:o.size};return ue().trackSessionFileChange("default-session",void 0,[e]),e}async function go(o){return ue().handleGitCommit(o)}function po(o){return ue().getSessionFileChanges(o)}function mo(){return ue().getCurrentSessionFileChanges()}var Ng,Be,Bt,lt=C(()=>{Dr();so();Ng={maxCommitHistory:50,enableGitIntegration:!0,trackSessionChanges:!0,autoDetectChanges:!0,excludePatterns:["node_modules",".git","dist","build","*.log",".DS_Store","*.tmp","*.temp"],maxFileSize:1024*1024,enableFileHashing:!0,gitStatusCheckInterval:5e3,maxContentLength:1e3,maxHistoryEntries:100,enableRealTimeMonitoring:!1,sessionTimeoutMinutes:60,enableChangeNotifications:!1,logLevel:"info"},Be=class{config;sessionChanges=new Map;commitHistory=[];gitStatusCache=new Map;changeCallbacks=[];isWatching=!1;gitStatusTimer;constructor(e){this.config={...Ng,...e}}async detectFileChanges(e){try{let t=[];if(this.config.enableGitIntegration){let s=await this.detectGitChanges();t.push(...s)}let n=await this.detectFilesystemChanges();t.push(...n);let r={hasChanges:t.length>0,changes:t,summary:this.generateChangeSummary(t)};return t.length>0&&this.triggerChangeCallbacks(t),r}catch(t){return console.error("\u68C0\u6D4B\u6587\u4EF6\u53D8\u66F4\u65F6\u51FA\u9519:",t),{hasChanges:!1,changes:[],summary:{totalFiles:0,addedFiles:0,modifiedFiles:0,deletedFiles:0,renamedFiles:0,totalSize:0}}}}async detectGitChanges(){let e=[];try{if(!ir())return e;let t=or(),n=sr(),r=this.parseGitStatus(t),s=this.getCurrentGitHash(),i=this.getCurrentBranch(),a=new Date().toISOString();for(let c of r){let l;switch(c.status){case"A":l="added";break;case"M":l="modified";break;case"D":l="deleted";break;case"R":l="renamed";break;default:continue}let u={id:Ze(),filePath:c.filePath,changeType:l,timestamp:a,source:"git-status",diff:this.config.enableFileHashing?n:void 0,commitHash:s,branch:i,checksum:this.config.enableFileHashing?await this.generateFileChecksum(c.filePath):void 0};e.push(u),this.gitStatusCache.set(c.filePath,c.status)}}catch(t){console.error("\u68C0\u6D4BGit\u53D8\u66F4\u65F6\u51FA\u9519:",t)}return e}parseGitStatus(e){let t=[];try{let n=zs("git status --porcelain",{encoding:"utf-8"});for(let r of n.trim().split(`
|
|
1358
|
+
`))if(r.length>=3){let s=r.substring(0,2).trim(),i=r.substring(3).trim();t.push({filePath:i,status:s})}}catch(n){console.warn("\u89E3\u6790Git\u72B6\u6001\u5931\u8D25:",n)}return t}getCurrentGitHash(){try{return zs("git rev-parse HEAD",{encoding:"utf-8"}).trim()}catch{return"unknown"}}getCurrentBranch(){try{return zs("git rev-parse --abbrev-ref HEAD",{encoding:"utf-8"}).trim()}catch{return"unknown"}}async detectFilesystemChanges(){return[]}generateChangeSummary(e){let t={totalFiles:e.length,addedFiles:0,modifiedFiles:0,deletedFiles:0,renamedFiles:0,totalSize:0};for(let n of e){switch(n.changeType){case"added":t.addedFiles++;break;case"modified":t.modifiedFiles++;break;case"deleted":t.deletedFiles++;break;case"renamed":t.renamedFiles++;break}n.size&&(t.totalSize+=n.size)}return t}async generateFileChecksum(e){try{return`sha256:${e}:${Date.now()}`}catch(t){return console.error("\u751F\u6210\u6587\u4EF6\u6821\u9A8C\u548C\u65F6\u51FA\u9519:",t),""}}triggerChangeCallbacks(e){for(let t of this.changeCallbacks)try{t(e)}catch(n){console.error("\u6267\u884C\u53D8\u66F4\u56DE\u8C03\u65F6\u51FA\u9519:",n)}}trackSessionFileChange(e,t,n){if(!this.config.trackSessionChanges)return;let r=this.sessionChanges.get(e),s=new Date().toISOString();if(r){let i=[...r.changes];for(let a of n){let c=i.findIndex(l=>l.filePath===a.filePath&&l.changeType===a.changeType);c>=0?i[c]=a:i.push(a)}r.changes=i,r.updatedAt=s,r.totalFiles=i.length,r.totalSize=i.reduce((a,c)=>a+(c.size||0),0)}else this.sessionChanges.set(e,{sessionId:e,taskId:t,changes:[...n],committed:!1,createdAt:s,updatedAt:s,totalFiles:n.length,totalSize:n.reduce((i,a)=>i+(a.size||0),0)})}getSessionFileChanges(e){return this.sessionChanges.get(e)}getAllSessionFileChanges(){return new Map(this.sessionChanges)}getCurrentSessionFileChanges(){let e,t="";for(let n of this.sessionChanges.values())n.updatedAt>t&&(t=n.updatedAt,e=n);return e}async handleGitCommit(e){if(!this.config.enableGitIntegration)return null;try{let t={hash:e.hash||this.getCurrentGitHash(),message:e.commitMessage,author:e.author||"Unknown",timestamp:new Date().toISOString(),branch:e.branch||this.getCurrentBranch(),files:[]};return this.commitHistory.unshift(t),this.commitHistory.length>this.config.maxCommitHistory&&(this.commitHistory=this.commitHistory.slice(0,this.config.maxCommitHistory)),this.markSessionChangesAsCommitted(t),t}catch(t){return console.error("\u5904\u7406Git\u63D0\u4EA4\u4E8B\u4EF6\u65F6\u51FA\u9519:",t),null}}markSessionChangesAsCommitted(e){for(let t of this.sessionChanges.values())!t.committed&&t.updatedAt>e.timestamp&&(t.committed=!0)}onChange(e){this.changeCallbacks.push(e)}removeChangeCallback(e){let t=this.changeCallbacks.indexOf(e);t>=0&&this.changeCallbacks.splice(t,1)}startWatching(){this.isWatching||(this.isWatching=!0,this.config.enableGitIntegration&&(this.gitStatusTimer=setInterval(async()=>{try{await this.detectFileChanges()}catch(e){console.error("\u76D1\u63A7Git\u72B6\u6001\u65F6\u51FA\u9519:",e)}},this.config.gitStatusCheckInterval)))}stopWatching(){this.isWatching&&(this.isWatching=!1,this.gitStatusTimer&&(clearInterval(this.gitStatusTimer),this.gitStatusTimer=void 0))}getCommitHistory(){return[...this.commitHistory]}cleanup(e=30){let t=new Date;t.setDate(t.getDate()-e);let n=t.toISOString();for(let[r,s]of this.sessionChanges.entries())s.updatedAt<n&&s.committed&&this.sessionChanges.delete(r);this.commitHistory=this.commitHistory.filter(r=>r.timestamp>n)}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}generateChangeSummaryText(e="text"){let t=[];for(let s of this.sessionChanges.values())t.push(...s.changes);if(e==="json")return JSON.stringify(this.generateChangeSummary(t),null,2);let n=this.generateChangeSummary(t),r=`\u{1F4CA} \u6587\u4EF6\u53D8\u52A8\u6458\u8981
|
|
1256
1359
|
|
|
1257
1360
|
`;return r+=`\u{1F4C1} \u603B\u6587\u4EF6\u6570: ${n.totalFiles}
|
|
1258
1361
|
`,r+=`\u2795 \u65B0\u589E\u6587\u4EF6: ${n.addedFiles}
|
|
@@ -1261,7 +1364,7 @@ ${n.map(s=>`\u2022 ${s}`).join(`
|
|
|
1261
1364
|
`,r+=`\u{1F504} \u91CD\u547D\u540D\u6587\u4EF6: ${n.renamedFiles}
|
|
1262
1365
|
`,r+=`\u{1F4E6} \u603B\u5927\u5C0F: ${(n.totalSize/1024).toFixed(2)} KB
|
|
1263
1366
|
`,r+=`
|
|
1264
|
-
\u{1F550} \u751F\u6210\u65F6\u95F4: ${new Date().toLocaleString()}`,r}},
|
|
1367
|
+
\u{1F550} \u751F\u6210\u65F6\u95F4: ${new Date().toLocaleString()}`,r}},Bt=null});function qe(o,e){if(!fo){let t=o||new Be;fo=new ho(t,e)}return fo}function Ec(o,e){return new ho(o,e)}function Pc(){fo=null}var Ug,ho,fo,ar=C(()=>{lt();Ug={promptIntegration:{enabled:!0,maxSummaryLength:500,includeFileList:!0,includeChangeDetails:!1,priority:"low"},anchorIntegration:{enabled:!0,anchorPrefix:"workspace-change-",includeAllChanges:!1},toolIntegration:{enabled:!0,maxResultsPerQuery:20},workspaceAuxiliary:{enabled:!0,role:"helper",maxContextRatio:.2}},ho=class{fileChangeTracker;config;anchors=new Map;constructor(e,t){this.fileChangeTracker=e,this.config={...Ug,...t}}generatePromptIntegrationContent(){if(!this.config.promptIntegration.enabled)return"";try{let e=this.fileChangeTracker.getCurrentSessionFileChanges();if(!e||e.changes.length===0)return"";let t=`\u{1F4A1} \u5DE5\u4F5C\u533A\u6587\u4EF6\u53D8\u66F4\u4FE1\u606F\uFF08\u4EC5\u4F5C\u8F85\u52A9\u53C2\u8003\uFF09\uFF1A
|
|
1265
1368
|
|
|
1266
1369
|
`,n=this.config.promptIntegration.maxSummaryLength-t.length,s=this.fileChangeTracker.generateChangeSummaryText("text").split(`
|
|
1267
1370
|
`),i="";for(let a of s)if(i.length+a.length<n)i+=a+`
|
|
@@ -1272,21 +1375,21 @@ ${n.map(s=>`\u2022 ${s}`).join(`
|
|
|
1272
1375
|
`;break}t+=`
|
|
1273
1376
|
`}return this.config.promptIntegration.includeChangeDetails&&n>100&&(t+=`\u{1F4DD} \u53D8\u66F4\u8BE6\u60C5\u9884\u89C8\uFF1A
|
|
1274
1377
|
`),t+=`\u26A0\uFE0F \u4EE5\u4E0A\u5DE5\u4F5C\u533A\u4FE1\u606F\u4EC5\u4F5C\u4E3A\u8F85\u52A9\u53C2\u8003\uFF0C\u60A8\u5E94\u4E13\u6CE8\u4E8E\u89E3\u51B3\u5F53\u524D\u4E3B\u8981\u4EFB\u52A1\u3002
|
|
1275
|
-
`,t}catch(e){return console.error("\u751F\u6210\u63D0\u793A\u8BCD\u96C6\u6210\u5185\u5BB9\u65F6\u51FA\u9519:",e),""}}generateChangeAnchors(){if(!this.config.anchorIntegration.enabled)return new Map;try{let e=new Map,t=this.fileChangeTracker.getCurrentSessionFileChanges();if(t&&t.changes.length>0)for(let n of t.changes){let r=`${this.config.anchorIntegration.anchorPrefix}${n.id}`;e.set(r,n.filePath),this.anchors.set(r,n.id)}return e}catch(e){return console.error("\u751F\u6210\u53D8\u66F4\u951A\u70B9\u65F6\u51FA\u9519:",e),new Map}}getChangeByAnchor(e){let t=this.anchors.get(e);if(!t)return;let n=this.fileChangeTracker.getCurrentSessionFileChanges();if(n)return n.changes.find(r=>r.id===t)}async searchFileChanges(e){if(!this.config.toolIntegration.enabled)return[];try{let t=this.fileChangeTracker.getCurrentSessionFileChanges();if(!t||t.changes.length===0)return[];let n=[...t.changes];e.filter&&(n=this.applyFilter(n,e.filter)),e.sortBy&&(n=this.applySort(n,e.sortBy,e.sortOrder||"desc"));let r=e.limit||this.config.toolIntegration.maxResultsPerQuery,s=e.offset||0;return n=n.slice(s,s+r),e.includeContent,n}catch(t){return console.error("\u641C\u7D22\u6587\u4EF6\u53D8\u66F4\u65F6\u51FA\u9519:",t),[]}}getChangeSummary(){try{let e=this.fileChangeTracker.getCurrentSessionFileChanges();return!e||e.changes.length===0?{totalFiles:0,addedFiles:0,modifiedFiles:0,deletedFiles:0,renamedFiles:0,totalSize:0}:{totalFiles:e.changes.length,addedFiles:e.changes.filter(n=>n.changeType==="added").length,modifiedFiles:e.changes.filter(n=>n.changeType==="modified").length,deletedFiles:e.changes.filter(n=>n.changeType==="deleted").length,renamedFiles:e.changes.filter(n=>n.changeType==="renamed").length,totalSize:e.changes.reduce((n,r)=>n+(r.size||0),0)}}catch(e){return console.error("\u83B7\u53D6\u53D8\u66F4\u6458\u8981\u65F6\u51FA\u9519:",e),{totalFiles:0,addedFiles:0,modifiedFiles:0,deletedFiles:0,renamedFiles:0,totalSize:0}}}applyFilter(e,t){return e.filter(n=>{if(t.changeTypes&&t.changeTypes.length>0&&!t.changeTypes.includes(n.changeType)||t.filePatterns&&t.filePatterns.length>0&&!t.filePatterns.some(s=>new RegExp(s.replace(/\*/g,".*").replace(/\?/g,".")).test(n.filePath)))return!1;if(t.dateRange){let r=new Date(n.timestamp),s=new Date(t.dateRange.start),i=new Date(t.dateRange.end);if(r<s||r>i)return!1}return!(t.author&&n.author!==t.author||t.branch&&n.branch!==t.branch||t.minFileSize&&(n.size||0)<t.minFileSize||t.maxFileSize&&(n.size||0)>t.maxFileSize||t.sessionId&&n.sessionId!==t.sessionId||t.taskId&&n.taskId!==t.taskId)})}applySort(e,t,n){return[...e].sort((r,s)=>{let i,a;switch(t){case"timestamp":i=new Date(r.timestamp).getTime(),a=new Date(s.timestamp).getTime();break;case"filePath":i=r.filePath,a=s.filePath;break;case"size":i=r.size||0,a=s.size||0;break;case"type":i=r.changeType,a=s.changeType;break;default:i=new Date(r.timestamp).getTime(),a=new Date(s.timestamp).getTime()}return i<a?n==="asc"?-1:1:i>a?n==="asc"?1:-1:0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}shouldIncludeWorkspaceContext(e){return!!this.config.workspaceAuxiliary.enabled}getMaxWorkspaceContextLength(e){return this.config.workspaceAuxiliary.enabled?Math.floor(e*this.config.workspaceAuxiliary.maxContextRatio):0}},
|
|
1276
|
-
${Array.from(
|
|
1378
|
+
`,t}catch(e){return console.error("\u751F\u6210\u63D0\u793A\u8BCD\u96C6\u6210\u5185\u5BB9\u65F6\u51FA\u9519:",e),""}}generateChangeAnchors(){if(!this.config.anchorIntegration.enabled)return new Map;try{let e=new Map,t=this.fileChangeTracker.getCurrentSessionFileChanges();if(t&&t.changes.length>0)for(let n of t.changes){let r=`${this.config.anchorIntegration.anchorPrefix}${n.id}`;e.set(r,n.filePath),this.anchors.set(r,n.id)}return e}catch(e){return console.error("\u751F\u6210\u53D8\u66F4\u951A\u70B9\u65F6\u51FA\u9519:",e),new Map}}getChangeByAnchor(e){let t=this.anchors.get(e);if(!t)return;let n=this.fileChangeTracker.getCurrentSessionFileChanges();if(n)return n.changes.find(r=>r.id===t)}async searchFileChanges(e){if(!this.config.toolIntegration.enabled)return[];try{let t=this.fileChangeTracker.getCurrentSessionFileChanges();if(!t||t.changes.length===0)return[];let n=[...t.changes];e.filter&&(n=this.applyFilter(n,e.filter)),e.sortBy&&(n=this.applySort(n,e.sortBy,e.sortOrder||"desc"));let r=e.limit||this.config.toolIntegration.maxResultsPerQuery,s=e.offset||0;return n=n.slice(s,s+r),e.includeContent,n}catch(t){return console.error("\u641C\u7D22\u6587\u4EF6\u53D8\u66F4\u65F6\u51FA\u9519:",t),[]}}getChangeSummary(){try{let e=this.fileChangeTracker.getCurrentSessionFileChanges();return!e||e.changes.length===0?{totalFiles:0,addedFiles:0,modifiedFiles:0,deletedFiles:0,renamedFiles:0,totalSize:0}:{totalFiles:e.changes.length,addedFiles:e.changes.filter(n=>n.changeType==="added").length,modifiedFiles:e.changes.filter(n=>n.changeType==="modified").length,deletedFiles:e.changes.filter(n=>n.changeType==="deleted").length,renamedFiles:e.changes.filter(n=>n.changeType==="renamed").length,totalSize:e.changes.reduce((n,r)=>n+(r.size||0),0)}}catch(e){return console.error("\u83B7\u53D6\u53D8\u66F4\u6458\u8981\u65F6\u51FA\u9519:",e),{totalFiles:0,addedFiles:0,modifiedFiles:0,deletedFiles:0,renamedFiles:0,totalSize:0}}}applyFilter(e,t){return e.filter(n=>{if(t.changeTypes&&t.changeTypes.length>0&&!t.changeTypes.includes(n.changeType)||t.filePatterns&&t.filePatterns.length>0&&!t.filePatterns.some(s=>new RegExp(s.replace(/\*/g,".*").replace(/\?/g,".")).test(n.filePath)))return!1;if(t.dateRange){let r=new Date(n.timestamp),s=new Date(t.dateRange.start),i=new Date(t.dateRange.end);if(r<s||r>i)return!1}return!(t.author&&n.author!==t.author||t.branch&&n.branch!==t.branch||t.minFileSize&&(n.size||0)<t.minFileSize||t.maxFileSize&&(n.size||0)>t.maxFileSize||t.sessionId&&n.sessionId!==t.sessionId||t.taskId&&n.taskId!==t.taskId)})}applySort(e,t,n){return[...e].sort((r,s)=>{let i,a;switch(t){case"timestamp":i=new Date(r.timestamp).getTime(),a=new Date(s.timestamp).getTime();break;case"filePath":i=r.filePath,a=s.filePath;break;case"size":i=r.size||0,a=s.size||0;break;case"type":i=r.changeType,a=s.changeType;break;default:i=new Date(r.timestamp).getTime(),a=new Date(s.timestamp).getTime()}return i<a?n==="asc"?-1:1:i>a?n==="asc"?1:-1:0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}shouldIncludeWorkspaceContext(e){return!!this.config.workspaceAuxiliary.enabled}getMaxWorkspaceContextLength(e){return this.config.workspaceAuxiliary.enabled?Math.floor(e*this.config.workspaceAuxiliary.maxContextRatio):0}},fo=null});var Js={};j(Js,{AnchorInjector:()=>ut,createAnchorInjector:()=>$c});function $c(o,e){return new ut(o,e)}var ut,cr=C(()=>{Os();js();Us();Y();ar();lt();ut=class{anchorManager;semanticAnalyzer;contextConfig;constructor(e,t){this.anchorManager=new nr(e),this.semanticAnalyzer=new rr(t),this.contextConfig=oo()}async injectAnchors(e){let{taskDescription:t,iterations:n,messages:r,lastSemanticCheckIteration:s,session:i,logWarning:a}=e,c=s,l=[...r];if(this.contextConfig.enableAnchorSystem)try{let u=ue(),p=qe(u);await u.detectFileChanges();let g=p.generateChangeAnchors();if(g.size>0){let m={role:"system",content:`\u{1F4A1} \u5DE5\u4F5C\u533A\u6587\u4EF6\u53D8\u66F4\u951A\u70B9\uFF08\u4EC5\u4F5C\u8F85\u52A9\u53C2\u8003\uFF09\uFF1A
|
|
1379
|
+
${Array.from(g.entries()).map(([w,v])=>`${w}: ${v}`).join(`
|
|
1277
1380
|
`)}
|
|
1278
1381
|
|
|
1279
|
-
\u26A0\uFE0F \u4EE5\u4E0A\u951A\u70B9\u4FE1\u606F\u4EC5\u4F5C\u4E3A\u8F85\u52A9\u53C2\u8003\uFF0C\u60A8\u5E94\u4E13\u6CE8\u4E8E\u89E3\u51B3\u5F53\u524D\u4E3B\u8981\u4EFB\u52A1\u3002`},
|
|
1280
|
-
`),p=await this.semanticAnalyzer.analyzeSemanticDrift(t||this.anchorManager.getOriginalQuestion(),
|
|
1281
|
-
`),p=await this.anchorManager.calculateSemanticSimilarity(g);if(await this.anchorManager.shouldInjectAnchor(n,p,g)){let u=await this.anchorManager.createAnchorMessage(n,p,void 0,void 0,g);C(`\u{1F3AF} \u6CE8\u5165\u4E0A\u4E0B\u6587\u951A\u70B9\uFF08\u8FED\u4EE3 ${n}\uFF0C\u76F8\u4F3C\u5EA6: ${p.toFixed(2)}\uFF0C\u4F18\u5148\u7EA7: ${u.metadata?.priority}}`),l.push(u)}}catch(g){H(`\u951A\u70B9\u6CE8\u5165\u5931\u8D25: ${g.message}`)}return{messages:l,lastSemanticCheckIteration:c}}}});var ws=S(()=>{La();gs();ps();zn()});var Ua={};j(Ua,{GradleBuildParser:()=>Vn,JavaDependencyAnalyzer:()=>qr,MavenPomParser:()=>Br,analyzeJavaProject:()=>bs});import{readFileSync as Jr,existsSync as Gr}from"fs";import{resolve as vs}from"path";import{parseString as Wu}from"xml2js";async function bs(o=process.cwd()){let e=vs(o,"pom.xml"),t=vs(o,"build.gradle"),n=vs(o,"build.gradle.kts"),r=null;try{if(Gr(e)){let i=Jr(e,"utf-8");r=await new Br(i,e).parse()}else if(Gr(t)){let i=Jr(t,"utf-8");r=new Vn(i,t).parse()}else if(Gr(n)){let i=Jr(n,"utf-8");r=new Vn(i,n).parse()}if(!r)return null;let s={project:r,conflicts:[],outdated:[],unused:[],recommendations:[]};return s.recommendations=qr.generateRecommendations(s),s}catch(s){return console.error("Error analyzing Java project:",s),null}}var Br,Vn,qr,Ts=S(()=>{Br=class{content;filePath;constructor(e,t){this.content=e,this.filePath=t}async parse(){try{return new Promise((e,t)=>{Wu(this.content,{explicitArray:!1},(n,r)=>{if(n){t(n);return}try{let{project:s}=r;if(!s){e(null);return}let i={name:s.artifactId||s.name||"unknown",version:s.version||"0.0.0",description:s.description||"",groupId:s.groupId||s.parent?.groupId,artifactId:s.artifactId,packaging:s.packaging||"jar",javaVersion:this.extractJavaVersion(s),buildToolVersion:this.extractMavenVersion(),parent:s.parent?{groupId:s.parent.groupId,artifactId:s.parent.artifactId,version:s.parent.version}:void 0,dependencies:this.extractDependencies(s.dependencies?.dependency),dependencyManagement:this.extractDependencies(s.dependencyManagement?.dependencies?.dependency),properties:this.extractProperties(s.properties),modules:s.modules?.module?Array.isArray(s.modules.module)?s.modules.module:[s.modules.module]:void 0,repositories:this.extractRepositories(s.repositories?.repository)};e(i)}catch(s){t(s)}})})}catch(e){return console.error("Error parsing POM XML:",e),null}}extractJavaVersion(e){return e.properties?.["java.version"]||e.properties?.["maven.compiler.source"]||e.properties?.["maven.compiler.target"]||e.build?.plugins?.plugin?.find(n=>n.artifactId==="maven-compiler-plugin")?.configuration?.source}extractMavenVersion(){let e=this.content.match(/modelVersion>([^<]+)</);return e?e[1]:void 0}extractDependencies(e){return e?(Array.isArray(e)?e:[e]).map(n=>({groupId:n.groupId,artifactId:n.artifactId,version:n.version||"unknown",scope:n.scope||"compile",type:n.type||"jar",classifier:n.classifier,optional:n.optional==="true",exclusions:n.exclusions?.exclusion?(Array.isArray(n.exclusions.exclusion)?n.exclusions.exclusion:[n.exclusions.exclusion]).map(r=>({groupId:r.groupId,artifactId:r.artifactId})):void 0})):[]}extractProperties(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{n!=="$"&&(t[n]=e[n])}),t}extractRepositories(e){return e?(Array.isArray(e)?e:[e]).map(n=>n.url).filter(Boolean):[]}},Vn=class{content;filePath;constructor(e,t){this.content=e,this.filePath=t}parse(){try{let e=this.filePath.endsWith(".kts");return{name:this.extractProjectName(),version:this.extractVersion(),description:this.extractDescription(),groupId:this.extractGroup(),artifactId:this.extractProjectName(),javaVersion:this.extractJavaVersion(),buildToolVersion:this.extractGradleVersion(),dependencies:this.extractDependencies(e),dependencyManagement:[],properties:this.extractProperties(e)}}catch(e){return console.error("Error parsing Gradle build file:",e),null}}extractProjectName(){let e=this.content.match(/rootProject\.name\s*=\s*['"]([^'"]+)['"]/)||this.content.match(/project\(['"]([^'"]+)['"]\)/)||this.content.match(/name\s*=\s*['"]([^'"]+)['"]/);if(e)return e[1];let t=this.filePath.split(/[/\\]/);return t[t.length-2]||"unknown"}extractVersion(){let e=this.content.match(/version\s*=\s*['"]([^'"]+)['"]/);return e?e[1]:"0.0.0"}extractDescription(){let e=this.content.match(/description\s*=\s*['"]([^'"]+)['"]/);return e?e[1]:""}extractGroup(){let e=this.content.match(/group\s*=\s*['"]([^'"]+)['"]/);return e?e[1]:""}extractJavaVersion(){let e=this.content.match(/sourceCompatibility\s*=\s*['"]?([^'"\s]+)['"]?/)||this.content.match(/targetCompatibility\s*=\s*['"]?([^'"\s]+)['"]?/)||this.content.match(/java\.toolchain\.languageVersion\s*=\s*JavaLanguageVersion\.of\((\d+)\)/);return e?e[1]:void 0}extractGradleVersion(){let e=this.filePath.replace(/build\.gradle(\.kts)?$/,"gradle/wrapper/gradle-wrapper.properties");if(Gr(e))try{let n=Jr(e,"utf-8").match(/distributionUrl=.*gradle-(\d+\.\d+(?:\.\d+)?)-/);if(n)return n[1]}catch{}}extractDependencies(e){let t=[];return[/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*['"]([^:'"]+):([^:'"]+):([^:'"]+)['"]/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*['"]([^:'"]+):([^:'"]+)['"]/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*group\s*:\s*['"]([^'"]+)['"],\s*name\s*:\s*['"]([^'"]+)['"],\s*version\s*:\s*['"]([^'"]+)['"]\s*\)/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*group\s*:\s*['"]([^'"]+)['"],\s*name\s*:\s*['"]([^'"]+)['"]\s*\)/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*["']([^"']+):([^"']+):([^"']+)["']\s*\)/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*["']([^"']+):([^"']+)["']\s*\)/g].forEach(r=>{let s;for(;(s=r.exec(this.content))!==null;){let i,a,c,l;if(s.length===5)[,i,a,c,l]=s;else if(s.length===4)[,i,a,c]=s,l="managed";else continue;t.push({groupId:a,artifactId:c,version:l,scope:i.toLowerCase(),type:"jar"})}}),t}extractProperties(e){let t={},n=e?/val\s+(\w+)\s*=\s*['"]([^'"]+)['"]/g:/(\w+)\s*=\s*['"]([^'"]+)['"]/g,r;for(;(r=n.exec(this.content))!==null;)t[r[1]]=r[2];return t}},qr=class{static analyzeConflicts(e){let t=new Map,n=new Map;e.forEach(s=>{s.dependencies.forEach(i=>{let a=`${i.groupId}:${i.artifactId}`;t.has(a)||(t.set(a,new Set),n.set(a,[])),t.get(a).add(i.version),n.get(a).push(`${s.name} (${i.scope})`)})});let r=[];return t.forEach((s,i)=>{if(s.size>1){let[a,c]=i.split(":"),l=Array.from(s);r.push({groupId:a,artifactId:c,versions:l,locations:n.get(i)||[],severity:this.calculateConflictSeverity(l)})}}),r}static calculateConflictSeverity(e){let t=e.map(r=>r.split(".")[0]).filter(r=>/^\d+$/.test(r));return new Set(t).size>1?"high":e.length>2?"medium":"low"}static generateRecommendations(e){let t=[];return e.conflicts.length>0&&t.push(`\u53D1\u73B0 ${e.conflicts.length} \u4E2A\u4F9D\u8D56\u51B2\u7A81\uFF0C\u5EFA\u8BAE\u7EDF\u4E00\u7248\u672C\u7BA1\u7406`),e.outdated.length>0&&t.push(`${e.outdated.length} \u4E2A\u4F9D\u8D56\u5B58\u5728\u66F4\u65B0\u7248\u672C`),e.unused.length>0&&t.push(`${e.unused.length} \u4E2A\u4F9D\u8D56\u53EF\u80FD\u672A\u88AB\u4F7F\u7528\uFF0C\u5EFA\u8BAE\u68C0\u67E5`),e.project.dependencies.some(r=>r.groupId==="org.springframework.boot")&&t.push("\u9879\u76EE\u4F7F\u7528Spring Boot\uFF0C\u5EFA\u8BAE\u4F7F\u7528Spring Dependency Management\u63D2\u4EF6"),t}}});import{existsSync as Wa,readFileSync as zu}from"fs";import{resolve as za,dirname as Vu}from"path";function Ha(o=process.cwd()){let e={name:"unknown",version:"0.0.0",description:"",languages:["Unknown"],primaryLanguage:"Unknown",configFiles:[]},t=new Set,n=[],r="Unknown",s,i=null;for(let[a,c]of Object.entries(Va))for(let l of c.files){if(l.includes("*"))continue;let g=za(o,l);if(Wa(g)&&(t.add(c.language),n.push(l),r==="Unknown")){r=c.language,s=a;try{let p=zu(g,"utf-8"),u=c.parser(p,g);u instanceof Promise?console.warn(`Async parser not supported in sync readProjectConfig: ${a}`):i=u}catch(p){console.warn(`Error parsing ${l}: ${p instanceof Error?p.message:"Unknown error"}`)}}}return t.size===0?e:{...e,...i||{},languages:Array.from(t),primaryLanguage:r,buildTool:s,configFiles:n}}function Hu(o,e){try{let t=JSON.parse(o);return{name:t.name||"unknown",version:t.version||"0.0.0",description:t.description||"",dependencies:t.dependencies||{},devDependencies:t.devDependencies||{},entryPoints:[t.main,...typeof t.bin=="string"?[t.bin]:Object.values(t.bin||{})].filter(Boolean)}}catch{return null}}function Ju(o,e){try{let t=o.match(/name\s*=\s*['"]([^'"]+)['"]/),n=o.match(/version\s*=\s*['"]([^'"]+)['"]/),r=o.match(/description\s*=\s*['"]([^'"]+)['"]/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:r?r[1]:""}}catch{return null}}function Gu(o,e){try{let t=o.match(/name\s*=\s*"([^"]+)"/),n=o.match(/version\s*=\s*"([^"]+)"/),r=o.match(/description\s*=\s*"([^"]+)"/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:r?r[1]:""}}catch{return null}}function Bu(o,e){try{return{name:e.split(/[/\\]/).slice(-2,-1)[0]||"unknown",version:"0.0.0",description:""}}catch{return null}}function qu(o,e){try{let t=o.match(/module\s+([^\s]+)/),n=o.match(/go\s+([^\s]+)/),r={},s=/require\s+([^\s]+)\s+([^\s]+)/g,i;for(;(i=s.exec(o))!==null;)r[i[1]]=i[2];return{name:t&&t[1].split("/").pop()||"unknown",version:n?n[1]:"0.0.0",description:"",dependencies:r}}catch{return null}}function Ku(o,e){try{let t=o.match(/name\s*=\s*"([^"]+)"/),n=o.match(/version\s*=\s*"([^"]+)"/),r=o.match(/description\s*=\s*"([^"]+)"/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:r?r[1]:""}}catch{return null}}function Yu(o,e){try{return{name:e.split(/[/\\]/).slice(-2,-1)[0]||"unknown",version:"0.0.0",description:""}}catch{return null}}function Xu(o,e){try{let t=JSON.parse(o);return{name:t.name||"unknown",version:t.version||"0.0.0",description:t.description||"",dependencies:t.require||{},devDependencies:t["require-dev"]||{}}}catch{return null}}function Qu(o,e){try{let n=(e.split(/[/\\]/).pop()||"unknown").replace(/\.(cs|vb|fs)proj$/,""),r=o.match(/<Version>(.*?)<\/Version>/),s=o.match(/<Description>(.*?)<\/Description>/);return{name:n,version:r?r[1]:"0.0.0",description:s?s[1]:""}}catch{return null}}function Ja(o){let e=o.map(t=>`${t.groupId}:${t.artifactId}`);return e.some(t=>t.includes("spring-boot"))?"Spring Boot":e.some(t=>t.includes("spring"))?"Spring Framework":e.some(t=>t.includes("jakarta")||t.includes("javax"))?"Jakarta EE":e.some(t=>t.includes("hibernate"))?"Hibernate":e.some(t=>t.includes("mybatis"))?"MyBatis":e.some(t=>t.includes("struts"))?"Struts":"Java Standard"}async function Zu(o,e){try{let t=await bs(Vu(e));if(!t)return null;let n=t.project,r={};n.dependencies.forEach(i=>{r[`${i.groupId}:${i.artifactId}`]=i.version});let s=Ja(n.dependencies);return{name:n.name,version:n.version,description:n.description||"",dependencies:r,languageExtensionInfo:{javaDetails:n,framework:s,javaVersion:n.javaVersion,buildToolVersion:n.buildToolVersion||"Maven"},configFiles:["pom.xml"]}}catch(t){return console.error("Error parsing POM XML with enhanced parser:",t),null}}async function eg(o,e){try{let t=await Promise.resolve().then(()=>(Ts(),Ua)),r=new t.GradleBuildParser(o,e).parse();if(!r)return null;let s={};r.dependencies.forEach(a=>{s[`${a.groupId}:${a.artifactId}`]=a.version});let i=Ja(r.dependencies);return{name:r.name,version:r.version,description:r.description||"",dependencies:s,languageExtensionInfo:{javaDetails:r,framework:i,javaVersion:r.javaVersion,buildToolVersion:r.buildToolVersion||"Gradle"},configFiles:[e.split("/").pop()||"build.gradle"]}}catch(t){return console.error("Error parsing Gradle build file with enhanced parser:",t),null}}function Ga(o=process.cwd()){let e=[];for(let[t,n]of Object.entries(Va))for(let r of n.files){if(r.includes("*"))continue;let s=za(o,r);if(Wa(s)){e.push(t);break}}return e}var Va,Ba=S(()=>{Ts();Va={nodejs:{files:["package.json"],language:"JavaScript/TypeScript",parser:Hu},"java-maven":{files:["pom.xml"],language:"Java",parser:Zu},"java-gradle":{files:["build.gradle","build.gradle.kts"],language:"Java",parser:async(o,e)=>await eg(o,e)},"python-pip":{files:["setup.py","setup.cfg"],language:"Python",parser:Ju},"python-poetry":{files:["pyproject.toml"],language:"Python",parser:Gu},"python-pipenv":{files:["Pipfile"],language:"Python",parser:Bu},go:{files:["go.mod"],language:"Go",parser:qu},rust:{files:["Cargo.toml"],language:"Rust",parser:Ku},ruby:{files:["Gemfile"],language:"Ruby",parser:Yu},php:{files:["composer.json"],language:"PHP",parser:Xu},dotnet:{files:["*.csproj","*.vbproj","*.fsproj"],language:"C#/.NET",parser:Qu}}});import{writeFileSync as tg,existsSync as ng,mkdirSync as rg}from"fs";import{resolve as qa}from"path";function Ka(o,e=process.cwd()){let t=qa(e,".nium","project");ng(t)||rg(t,{recursive:!0});let r=qa(t,"project.json"),s=JSON.stringify(o,null,2);tg(r,s,"utf-8"),console.log(`\u2705 \u9879\u76EE\u4FE1\u606F\u5DF2\u4FDD\u5B58\u81F3: ${r}`)}function Ya(o){let e=o.reduce((t,n)=>t+n.count,0);return o.map(t=>({...t,percentage:e>0?(t.count/e*100).toFixed(1)+"%":"0%"}))}var Xa=S(()=>{Lr()});import{createHash as og}from"crypto";import{readFileSync as Qa,writeFileSync as sg,existsSync as ig,statSync as ag}from"fs";import{resolve as cg}from"path";function lg(o){try{let e=Qa(o),t=og("md5");return t.update(e),t.digest("hex")}catch(e){return console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u8BA1\u7B97\u6587\u4EF6 MD5: ${o}`,e),""}}function ug(o,e=process.cwd()){try{let t=cg(e,o),n=ag(t),r=lg(t);return{path:o,size:n.size,md5:r,updatedAt:n.mtime.toISOString(),description:""}}catch(t){return console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u83B7\u53D6\u6587\u4EF6\u4FE1\u606F: ${o}`,t),null}}function gg(o){let e=new Map;if(!ig(o))return e;try{let n=Qa(o,"utf-8").trim().split(`
|
|
1282
|
-
`);for(let r of n)if(r.trim())try{let s=JSON.parse(r);e.set(s.path,s)}catch(s){console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790 JSONL \u884C: ${r}`,s)}}catch(t){console.warn(`\u26A0\uFE0F \u8BFB\u53D6 JSONL \u6587\u4EF6\u5931\u8D25: ${o}`,t)}return e}function
|
|
1382
|
+
\u26A0\uFE0F \u4EE5\u4E0A\u951A\u70B9\u4FE1\u606F\u4EC5\u4F5C\u4E3A\u8F85\u52A9\u53C2\u8003\uFF0C\u60A8\u5E94\u4E13\u6CE8\u4E8E\u89E3\u51B3\u5F53\u524D\u4E3B\u8981\u4EFB\u52A1\u3002`},h=l.findIndex(w=>w.role==="system");h!==-1&&l.splice(h+1,0,m),x(`\u5DF2\u6CE8\u5165 ${g.size} \u4E2A\u6587\u4EF6\u53D8\u66F4\u951A\u70B9`)}}catch(u){x(`\u751F\u6210\u6587\u4EF6\u53D8\u66F4\u951A\u70B9\u65F6\u51FA\u9519: ${u}`)}if(this.contextConfig.enableSemanticAnalysis&&n-c>=this.contextConfig.semanticCheckInterval)try{let u=l.map(g=>g.content).filter(Boolean).join(`
|
|
1383
|
+
`),p=await this.semanticAnalyzer.analyzeSemanticDrift(t||this.anchorManager.getOriginalQuestion(),u,n);if(x(`\u8BED\u4E49\u5206\u6790 - \u76F8\u4F3C\u5EA6: ${p.similarityScore.toFixed(2)}, \u504F\u79BB\u7EA7\u522B: ${p.driftLevel}`),p.driftLevel==="severe"||p.driftLevel==="moderate"&&p.similarityScore<this.contextConfig.similarityThreshold){let g=`\u26A0\uFE0F \u68C0\u6D4B\u5230${p.driftLevel==="severe"?"\u4E25\u91CD":"\u4E2D\u5EA6"}\u504F\u79BB\uFF0C\u6B63\u5728\u7EA0\u6B63...`;a?a(g,i):x(g);let d=`\u68C0\u6D4B\u5230${p.driftLevel}\u504F\u79BB\uFF1A${p.deviationFactors.join("; ")}`,m=await this.anchorManager.createAnchorMessage(n,p.similarityScore,p.driftLevel,d,u);x(`\u{1F3AF} \u6CE8\u5165\u504F\u79BB\u7EA0\u6B63\u951A\u70B9\uFF08\u8FED\u4EE3 ${n}\uFF0C\u504F\u79BB\u7EA7\u522B: ${p.driftLevel}\uFF0C\u4F18\u5148\u7EA7: ${m.metadata?.priority}}`),l.push(m)}c=n}catch(u){G(`\u8BED\u4E49\u5206\u6790\u5931\u8D25: ${u.message}`)}if(this.contextConfig.enableAnchorSystem&&n%this.contextConfig.anchorInjectionInterval===0)try{let u=l.map(g=>g.content).filter(Boolean).join(`
|
|
1384
|
+
`),p=await this.anchorManager.calculateSemanticSimilarity(u);if(await this.anchorManager.shouldInjectAnchor(n,p,u)){let g=await this.anchorManager.createAnchorMessage(n,p,void 0,void 0,u);x(`\u{1F3AF} \u6CE8\u5165\u4E0A\u4E0B\u6587\u951A\u70B9\uFF08\u8FED\u4EE3 ${n}\uFF0C\u76F8\u4F3C\u5EA6: ${p.toFixed(2)}\uFF0C\u4F18\u5148\u7EA7: ${g.metadata?.priority}}`),l.push(g)}}catch(u){G(`\u951A\u70B9\u6CE8\u5165\u5931\u8D25: ${u.message}`)}return{messages:l,lastSemanticCheckIteration:c}}}});var Gs=C(()=>{vc();Os();js();cr()});var Mc={};j(Mc,{GradleBuildParser:()=>lr,JavaDependencyAnalyzer:()=>So,MavenPomParser:()=>xo,analyzeJavaProject:()=>qs});import{readFileSync as yo,existsSync as Co}from"fs";import{resolve as Bs}from"path";import{parseString as Wg}from"xml2js";async function qs(o=process.cwd()){let e=Bs(o,"pom.xml"),t=Bs(o,"build.gradle"),n=Bs(o,"build.gradle.kts"),r=null;try{if(Co(e)){let i=yo(e,"utf-8");r=await new xo(i,e).parse()}else if(Co(t)){let i=yo(t,"utf-8");r=new lr(i,t).parse()}else if(Co(n)){let i=yo(n,"utf-8");r=new lr(i,n).parse()}if(!r)return null;let s={project:r,conflicts:[],outdated:[],unused:[],recommendations:[]};return s.recommendations=So.generateRecommendations(s),s}catch(s){return console.error("Error analyzing Java project:",s),null}}var xo,lr,So,Ks=C(()=>{xo=class{content;filePath;constructor(e,t){this.content=e,this.filePath=t}async parse(){try{return new Promise((e,t)=>{Wg(this.content,{explicitArray:!1},(n,r)=>{if(n){t(n);return}try{let{project:s}=r;if(!s){e(null);return}let i={name:s.artifactId||s.name||"unknown",version:s.version||"0.0.0",description:s.description||"",groupId:s.groupId||s.parent?.groupId,artifactId:s.artifactId,packaging:s.packaging||"jar",javaVersion:this.extractJavaVersion(s),buildToolVersion:this.extractMavenVersion(),parent:s.parent?{groupId:s.parent.groupId,artifactId:s.parent.artifactId,version:s.parent.version}:void 0,dependencies:this.extractDependencies(s.dependencies?.dependency),dependencyManagement:this.extractDependencies(s.dependencyManagement?.dependencies?.dependency),properties:this.extractProperties(s.properties),modules:s.modules?.module?Array.isArray(s.modules.module)?s.modules.module:[s.modules.module]:void 0,repositories:this.extractRepositories(s.repositories?.repository)};e(i)}catch(s){t(s)}})})}catch(e){return console.error("Error parsing POM XML:",e),null}}extractJavaVersion(e){return e.properties?.["java.version"]||e.properties?.["maven.compiler.source"]||e.properties?.["maven.compiler.target"]||e.build?.plugins?.plugin?.find(n=>n.artifactId==="maven-compiler-plugin")?.configuration?.source}extractMavenVersion(){let e=this.content.match(/modelVersion>([^<]+)</);return e?e[1]:void 0}extractDependencies(e){return e?(Array.isArray(e)?e:[e]).map(n=>({groupId:n.groupId,artifactId:n.artifactId,version:n.version||"unknown",scope:n.scope||"compile",type:n.type||"jar",classifier:n.classifier,optional:n.optional==="true",exclusions:n.exclusions?.exclusion?(Array.isArray(n.exclusions.exclusion)?n.exclusions.exclusion:[n.exclusions.exclusion]).map(r=>({groupId:r.groupId,artifactId:r.artifactId})):void 0})):[]}extractProperties(e){if(!e)return{};let t={};return Object.keys(e).forEach(n=>{n!=="$"&&(t[n]=e[n])}),t}extractRepositories(e){return e?(Array.isArray(e)?e:[e]).map(n=>n.url).filter(Boolean):[]}},lr=class{content;filePath;constructor(e,t){this.content=e,this.filePath=t}parse(){try{let e=this.filePath.endsWith(".kts");return{name:this.extractProjectName(),version:this.extractVersion(),description:this.extractDescription(),groupId:this.extractGroup(),artifactId:this.extractProjectName(),javaVersion:this.extractJavaVersion(),buildToolVersion:this.extractGradleVersion(),dependencies:this.extractDependencies(e),dependencyManagement:[],properties:this.extractProperties(e)}}catch(e){return console.error("Error parsing Gradle build file:",e),null}}extractProjectName(){let e=this.content.match(/rootProject\.name\s*=\s*['"]([^'"]+)['"]/)||this.content.match(/project\(['"]([^'"]+)['"]\)/)||this.content.match(/name\s*=\s*['"]([^'"]+)['"]/);if(e)return e[1];let t=this.filePath.split(/[/\\]/);return t[t.length-2]||"unknown"}extractVersion(){let e=this.content.match(/version\s*=\s*['"]([^'"]+)['"]/);return e?e[1]:"0.0.0"}extractDescription(){let e=this.content.match(/description\s*=\s*['"]([^'"]+)['"]/);return e?e[1]:""}extractGroup(){let e=this.content.match(/group\s*=\s*['"]([^'"]+)['"]/);return e?e[1]:""}extractJavaVersion(){let e=this.content.match(/sourceCompatibility\s*=\s*['"]?([^'"\s]+)['"]?/)||this.content.match(/targetCompatibility\s*=\s*['"]?([^'"\s]+)['"]?/)||this.content.match(/java\.toolchain\.languageVersion\s*=\s*JavaLanguageVersion\.of\((\d+)\)/);return e?e[1]:void 0}extractGradleVersion(){let e=this.filePath.replace(/build\.gradle(\.kts)?$/,"gradle/wrapper/gradle-wrapper.properties");if(Co(e))try{let n=yo(e,"utf-8").match(/distributionUrl=.*gradle-(\d+\.\d+(?:\.\d+)?)-/);if(n)return n[1]}catch{}}extractDependencies(e){let t=[];return[/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*['"]([^:'"]+):([^:'"]+):([^:'"]+)['"]/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*['"]([^:'"]+):([^:'"]+)['"]/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*group\s*:\s*['"]([^'"]+)['"],\s*name\s*:\s*['"]([^'"]+)['"],\s*version\s*:\s*['"]([^'"]+)['"]\s*\)/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*group\s*:\s*['"]([^'"]+)['"],\s*name\s*:\s*['"]([^'"]+)['"]\s*\)/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*["']([^"']+):([^"']+):([^"']+)["']\s*\)/g,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation)\s*\(\s*["']([^"']+):([^"']+)["']\s*\)/g].forEach(r=>{let s;for(;(s=r.exec(this.content))!==null;){let i,a,c,l;if(s.length===5)[,i,a,c,l]=s;else if(s.length===4)[,i,a,c]=s,l="managed";else continue;t.push({groupId:a,artifactId:c,version:l,scope:i.toLowerCase(),type:"jar"})}}),t}extractProperties(e){let t={},n=e?/val\s+(\w+)\s*=\s*['"]([^'"]+)['"]/g:/(\w+)\s*=\s*['"]([^'"]+)['"]/g,r;for(;(r=n.exec(this.content))!==null;)t[r[1]]=r[2];return t}},So=class{static analyzeConflicts(e){let t=new Map,n=new Map;e.forEach(s=>{s.dependencies.forEach(i=>{let a=`${i.groupId}:${i.artifactId}`;t.has(a)||(t.set(a,new Set),n.set(a,[])),t.get(a).add(i.version),n.get(a).push(`${s.name} (${i.scope})`)})});let r=[];return t.forEach((s,i)=>{if(s.size>1){let[a,c]=i.split(":"),l=Array.from(s);r.push({groupId:a,artifactId:c,versions:l,locations:n.get(i)||[],severity:this.calculateConflictSeverity(l)})}}),r}static calculateConflictSeverity(e){let t=e.map(r=>r.split(".")[0]).filter(r=>/^\d+$/.test(r));return new Set(t).size>1?"high":e.length>2?"medium":"low"}static generateRecommendations(e){let t=[];return e.conflicts.length>0&&t.push(`\u53D1\u73B0 ${e.conflicts.length} \u4E2A\u4F9D\u8D56\u51B2\u7A81\uFF0C\u5EFA\u8BAE\u7EDF\u4E00\u7248\u672C\u7BA1\u7406`),e.outdated.length>0&&t.push(`${e.outdated.length} \u4E2A\u4F9D\u8D56\u5B58\u5728\u66F4\u65B0\u7248\u672C`),e.unused.length>0&&t.push(`${e.unused.length} \u4E2A\u4F9D\u8D56\u53EF\u80FD\u672A\u88AB\u4F7F\u7528\uFF0C\u5EFA\u8BAE\u68C0\u67E5`),e.project.dependencies.some(r=>r.groupId==="org.springframework.boot")&&t.push("\u9879\u76EE\u4F7F\u7528Spring Boot\uFF0C\u5EFA\u8BAE\u4F7F\u7528Spring Dependency Management\u63D2\u4EF6"),t}}});import{existsSync as Ic,readFileSync as Vg}from"fs";import{resolve as Ac,dirname as zg}from"path";function Rc(o=process.cwd()){let e={name:"unknown",version:"0.0.0",description:"",languages:["Unknown"],primaryLanguage:"Unknown",configFiles:[]},t=new Set,n=[],r="Unknown",s,i=null;for(let[a,c]of Object.entries(Lc))for(let l of c.files){if(l.includes("*"))continue;let u=Ac(o,l);if(Ic(u)&&(t.add(c.language),n.push(l),r==="Unknown")){r=c.language,s=a;try{let p=Vg(u,"utf-8"),g=c.parser(p,u);g instanceof Promise?console.warn(`Async parser not supported in sync readProjectConfig: ${a}`):i=g}catch(p){console.warn(`Error parsing ${l}: ${p instanceof Error?p.message:"Unknown error"}`)}}}return t.size===0?e:{...e,...i||{},languages:Array.from(t),primaryLanguage:r,buildTool:s,configFiles:n}}function Hg(o,e){try{let t=JSON.parse(o);return{name:t.name||"unknown",version:t.version||"0.0.0",description:t.description||"",dependencies:t.dependencies||{},devDependencies:t.devDependencies||{},entryPoints:[t.main,...typeof t.bin=="string"?[t.bin]:Object.values(t.bin||{})].filter(Boolean)}}catch{return null}}function Jg(o,e){try{let t=o.match(/name\s*=\s*['"]([^'"]+)['"]/),n=o.match(/version\s*=\s*['"]([^'"]+)['"]/),r=o.match(/description\s*=\s*['"]([^'"]+)['"]/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:r?r[1]:""}}catch{return null}}function Gg(o,e){try{let t=o.match(/name\s*=\s*"([^"]+)"/),n=o.match(/version\s*=\s*"([^"]+)"/),r=o.match(/description\s*=\s*"([^"]+)"/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:r?r[1]:""}}catch{return null}}function Bg(o,e){try{return{name:e.split(/[/\\]/).slice(-2,-1)[0]||"unknown",version:"0.0.0",description:""}}catch{return null}}function qg(o,e){try{let t=o.match(/module\s+([^\s]+)/),n=o.match(/go\s+([^\s]+)/),r={},s=/require\s+([^\s]+)\s+([^\s]+)/g,i;for(;(i=s.exec(o))!==null;)r[i[1]]=i[2];return{name:t&&t[1].split("/").pop()||"unknown",version:n?n[1]:"0.0.0",description:"",dependencies:r}}catch{return null}}function Kg(o,e){try{let t=o.match(/name\s*=\s*"([^"]+)"/),n=o.match(/version\s*=\s*"([^"]+)"/),r=o.match(/description\s*=\s*"([^"]+)"/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:r?r[1]:""}}catch{return null}}function Yg(o,e){try{return{name:e.split(/[/\\]/).slice(-2,-1)[0]||"unknown",version:"0.0.0",description:""}}catch{return null}}function Xg(o,e){try{let t=JSON.parse(o);return{name:t.name||"unknown",version:t.version||"0.0.0",description:t.description||"",dependencies:t.require||{},devDependencies:t["require-dev"]||{}}}catch{return null}}function Qg(o,e){try{let n=(e.split(/[/\\]/).pop()||"unknown").replace(/\.(cs|vb|fs)proj$/,""),r=o.match(/<Version>(.*?)<\/Version>/),s=o.match(/<Description>(.*?)<\/Description>/);return{name:n,version:r?r[1]:"0.0.0",description:s?s[1]:""}}catch{return null}}function Dc(o){let e=o.map(t=>`${t.groupId}:${t.artifactId}`);return e.some(t=>t.includes("spring-boot"))?"Spring Boot":e.some(t=>t.includes("spring"))?"Spring Framework":e.some(t=>t.includes("jakarta")||t.includes("javax"))?"Jakarta EE":e.some(t=>t.includes("hibernate"))?"Hibernate":e.some(t=>t.includes("mybatis"))?"MyBatis":e.some(t=>t.includes("struts"))?"Struts":"Java Standard"}async function Zg(o,e){try{let t=await qs(zg(e));if(!t)return null;let n=t.project,r={};n.dependencies.forEach(i=>{r[`${i.groupId}:${i.artifactId}`]=i.version});let s=Dc(n.dependencies);return{name:n.name,version:n.version,description:n.description||"",dependencies:r,languageExtensionInfo:{javaDetails:n,framework:s,javaVersion:n.javaVersion,buildToolVersion:n.buildToolVersion||"Maven"},configFiles:["pom.xml"]}}catch(t){return console.error("Error parsing POM XML with enhanced parser:",t),null}}async function ep(o,e){try{let t=await Promise.resolve().then(()=>(Ks(),Mc)),r=new t.GradleBuildParser(o,e).parse();if(!r)return null;let s={};r.dependencies.forEach(a=>{s[`${a.groupId}:${a.artifactId}`]=a.version});let i=Dc(r.dependencies);return{name:r.name,version:r.version,description:r.description||"",dependencies:s,languageExtensionInfo:{javaDetails:r,framework:i,javaVersion:r.javaVersion,buildToolVersion:r.buildToolVersion||"Gradle"},configFiles:[e.split("/").pop()||"build.gradle"]}}catch(t){return console.error("Error parsing Gradle build file with enhanced parser:",t),null}}function Fc(o=process.cwd()){let e=[];for(let[t,n]of Object.entries(Lc))for(let r of n.files){if(r.includes("*"))continue;let s=Ac(o,r);if(Ic(s)){e.push(t);break}}return e}var Lc,Oc=C(()=>{Ks();Lc={nodejs:{files:["package.json"],language:"JavaScript/TypeScript",parser:Hg},"java-maven":{files:["pom.xml"],language:"Java",parser:Zg},"java-gradle":{files:["build.gradle","build.gradle.kts"],language:"Java",parser:async(o,e)=>await ep(o,e)},"python-pip":{files:["setup.py","setup.cfg"],language:"Python",parser:Jg},"python-poetry":{files:["pyproject.toml"],language:"Python",parser:Gg},"python-pipenv":{files:["Pipfile"],language:"Python",parser:Bg},go:{files:["go.mod"],language:"Go",parser:qg},rust:{files:["Cargo.toml"],language:"Rust",parser:Kg},ruby:{files:["Gemfile"],language:"Ruby",parser:Yg},php:{files:["composer.json"],language:"PHP",parser:Xg},dotnet:{files:["*.csproj","*.vbproj","*.fsproj"],language:"C#/.NET",parser:Qg}}});import{writeFileSync as tp,existsSync as np,mkdirSync as rp}from"fs";import{resolve as jc}from"path";function _c(o,e=process.cwd()){let t=jc(e,".nium","project");np(t)||rp(t,{recursive:!0});let r=jc(t,"project.json"),s=JSON.stringify(o,null,2);tp(r,s,"utf-8"),console.log(`\u2705 \u9879\u76EE\u4FE1\u606F\u5DF2\u4FDD\u5B58\u81F3: ${r}`)}function Nc(o){let e=o.reduce((t,n)=>t+n.count,0);return o.map(t=>({...t,percentage:e>0?(t.count/e*100).toFixed(1)+"%":"0%"}))}var Uc=C(()=>{ro()});import{createHash as op}from"crypto";import{readFileSync as Wc,writeFileSync as sp,existsSync as ip,statSync as ap}from"fs";import{resolve as cp}from"path";function lp(o){try{let e=Wc(o),t=op("md5");return t.update(e),t.digest("hex")}catch(e){return console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u8BA1\u7B97\u6587\u4EF6 MD5: ${o}`,e),""}}function up(o,e=process.cwd()){try{let t=cp(e,o),n=ap(t),r=lp(t);return{path:o,size:n.size,md5:r,updatedAt:n.mtime.toISOString(),description:""}}catch(t){return console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u83B7\u53D6\u6587\u4EF6\u4FE1\u606F: ${o}`,t),null}}function gp(o){let e=new Map;if(!ip(o))return e;try{let n=Wc(o,"utf-8").trim().split(`
|
|
1385
|
+
`);for(let r of n)if(r.trim())try{let s=JSON.parse(r);e.set(s.path,s)}catch(s){console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u89E3\u6790 JSONL \u884C: ${r}`,s)}}catch(t){console.warn(`\u26A0\uFE0F \u8BFB\u53D6 JSONL \u6587\u4EF6\u5931\u8D25: ${o}`,t)}return e}function pp(o,e){try{let t=[],n=Array.from(o.entries()).sort((r,s)=>r[0].localeCompare(s[0]));for(let[,r]of n)t.push(JSON.stringify(r));sp(e,t.join(`
|
|
1283
1386
|
`)+`
|
|
1284
|
-
`,"utf-8")}catch(t){throw console.error(`\u274C \u5199\u5165 JSONL \u6587\u4EF6\u5931\u8D25: ${e}`,t),t}}function
|
|
1285
|
-
`)}var tc=S(()=>{});var X,$e=S(()=>{X=class{getCommonDirectoryDescriptions(){return{src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u6240\u6709\u4E3B\u8981\u7684\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",dist:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",components:"\u7EC4\u4EF6\u76EE\u5F55",pages:"\u9875\u9762\u76EE\u5F55",public:"\u516C\u5171\u8D44\u6E90\u76EE\u5F55",assets:"\u9759\u6001\u8D44\u6E90\u76EE\u5F55",utils:"\u5DE5\u5177\u51FD\u6570\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",services:"\u670D\u52A1\u5C42\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",controllers:"\u63A7\u5236\u5668\u76EE\u5F55",routes:"\u8DEF\u7531\u5B9A\u4E49\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",plugins:"\u63D2\u4EF6\u76EE\u5F55",hooks:"\u94A9\u5B50\u51FD\u6570\u76EE\u5F55",types:"\u7C7B\u578B\u5B9A\u4E49\u76EE\u5F55",interfaces:"\u63A5\u53E3\u5B9A\u4E49\u76EE\u5F55",schemas:"\u6570\u636E\u7ED3\u6784\u5B9A\u4E49\u76EE\u5F55"}}}});import{existsSync as ks,readFileSync as nc}from"fs";import{resolve as Ps}from"path";var Kr,rc=S(()=>{$e();Kr=class extends X{getLanguageName(){return"JavaScript/TypeScript"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u6240\u6709\u4E3B\u8981\u7684 JavaScript/TypeScript \u4EE3\u7801",lib:"\u7F16\u8BD1\u540E\u7684\u5E93\u6587\u4EF6\u76EE\u5F55",dist:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u6253\u5305\u540E\u7684\u751F\u4EA7\u4EE3\u7801",public:"\u516C\u5171\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u9759\u6001\u6587\u4EF6",assets:"\u9759\u6001\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u56FE\u7247\u3001\u6837\u5F0F\u7B49",components:"React/Vue \u7EC4\u4EF6\u76EE\u5F55",pages:"\u9875\u9762\u7EC4\u4EF6\u76EE\u5F55",hooks:"React \u94A9\u5B50\u51FD\u6570\u76EE\u5F55",context:"React \u4E0A\u4E0B\u6587\u76EE\u5F55",redux:"Redux \u72B6\u6001\u7BA1\u7406\u76EE\u5F55",store:"\u72B6\u6001\u7BA1\u7406\u76EE\u5F55",actions:"Redux \u52A8\u4F5C\u76EE\u5F55",reducers:"Redux \u5F52\u7EA6\u5668\u76EE\u5F55",slices:"Redux Toolkit \u5207\u7247\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",utils:"\u5DE5\u5177\u51FD\u6570\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",services:"API \u670D\u52A1\u76EE\u5F55",api:"API \u63A5\u53E3\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",types:"TypeScript \u7C7B\u578B\u5B9A\u4E49\u76EE\u5F55",interfaces:"TypeScript \u63A5\u53E3\u5B9A\u4E49\u76EE\u5F55",schemas:"\u6570\u636E\u7ED3\u6784\u5B9A\u4E49\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u6D4B\u8BD5\u7B49\u811A\u672C",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",__tests__:"Jest \u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55",spec:"Jasmine/Mocha \u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Ps(e,"package.json");if(ks(r))try{let s=nc(r,"utf-8"),i=JSON.parse(s);i.engines&&(i.engines.node&&(n["Node.js"]=i.engines.node),i.engines.npm&&(n.npm=i.engines.npm),i.engines.yarn&&(n.yarn=i.engines.yarn),i.engines.pnpm&&(n.pnpm=i.engines.pnpm))}catch{}return n}findEntryPoints(e,t){let n=[],r=["index.js","index.ts","index.mjs","index.cjs","app.js","app.ts","main.js","main.ts","server.js","server.ts","src/index.js","src/index.ts","src/main.js","src/main.ts","src/app.js","src/app.ts","next.config.js","vite.config.js","webpack.config.js","rollup.config.js"],s=Ps(t,"package.json");if(ks(s))try{let i=nc(s,"utf-8"),a=JSON.parse(i);a.main&&n.push(a.main),a.bin&&(typeof a.bin=="string"?n.push(a.bin):n.push(...Object.values(a.bin)))}catch{}return r.forEach(i=>{e.includes(i)&&n.push(i)}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={ESLint:[".eslintrc.js",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml",".eslintrc"],Prettier:[".prettierrc",".prettierrc.json",".prettierrc.yml",".prettierrc.yaml",".prettierrc.js","prettier.config.js"],EditorConfig:[".editorconfig"],TypeScript:["tsconfig.json"],Flow:[".flowconfig"],Jest:["jest.config.js","jest.config.ts","jest.config.json"],Vitest:["vitest.config.js","vitest.config.ts"],Mocha:["mocha.opts",".mocharc.js"],Jasmine:["jasmine.json"]};for(let[r,s]of Object.entries(n))for(let i of s)if(ks(Ps(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".js",".mjs",".cjs",".jsx",".ts",".tsx",".vue",".svelte",".astro"]}getCommonTestExtensions(){return[".test.js",".test.ts",".test.jsx",".test.tsx",".spec.js",".spec.ts",".spec.jsx",".spec.tsx"]}getCommonConfigFiles(){return["package.json","tsconfig.json","tsconfig.node.json","jsconfig.json",".eslintrc.js",".eslintrc.json",".prettierrc",".prettierrc.json",".editorconfig","vite.config.js","vite.config.ts","webpack.config.js","webpack.config.ts","rollup.config.js","rollup.config.ts","next.config.js","next.config.mjs","nuxt.config.js","nuxt.config.ts","astro.config.mjs","astro.config.ts"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as Te,readFileSync as Nt,writeFileSync as mg,mkdirSync as dg}from"fs";import{resolve as Ve,dirname as fg}from"path";var Yr,oc=S(()=>{$e();Yr=class extends X{getLanguageName(){return"Java"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u6839\u76EE\u5F55","src/main/java":"\u4E3B\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u751F\u4EA7\u4EE3\u7801","src/main/resources":"\u4E3B\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u914D\u7F6E\u6587\u4EF6\u548C\u9759\u6001\u8D44\u6E90","src/test/java":"\u6D4B\u8BD5\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5","src/test/resources":"\u6D4B\u8BD5\u8D44\u6E90\u76EE\u5F55\uFF0C\u5305\u542B\u6D4B\u8BD5\u914D\u7F6E\u6587\u4EF6",target:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u7C7B\u6587\u4EF6\u548C\u6253\u5305\u4EA7\u7269",lib:"\u5916\u90E8\u4F9D\u8D56\u5E93\u76EE\u5F55",libs:"\u5916\u90E8\u4F9D\u8D56\u5E93\u76EE\u5F55",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55",gradle:"Gradle \u6784\u5EFA\u7CFB\u7EDF\u76EE\u5F55",maven:"Maven \u6784\u5EFA\u7CFB\u7EDF\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C"}}async detectVersions(e,t){let n={},r=Ve(e,"pom.xml");if(Te(r))try{let a=Nt(r,"utf-8"),c=a.match(/<java\.version>([^<]+)<\/java\.version>/)||a.match(/<maven\.compiler\.source>([^<]+)<\/maven\.compiler\.source>/);c&&(n.Java=c[1])}catch{}let s=Ve(e,"build.gradle"),i=Ve(e,"build.gradle.kts");if(Te(s))try{let a=Nt(s,"utf-8"),c=a.match(/sourceCompatibility\s*=\s*['"]?([^'"\\s]+)['"]?/)||a.match(/targetCompatibility\s*=\s*['"]?([^'"\\s]+)['"]?/);c&&(n.Java=c[1])}catch{}else if(Te(i))try{let a=Nt(i,"utf-8"),c=a.match(/sourceCompatibility\s*=\s*JavaVersion\.VERSION_(\d+_\d+)/)||a.match(/targetCompatibility\s*=\s*JavaVersion\.VERSION_(\d+_\d+)/);c&&(n.Java=c[1].replace("_","."))}catch{}return n}findEntryPoints(e,t){let n=[],r=["src/main/java/**/Main.java","src/main/java/**/Application.java","src/main/java/**/App.java","src/main/java/**/Bootstrap.java","src/main/java/**/Launcher.java"];return e.forEach(s=>{if(s.endsWith(".java"))try{Nt(Ve(t,s),"utf-8").includes("public static void main(String[] args)")&&n.push(s)}catch{}}),r.forEach(s=>{let i=new RegExp(s.replace(/\*\*/g,".*").replace(/\*/g,"[^/]*"));e.forEach(a=>{i.test(a)&&n.push(a)})}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={Checkstyle:["checkstyle.xml","google_checks.xml","sun_checks.xml"],PMD:["pmd.xml",".pmd"],FindBugs:["findbugs.xml",".findbugs"],SpotBugs:["spotbugs.xml",".spotbugs"],SonarQube:["sonar-project.properties"],EditorConfig:[".editorconfig"],Maven:["pom.xml"],Gradle:["build.gradle","build.gradle.kts"]};for(let[r,s]of Object.entries(n))for(let i of s)if(Te(Ve(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".java",".class",".jar",".war",".ear"]}getCommonTestExtensions(){return["Test.java","Tests.java"]}getCommonConfigFiles(){return["pom.xml","build.gradle","build.gradle.kts","settings.gradle","gradle.properties","checkstyle.xml","pmd.xml","spotbugs.xml","sonar-project.properties",".editorconfig"]}async analyzeDependencies(e,t){let n={dependencies:[],conflicts:[],recommendations:[]};try{let r=Ve(e,"pom.xml"),s=Ve(e,"build.gradle"),i=Ve(e,"build.gradle.kts");if(!Te(r)&&!Te(s)&&!Te(i))return n;Te(r)?await this.analyzeMavenDependencies(r,n):Te(s)?this.analyzeGradleDependencies(s,n):Te(i)&&this.analyzeGradleDependencies(i,n),this.detectDependencyConflicts(n),this.generateRecommendations(n)}catch(r){console.error("\u4F9D\u8D56\u5206\u6790\u5931\u8D25:",r)}return n}async analyzeMavenDependencies(e,t){let n=Nt(e,"utf-8"),r=await import("xml2js");return new Promise((s,i)=>{r.parseString(n,{explicitArray:!1},(a,c)=>{if(a){i(a);return}let{project:l}=c;if(!l){s();return}let g=l.dependencies?.dependency;g&&(Array.isArray(g)?g:[g]).forEach(u=>{t.dependencies.push({groupId:u.groupId,artifactId:u.artifactId,version:u.version||"unknown",scope:u.scope||"compile",type:u.type||"jar"})}),s()})})}analyzeGradleDependencies(e,t){let n=Nt(e,"utf-8");[/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*['"]([^:'"]+):([^:'"]+):([^:'"]+)['"]/gms,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*['"]([^:'"]+):([^:'"]+)['"]/gms,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*\(\s*group\s*:\s*['"]([^'"]+)['"],\s*name\s*:\s*['"]([^'"]+)['"],\s*version\s*:\s*['"]([^'"]+)['"][^)]*\)/gms,/(implementation|compile|api|compileOnly|runtimeOnly|testImplementation|testCompile|testApi|testCompileOnly|testRuntimeOnly)\s*\(\s*["']([^"']+):([^"']+):([^"']+)["']\s*\)/gms].forEach(s=>{let i;for(;(i=s.exec(n))!==null;){let a,c,l,g;if(i.length===5)[,a,c,l,g]=i;else if(i.length===4)[,a,c,l]=i,g="managed";else continue;t.dependencies.push({groupId:c,artifactId:l,version:g,scope:a.toLowerCase(),type:"jar"})}})}detectDependencyConflicts(e){let t=new Map;e.dependencies.forEach(n=>{if(n.groupId&&n.artifactId){let r=`${n.groupId}:${n.artifactId}`;t.has(r)||t.set(r,new Set),t.get(r)?.add(n.version)}}),t.forEach((n,r)=>{if(n.size>1){let[s,i]=r.split(":");e.conflicts.push({groupId:s,artifactId:i,versions:Array.from(n),severity:this.calculateConflictSeverity(Array.from(n))})}})}calculateConflictSeverity(e){let t=e.map(r=>{let s=r.match(/^(\d+)/);return s?parseInt(s[1]):0});return new Set(t).size>1?"high":e.length>2?"medium":"low"}generateRecommendations(e){let t=[];e.conflicts.length>0&&t.push(`${e.conflicts.length} \u4E2A\u4F9D\u8D56\u5B58\u5728\u7248\u672C\u51B2\u7A81\uFF0C\u5EFA\u8BAE\u7EDF\u4E00\u7248\u672C`),e.dependencies.some(s=>s.groupId==="org.springframework.boot")&&t.push("\u9879\u76EE\u4F7F\u7528Spring Boot\uFF0C\u5EFA\u8BAE\u4F7F\u7528Spring Dependency Management\u63D2\u4EF6\u7BA1\u7406\u4F9D\u8D56\u7248\u672C");let r=this.detectJavaVersion(e);if(r){let s=parseInt(r);s<11?t.push("Java\u7248\u672C\u8F83\u65E7\uFF0C\u5EFA\u8BAE\u5347\u7EA7\u5230Java 11\u6216\u66F4\u9AD8\u7248\u672C"):s>=17&&t.push("\u4F7F\u7528\u73B0\u4EE3Java\u7248\u672C\uFF0C\u53EF\u4EE5\u4EAB\u53D7\u6700\u65B0\u7279\u6027")}e.recommendations=t}detectJavaVersion(e){}saveDependencyAnalysis(e,t){try{let n=`${t}/.nium/java-dependency-analysis.json`;dg(fg(n),{recursive:!0}),mg(n,JSON.stringify({scanTime:new Date().toISOString(),dependencies:e.dependencies,conflicts:e.conflicts,recommendations:e.recommendations},null,2))}catch(n){console.error("\u4FDD\u5B58\u4F9D\u8D56\u5206\u6790\u7ED3\u679C\u5931\u8D25:",n)}}}});import{existsSync as Hn,readFileSync as Jn}from"fs";import{resolve as Ut}from"path";var Xr,sc=S(()=>{$e();Xr=class extends X{getLanguageName(){return"Python"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 Python \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",main:"\u4E3B\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",__pycache__:"Python \u7F16\u8BD1\u7F13\u5B58\u76EE\u5F55",venv:"\u865A\u62DF\u73AF\u5883\u76EE\u5F55",".venv":"\u865A\u62DF\u73AF\u5883\u76EE\u5F55",env:"\u73AF\u5883\u53D8\u91CF\u914D\u7F6E\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",data:"\u6570\u636E\u6587\u4EF6\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",dist:"\u6253\u5305\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u53D1\u5E03\u7684\u5305\u6587\u4EF6",requirements:"\u4F9D\u8D56\u7BA1\u7406\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Ut(e,".python-version");if(Hn(r))try{let a=Jn(r,"utf-8");n.Python=a.trim()}catch{}let s=Ut(e,"pyproject.toml");if(Hn(s))try{let c=Jn(s,"utf-8").match(/python\s*=\s*['"]([^'"]+)['"]/);c&&(n.Python=c[1])}catch{}let i=Ut(e,"setup.py");if(Hn(i))try{let c=Jn(i,"utf-8").match(/python_requires\s*=\s*['"]([^'"]+)['"]/);c&&(n.Python=c[1])}catch{}return n}findEntryPoints(e,t){let n=[];["main.py","__main__.py","app.py","run.py","manage.py","server.py","cli.py","setup.py","src/main.py","src/__main__.py","src/app.py"].forEach(i=>{e.includes(i)&&n.push(i)});let s=Ut(t,"setup.py");if(Hn(s))try{let a=Jn(s,"utf-8").match(/entry_points\s*=\s*\{[^}]+\}/s);if(a){let l=a[0].match(/console_scripts\s*:\s*\[([^\]]+)\]/s);if(l){let p=l[1].match(/([^=]+)\s*=\s*([^,]+)/g);p&&p.forEach(u=>{let[m,d]=u.split("=").map(w=>w.trim()),y=d.replace(/\./g,"/").replace(":","/")+".py";n.push(y)})}}}catch{}return[...new Set(n)]}detectCodeStandards(e){let t=[],n={Black:["pyproject.toml","setup.cfg"],Pylint:[".pylintrc","pylintrc","setup.cfg"],Flake8:[".flake8","flake8.cfg","setup.cfg"],Mypy:["mypy.ini",".mypy.ini","setup.cfg","pyproject.toml"],isort:[".isort.cfg","setup.cfg","pyproject.toml"],Bandit:[".bandit","bandit.yml"],Pytest:["pytest.ini","setup.cfg","conftest.py"],EditorConfig:[".editorconfig"]};for(let[r,s]of Object.entries(n))for(let i of s)if(Hn(Ut(e,i)))if(r==="Black")try{if(Jn(Ut(e,i),"utf-8").includes("[tool.black]")){t.push(r);break}}catch{}else{t.push(r);break}return t}getCommonSourceExtensions(){return[".py",".pyc",".pyo",".pyd",".pyx",".pxd",".pxi"]}getCommonTestExtensions(){return[".test.py",".spec.py","_test.py","test_*.py","*_test.py"]}getCommonConfigFiles(){return["pyproject.toml","setup.py","setup.cfg","requirements.txt","requirements-dev.txt","Pipfile","Pipfile.lock","poetry.lock",".pylintrc",".flake8","mypy.ini",".isort.cfg","pytest.ini","conftest.py",".editorconfig"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as $s,readFileSync as Es}from"fs";import{resolve as Qr}from"path";var Zr,ic=S(()=>{$e();Zr=class extends X{getLanguageName(){return"Go"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF08\u4F20\u7EDF Go \u9879\u76EE\u7ED3\u6784\uFF09",cmd:"\u547D\u4EE4\u884C\u5DE5\u5177\u76EE\u5F55\uFF0C\u5305\u542B\u53EF\u6267\u884C\u7A0B\u5E8F\u7684\u5165\u53E3\u70B9",internal:"\u5185\u90E8\u5305\u76EE\u5F55\uFF0C\u4EC5\u672C\u9879\u76EE\u53EF\u4F7F\u7528",pkg:"\u53EF\u5BFC\u51FA\u5305\u76EE\u5F55\uFF0C\u4F9B\u5176\u4ED6\u9879\u76EE\u4F7F\u7528",api:"API \u5B9A\u4E49\u76EE\u5F55",web:"Web \u5E94\u7528\u76F8\u5173\u4EE3\u7801\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",handlers:"\u8BF7\u6C42\u5904\u7406\u5668\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",vendor:"\u7B2C\u4E09\u65B9\u4F9D\u8D56\u5E93\u76EE\u5F55",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Qr(e,"go.mod");if($s(r))try{let a=Es(r,"utf-8").match(/^go\s+(\d+\.\d+)/m);a&&(n.Go=a[1])}catch{}let s=Qr(e,"go.sum");if($s(s))try{let a=Es(s,"utf-8").match(/^golang\.org\/x\/sys\/v\d+\/[^\s]+\s+go(\d+\.\d+)/);a&&!n.Go&&(n.Go=a[1])}catch{}return n}findEntryPoints(e,t){let n=[];return["main.go","cmd/main.go","cmd/app/main.go","cmd/server/main.go","cmd/cli/main.go","src/main.go"].forEach(s=>{e.includes(s)&&n.push(s)}),e.forEach(s=>{if(s.endsWith(".go"))try{Es(Qr(t,s),"utf-8").includes("func main()")&&n.push(s)}catch{}}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={GoFmt:[".gofmt"],GoLint:[".golint"],"GolangCI-Lint":[".golangci.yml",".golangci.yaml"],EditorConfig:[".editorconfig"],GoMod:["go.mod"],GoSum:["go.sum"]};for(let[r,s]of Object.entries(n))for(let i of s)if($s(Qr(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".go",".mod",".sum"]}getCommonTestExtensions(){return["_test.go",".test.go"]}getCommonConfigFiles(){return["go.mod","go.sum",".golangci.yml",".golangci.yaml",".editorconfig","Makefile"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as ac,readFileSync as hg}from"fs";import{resolve as cc}from"path";var eo,lc=S(()=>{$e();eo=class extends X{getLanguageName(){return"Rust"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 Rust \u4EE3\u7801","src/bin":"\u4E8C\u8FDB\u5236\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u591A\u4E2A\u53EF\u6267\u884C\u7A0B\u5E8F","src/lib.rs":"\u5E93\u9879\u76EE\u7684\u4E3B\u5165\u53E3\u6587\u4EF6","src/main.rs":"\u4E8C\u8FDB\u5236\u9879\u76EE\u7684\u4E3B\u5165\u53E3\u6587\u4EF6",target:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6\u548C\u4F9D\u8D56",tests:"\u96C6\u6210\u6D4B\u8BD5\u76EE\u5F55\uFF0C\u5305\u542B\u96C6\u6210\u6D4B\u8BD5\u4EE3\u7801",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",benches:"\u57FA\u51C6\u6D4B\u8BD5\u76EE\u5F55\uFF0C\u5305\u542B\u6027\u80FD\u6D4B\u8BD5\u4EE3\u7801",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",".cargo":"Cargo \u914D\u7F6E\u76EE\u5F55",vendor:"\u7B2C\u4E09\u65B9\u4F9D\u8D56\u5E93\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=cc(e,"Cargo.toml");if(ac(r))try{let i=hg(r,"utf-8").match(/rust-version\s*=\s*['"]([^'"]+)['"]/);i&&(n.Rust=i[1])}catch{}return n}findEntryPoints(e,t){let n=[];return["src/main.rs","src/lib.rs","src/bin/main.rs","src/bin/*.rs"].forEach(s=>{if(s.includes("*")){let i=new RegExp(s.replace(/\*/g,"[^/]*"));e.forEach(a=>{i.test(a)&&n.push(a)})}else e.includes(s)&&n.push(s)}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={Rustfmt:["rustfmt.toml",".rustfmt.toml"],Clippy:["clippy.toml",".clippy.toml"],EditorConfig:[".editorconfig"],Cargo:["Cargo.toml","Cargo.lock"]};for(let[r,s]of Object.entries(n))for(let i of s)if(ac(cc(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".rs",".toml",".lock"]}getCommonTestExtensions(){return["_test.rs",".test.rs","tests/*.rs"]}getCommonConfigFiles(){return["Cargo.toml","Cargo.lock","rustfmt.toml","clippy.toml",".editorconfig","Makefile"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as Ms,readFileSync as uc}from"fs";import{resolve as Is}from"path";var to,gc=S(()=>{$e();to=class extends X{getLanguageName(){return"PHP"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 PHP \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",public:"\u516C\u5171\u8BBF\u95EE\u76EE\u5F55\uFF0C\u5305\u542B\u5165\u53E3\u6587\u4EF6\u548C\u9759\u6001\u8D44\u6E90","index.php":"\u7F51\u7AD9\u5165\u53E3\u6587\u4EF6",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",vendor:"Composer \u4F9D\u8D56\u5E93\u76EE\u5F55",composer:"Composer \u76F8\u5173\u6587\u4EF6\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",controllers:"\u63A7\u5236\u5668\u76EE\u5F55",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55",views:"\u89C6\u56FE\u6A21\u677F\u76EE\u5F55",routes:"\u8DEF\u7531\u5B9A\u4E49\u76EE\u5F55",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=Is(e,"composer.json");if(Ms(r))try{let i=uc(r,"utf-8"),a=JSON.parse(i);a.require&&a.require.php&&(n.PHP=a.require.php)}catch{}let s=Is(e,".php-version");if(Ms(s))try{let i=uc(s,"utf-8");n.PHP=i.trim()}catch{}return n}findEntryPoints(e,t){let n=[];return["index.php","public/index.php","app/index.php","src/index.php","cli.php","artisan","bin/console","composer.json"].forEach(s=>{e.includes(s)&&n.push(s)}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={PHP_CodeSniffer:["phpcs.xml","phpcs.xml.dist",".phpcs.xml",".phpcs.xml.dist"],PHPStan:["phpstan.neon","phpstan.neon.dist","phpstan.yml","phpstan.yml.dist"],Psalm:["psalm.xml","psalm.xml.dist","psalm.yml","psalm.yml.dist"],"PHP-CS-Fixer":[".php-cs-fixer.php",".php-cs-fixer.dist.php"],EditorConfig:[".editorconfig"],PHPUnit:["phpunit.xml","phpunit.xml.dist"],Composer:["composer.json","composer.lock"]};for(let[r,s]of Object.entries(n))for(let i of s)if(Ms(Is(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".php",".phtml",".phar",".json",".lock"]}getCommonTestExtensions(){return[".test.php",".spec.php","Test.php","Tests.php","tests/*.php"]}getCommonConfigFiles(){return["composer.json","composer.lock","phpcs.xml","phpstan.neon","psalm.xml",".php-cs-fixer.php","phpunit.xml",".editorconfig",".php-version"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as As,readFileSync as pc}from"fs";import{resolve as Ls}from"path";var no,mc=S(()=>{$e();no=class extends X{getLanguageName(){return"Ruby"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 Ruby \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",vendor:"\u7B2C\u4E09\u65B9\u4F9D\u8D56\u5E93\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",controllers:"\u63A7\u5236\u5668\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",views:"\u89C6\u56FE\u6A21\u677F\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",routes:"\u8DEF\u7531\u5B9A\u4E49\u76EE\u5F55\uFF08Rails \u9879\u76EE\uFF09",middleware:"\u4E2D\u95F4\u4EF6\u76EE\u5F55",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",spec:"RSpec \u6D4B\u8BD5\u76EE\u5F55",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",build:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",Gemfile:"RubyGems \u4F9D\u8D56\u914D\u7F6E\u6587\u4EF6"}}async detectVersions(e,t){let n={},r=Ls(e,".ruby-version");if(As(r))try{let i=pc(r,"utf-8");n.Ruby=i.trim()}catch{}let s=Ls(e,"Gemfile");if(As(s))try{let a=pc(s,"utf-8").match(/ruby\s+['"]([^'"]+)['"]/);a&&!n.Ruby&&(n.Ruby=a[1])}catch{}return n}findEntryPoints(e,t){let n=[];return["main.rb","app.rb","bin/rails","bin/rake","bin/console","config.ru","Rakefile","Gemfile"].forEach(s=>{e.includes(s)&&n.push(s)}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={RuboCop:[".rubocop.yml",".rubocop.yaml",".rubocop_todo.yml"],RSpec:["spec/spec_helper.rb","spec/rails_helper.rb"],Minitest:["test/test_helper.rb"],EditorConfig:[".editorconfig"],Bundler:["Gemfile","Gemfile.lock"]};for(let[r,s]of Object.entries(n))for(let i of s)if(As(Ls(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".rb",".gemspec",".rake",".ru",".lock"]}getCommonTestExtensions(){return["_test.rb",".test.rb","test_*.rb","*_test.rb","spec/**/*.rb","test/**/*.rb"]}getCommonConfigFiles(){return["Gemfile","Gemfile.lock",".rubocop.yml",".ruby-version",".ruby-gemset","Rakefile","config.ru",".editorconfig"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});import{existsSync as dc,readFileSync as fc}from"fs";import{resolve as Rs}from"path";import{globSync as Ds}from"glob";var ro,hc=S(()=>{$e();ro=class extends X{getLanguageName(){return".NET"}getDirectoryDescriptions(){return{...this.getCommonDirectoryDescriptions(),src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4E3B\u8981\u7684 .NET \u4EE3\u7801",app:"\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801\u76EE\u5F55",bin:"\u7F16\u8BD1\u8F93\u51FA\u76EE\u5F55\uFF0C\u5305\u542B\u7F16\u8BD1\u540E\u7684\u4E8C\u8FDB\u5236\u6587\u4EF6",obj:"\u4E2D\u95F4\u7F16\u8BD1\u8F93\u51FA\u76EE\u5F55",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",libs:"\u5E93\u6587\u4EF6\u76EE\u5F55",packages:"NuGet \u5305\u76EE\u5F55",nuget:"NuGet \u76F8\u5173\u6587\u4EF6\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55",Controllers:"\u63A7\u5236\u5668\u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",Models:"\u6570\u636E\u6A21\u578B\u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",Views:"\u89C6\u56FE\u6A21\u677F\u76EE\u5F55\uFF08ASP.NET MVC \u9879\u76EE\uFF09",Pages:"Razor Pages \u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",wwwroot:"\u9759\u6001\u8D44\u6E90\u76EE\u5F55\uFF08ASP.NET \u9879\u76EE\uFF09",services:"\u4E1A\u52A1\u903B\u8F91\u670D\u52A1\u76EE\u5F55",helpers:"\u8F85\u52A9\u51FD\u6570\u76EE\u5F55",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",scripts:"\u811A\u672C\u76EE\u5F55\uFF0C\u5305\u542B\u6784\u5EFA\u3001\u90E8\u7F72\u7B49\u811A\u672C",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55"}}async detectVersions(e,t){let n={},r=[...Ds("*.csproj",{cwd:e}),...Ds("*.vbproj",{cwd:e}),...Ds("*.fsproj",{cwd:e})];for(let i of r)try{let a=Rs(e,i),c=fc(a,"utf-8"),l=c.match(/<TargetFramework>([^<]+)<\/TargetFramework>/)||c.match(/<TargetFrameworks>([^<]+)<\/TargetFrameworks>/);if(l){n[".NET Framework"]=l[1];break}let g=c.match(/<LangVersion>([^<]+)<\/LangVersion>/);g&&(n["C# Version"]=g[1])}catch{}let s=Rs(e,"global.json");if(dc(s))try{let i=fc(s,"utf-8"),a=JSON.parse(i);a.sdk&&a.sdk.version&&(n[".NET SDK"]=a.sdk.version)}catch{}return n}findEntryPoints(e,t){let n=[];return["Program.cs","Startup.cs","App.xaml.cs","MainWindow.xaml.cs","Program.vb","Startup.vb","App.xaml.vb","MainWindow.xaml.vb","Program.fs","Startup.fs"].forEach(s=>{e.includes(s)&&n.push(s)}),[...new Set(n)]}detectCodeStandards(e){let t=[],n={StyleCop:[".stylecop","stylecop.json","stylecop.ruleset"],EditorConfig:[".editorconfig"],xUnit:["xunit.runner.json"],NUnit:["nunit.config","nunit3.config"],MSTest:["app.config","web.config"],NuGet:["nuget.config","packages.config"]};for(let[r,s]of Object.entries(n))for(let i of s)if(dc(Rs(e,i))){t.push(r);break}return t}getCommonSourceExtensions(){return[".cs",".vb",".fs",".csproj",".vbproj",".fsproj",".config",".json",".xml"]}getCommonTestExtensions(){return["Test.cs","Tests.cs","Test.vb","Tests.vb","Test.fs","Tests.fs","*Test.csproj","*Tests.csproj"]}getCommonConfigFiles(){return["*.csproj","*.vbproj","*.fsproj","appsettings.json","app.config","web.config","nuget.config","packages.config","global.json",".editorconfig"]}async analyzeDependencies(e,t){return{dependencies:[],conflicts:[],recommendations:[]}}}});var Os,Wt,yc=S(()=>{rc();oc();sc();ic();lc();gc();mc();hc();Os=class o{static instance;handlers=new Map;constructor(){this.registerHandlers()}static getInstance(){return o.instance||(o.instance=new o),o.instance}registerHandlers(){[new Kr,new Yr,new Xr,new Zr,new eo,new to,new no,new ro].forEach(t=>{let n=t.getLanguageName();this.handlers.set(n.toLowerCase(),t),this.registerLanguageAliases(n,t)})}registerLanguageAliases(e,t){let n={"javascript/typescript":["javascript","typescript","node.js","nodejs"],java:["java","jdk","jvm"],python:["python","py"],go:["go","golang"],rust:["rust","rs"],php:["php"],ruby:["ruby","rb"],".net":["c#/.net","csharp","dotnet",".net","vb.net","f#"]},r=e.toLowerCase();n[r]&&n[r].forEach(s=>{this.handlers.set(s.toLowerCase(),t)})}getHandler(e){if(!e)return null;let t=e.toLowerCase();return this.handlers.get(t)||null}getSupportedLanguages(){return Array.from(new Set(Array.from(this.handlers.values()).map(e=>e.getLanguageName())))}getDirectoryDescriptions(e){let t=this.getHandler(e);return t?t.getDirectoryDescriptions():{src:"\u6E90\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u6240\u6709\u4E3B\u8981\u7684\u5E94\u7528\u7A0B\u5E8F\u4EE3\u7801",test:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",tests:"\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5",docs:"\u6587\u6863\u76EE\u5F55\uFF0C\u5305\u542B\u9879\u76EE\u6587\u6863\u548C\u8BF4\u660E",examples:"\u793A\u4F8B\u4EE3\u7801\u76EE\u5F55\uFF0C\u5305\u542B\u4F7F\u7528\u793A\u4F8B",bin:"\u53EF\u6267\u884C\u6587\u4EF6\u76EE\u5F55\uFF0C\u5305\u542B CLI \u547D\u4EE4\u811A\u672C",lib:"\u5E93\u6587\u4EF6\u76EE\u5F55",dist:"\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55",build:"\u6784\u5EFA\u811A\u672C\u548C\u914D\u7F6E\u76EE\u5F55",config:"\u914D\u7F6E\u6587\u4EF6\u76EE\u5F55"}}async detectVersions(e,t,n){let r=this.getHandler(e);return r?await r.detectVersions(t,n):{}}findEntryPoints(e,t,n){let r=this.getHandler(e);return r?r.findEntryPoints(t,n):[]}detectCodeStandards(e,t){let n=this.getHandler(e);return n?n.detectCodeStandards(t):[]}getCommonSourceExtensions(e){let t=this.getHandler(e);return t?t.getCommonSourceExtensions():[]}getCommonTestExtensions(e){let t=this.getHandler(e);return t?t.getCommonTestExtensions():[]}getCommonConfigFiles(e){let t=this.getHandler(e);return t?t.getCommonConfigFiles():[]}getDirectoryDescriptionsForLanguages(e){let t={};return e.forEach(n=>{let r=this.getDirectoryDescriptions(n);Object.assign(t,r)}),t}async detectVersionsForLanguages(e,t,n){let r={};for(let s of e){let i=await this.detectVersions(s,t,n);Object.assign(r,i)}return r}findEntryPointsForLanguages(e,t,n){let r=[];for(let s of e){let i=this.findEntryPoints(s,t,n);r.push(...i)}return[...new Set(r)]}detectCodeStandardsForLanguages(e,t){let n=[];for(let r of e){let s=this.detectCodeStandards(r,t);n.push(...s)}return[...new Set(n)]}},Wt=Os.getInstance()});var Sc={};j(Sc,{QuickProjectScanTool:()=>at,quickProjectScan:()=>zt,quickProjectScanTool:()=>Vt});import{existsSync as it}from"fs";import{globSync as yg}from"glob";async function zt(){return Cc.execute({})}var at,Cc,Vt,Fs=S(()=>{q();kr();Ba();Xa();tc();yc();at=class extends E{getDefinition(){return{name:"quickProjectScan",description:"Quickly scan the entire project structure, analyze directories, detect languages, and save project information to .nium/project/project.json. Use this when the user asks to explore or analyze the project structure.",input_schema:{type:"object",properties:{},required:[]}}}async execute(e){try{let t=[],n=process.cwd();t.push(`\u{1F50D} \u5F00\u59CB\u63A2\u7D22\u5DE5\u7A0B\u7ED3\u6784...
|
|
1286
|
-
`),t.push("\u{1F4C2} \u626B\u63CF\u9879\u76EE\u6587\u4EF6...");let r
|
|
1287
|
-
`),t.push("\u{1F4CB} \u68C0\u6D4B\u9879\u76EE\u7C7B\u578B\u548C\u914D\u7F6E...");let c=
|
|
1288
|
-
`)}catch(t){return this.formatError("Quick project scan",t)}}detectProjectLanguages(e){let t={".js":"JavaScript",".mjs":"JavaScript (ES Modules)",".cjs":"JavaScript (CommonJS)",".jsx":"React JavaScript",".ts":"TypeScript",".tsx":"React TypeScript",".java":"Java",".class":"Java",".jar":"Java","pom.xml":"Java (Maven)","build.gradle":"Java (Gradle)",".py":"Python","requirements.txt":"Python","setup.py":"Python","pyproject.toml":"Python",".c":"C",".cpp":"C++",".h":"C/C++",".hpp":"C++","CMakeLists.txt":"C/C++ (CMake)",".go":"Go","go.mod":"Go",".rs":"Rust","Cargo.toml":"Rust",".php":"PHP","composer.json":"PHP (Composer)",".rb":"Ruby",Gemfile:"Ruby",".cs":"C#",".vb":"Visual Basic","packages.config":".NET",".html":"HTML",".css":"CSS",".scss":"SCSS",".less":"Less",".json":"JSON",".xml":"XML",".yml":"YAML",".yaml":"YAML",".md":"Markdown"},n={};e.forEach(a=>{if(t[a]){n[t[a]]=(n[t[a]]||0)+1;return}let c=a.lastIndexOf(".");if(c>-1){let l=a.substring(c);t[l]&&(n[t[l]]=(n[t[l]]||0)+1)}});let r=Object.entries(n).map(([a,c])=>({language:a,count:c})).sort((a,c)=>c.count-a.count),[s]=r;return{primaryLanguage:s?.language||null,languages:r,totalSourceFiles:r.reduce((a,c)=>a+c.count,0)}}analyzeDirectoryStructure(e){let t={directories:new Set,sourceFiles:[],configFiles:[],docFiles:[],testFiles:[]},n=[".js",".mjs",".cjs",".jsx",".ts",".tsx",".java",".py",".c",".cpp",".cc",".cxx",".h",".hpp",".go",".rs",".php",".rb",".cs",".kt",".kts",".scala",".swift",".m",".mm"],r=[".json",".yaml",".yml",".toml",".ini",".xml",".properties"],s=["package.json","tsconfig.json","pom.xml","build.gradle","settings.gradle","gradle.properties","Cargo.toml","go.mod","requirements.txt","setup.py","pyproject.toml","composer.json","Gemfile",".env",".env.example"];return e.forEach(i=>{let a=i.split("/");if(a.length>1&&t.directories.add(a[0]),i.includes("test")||i.includes("spec")||i.startsWith("test/")||i.startsWith("tests/")||i.includes("__tests__")||i.endsWith(".test.js")||i.endsWith(".test.ts")||i.endsWith(".spec.js")||i.endsWith(".spec.ts")||i.endsWith("Test.java")||i.endsWith("Tests.java")){t.testFiles.push(i);return}let c=i.split("/").pop()||"",l=c.includes(".")?"."+c.split(".").pop():"";i.startsWith("src/")||i.startsWith("lib/")||i.startsWith("app/"),n.includes(l)&&t.sourceFiles.push(i),(r.includes(l)||s.includes(c))&&t.configFiles.push(i),(l===".md"||l===".txt"||l===".rst"||c==="README"||c==="CHANGELOG"||c==="LICENSE"||c==="CONTRIBUTING")&&t.docFiles.push(i)}),{directories:Array.from(t.directories).sort(),sourceFiles:t.sourceFiles.sort(),configFiles:t.configFiles.sort(),docFiles:t.docFiles.sort(),testFiles:t.testFiles.sort()}}async detectVersions(e,t){try{return await
|
|
1289
|
-
`):"\u6682\u65E0\u7248\u672C\u4FE1\u606F",p=a.length>0?a.map(
|
|
1387
|
+
`,"utf-8")}catch(t){throw console.error(`\u274C \u5199\u5165 JSONL \u6587\u4EF6\u5931\u8D25: ${e}`,t),t}}function Vc(o,e,t=process.cwd(),n=!0){n&&console.log(` \u{1F4D6} \u6B63\u5728\u8BFB\u53D6\u73B0\u6709\u6587\u4EF6\u4FE1\u606F: ${e}`);let r=gp(e),s={added:0,updated:0,deleted:0,unchanged:0},i=new Map,a=new Set(o),c=o.length,l=0,u=Date.now();n&&(console.log(` \u{1F4CB} \u8BFB\u53D6\u73B0\u6709\u6587\u4EF6\u4FE1\u606F\u5B8C\u6210\uFF0C\u5DF2\u6709 ${r.size} \u6761\u8BB0\u5F55`),console.log(` \u{1F680} \u5F00\u59CB\u5904\u7406 ${c} \u4E2A\u6587\u4EF6...`));for(let p of o){if(l++,n&&l===1&&console.log(` \u{1F504} \u5904\u7406\u7B2C 1 \u4E2A\u6587\u4EF6: ${p}`),n&&l%50===0){let m=(l/c*100).toFixed(1),h=((Date.now()-u)/1e3).toFixed(1);console.log(` \u{1F4CA} \u5904\u7406\u8FDB\u5EA6: ${l}/${c} (${m}%) - \u5DF2\u7528\u65F6 ${h}s`)}let g=r.get(p),d=up(p,t);d&&(g?g.md5!==d.md5?(i.set(p,{...d,description:g.description}),s.updated++):(i.set(p,g),s.unchanged++):(i.set(p,d),s.added++))}if(n){let p=((Date.now()-u)/1e3).toFixed(1);console.log(` \u2705 \u6587\u4EF6\u5904\u7406\u5B8C\u6210: ${c} \u4E2A\u6587\u4EF6, \u603B\u7528\u65F6 ${p}s`)}n&&console.log(" \u{1F50D} \u6B63\u5728\u68C0\u6D4B\u5DF2\u5220\u9664\u7684\u6587\u4EF6...");for(let[p]of r)a.has(p)||s.deleted++;return n&&console.log(` \u{1F4CA} \u68C0\u6D4B\u5230 ${s.deleted} \u4E2A\u5DF2\u5220\u9664\u7684\u6587\u4EF6`),n&&console.log(` \u{1F4BE} \u6B63\u5728\u5199\u5165 ${i.size} \u6761\u6587\u4EF6\u4FE1\u606F\u5230 JSONL...`),pp(i,e),n&&console.log(" \u2705 JSONL \u6587\u4EF6\u5199\u5165\u5B8C\u6210"),s}function zc(o){let e=o.added+o.updated+o.deleted+o.unchanged,t=[];return t.push("\u{1F4C4} \u6587\u4EF6\u4FE1\u606F\u66F4\u65B0\u6458\u8981"),t.push("\u2500".repeat(40)),t.push(`\u603B\u6587\u4EF6\u6570: ${e}`),o.added>0&&t.push(`\u2795 \u65B0\u589E: ${o.added} \u4E2A\u6587\u4EF6`),o.updated>0&&t.push(`\u{1F504} \u66F4\u65B0: ${o.updated} \u4E2A\u6587\u4EF6`),o.deleted>0&&t.push(`\u2796 \u5220\u9664: ${o.deleted} \u4E2A\u6587\u4EF6`),o.unchanged>0&&t.push(`\u2705 \u672A\u53D8: ${o.unchanged} \u4E2A\u6587\u4EF6`),t.push("\u2500".repeat(40)),t.join(`
|
|
1388
|
+
`)}var Hc=C(()=>{});var Gc={};j(Gc,{QuickProjectScanTool:()=>pt,quickProjectScan:()=>qt,quickProjectScanTool:()=>Kt});import{existsSync as gt}from"fs";import{globSync as dp}from"glob";async function qt(){return Jc.execute({})}var pt,Jc,Kt,Ys=C(()=>{V();Dt();Oc();Uc();Hc();bs();pt=class extends ${getDefinition(){return{name:"quickProjectScan",description:"Quickly scan the entire project structure, analyze directories, detect languages, and save project information to .nium/project/project.json. Use this when the user asks to explore or analyze the project structure.",input_schema:{type:"object",properties:{},required:[]}}}async execute(e){try{let t=[],n=process.cwd();t.push(`\u{1F50D} \u5F00\u59CB\u63A2\u7D22\u5DE5\u7A0B\u7ED3\u6784...
|
|
1389
|
+
`),t.push("\u{1F4C2} \u626B\u63CF\u9879\u76EE\u6587\u4EF6...");let r=Ee(n,!0);t.push(` - \u5E94\u7528 ${r.length} \u6761\u5FFD\u7565\u89C4\u5219`);let s=Date.now(),i=dp("**/*",{nodir:!0,ignore:r,cwd:n}),a=((Date.now()-s)/1e3).toFixed(1);t.push(`\u627E\u5230 ${i.length} \u4E2A\u76F8\u5173\u6587\u4EF6 (\u8017\u65F6 ${a}s)
|
|
1390
|
+
`),t.push("\u{1F4CB} \u68C0\u6D4B\u9879\u76EE\u7C7B\u578B\u548C\u914D\u7F6E...");let c=Fc(n);c.length>0&&t.push(` - \u68C0\u6D4B\u5230\u9879\u76EE\u7C7B\u578B: ${c.join(", ")}`);let l=await Rc(n),u={name:l.name,version:l.version,description:l.description,dependencies:l.dependencies||{},devDependencies:l.devDependencies||{}};t.push(` - \u9879\u76EE\u540D\u79F0: ${u.name}`),t.push(` - \u7248\u672C: ${u.version}`),t.push(` - \u8BED\u8A00: ${l.primaryLanguage}`),l.buildTool&&t.push(` - \u6784\u5EFA\u5DE5\u5177: ${l.buildTool}`),t.push(""),t.push("\u{1F5C2}\uFE0F \u5206\u6790\u76EE\u5F55\u7ED3\u6784...");let p=this.analyzeDirectoryStructure(i);t.push(""),t.push("\u{1F310} \u68C0\u6D4B\u9879\u76EE\u7F16\u7A0B\u8BED\u8A00...");let g=this.detectProjectLanguages(i);t.push(`\u4E3B\u8981\u7F16\u7A0B\u8BED\u8A00: ${g.primaryLanguage||l.primaryLanguage||"\u672A\u77E5"}`),g.languages.length>0&&t.push(`\u68C0\u6D4B\u5230 ${g.languages.length} \u79CD\u7F16\u7A0B\u8BED\u8A00`),t.push(""),t.push("\u2699\uFE0F \u68C0\u6D4B\u8FD0\u884C\u65F6\u7248\u672C...");let d=await this.detectVersions(l,n);if(Object.keys(d).length>0)for(let[S,E]of Object.entries(d))t.push(` - ${S}: ${E}`);else t.push(" - \u672A\u68C0\u6D4B\u5230\u7248\u672C\u4FE1\u606F");t.push(""),t.push("\u{1F4D0} \u68C0\u6D4B\u4EE3\u7801\u89C4\u8303...");let m=this.detectCodeStandards(n,l.languages);m.length>0?t.push(` - \u68C0\u6D4B\u5230\u4EE3\u7801\u89C4\u8303: ${m.join(", ")}`):t.push(" - \u672A\u68C0\u6D4B\u5230\u4EE3\u7801\u89C4\u8303\u914D\u7F6E"),t.push(""),t.push("\u{1F4CB} \u5206\u6790\u9879\u76EE\u4F9D\u8D56...");let h=await this.analyzeDependencies(n,l.languages),w=Object.values(h).reduce((S,E)=>S+(E.dependencies?.length||0),0),v=Object.values(h).reduce((S,E)=>S+(E.conflicts?.length||0),0);t.push(` - \u4F9D\u8D56\u603B\u6570: ${w}`),v>0&&t.push(` - \u4F9D\u8D56\u51B2\u7A81: ${v}`),t.push(""),t.push("\u2705 \u9879\u76EE\u7ED3\u6784\u5206\u6790\u5B8C\u6210"),t.push(""),t.push("\u{1F4BE} \u4FDD\u5B58\u9879\u76EE\u57FA\u7840\u4FE1\u606F...");let T=this.buildProjectBasicInfo(u,p,i,g,l,d,m,h);try{_c(T,n),t.push("\u2705 \u9879\u76EE\u57FA\u7840\u4FE1\u606F\u5DF2\u4FDD\u5B58\u81F3: .nium/project/"),t.push("")}catch(S){console.error(" \u274C \u4FDD\u5B58\u9879\u76EE\u4FE1\u606F\u5931\u8D25:",S),t.push(`\u26A0\uFE0F \u4FDD\u5B58\u9879\u76EE\u4FE1\u606F\u5931\u8D25: ${S instanceof Error?S.message:"\u672A\u77E5\u9519\u8BEF"}`),t.push("")}t.push("\u{1F4DD} \u66F4\u65B0\u6587\u4EF6\u4FE1\u606F\u5217\u8868...");let f=`${n}/.nium/project/files.jsonl`;try{let S=Date.now(),E=Vc(i,f,n),P=((Date.now()-S)/1e3).toFixed(1);t.push("\u2705 \u6587\u4EF6\u4FE1\u606F\u5DF2\u66F4\u65B0\u81F3: .nium/project/files.jsonl"),t.push("");let L=zc(E);t.push(L),t.push("")}catch(S){console.error(" \u274C \u66F4\u65B0\u6587\u4EF6\u4FE1\u606F\u5931\u8D25:",S),t.push(`\u26A0\uFE0F \u66F4\u65B0\u6587\u4EF6\u4FE1\u606F\u5931\u8D25: ${S instanceof Error?S.message:"\u672A\u77E5\u9519\u8BEF"}`),t.push("")}let y=this.generateSummary(u,p,g,l);return t.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),t.push("\u9879\u76EE\u7ED3\u6784\u6982\u89C8"),t.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),t.push(y),t.push("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"),t.push(""),t.join(`
|
|
1391
|
+
`)}catch(t){return this.formatError("Quick project scan",t)}}detectProjectLanguages(e){let t={".js":"JavaScript",".mjs":"JavaScript (ES Modules)",".cjs":"JavaScript (CommonJS)",".jsx":"React JavaScript",".ts":"TypeScript",".tsx":"React TypeScript",".java":"Java",".class":"Java",".jar":"Java","pom.xml":"Java (Maven)","build.gradle":"Java (Gradle)",".py":"Python","requirements.txt":"Python","setup.py":"Python","pyproject.toml":"Python",".c":"C",".cpp":"C++",".h":"C/C++",".hpp":"C++","CMakeLists.txt":"C/C++ (CMake)",".go":"Go","go.mod":"Go",".rs":"Rust","Cargo.toml":"Rust",".php":"PHP","composer.json":"PHP (Composer)",".rb":"Ruby",Gemfile:"Ruby",".cs":"C#",".vb":"Visual Basic","packages.config":".NET",".html":"HTML",".css":"CSS",".scss":"SCSS",".less":"Less",".json":"JSON",".xml":"XML",".yml":"YAML",".yaml":"YAML",".md":"Markdown"},n={};e.forEach(a=>{if(t[a]){n[t[a]]=(n[t[a]]||0)+1;return}let c=a.lastIndexOf(".");if(c>-1){let l=a.substring(c);t[l]&&(n[t[l]]=(n[t[l]]||0)+1)}});let r=Object.entries(n).map(([a,c])=>({language:a,count:c})).sort((a,c)=>c.count-a.count),[s]=r;return{primaryLanguage:s?.language||null,languages:r,totalSourceFiles:r.reduce((a,c)=>a+c.count,0)}}analyzeDirectoryStructure(e){let t={directories:new Set,sourceFiles:[],configFiles:[],docFiles:[],testFiles:[]},n=[".js",".mjs",".cjs",".jsx",".ts",".tsx",".java",".py",".c",".cpp",".cc",".cxx",".h",".hpp",".go",".rs",".php",".rb",".cs",".kt",".kts",".scala",".swift",".m",".mm"],r=[".json",".yaml",".yml",".toml",".ini",".xml",".properties"],s=["package.json","tsconfig.json","pom.xml","build.gradle","settings.gradle","gradle.properties","Cargo.toml","go.mod","requirements.txt","setup.py","pyproject.toml","composer.json","Gemfile",".env",".env.example"];return e.forEach(i=>{let a=i.split("/");if(a.length>1&&t.directories.add(a[0]),i.includes("test")||i.includes("spec")||i.startsWith("test/")||i.startsWith("tests/")||i.includes("__tests__")||i.endsWith(".test.js")||i.endsWith(".test.ts")||i.endsWith(".spec.js")||i.endsWith(".spec.ts")||i.endsWith("Test.java")||i.endsWith("Tests.java")){t.testFiles.push(i);return}let c=i.split("/").pop()||"",l=c.includes(".")?"."+c.split(".").pop():"";i.startsWith("src/")||i.startsWith("lib/")||i.startsWith("app/"),n.includes(l)&&t.sourceFiles.push(i),(r.includes(l)||s.includes(c))&&t.configFiles.push(i),(l===".md"||l===".txt"||l===".rst"||c==="README"||c==="CHANGELOG"||c==="LICENSE"||c==="CONTRIBUTING")&&t.docFiles.push(i)}),{directories:Array.from(t.directories).sort(),sourceFiles:t.sourceFiles.sort(),configFiles:t.configFiles.sort(),docFiles:t.docFiles.sort(),testFiles:t.testFiles.sort()}}async detectVersions(e,t){try{return await Ue.detectVersionsForLanguages(e.languages,t,e.configFiles)}catch{return{}}}detectCodeStandards(e,t){try{return Ue.detectCodeStandardsForLanguages(t,e)}catch{return[]}}async analyzeDependencies(e,t){let n={};try{for(let r of t){let s=Ue.getHandler(r);if(s){let i=await s.analyzeDependencies(e);n[r.toLowerCase()]=i}}}catch(r){console.error("\u4F9D\u8D56\u5206\u6790\u5931\u8D25:",r)}return n}analyzeCoreModules(e){let t=[],n=new Map;e.sourceFiles.forEach(s=>{let i=s.split("/");if(i.length>=2){let a=i.slice(0,2).join("/");n.has(a)||n.set(a,[]),n.get(a).push(s)}});let r={core:"\u6838\u5FC3\u4E1A\u52A1\u903B\u8F91",domain:"\u9886\u57DF\u6A21\u578B\u548C\u4E1A\u52A1\u89C4\u5219",business:"\u4E1A\u52A1\u903B\u8F91\u5C42",service:"\u670D\u52A1\u5C42",services:"\u670D\u52A1\u5C42",model:"\u6570\u636E\u6A21\u578B",models:"\u6570\u636E\u6A21\u578B",entity:"\u5B9E\u4F53\u7C7B",entities:"\u5B9E\u4F53\u7C7B",dao:"\u6570\u636E\u8BBF\u95EE\u5BF9\u8C61",repository:"\u6570\u636E\u4ED3\u5E93\u5C42",repositories:"\u6570\u636E\u4ED3\u5E93\u5C42",db:"\u6570\u636E\u5E93\u64CD\u4F5C",database:"\u6570\u636E\u5E93\u64CD\u4F5C",persistence:"\u6301\u4E45\u5316\u5C42",api:"API \u63A5\u53E3",rest:"REST API",controller:"\u63A7\u5236\u5668",controllers:"\u63A7\u5236\u5668",handler:"\u8BF7\u6C42\u5904\u7406\u5668",handlers:"\u8BF7\u6C42\u5904\u7406\u5668",endpoint:"\u7AEF\u70B9\u5B9A\u4E49",endpoints:"\u7AEF\u70B9\u5B9A\u4E49",route:"\u8DEF\u7531\u5B9A\u4E49",routes:"\u8DEF\u7531\u5B9A\u4E49",view:"\u89C6\u56FE\u5C42",views:"\u89C6\u56FE\u5C42",component:"\u7EC4\u4EF6",components:"\u7EC4\u4EF6",ui:"\u7528\u6237\u754C\u9762",page:"\u9875\u9762",pages:"\u9875\u9762",layout:"\u5E03\u5C40",layouts:"\u5E03\u5C40",template:"\u6A21\u677F",templates:"\u6A21\u677F",util:"\u5DE5\u5177\u51FD\u6570",utils:"\u5DE5\u5177\u51FD\u6570",helper:"\u8F85\u52A9\u51FD\u6570",helpers:"\u8F85\u52A9\u51FD\u6570",lib:"\u5E93\u6587\u4EF6",libs:"\u5E93\u6587\u4EF6",common:"\u516C\u5171\u6A21\u5757",shared:"\u5171\u4EAB\u6A21\u5757",config:"\u914D\u7F6E\u7BA1\u7406",configuration:"\u914D\u7F6E\u7BA1\u7406",settings:"\u8BBE\u7F6E\u7BA1\u7406",constant:"\u5E38\u91CF\u5B9A\u4E49",constants:"\u5E38\u91CF\u5B9A\u4E49",enum:"\u679A\u4E3E\u5B9A\u4E49",enums:"\u679A\u4E3E\u5B9A\u4E49",middleware:"\u4E2D\u95F4\u4EF6",middlewares:"\u4E2D\u95F4\u4EF6",interceptor:"\u62E6\u622A\u5668",interceptors:"\u62E6\u622A\u5668",filter:"\u8FC7\u6EE4\u5668",filters:"\u8FC7\u6EE4\u5668",guard:"\u5B88\u536B",guards:"\u5B88\u536B",client:"\u5BA2\u6237\u7AEF",clients:"\u5BA2\u6237\u7AEF",adapter:"\u9002\u914D\u5668",adapters:"\u9002\u914D\u5668",provider:"\u63D0\u4F9B\u5546",providers:"\u63D0\u4F9B\u5546",integration:"\u5916\u90E8\u96C6\u6210",integrations:"\u5916\u90E8\u96C6\u6210",auth:"\u8BA4\u8BC1\u6388\u6743",authentication:"\u8BA4\u8BC1",authorization:"\u6388\u6743",security:"\u5B89\u5168\u6A21\u5757",cli:"\u547D\u4EE4\u884C\u63A5\u53E3",cmd:"\u547D\u4EE4\u884C\u5DE5\u5177",script:"\u811A\u672C",scripts:"\u811A\u672C",tool:"\u5DE5\u5177",tools:"\u5DE5\u5177\u96C6",test:"\u6D4B\u8BD5",tests:"\u6D4B\u8BD5",spec:"\u6D4B\u8BD5\u89C4\u8303",mock:"\u6A21\u62DF\u6570\u636E",mocks:"\u6A21\u62DF\u6570\u636E",fixture:"\u6D4B\u8BD5\u5939\u5177",fixtures:"\u6D4B\u8BD5\u5939\u5177",type:"\u7C7B\u578B\u5B9A\u4E49",types:"\u7C7B\u578B\u5B9A\u4E49",interface:"\u63A5\u53E3\u5B9A\u4E49",interfaces:"\u63A5\u53E3\u5B9A\u4E49",schema:"\u6570\u636E\u7ED3\u6784\u5B9A\u4E49",schemas:"\u6570\u636E\u7ED3\u6784\u5B9A\u4E49",dto:"\u6570\u636E\u4F20\u8F93\u5BF9\u8C61",vo:"\u503C\u5BF9\u8C61",event:"\u4E8B\u4EF6",events:"\u4E8B\u4EF6",exception:"\u5F02\u5E38\u5904\u7406",exceptions:"\u5F02\u5E38\u5904\u7406",error:"\u9519\u8BEF\u5904\u7406",errors:"\u9519\u8BEF\u5904\u7406",validator:"\u9A8C\u8BC1\u5668",validators:"\u9A8C\u8BC1\u5668",decorator:"\u88C5\u9970\u5668",decorators:"\u88C5\u9970\u5668"};return n.forEach((s,i)=>{if(s.length>=2){let a=i.split("/").pop()||i,c=a.toLowerCase(),l=r[c]||`${a} \u6A21\u5757`;t.push({name:a.charAt(0).toUpperCase()+a.slice(1),description:l,files:s})}}),t.slice(0,10)}generateProjectStructureDoc(e,t,n,r,s,i,a){let c=new Date().toISOString(),l=this.analyzeCoreModules(t),u=Object.keys(i).length>0?Object.entries(i).map(([g,d])=>`**${g}**: ${d}`).join(`
|
|
1392
|
+
`):"\u6682\u65E0\u7248\u672C\u4FE1\u606F",p=a.length>0?a.map(g=>`- ${g}`).join(`
|
|
1290
1393
|
`):"\u6682\u65E0\u4EE3\u7801\u89C4\u8303\u914D\u7F6E";return`# ${e.name} - \u9879\u76EE\u7ED3\u6784\u6587\u6863
|
|
1291
1394
|
|
|
1292
1395
|
> \u6700\u540E\u66F4\u65B0: ${c}
|
|
@@ -1301,7 +1404,7 @@ ${Array.from(u.entries()).map(([w,h])=>`${w}: ${h}`).join(`
|
|
|
1301
1404
|
${s.buildTool?`**\u6784\u5EFA\u5DE5\u5177**: ${s.buildTool}`:""}
|
|
1302
1405
|
|
|
1303
1406
|
### \u8FD0\u884C\u65F6\u7248\u672C
|
|
1304
|
-
${
|
|
1407
|
+
${u}
|
|
1305
1408
|
|
|
1306
1409
|
### \u4EE3\u7801\u89C4\u8303
|
|
1307
1410
|
${p}
|
|
@@ -1319,7 +1422,7 @@ ${this.generateDirectoryTree(n)}
|
|
|
1319
1422
|
## \u7F16\u7A0B\u8BED\u8A00\u5206\u6790
|
|
1320
1423
|
|
|
1321
1424
|
### \u8BED\u8A00\u5206\u5E03
|
|
1322
|
-
${r.languages.length>0?r.languages.map(
|
|
1425
|
+
${r.languages.length>0?r.languages.map(g=>`- **${g.language}**: ${g.count} \u4E2A\u6587\u4EF6`).join(`
|
|
1323
1426
|
`):"\u6682\u65E0\u68C0\u6D4B\u5230\u7684\u7F16\u7A0B\u8BED\u8A00"}
|
|
1324
1427
|
|
|
1325
1428
|
---
|
|
@@ -1332,11 +1435,11 @@ ${this.generateDirectoryDescriptions(t.directories,s.languages)}
|
|
|
1332
1435
|
|
|
1333
1436
|
## \u6838\u5FC3\u6A21\u5757\u5206\u6790
|
|
1334
1437
|
|
|
1335
|
-
${l.length>0?l.map(
|
|
1438
|
+
${l.length>0?l.map(g=>`### ${g.name}
|
|
1336
1439
|
|
|
1337
|
-
${
|
|
1440
|
+
${g.description}
|
|
1338
1441
|
|
|
1339
|
-
**\u5305\u542B\u6587\u4EF6**: ${
|
|
1442
|
+
**\u5305\u542B\u6587\u4EF6**: ${g.files.length} \u4E2A`).join(`
|
|
1340
1443
|
|
|
1341
1444
|
`):"\u6682\u65E0\u6838\u5FC3\u6A21\u5757\u5206\u6790"}
|
|
1342
1445
|
|
|
@@ -1344,7 +1447,7 @@ ${u.description}
|
|
|
1344
1447
|
|
|
1345
1448
|
## \u6E90\u4EE3\u7801\u6587\u4EF6 (${t.sourceFiles.length} \u4E2A)
|
|
1346
1449
|
|
|
1347
|
-
${t.sourceFiles.length>0?t.sourceFiles.slice(0,50).map(
|
|
1450
|
+
${t.sourceFiles.length>0?t.sourceFiles.slice(0,50).map(g=>`- \`${g}\``).join(`
|
|
1348
1451
|
`)+(t.sourceFiles.length>50?`
|
|
1349
1452
|
|
|
1350
1453
|
*...\u8FD8\u6709 ${t.sourceFiles.length-50} \u4E2A\u6587\u4EF6*`:""):"\u6682\u65E0\u6E90\u4EE3\u7801\u6587\u4EF6"}
|
|
@@ -1353,14 +1456,14 @@ ${t.sourceFiles.length>0?t.sourceFiles.slice(0,50).map(u=>`- \`${u}\``).join(`
|
|
|
1353
1456
|
|
|
1354
1457
|
## \u914D\u7F6E\u6587\u4EF6 (${t.configFiles.length} \u4E2A)
|
|
1355
1458
|
|
|
1356
|
-
${t.configFiles.length>0?t.configFiles.map(
|
|
1459
|
+
${t.configFiles.length>0?t.configFiles.map(g=>`- \`${g}\``).join(`
|
|
1357
1460
|
`):"\u6682\u65E0\u914D\u7F6E\u6587\u4EF6"}
|
|
1358
1461
|
|
|
1359
1462
|
---
|
|
1360
1463
|
|
|
1361
1464
|
## \u6587\u6863\u6587\u4EF6 (${t.docFiles.length} \u4E2A)
|
|
1362
1465
|
|
|
1363
|
-
${t.docFiles.length>0?t.docFiles.slice(0,20).map(
|
|
1466
|
+
${t.docFiles.length>0?t.docFiles.slice(0,20).map(g=>`- \`${g}\``).join(`
|
|
1364
1467
|
`)+(t.docFiles.length>20?`
|
|
1365
1468
|
|
|
1366
1469
|
*...\u8FD8\u6709 ${t.docFiles.length-20} \u4E2A\u6587\u6863*`:""):"\u6682\u65E0\u6587\u6863\u6587\u4EF6"}
|
|
@@ -1369,7 +1472,7 @@ ${t.docFiles.length>0?t.docFiles.slice(0,20).map(u=>`- \`${u}\``).join(`
|
|
|
1369
1472
|
|
|
1370
1473
|
## \u6D4B\u8BD5\u6587\u4EF6 (${t.testFiles.length} \u4E2A)
|
|
1371
1474
|
|
|
1372
|
-
${t.testFiles.length>0?t.testFiles.slice(0,20).map(
|
|
1475
|
+
${t.testFiles.length>0?t.testFiles.slice(0,20).map(g=>`- \`${g}\``).join(`
|
|
1373
1476
|
`)+(t.testFiles.length>20?`
|
|
1374
1477
|
|
|
1375
1478
|
*...\u8FD8\u6709 ${t.testFiles.length-20} \u4E2A\u6D4B\u8BD5\u6587\u4EF6*`:""):"\u6682\u65E0\u6D4B\u8BD5\u6587\u4EF6"}
|
|
@@ -1379,11 +1482,11 @@ ${t.testFiles.length>0?t.testFiles.slice(0,20).map(u=>`- \`${u}\``).join(`
|
|
|
1379
1482
|
## \u4F9D\u8D56\u5173\u7CFB
|
|
1380
1483
|
|
|
1381
1484
|
### \u751F\u4EA7\u4F9D\u8D56
|
|
1382
|
-
${e.dependencies?Object.entries(e.dependencies).map(([
|
|
1485
|
+
${e.dependencies?Object.entries(e.dependencies).map(([g,d])=>`- **${g}**: ${d}`).join(`
|
|
1383
1486
|
`):"\u6682\u65E0\u751F\u4EA7\u4F9D\u8D56"}
|
|
1384
1487
|
|
|
1385
1488
|
### \u5F00\u53D1\u4F9D\u8D56
|
|
1386
|
-
${e.devDependencies?Object.entries(e.devDependencies).map(([
|
|
1489
|
+
${e.devDependencies?Object.entries(e.devDependencies).map(([g,d])=>`- **${g}**: ${d}`).join(`
|
|
1387
1490
|
`):"\u6682\u65E0\u5F00\u53D1\u4F9D\u8D56"}
|
|
1388
1491
|
|
|
1389
1492
|
---
|
|
@@ -1391,22 +1494,22 @@ ${e.devDependencies?Object.entries(e.devDependencies).map(([u,m])=>`- **${u}**:
|
|
|
1391
1494
|
## \u5FEB\u901F\u5BFC\u822A
|
|
1392
1495
|
|
|
1393
1496
|
### \u5165\u53E3\u6587\u4EF6
|
|
1394
|
-
${this.findEntryPoints(e,n,s).map(
|
|
1497
|
+
${this.findEntryPoints(e,n,s).map(g=>`- \`${g}\``).join(`
|
|
1395
1498
|
`)}
|
|
1396
1499
|
|
|
1397
1500
|
### \u6838\u5FC3\u6A21\u5757
|
|
1398
|
-
${this.findCoreModules(t.sourceFiles).map(
|
|
1501
|
+
${this.findCoreModules(t.sourceFiles).map(g=>`- \`${g}\``).join(`
|
|
1399
1502
|
`)}
|
|
1400
1503
|
|
|
1401
1504
|
---
|
|
1402
1505
|
|
|
1403
1506
|
**\u6587\u6863\u751F\u6210\u65F6\u95F4**: ${c}
|
|
1404
1507
|
**\u6587\u6863\u751F\u6210\u5DE5\u5177**: quickProjectScan \u5DE5\u5177
|
|
1405
|
-
`}generateDirectoryTree(e){let t={};e.forEach(s=>{let i=s.split("/"),a=t;i.forEach((c,l)=>{a[c]||(a[c]=l===i.length-1?null:{}),a[c]!==null&&(a=a[c])})});function n(s,i="",a=!0){let c=Object.entries(s),l="";return c.forEach(([
|
|
1406
|
-
`,p!==null&&typeof p=="object"&&(l+=n(p,i+
|
|
1508
|
+
`}generateDirectoryTree(e){let t={};e.forEach(s=>{let i=s.split("/"),a=t;i.forEach((c,l)=>{a[c]||(a[c]=l===i.length-1?null:{}),a[c]!==null&&(a=a[c])})});function n(s,i="",a=!0){let c=Object.entries(s),l="";return c.forEach(([u,p],g)=>{let d=g===c.length-1,m=d?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",h=d?" ":"\u2502 ";l+=i+m+u+`
|
|
1509
|
+
`,p!==null&&typeof p=="object"&&(l+=n(p,i+h,d))}),l}let r=n(t);return r?r.trim():""}generateDirectoryDescriptions(e,t){let n=Ue.getDirectoryDescriptionsForLanguages(t);return e.map(r=>{let s=n[r]||"\u9879\u76EE\u76EE\u5F55";return`### \`${r}/\`
|
|
1407
1510
|
${s}`}).join(`
|
|
1408
1511
|
|
|
1409
|
-
`)}findEntryPoints(e,t,n){let r=[];n.entryPoints&&n.entryPoints.length>0&&r.push(...n.entryPoints),e.main&&r.push(e.main),e.bin&&(typeof e.bin=="string"?r.push(e.bin):r.push(...Object.values(e.bin)));let s=process.cwd(),i=
|
|
1512
|
+
`)}findEntryPoints(e,t,n){let r=[];n.entryPoints&&n.entryPoints.length>0&&r.push(...n.entryPoints),e.main&&r.push(e.main),e.bin&&(typeof e.bin=="string"?r.push(e.bin):r.push(...Object.values(e.bin)));let s=process.cwd(),i=Ue.findEntryPointsForLanguages(n.languages,t,s);return r.push(...i),[...new Set(r)]}findCoreModules(e){let t=new Set;return e.forEach(n=>{let r=n.match(/^src\/([^\/]+)\//);r&&t.add(`src/${r[1]}/`)}),Array.from(t).sort()}buildProjectBasicInfo(e,t,n,r,s,i,a,c){let l=Nc(r.languages),p=this.analyzeCoreModules(t).map(T=>({name:T.name,description:T.description,fileCount:T.files.length})),g;s.primaryLanguage.includes("JavaScript")||s.primaryLanguage.includes("TypeScript")?gt("package-lock.json")?g="npm":gt("yarn.lock")?g="yarn":gt("pnpm-lock.yaml")?g="pnpm":g="npm":s.primaryLanguage.includes("Python")?gt("poetry.lock")?g="poetry":gt("Pipfile.lock")?g="pipenv":g="pip":s.primaryLanguage.includes("Java")?gt("pom.xml")?g="maven":gt("build.gradle")&&(g="gradle"):s.primaryLanguage.includes("Rust")?g="cargo":s.primaryLanguage.includes("Go")?g="go modules":s.primaryLanguage.includes("PHP")?g="composer":s.primaryLanguage.includes("Ruby")&&(g="bundler");let d={...e.dependencies||{}},m={...e.devDependencies||{}},h=Object.keys(d).length,w=Object.keys(m).length;if(c)for(let[T,f]of Object.entries(c))f.dependencies&&f.dependencies.forEach(y=>{let S=y.groupId&&y.artifactId?`${y.groupId}:${y.artifactId}`:y.name||"";S&&y.version&&(y.scope&&y.scope.toLowerCase().includes("test")?m[S]||(m[S]=y.version,w++):d[S]||(d[S]=y.version,h++))});return{projectName:e.name,version:e.version,description:e.description||"",primaryLanguage:r.primaryLanguage||s.primaryLanguage,languages:l,buildTool:s.buildTool,packageManager:g,runtime:s.primaryLanguage.includes("JavaScript")||s.primaryLanguage.includes("TypeScript")?"Node.js":s.primaryLanguage.includes("Java")?"JVM":s.primaryLanguage.includes("Python")?"Python":void 0,fileStats:{totalFiles:n.length,sourceFiles:t.sourceFiles.length,configFiles:t.configFiles.length,docFiles:t.docFiles.length,testFiles:t.testFiles.length},dependencies:d,devDependencies:m,dependencyCount:{production:h,development:w},detailedDependencies:c,runtimeVersions:Object.keys(i).length>0?i:void 0,codeStandards:a,entryPoints:this.findEntryPoints(e,n,s),configFiles:t.configFiles,coreModules:p.length>0?p:void 0,lastScanDate:new Date().toISOString()}}generateSummary(e,t,n,r){return`
|
|
1410
1513
|
\u{1F4E6} \u9879\u76EE: ${e.name} (v${e.version})
|
|
1411
1514
|
\u{1F310} \u4E3B\u8981\u8BED\u8A00: ${r.primaryLanguage}
|
|
1412
1515
|
${r.buildTool?`\u{1F527} \u6784\u5EFA\u5DE5\u5177: ${r.buildTool}`:""}
|
|
@@ -1415,7 +1518,7 @@ ${r.buildTool?`\u{1F527} \u6784\u5EFA\u5DE5\u5177: ${r.buildTool}`:""}
|
|
|
1415
1518
|
\u2699\uFE0F \u914D\u7F6E\u6587\u4EF6: ${t.configFiles.length} \u4E2A
|
|
1416
1519
|
\u{1F4DA} \u6587\u6863\u6587\u4EF6: ${t.docFiles.length} \u4E2A
|
|
1417
1520
|
\u{1F9EA} \u6D4B\u8BD5\u6587\u4EF6: ${t.testFiles.length} \u4E2A
|
|
1418
|
-
`}formatAction(e){return"quickProjectScan()"}formatObservation(e){return String(e)}},
|
|
1521
|
+
`}formatAction(e){return"quickProjectScan()"}formatObservation(e){return String(e)}},Jc=new pt;Kt=Jc});var ei={};j(ei,{FINISH_TOOL:()=>hp,FinishTool:()=>vo,extractFinishInfo:()=>Zs,finish:()=>mp,finishTool:()=>fp,isFinishResult:()=>yp,isFinishTool:()=>Qs});function mp(o){return Xs.execute(o)}function Qs(o){return o==="finish"}function Zs(o){if(!o||!o.function||o.function.name!=="finish")return null;try{let e=JSON.parse(o.function.arguments);return{answer:e.answer||"",success:e.success!==void 0?e.success:!0}}catch{return null}}function yp(o){return o&&typeof o=="object"&&o.completed===!0&&typeof o.answer=="string"}var vo,Xs,fp,hp,wo=C(()=>{V();vo=class extends ${getDefinition(){return{name:"finish",description:`Call this tool when you have completed the task and want to provide the final answer.
|
|
1419
1522
|
|
|
1420
1523
|
IMPORTANT: This is the RECOMMENDED way to signal task completion.
|
|
1421
1524
|
|
|
@@ -1435,10 +1538,10 @@ Example usage:
|
|
|
1435
1538
|
finish({
|
|
1436
1539
|
answer: "Successfully implemented the user authentication system. Created 3 new files: UserController.java, UserService.java, and SecurityConfig.java. Implemented JWT-based authentication with role-based access control. All tests are passing.",
|
|
1437
1540
|
success: true
|
|
1438
|
-
})`,input_schema:{type:"object",properties:{answer:{type:"string",description:"Comprehensive summary of what was accomplished, including key results and any important details"},success:{type:"boolean",description:"Whether the task completed successfully (defaults to true)",default:!0}},required:["answer"]}}}execute(e){return{completed:!0,answer:e.answer,success:e.success!==void 0?e.success:!0}}formatAction(e){let t=e.success!==!1?"\u6210\u529F\u5B8C\u6210":"\u5B8C\u6210\uFF08\u6709\u95EE\u9898\uFF09",n=e.answer.length>50?`${e.answer.substring(0,50)}...`:e.answer;return`finish(status=${t}, answer="${n}")`}formatObservation(e){return"\u4EFB\u52A1\u5DF2\u5B8C\u6210"}shouldPrintObservation(e){return!1}},
|
|
1439
|
-
`)}}catch{
|
|
1541
|
+
})`,input_schema:{type:"object",properties:{answer:{type:"string",description:"Comprehensive summary of what was accomplished, including key results and any important details"},success:{type:"boolean",description:"Whether the task completed successfully (defaults to true)",default:!0}},required:["answer"]}}}execute(e){return{completed:!0,answer:e.answer,success:e.success!==void 0?e.success:!0}}formatAction(e){let t=e.success!==!1?"\u6210\u529F\u5B8C\u6210":"\u5B8C\u6210\uFF08\u6709\u95EE\u9898\uFF09",n=e.answer.length>50?`${e.answer.substring(0,50)}...`:e.answer;return`finish(status=${t}, answer="${n}")`}formatObservation(e){return"\u4EFB\u52A1\u5DF2\u5B8C\u6210"}shouldPrintObservation(e){return!1}},Xs=new vo;fp=Xs,hp=Xs.getDefinition()});var ni={};j(ni,{executePlanTask:()=>xp,getGlobalSession:()=>Cp,resumePlanTask:()=>Sp,setGlobalSession:()=>ti});import k from"chalk";function ti(o){z=o}function Cp(){return z}async function xp(o,e=1,t={}){let n=t.useLLMSummary!==void 0?t.useLLMSummary:!0,r=new Ve,s=new ze(r),i=new He(r,s),a=new Je(n),{callModelAPI:c}=await Promise.resolve().then(()=>(ve(),Gt)),{AnchorInjector:l}=await Promise.resolve().then(()=>(cr(),Js)),u=new l(o,c),p=Yt(),g={useLLMDisclosure:t.useLLMDisclosure!==void 0?t.useLLMDisclosure:!0,useLLMSummary:t.useLLMSummary!==void 0?t.useLLMSummary:!0,verbose:t.verbose||!1},d=y=>{z?z.log(y):console.log(y)},m=y=>{z?z.info(y):console.log(k.blue(y))},h=y=>{z?z.success(y):console.log(k.green(y))},w=y=>{z?z.warning(y):console.log(k.yellow(y))},v=y=>{z?z.error(y):console.log(k.red(y))},T=" ".repeat(e-1),f=new bo({log:d,info:m,success:h,warning:w,error:v});try{let y=await import("fs"),S=await import("path");try{let R=S.join(process.cwd(),".nium/project/project.json");if(y.existsSync(R)){let O=y.statSync(R);(Date.now()-O.mtimeMs)/(1e3*60*60)>24&&w("\u26A0\uFE0F \u9879\u76EE\u7ED3\u6784\u6587\u6863\u5DF2\u8D85\u8FC724\u5C0F\u65F6\uFF0C\u5EFA\u8BAE\u66F4\u65B0")}else{m("\u{1F4CB} \u9996\u6B21\u6267\u884C\u4EFB\u52A1\uFF0C\u6B63\u5728\u626B\u63CF\u9879\u76EE\u7ED3\u6784...");let{quickProjectScan:O}=await Promise.resolve().then(()=>(Ys(),Gc));await O(),h(`\u2705 \u9879\u76EE\u7ED3\u6784\u626B\u63CF\u5B8C\u6210
|
|
1542
|
+
`)}}catch{w("\u9879\u76EE\u7ED3\u6784\u626B\u63CF\u5931\u8D25\uFF0C\u5C06\u7EE7\u7EED\u6267\u884C\u4EFB\u52A1")}d(""),d(`${T}${"\u2550".repeat(60-e*2)}`),m(`${T}\u{1F4CB} \u5F00\u59CB\u89C4\u5212\u4EFB\u52A1 (\u5D4C\u5957\u5C42\u7EA7: ${e})`),d(`${T}${"\u2550".repeat(60-e*2)}`),d("");let E=p.getAllSubAgents(),P=await Zn(o,E);r.initializeTask(o,P),P.taskId&&St(P.taskId);let L=vp(er(P),e);d(L),d(""),f.showTaskStart(o,P.tasks.length,e);for(let R=0;R<P.tasks.length;R++){let O=P.tasks[R],K=O.step;f.showStepProgress(K,P.tasks.length,O,e),r.plan.currentStep=K,P.taskId&&await at(P.taskId,K,"in_progress");try{let U=Bc(O,p),I=await i.buildIsolatedContext(K,O.description,U?.prompt||"",g.useLLMDisclosure,O.allowedTools);U?await qc(K,O.description,U,I,r,a,s,p,g,{log:d,info:m,success:h,warning:w,error:v},O.allowedTools):await Kc(O.description,I,r,{log:d,info:m},O.allowedTools),f.showStepComplete(K,P.tasks.length,O,e),P.taskId&&await at(P.taskId,K,"completed")}catch(U){let I=U instanceof Error?U.message:String(U);throw f.showStepError(K,P.tasks.length,I,e),w(`${T}\u4E2D\u6B62\u540E\u7EED\u6B65\u9AA4\u6267\u884C`),r.recordStepCompletion(K,`\u5931\u8D25: ${I}`,{success:!1,error:I}),U}}return f.showTaskComplete(P.tasks.length,P.tasks.length,e),vt(),{success:!0,taskId:P.taskId,completedSteps:P.tasks.length,plan:P,planMarkdown:P.markdown,tasks:P.tasks}}catch(y){vt();let S=y instanceof Error?y.message:String(y);throw v(`${T}\u274C \u89C4\u5212\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${S}`),y}}async function Sp(o,e=0,t={}){let{loadTaskPlan:n}=await Promise.resolve().then(()=>($e(),We)),r=n(o);if(!r)throw new Error(`\u65E0\u6CD5\u52A0\u8F7D\u4EFB\u52A1\u8BA1\u5212: ${o}`);let s=new Ve,i=new ze(s),a=new He(s,i),c=new Je,l=Yt(),u={useLLMDisclosure:t.useLLMDisclosure!==void 0?t.useLLMDisclosure:!0,useLLMSummary:t.useLLMSummary!==void 0?t.useLLMSummary:!0,verbose:t.verbose||!1},p=f=>{z?z.log(f):console.log(f)},g=f=>{z?z.info(f):console.log(k.blue(f))},d=f=>{z?z.success(f):console.log(k.green(f))},m=f=>{z?z.warning(f):console.log(k.yellow(f))},h=f=>{z?z.error(f):console.log(k.red(f))};p(k.cyan(`[\u4EFB\u52A1\u6062\u590D] \u6B63\u5728\u6062\u590D\u4EFB\u52A1: ${o}`)),p(k.gray(`\u4ECE\u6B65\u9AA4 ${e||1} \u5F00\u59CB\u6267\u884C`));let w=1,v="",T=new bo({log:p,info:g,success:d,warning:m,error:h});try{s.initializeTask(r.taskId,r),r.taskId&&St(r.taskId),p(""),p(k.cyan("\u2550".repeat(60))),g("\u{1F4CB} \u6062\u590D\u4EFB\u52A1\u6267\u884C"),p(k.cyan("\u2550".repeat(60))),p(""),T.showTaskStart(r.taskId,r.tasks.length,w);let f=e>0?e-1:0;for(let y=f;y<r.tasks.length;y++){let S=r.tasks[y],E=S.step;if(T.showStepProgress(E,r.tasks.length,S,w),s.plan.currentStep=E,r.taskId){let{updateTaskStatus:P}=await Promise.resolve().then(()=>($e(),We));await P(r.taskId,E,"in_progress")}try{let P=Bc(S,l),L=await a.buildIsolatedContext(E,S.description,P?.prompt||"",u.useLLMDisclosure,S.allowedTools);if(P?await qc(E,S.description,P,L,s,c,i,l,u,{log:p,info:g,success:d,warning:m,error:h},S.allowedTools):await Kc(S.description,L,s,{log:p,info:g},S.allowedTools),T.showStepComplete(E,r.tasks.length,S,w),r.taskId){let{updateTaskStatus:R}=await Promise.resolve().then(()=>($e(),We));await R(r.taskId,E,"completed")}}catch(P){let L=P instanceof Error?P.message:String(P);throw T.showStepError(E,r.tasks.length,L,w),m(`${v}\u4E2D\u6B62\u540E\u7EED\u6B65\u9AA4\u6267\u884C`),s.recordStepCompletion(E,`\u5931\u8D25: ${L}`,{success:!1,error:L}),P}}return T.showTaskComplete(r.tasks.length,r.tasks.length,w),vt(),{success:!0,taskId:r.taskId,completedSteps:r.tasks.length-f,resumedFrom:e||1}}catch(f){vt();let y=f instanceof Error?f.message:String(f);throw h(`${v}\u274C \u4EFB\u52A1\u6062\u590D\u6267\u884C\u5931\u8D25: ${y}`),f}}function vp(o,e){return e<=1?o:o.split(`
|
|
1440
1543
|
`).map(r=>{if(r.trim().startsWith("#")){let s=r.match(/^#+/)?.[0].length||0,i=Math.min(s+e-1,6),a="#".repeat(i);return r.replace(/^#+/,a)}return r}).join(`
|
|
1441
|
-
`)}function
|
|
1544
|
+
`)}function Bc(o,e){return o.subAgent&&o.subAgent!=="default"?e.getSubAgent(o.subAgent):null}async function qc(o,e,t,n,r,s,i,a,c,l,u){let{log:p,info:g,error:d}=l,m=Date.now();g(`\u{1F527} \u4F7F\u7528\u5B50\u667A\u80FD\u4F53: ${t.name}`),p(k.gray(`\u63CF\u8FF0: ${t.description}`)),u&&u.length>0&&p(k.gray(`\u6CE8\u610F: \u5B50\u667A\u80FD\u4F53 ${t.name} \u4E0D\u53D7\u6B65\u9AA4\u5DE5\u5177\u9650\u5236\u5F71\u54CD`)),p("");try{let{SYSTEM_PROMPT:h}=await Promise.resolve().then(()=>(it(),Fs)),w=[{role:"system",content:h},...n.filter(f=>f.role!=="system"),...n.filter(f=>f.role==="system"&&f!==n[0])],v=await Yc(w,e,l,void 0,t);await wp(o,v,r,s,i,c,l);let T=Date.now()-m;a.recordAgentPerformance(t.name,!0,T)}catch(h){let w=Date.now()-m;throw a.recordAgentPerformance(t.name,!1,w),h}}async function Kc(o,e,t,n,r){let{log:s,info:i}=n;i("\u{1F916} \u4F7F\u7528\u9ED8\u8BA4React\u667A\u80FD\u4F53"),r&&r.length>0&&s(k.gray(`\u5DE5\u5177\u9650\u5236: ${r.join(", ")}`)),s("");let{SYSTEM_PROMPT:a}=await Promise.resolve().then(()=>(it(),Fs)),c=[{role:"system",content:a},...e.filter(l=>l.role!=="system"),...e.filter(l=>l.role==="system")];await Yc(c,o,n,r)}async function Yc(o,e,t,n,r=null){let{log:s,error:i}=t,{MODEL:a}=await Promise.resolve().then(()=>(le(),wt)),{callModelAPI:c}=await Promise.resolve().then(()=>(ve(),Gt)),{isThinkTool:l,extractThought:u}=await Promise.resolve().then(()=>(Xn(),Ms)),{isFinishTool:p,extractFinishInfo:g}=await Promise.resolve().then(()=>(wo(),ei)),{getToolDefinitions:d}=await Promise.resolve().then(()=>(Ht(),ri)),{tools:m,toolInstances:h,extractToolResult:w}=await Promise.resolve().then(()=>(Re(),ur)),{saveSession:v}=await Promise.resolve().then(()=>(Ne(),Zi)),{logDebug:T,logWarn:f}=await Promise.resolve().then(()=>(Y(),Yo)),{AnchorInjector:y}=await Promise.resolve().then(()=>(cr(),Js)),S=[...o],E=0,P=50,L=0,R=new y(e,c),O=d(),K=n&&n.length>0?O.filter(U=>n.includes(U.name)):O;for(n&&n.length>0&&T(`\u672C\u6B65\u9AA4\u53EF\u7528\u5DE5\u5177: ${K.map(U=>U.name).join(", ")}`);E<P;){E++,T(`Loop iteration ${E}`);try{let U=await R.injectAnchors({taskDescription:e,iterations:E,messages:S,lastSemanticCheckIteration:L,callModelAPI:c}),{messages:I,lastSemanticCheckIteration:oe}=U;S=I,L=oe,v(S,e);let te=await c({model:a(),messages:S,temperature:.1,tools:K}),on=te.choices[0].message.tool_calls;if(te.choices[0].finish_reason==="stop"){let{content:F}=te.choices[0].message;if(F&&F.trim()){if(r?.finalAnswerCallback)try{await r.finalAnswerCallback(F)}catch(Fe){let{logError:Oe}=await Promise.resolve().then(()=>(Y(),Yo));Oe(`Error in finalAnswerCallback: ${Fe}`)}s(k.green("\u4EFB\u52A1\u5B8C\u6210:")),s(F),s("")}break}if(!on||on.length===0){let{content:F}=te.choices[0].message;F&&F.trim()&&(s(k.yellow(F)),s(""));continue}let J=on[0],Te=J.function.name;if(n&&n.length>0&&!n.includes(Te)){let F=`Error: \u5DE5\u5177 '${Te}' \u672A\u5728\u672C\u6B65\u9AA4\u7684\u6388\u6743\u5217\u8868\u4E2D\u3002\u5141\u8BB8\u4F7F\u7528\u7684\u5DE5\u5177: ${n.join(", ")}`;i(F),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:F});continue}let kr;try{kr=JSON.parse(J.function.arguments)}catch{i(`\u89E3\u6790\u5DE5\u5177\u53C2\u6570\u5931\u8D25: ${J.function.arguments}`),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:"Error: Invalid JSON arguments"});continue}if(l(Te)){let F=u(J);F&&(s(k.cyan(`\u{1F4AD} Think: ${F}`)),s("")),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:"Noted. Continue with your action."});continue}if(p(Te)){let F=g(J);if(F){let{answer:Fe,success:Oe}=F;if(r?.finalAnswerCallback)try{await r.finalAnswerCallback(Fe)}catch(Dl){f(`Error in finalAnswerCallback: ${Dl}`)}let Rl=Oe?"\u2705":"\u26A0\uFE0F";s(k.green(`${Rl} \u4EFB\u52A1\u5B8C\u6210 (\u901A\u8FC7 finish \u5DE5\u5177):`)),s(Fe),s(""),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:"Task completed successfully."}),S.push({role:"assistant",content:Fe});break}}if(!m[Te]){let F=`Error: Unknown tool '${Te}'`;i(F),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:F});continue}let Er=d().find(F=>F.name===Te);if(Er&&Er.input_schema&&Er.input_schema.required){let Fe=(Er.input_schema.required||[]).filter(Oe=>kr[Oe]===void 0);if(Fe.length>0){let Oe=`Error: Missing required parameters: ${Fe.join(", ")}`;i(Oe),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:Oe});continue}}let ft=h[Te],Ml=ft?ft.formatAction(kr):`${Te}()`;s(k.blue(`\u{1F527} \u884C\u52A8: ${Ml}`)),s("");let Pr=await m[Te](kr),Il=w(Pr),Al=ft?ft.shouldPrintObservation(Pr):!0,Ll=ft?ft.formatObservation(Pr):String(Pr);Al&&(s(k.yellow(`\u{1F4CA} \u89C2\u5BDF: ${Ll}`)),s("")),S.push({role:"assistant",content:null,tool_calls:[J]}),S.push({role:"tool",tool_call_id:J.id,content:String(Il)}),v(S,e)}catch(U){throw i(`\u9519\u8BEF: ${U.message}`),v(S,e),U}}if(E>=P)throw i("\u9519\u8BEF: \u5DF2\u8FBE\u5230\u6700\u5927\u8FED\u4EE3\u6B21\u6570"),v(S,e),new Error("Maximum iterations reached");return S}async function wp(o,e,t,n,r,s,i){let{info:a,log:c}=i,l=await n.extractSummary(e),u=n.extractMetadata(e);u.success=!0,t.recordStepCompletion(o,l,u,r),s.verbose&&(a(`\u6B65\u9AA4 ${o} \u6458\u8981\u5DF2\u8BB0\u5F55\u5230\u5168\u5C40\u4E0A\u4E0B\u6587`),c(""),c(k.gray("\u2500\u2500\u2500 \u6B65\u9AA4\u6267\u884C\u6458\u8981 \u2500\u2500\u2500")),c(k.gray(`\u6458\u8981: ${l}`)),c(k.gray(`\u5DE5\u5177: ${u.toolsUsed.join(", ")}`)),c(k.gray(`\u6587\u4EF6: ${u.filesAccessed.join(", ")}`)),c(k.gray(`\u8FED\u4EE3: ${u.iterations} \u6B21`)))}var bo,z,To=C(()=>{$e();ko();Ne();Gs();bo=class{startTime;stepStartTime=null;log;info;success;warning;error;constructor(e){this.startTime=Date.now(),this.log=e.log,this.info=e.info,this.success=e.success,this.warning=e.warning,this.error=e.error}showTaskStart(e,t,n=1){let r=" ".repeat(n-1);this.log(""),this.log(k.cyan(`${r}\u2554${"\u2550".repeat(58-n*2)}\u2557`)),this.log(k.cyan(`${r}\u2551`)+k.bold.white(" \u{1F680} \u5F00\u59CB\u6267\u884C\u4EFB\u52A1\u8BA1\u5212")+k.cyan(` (\u5171${t}\u6B65)`.padEnd(58-n*2-13))+k.cyan("\u2551")),this.log(k.cyan(`${r}\u255A${"\u2550".repeat(58-n*2)}\u255D`)),this.log("")}showStepProgress(e,t,n,r=1){this.stepStartTime=Date.now();let s=" ".repeat(r-1),i=Math.round(e/t*100),a=this.createProgressBar(i,30);this.log(""),this.log(k.blue(`${s}\u250C${"\u2500".repeat(58-r*2)}\u2510`)),this.log(k.blue(`${s}\u2502`)+` \u6B65\u9AA4 ${e}/${t} (${i}%)`.padEnd(60-r*2)+k.blue("\u2502")),this.log(k.blue(`${s}\u2502`)+` ${a}`.padEnd(60-r*2)+k.blue("\u2502")),this.log(k.blue(`${s}\u2502`)+k.cyan(` \u{1F4CC} ${n.description}`.substring(0,58-r*2)).padEnd(60-r*2)+k.blue("\u2502")),this.log(k.blue(`${s}\u2502`)+k.gray(` \u{1F916} \u667A\u80FD\u4F53: ${n.subAgent}`.substring(0,58-r*2)).padEnd(60-r*2)+k.blue("\u2502")),this.log(k.blue(`${s}\u2514${"\u2500".repeat(58-r*2)}\u2518`)),this.log("")}showStepComplete(e,t,n,r=1){let s=" ".repeat(r-1),i=this.stepStartTime?this.formatDuration(Date.now()-this.stepStartTime):"",a=Math.round(e/t*100);this.success(`${s}\u2705 \u6B65\u9AA4 ${e}/${t} \u5B8C\u6210${k.gray(` (${i})`)}`),this.log("")}showTaskComplete(e,t,n=1){let r=" ".repeat(n-1),s=this.formatDuration(Date.now()-this.startTime),i=Math.round(e/t*100);this.log(""),this.log(k.green(`${r}\u2554${"\u2550".repeat(58-n*2)}\u2557`)),this.log(k.green(`${r}\u2551`)+k.bold.white(" \u{1F389} \u4EFB\u52A1\u6267\u884C\u5B8C\u6210!")+k.green("".padEnd(58-n*2-12))+k.green("\u2551")),this.log(k.green(`${r}\u2551`)+` \u5B8C\u6210\u8FDB\u5EA6: ${e}/${t} (${i}%)`.padEnd(60-n*2)+k.green("\u2551")),this.log(k.green(`${r}\u2551`)+` \u603B\u8017\u65F6: ${s}`.padEnd(60-n*2)+k.green("\u2551")),this.log(k.green(`${r}\u255A${"\u2550".repeat(58-n*2)}\u255D`)),this.log("")}showStepError(e,t,n,r=1){let s=" ".repeat(r-1);this.log(""),this.error(`${s}\u274C \u6B65\u9AA4 ${e}/${t} \u6267\u884C\u5931\u8D25`),this.error(`${s} \u9519\u8BEF: ${n.substring(0,100)}`),this.log("")}createProgressBar(e,t=30){let n=Math.round(e/100*t),r=t-n;return`${k.green("\u2588".repeat(n))+k.gray("\u2591".repeat(r))} ${e}%`}formatDuration(e){if(e<1e3)return`${e}ms`;if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/6e4),n=(e%6e4/1e3).toFixed(0);return`${t}m ${n}s`}},z=null});import bp from"chalk";async function gr(o){return await Xc.execute(o)}var De,Xc,pr,oi=C(()=>{V();De=class o extends ${static nestingLevel=0;static MAX_NESTING_LEVEL=2;getDefinition(){let e=o.nestingLevel,t=o.MAX_NESTING_LEVEL,n="USE THIS TOOL FIRST for COMPLEX tasks! This is your PRIMARY tool for handling multi-step, cross-component work.";return e===t-1?n="USE THIS TOOL SPARINGLY for VERY COMPLEX sub-tasks! This is your last level of nesting.":e>=t&&(n="DO NOT USE THIS TOOL - maximum nesting level reached!"),{name:"plan",description:`${n}
|
|
1442
1545
|
|
|
1443
1546
|
IDEAL USE CASES:
|
|
1444
1547
|
- Building new features that span multiple files or components
|
|
@@ -1465,7 +1568,7 @@ AVOID FOR:
|
|
|
1465
1568
|
RECOMMENDATION BASED ON CURRENT NESTING LEVEL (${e}/${t}):
|
|
1466
1569
|
${e===0?"- Feel free to use this tool for complex tasks.":e===t-1?"- Use this tool only if absolutely necessary for very complex sub-tasks.":"- DO NOT use this tool - maximum nesting level reached!"}
|
|
1467
1570
|
|
|
1468
|
-
When you're uncertain if a task needs planning, default to using regular tools directly for sub-tasks!`,input_schema:{type:"object",properties:{task:{type:"string",description:"Detailed description of the complex task to plan and execute. Be specific about the goals and requirements."},planOnly:{type:"boolean",description:"If true, only generate the plan without executing it. The plan will be saved to ./.nium/tasks/ directory for later execution. Default: false"}},required:["task"]}}}async execute(e){let{task:t,planOnly:n=!1}=e;if(n)try{let{generateTaskPlan:r}=await Promise.resolve().then(()=>(
|
|
1571
|
+
When you're uncertain if a task needs planning, default to using regular tools directly for sub-tasks!`,input_schema:{type:"object",properties:{task:{type:"string",description:"Detailed description of the complex task to plan and execute. Be specific about the goals and requirements."},planOnly:{type:"boolean",description:"If true, only generate the plan without executing it. The plan will be saved to ./.nium/tasks/ directory for later execution. Default: false"}},required:["task"]}}}async execute(e){let{task:t,planOnly:n=!1}=e;if(n)try{let{generateTaskPlan:r}=await Promise.resolve().then(()=>($e(),We)),{getSubAgentManager:s}=await Promise.resolve().then(()=>(ko(),Qc)),a=s().getAllSubAgents(),c=await r(t,a),l=`\u2705 \u4EFB\u52A1\u89C4\u5212\u5DF2\u751F\u6210\uFF08\u4EC5\u89C4\u5212\u6A21\u5F0F\uFF09
|
|
1469
1572
|
|
|
1470
1573
|
`;return l+=`**\u4EFB\u52A1 ID**: ${c.taskId}
|
|
1471
1574
|
`,l+=`**\u603B\u6B65\u9AA4\u6570**: ${c.tasks.length}
|
|
@@ -1476,9 +1579,9 @@ When you're uncertain if a task needs planning, default to using regular tools d
|
|
|
1476
1579
|
`,l+=`- JSON: ./.nium/tasks/${c.taskId}.json
|
|
1477
1580
|
|
|
1478
1581
|
`,l+=`**\u6267\u884C\u6B65\u9AA4**:
|
|
1479
|
-
`,c.tasks.forEach((
|
|
1582
|
+
`,c.tasks.forEach((u,p)=>{l+=`${p+1}. ${u.description} [${u.subAgent}]
|
|
1480
1583
|
`}),l+=`
|
|
1481
|
-
\u{1F4A1} \u63D0\u793A: \u4F7F\u7528 todo \u5DE5\u5177\u7684 resume \u529F\u80FD\u6765\u6267\u884C\u6B64\u8BA1\u5212`,this.createToolResult(l,l,!0)}catch(r){let s=r instanceof Error?r.message:String(r);return this.createToolResult(`Error: Failed to generate plan - ${s}`,`Error: Failed to generate plan - ${s}`,!0)}if(o.nestingLevel>=o.MAX_NESTING_LEVEL)return this.createToolResult(`Error: Maximum nesting level (${o.MAX_NESTING_LEVEL}) reached. Please use regular tools directly instead of the plan tool.`,`Error: Maximum nesting level (${o.MAX_NESTING_LEVEL}) reached. Please use regular tools directly instead of the plan tool.`,!0);o.nestingLevel++;try{let r;try{r=await(await Promise.resolve().then(()=>(
|
|
1584
|
+
\u{1F4A1} \u63D0\u793A: \u4F7F\u7528 todo \u5DE5\u5177\u7684 resume \u529F\u80FD\u6765\u6267\u884C\u6B64\u8BA1\u5212`,this.createToolResult(l,l,!0)}catch(r){let s=r instanceof Error?r.message:String(r);return this.createToolResult(`Error: Failed to generate plan - ${s}`,`Error: Failed to generate plan - ${s}`,!0)}if(o.nestingLevel>=o.MAX_NESTING_LEVEL)return this.createToolResult(`Error: Maximum nesting level (${o.MAX_NESTING_LEVEL}) reached. Please use regular tools directly instead of the plan tool.`,`Error: Maximum nesting level (${o.MAX_NESTING_LEVEL}) reached. Please use regular tools directly instead of the plan tool.`,!0);o.nestingLevel++;try{let r;try{r=await(await Promise.resolve().then(()=>(To(),ni))).executePlanTask(t,o.nestingLevel)}catch{console.log(bp.yellow("[Plan-Tool] \u8B66\u544A: \u65E0\u6CD5\u5BFC\u5165plan-executor.js\uFF0C\u8FD4\u56DE\u4EFB\u52A1\u89C4\u5212\u5EFA\u8BAE")),r={success:!0,message:"\u4EFB\u52A1\u89C4\u5212\u5DF2\u751F\u6210\uFF0C\u8BF7\u6839\u636E\u89C4\u5212\u6267\u884C\u4EFB\u52A1\u6B65\u9AA4",tasks:[{step:1,description:"\u5206\u6790\u9700\u6C42\u5E76\u786E\u8BA4\u6280\u672F\u6808",status:"pending"},{step:2,description:"\u5B9E\u73B0\u6838\u5FC3\u529F\u80FD\u6A21\u5757",status:"pending"},{step:3,description:"\u7F16\u5199\u6D4B\u8BD5\u7528\u4F8B",status:"pending"},{step:4,description:"\u4EE3\u7801\u5BA1\u67E5\u4E0E\u4F18\u5316",status:"pending"}]}}let s=`\u2705 Task planning and execution completed successfully!
|
|
1482
1585
|
|
|
1483
1586
|
`;return s+=`**Task ID**: ${r.taskId}
|
|
1484
1587
|
`,s+=`**Completed Steps**: ${r.completedSteps}
|
|
@@ -1488,7 +1591,7 @@ ${r.planMarkdown}
|
|
|
1488
1591
|
|
|
1489
1592
|
`),r.tasks&&r.tasks.length>0&&(s+=`**Executed Steps**:
|
|
1490
1593
|
`,r.tasks.forEach((i,a)=>{s+=`${a+1}. \u2713 ${i.description}
|
|
1491
|
-
`})),this.createToolResult(s,s,!0)}catch(r){let s=r instanceof Error?r.message:String(r);return this.createToolResult(`Error: Task execution failed - ${s}`,`Error: Task execution failed - ${s}`,!0)}finally{o.nestingLevel--}}static getCurrentNestingLevel(){return o.nestingLevel}static resetNestingLevel(){o.nestingLevel=0}formatAction(e){return`plan(task="${e.task.length>100?e.task.substring(0,100)+"...":e.task}", nesting_level=${o.nestingLevel+1})`}formatObservation(e){return typeof e=="string"&&e.includes("Error:")?e:"Task planning completed. Check logs above for details."}},
|
|
1594
|
+
`})),this.createToolResult(s,s,!0)}catch(r){let s=r instanceof Error?r.message:String(r);return this.createToolResult(`Error: Task execution failed - ${s}`,`Error: Task execution failed - ${s}`,!0)}finally{o.nestingLevel--}}static getCurrentNestingLevel(){return o.nestingLevel}static resetNestingLevel(){o.nestingLevel=0}formatAction(e){return`plan(task="${e.task.length>100?e.task.substring(0,100)+"...":e.task}", nesting_level=${o.nestingLevel+1})`}formatObservation(e){return typeof e=="string"&&e.includes("Error:")?e:"Task planning completed. Check logs above for details."}},Xc=new De;pr=Xc});function el(o){Zc=o}function dr(){return Zc}var Zc,Eo=C(()=>{Zc=null});import Ke from"readline";import dt from"chalk";async function mr(o){return await tl.execute(o)}var Xt,tl,fr,nl=C(()=>{V();Eo();Xt=class extends ${getDefinition(){return{name:"askUser",description:`Ask the user a question and wait for their response. This pauses the execution loop until the user provides input.
|
|
1492
1595
|
|
|
1493
1596
|
Use this tool when you need:
|
|
1494
1597
|
- User confirmation or decision
|
|
@@ -1505,7 +1608,7 @@ IMPORTANT:
|
|
|
1505
1608
|
Examples:
|
|
1506
1609
|
- askUser({ question: "Which file should I modify?" }) - Free text input
|
|
1507
1610
|
- askUser({ question: "Proceed with deletion?", choices: ["Yes", "No"] }) - Multiple choice
|
|
1508
|
-
- askUser({ question: "Select an option:", choices: ["Option 1", "Option 2"], allowFreeText: true }) - Choice with custom input allowed`,input_schema:{type:"object",properties:{question:{type:"string",description:"The question to ask the user. Be clear and specific."},choices:{type:"array",items:{type:"string"},description:"Optional: Predefined choices for the user to select from. If provided, user will see a menu."},allowFreeText:{type:"boolean",description:"Optional: If true, allows user to type a custom response even when choices are provided (default: false)",default:!1}},required:["question"]}}}async execute(e){let{question:t,choices:n,allowFreeText:r=!1}=e;try{let s;return n&&n.length>0?s=await this.showChoiceMenu(t,n,r):s=await this.showFreeTextInput(t),this.createToolResult(s,`User responded: ${s}`,!0)}catch(s){return this.formatError("Cannot get user input",s)}}showChoiceMenu(e,t,n){return new Promise(r=>{let s=0,i=t.map(p=>({text:p,value:p}));n&&i.push({text:"\u8F93\u5165\u81EA\u5B9A\u4E49\u7B54\u6848...",value:"__CUSTOM__"});let a=()=>{let p=i.length+5;for(let
|
|
1611
|
+
- askUser({ question: "Select an option:", choices: ["Option 1", "Option 2"], allowFreeText: true }) - Choice with custom input allowed`,input_schema:{type:"object",properties:{question:{type:"string",description:"The question to ask the user. Be clear and specific."},choices:{type:"array",items:{type:"string"},description:"Optional: Predefined choices for the user to select from. If provided, user will see a menu."},allowFreeText:{type:"boolean",description:"Optional: If true, allows user to type a custom response even when choices are provided (default: false)",default:!1}},required:["question"]}}}async execute(e){let{question:t,choices:n,allowFreeText:r=!1}=e;try{let s;return n&&n.length>0?s=await this.showChoiceMenu(t,n,r):s=await this.showFreeTextInput(t),this.createToolResult(s,`User responded: ${s}`,!0)}catch(s){return this.formatError("Cannot get user input",s)}}showChoiceMenu(e,t,n){return new Promise(r=>{let s=0,i=t.map(p=>({text:p,value:p}));n&&i.push({text:"\u8F93\u5165\u81EA\u5B9A\u4E49\u7B54\u6848...",value:"__CUSTOM__"});let a=()=>{let p=i.length+5;for(let g=0;g<p;g++)g>0&&Ke.moveCursor(process.stdout,0,-1),Ke.clearLine(process.stdout,0);console.log(""),console.log(dt.cyan("\u{1F4AC} "+e)),console.log(""),console.log(dt.gray("\u8BF7\u9009\u62E9 (\u4F7F\u7528\u4E0A\u4E0B\u7BAD\u5934\u952E\uFF0CEnter\u786E\u8BA4):")),console.log(""),i.forEach((g,d)=>{let m=d===s,h=m?dt.green("> "):" ",w=m?dt.green.bold(g.text):dt.white(g.text);console.log(`${h}${w}`)}),console.log("")},c=process.stdin.isTTY?process.stdin.isRaw:!1;process.stdin.isTTY&&process.stdin.setRawMode(!0);let l=async(p,g)=>{if(g.name==="up"){s=Math.max(0,s-1),a();return}else if(g.name==="down"){s=Math.min(i.length-1,s+1),a();return}else if(g.name==="return"||g.name==="enter"){process.stdin.removeListener("keypress",l),process.stdin.isTTY&&process.stdin.setRawMode(c);let d=i.length+5;for(let h=0;h<d;h++)Ke.moveCursor(process.stdout,0,-1),Ke.clearLine(process.stdout,0);let m=i[s].value;if(m==="__CUSTOM__"){let h=await this.showFreeTextInput(e);r(h)}else r(m);return}else if(g.name==="escape"||g.ctrl&&g.name==="c"){let d=dr();d?d.removeListener("keypress",l):(process.stdin.removeListener("keypress",l),process.stdin.isTTY&&process.stdin.setRawMode(c));let m=i.length+5;for(let h=0;h<m;h++)Ke.moveCursor(process.stdout,0,-1),Ke.clearLine(process.stdout,0);r("__CANCELLED__");return}},u=dr();u?u.on("keypress",l):(Ke.emitKeypressEvents(process.stdin),process.stdin.on("keypress",l)),a()})}showFreeTextInput(e){return new Promise(t=>{let n=e||"\u8BF7\u8F93\u5165\u60A8\u7684\u7B54\u6848",r=process.stdin.listeners("keypress");process.stdin.removeAllListeners("keypress");let s=Ke.createInterface({input:process.stdin,output:process.stdout});console.log(""),console.log(dt.cyan("\u{1F4AC} "+n)),console.log(""),s.question(dt.gray("\u8BF7\u8F93\u5165\u7B54\u6848: "),i=>{s.removeAllListeners(),process.stdin.pause(),r.forEach(a=>{process.stdin.on("keypress",a)}),process.stdin.resume(),t(i.trim())})})}formatAction(e){let t=e.question||"";return e.choices&&e.choices.length>0?`askUser(question="${t}", choices=[${e.choices.join(", ")}])`:`askUser(question="${t}")`}formatObservation(e){return typeof e=="string"?e==="__CANCELLED__"?"User cancelled the input":`User response: ${e}`:super.formatObservation(e)}},tl=new Xt;fr=tl});async function hr(o){return await rl.execute(o)}var Qt,rl,yr,ol=C(()=>{V();Qt=class extends ${getDefinition(){return{name:"todo",description:`Execute and manage saved task plans. Use this tool to:
|
|
1509
1612
|
- Resume execution of a previously generated plan
|
|
1510
1613
|
- List all available task plans
|
|
1511
1614
|
- View details of a specific task plan
|
|
@@ -1519,16 +1622,16 @@ WHEN TO USE:
|
|
|
1519
1622
|
FEATURES:
|
|
1520
1623
|
- Resume from any step (default: continue from last step)
|
|
1521
1624
|
- View task progress and status
|
|
1522
|
-
- List all available plans in ./.nium/tasks/ directory`,input_schema:{type:"object",properties:{action:{type:"string",enum:["resume","list","view"],description:"The action to perform: resume (execute a saved plan), list (show all plans), view (show plan details)"},taskId:{type:"string",description:"The task ID to resume or view. Required for resume and view actions. Format: task-YYYYMMDD-XXX"},resumeFrom:{type:"number",description:"Step number to resume from (1-based). If not specified, resumes from the first incomplete step. Use 1 to restart from the beginning."}},required:["action"]}}}async execute(e){let{action:t,taskId:n,resumeFrom:r}=e;try{switch(t){case"resume":return await this.executeResume(n,r);case"list":return await this.executeList();case"view":return await this.executeView(n);default:return this.createToolResult(`Error: Unknown action '${t}'`,`Error: Unknown action '${t}'`,!0)}}catch(s){let i=s instanceof Error?s.message:String(s);return this.createToolResult(`Error: ${i}`,`Error: ${i}`,!0)}}async executeResume(e,t){if(!e)return this.createToolResult("Error: taskId is required for resume action","Error: taskId is required for resume action",!0);try{let{resumePlanTask:n}=await Promise.resolve().then(()=>(
|
|
1625
|
+
- List all available plans in ./.nium/tasks/ directory`,input_schema:{type:"object",properties:{action:{type:"string",enum:["resume","list","view"],description:"The action to perform: resume (execute a saved plan), list (show all plans), view (show plan details)"},taskId:{type:"string",description:"The task ID to resume or view. Required for resume and view actions. Format: task-YYYYMMDD-XXX"},resumeFrom:{type:"number",description:"Step number to resume from (1-based). If not specified, resumes from the first incomplete step. Use 1 to restart from the beginning."}},required:["action"]}}}async execute(e){let{action:t,taskId:n,resumeFrom:r}=e;try{switch(t){case"resume":return await this.executeResume(n,r);case"list":return await this.executeList();case"view":return await this.executeView(n);default:return this.createToolResult(`Error: Unknown action '${t}'`,`Error: Unknown action '${t}'`,!0)}}catch(s){let i=s instanceof Error?s.message:String(s);return this.createToolResult(`Error: ${i}`,`Error: ${i}`,!0)}}async executeResume(e,t){if(!e)return this.createToolResult("Error: taskId is required for resume action","Error: taskId is required for resume action",!0);try{let{resumePlanTask:n}=await Promise.resolve().then(()=>(To(),ni)),r=await n(e,t||0),s=`\u2705 \u4EFB\u52A1\u6062\u590D\u6267\u884C\u5B8C\u6210\uFF01
|
|
1523
1626
|
|
|
1524
1627
|
`;return s+=`**\u4EFB\u52A1 ID**: ${r.taskId}
|
|
1525
1628
|
`,s+=`**\u5B8C\u6210\u6B65\u9AA4**: ${r.completedSteps}
|
|
1526
1629
|
`,s+=`**\u6062\u590D\u8D77\u70B9**: \u6B65\u9AA4 ${r.resumedFrom}
|
|
1527
1630
|
|
|
1528
|
-
`,s+="\u6240\u6709\u6B65\u9AA4\u5DF2\u6210\u529F\u6267\u884C\u5B8C\u6BD5\u3002",this.createToolResult(s,s,!0)}catch(n){let r=n instanceof Error?n.message:String(n);return this.createToolResult(`Error: Failed to resume task - ${r}`,`Error: Failed to resume task - ${r}`,!0)}}async executeList(){try{let{listTaskPlans:e,loadTaskPlan:t}=await Promise.resolve().then(()=>(
|
|
1631
|
+
`,s+="\u6240\u6709\u6B65\u9AA4\u5DF2\u6210\u529F\u6267\u884C\u5B8C\u6BD5\u3002",this.createToolResult(s,s,!0)}catch(n){let r=n instanceof Error?n.message:String(n);return this.createToolResult(`Error: Failed to resume task - ${r}`,`Error: Failed to resume task - ${r}`,!0)}}async executeList(){try{let{listTaskPlans:e,loadTaskPlan:t}=await Promise.resolve().then(()=>($e(),We)),n=e();if(n.length===0)return this.createToolResult("No saved task plans found in ./.nium/tasks/ directory.","No saved task plans found in ./.nium/tasks/ directory.",!0);let r=`\u{1F4CB} \u5DF2\u4FDD\u5B58\u7684\u4EFB\u52A1\u8BA1\u5212 (\u5171 ${n.length} \u4E2A)
|
|
1529
1632
|
`;r+=`${"\u2550".repeat(60)}
|
|
1530
1633
|
|
|
1531
|
-
`;for(let s of n){let i=t(s);if(i){let a=i.tasks.filter(
|
|
1634
|
+
`;for(let s of n){let i=t(s);if(i){let a=i.tasks.filter(u=>u.status==="completed").length,c=i.tasks.length,l=a===c?"\u2705 \u5DF2\u5B8C\u6210":a>0?`\u23F3 \u8FDB\u884C\u4E2D (${a}/${c})`:"\u{1F4CB} \u5F85\u6267\u884C";r+=`**${s}**
|
|
1532
1635
|
`,r+=` \u72B6\u6001: ${l}
|
|
1533
1636
|
`,r+=` \u6B65\u9AA4: ${c} \u4E2A
|
|
1534
1637
|
`,r+=` \u7B56\u7565: ${i.strategy}
|
|
@@ -1536,7 +1639,7 @@ FEATURES:
|
|
|
1536
1639
|
`,r+=`
|
|
1537
1640
|
`}}return r+=`
|
|
1538
1641
|
\u{1F4A1} \u4F7F\u7528 todo(action="view", taskId="...") \u67E5\u770B\u8BE6\u60C5`,r+=`
|
|
1539
|
-
\u{1F4A1} \u4F7F\u7528 todo(action="resume", taskId="...") \u6062\u590D\u6267\u884C`,this.createToolResult(r,r,!0)}catch(e){let t=e instanceof Error?e.message:String(e);return this.createToolResult(`Error: Failed to list tasks - ${t}`,`Error: Failed to list tasks - ${t}`,!0)}}async executeView(e){if(!e)return this.createToolResult("Error: taskId is required for view action","Error: taskId is required for view action",!0);try{let{loadTaskPlan:t}=await Promise.resolve().then(()=>(
|
|
1642
|
+
\u{1F4A1} \u4F7F\u7528 todo(action="resume", taskId="...") \u6062\u590D\u6267\u884C`,this.createToolResult(r,r,!0)}catch(e){let t=e instanceof Error?e.message:String(e);return this.createToolResult(`Error: Failed to list tasks - ${t}`,`Error: Failed to list tasks - ${t}`,!0)}}async executeView(e){if(!e)return this.createToolResult("Error: taskId is required for view action","Error: taskId is required for view action",!0);try{let{loadTaskPlan:t}=await Promise.resolve().then(()=>($e(),We)),n=t(e);if(!n)return this.createToolResult(`Error: Task plan '${e}' not found`,`Error: Task plan '${e}' not found`,!0);let r=`\u{1F4CB} \u4EFB\u52A1\u8BA1\u5212\u8BE6\u60C5
|
|
1540
1643
|
`;r+=`${"\u2550".repeat(60)}
|
|
1541
1644
|
|
|
1542
1645
|
`,r+=`**\u4EFB\u52A1 ID**: ${n.taskId}
|
|
@@ -1558,7 +1661,7 @@ FEATURES:
|
|
|
1558
1661
|
`),r+=`
|
|
1559
1662
|
`}let s=n.tasks.find(i=>i.status!=="completed");return s?r+=`
|
|
1560
1663
|
\u{1F4A1} \u4F7F\u7528 todo(action="resume", taskId="${e}", resumeFrom=${s.step}) \u4ECE\u6B65\u9AA4 ${s.step} \u7EE7\u7EED\u6267\u884C`:r+=`
|
|
1561
|
-
\u2705 \u6240\u6709\u6B65\u9AA4\u5DF2\u5B8C\u6210\uFF01`,this.createToolResult(r,r,!0)}catch(t){let n=t instanceof Error?t.message:String(t);return this.createToolResult(`Error: Failed to view task - ${n}`,`Error: Failed to view task - ${n}`,!0)}}formatAction(e){let{action:t,taskId:n,resumeFrom:r}=e,s=`todo(action="${t}"`;return n&&(s+=`, taskId="${n}"`),r&&(s+=`, resumeFrom=${r}`),s+=")",s}},
|
|
1664
|
+
\u2705 \u6240\u6709\u6B65\u9AA4\u5DF2\u5B8C\u6210\uFF01`,this.createToolResult(r,r,!0)}catch(t){let n=t instanceof Error?t.message:String(t);return this.createToolResult(`Error: Failed to view task - ${n}`,`Error: Failed to view task - ${n}`,!0)}}formatAction(e){let{action:t,taskId:n,resumeFrom:r}=e,s=`todo(action="${t}"`;return n&&(s+=`, taskId="${n}"`),r&&(s+=`, resumeFrom=${r}`),s+=")",s}},rl=new Qt;yr=rl});var si={};j(si,{AskUserTool:()=>Xt,PlanTool:()=>De,QuickProjectScanTool:()=>pt,THINK_TOOL:()=>to,ThinkTool:()=>ot,TodoTool:()=>Qt,askUser:()=>mr,askUserTool:()=>fr,extractThought:()=>no,isThinkTool:()=>zt,plan:()=>gr,planTool:()=>pr,quickProjectScan:()=>qt,quickProjectScanTool:()=>Kt,think:()=>Wt,thinkTool:()=>Vt,todo:()=>hr,todoTool:()=>yr});var Po=C(()=>{Xn();oi();nl();Ys();ol()});async function sl(o){return ai.execute(o)}var ii,ai,il,wx,al=C(()=>{V();ar();ii=class extends ${getDefinition(){return{name:"search_file_changes",description:`Use this tool to search and query file changes in the workspace. This tool provides auxiliary information to help you understand the current state of the workspace.
|
|
1562
1665
|
|
|
1563
1666
|
IMPORTANT: This tool is for reference only. Your primary focus should be on solving the current task. Use this tool only when you need additional context about workspace changes.
|
|
1564
1667
|
|
|
@@ -1566,10 +1669,10 @@ Typical use cases:
|
|
|
1566
1669
|
- When you need to check what files have been modified recently
|
|
1567
1670
|
- When you want to understand the scope of changes in the workspace
|
|
1568
1671
|
- When you need to verify if certain files have been changed
|
|
1569
|
-
- When you want to get a summary of changes`,input_schema:{type:"object",properties:{query:{type:"string",description:"Search keywords to filter file changes"},filePatterns:{type:"array",items:{type:"string"},description:"File patterns to match (e.g., ['*.ts', '*.js'])",uniqueItems:!0},changeTypes:{type:"array",items:{type:"string",enum:["added","modified","deleted","renamed"]},description:"Types of changes to include",uniqueItems:!0},dateRange:{type:"object",properties:{start:{type:"string",format:"date-time",description:"Start date for filtering changes"},end:{type:"string",format:"date-time",description:"End date for filtering changes"}},description:"Time range to filter changes"},author:{type:"string",description:"Author to filter changes by"},branch:{type:"string",description:"Git branch to filter changes by"},sortBy:{type:"string",enum:["timestamp","filePath","size","type"],description:"Field to sort results by"},sortOrder:{type:"string",enum:["asc","desc"],description:"Sort order (ascending or descending)"},limit:{type:"integer",minimum:1,maximum:100,description:"Maximum number of results to return"},offset:{type:"integer",minimum:0,description:"Offset for pagination"},includeContent:{type:"boolean",description:"Whether to include file content previews"}}}}}async execute(e){try{let t=
|
|
1570
|
-
${n.stack||""}`)}}this.initialized=!0
|
|
1672
|
+
- When you want to get a summary of changes`,input_schema:{type:"object",properties:{query:{type:"string",description:"Search keywords to filter file changes"},filePatterns:{type:"array",items:{type:"string"},description:"File patterns to match (e.g., ['*.ts', '*.js'])",uniqueItems:!0},changeTypes:{type:"array",items:{type:"string",enum:["added","modified","deleted","renamed"]},description:"Types of changes to include",uniqueItems:!0},dateRange:{type:"object",properties:{start:{type:"string",format:"date-time",description:"Start date for filtering changes"},end:{type:"string",format:"date-time",description:"End date for filtering changes"}},description:"Time range to filter changes"},author:{type:"string",description:"Author to filter changes by"},branch:{type:"string",description:"Git branch to filter changes by"},sortBy:{type:"string",enum:["timestamp","filePath","size","type"],description:"Field to sort results by"},sortOrder:{type:"string",enum:["asc","desc"],description:"Sort order (ascending or descending)"},limit:{type:"integer",minimum:1,maximum:100,description:"Maximum number of results to return"},offset:{type:"integer",minimum:0,description:"Offset for pagination"},includeContent:{type:"boolean",description:"Whether to include file content previews"}}}}}async execute(e){try{let t=qe(),n={query:e.query,filter:{filePatterns:e.filePatterns,changeTypes:e.changeTypes,dateRange:e.dateRange,author:e.author,branch:e.branch},sortBy:e.sortBy,sortOrder:e.sortOrder,limit:e.limit,offset:e.offset,includeContent:e.includeContent};return await t.searchFileChanges(n)}catch(t){throw console.error("\u641C\u7D22\u6587\u4EF6\u53D8\u66F4\u65F6\u51FA\u9519:",t),new Error(`\u641C\u7D22\u6587\u4EF6\u53D8\u66F4\u5931\u8D25: ${t instanceof Error?t.message:String(t)}`)}}},ai=new ii;il=ai,wx=ai.getDefinition()});var ur={};j(ur,{AgentTools:()=>si,AskUserTool:()=>Xt,BaseTool:()=>$,BuildDocIndexTool:()=>_t,ConfirmableTool:()=>Ce,CopyTool:()=>Mt,CoreTools:()=>cs,DeleteTool:()=>Pt,FileChangeTools:()=>Hs,FileChangeTracker:()=>Be,FileOpsTools:()=>Ts,GlobTool:()=>Ft,GrepTool:()=>Ot,MergeTool:()=>It,MkdirTool:()=>kt,MoveTool:()=>$t,PlanTool:()=>De,QuickProjectScanTool:()=>pt,ReadTool:()=>Tt,SearchDocsTool:()=>jt,SearchReplaceTool:()=>At,SearchTools:()=>ks,ShellTool:()=>Nt,SystemTools:()=>Ps,THINK_TOOL:()=>to,ThinkTool:()=>ot,TodoTool:()=>Qt,ValidateTool:()=>Rt,WriteTool:()=>Et,aiContextManager:()=>Tp,askUser:()=>mr,askUserTool:()=>fr,buildDocIndex:()=>qn,buildDocIndexTool:()=>Kn,copyFile:()=>In,copyTool:()=>An,createFileChangeTracker:()=>io,createToolResult:()=>li,deleteFile:()=>En,deleteTool:()=>Pn,detectFileChanges:()=>co,extractThought:()=>no,extractToolResult:()=>xn,fileChangeTracking:()=>kp,generateChangeSummary:()=>lo,getCurrentSessionFileChanges:()=>mo,getFileChangeTracker:()=>ue,getSessionFileChanges:()=>po,glob:()=>Wn,globTool:()=>Vn,grep:()=>zn,grepTool:()=>Hn,handleGitCommit:()=>go,isThinkTool:()=>zt,isToolResult:()=>bt,merge:()=>Ln,mergeTool:()=>Rn,mkdir:()=>bn,mkdirTool:()=>rt,moveFile:()=>$n,moveTool:()=>Mn,plan:()=>gr,planTool:()=>pr,quickProjectScan:()=>qt,quickProjectScanTool:()=>Kt,read:()=>vn,readTool:()=>wn,recordFileChange:()=>uo,resetFileChangeTracker:()=>ao,searchDocs:()=>Jn,searchDocsTool:()=>Gn,searchReplace:()=>Dn,searchReplaceTool:()=>Fn,shell:()=>Yn,shellTool:()=>Ut,think:()=>Wt,thinkTool:()=>Vt,todo:()=>hr,todoTool:()=>yr,toolInstances:()=>H,tools:()=>ci,validate:()=>Nn,validateTool:()=>Un,write:()=>Tn,writeTool:()=>kn});function li(o,e=null,t=!0){return{__tool_result:!0,result:o,display:e!==null?e:o,shouldPrint:t}}var H,ci,Tp,kp,Re=C(()=>{ls();ls();Xr();Xr();Qr();Qr();eo();eo();Po();Po();lt();lt();Xr();Qr();eo();Po();al();lt();ar();H={think:Vt,plan:pr,todo:yr,askUser:fr,quickProjectScan:Kt,read:wn,write:kn,mkdir:rt,glob:Vn,grep:Hn,search_docs:Gn,build_doc_index:Kn,shell:Ut,merge:Rn,delete:Pn,move:Mn,copy:An,searchReplace:Fn,validate:Un,search_file_changes:il},ci={think:Wt,plan:gr,todo:hr,askUser:mr,quickProjectScan:qt,read:vn,write:Tn,mkdir:bn,merge:Ln,glob:Wn,grep:zn,search_docs:Jn,build_doc_index:qn,shell:Yn,delete:En,move:$n,copy:In,searchReplace:Dn,validate:Nn,searchFileChanges:sl},Tp={getAIContextManager:qe,createAIContextManager:Ec,resetAIContextManager:Pc},kp={detectFileChanges:co,generateChangeSummary:lo,recordFileChange:uo,handleGitCommit:go,getSessionFileChanges:po,getCurrentSessionFileChanges:mo,getFileChangeTracker:ue,createFileChangeTracker:io,resetFileChangeTracker:ao}});var cl=C(()=>{});import{Client as Ep}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as Pp}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{StdioClientTransport as $p}from"@modelcontextprotocol/sdk/client/stdio.js";var Cr,ui=C(()=>{Y();Cr=class{client=null;config;connected=!1;tools=[];constructor(e){this.config={timeout:3e4,enabled:!0,...e}}async connect(){x(`Connecting to MCP server: ${this.config.name} (${this.config.transport})`);try{let e;if(this.config.transport==="http"||this.config.transport==="sse"){if(!this.config.url)throw new Error(`URL is required for ${this.config.transport} transport`);e=new Pp(new URL(this.config.url))}else if(this.config.transport==="stdio"){if(!this.config.command)throw new Error(`Command is required for ${this.config.transport} transport`);e=new $p({command:this.config.command,args:this.config.args||[],env:this.config.env})}else throw new Error(`Unsupported transport type: ${this.config.transport}`);this.client=new Ep({name:"niumagents-cli",version:"0.1.0"}),await this.client.connect(e),this.connected=!0;let t=await this.client.listTools();this.tools=t.tools.map(n=>({name:n.name,description:n.description,inputSchema:n.inputSchema||{type:"object",properties:{}},serverName:this.config.name})),x(`Loaded ${this.tools.length} tools from ${this.config.name}`)}catch(e){throw x(`Failed to connect to MCP server ${this.config.name}: ${e.message}`),e}}async disconnect(){x(`Disconnecting from MCP server: ${this.config.name}`),this.client=null,this.connected=!1,this.tools=[]}async listTools(){if(!this.client||!this.connected)throw new Error("Not connected to MCP server");return(await this.client.listTools()).tools.map(t=>({name:t.name,description:t.description,inputSchema:t.inputSchema||{type:"object",properties:{}},serverName:this.config.name}))}async callTool(e,t){if(!this.client||!this.connected)return{success:!1,error:"Not connected to MCP server"};try{let n=await this.client.callTool({name:e,arguments:t});return{success:!n.isError,content:n.content||n.result,metadata:n.metadata||{}}}catch(n){return{success:!1,error:n.message}}}isConnected(){return this.connected}getConfig(){return this.config}getCachedTools(){return this.tools}}});var ll=C(()=>{ui()});function Zt(){return gi.getInstance()}var gi,pi=C(()=>{ui();Y();gi=class o{static instance=null;clients=new Map;mcpTools=new Map;initialized=!1;constructor(){}static getInstance(){return o.instance||(o.instance=new o),o.instance}async initialize(e){if(this.initialized){G("MCP Manager already initialized");return}if(M(`Initializing ${e.length} MCP server(s)...`),e.length>0){let t=e.map(n=>{let r=n.url||n.command||"N/A",s=n.enabled!==!1?"enabled":"disabled";return`${n.name} (${n.transport}, ${s}): ${r}`}).join(", ");x(`MCP Server Configurations: ${t}`)}for(let t of e){if(t.enabled===!1){x(`Skipping disabled MCP server: ${t.name}`);continue}try{x(`Attempting to connect to MCP server ${t.name} with URL: ${t.url||"N/A"}`),await this.connectToServer(t)}catch(n){X(`Failed to connect to MCP server ${t.name}: ${n.message}`),x(`Error details for ${t.name}: ${n.message}
|
|
1673
|
+
${n.stack||""}`)}}this.initialized=!0,M(`MCP Manager initialized with ${this.clients.size} server(s) and ${this.mcpTools.size} tool(s)`)}async connectToServer(e){x(`Connecting to MCP server: ${e.name} (${e.transport})`);let t=this.createClient(e);await t.connect(),this.clients.set(e.name,t);let n=t.getCachedTools();for(let r of n)this.registerTool(r);M(`Connected to MCP server: ${e.name} (${n.length} tools)`)}createClient(e){return new Cr(e)}registerTool(e){let t=e.name;if(this.mcpTools.has(t)){G(`MCP tool ${t} already registered, skipping (using first registered)`);return}this.mcpTools.set(t,e),x(`Registered MCP tool: ${t} from ${e.serverName}`)}getAllTools(){return Array.from(this.mcpTools.values())}getTool(e){return this.mcpTools.get(e)}hasTool(e){return this.mcpTools.has(e)}async callTool(e,t){let n=this.mcpTools.get(e);if(!n)return{success:!1,error:`MCP tool not found: ${e}`};let r=this.clients.get(n.serverName);return r?r.isConnected()?r.callTool(e,t):{success:!1,error:`MCP server not connected: ${n.serverName}`}:{success:!1,error:`MCP server not connected: ${n.serverName}`}}async disconnectAll(){x("Disconnecting all MCP servers...");for(let[e,t]of this.clients.entries())try{await t.disconnect(),x(`Disconnected from MCP server: ${e}`)}catch(n){X(`Error disconnecting from ${e}: ${n.message}`)}this.clients.clear(),this.mcpTools.clear(),this.initialized=!1,M("All MCP servers disconnected")}getStatus(){let e=Array.from(this.clients.entries()).map(([t,n])=>({name:t,connected:n.isConnected(),toolCount:n.getCachedTools().length}));return{initialized:this.initialized,serversConnected:this.clients.size,toolsAvailable:this.mcpTools.size,servers:e}}}});function ul(o){let e={};for(let t of o)e[t.name]=new $o(t);return e}function gl(o){let e={};for(let t of o){let n=new $o(t);e[t.name]=async(...r)=>n.execute(...r)}return e}var $o,pl=C(()=>{pi();V();Re();Y();$o=class extends ${mcpTool;constructor(e){super(),this.mcpTool=e}getDefinition(){return{name:this.mcpTool.name,description:`[MCP:${this.mcpTool.serverName}] ${this.mcpTool.description}`,input_schema:{type:"object",properties:this.mcpTool.inputSchema.properties||{},required:this.mcpTool.inputSchema.required}}}async execute(...e){x(`Executing MCP tool: ${this.mcpTool.name}`);let t=this.argsToParams(e),r=await Zt().callTool(this.mcpTool.name,t);if(!r.success)throw new Error(r.error||"MCP tool execution failed");let s=this.formatMCPResult(r.content);return li(s,s,!0)}argsToParams(e){if(e.length===1&&typeof e[0]=="object"&&!Array.isArray(e[0]))return e[0];let n=this.mcpTool.inputSchema.properties||{},r=Object.keys(n),s={};return e.forEach((i,a)=>{a<r.length&&(s[r[a]]=i)}),s}formatMCPResult(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>this.formatContentItem(t)).join(`
|
|
1571
1674
|
|
|
1572
|
-
`):JSON.stringify(e,null,2)}formatContentItem(e){return typeof e=="string"?e:e.type==="text"?e.text||"":e.type==="image"?`[Image: ${e.data?.substring(0,50)}...]`:e.type==="resource"?`[Resource: ${e.uri||"unknown"}]`:JSON.stringify(e)}formatAction(e){let t=typeof e=="object"?Object.entries(e).map(([n,r])=>`${n}=${JSON.stringify(r)}`).join(", "):JSON.stringify(e);return`${this.mcpTool.name}(${t}) [MCP:${this.mcpTool.serverName}]`}formatObservation(e){return e&&e.__tool_result?String(e.display||e.result):String(e)}shouldPrintObservation(e){return!0}}});var
|
|
1675
|
+
`):JSON.stringify(e,null,2)}formatContentItem(e){return typeof e=="string"?e:e.type==="text"?e.text||"":e.type==="image"?`[Image: ${e.data?.substring(0,50)}...]`:e.type==="resource"?`[Resource: ${e.uri||"unknown"}]`:JSON.stringify(e)}formatAction(e){let t=typeof e=="object"?Object.entries(e).map(([n,r])=>`${n}=${JSON.stringify(r)}`).join(", "):JSON.stringify(e);return`${this.mcpTool.name}(${t}) [MCP:${this.mcpTool.serverName}]`}formatObservation(e){return e&&e.__tool_result?String(e.display||e.result):String(e)}shouldPrintObservation(e){return!0}}});var di=C(()=>{cl();ll();pi();pl()});async function Mo(){if(mi){x("Tools already loaded, skipping");return}M("Loading tools..."),en={...H},dl={...ci};let o=Object.keys(H);M(`Loaded ${o.length} local tools`);let t=Zt().getAllTools();if(t.length===0){x("No MCP tools available"),mi=!0;return}let n=ul(t),r=gl(t),s=0,i=0;for(let[a,c]of Object.entries(n)){if(en[a]){x(`Skipping MCP tool ${a} (local tool has priority)`),i++;continue}en[a]=c,dl[a]=r[a],s++}M(`Added ${s} MCP tools, skipped ${i} (local priority)`),M(`Total tools available: ${Object.keys(en).length}`),mi=!0}function tn(){return en}function ml(){let o=Object.keys(H),e=Object.keys(en),t=e.filter(n=>!o.includes(n));return{local:o.length,mcp:t.length,total:e.length,localTools:o,mcpTools:t}}var en,dl,mi,xr=C(()=>{Re();di();Y();en={},dl={},mi=!1});var ri={};j(ri,{TOOL_DEFINITIONS:()=>Io,getRawToolDefinitions:()=>Qn,getToolDefinitions:()=>Sr,getToolNames:()=>hl,isRealTool:()=>Mp});function fl(o){return{name:o.name,description:o.description,input_schema:o.input_schema}}function Sr(){let o=tn();if(Object.keys(o).length===0)return Io.map(fl);let e=[],t=De.getCurrentNestingLevel(),n=De.MAX_NESTING_LEVEL,r=["think","todo","askUser"];t<n&&r.splice(1,0,"plan");for(let s of r)if(o[s]){let i=o[s].getDefinition();i&&e.push(i)}for(let[s,i]of Object.entries(o))if(!r.includes(s)&&i){let a=i.getDefinition();a&&e.push(a)}return e.filter(s=>s!=null).map(fl)}function Qn(){return Io}function hl(){return Io.map(o=>o.name)}function Mp(o){return o!=="think"&&hl().includes(o)}var Io,Ht=C(()=>{Re();xr();oi();Io=[H.think.getDefinition(),H.plan.getDefinition(),H.todo.getDefinition(),H.askUser.getDefinition(),H.quickProjectScan.getDefinition(),H.read.getDefinition(),H.write.getDefinition(),H.merge.getDefinition(),H.mkdir.getDefinition(),H.glob.getDefinition(),H.grep.getDefinition(),H.delete.getDefinition(),H.move.getDefinition(),H.copy.getDefinition(),H.searchReplace.getDefinition(),H.shell.getDefinition()]});function fi(o){return!o||typeof o!="string"?0:Math.ceil(o.length/4)}function Ye(o){if(!Array.isArray(o))return 0;let e=0;for(let t of o){if(t.content&&typeof t.content=="string"&&(e+=fi(t.content)),t.tool_calls&&Array.isArray(t.tool_calls))for(let n of t.tool_calls)n.function&&(e+=fi(n.function.name||""),e+=fi(n.function.arguments||""));e+=4}return e}function Ao(o,e){return!e||e<=0?0:o/e*100}function hi(o,e,t=80){return Ao(o,e)>=t}function yi(o,e,t){return`\u26A0\uFE0F Token usage warning: ${o.toLocaleString()} / ${e.toLocaleString()} tokens (${t.toFixed(1)}%)`}var Ci=C(()=>{});import vr from"chalk";var Lo,yl=C(()=>{Ci();Y();Lo=class{options;constructor(e={}){this.options={enabled:e.enabled??!0,threshold:e.threshold??.8,minKeepMessages:e.minKeepMessages??3,maxKeepMessages:e.maxKeepMessages??20,targetUsageAfterCompression:e.targetUsageAfterCompression??.6,useMixedSummary:e.useMixedSummary??!0,llmSummaryTokenThreshold:e.llmSummaryTokenThreshold??500}}shouldCompress(e,t){return this.options.enabled?Ye(e)/t>=this.options.threshold:!1}async compress(e,t,n){let r=Ye(e),s=e.length;M(`\u5F00\u59CB\u4E0A\u4E0B\u6587\u538B\u7F29: ${s} \u6761\u6D88\u606F, ${r} tokens`);let i=this.calculateDynamicWindowSize(e,t);x(`\u52A8\u6001\u7A97\u53E3\u5927\u5C0F: \u4FDD\u7559\u6700\u8FD1 ${i} \u6761\u5B8C\u6574\u6D88\u606F`);let a=e.slice(0,-i),c=e.slice(-i);if(a.length===0)return G("\u6CA1\u6709\u9700\u8981\u538B\u7F29\u7684\u6D88\u606F,\u8DF3\u8FC7\u538B\u7F29"),{messages:e,stats:{originalMessageCount:s,originalTokenCount:r,compressedMessageCount:s,compressedTokenCount:r,compressionRatio:1,llmSummaryCount:0,heuristicSummaryCount:0}};let{summaryMessage:l,llmCount:u,heuristicCount:p}=await this.createCompressedSummary(a,n),g=[l,...c],d=Ye(g),m={originalMessageCount:s,originalTokenCount:r,compressedMessageCount:g.length,compressedTokenCount:d,compressionRatio:d/r,llmSummaryCount:u,heuristicSummaryCount:p};return this.logCompressionStats(m),{messages:g,stats:m}}calculateDynamicWindowSize(e,t){let r=Ye(e)/t,s;return r>=.9?(s=this.options.minKeepMessages,x("Token\u538B\u529B\u6781\u9AD8 (>=90%), \u4F7F\u7528\u6700\u5C0F\u7A97\u53E3")):r>=.85?(s=Math.floor(this.options.minKeepMessages+(this.options.maxKeepMessages-this.options.minKeepMessages)*.25),x("Token\u538B\u529B\u9AD8 (>=85%), \u4F7F\u7528\u8F83\u5C0F\u7A97\u53E3")):r>=.8?(s=Math.floor(this.options.minKeepMessages+(this.options.maxKeepMessages-this.options.minKeepMessages)*.5),x("Token\u538B\u529B\u4E2D\u7B49 (>=80%), \u4F7F\u7528\u4E2D\u7B49\u7A97\u53E3")):(s=this.options.maxKeepMessages,x("Token\u538B\u529B\u6B63\u5E38, \u4F7F\u7528\u6700\u5927\u7A97\u53E3")),Math.min(s,e.length)}async createCompressedSummary(e,t){let n=[],r=0,s=0,i=this.groupMessages(e);for(let c of i){let l=Ye(c),u=this.assessMessageImportance(c),p;this.options.useMixedSummary&&u==="important"&&l>=this.options.llmSummaryTokenThreshold&&t?(p=await this.generateLLMSummary(c,t),r++,x(`\u4F7F\u7528LLM\u6458\u8981 (${c.length}\u6761\u6D88\u606F, ${l} tokens)`)):(p=this.generateHeuristicSummary(c),s++,x(`\u4F7F\u7528\u542F\u53D1\u5F0F\u6458\u8981 (${c.length}\u6761\u6D88\u606F, ${l} tokens)`)),n.push(p)}return{summaryMessage:{role:"system",content:`[\u5386\u53F2\u4E0A\u4E0B\u6587\u6458\u8981]
|
|
1573
1676
|
\u4EE5\u4E0B\u662F\u4E4B\u524D\u7684\u5BF9\u8BDD\u6458\u8981,\u5DF2\u538B\u7F29\u4EE5\u8282\u7701token:
|
|
1574
1677
|
|
|
1575
1678
|
${n.join(`
|
|
@@ -1578,15 +1681,16 @@ ${n.join(`
|
|
|
1578
1681
|
|
|
1579
1682
|
`)}
|
|
1580
1683
|
|
|
1581
|
-
[\u6458\u8981\u7ED3\u675F]`},llmCount:r,heuristicCount:s}}groupMessages(e){let t=[];for(let r=0;r<e.length;r+=3)t.push(e.slice(r,r+3));return t}assessMessageImportance(e){for(let t of e){if(!t.content)continue;let n=t.content.toLowerCase();if(n.includes("error")||n.includes("warning")||n.includes("\u9519\u8BEF")||n.includes("\u8B66\u544A")||t.tool_calls&&t.tool_calls.length>0||t.role==="system"||t.content&&t.content.length>1e3)return"important"}return"normal"}async generateLLMSummary(e,t){try{let{LITE_MODEL:n}=await Promise.resolve().then(()=>(
|
|
1582
|
-
`);return`\u{1F4DD} ${(await t({model:n(),messages:[{role:"system",content:"\u4F60\u662F\u4E00\u4E2A\u5BF9\u8BDD\u6458\u8981\u52A9\u624B\u3002\u8BF7\u5C06\u4E0B\u9762\u7684\u5BF9\u8BDD\u538B\u7F29\u6210\u7B80\u6D01\u7684\u6458\u8981(\u4E0D\u8D85\u8FC7150\u5B57),\u4FDD\u7559\u5173\u952E\u64CD\u4F5C\u3001\u7ED3\u679C\u548C\u91CD\u8981\u4FE1\u606F\u3002"},{role:"user",content:r}],temperature:.1,max_tokens:200,useCompression:!0})).choices?.[0]?.message?.content?.trim()||"\u6267\u884C\u5B8C\u6210"}`}catch(n){return
|
|
1583
|
-
\u2728 \u4E0A\u4E0B\u6587\u538B\u7F29\u5B8C\u6210`)),console.log(
|
|
1584
|
-
`))
|
|
1585
|
-
${
|
|
1586
|
-
`));let
|
|
1587
|
-
`))}else
|
|
1588
|
-
${
|
|
1589
|
-
`))}
|
|
1684
|
+
[\u6458\u8981\u7ED3\u675F]`},llmCount:r,heuristicCount:s}}groupMessages(e){let t=[];for(let r=0;r<e.length;r+=3)t.push(e.slice(r,r+3));return t}assessMessageImportance(e){for(let t of e){if(!t.content)continue;let n=t.content.toLowerCase();if(n.includes("error")||n.includes("warning")||n.includes("\u9519\u8BEF")||n.includes("\u8B66\u544A")||t.tool_calls&&t.tool_calls.length>0||t.role==="system"||t.content&&t.content.length>1e3)return"important"}return"normal"}async generateLLMSummary(e,t){try{let{LITE_MODEL:n}=await Promise.resolve().then(()=>(le(),wt)),r=e.filter(a=>a.content).map(a=>`${a.role}: ${a.content}`).join(`
|
|
1685
|
+
`);return`\u{1F4DD} ${(await t({model:n(),messages:[{role:"system",content:"\u4F60\u662F\u4E00\u4E2A\u5BF9\u8BDD\u6458\u8981\u52A9\u624B\u3002\u8BF7\u5C06\u4E0B\u9762\u7684\u5BF9\u8BDD\u538B\u7F29\u6210\u7B80\u6D01\u7684\u6458\u8981(\u4E0D\u8D85\u8FC7150\u5B57),\u4FDD\u7559\u5173\u952E\u64CD\u4F5C\u3001\u7ED3\u679C\u548C\u91CD\u8981\u4FE1\u606F\u3002"},{role:"user",content:r}],temperature:.1,max_tokens:200,useCompression:!0})).choices?.[0]?.message?.content?.trim()||"\u6267\u884C\u5B8C\u6210"}`}catch(n){return G(`LLM\u6458\u8981\u5931\u8D25,\u964D\u7EA7\u5230\u542F\u53D1\u5F0F\u65B9\u6CD5: ${n instanceof Error?n.message:String(n)}`),this.generateHeuristicSummary(e)}}generateHeuristicSummary(e){let t=[],n=[],r=!1;for(let i of e){if(i.tool_calls&&i.tool_calls.length>0)for(let a of i.tool_calls){let c=a.function.name;c!=="think"&&t.push(c)}if(i.content&&(i.content.includes("Error")||i.content.includes("\u9519\u8BEF"))&&(r=!0),i.content){let a=i.content.match(/\b(created|updated|fixed|implemented|tested|deployed|成功|失败|创建|更新|修复|实现)\b/gi);a&&n.push(...a.slice(0,3))}}let s=`\u6267\u884C\u4E86 ${e.length} \u8F6E\u5BF9\u8BDD`;if(t.length>0){let i=[...new Set(t)];s+=`, \u8C03\u7528\u5DE5\u5177: ${i.slice(0,3).join(", ")}`}return n.length>0&&(s+=`, \u5173\u952E\u64CD\u4F5C: ${[...new Set(n)].slice(0,3).join(", ")}`),r&&(s+=" \u26A0\uFE0F \u5305\u542B\u9519\u8BEF"),`\u{1F4AC} ${s}`}logCompressionStats(e){let t=(e.compressionRatio*100).toFixed(1),n=((1-e.compressionRatio)*100).toFixed(1);console.log(vr.green(`
|
|
1686
|
+
\u2728 \u4E0A\u4E0B\u6587\u538B\u7F29\u5B8C\u6210`)),console.log(vr.cyan(` \u6D88\u606F\u6570: ${e.originalMessageCount} \u2192 ${e.compressedMessageCount} (${e.compressedMessageCount-e.originalMessageCount})`)),console.log(vr.cyan(` Token: ${e.originalTokenCount} \u2192 ${e.compressedTokenCount} (\u8282\u7701 ${n}%)`)),console.log(vr.cyan(` \u538B\u7F29\u6BD4: ${t}%`)),console.log(vr.cyan(` \u6458\u8981\u65B9\u5F0F: LLM ${e.llmSummaryCount}\u6B21, \u542F\u53D1\u5F0F ${e.heuristicSummaryCount}\u6B21
|
|
1687
|
+
`)),M(`\u4E0A\u4E0B\u6587\u538B\u7F29: ${e.originalMessageCount}\u6761 \u2192 ${e.compressedMessageCount}\u6761, ${e.originalTokenCount}tokens \u2192 ${e.compressedTokenCount}tokens (${t}%)`)}updateOptions(e){this.options={...this.options,...e},x(`\u538B\u7F29\u914D\u7F6E\u5DF2\u66F4\u65B0: ${JSON.stringify(this.options)}`)}getOptions(){return{...this.options}}}});var Gt={};j(Gt,{callModelAPI:()=>ee,getDefaultSystemPrompt:()=>Ip});import nn from"chalk";async function ee(o){let{model:e=o.useCompression?Ie():ye(),messages:t,temperature:n=.1,max_tokens:r,useCompression:s=!1,tools:i=Sr(),tool_choice:a,compressionOptions:c,enableAutoCompression:l=!0}=o,u=s?await Cn.getLiteProvider():await Cn.getProvider();x(`\u6A21\u578B\u8C03\u7528\u914D\u7F6E: useCompression=${s}, \u6A21\u578B=${e}, provider=${u.getProviderType()}`),s?x(`\u6B63\u5728\u4F7F\u7528\u8F7B\u91CF\u6A21\u578B: ${e}`):x(`\u6B63\u5728\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B: ${e}`),x(`\u5DE5\u5177\u6570\u91CF: ${i?i.length:0}`);let p=s?os():rs(),g=t,d=Ye(g),m=Ao(d,p),h=y=>(y/1e3).toFixed(1)+"k";if(M(`\u4F7F\u7528\u6A21\u578B: ${e}, Token usage: ${h(d)} / ${h(p)} (${m.toFixed(1)}%)`),b.currentTaskId){let y=b.tasks.find(S=>S.id===b.currentTaskId);y&&(y.tokenCount=(y.tokenCount||0)+d)}if(l&&hi(d,p,80)){let y=yi(d,p,m);G(y),console.log(nn.yellow(`
|
|
1688
|
+
${y}`)),console.log(nn.cyan(`\u{1F504} \u6B63\u5728\u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587...
|
|
1689
|
+
`));let S=new Lo(c);if(S.shouldCompress(g,p))try{let{messages:E,stats:P}=await S.compress(g,p,ee);g=E,d=P.compressedTokenCount,m=Ao(d,p),M(`\u538B\u7F29\u540EToken\u4F7F\u7528: ${d} / ${p} (${m.toFixed(1)}%)`)}catch(E){G(`\u4E0A\u4E0B\u6587\u538B\u7F29\u5931\u8D25: ${E instanceof Error?E.message:String(E)}`),console.log(nn.yellow(`\u26A0\uFE0F \u4E0A\u4E0B\u6587\u538B\u7F29\u5931\u8D25,\u5C06\u4F7F\u7528\u539F\u59CB\u6D88\u606F\u7EE7\u7EED\u6267\u884C
|
|
1690
|
+
`))}else x("\u5F53\u524D\u4E0D\u6EE1\u8DB3\u538B\u7F29\u6761\u4EF6,\u8DF3\u8FC7\u538B\u7F29")}else if(hi(d,p,80)){let y=yi(d,p,m);G(y),console.log(nn.yellow(`
|
|
1691
|
+
${y}`)),console.log(nn.yellow(`Consider archiving old messages or starting a new session.
|
|
1692
|
+
`))}x(`\u6A21\u578B\u8BF7\u6C42: ${JSON.stringify({model:e,temperature:n,max_tokens:r,messages:g.length>0?`[${g[0].role}, ..., ${g[g.length-1].role}]`:"[]",tools:i?i.length:0})}`);let w,v=10,T=1e4,f=0;for(;f<=v;)try{w=await u.callModel({model:e,messages:g,temperature:n,max_tokens:r,tools:i,tool_choice:a});break}catch(y){let S=y instanceof Error?y.message:String(y);if((S.includes("429")||S.includes("Too Many Requests")||S.includes("rate limit")||S.includes("\u8D85\u8FC7\u9650\u5236")||S.includes("\u8BF7\u6C42\u9891\u7387"))&&f<v)f++,G(`API\u901F\u7387\u9650\u5236(429), \u6B63\u5728\u91CD\u8BD5... (${f}/${v}) \u7B49\u5F85 ${T/1e3}\u79D2`),console.log(nn.yellow(`\u26A0\uFE0F API\u901F\u7387\u9650\u5236, \u6B63\u5728\u91CD\u8BD5... (${f}/${v}) \u7B49\u5F85 ${T/1e3}\u79D2
|
|
1693
|
+
`)),await new Promise(P=>setTimeout(P,T));else throw X(`\u8C03\u7528\u6A21\u578BAPI\u65F6\u53D1\u751F\u9519\u8BEF: ${S}`),y instanceof Error&&y.stack&&x(`\u9519\u8BEF\u5806\u6808: ${y.stack}`),y}if(!w)throw X("\u6A21\u578B\u8FD4\u56DE undefined \u6216 null"),new Error("\u6A21\u578BAPI\u8FD4\u56DE\u7A7A\u54CD\u5E94");if(!w.choices)throw X(`\u6A21\u578B\u8FD4\u56DE\u7F3A\u5C11choices\u5B57\u6BB5: ${JSON.stringify(w)}`),new Error("\u6A21\u578BAPI\u8FD4\u56DE\u7684\u54CD\u5E94\u7F3A\u5C11choices\u5B57\u6BB5");if(!Array.isArray(w.choices)||w.choices.length===0)throw X(`\u6A21\u578B\u8FD4\u56DE\u7A7A\u7684choices\u6570\u7EC4: ${JSON.stringify(w)}`),new Error("\u6A21\u578BAPI\u8FD4\u56DE\u7684choices\u4E3A\u7A7A");return x(`\u6A21\u578B\u8FD4\u56DE: ${JSON.stringify(w)}`),w}function Ip(){return"You are a helpful assistant."}var ve=C(()=>{le();ia();Ne();Ht();Y();Ci();yl()});import*as pe from"fs";import*as Xe from"path";var xi,Cl=C(()=>{ve();le();xi={name:"explorer",description:"\u667A\u80FD\u63A2\u7D22\u9879\u76EE\u7ED3\u6784\uFF0C\u751F\u6210\u6587\u6863\u6216\u56DE\u7B54\u7ED3\u6784\u76F8\u5173\u95EE\u9898",keywords:["explore","\u9879\u76EE\u7ED3\u6784","\u6587\u4EF6\u5206\u6790","\u76EE\u5F55\u7ED3\u6784","\u9879\u76EE\u6982\u89C8","\u4EE3\u7801\u7EC4\u7EC7","\u67B6\u6784\u5206\u6790"],prompt:`\u4F60\u662F\u4E00\u4F4D\u9879\u76EE\u7ED3\u6784\u5206\u6790\u4E13\u5BB6\u3002\u4F60\u7684\u4EFB\u52A1\u662F\u667A\u80FD\u5730\u63A2\u7D22\u548C\u5206\u6790\u9879\u76EE\u7684\u6574\u4F53\u7ED3\u6784\uFF0C\u5E76\u751F\u6210\u9AD8\u8D28\u91CF\u7684\u603B\u7ED3\u578B\u63CF\u8FF0\u3002
|
|
1590
1694
|
|
|
1591
1695
|
## \u8F93\u51FA\u8981\u6C42
|
|
1592
1696
|
|
|
@@ -1685,7 +1789,7 @@ ${h}`)),console.log(or.yellow(`Consider archiving old messages or starting a new
|
|
|
1685
1789
|
3. **\u6DF1\u5EA6\u5206\u6790**\uFF1A\u5FC5\u8981\u65F6\u6DF1\u5165\u8BFB\u53D6\u548C\u5206\u6790\u5173\u952E\u4EE3\u7801\u6587\u4EF6
|
|
1686
1790
|
4. **\u6E05\u6670\u8868\u8FBE**\uFF1A\u4EE5\u7ED3\u6784\u5316\u3001\u6613\u61C2\u7684\u65B9\u5F0F\u5448\u73B0\u5206\u6790\u7ED3\u679C
|
|
1687
1791
|
5. **\u603B\u7ED3\u4F18\u5148**\uFF1A\u59CB\u7EC8\u751F\u6210\u7CBE\u7B80\u7684\u603B\u7ED3\u578B\u63CF\u8FF0\uFF0C\u907F\u514D\u5197\u4F59\u4FE1\u606F
|
|
1688
|
-
6. **\u4FBF\u4E8E\u68C0\u7D22**\uFF1A\u4F7F\u7528\u660E\u786E\u7684\u5173\u952E\u8BCD\u548C\u5C42\u6B21\u7ED3\u6784\uFF0C\u65B9\u4FBF\u540E\u7EED\u68C0\u7D22\u548C\u7406\u89E3`,finalAnswerCallback:async(o,e)=>{try{let t=process.cwd(),n=
|
|
1792
|
+
6. **\u4FBF\u4E8E\u68C0\u7D22**\uFF1A\u4F7F\u7528\u660E\u786E\u7684\u5173\u952E\u8BCD\u548C\u5C42\u6B21\u7ED3\u6784\uFF0C\u65B9\u4FBF\u540E\u7EED\u68C0\u7D22\u548C\u7406\u89E3`,finalAnswerCallback:async(o,e)=>{try{let t=process.cwd(),n=Xe.join(t,".nium","docs");pe.existsSync(n)||pe.mkdirSync(n,{recursive:!0});let r=Xe.join(n,"PROJECT.md"),s=`# \u9879\u76EE\u63A2\u7D22\u62A5\u544A
|
|
1689
1793
|
|
|
1690
1794
|
> \u751F\u6210\u65F6\u95F4: ${new Date().toLocaleString("zh-CN",{timeZone:"Asia/Shanghai"})}
|
|
1691
1795
|
> \u751F\u6210\u5DE5\u5177: Explorer Agent
|
|
@@ -1697,11 +1801,11 @@ ${o}
|
|
|
1697
1801
|
---
|
|
1698
1802
|
|
|
1699
1803
|
*\u6B64\u6587\u6863\u7531 Explorer Agent \u81EA\u52A8\u751F\u6210\uFF0C\u8BB0\u5F55\u4E86\u9879\u76EE\u7ED3\u6784\u5206\u6790\u7ED3\u679C\u3002*
|
|
1700
|
-
`;if(!
|
|
1701
|
-
\u2713 \u9879\u76EE\u63A2\u7D22\u7ED3\u679C\u5DF2\u4FDD\u5B58\u5230: ${
|
|
1804
|
+
`;if(!pe.existsSync(r))pe.writeFileSync(r,s,"utf-8"),console.log(`
|
|
1805
|
+
\u2713 \u9879\u76EE\u63A2\u7D22\u7ED3\u679C\u5DF2\u4FDD\u5B58\u5230: ${Xe.relative(t,r)}`);else{let i=Xe.join(t,".nium","merge");pe.existsSync(i)||pe.mkdirSync(i,{recursive:!0});let a=`project-merge-${Date.now()}.md`,c=Xe.join(i,a),l=`# PROJECT.md \u5408\u5E76\u8BF7\u6C42
|
|
1702
1806
|
|
|
1703
1807
|
## \u5F53\u524D\u6587\u4EF6\u5185\u5BB9
|
|
1704
|
-
${
|
|
1808
|
+
${pe.readFileSync(r,"utf-8")}
|
|
1705
1809
|
|
|
1706
1810
|
## \u65B0\u751F\u6210\u5185\u5BB9
|
|
1707
1811
|
${s}
|
|
@@ -1714,33 +1818,107 @@ ${s}
|
|
|
1714
1818
|
4. \u5408\u5E76\u6838\u5FC3\u6A21\u5757\u5206\u6790\uFF0C\u4FDD\u7559\u6240\u6709\u6709\u7528\u4FE1\u606F
|
|
1715
1819
|
5. \u786E\u4FDD\u5408\u5E76\u540E\u7684\u6587\u6863\u7ED3\u6784\u6E05\u6670\uFF0C\u4FBF\u4E8E\u9605\u8BFB\u548C\u68C0\u7D22
|
|
1716
1820
|
6. \u4FDD\u6301\u8F93\u51FA\u4E3A\u7CBE\u7B80\u7684\u603B\u7ED3\u578B\u63CF\u8FF0\uFF0C\u9002\u5408\u4F5C\u4E3A\u52A8\u6001\u63D0\u793A\u8BCD
|
|
1717
|
-
`;
|
|
1718
|
-
\u2713 \u9879\u76EE\u63A2\u7D22\u7ED3\u679C\u5DF2\u751F\u6210\u5408\u5E76\u8BF7\u6C42: ${
|
|
1821
|
+
`;pe.writeFileSync(c,l,"utf-8"),console.log(`
|
|
1822
|
+
\u2713 \u9879\u76EE\u63A2\u7D22\u7ED3\u679C\u5DF2\u751F\u6210\u5408\u5E76\u8BF7\u6C42: ${Xe.relative(t,c)}`),console.log(" \u6B63\u5728\u8C03\u7528\u6A21\u578B\u5904\u7406\u5408\u5E76\u903B\u8F91...");let u=`\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6587\u6863\u5408\u5E76\u4E13\u5BB6\u3002\u8BF7\u6839\u636E\u63D0\u4F9B\u7684\u5408\u5E76\u8BF7\u6C42\uFF0C\u5C06\u5F53\u524D\u6587\u4EF6\u5185\u5BB9\u548C\u65B0\u751F\u6210\u5185\u5BB9\u5408\u5E76\u4E3A\u4E00\u4E2A\u9AD8\u8D28\u91CF\u7684 PROJECT.md \u6587\u4EF6\u3002
|
|
1719
1823
|
|
|
1720
1824
|
${l}
|
|
1721
1825
|
|
|
1722
|
-
\u8BF7\u76F4\u63A5\u8FD4\u56DE\u5408\u5E76\u540E\u7684\u5B8C\u6574\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u989D\u5916\u7684\u89E3\u91CA\u6216\u8BF4\u660E\u3002`,
|
|
1723
|
-
|
|
1724
|
-
|
|
1826
|
+
\u8BF7\u76F4\u63A5\u8FD4\u56DE\u5408\u5E76\u540E\u7684\u5B8C\u6574\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u989D\u5916\u7684\u89E3\u91CA\u6216\u8BF4\u660E\u3002`,g=(await ee({model:ye(),messages:[{role:"user",content:u}],temperature:.1,max_tokens:4e3,tools:[]}))?.choices?.[0]?.message?.content;g?(pe.writeFileSync(r,g,"utf-8"),console.log(" \u2713 \u5408\u5E76\u5B8C\u6210\uFF0CPROJECT.md \u5DF2\u66F4\u65B0")):console.log(" \u26A0\uFE0F \u6A21\u578B\u672A\u8FD4\u56DE\u6709\u6548\u5408\u5E76\u7ED3\u679C")}e?.orchestratorContext&&(e.orchestratorContext.recordExplorationResult(o),console.log(" \u2713 \u63A2\u7D22\u7ED3\u679C\u5DF2\u8BB0\u5F55\u5230\u5168\u5C40\u4E0A\u4E0B\u6587"))}catch(t){console.error(`\u4FDD\u5B58\u9879\u76EE\u6587\u6863\u65F6\u51FA\u9519: ${t.message}`)}}}});var Si,xl=C(()=>{Si={name:"doc-retriever",description:"\u6587\u6863\u68C0\u7D22\u548C\u4FE1\u606F\u63D0\u53D6\uFF0C\u7528\u4E8E\u641C\u7D22\u548C\u83B7\u53D6\u6587\u6863\u5185\u5BB9\uFF0C\u652F\u6301\u5173\u952E\u8BCD\u641C\u7D22\u548C\u6B63\u5219\u8868\u8FBE\u5F0F",keywords:["search","\u641C\u7D22","\u6587\u6863","docs","documentation","retrieve","find","\u67E5\u627E","\u67E5\u8BE2","\u641C\u7D22\u6587\u6863","\u67E5\u627E\u6587\u6863","\u83B7\u53D6\u6587\u6863","\u68C0\u7D22\u4FE1\u606F","\u641C\u7D22\u5185\u5BB9","find document","search documentation","get information","retrieve information","search for","\u67E5\u627E\u5185\u5BB9","\u641C\u7D22\u4FE1\u606F","\u67E5\u8BE2\u4FE1\u606F","\u68C0\u7D22\u6587\u6863","\u6587\u6863\u641C\u7D22","\u4FE1\u606F\u68C0\u7D22","search docs","find info","\u67E5\u627E\u8D44\u6599","\u641C\u7D22\u8D44\u6599"],prompt:`\u4F60\u662F\u4E00\u4F4D\u6587\u6863\u68C0\u7D22\u4E13\u5BB6\u3002\u4F60\u7684\u4EFB\u52A1\u662F\u6839\u636E\u7528\u6237\u9700\u6C42\u641C\u7D22\u548C\u68C0\u7D22\u76F8\u5173\u6587\u6863\u5185\u5BB9\uFF0C\u652F\u6301\u5173\u952E\u8BCD\u641C\u7D22\u548C\u6B63\u5219\u8868\u8FBE\u5F0F\u3002
|
|
1827
|
+
|
|
1828
|
+
## \u6838\u5FC3\u89C4\u5219
|
|
1829
|
+
|
|
1830
|
+
1. **\u6587\u6863\u641C\u7D22\u7B56\u7565**\uFF1A
|
|
1831
|
+
- \u4F18\u5148\u4F7F\u7528search-docs\u5DE5\u5177\u8FDB\u884C\u6587\u6863\u641C\u7D22
|
|
1832
|
+
- \u652F\u6301\u5173\u952E\u8BCD\u641C\u7D22\u548C\u6B63\u5219\u8868\u8FBE\u5F0F
|
|
1833
|
+
- \u53EF\u4EE5\u6307\u5B9A\u641C\u7D22\u8DEF\u5F84\u548C\u6700\u5927\u8FD4\u56DE\u7ED3\u679C\u6570
|
|
1834
|
+
- \u7ED3\u679C\u6309\u76F8\u5173\u6027\u6392\u5E8F
|
|
1835
|
+
|
|
1836
|
+
2. **\u641C\u7D22\u7ED3\u679C\u5904\u7406**\uFF1A
|
|
1837
|
+
- \u63D0\u53D6\u76F8\u5173\u6587\u6863\u5185\u5BB9
|
|
1838
|
+
- \u8FC7\u6EE4\u65E0\u5173\u4FE1\u606F
|
|
1839
|
+
- \u6574\u7406\u548C\u683C\u5F0F\u5316\u641C\u7D22\u7ED3\u679C
|
|
1840
|
+
- \u63D0\u4F9B\u6E05\u6670\u7684\u5F15\u7528\u548C\u6765\u6E90
|
|
1841
|
+
|
|
1842
|
+
3. **\u6587\u6863\u7D22\u5F15\u7BA1\u7406**\uFF1A
|
|
1843
|
+
- \u5B9A\u671F\u66F4\u65B0\u6587\u6863\u7D22\u5F15
|
|
1844
|
+
- \u786E\u4FDD\u7D22\u5F15\u4E0E\u5B9E\u9645\u6587\u6863\u540C\u6B65
|
|
1845
|
+
- \u4F7F\u7528build-doc-index\u5DE5\u5177\u6784\u5EFA\u548C\u66F4\u65B0\u7D22\u5F15
|
|
1846
|
+
|
|
1847
|
+
4. **\u641C\u7D22\u4F18\u5316**\uFF1A
|
|
1848
|
+
- \u5206\u6790\u7528\u6237\u67E5\u8BE2\u610F\u56FE
|
|
1849
|
+
- \u4F18\u5316\u641C\u7D22\u5173\u952E\u8BCD
|
|
1850
|
+
- \u8C03\u6574\u641C\u7D22\u8303\u56F4
|
|
1851
|
+
- \u63D0\u4F9B\u76F8\u5173\u641C\u7D22\u5EFA\u8BAE
|
|
1852
|
+
|
|
1853
|
+
## \u5DE5\u4F5C\u6D41\u7A0B
|
|
1854
|
+
|
|
1855
|
+
1. **\u63A5\u6536\u67E5\u8BE2**\uFF1A\u7406\u89E3\u7528\u6237\u7684\u641C\u7D22\u9700\u6C42
|
|
1856
|
+
2. **\u6784\u5EFA\u641C\u7D22**\uFF1A\u6839\u636E\u9700\u6C42\u6784\u5EFA\u5408\u9002\u7684\u641C\u7D22\u67E5\u8BE2
|
|
1857
|
+
3. **\u6267\u884C\u641C\u7D22**\uFF1A\u4F7F\u7528search-docs\u5DE5\u5177\u6267\u884C\u641C\u7D22
|
|
1858
|
+
4. **\u5904\u7406\u7ED3\u679C**\uFF1A\u6574\u7406\u548C\u8FC7\u6EE4\u641C\u7D22\u7ED3\u679C
|
|
1859
|
+
5. **\u8FD4\u56DE\u5185\u5BB9**\uFF1A\u63D0\u4F9B\u76F8\u5173\u6587\u6863\u5185\u5BB9\u548C\u5F15\u7528
|
|
1860
|
+
6. **\u7D22\u5F15\u7BA1\u7406**\uFF1A\u5B9A\u671F\u66F4\u65B0\u6587\u6863\u7D22\u5F15\uFF08\u5982\u679C\u9700\u8981\uFF09
|
|
1861
|
+
|
|
1862
|
+
## \u5DE5\u5177\u4F7F\u7528\u6307\u5357
|
|
1863
|
+
|
|
1864
|
+
1. **\u641C\u7D22\u6587\u6863**\uFF1A
|
|
1865
|
+
- \u4F7F\u7528search-docs\u5DE5\u5177\u8FDB\u884C\u6587\u6863\u641C\u7D22
|
|
1866
|
+
- \u53C2\u6570\uFF1A
|
|
1867
|
+
- query: \u641C\u7D22\u67E5\u8BE2\u5B57\u7B26\u4E32
|
|
1868
|
+
- path: \u6587\u6863\u8DEF\u5F84\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4.niums/docs\uFF09
|
|
1869
|
+
- maxResults: \u6700\u5927\u8FD4\u56DE\u7ED3\u679C\u6570\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA410\uFF09
|
|
1870
|
+
|
|
1871
|
+
2. **\u6784\u5EFA\u7D22\u5F15**\uFF1A
|
|
1872
|
+
- \u4F7F\u7528build-doc-index\u5DE5\u5177\u6784\u5EFA\u548C\u66F4\u65B0\u6587\u6863\u7D22\u5F15
|
|
1873
|
+
- \u53C2\u6570\uFF1A
|
|
1874
|
+
- path: \u6587\u6863\u8DEF\u5F84\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4.niums/docs\uFF09
|
|
1875
|
+
|
|
1876
|
+
3. **\u8BFB\u53D6\u6587\u6863**\uFF1A
|
|
1877
|
+
- \u4F7F\u7528read\u5DE5\u5177\u8BFB\u53D6\u5B8C\u6574\u6587\u6863\u5185\u5BB9
|
|
1878
|
+
- \u53C2\u6570\uFF1A
|
|
1879
|
+
- path: \u6587\u6863\u8DEF\u5F84
|
|
1880
|
+
|
|
1881
|
+
## \u641C\u7D22\u6280\u5DE7
|
|
1882
|
+
|
|
1883
|
+
1. **\u5173\u952E\u8BCD\u641C\u7D22**\uFF1A\u76F4\u63A5\u4F7F\u7528\u5173\u952E\u8BCD\u8FDB\u884C\u641C\u7D22\uFF0C\u5982"search-docs({ query: 'API', path: '.niums/docs' })"
|
|
1884
|
+
2. **\u6B63\u5219\u8868\u8FBE\u5F0F**\uFF1A\u4F7F\u7528\u6B63\u5219\u8868\u8FBE\u5F0F\u8FDB\u884C\u9AD8\u7EA7\u641C\u7D22\uFF0C\u5982"search-docs({ query: 'function\\s+\\w+', path: '.niums/docs' })"
|
|
1885
|
+
3. **\u6307\u5B9A\u8DEF\u5F84**\uFF1A\u5728\u7279\u5B9A\u76EE\u5F55\u4E0B\u641C\u7D22\uFF0C\u5982"search-docs({ query: 'config', path: '.niums/docs/config' })"
|
|
1886
|
+
4. **\u9650\u5236\u7ED3\u679C\u6570**\uFF1A\u9650\u5236\u8FD4\u56DE\u7684\u7ED3\u679C\u6570\u91CF\uFF0C\u5982"search-docs({ query: 'example', path: '.niums/docs', maxResults: 5 })"
|
|
1887
|
+
|
|
1888
|
+
## \u7ED3\u679C\u5448\u73B0
|
|
1889
|
+
|
|
1890
|
+
1. **\u6E05\u6670\u5F15\u7528**\uFF1A\u6BCF\u4E2A\u641C\u7D22\u7ED3\u679C\u90FD\u8981\u5305\u542B\u6587\u6863\u8DEF\u5F84\u548C\u6765\u6E90
|
|
1891
|
+
2. **\u76F8\u5173\u5185\u5BB9**\uFF1A\u53EA\u8FD4\u56DE\u4E0E\u67E5\u8BE2\u76F8\u5173\u7684\u5185\u5BB9\u7247\u6BB5
|
|
1892
|
+
3. **\u4E0A\u4E0B\u6587\u4FE1\u606F**\uFF1A\u63D0\u4F9B\u8DB3\u591F\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF0C\u4FBF\u4E8E\u7406\u89E3
|
|
1893
|
+
4. **\u683C\u5F0F\u5316\u8F93\u51FA**\uFF1A\u4F7F\u7528\u6E05\u6670\u7684\u683C\u5F0F\u5448\u73B0\u641C\u7D22\u7ED3\u679C
|
|
1894
|
+
|
|
1895
|
+
## \u7279\u522B\u6CE8\u610F
|
|
1896
|
+
|
|
1897
|
+
1. **\u6587\u6863\u66F4\u65B0**\uFF1A\u5982\u679C\u641C\u7D22\u7ED3\u679C\u4E0D\u5339\u914D\u6216\u8FC7\u65F6\uFF0C\u5EFA\u8BAE\u66F4\u65B0\u6587\u6863\u7D22\u5F15
|
|
1898
|
+
2. **\u641C\u7D22\u8303\u56F4**\uFF1A\u6839\u636E\u9700\u8981\u8C03\u6574\u641C\u7D22\u8303\u56F4\uFF0C\u786E\u4FDD\u8986\u76D6\u76F8\u5173\u6587\u6863
|
|
1899
|
+
3. **\u7ED3\u679C\u51C6\u786E\u6027**\uFF1A\u786E\u4FDD\u641C\u7D22\u7ED3\u679C\u51C6\u786E\u53CD\u6620\u7528\u6237\u9700\u6C42
|
|
1900
|
+
4. **\u7D22\u5F15\u7EF4\u62A4**\uFF1A\u5B9A\u671F\u66F4\u65B0\u6587\u6863\u7D22\u5F15\uFF0C\u786E\u4FDD\u7D22\u5F15\u4E0E\u5B9E\u9645\u6587\u6863\u540C\u6B65`}});function Sl(){return Object.values(Ap)}var Ap,vl=C(()=>{ea();Cl();xl();Ap={[ts.name]:ts,[xi.name]:xi,[Si.name]:Si}});var Qc={};j(Qc,{SubAgentManager:()=>Do,getSubAgentManager:()=>Yt});import{existsSync as Lp,readFileSync as Rp,readdirSync as Dp}from"fs";import{join as Fp}from"path";import de from"chalk";function Yt(o={}){return Ro?o.matchStrategy&&Ro.setMatchStrategy(o.matchStrategy):Ro=new Do(o),Ro}var Do,Ro,ko=C(()=>{je();vl();le();ve();it();Do=class{subAgents;agentPerformance;matchStrategy;constructor(e={}){this.subAgents=new Map,this.agentPerformance=new Map,this.matchStrategy=e.matchStrategy||"hybrid",this.loadBuiltinAgents(),this.loadSubAgents()}loadBuiltinAgents(){try{let e=Sl();console.log(de.blue(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] \u52A0\u8F7D ${e.length} \u4E2A\u5185\u7F6E\u5B50\u4EE3\u7406`)),e.forEach(t=>{this.subAgents.set(t.name,t)})}catch(e){console.log(de.red(`\u274C \u52A0\u8F7D\u5185\u7F6E\u4EE3\u7406\u5931\u8D25: ${e.message}`))}}loadSubAgents(){let e=ge("agents");if(!Lp(e)){console.log(de.gray("[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] .nium/agents \u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u52A0\u8F7D\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53"));return}try{let n=Dp(e).filter(r=>r.endsWith(".json")||r.endsWith(".md"));console.log(de.blue(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] \u52A0\u8F7D ${n.length} \u4E2A\u81EA\u5B9A\u4E49\u5B50\u4EE3\u7406`));for(let r of n)try{let s=Fp(e,r),i=Rp(s,"utf-8"),a;r.endsWith(".json")?a=JSON.parse(i):r.endsWith(".md")&&(a=this.parseFrontmatter(i)),this.validateConfig(a)?(this.subAgents.set(a.name,a),console.log(de.green(`\u2713 \u52A0\u8F7D\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53: ${a.name}`))):console.log(de.yellow(`\u26A0\uFE0F \u914D\u7F6E\u6587\u4EF6 ${r} \u683C\u5F0F\u65E0\u6548\uFF0C\u5DF2\u8DF3\u8FC7`))}catch(s){console.log(de.red(`\u274C \u52A0\u8F7D\u914D\u7F6E\u6587\u4EF6 ${r} \u5931\u8D25: ${s.message}`))}}catch(t){console.log(de.red(`\u274C \u8BFB\u53D6agents\u76EE\u5F55\u5931\u8D25: ${t.message}`))}}parseFrontmatter(e){let t=/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/,n=e.match(t);if(!n)throw new Error("\u65E0\u6548\u7684 frontmatter \u683C\u5F0F");let[,r,s]=n,i={},a=r.split(`
|
|
1901
|
+
`);for(let c of a){let l=c.trim();if(!l)continue;let u=l.match(/^(\w+)\s*[::]\s*(.+)$/);if(u){let[,p,g]=u;p==="keywords"?i.keywords=g.split(/[,,]/).map(d=>d.trim()).filter(d=>d):i[p]=g.trim()}}return i.prompt=s.trim(),i}validateConfig(e){return!(!e||typeof e!="object"||!e.name||typeof e.name!="string"||!e.description||typeof e.description!="string"||!e.prompt||typeof e.prompt!="string")}async matchSubAgent(e){if(this.subAgents.size===0)return null;let t=Array.from(this.subAgents.values());switch(this.matchStrategy){case"semantic":return await this.matchSubAgentWithAI(e,t);case"hybrid":let n=this.matchSubAgentWithKeywords(e);if(n)return console.log(de.green(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] Hybrid\u7B56\u7565 - \u5173\u952E\u8BCD\u5339\u914D\u6210\u529F: ${n.name}`)),n;let r=await this.matchSubAgentWithAI(e,t);return r&&console.log(de.green(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] Hybrid\u7B56\u7565 - \u8BED\u4E49\u5339\u914D\u6210\u529F: ${r.name}`)),r;case"keyword":default:return this.matchSubAgentWithKeywords(e)}}matchSubAgentWithKeywords(e){let t=e.toLowerCase(),n=[];for(let[r,s]of this.subAgents){let i=0;if(s.keywords&&Array.isArray(s.keywords))for(let u of s.keywords)t.includes(u.toLowerCase())&&(i+=10);t.includes(r.toLowerCase())&&(i+=5);let a=s.description.toLowerCase(),c=t.split(/\s+/).filter(u=>u.length>2&&a.includes(u));i+=c.length*2;let l=this.agentPerformance.get(r);if(l){let u=l.success/l.total;i+=u*5;let p=Math.max(0,1-(Date.now()-l.lastUsed)/(10080*60*1e3));i+=p*2}i>0&&n.push({agent:s,score:i})}if(n.length>0){n.sort((s,i)=>i.score-s.score);let r=n[0].agent;return console.log(de.green(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] \u57FA\u4E8E\u5206\u6570\u5339\u914D\u5230\u667A\u80FD\u4F53: ${r.name} (\u5206\u6570: ${n[0].score.toFixed(1)})`)),r}return null}async matchSubAgentWithAI(e,t){let n=t.map(l=>`${l.name}: ${l.description}`).join(`
|
|
1902
|
+
`),r=Ds(e,n),s=await ee({model:Ie(),messages:[{role:"user",content:r}],temperature:0,max_tokens:100,useCompression:!0}),{content:i}=s.choices[0].message,a=i?i.trim():"";return this.getSubAgent(a)||null}recordAgentPerformance(e,t,n){let r=this.agentPerformance.get(e)||{total:0,success:0,avgTime:0,lastUsed:Date.now()};r.total++,t&&r.success++,r.avgTime=(r.avgTime*(r.total-1)+n)/r.total,r.lastUsed=Date.now(),this.agentPerformance.set(e,r)}setMatchStrategy(e){return["keyword","semantic","hybrid"].includes(e)?(this.matchStrategy=e,console.log(de.blue(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] \u5339\u914D\u7B56\u7565\u5DF2\u8BBE\u7F6E\u4E3A: ${e}`)),!0):(console.error(de.red(`[\u5B50\u667A\u80FD\u4F53\u7BA1\u7406\u5668] \u65E0\u6548\u7684\u5339\u914D\u7B56\u7565: ${e}`)),!1)}getAllSubAgents(){return Array.from(this.subAgents.values())}getSubAgent(e){return this.subAgents.get(e)||null}},Ro=null});import q from"chalk";import mt from"readline";async function Fo(o,e=!1,t=null,n=null){let r,s=null,i=oo();if(Z("Initializing react loop with think-tool support"),e&&b.messages&&b.messages.length>0)Z(`Resuming existing session: ${b.sessionId}`),r=b.messages,Qe(`\u6062\u590D\u4F1A\u8BDD [ID:${b.sessionId.substring(0,8)}]: ${b.currentTask}`),hn(q.green(`\u4ECE ${b.updatedAt} \u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD [ID:${b.sessionId.substring(0,8)}]`),t),B(q.gray(`\u4E4B\u524D\u7684\u4EFB\u52A1: ${b.currentTask}`),t),b.tasks&&b.tasks.length>0&&B(q.gray(`\u4F1A\u8BDD\u4E2D\u4EFB\u52A1\u6570\u91CF: ${b.tasks.length}`),t),B("",t);else if(o){Z(`Starting new task: ${o.substring(0,50)}${o.length>50?"...":""}`);let u=ue(),p=qe(u);await u.detectFileChanges();let g=p.generatePromptIntegrationContent();r=[{role:"system",content:g?`${st}
|
|
1725
1903
|
|
|
1726
|
-
${
|
|
1727
|
-
\u6700\u7EC8\u7B54\u6848:`),t),
|
|
1728
|
-
${
|
|
1904
|
+
${g}`:st},{role:"user",content:o}],Qe(`\u5F00\u59CB\u65B0\u4EFB\u52A1: ${o}`),(i.enableAnchorSystem||i.enableSemanticAnalysis)&&(s=new ut(o,ee),Z("\u7EDF\u4E00\u951A\u70B9\u6CE8\u5165\u5668\u5DF2\u521D\u59CB\u5316")),Fr(o),ce(r,o)}else{he("No user request provided and no session to resume");return}let a=0,c=100,l=0;for(Z(`Starting execution loop with max ${c} iterations`);a<c;){a++,Z(`Loop iteration ${a}`);try{if(s){let v=await s.injectAnchors({taskDescription:o||b.currentTask,iterations:a,messages:r,lastSemanticCheckIteration:l,session:t,logWarning:Ct,callModelAPI:ee}),{messages:T,lastSemanticCheckIteration:f}=v;r=T,l=f}ce(r);let u=ye();t&&B(q.gray(`[\u8FED\u4EE3 ${a}] \u4F7F\u7528\u6A21\u578B: ${u}`),t),Z("Calling Model API with all tools including think");let p=await ee({model:u,messages:r,temperature:.1,tools:Sr(),tool_choice:void 0});if(!p||!p.choices||p.choices.length===0){let v=`\u6A21\u578B\u8FD4\u56DE\u65E0\u6548\u54CD\u5E94: ${JSON.stringify(p)}`;throw he(v),new Error(v)}let{choices:g}=p,d=g[0],m=d?.message,h=null,w=null;if(m&&({content:h,tool_calls:w}=m,h&&h.trim())){if(Z(`Model returned text content: ${h.substring(0,100)}...`),!w||w.length===0){if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(h)}catch(v){he(`Error in finalAnswerCallback: ${v}`)}hn(q.green(`
|
|
1905
|
+
\u6700\u7EC8\u7B54\u6848:`),t),B(q.white(h),t),B("",t),r.push({role:"assistant",content:h}),Qe("\u4EFB\u52A1\u5B8C\u6210,\u5F52\u6863\u4F1A\u8BDD"),et(),Z("Breaking out of react loop after final answer");return}B(q.magenta(`\u{1F4AD} \u601D\u8003: ${h}`),t),B("",t)}if(w&&w.length>0){let v=w[0],T=v.function.name,f=v.function.arguments;Z(`Tool call: ${T} with args: ${f}`);let y;try{y=JSON.parse(f)}catch{he(`Failed to parse tool arguments: ${f}`),r.push({role:"user",content:`Error: Invalid JSON in tool arguments: ${f}`});continue}if(zt(T)){let L=y.thought||"";B(q.magenta(`\u601D\u8003: ${L}`),t),B("",t),r.push({role:"assistant",content:h||null,tool_calls:[v]}),r.push({role:"tool",tool_call_id:v.id,content:"Noted. Continue."});continue}if(Qs(T)){let L=Zs(v);if(L){let{answer:R,success:O}=L;if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(R)}catch(U){he(`Error in finalAnswerCallback: ${U}`)}let K=O?"\u2705":"\u26A0\uFE0F";hn(q.green(`
|
|
1906
|
+
${K} \u4EFB\u52A1\u5B8C\u6210 (\u901A\u8FC7 finish \u5DE5\u5177):`),t),B(q.white(R),t),B("",t),r.push({role:"assistant",content:h||null,tool_calls:[v]}),r.push({role:"tool",tool_call_id:v.id,content:"Task completed successfully."}),r.push({role:"assistant",content:R}),Qe("\u4EFB\u52A1\u5B8C\u6210(finish\u5DE5\u5177),\u5F52\u6863\u4F1A\u8BDD"),et(),Z("Breaking out of react loop after finish tool call");return}}let E=tn()[T];if(!E){let L=`Unknown tool: ${T}`;he(L),r.push({role:"assistant",content:h||null,tool_calls:[v]}),r.push({role:"tool",tool_call_id:v.id,content:L});continue}let P=E.formatAction(y);B(q.cyan(`\u884C\u52A8: ${P}`),t),B("",t);try{let L=!1;if(T==="shell"&&E&&typeof E.getDynamicDefinition=="function"?L=E.getDynamicDefinition(y).requiresConfirmation||!1:L=Qn().find(te=>te.name===T)?.requiresConfirmation||!1,L&&!await Op(T,y,t)){let te=`\u5DE5\u5177\u6267\u884C\u5DF2\u53D6\u6D88: ${T}`;Qe(te),Ct(q.yellow(`\u26A0 ${te}`),t),B(q.gray("\u60A8\u53EF\u4EE5\u7EE7\u7EED\u63D0\u4F9B\u65B0\u7684\u6307\u4EE4\u6216\u4FEE\u6539\u4E4B\u524D\u7684\u8BF7\u6C42\u3002"),t),r.push({role:"assistant",content:h||null,tool_calls:[v]}),r.push({role:"tool",tool_call_id:v.id,content:"Execution cancelled by user"});continue}Z(`\u6267\u884C\u5DE5\u5177: ${T}(${JSON.stringify(y)})`);let R=await Promise.resolve(E.execute(y));Z(`\u5DE5\u5177 ${T} \u6267\u884C\u5B8C\u6210`);let O=xn(R),K=E?E.shouldPrintObservation(R):!0,I=`${E?E.formatObservation(R):String(R)}`;K&&(B(q.yellow(`\u{1F4CA} \u89C2\u5BDF: ${I}`),t),B("",t)),r.push({role:"assistant",content:h||null,tool_calls:[v]}),r.push({role:"tool",tool_call_id:v.id,content:String(O)})}catch(L){let R=`\u5DE5\u5177\u6267\u884C\u9519\u8BEF: ${T} - ${L.message}`;he(R,t),B("",t),r.push({role:"assistant",content:h||null,tool_calls:[v]}),r.push({role:"tool",tool_call_id:v.id,content:`Error: ${R}`}),ce(r,o)}}if((!h||!h.trim())&&(!w||w.length===0)){if(Ko("Model returned empty response"),d.finish_reason==="stop"){Ct("\u4EFB\u52A1\u5B8C\u6210(\u6A21\u578B\u505C\u6B62)",t),et(),Z("Breaking out of react loop after model stop");return}r.push({role:"user",content:"Please continue or provide your final answer."})}}catch(u){he(`\u9519\u8BEF: ${u.message}`,t),Ct("\u4F1A\u8BDD\u5DF2\u4FDD\u5B58\u3002\u4F7F\u7528 /resume \u7EE7\u7EED\u3002",t),ce(r,o);return}}if(a>=c){he("\u9519\u8BEF: \u5DF2\u8FBE\u5230\u6700\u5927\u8FED\u4EE3\u6B21\u6570",t);let u=Math.floor(a/i.compressionInterval),p=Math.floor(a/i.anchorInjectionInterval),g=Math.floor(a/i.semanticCheckInterval);Z(`\u4F18\u5316\u7EDF\u8BA1: \u538B\u7F29${u}\u6B21, \u951A\u70B9\u6CE8\u5165${p}\u6B21, \u8BED\u4E49\u68C0\u67E5${g}\u6B21`),ce(r,o)}}async function Op(o,e,t=null){return new Promise(n=>{let r=0,s=[{text:"\u786E\u8BA4\u6267\u884C",value:!0},{text:"\u4E2D\u65AD\u6267\u884C",value:!1}],i=JSON.stringify(e),a=()=>{for(let m=0;m<8;m++)mt.moveCursor(process.stdout,0,-1),mt.clearLine(process.stdout,0);let d=t?q.yellow(`\u26A0 \u786E\u8BA4\u6267\u884C ${o}(${i})\uFF1F\u6B64\u64CD\u4F5C\u53EF\u80FD\u65E0\u6CD5\u64A4\u9500\u3002`):q.yellow(`\u26A0 Confirm execution of ${o}(${i})? This action may be irreversible.`);console.log(""),console.log(d),console.log(""),console.log(q.cyan("\u8BF7\u9009\u62E9 (\u4F7F\u7528\u4E0A\u4E0B\u7BAD\u5934\u952E\uFF0CEnter\u786E\u8BA4):")),console.log(""),s.forEach((m,h)=>{let w=h===r,v=w?q.green("> "):" ",T=w?q.green.bold(m.text):q.white(m.text);console.log(`${v}${T}`)}),console.log("")},c=process.stdin.isTTY?process.stdin.isRaw:!1,l=[],u=dr();process.stdin.isTTY&&process.stdin.setRawMode(!0),u?u.__isHandlingConfirmation=!0:(l=process.stdin.listeners("keypress"),process.stdin.removeAllListeners("keypress"));let p=(d,m)=>{if(m.name==="up"){r=Math.max(0,r-1),a();return}else if(m.name==="down"){r=Math.min(s.length-1,r+1),a();return}else if(m.name==="return"||m.name==="enter"){g();for(let h=0;h<8;h++)mt.moveCursor(process.stdout,0,-1),mt.clearLine(process.stdout,0);n(s[r].value);return}else if(m.name==="escape"||m.ctrl&&m.name==="c"){g();for(let h=0;h<8;h++)mt.moveCursor(process.stdout,0,-1),mt.clearLine(process.stdout,0);n(!1);return}},g=()=>{u?(u.removeListener("keypress",p),delete u.__isHandlingConfirmation):(process.stdin.removeListener("keypress",p),l.forEach(d=>{process.stdin.on("keypress",d)})),process.stdin.isTTY&&process.stdin.setRawMode(c)};u?u.on("keypress",p):(mt.emitKeypressEvents(process.stdin),process.stdin.on("keypress",p)),a()})}var vi=C(()=>{le();ve();it();Re();xr();Xn();wo();Ne();Ht();cr();Us();Eo();lt();ar();Y()});import N from"chalk";async function wl(o,e=!1,t=null,n={}){await new wr(t,n).executeTask(o,e)}var wr,bl=C(()=>{ko();$e();vi();it();Ne();Y();Gs();To();ro();wr=class{session;subAgentManager;orchestratorContext;progressiveDisclosure;workerContextBuilder;summaryExtractor;options;constructor(e=null,t={}){this.session=e,ti(e);let n={matchStrategy:t.matchStrategy};this.subAgentManager=Yt(n),this.options={useLLMDisclosure:t.useLLMDisclosure!==void 0?t.useLLMDisclosure:!0,useLLMSummary:t.useLLMSummary!==void 0?t.useLLMSummary:!0,verbose:t.verbose||!1},this.orchestratorContext=new Ve,this.progressiveDisclosure=new ze(this.orchestratorContext),this.workerContextBuilder=new He(this.orchestratorContext,this.progressiveDisclosure),this.summaryExtractor=new Je(this.options.useLLMSummary)}log(e){this.session?this.session.log(e):console.log(e)}info(e){this.session?this.session.info(e):console.log(N.blue(e))}success(e){this.session?this.session.success(e):console.log(N.green(e))}warning(e){this.session?this.session.warning(e):console.log(N.yellow(e))}error(e){this.session?this.session.error(e):console.log(N.red(e))}async executeTask(e,t=!1){try{if(x("MasterAgent.executeTask called"),t){x("Entering resume session mode"),this.info("\u6062\u590D\u4F1A\u8BDD\u6A21\u5F0F"),await Fo(e,!0,this.session);return}let{evaluateTaskComplexity:n,TaskComplexity:r}=await Promise.resolve().then(()=>($e(),We));await n(e)===r.COMPLEX?await this.executeWithPlanning(e):await this.executeWithSingleAgent(e),this.log(""),this.success("\u2705 \u4EFB\u52A1\u6267\u884C\u5B8C\u6210"),this.options.verbose&&(this.log(""),this.log(N.gray("\u2550\u2550\u2550 \u5168\u5C40\u4E0A\u4E0B\u6587\u6458\u8981 \u2550\u2550\u2550")),this.log(N.gray(JSON.stringify(this.orchestratorContext.getCompactSummary(),null,2))))}catch(n){throw this.error(`\u274C \u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${n.message}`),n}}async executeWithSingleAgent(e){await this.ensureProjectStructure();let t={markdown:"",tasks:[{step:1,description:e,status:"pending",subAgent:"default"}],taskId:"",strategy:"single-agent",totalSteps:1};this.orchestratorContext.initializeTask(e,t);let n=await this.subAgentManager.matchSubAgent(e);if(n){this.info(`\u5339\u914D\u5230\u4E13\u7528\u5B50\u667A\u80FD\u4F53: ${n.name}`),this.log("");let r=await this.workerContextBuilder.buildIsolatedContext(1,e,n.prompt,!1,void 0,n.name);await this.executeSubAgentTask(1,e,n,r)}else this.info("\u4F7F\u7528\u9ED8\u8BA4React\u667A\u80FD\u4F53"),this.log(""),await Fo(e,!1,this.session)}async executeWithPlanning(e){let t=this.subAgentManager.getAllSubAgents(),n=await Zn(e,t);this.orchestratorContext.initializeTask(e,n),n.taskId&&St(n.taskId),this.log(er(n)),this.log(""),await this.ensureProjectStructure(),await this.loadProjectRules(),this.analyzeStepDependencies(n);for(let r=0;r<n.tasks.length;r++){let s=n.tasks[r],i=s.step;this.log(""),this.info(`\u2501\u2501\u2501 \u6267\u884C\u6B65\u9AA4 ${i}/${n.tasks.length} \u2501\u2501\u2501`),this.log(N.cyan(`\u{1F4CC} ${s.description}`)),this.log(""),this.orchestratorContext.plan.currentStep=i,n.taskId&&await at(n.taskId,i,"in_progress");try{let a=this.getSubAgentConfig(s),c=await this.workerContextBuilder.buildIsolatedContext(i,s.description,a?.prompt||"",this.options.useLLMDisclosure,void 0,a?.name);this.options.verbose&&this.log(N.gray(`\u4E0A\u4E0B\u6587\u5927\u5C0F: ${c.length} \u6761\u6D88\u606F`)),a?await this.executeSubAgentTask(i,s.description,a,c):await this.executeDefaultAgentWithContext(s.description,c),this.success(`\u2705 \u6B65\u9AA4 ${i} \u5B8C\u6210`),n.taskId&&await at(n.taskId,i,"completed")}catch(a){throw this.error(`\u274C \u6B65\u9AA4 ${i} \u6267\u884C\u5931\u8D25: ${a.message}`),this.warning("\u4E2D\u6B62\u540E\u7EED\u6B65\u9AA4\u6267\u884C"),this.orchestratorContext.recordStepCompletion(i,`\u5931\u8D25: ${a.message}`,{success:!1,error:a.message}),a}}}async ensureProjectStructure(){try{let{existsSync:e}=await import("fs");if(e(".nium/project/project.json")){x("project.json \u5DF2\u5B58\u5728\uFF0C\u8DF3\u8FC7\u81EA\u52A8\u751F\u6210");return}this.log(""),this.info("\u{1F4CB} \u68C0\u6D4B\u5230\u9879\u76EE\u7ED3\u6784\u6587\u6863\u4E0D\u5B58\u5728\uFF0C\u6267\u884C\u5FEB\u901F\u626B\u63CF..."),this.log("");let{tools:n}=await Promise.resolve().then(()=>(Re(),ur));await n.quickProjectScan(),this.success("\u2705 \u9879\u76EE\u7ED3\u6784\u6587\u6863\u5DF2\u751F\u6210"),this.log(""),M("\u5DF2\u81EA\u52A8\u751F\u6210 project.json")}catch(e){x(`\u81EA\u52A8\u751F\u6210\u9879\u76EE\u7ED3\u6784\u6587\u6863\u5931\u8D25: ${e.message}`),this.warning("\u9879\u76EE\u7ED3\u6784\u6587\u6863\u751F\u6210\u5931\u8D25\uFF0C\u5C06\u7EE7\u7EED\u6267\u884C\u4EFB\u52A1")}}async loadProjectRules(){try{let{tools:e,toolInstances:t,extractToolResult:n}=await Promise.resolve().then(()=>(Re(),ur)),r="",i=e.read({path:".nium/rules.md"});i&&!i.includes("Error:")&&(r+=i,M("\u5DF2\u52A0\u8F7D\u9879\u76EE\u89C4\u5219\u6587\u4EF6"));let c=e.read({path:".nium/project/project.json"});if(c&&!c.includes("Error:")){r&&(r+=`
|
|
1729
1907
|
|
|
1730
1908
|
---
|
|
1731
1909
|
|
|
1732
1910
|
`),r+=`## \u9879\u76EE\u5173\u952E\u4FE1\u606F
|
|
1733
1911
|
|
|
1734
|
-
`;try{let l=JSON.parse(c),
|
|
1912
|
+
`;try{let l=JSON.parse(c),u=this.extractProjectKeySummary(l);r+=u,M("\u5DF2\u52A0\u8F7D\u9879\u76EE\u5173\u952E\u4FE1\u606F\u6458\u8981")}catch{r+=c,x("\u89E3\u6790\u9879\u76EE\u7ED3\u6784JSON\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CB\u5185\u5BB9")}}r&&this.orchestratorContext.updateSharedState("rules",r)}catch{x("\u52A0\u8F7D\u9879\u76EE\u6587\u6863\u65F6\u51FA\u9519\uFF0C\u8DF3\u8FC7")}}analyzeStepDependencies(e){for(let t=0;t<e.tasks.length;t++){let n=e.tasks[t].step,r=t>0?[e.tasks[t-1].step]:[];this.orchestratorContext.setStepDependencies(n,r)}x("\u6B65\u9AA4\u4F9D\u8D56\u5173\u7CFB\u5DF2\u5206\u6790")}getSubAgentConfig(e){return e.subAgent&&e.subAgent!=="default"?this.subAgentManager.getSubAgent(e.subAgent):null}async executeSubAgentTask(e,t,n,r){let s=Date.now();this.info(`\u{1F527} \u4F7F\u7528\u5B50\u667A\u80FD\u4F53: ${n.name}`),this.log(N.gray(`\u63CF\u8FF0: ${n.description}`)),this.log("");try{let i=[{role:"system",content:st},...r.filter(u=>u.role!=="system"),...r.filter(u=>u.role==="system"&&u!==r[0])],a={...n,orchestratorContext:this.orchestratorContext},c=await this.runWorkerLoop(i,t,a);await this.recordWorkerResult(e,c);let l=Date.now()-s;this.subAgentManager.recordAgentPerformance(n.name,!0,l)}catch(i){let a=Date.now()-s;throw this.subAgentManager.recordAgentPerformance(n.name,!1,a),i}}async executeDefaultAgentWithContext(e,t){this.info("\u{1F916} \u4F7F\u7528\u9ED8\u8BA4React\u667A\u80FD\u4F53"),this.log("");let n=[{role:"system",content:st},...t.filter(r=>r.role!=="system"),...t.filter(r=>r.role==="system")];await this.runWorkerLoop(n,e)}async runWorkerLoop(e,t,n=null){let{MODEL:r}=await Promise.resolve().then(()=>(le(),wt)),{callModelAPI:s}=await Promise.resolve().then(()=>(ve(),Gt)),{isThinkTool:i,extractThought:a}=await Promise.resolve().then(()=>(Xn(),Ms)),{isFinishTool:c,extractFinishInfo:l}=await Promise.resolve().then(()=>(wo(),ei)),{getToolDefinitions:u}=await Promise.resolve().then(()=>(Ht(),ri)),{tools:p,toolInstances:g,extractToolResult:d}=await Promise.resolve().then(()=>(Re(),ur)),m=[...e],h=0,w=50;for(;h<w;){h++;try{ce(m,t);let v=await s({model:r(),messages:m,temperature:.1,tools:u()}),T=v.choices[0].message.tool_calls;if(v.choices[0].finish_reason==="stop"){let{content:I}=v.choices[0].message;if(I&&I.trim()){if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(I,n)}catch(oe){X(`Error in finalAnswerCallback: ${oe}`)}this.log(N.green("\u4EFB\u52A1\u5B8C\u6210:")),this.log(I),this.log("")}break}if(!T||T.length===0){let{content:I}=v.choices[0].message;if(I&&I.trim()){if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(I,n)}catch(oe){X(`Error in finalAnswerCallback: ${oe}`)}this.log(N.green("\u4EFB\u52A1\u5B8C\u6210:")),this.log(I),this.log(""),m.push({role:"assistant",content:I});break}continue}let f=T[0],y=f.function.name,S;try{S=JSON.parse(f.function.arguments),this.log(N.gray(`[DEBUG] Tool: ${y}`)),this.log(N.gray(`[DEBUG] Raw arguments: ${f.function.arguments.substring(0,200)}${f.function.arguments.length>200?"...":""}`)),this.log(N.gray(`[DEBUG] Parsed keys: ${Object.keys(S).join(", ")}`)),this.log("")}catch{this.error(`\u89E3\u6790\u5DE5\u5177\u53C2\u6570\u5931\u8D25: ${f.function.arguments}`),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:"Error: Invalid JSON arguments"});continue}if(i(y)){let I=a(f);I&&(this.log(N.cyan(`\u{1F4AD} Think: ${I}`)),this.log("")),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:"Noted. Continue with your action."});continue}if(c(y)){let I=l(f);if(I){let{answer:oe,success:te}=I;if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(oe,n)}catch(J){X(`Error in finalAnswerCallback: ${J}`)}let on=te?"\u2705":"\u26A0\uFE0F";this.log(N.green(`${on} \u4EFB\u52A1\u5B8C\u6210 (\u901A\u8FC7 finish \u5DE5\u5177):`)),this.log(oe),this.log(""),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:"Task completed successfully."}),m.push({role:"assistant",content:oe});break}}if(!p[y]){let I=`Error: Unknown tool '${y}'`;this.error(I),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:I});continue}let E=u().find(I=>I.name===y);if(E&&E.input_schema&&E.input_schema.required){let I=E.input_schema.required||[],oe=I.filter(te=>S[te]===void 0);if(oe.length>0){let te=`Error: Missing required parameters: ${oe.join(", ")}
|
|
1735
1913
|
|
|
1736
|
-
Tool: ${
|
|
1737
|
-
Required parameters: ${
|
|
1738
|
-
Provided parameters: ${Object.keys(
|
|
1914
|
+
Tool: ${y}
|
|
1915
|
+
Required parameters: ${I.join(", ")}
|
|
1916
|
+
Provided parameters: ${Object.keys(S).join(", ")||"none"}
|
|
1739
1917
|
|
|
1740
|
-
Please call the tool again with ALL required parameters.`;this.error(te),
|
|
1741
|
-
`)}formatProjectStructureInfo(e){return
|
|
1742
|
-
`})}}});import{readFileSync as
|
|
1743
|
-
`);for(let r of n)if(r.startsWith("USE_LLM_DISCLOSURE=")){let s=r.split("=")[1]?.trim()||"";
|
|
1918
|
+
Please call the tool again with ALL required parameters.`;this.error(te),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:te});continue}}let P=g[y],L=P?P.formatAction(S):`${y}()`;this.log(N.blue(`\u{1F527} \u884C\u52A8: ${L}`)),this.log("");let R=await p[y](S),O=d(R),K=P?P.shouldPrintObservation(R):!0,U=P?P.formatObservation(R):String(R);K&&(this.log(N.yellow(`\u{1F4CA} \u89C2\u5BDF: ${U}`)),this.log("")),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:String(O)}),["read","write","merge"].includes(y)&&S.path&&this.orchestratorContext.addRecentFile(S.path),ce(m,t)}catch(v){throw this.error(`\u9519\u8BEF: ${v.message}`),ce(m,t),v}}if(h>=w)throw this.error("\u9519\u8BEF: \u5DF2\u8FBE\u5230\u6700\u5927\u8FED\u4EE3\u6B21\u6570"),ce(m,t),new Error("Maximum iterations reached");return m}async recordWorkerResult(e,t){let n=await this.summaryExtractor.extractSummary(t),r=this.summaryExtractor.extractMetadata(t);r.success=!0,this.orchestratorContext.recordStepCompletion(e,n,r,this.progressiveDisclosure),this.options.verbose&&this.info(`\u6B65\u9AA4 ${e} \u6458\u8981\u5DF2\u8BB0\u5F55\u5230\u5168\u5C40\u4E0A\u4E0B\u6587`),this.options.verbose&&(this.log(""),this.log(N.gray("\u2500\u2500\u2500 \u6B65\u9AA4\u6267\u884C\u6458\u8981 \u2500\u2500\u2500")),this.log(N.gray(`\u6458\u8981: ${n}`)),this.log(N.gray(`\u5DE5\u5177: ${r.toolsUsed.join(", ")}`)),this.log(N.gray(`\u6587\u4EF6: ${r.filesAccessed.join(", ")}`)),this.log(N.gray(`\u8FED\u4EE3: ${r.iterations} \u6B21`)))}extractProjectKeySummary(e){let t=[];return t.push("**\u57FA\u672C\u4FE1\u606F**"),t.push(`- \u9879\u76EE\u540D\u79F0: ${e.name||"N/A"}`),t.push(`- \u4E3B\u8981\u8BED\u8A00: ${e.language||"N/A"}`),t.push(`- \u6784\u5EFA\u5DE5\u5177: ${e.build_tool||"N/A"}`),t.push(`- \u9879\u76EE\u7C7B\u578B: ${e.project_type||"N/A"}`),t.push(""),e.directory_structure&&e.directory_structure.length>0&&(t.push("**\u6838\u5FC3\u76EE\u5F55** (\u524D8\u4E2A)"),e.directory_structure.slice(0,8).forEach(n=>{t.push(`- ${n}`)}),t.push("")),e.entry_files&&e.entry_files.length>0&&(t.push("**\u5165\u53E3\u6587\u4EF6**"),e.entry_files.forEach(n=>{t.push(`- ${n}`)}),t.push("")),e.dependencies&&e.dependencies.length>0&&(t.push("**\u5173\u952E\u4F9D\u8D56** (\u524D12\u4E2A)"),t.push(e.dependencies.slice(0,12).join(", ")),t.push("")),t.join(`
|
|
1919
|
+
`)}formatProjectStructureInfo(e){return tr(e,{format:"markdown",detailed:!0,customTitle:`# \u9879\u76EE\u7ED3\u6784\u4FE1\u606F
|
|
1920
|
+
`})}}});import{readFileSync as jp}from"fs";import{join as _p}from"path";function Np(){let o={useLLMDisclosure:!0,useLLMSummary:!0};try{let e=_p(process.cwd(),".nium",".env"),n=jp(e,"utf-8").split(`
|
|
1921
|
+
`);for(let r of n)if(r.startsWith("USE_LLM_DISCLOSURE=")){let s=r.split("=")[1]?.trim()||"";x(`[\u914D\u7F6E\u8BFB\u53D6] \u4ECE .nium/.env \u6587\u4EF6\u4E2D\u8BFB\u53D6: USE_LLM_DISCLOSURE=${s}`),o.useLLMDisclosure=s.toLowerCase()==="true"}else if(r.startsWith("USE_LLM_SUMMARY=")){let s=r.split("=")[1]?.trim()||"";x(`[\u914D\u7F6E\u8BFB\u53D6] \u4ECE .nium/.env \u6587\u4EF6\u4E2D\u8BFB\u53D6: USE_LLM_SUMMARY=${s}`),o.useLLMSummary=s.toLowerCase()==="true"}}catch(e){x(`[\u914D\u7F6E\u8BFB\u53D6] \u65E0\u6CD5\u8BFB\u53D6 .nium/.env \u6587\u4EF6: ${e.message}`)}return process.env.USE_LLM_DISCLOSURE!==void 0&&(x(`[\u914D\u7F6E\u8BFB\u53D6] \u4ECE\u73AF\u5883\u53D8\u91CF\u4E2D\u8BFB\u53D6: USE_LLM_DISCLOSURE=${process.env.USE_LLM_DISCLOSURE}`),o.useLLMDisclosure=_s("USE_LLM_DISCLOSURE")),process.env.USE_LLM_SUMMARY!==void 0&&(x(`[\u914D\u7F6E\u8BFB\u53D6] \u4ECE\u73AF\u5883\u53D8\u91CF\u4E2D\u8BFB\u53D6: USE_LLM_SUMMARY=${process.env.USE_LLM_SUMMARY}`),o.useLLMSummary=_s("USE_LLM_SUMMARY")),o}async function wi(){try{let o=Np();return M("[\u914D\u7F6E\u8BFB\u53D6] \u4F7F\u7528\u4E3B\u667A\u80FD\u4F53\uFF08\u4E0A\u4E0B\u6587\u9694\u79BB\u6A21\u5F0F\uFF09"),{executeMasterAgent:wl,MasterAgent:wr,config:o}}catch(o){throw X(`[\u914D\u7F6E\u8BFB\u53D6] \u914D\u7F6E\u8BFB\u53D6\u51FA\u9519: ${o}`),o}}var Tl=C(()=>{bl();vi();Y();Ns()});var Pl={};j(Pl,{COMMANDS:()=>br,executeCommand:()=>Oo,findCommand:()=>El,getAvailableCommands:()=>Tr,initializeDynamicCommands:()=>qp,printCommandHelp:()=>bi});import A from"chalk";async function Up(o,e){if(!o){e.warning("\u8BF7\u63D0\u4F9B\u4EFB\u52A1\u8BF7\u6C42\u5185\u5BB9");return}e.log(),e.info("\u5F00\u59CB\u5904\u7406\u4EFB\u52A1..."),e.log();try{let{executeMasterAgent:t,config:n}=await wi();await t(o,!1,e,n),e.log(),b.sessionId&&(e.log(A.gray(`\u5F53\u524D\u4F1A\u8BDD ID: ${b.sessionId.substring(0,8)}`)),b.tasks&&b.tasks.length>0&&e.log(A.gray(`\u5F53\u524D\u4F1A\u8BDD\u4EFB\u52A1\u6570: ${b.tasks.length}`)),e.log())}catch(t){throw e.error(`\u4EFB\u52A1\u5904\u7406\u5931\u8D25: ${t.message}`),t}}async function Wp(o){if(b.messages&&b.messages.length>0&&b.currentTask){o.log(),o.info(`\u6B63\u5728\u6062\u590D\u4F1A\u8BDD [ID:${b.sessionId?b.sessionId.substring(0,8):"unknown"}]...`),o.log();try{let{executeMasterAgent:e,config:t}=await wi();await e(null,!0,o,t),o.log(),o.success("\u4F1A\u8BDD\u6062\u590D\u5B8C\u6210"),b.sessionId&&(o.log(A.gray(`\u4F1A\u8BDD ID: ${b.sessionId.substring(0,8)}`)),b.tasks&&b.tasks.length>0&&o.log(A.gray(`\u4F1A\u8BDD\u4EFB\u52A1\u6570: ${b.tasks.length}`)),o.log())}catch(e){throw o.error(`\u4F1A\u8BDD\u6062\u590D\u5931\u8D25: ${e.message}`),e}}else o.warning("\u6CA1\u6709\u53EF\u6062\u590D\u7684\u4F1A\u8BDD\u3002\u4F7F\u7528 /chat <\u8BF7\u6C42> \u5F00\u59CB\u65B0\u4EFB\u52A1\u3002")}function Vp(o){et(),o.success("\u4F1A\u8BDD\u5DF2\u5F52\u6863\u5E76\u6E05\u7A7A"),o.log()}function zp(o){let e=Yi();o.log(e)}function kl(o){o.exit()}function Hp(o){o.printHelp&&o.printHelp()}function Jp(o){o.log(),o.log(A.cyan("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550")),o.log(A.cyan(" \u{1F4E6} Available Tools ")),o.log(A.cyan("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550")),o.log();let e=tn(),t=ml();if(Object.keys(e).length===0){o.warning("No tools loaded yet. Tools will be available after starting a task."),o.log();return}if(o.log(A.bold("\u{1F4CA} Summary:")),o.log(A.gray(` Total Tools: ${t.total}`)),o.log(A.gray(` Local Tools: ${t.local}`)),o.log(A.gray(` MCP Tools: ${t.mcp}`)),o.log(),t.local>0){o.log(A.bold.green("\u{1F527} Local Tools:")),o.log();let{localTools:n}=t;for(let r of n){let s=e[r];if(s&&s.getDefinition){let i=s.getDefinition();o.log(A.green(` \u2022 ${i.name}`)),o.log(A.gray(` ${i.description}`)),o.log()}}}if(t.mcp>0){o.log(A.bold.magenta("\u{1F310} MCP Tools:")),o.log();let{mcpTools:n}=t;for(let r of n){let s=e[r];if(s&&s.getDefinition){let i=s.getDefinition(),a=i.description.match(/\[MCP:([^\]]+)\]/),c=a?a[1]:"unknown",l=i.description.replace(/\[MCP:[^\]]+\]\s*/,"");o.log(A.magenta(` \u2022 ${i.name}`)),o.log(A.gray(` ${l}`)),o.log(A.gray(` (from MCP server: ${c})`)),o.log()}}}o.log(A.cyan("\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550")),o.log()}async function Gp(o){o.log(),o.info("\u6B63\u5728\u68C0\u67E5git\u53D8\u66F4...");try{if(!ir()){o.warning("\u6CA1\u6709\u672A\u63D0\u4EA4\u7684\u53D8\u66F4"),o.log();return}let e=or(),t=sr();o.log(),o.info("\u5F53\u524Dgit\u72B6\u6001:"),o.log(A.gray(e)),o.log();let n=t.length>500?t.substring(0,500)+`
|
|
1744
1922
|
...(truncated)`:t;o.info("\u53D8\u66F4\u5185\u5BB9\u9884\u89C8:"),o.log(A.gray(n)),o.log(),o.info("\u6B63\u5728\u4F7F\u7528lite\u6A21\u578B\u751F\u6210commit message...");let s=[{role:"system",content:`\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684git commit message\u751F\u6210\u52A9\u624B\u3002
|
|
1745
1923
|
\u8BF7\u6839\u636E\u63D0\u4F9B\u7684git diff\u5185\u5BB9\uFF0C\u751F\u6210\u4E00\u4E2A\u7B80\u6D01\u660E\u4E86\u7684commit message\u3002
|
|
1746
1924
|
|
|
@@ -1760,7 +1938,7 @@ feat: \u6DFB\u52A0\u7528\u6237\u8BA4\u8BC1\u529F\u80FD
|
|
|
1760
1938
|
|
|
1761
1939
|
${t}`}],i=await ee({messages:s,temperature:.3,useCompression:!0,tools:[]}),a="";if(i.choices&&i.choices.length>0){let{message:l}=i.choices[0];l.content&&(a=l.content.trim())}if(!a){o.error("\u751F\u6210commit message\u5931\u8D25"),o.log();return}o.log();let c=a+`
|
|
1762
1940
|
|
|
1763
|
-
[Generated by niumagents]`;o.success("\u751F\u6210\u7684commit message:"),o.log(A.cyan("\u2500".repeat(50))),o.log(A.white(c)),o.log(A.cyan("\u2500".repeat(50))),o.log(),o.info("\u6B63\u5728\u6267\u884C git add ."),
|
|
1764
|
-
${e.stack||""}`)
|
|
1765
|
-
Commands:`)),this.log(
|
|
1766
|
-
\u63D0\u793A: \u8F93\u5165 / \u540E\u8DDF\u90E8\u5206\u547D\u4EE4\u53EF\u8FDB\u884C\u6A21\u7CCA\u641C\u7D22`)),this.log()}printSessionWarning(){this.warning("\u26A0 \u68C0\u6D4B\u5230\u4E4B\u524D\u7684\u4F1A\u8BDD\uFF01\u4F7F\u7528 /resume \u7EE7\u7EED\u6216 /clear \u5F00\u59CB\u65B0\u4F1A\u8BDD\u3002"),this.log()}printHelp(){
|
|
1941
|
+
[Generated by niumagents]`;o.success("\u751F\u6210\u7684commit message:"),o.log(A.cyan("\u2500".repeat(50))),o.log(A.white(c)),o.log(A.cyan("\u2500".repeat(50))),o.log(),o.info("\u6B63\u5728\u6267\u884C git add ."),Ws(),o.success("\u5DF2\u6682\u5B58\u6240\u6709\u53D8\u66F4"),o.info("\u6B63\u5728\u6267\u884C git commit..."),Vs(c),o.success("\u63D0\u4EA4\u6210\u529F\uFF01"),o.log()}catch(e){throw o.error(`\u6267\u884Ccommit\u547D\u4EE4\u5931\u8D25: ${e.message}`),o.log(),e}}function Bp(o,e){o.warning(`\u672A\u77E5\u547D\u4EE4: /${e}`);let t=br.map(n=>`/${n.name}`).join(", ");o.log(A.gray(`\u53EF\u7528\u547D\u4EE4: ${t}`))}function El(o){return br.find(e=>e.name===o)||null}async function Oo(o,e,t=""){let n=El(e);if(!n){Bp(o,e);return}if(n.requiresArg&&!t&&e!=="chat"){o.warning(`\u547D\u4EE4 /${e} \u9700\u8981\u53C2\u6570`);return}try{n.requiresArg?await n.handler(t,o):await n.handler(o)}catch(r){throw o.error(`\u6267\u884C\u547D\u4EE4 /${e} \u65F6\u51FA\u9519: ${r.message}`),r}}function Tr(){return[...br]}function bi(o){o.log(A.cyan("\u53EF\u7528\u547D\u4EE4:")),br.forEach(e=>{let t=e.requiresArg?`/${e.name} <\u53C2\u6570>`:`/${e.name}`;o.log(` ${A.white(t)} - ${A.gray(e.description)}`)}),o.log(),o.log(A.gray("\u63D0\u793A: \u76F4\u63A5\u8F93\u5165\u5185\u5BB9\u5C06\u4F5C\u4E3A\u4EFB\u52A1\u8BF7\u6C42\u53D1\u9001")),o.log()}async function qp(){try{let{isGitAvailable:o}=await Promise.resolve().then(()=>(so(),kc)),e=o();console.log(A.gray(`Git\u73AF\u5883\u68C0\u67E5: ${e?"\u53EF\u7528":"\u4E0D\u53EF\u7528"}`)),console.log(e?A.green("\u2713 /commit \u547D\u4EE4\u53EF\u7528"):A.yellow("\u26A0 Git\u4E0D\u53EF\u7528\uFF0C/commit \u547D\u4EE4\u5C06\u4E0D\u53EF\u7528"))}catch(o){console.log(A.gray(`\u521D\u59CB\u5316\u52A8\u6001\u547D\u4EE4\u65F6\u51FA\u9519: ${o.message}`))}}var br,Ti=C(()=>{Ne();Xo();Tl();xr();so();ve();br=[{name:"chat",description:"\u5F00\u59CB\u65B0\u4EFB\u52A1",handler:Up,requiresArg:!0},{name:"resume",description:"\u6062\u590D\u4E2D\u65AD\u7684\u4F1A\u8BDD",handler:Wp,requiresArg:!1},{name:"commit",description:"\u4F7F\u7528AI\u603B\u7ED3\u53D8\u66F4\u5E76\u63D0\u4EA4git commit",handler:Gp,requiresArg:!1},{name:"clear",description:"\u5F52\u6863\u5E76\u6E05\u7A7A\u5F53\u524D\u4F1A\u8BDD",handler:Vp,requiresArg:!1},{name:"history",description:"\u67E5\u770B\u5F52\u6863\u4F1A\u8BDD",handler:zp,requiresArg:!1},{name:"list_tools",description:"\u5217\u51FA\u6240\u6709\u53EF\u7528\u5DE5\u5177",handler:Jp,requiresArg:!1},{name:"exit",description:"\u9000\u51FA\u5E94\u7528",handler:kl,requiresArg:!1},{name:"quit",description:"\u9000\u51FA\u5E94\u7528",handler:kl,requiresArg:!1},{name:"help",description:"\u663E\u793A\u5E2E\u52A9\u4FE1\u606F",handler:Hp,requiresArg:!1}]});je();Ne();Ti();Y();le();di();xr();Eo();import ae from"chalk";import we from"readline";import Kp from"fuzzysort";var $l="0.1.11";var rn=Tr(),jo=class{rl=null;isActive=!1;commandHistory=[];historyIndex=-1;debug=!1;skipLineProcessing=!1;lastExecutedCommand=null;constructor(e={}){this.debug=e.debug||!1,Lr(this.debug),_o(this.debug)}async start(){try{if(!ae)throw new Error("chalk\u6A21\u5757\u5BFC\u5165\u5931\u8D25");Ii(),Ar(),M("\u4EA4\u4E92\u5F0F\u4F1A\u8BDD\u542F\u52A8"),this.debug&&(x("Debug\u6A21\u5F0F\u5DF2\u542F\u7528"),No("Debug\u6A21\u5F0F\u5DF2\u542F\u7528 - \u5C06\u663E\u793A\u8BE6\u7EC6\u65E5\u5FD7\u4FE1\u606F","Session")),await this.initializeMCP();let{initializeDynamicCommands:e}=await Promise.resolve().then(()=>(Ti(),Pl));await e(),this.rl=we.createInterface({input:process.stdin,output:process.stdout,prompt:ae.blue("nium> "),historySize:100,completer:()=>[[],""]}),el(this.rl),process.stdin.isTTY&&(process.stdin.setRawMode(!0),this.setupKeypressHandling()),this.printWelcome(),es()&&b.messages&&b.messages.length>0&&b.currentTask&&this.printSessionWarning(),this.isActive=!0,this.rl.prompt(),this.setupCommandHandler(),this.setupCloseHandler()}catch(e){console.error("\u542F\u52A8\u4F1A\u8BDD\u65F6\u51FA\u9519:",e.message),console.error("\u9519\u8BEF\u5806\u6808:",e.stack),process.exit(1)}}async initializeMCP(){try{let e=ss();if(M(`Loaded ${e.length} MCP server configuration(s)`),e.length===0){x("No MCP servers configured"),await Mo();return}let t=Zt();M("Initializing MCP manager with configured servers..."),await t.initialize(e),M("Loading all tools (local + MCP)..."),await Mo();let n=t.getStatus();x(`MCP Status: ${n.serversConnected} servers connected, ${n.toolsAvailable} tools available`),n.serversConnected>0?_(`Connected to ${n.serversConnected} MCP server(s), ${n.toolsAvailable} tools available`,"MCP"):W(`Configured ${e.length} MCP server(s) but none connected`,"MCP")}catch(e){X(`Failed to initialize MCP: ${e.message}`),x(`MCP initialization error details: ${e.message}
|
|
1942
|
+
${e.stack||""}`),M("Continuing with local tools only..."),await Mo()}}setupKeypressHandling(){we.emitKeypressEvents(process.stdin,this.rl),process.stdin.on("keypress",(e,t)=>{this.isActive&&(this.rl.__isHandlingConfirmation||t&&(t.name==="up"&&this.commandHistory.length>0&&!t.ctrl&&!t.meta?(this.historyIndex===-1?this.historyIndex=this.commandHistory.length-1:this.historyIndex>0&&this.historyIndex--,this.updatePromptWithHistory()):t.name==="down"&&!t.ctrl&&!t.meta?(this.historyIndex>=0&&(this.historyIndex++,this.historyIndex>=this.commandHistory.length&&(this.historyIndex=-1)),this.updatePromptWithHistory()):t.name==="tab"&&this.handleTabCompletion()))})}async handleTabCompletion(){if(!this.rl)return;let e=this.rl.line.trim();if(e.startsWith("/")){let t=e.slice(1),[n]=t.split(" "),r=n?Kp.go(n,rn,{key:"name"}):rn.map(s=>({obj:s,score:0}));if(r.length===1){let s=r[0].obj,i=`/${s.name}${s.requiresArg?" ":""}`;s.requiresArg?(this.skipLineProcessing=!0,this.rl.line=i,this.rl.cursor=i.length,this.rl._refreshLine(),setTimeout(()=>{this.skipLineProcessing=!1},100)):(this.skipLineProcessing=!0,this.rl.line="",this.rl.cursor=0,this.commandHistory.push(i),this.historyIndex=-1,process.nextTick(async()=>{try{this.log(`\u6267\u884C\u547D\u4EE4: /${s.name}`),await s.handler(this)}catch(a){this.error(`\u6267\u884C\u547D\u4EE4 /${s.name} \u65F6\u51FA\u9519: ${a.message}`)}finally{this.isActive&&this.rl&&this.rl.prompt()}}))}else r.length>1&&await this.showCommandSelectionMenu(r)}}async showCommandSelectionMenu(e){if(!this.rl)return;let t=0,n=this.rl.getPrompt(),r=this.rl.line,s=process.stdin.isTTY?process.stdin.isRaw:!1,i=()=>{let a=e.length+3;for(let c=0;c<a;c++)we.moveCursor(process.stdout,0,-1),we.clearLine(process.stdout,0);we.clearLine(process.stdout,1),console.log(""),console.log(ae.yellow("\u8BF7\u9009\u62E9\u547D\u4EE4 (\u4F7F\u7528\u4E0A\u4E0B\u7BAD\u5934\u952E\uFF0CEnter\u786E\u8BA4\uFF0CEsc\u53D6\u6D88):")),console.log(""),e.forEach((c,l)=>{let u=c.obj,p=l===t,g=p?ae.green("> "):" ",d=p?ae.green.bold(`/${u.name}`):ae.white(`/${u.name}`),m=ae.gray(`- ${u.description}`);console.log(`${g}${d} ${m}`)}),process.stdout.write(n),this.rl.line=r,this.rl.cursor=r.length,this.rl._refreshLine()};return new Promise(a=>{process.stdin.isTTY&&process.stdin.setRawMode(!0);let c=(l,u)=>{if(u.name==="up")return t=Math.max(0,t-1),i(),!1;if(u.name==="down")return t=Math.min(e.length-1,t+1),i(),!1;if(u.name==="return"||u.name==="enter"){let p=e[t].obj,g=`/${p.name}${p.requiresArg?" ":""}`;this.rl.removeListener("keypress",c);for(let d=0;d<e.length+4;d++)we.moveCursor(process.stdout,0,-1),we.clearLine(process.stdout,0);return we.clearLine(process.stdout,1),process.stdout.write(n),this.skipLineProcessing=!0,p.requiresArg?(this.skipLineProcessing=!0,this.rl.line=g,this.rl.cursor=g.length,this.rl._refreshLine(),setTimeout(()=>{this.skipLineProcessing=!1},100)):(this.rl.line="",this.rl.cursor=0,this.commandHistory.push(g),this.historyIndex=-1,process.nextTick(async()=>{try{this.log(`\u6267\u884C\u547D\u4EE4: /${p.name}`),await p.handler(this)}catch(d){this.error(`\u6267\u884C\u547D\u4EE4 /${p.name} \u65F6\u51FA\u9519: ${d.message}`)}finally{this.isActive&&this.rl&&this.rl.prompt()}})),a(),!1}else if(u.name==="escape"||u.ctrl&&u.name==="c"){for(let p=0;p<e.length+4;p++)we.moveCursor(process.stdout,0,-1),we.clearLine(process.stdout,0);return this.rl.removeListener("keypress",c),we.clearLine(process.stdout,1),process.stdout.write(n),this.rl.line=r,this.rl.cursor=r.length,this.rl._refreshLine(),a(),!1}};this.rl.on("keypress",c),i()})}updatePromptWithHistory(){this.rl&&(this.historyIndex>=0&&this.historyIndex<this.commandHistory.length?(this.rl.line=this.commandHistory[this.historyIndex],this.rl.cursor=this.rl.line.length,this.rl._refreshLine()):(this.rl.line="",this.rl.cursor=0,this.rl._refreshLine()))}setupCommandHandler(){this.rl&&this.rl.on("line",async e=>{let t=e.trim();if(this.skipLineProcessing){this.skipLineProcessing=!1,this.isActive&&this.rl&&this.rl.prompt();return}if(t.startsWith("/")){let r=t.slice(1).split(" ")[0];if(rn=Tr(),!(r?rn.some(i=>i.name===r):!1)&&r){this.isActive&&this.rl&&this.rl.prompt();return}}t&&(this.commandHistory.push(t),this.historyIndex=-1);try{await this.handleCommand(t),this.lastExecutedCommand=t}catch(n){this.error(`\u5904\u7406\u547D\u4EE4\u65F6\u51FA\u9519: ${n.message}`)}finally{this.isActive&&this.rl&&this.rl.prompt()}})}setupCloseHandler(){this.rl&&this.rl.on("close",()=>{this.isActive&&(this.isActive=!1,this.success("\u518D\u89C1\uFF01"),process.exit(0))})}async handleCommand(e){if(e)if(e.startsWith("/")){let t=e.slice(1).split(" "),n=t[0],r=t.slice(1).join(" ");try{await Oo(this,n,r),n==="clear"&&this.rl&&(this.rl.line="",this.rl.cursor=0,this.rl._refreshLine())}catch(s){this.error(`\u6267\u884C\u4EFB\u52A1\u65F6\u51FA\u9519: ${s.message}`)}}else try{await Oo(this,"chat",e)}catch(t){this.error(`\u6267\u884C\u4EFB\u52A1\u65F6\u51FA\u9519: ${t.message}`)}}printWelcome(){rn=Tr(),this.clear(),this.log(ae.green(`NiumAgents-CLI v${$l}`)),this.log(ae.gray("Options:")),this.log(ae.gray(" --debug - \u542F\u7528\u8C03\u8BD5\u6A21\u5F0F\u4EE5\u663E\u793A\u8BE6\u7EC6\u65E5\u5FD7")),this.log(ae.gray(`
|
|
1943
|
+
Commands:`)),this.log(ae.gray(" <request> - \u5F00\u59CB\u65B0\u4EFB\u52A1 (\u9ED8\u8BA4: /chat)"));let e=rn.filter(t=>t.name!=="chat");for(let t of e)t.name==="exit"||t.name==="quit"?t.name==="exit"&&this.log(ae.gray(" /exit \u6216 /quit - \u9000\u51FA")):this.log(ae.gray(` /${t.name} - ${t.description}`));this.log(ae.gray(`
|
|
1944
|
+
\u63D0\u793A: \u8F93\u5165 / \u540E\u8DDF\u90E8\u5206\u547D\u4EE4\u53EF\u8FDB\u884C\u6A21\u7CCA\u641C\u7D22`)),this.log()}printSessionWarning(){this.warning("\u26A0 \u68C0\u6D4B\u5230\u4E4B\u524D\u7684\u4F1A\u8BDD\uFF01\u4F7F\u7528 /resume \u7EE7\u7EED\u6216 /clear \u5F00\u59CB\u65B0\u4F1A\u8BDD\u3002"),this.log()}printHelp(){bi(this)}clear(){Uo()}log(e=""){an(e)}success(e){_(e,null)}warning(e){W(e,null)}error(e){ke(e,null)}info(e){se(e,null)}exit(){M("\u4EA4\u4E92\u5F0F\u4F1A\u8BDD\u7ED3\u675F"),this.isActive=!1,this.rl&&this.rl.close()}};import be from"chalk";async function Yp(){try{let o=process.argv.slice(2),e=o.includes("--debug");(o.includes("--help")||o.includes("-h"))&&(console.log(be.green("NiumAgents-CLI v0.1.8")),console.log(be.gray("AI Code Agent")),console.log(),console.log(be.gray("Options:")),console.log(be.gray(" --debug - \u542F\u7528\u8C03\u8BD5\u6A21\u5F0F\u4EE5\u663E\u793A\u8BE6\u7EC6\u65E5\u5FD7")),console.log(be.gray(" --help \u6216 -h - \u663E\u793A\u6B64\u5E2E\u52A9\u4FE1\u606F")),console.log(),console.log(be.gray("Usage:")),console.log(be.gray(" nium [options]")),console.log(be.gray(" npm run start [options]")),console.log(),console.log(be.gray("Example:")),console.log(be.gray(" nium --debug")),console.log(be.gray(" npm run start -- --debug")),process.exit(0)),await new jo({debug:e}).start()}catch(o){console.error("\u542F\u52A8\u5E94\u7528\u65F6\u51FA\u9519:",o.message),process.exit(1)}}Yp();
|