niumagents-cli 0.1.8 → 0.1.10
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 +833 -535
- package/package.json +1 -1
package/dist/nium.js
CHANGED
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
`))):(console.log(Q.yellow(`\u26A0\uFE0F \u672A\u627E\u5230 config.example.json: ${e}`)),yc(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(Q.green("\u2713 \u521B\u5EFA\u9ED8\u8BA4\u7684 .nium/config.json \u6587\u4EF6")),console.log(Q.yellow(`
|
|
5
|
-
\u26A0\uFE0F \u8BF7\u7F16\u8F91 .nium/config.json \u6587\u4EF6\u914D\u7F6E API \u5BC6\u94A5\u548C\u6A21\u578B
|
|
6
|
-
`)))}let t=Z(r,"agents");he(t)||(Nt(t,{recursive:!0}),console.log(Q.green("\u2713 \u521B\u5EFA .nium/agents \u76EE\u5F55")));let n=Z(r,"docs");he(n)||(Nt(n,{recursive:!0}),console.log(Q.green("\u2713 \u521B\u5EFA .nium/docs \u76EE\u5F55")));let o=Z(r,"archives");he(o)||(Nt(o,{recursive:!0}),console.log(Q.green("\u2713 \u521B\u5EFA .nium/archives \u76EE\u5F55")));let s=Z(r,"logs");he(s)||(Nt(s,{recursive:!0}),console.log(Q.green("\u2713 \u521B\u5EFA .nium/logs \u76EE\u5F55")));let i=xc(),a=Z(r,".env");return he(a)||(he(i)?(Ds(i,a),console.log(Q.green("\u2713 \u590D\u5236 examples/.env.example \u5230 .nium/.env"))):(console.log(Q.yellow(`\u26A0\uFE0F \u672A\u627E\u5230 .env.example: ${i}`)),console.log(Q.yellow(" \u5C06\u4F7F\u7528\u9ED8\u8BA4\u73AF\u5883\u53D8\u91CF\u914D\u7F6E")))),r}catch(t){console.log(Q.red(`\u274C \u521D\u59CB\u5316\u5DE5\u4F5C\u76EE\u5F55\u5931\u8D25: ${t.message}`)),process.exit(1)}}function ue(r){return Z(_s(),r)}var Ut,eo,to,no,Le=y(()=>{Ut=typeof __dirname<"u"?__dirname:Os(Sc(import.meta.url)),eo=null,to=null,no=null});import{existsSync as wc,readFileSync as bc,appendFileSync as Us,writeFileSync as vc,createReadStream as Tc}from"fs";import{createInterface as kc}from"readline";var se,ge,Jn=y(()=>{se=class{filePath;constructor(e){this.filePath=e}append(e){try{let t=JSON.stringify(e)+`
|
|
7
|
-
`;Us(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 y=(o,e)=>()=>(o&&(e=o(o=0)),e);var O=(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=[];return n&&ht.enableSymbol&&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 N(o,e=null){console.warn(sn("WARN",e,o))}function se(o,e=null){console.log(sn("INFO",e,o,!1))}function j(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=y(()=>{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 Vl}from"fs";import{join as ie,dirname as Pi}from"path";import{fileURLToPath as Wl}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 Vo||(Vo=ie(process.cwd(),".nium")),Vo}function zl(){if(!zo){let o=$i();zo=ie(o,"examples","config.example.json")}return zo}function Hl(){if(!Wo){let o=$i();Wo=ie(o,"examples",".env.example")}return Wo}function Ii(){let o=Mi(),e=zl();try{if(!Me(o)){se("\u521D\u59CB\u5316\u5DE5\u4F5C\u76EE\u5F55...","Init"),ln(o,{recursive:!0}),j("\u521B\u5EFA .nium \u76EE\u5F55","Init");let c=ie(o,"config.json");Me(e)?(Ei(e,c),j("\u590D\u5236 config.example.json \u5230 .nium/config.json","Init"),N("\u8BF7\u7F16\u8F91 .nium/config.json \u6587\u4EF6\u914D\u7F6E API \u5BC6\u94A5\u548C\u6A21\u578B","Init")):(N(`\u672A\u627E\u5230 config.example.json: ${e}`,"Init"),Vl(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)),j("\u521B\u5EFA\u9ED8\u8BA4\u7684 .nium/config.json \u6587\u4EF6","Init"),N("\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}),j("\u521B\u5EFA .nium/agents \u76EE\u5F55","Init"));let n=ie(o,"docs");Me(n)||(ln(n,{recursive:!0}),j("\u521B\u5EFA .nium/docs \u76EE\u5F55","Init"));let r=ie(o,"archives");Me(r)||(ln(r,{recursive:!0}),j("\u521B\u5EFA .nium/archives \u76EE\u5F55","Init"));let s=ie(o,"logs");Me(s)||(ln(s,{recursive:!0}),j("\u521B\u5EFA .nium/logs \u76EE\u5F55","Init"));let i=Hl(),a=ie(o,".env");return Me(a)||(Me(i)?(Ei(i,a),j("\u590D\u5236 examples/.env.example \u5230 .nium/.env","Init")):(N(`\u672A\u627E\u5230 .env.example: ${i}`,"Init"),N("\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,Vo,Wo,zo,je=y(()=>{cn();un=typeof __dirname<"u"?__dirname:Pi(Wl(import.meta.url)),Vo=null,Wo=null,zo=null});var Ho,Ir,Jo=y(()=>{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=y(()=>{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 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 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=y(()=>{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),
|
|
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=y(()=>{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 Vi=y(()=>{je();dn();pn()});async function Wi(o,e=null){await re.writeLog("INFO",o,e)}async function $(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 H(o,e=null){await qo(o,e)}async function Y(o,e=null){await re.writeLog("ERROR",o,e)}async function C(o,e=null){await re.writeLog("DEBUG",o,e)}async function Hi(o,e=null){await re.writeLog("TRACE",o,e)}function G(o,e=null){Wi(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Qe(o,e=null){$(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){H(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function he(o,e=null){Y(o,e).catch(t=>console.error(D.colorize(`\u65E5\u5FD7\u5199\u5165\u5931\u8D25: ${t}`,"ERROR")))}function Z(o,e=null){C(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=y(()=>{Bo();pn()});var Yo={};O(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:()=>j,consoleTitle:()=>_l,consoleWarn:()=>N,default:()=>re,defaultFormatter:()=>D,formatLogEntry:()=>Ni,getLogStats:()=>Ui,initLogger:()=>Ar,log:()=>Wi,logDebug:()=>C,logDebugSync:()=>Z,logError:()=>Y,logErrorSync:()=>he,logInfo:()=>$,logInfoSync:()=>Qe,logSuccess:()=>zi,logSuccessSync:()=>hn,logSync:()=>G,logTrace:()=>Hi,logTraceSync:()=>Ql,logWarn:()=>H,logWarnSync:()=>Ko,logWarning:()=>qo,logWarningSync:()=>Ct,loggerManager:()=>re,readArchivedLogs:()=>_i,readCurrentLogs:()=>ji,setConsoleDebugMode:()=>_o,setConsoleLoggerConfig:()=>jl,setDebugMode:()=>Lr,setFormatter:()=>Fi,setLogLevel:()=>Di});var K=y(()=>{Jo();pn();Bo();Vi();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=`
|
|
12
9
|
=== \u5F52\u6863\u4F1A\u8BDD\u5217\u8868 ===
|
|
13
10
|
|
|
14
|
-
`;return
|
|
11
|
+
`;return o.forEach((t,n)=>{let s=new Date(t.archivedAt).toLocaleString("zh-CN");e+=`[${n+1}] ${t.currentTask}
|
|
15
12
|
`,e+=` \u4F1A\u8BDDID: ${t.sessionIdShort||"unknown"}
|
|
16
13
|
`,e+=` \u5F52\u6863\u65F6\u95F4: ${s}
|
|
17
14
|
`,e+=` \u4EFB\u52A1\u6570\u91CF: ${t.taskCount||0}
|
|
18
15
|
`,e+=` \u6D88\u606F\u6570\u91CF: ${t.messageCount}
|
|
19
16
|
`,e+=` \u6587\u4EF6\u540D: ${t.fileName}
|
|
20
17
|
|
|
21
|
-
`}),e}var
|
|
22
|
-
\u2705 \u4EFB\u52A1\u5B8C\u6210: ${b.currentTask}`)),console.log(et.blue(`\u{1F4CA} Token\u603B\u5F00\u9500: ${e.toLocaleString()} tokens`))}b.currentTask=null,b.currentTaskId=null,ne()}}function rt(){return Vc()}var be,b,ve=y(()=>{K();Le();ao();Jn();Bn();be=ue("session.jsonl");b=lo()});var go,Zs=y(()=>{go={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=y(()=>{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=y(()=>{});var Zi={};O(Zi,{SESSION_FILE:()=>_e,archiveSession:()=>et,associateMessageWithTask:()=>Qi,completeCurrentTask:()=>vt,loadSession:()=>es,saveSession:()=>ce,sessionState:()=>T,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{T.messages&&T.messages.length>0&&Ki(T)&&C("\u4F1A\u8BDD\u5DF2\u5F52\u6863"),T=Zo(),new me(_e).create(T)}catch(o){let e=o instanceof Error?o.message:String(o);N(`Failed to archive session - ${e}`,"Session"),T=Zo();try{new me(_e).create(T)}catch{}}}function es(){try{if(Xi(_e)){let e=new fe(_e).readAllSync(),t=e.length>0?e[0]:null;return T={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);N(`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 T.tasks.push(t),T.currentTask=o,T.currentTaskId=e,e}function Qi(o){if(T.currentTaskId&&o){let e=T.currentTaskId;o.taskId=e;let t=T.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){T.currentTaskId=o,T.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!==T.currentTask&&Fr(e),o){let n=o.map(r=>Qi({...r}));T={...T,messages:n,updatedAt:new Date().toISOString()}}else T={...T,updatedAt:new Date().toISOString()};Xi(_e)&&nu(_e,"","utf-8"),new me(_e).create(T)}catch(t){let n=t instanceof Error?t.message:String(t);N(`Could not save session - ${n}`,"Session")}}function et(){return ru()}function ou(){if(T.currentTask&&T.currentTaskId){let o=T.tasks.find(e=>e.id===T.currentTaskId);if(o){let e=o.tokenCount||0;j(`\u4EFB\u52A1\u5B8C\u6210: ${T.currentTask}`,"Session"),se(`Token\u603B\u5F00\u9500: ${e.toLocaleString()} tokens`,"Session")}T.currentTask=null,T.currentTaskId=null,ce()}}function vt(){return ou()}var _e,T,Ne=y(()=>{cn();K();je();Xo();dn();Dr();_e=ge("session.jsonl");T=Zo()});var ts,ea=y(()=>{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
|
|
23
19
|
|
|
24
20
|
## \u6838\u5FC3\u89C4\u5219
|
|
25
21
|
|
|
@@ -126,12 +122,22 @@ var hc=Object.defineProperty;var y=(r,e)=>()=>(r&&(e=r(r=0)),e);var O=(r,e)=>{fo
|
|
|
126
122
|
- \u91CD\u547D\u540D\u6807\u8BC6\u7B26\u6216\u6279\u91CF\u66FF\u6362 \u2192 \u4F7F\u7528 \`searchReplace()\`
|
|
127
123
|
- \u7B80\u5355\u5B57\u7B26\u4E32\u66FF\u6362 \u2192 \u4F7F\u7528 \`searchReplace()\`
|
|
128
124
|
|
|
129
|
-
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
|
|
130
136
|
- \u9A8C\u8BC1\u6240\u6709\u4F9D\u8D56\u90FD\u5DF2\u6B63\u786E\u5F15\u5165\u5230\u4F9D\u8D56\u58F0\u660E\u6587\u4EF6
|
|
131
137
|
- \u4F7F\u7528 \`read()\` \u68C0\u67E5\u4F9D\u8D56\u6587\u4EF6\uFF08package.json, pom.xml \u7B49\uFF09
|
|
132
138
|
- \u5982\u679C\u7F3A\u5C11\u4F9D\u8D56\uFF0C\u63D0\u793A\u7528\u6237\u6DFB\u52A0\u6216\u4F7F\u7528\u5305\u7BA1\u7406\u547D\u4EE4\u6DFB\u52A0
|
|
133
139
|
|
|
134
|
-
|
|
140
|
+
8. **\u9A8C\u8BC1\u5B8C\u6210**\uFF1A\u786E\u4FDD\u4EE3\u7801\u7B26\u5408\u6240\u6709\u8981\u6C42
|
|
135
141
|
|
|
136
142
|
## \u6587\u4EF6\u64CD\u4F5C\u5B89\u5168\u7EA6\u675F
|
|
137
143
|
|
|
@@ -204,92 +210,15 @@ var hc=Object.defineProperty;var y=(r,e)=>()=>(r&&(e=r(r=0)),e);var O=(r,e)=>{fo
|
|
|
204
210
|
- \u4F7F\u7528 \`grep()\` \u6216 \`search\` \u5DE5\u5177\u67E5\u627E\u6240\u6709\u5F15\u7528
|
|
205
211
|
- \u5236\u5B9A\u5168\u9762\u7684\u66F4\u65B0\u8BA1\u5212\uFF0C\u786E\u4FDD\u6240\u6709\u4F9D\u8D56\u90FD\u5F97\u5230\u9002\u5F53\u5904\u7406
|
|
206
212
|
|
|
207
|
-
\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={};O(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=y(()=>{je();Or=null});var nt,jr=y(()=>{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=y(()=>{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}
|
|
208
214
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
1. **quickProjectScan()** - \u5FEB\u901F\u626B\u63CF\u5E76\u751F\u6210\u5B8C\u6574\u7684\u9879\u76EE\u4FE1\u606F
|
|
212
|
-
- \u81EA\u52A8\u626B\u63CF\u6240\u6709\u6587\u4EF6
|
|
213
|
-
- \u5206\u6790\u76EE\u5F55\u7ED3\u6784
|
|
214
|
-
- \u68C0\u6D4B\u7F16\u7A0B\u8BED\u8A00
|
|
215
|
-
- \u751F\u6210 \`.nium/project/project.json\` \u6587\u4EF6
|
|
216
|
-
- \u63A8\u8350\u7528\u4E8E\uFF1A\u9996\u6B21\u63A2\u7D22\u3001\u751F\u6210\u9879\u76EE\u4FE1\u606F
|
|
217
|
-
|
|
218
|
-
2. **glob(pattern)** - \u6309\u6A21\u5F0F\u641C\u7D22\u6587\u4EF6
|
|
219
|
-
- \u4F8B\u5982\uFF1A\`glob('**/*.js')\` \u67E5\u627E\u6240\u6709 JS \u6587\u4EF6
|
|
220
|
-
- \u4F8B\u5982\uFF1A\`glob('src/**/*')\` \u67E5\u627E src \u76EE\u5F55\u4E0B\u6240\u6709\u6587\u4EF6
|
|
221
|
-
|
|
222
|
-
3. **grep(pattern, path)** - \u5728\u6587\u4EF6\u4E2D\u641C\u7D22\u5185\u5BB9
|
|
223
|
-
- \u4F8B\u5982\uFF1A\`grep('export.*API', 'src')\` \u67E5\u627E API \u5BFC\u51FA
|
|
224
|
-
|
|
225
|
-
4. **read(path)** - \u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9
|
|
226
|
-
- \u7528\u4E8E\u6DF1\u5165\u4E86\u89E3\u5173\u952E\u6587\u4EF6
|
|
227
|
-
|
|
228
|
-
## \u5DE5\u4F5C\u7B56\u7565
|
|
229
|
-
|
|
230
|
-
### \u573A\u666F 1\uFF1A\u7528\u6237\u8981\u6C42"\u63A2\u7D22\u9879\u76EE"\u6216"\u751F\u6210\u9879\u76EE\u4FE1\u606F"
|
|
231
|
-
|
|
232
|
-
**\u7B56\u7565\uFF1A\u4F7F\u7528\u5FEB\u901F\u626B\u63CF**
|
|
233
|
-
|
|
234
|
-
1. \u76F4\u63A5\u8C03\u7528 \`quickProjectScan()\` \u5DE5\u5177
|
|
235
|
-
2. \u5DE5\u5177\u4F1A\u81EA\u52A8\u5B8C\u6210\u6240\u6709\u626B\u63CF\u548C\u4FE1\u606F\u6536\u96C6
|
|
236
|
-
3. \u5411\u7528\u6237\u6C47\u62A5\u63A2\u7D22\u5B8C\u6210\uFF0C\u9879\u76EE\u4FE1\u606F\u5DF2\u751F\u6210
|
|
237
|
-
4. \u5982\u9700\u67E5\u770B\u9879\u76EE\u4FE1\u606F\uFF0C\u53EF\u8BFB\u53D6 \`.nium/project/project.json\` \u6587\u4EF6
|
|
238
|
-
|
|
239
|
-
### \u573A\u666F 2\uFF1A\u7528\u6237\u63D0\u51FA\u5177\u4F53\u95EE\u9898\uFF08\u5982"\u524D\u7AEF\u4EE3\u7801\u5728\u54EA\u91CC\uFF1F"\uFF09
|
|
240
|
-
|
|
241
|
-
**\u7B56\u7565\uFF1A\u4F7F\u7528\u5DE5\u5177\u7EC4\u5408\u8FDB\u884C\u667A\u80FD\u5206\u6790**
|
|
242
|
-
|
|
243
|
-
1. \u4F7F\u7528 \`glob()\` \u641C\u7D22\u76F8\u5173\u6587\u4EF6
|
|
244
|
-
2. \u5FC5\u8981\u65F6\u4F7F\u7528 \`read()\` \u8BFB\u53D6\u5173\u952E\u6587\u4EF6
|
|
245
|
-
3. \u5206\u6790\u5E76\u56DE\u7B54\u7528\u6237\u95EE\u9898
|
|
246
|
-
|
|
247
|
-
### \u573A\u666F 3\uFF1A\u7528\u6237\u8981\u6C42"\u63A2\u7D22\u5E76\u5206\u6790\u67D0\u4E2A\u65B9\u9762"
|
|
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=y(()=>{jr();K();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(`
|
|
248
216
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
1. \u5148\u8C03\u7528 \`quickProjectScan()\` \u83B7\u53D6\u6574\u4F53\u7ED3\u6784
|
|
252
|
-
2. \u518D\u4F7F\u7528\u5176\u4ED6\u5DE5\u5177\u6DF1\u5165\u5206\u6790\u7279\u5B9A\u65B9\u9762
|
|
253
|
-
3. \u6574\u5408\u4FE1\u606F\u5E76\u7ED9\u51FA\u5168\u9762\u7684\u7B54\u6848
|
|
254
|
-
|
|
255
|
-
## \u793A\u4F8B\u5BF9\u8BDD
|
|
256
|
-
|
|
257
|
-
**\u7528\u6237**\uFF1A\u63A2\u7D22\u8FD9\u4E2A\u9879\u76EE **\u4F60\u7684\u884C\u52A8**\uFF1A
|
|
258
|
-
|
|
259
|
-
1. think: \u7528\u6237\u9700\u8981\u5B8C\u6574\u7684\u9879\u76EE\u4FE1\u606F\uFF0C\u5E94\u4F7F\u7528 quickProjectScan
|
|
260
|
-
2. \u8C03\u7528 quickProjectScan()
|
|
261
|
-
3. \u5411\u7528\u6237\u6C47\u62A5: "\u6211\u5DF2\u7ECF\u5B8C\u6210\u4E86\u9879\u76EE\u63A2\u7D22\uFF0C\u9879\u76EE\u4FE1\u606F\u5DF2\u4FDD\u5B58\u5230 \`.nium/project/project.json\`"
|
|
262
|
-
4. \u5982\u9700\u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u53EF\u8BFB\u53D6\u8BE5 JSON \u6587\u4EF6\u5E76\u5C55\u793A\u5173\u952E\u4FE1\u606F
|
|
263
|
-
|
|
264
|
-
**\u7528\u6237**\uFF1A\u524D\u7AEF\u4EE3\u7801\u5728\u54EA\u91CC\uFF1F **\u4F60\u7684\u884C\u52A8**\uFF1A
|
|
265
|
-
|
|
266
|
-
1. think: \u9700\u8981\u67E5\u627E\u524D\u7AEF\u76F8\u5173\u6587\u4EF6\uFF0C\u4F7F\u7528 glob \u641C\u7D22
|
|
267
|
-
2. \u8C03\u7528 glob('\\*_/_.{jsx,tsx,vue}')
|
|
268
|
-
3. \u5206\u6790\u7ED3\u679C\u5E76\u56DE\u7B54
|
|
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 v=[];if(f.content&&typeof f.content=="string"&&v.push({type:"text",text:f.content}),f.tool_calls&&f.tool_calls.length>0)for(let S of f.tool_calls)v.push({type:"tool_use",id:S.id,name:S.function.name,input:JSON.parse(S.function.arguments)});v.length>0&&g.push({role:"assistant",content:v}),d++}else if(f.role==="tool"){let v=[];for(;d<l.length&&l[d].role==="tool";){let S=l[d];v.push({type:"tool_result",tool_use_id:S.tool_call_id,content:S.content||"No result"}),d++}v.length>0&&g.push({role:"user",content:v})}else if(f.role==="user"){let v=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:v}),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);C(`[Anthropic Provider] Response content blocks: ${JSON.stringify(h.content,null,2)}`);let w=[],x="";for(let f of h.content)if(f.type==="text")x+=f.text;else if(f.type==="tool_use")C(`[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 v=f.thinking||"";v&&(x=v+(x?`
|
|
269
218
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
1. think: \u5148\u83B7\u53D6\u6574\u4F53\u7ED3\u6784\uFF0C\u518D\u6DF1\u5165\u5206\u6790 API
|
|
273
|
-
2. \u8C03\u7528 quickProjectScan()
|
|
274
|
-
3. \u8C03\u7528 glob('**/routes/**') \u6216 grep('router', 'src')
|
|
275
|
-
4. \u8C03\u7528 read() \u8BFB\u53D6\u5173\u952E\u8DEF\u7531\u6587\u4EF6
|
|
276
|
-
5. \u6574\u5408\u4FE1\u606F\u5E76\u89E3\u91CA API \u67B6\u6784
|
|
277
|
-
|
|
278
|
-
## \u6838\u5FC3\u539F\u5219
|
|
279
|
-
|
|
280
|
-
1. **\u9AD8\u6548\u4F18\u5148**\uFF1A\u5BF9\u4E8E\u6807\u51C6\u7684\u63A2\u7D22\u8BF7\u6C42\uFF0C\u4F18\u5148\u4F7F\u7528 \`quickProjectScan()\`
|
|
281
|
-
2. **\u7CBE\u51C6\u56DE\u7B54**\uFF1A\u5BF9\u4E8E\u5177\u4F53\u95EE\u9898\uFF0C\u4F7F\u7528\u6700\u5408\u9002\u7684\u5DE5\u5177\u7EC4\u5408
|
|
282
|
-
3. **\u6DF1\u5EA6\u5206\u6790**\uFF1A\u5FC5\u8981\u65F6\u6DF1\u5165\u8BFB\u53D6\u548C\u5206\u6790\u5173\u952E\u4EE3\u7801\u6587\u4EF6
|
|
283
|
-
4. **\u6E05\u6670\u8868\u8FBE**\uFF1A\u4EE5\u7ED3\u6784\u5316\u3001\u6613\u61C2\u7684\u65B9\u5F0F\u5448\u73B0\u5206\u6790\u7ED3\u679C
|
|
284
|
-
5. **\u5408\u7406\u5C55\u793A**\uFF1A\u63A2\u7D22\u5B8C\u6210\u540E\uFF0C\u544A\u8BC9\u7528\u6237\u9879\u76EE\u4FE1\u606F\u5DF2\u751F\u6210\uFF0C\u53EF\u6839\u636E\u9700\u8981\u8BFB\u53D6\u5E76\u5C55\u793A\u5173\u952E\u4FE1\u606F`}});function ti(){return Object.values(Hc)}var Hc,ni=y(()=>{Zs();ei();Hc={[go.name]:go,[po.name]:po}});var ot={};O(ot,{LITE_MODEL:()=>Se,MODEL:()=>ye,getDefaultModelConfig:()=>Re,getLiteModelConfig:()=>Wt,getLiteModelMaxToken:()=>ho,getMCPServerConfigs:()=>yo,getMaxToken:()=>fo,getProvider:()=>zc});import{readFileSync as Gc}from"fs";function mo(){if(!Yn)try{let r=ue("config.json"),e=Gc(r,"utf-8");Yn=JSON.parse(e)}catch(r){console.error("Failed to load config.json:",r.message),Yn={models:{defaultModel:{apiKey:"",baseURL:"https://api.openai.com/v1",model:"gpt-4o-mini",provider:"openai"}}}}return Yn}function Re(){let r=mo(),e={apiKey:"",baseURL:"https://api.openai.com/v1",model:"gpt-4o-mini",provider:"openai",maxToken:128e3};return r.models?.defaultModel||e}function Wt(){return mo().models?.liteModel||Re()}function ri(){return Re().model||"gpt-4o-mini"}function Jc(){return Wt().model||ri()}function zc(){return Re().provider||"openai"}function ye(){return ri()}function Se(){return Jc()}function fo(){return Re().maxToken||128e3}function ho(){return Wt().maxToken||16385}function yo(){return mo().mcpServers||[]}var Yn,re=y(()=>{Le();Yn=null});var De,Xn=y(()=>{De=class{config;constructor(e){this.config=e}getModelName(){return this.config.model}getProviderType(){return this.config.provider}_getApiKey(){return this.config.apiKey}_getBaseURL(){return this.config.baseURL}}});import qc from"openai";var So,oi,si=y(()=>{Xn();So=class extends De{client=null;constructor(e){super(e)}_initClient(){return this.client||(this.client=new qc({apiKey:this.config.apiKey,baseURL:this.config.baseURL||"https://api.openai.com/v1"})),this.client}async callModel(e){let{model:t=this.getModelName(),messages:n,temperature:o=.1,max_tokens:s,tools:i,tool_choice:a}=e,c=this._initClient(),l=[...n],p={model:t,messages:l,temperature:o,max_tokens:s};i&&i.length>0&&(p.tools=i.map(g=>({type:"function",function:{name:g.name,description:g.description,parameters:g.input_schema}})),a&&(a.type==="any"||(p.tool_choice=a)));let u=await c.chat.completions.create(p);return this._processReasoningContent(u),u}_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}
|
|
285
|
-
|
|
286
|
-
${t.content}`):t.content=n;return}try{let o=[];try{let s=JSON.parse(n);Array.isArray(s)&&s.length>0?(o=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=o):t.content||(t.content=n)}catch{t.content||(t.content=n)}}catch(o){console.warn("Failed to process reasoning_content:",o)}}}},oi=So});var Co,ii,ai=y(()=>{Xn();Co=class extends De{client=null;constructor(e){super(e)}async _initClient(){if(!this.client){let{Anthropic:e}=await import("@anthropic-ai/sdk");this.client=new e({apiKey:this.config.apiKey})}return this.client}async callModel(e){let{model:t=this.getModelName(),messages:n,temperature:o=.1,max_tokens:s=4096,tools:i,tool_choice:a}=e,c=await this._initClient(),l=[...n],p="",u=l.filter(d=>d.role==="system");u.length>0&&(p=u.map(d=>d.content).join(`
|
|
287
|
-
|
|
288
|
-
`)),l=l.filter(d=>d.role!=="system");let g=[],m=0;for(;m<l.length;){let d=l[m];if(d.role==="assistant"){let $=[];if(d.content&&typeof d.content=="string"&&$.push({type:"text",text:d.content}),d.tool_calls&&d.tool_calls.length>0)for(let T of d.tool_calls)$.push({type:"tool_use",id:T.id,name:T.function.name,input:JSON.parse(T.function.arguments)});$.length>0&&g.push({role:"assistant",content:$}),m++}else if(d.role==="tool"){let $=[];for(;m<l.length&&l[m].role==="tool";){let T=l[m];$.push({type:"tool_result",tool_use_id:T.tool_call_id,content:T.content||"No result"}),m++}$.length>0&&g.push({role:"user",content:$})}else if(d.role==="user"){let $=typeof d.content=="string"?[{type:"text",text:d.content}]:Array.isArray(d.content)?d.content:[{type:"text",text:String(d.content)}];g.push({role:"user",content:$}),m++}else m++}let f={model:t,max_tokens:s,temperature:o,system:p||"You are a helpful assistant.",messages:g};i&&i.length>0&&(f.tools=i,a&&(f.tool_choice=a));let w=await c.messages.create(f);console.log("[Anthropic Provider] Response content blocks:",JSON.stringify(w.content,null,2));let S=[],C="";for(let d of w.content)if(d.type==="text")C+=d.text;else if(d.type==="tool_use")console.log("[Anthropic Provider] Tool use block:",{id:d.id,name:d.name,input:d.input,inputKeys:Object.keys(d.input||{})}),S.push({id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input)}});else if(d.type==="thinking"){let $=d.thinking||"";$&&(C=$+(C?`
|
|
289
|
-
|
|
290
|
-
`+C:""))}return{choices:[{message:{content:C||null,tool_calls:S.length>0?S:void 0},finish_reason:w.stop_reason==="end_turn"?"stop":w.stop_reason}]}}},ii=Co});var Vt,ci=y(()=>{re();Xn();si();ai();Vt=class{static async getProvider(){let e=Re();return this.createProvider(e)}static async getLiteProvider(){let e=Wt();return this.createProvider(e)}static async createProvider(e){switch(e.provider||"openai"){case"anthropic":return new ii(e);case"openai":default:return new oi(e)}}}});function st(r){return r&&typeof r=="object"&&r.__tool_result===!0}function Ht(r){return st(r)?r.result:r}var E,B=y(()=>{E=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(([o,s])=>{let i=s;return typeof s=="string"&&s.length>50&&(i=s.substring(0,50)+"..."),`${o}=${JSON.stringify(i)}`}).join(", ");return`${t}(${n})`}formatObservation(e){if(st(e)){let{display:t}=e;return Array.isArray(t)?t.join(`
|
|
219
|
+
`+x:""))}return{choices:[{message:{content:x||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=y(()=>{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 P,U=y(()=>{P=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(`
|
|
291
220
|
`):String(t)}return Array.isArray(e)?e.join(`
|
|
292
|
-
`):String(e)}shouldPrintObservation(e){return
|
|
221
|
+
`):String(e)}shouldPrintObservation(e){return bt(e)?e.shouldPrint:!0}}});var Ce,Sn=y(()=>{U();Ce=class extends P{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(`
|
|
293
222
|
`);n=n.slice(0,s)+`
|
|
294
223
|
- User confirmation is automatically required - DO NOT call askUser tool before calling this tool`+n.slice(s)}else{let s=n.indexOf(`
|
|
295
224
|
`);s!==-1?n=n.slice(0,s)+`
|
|
@@ -297,7 +226,7 @@ ${t.content}`):t.content=n;return}try{let o=[];try{let s=JSON.parse(n);Array.isA
|
|
|
297
226
|
|
|
298
227
|
`+n}else n=t+`
|
|
299
228
|
|
|
300
|
-
`+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={};O(cs,{BaseTool:()=>P,ConfirmableTool:()=>Ce,extractToolResult:()=>xn,isToolResult:()=>bt});var ls=y(()=>{U();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=y(()=>{U();Tt=class extends P{lastReadPath="";getDefinition(){return{name:"read",description:`Read content from a specified file path.
|
|
301
230
|
|
|
302
231
|
\u{1F4CB} USE CASES:
|
|
303
232
|
- View file content for analysis or editing
|
|
@@ -319,17 +248,17 @@ ${t.content}`):t.content=n;return}try{let o=[];try{let s=JSON.parse(n);Array.isA
|
|
|
319
248
|
\u{1F4DD} RETURN VALUE:
|
|
320
249
|
- Complete file content as string (for small files)
|
|
321
250
|
- Array of file chunks (for large files with chunking)
|
|
322
|
-
- 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=
|
|
323
|
-
`).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,`
|
|
324
253
|
`).replace(/\\t/g," ").replace(/\\r/g,"\r").replace(/\\"/g,'"').replace(/\\'/g,"'");return e=e.replace(/\r\n/g,`
|
|
325
254
|
`).replace(/\r/g,`
|
|
326
|
-
`),e}function
|
|
255
|
+
`),e}function _r(o){return o.includes(`\r
|
|
327
256
|
`)?`\r
|
|
328
|
-
`:
|
|
257
|
+
`:o.includes(`
|
|
329
258
|
`)?`
|
|
330
|
-
`:
|
|
259
|
+
`:o.includes("\r")?"\r":us}var us,gs=y(()=>{us=process.platform==="win32"?`\r
|
|
331
260
|
`:`
|
|
332
|
-
`});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=y(()=>{U();kt=class extends P{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=y(()=>{gs();ps();U();Et=class extends P{getDefinition(){return{name:"write",description:`Write content to a file - ONLY for creating NEW files.
|
|
333
262
|
|
|
334
263
|
\u{1F4CB} USE CASES:
|
|
335
264
|
- Create brand new files that don't exist yet
|
|
@@ -347,7 +276,7 @@ ${t.content}`):t.content=n;return}try{let o=[];try{let s=JSON.parse(n);Array.isA
|
|
|
347
276
|
\u2502 Creating NEW file \u2192 write() \u2705 \u2502
|
|
348
277
|
\u2502 Modifying EXISTING file \u2192 merge() \u2705 \u2502
|
|
349
278
|
\u2502 Overwriting EXISTING \u2192 write() \u26A0\uFE0F RISKY \u2502
|
|
350
|
-
\u2502 Small precise edits \u2192
|
|
279
|
+
\u2502 Small precise edits \u2192 searchReplace() \u2705 \u2502
|
|
351
280
|
\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
|
|
352
281
|
|
|
353
282
|
\u{1F511} PARAMETERS:
|
|
@@ -362,9 +291,9 @@ echo 'test'" }) - Create new shell script
|
|
|
362
291
|
|
|
363
292
|
\u{1F4DD} RETURN VALUE:
|
|
364
293
|
- "done" on successful write
|
|
365
|
-
- 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
|
|
366
295
|
`&&(s=s.replace(/\n/g,`\r
|
|
367
|
-
`)),
|
|
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=y(()=>{Sn();Pt=class extends Ce{getBaseDefinition(){return{name:"delete",description:`Delete a file, multiple files or directories at the specified path(s).
|
|
368
297
|
|
|
369
298
|
IMPORTANT:
|
|
370
299
|
- This action cannot be undone
|
|
@@ -376,31 +305,31 @@ Examples:
|
|
|
376
305
|
- deleteFile("temp.txt") - delete a single file named temp.txt
|
|
377
306
|
- deleteFile("temp_dir") - delete a single empty directory named temp_dir
|
|
378
307
|
- deleteFile({ path: "temp.txt" }) - delete a single file
|
|
379
|
-
- 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(`
|
|
380
309
|
`)}
|
|
381
310
|
|
|
382
|
-
Summary: ${c} items deleted (${
|
|
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=y(()=>{Sn();$t=class extends Ce{getBaseDefinition(){return{name:"move",description:`Move or rename a file or directory from source to destination.
|
|
383
312
|
|
|
384
313
|
Examples:
|
|
385
314
|
- moveFile({ source: "old.txt", destination: "new.txt" }) - rename a file
|
|
386
315
|
- moveFile({ source: "file.txt", destination: "folder/file.txt" }) - move a file to a different directory
|
|
387
316
|
- moveFile({ source: "old_folder", destination: "new_folder" }) - rename a directory
|
|
388
|
-
- 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,
|
|
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=y(()=>{Sn();Mt=class extends Ce{getBaseDefinition(){return{name:"copy",description:`Copy a file or directory from source to destination.
|
|
389
318
|
|
|
390
319
|
Examples:
|
|
391
320
|
- copyFile({ source: "file.txt", destination: "file_copy.txt" }) - copy a file
|
|
392
321
|
- copyFile({ source: "file.txt", destination: "folder/file.txt" }) - copy a file to a different directory
|
|
393
322
|
- copyFile({ source: "folder", destination: "folder_copy" }) - copy an entire directory (recursively)
|
|
394
|
-
- 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,
|
|
395
|
-
`),
|
|
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(`
|
|
324
|
+
`),r=e.split(`
|
|
396
325
|
`),s=t.split(`
|
|
397
|
-
`);console.log(` [merge] \u5F00\u59CB\u4E09\u8DEF\u5408\u5E76: base=${n.length}\u884C, current=${
|
|
398
|
-
`),current:
|
|
399
|
-
`),incoming:
|
|
400
|
-
`)}),l.push("<<<<<<< CURRENT"),l.push(...
|
|
401
|
-
`),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=y(()=>{});import{readFileSync as Ma,writeFileSync as Vr,existsSync as ms,unlinkSync as fs}from"fs";import{resolve as Mu}from"path";function hs(o){return o.replace(/\r\n/g,`
|
|
402
331
|
`).replace(/\r/g,`
|
|
403
|
-
`)}function
|
|
332
|
+
`)}function Ln(o){return Ia.execute(o)}var Iu,It,Ia,Rn,Aa=y(()=>{gs();$a();U();Iu={lineRatioThreshold:.5,minLineDiff:100},It=class extends P{getDefinition(){return{name:"merge",description:`Smart file merge tool - THE SAFE CHOICE for modifying existing files.
|
|
404
333
|
|
|
405
334
|
\u{1F4CB} USE CASES:
|
|
406
335
|
- Update existing files without losing concurrent changes
|
|
@@ -426,7 +355,7 @@ Examples:
|
|
|
426
355
|
\u2502 Scenario \u2502 Tool \u2502 Why \u2502
|
|
427
356
|
\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
|
|
428
357
|
\u2502 Create NEW file \u2502 write() \u2502 No merge needed \u2502
|
|
429
|
-
\u2502 Small precise edits \u2502
|
|
358
|
+
\u2502 Small precise edits \u2502 searchReplace() \u2502 Token efficient \u2502
|
|
430
359
|
\u2502 Modify EXISTING file \u2502 merge() \u2502 Safe & smart \u2502
|
|
431
360
|
\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
|
|
432
361
|
|
|
@@ -443,7 +372,7 @@ Examples:
|
|
|
443
372
|
\u{1F4DD} RETURN VALUE:
|
|
444
373
|
- "Merge successful" messages on success
|
|
445
374
|
- Conflict details with markers if merge conflicts exist
|
|
446
|
-
- 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).
|
|
447
376
|
|
|
448
377
|
This may indicate:
|
|
449
378
|
- Incomplete content (missing parts of the file)
|
|
@@ -451,30 +380,30 @@ This may indicate:
|
|
|
451
380
|
- Wrong file content
|
|
452
381
|
|
|
453
382
|
To proceed, call merge() again with confirmLargeChange=true.
|
|
454
|
-
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=
|
|
455
|
-
`?"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(`
|
|
456
385
|
`).length,l=a.split(`
|
|
457
|
-
`).length;if(!e.confirmLargeChange){let
|
|
458
|
-
`&&(
|
|
459
|
-
`)),
|
|
460
|
-
`).length}\u884C, current=${c}\u884C, incoming=${l}\u884C`);let
|
|
461
|
-
`&&(
|
|
462
|
-
`)),
|
|
386
|
+
`).length;if(!e.confirmLargeChange){let x=this.checkLargeDeletion(c,l);if(x.isLargeDeletion)return console.log(` [MergeTool] \u68C0\u6D4B\u5230\u5927\u5E45\u5220\u51CF\uFF08${c} \u2192 ${l}\u884C\uFF09\uFF0C\u9700\u8981\u786E\u8BA4`),x.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 x=a;if(s===`\r
|
|
387
|
+
`&&(x=x.replace(/\n/g,`\r
|
|
388
|
+
`)),Vr(t,x,"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
|
|
390
|
+
`&&(w=w.replace(/\n/g,`\r
|
|
391
|
+
`)),m.hasConflicts)return Vr(t,w,"utf-8"),`Merge completed with CONFLICTS. File saved with conflict markers.
|
|
463
392
|
Conflicts:
|
|
464
|
-
${
|
|
393
|
+
${m.conflicts.map(k=>`Line ${k.lineNumber}: BASE="${k.base.substring(0,50)}..." | CURRENT="${k.current.substring(0,50)}..." | INCOMING="${k.incoming.substring(0,50)}..."`).join(`
|
|
465
394
|
`)}
|
|
466
395
|
|
|
467
|
-
Please resolve conflicts manually or use write() to overwrite.`;if(
|
|
468
|
-
`).replace(/\\t/g," ").replace(/\\r/g,"\r").replace(/\\"/g,'"').replace(/\\'/g,"'")),
|
|
396
|
+
Please resolve conflicts manually or use write() to overwrite.`;if(Vr(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(Vr(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,`
|
|
397
|
+
`).replace(/\\t/g," ").replace(/\\r/g,"\r").replace(/\\"/g,'"').replace(/\\'/g,"'")),r=r.replace(/\r\n/g,`
|
|
469
398
|
`).replace(/\r/g,`
|
|
470
|
-
`),n!=="preserve"&&n!=="lf")switch(n){case"crlf":
|
|
471
|
-
`);break;case"cr":
|
|
472
|
-
`&&(
|
|
473
|
-
`));break}return
|
|
474
|
-
`,
|
|
475
|
-
`,
|
|
399
|
+
`),n!=="preserve"&&n!=="lf")switch(n){case"crlf":r=r.replace(/\n/g,`\r
|
|
400
|
+
`);break;case"cr":r=r.replace(/\n/g,"\r");break;case"platform":ys===`\r
|
|
401
|
+
`&&(r=r.replace(/\n/g,`\r
|
|
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=`
|
|
403
|
+
`,r=e.lf,s="lf";e.crlf>r&&(n=`\r
|
|
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 Wr,Ra=y(()=>{Wr=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
|
|
476
405
|
`?e.replace(/\n/g,`\r
|
|
477
|
-
`):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=y(()=>{U();Ra();At=class extends P{getDefinition(){return{name:"searchReplace",description:`Perform TARGETED SEARCH & REPLACE operations on files.
|
|
478
407
|
|
|
479
408
|
\u{1F3AF} PERFECT FOR:
|
|
480
409
|
- Small configuration updates (port numbers, URLs, etc.)
|
|
@@ -495,21 +424,67 @@ Please resolve conflicts manually or use write() to overwrite.`;if(tr(t,S,"utf-8
|
|
|
495
424
|
\u{1F4A1} TIPS:
|
|
496
425
|
- Use precise search text to avoid unintended replacements
|
|
497
426
|
- Test with small changes first
|
|
498
|
-
- 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=
|
|
499
|
-
`)&&(
|
|
500
|
-
`)),
|
|
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 Wr(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);(s.style==="crlf"||s.dominant===`\r
|
|
428
|
+
`)&&(p=p.replace(/\n/g,`\r
|
|
429
|
+
`)),Du(t,p,"utf-8")}let l=`Search/replace completed. ${a} of ${e.operations.length} operations applied successfully.`,u=c.length>0?`
|
|
501
430
|
|
|
502
431
|
Operation details:
|
|
503
432
|
${c.join(`
|
|
504
|
-
`)}`:"";return l+
|
|
505
|
-
`
|
|
433
|
+
`)}`:"";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 X,Ae=y(()=>{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"}}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=y(()=>{Ae();zr=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=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:
|
|
434
|
+
${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(`
|
|
435
|
+
`);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=y(()=>{Ae();Hr=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=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=y(()=>{Ae();Jr=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=_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(`
|
|
436
|
+
`);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(`
|
|
437
|
+
`);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(`
|
|
438
|
+
`);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 Va}from"path";var Gr,Wa=y(()=>{Ae();Gr=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=Va(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=Va(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 Vu}from"fs";import{resolve as Wu}from"path";var Br,za=y(()=>{Ae();Br=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=Wu(e,"Cargo.toml");if(Uu(r))try{let i=Vu(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=y(()=>{Ae();qr=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=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=y(()=>{Ae();Kr=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=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=y(()=>{Ae();Yr=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=[...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=y(()=>{Oa();ja();_a();Wa();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=y(()=>{U();bs();Rt=class extends P{getDefinition(){return{name:"validate",description:`Validate code files for syntax errors, type errors, and code style issues.
|
|
439
|
+
|
|
440
|
+
\u{1F4CB} USE CASES:
|
|
441
|
+
- Verify generated code has no syntax errors
|
|
442
|
+
- Check TypeScript type correctness
|
|
443
|
+
- Validate Python code style with Flake8/Mypy
|
|
444
|
+
- Ensure code quality before committing
|
|
445
|
+
|
|
446
|
+
\u{1F511} PARAMETERS:
|
|
447
|
+
- path: File path to validate (relative or absolute)
|
|
448
|
+
- language: Programming language (optional, auto-detected from file extension)
|
|
449
|
+
|
|
450
|
+
\u{1F4A1} EXAMPLES:
|
|
451
|
+
- validate({ path: "src/utils/helper.ts" }) - Validate TypeScript file
|
|
452
|
+
- validate({ path: "lib/api.py", language: "python" }) - Validate Python file
|
|
453
|
+
- validate({ path: "app.js" }) - Validate JavaScript file
|
|
454
|
+
|
|
455
|
+
\u{1F4DD} RETURN VALUE:
|
|
456
|
+
- Success message if validation passes
|
|
457
|
+
- Detailed error messages with line numbers if validation fails
|
|
458
|
+
|
|
459
|
+
\u{1F3AF} SUPPORTED LANGUAGES:
|
|
460
|
+
- JavaScript/TypeScript: tsc type checking, ESLint
|
|
461
|
+
- Python: syntax check, Flake8, Mypy
|
|
462
|
+
- Other languages: gracefully skipped if no validator available
|
|
463
|
+
|
|
464
|
+
\u{1F517} RELATED TOOLS:
|
|
465
|
+
- read: View the content of files before or after validation
|
|
466
|
+
- merge: Modify files to fix validation errors
|
|
467
|
+
- searchReplace: Batch fix validation errors across multiple files
|
|
468
|
+
- 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}
|
|
469
|
+
${e.message}`;return e.warnings&&e.warnings.length>0&&(n+=`
|
|
470
|
+
|
|
471
|
+
\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+=`
|
|
472
|
+
${s+1}. [${i}] ${r.message}`,r.code&&(n+=` (${r.code})`)})),n}else{let n=`\u274C Validation failed: ${t}
|
|
473
|
+
${e.message}`;return e.errors&&e.errors.length>0&&(n+=`
|
|
474
|
+
|
|
475
|
+
Errors (${e.errors.length}):`,e.errors.forEach((r,s)=>{let i=r.line?`Line ${r.line}${r.column?`:${r.column}`:""}`:"Unknown location";n+=`
|
|
476
|
+
${s+1}. [${i}] ${r.message}`,r.code&&(n+=` (${r.code})`)})),e.warnings&&e.warnings.length>0&&(n+=`
|
|
477
|
+
|
|
478
|
+
Warnings (${e.warnings.length}):`,e.warnings.forEach((r,s)=>{let i=r.line?`Line ${r.line}${r.column?`:${r.column}`:""}`:"Unknown location";n+=`
|
|
479
|
+
${s+1}. [${i}] ${r.message}`,r.code&&(n+=` (${r.code})`)})),n}}},tc=new Rt;Un=tc});var Ts={};O(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=y(()=>{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(`
|
|
480
|
+
`).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=y(()=>{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 Vn(o){return oc.execute(o)}var Ft,oc,Wn,sc=y(()=>{U();Dt();Ft=class extends P{getDefinition(){return{name:"glob",description:`Search for files matching a glob pattern.
|
|
506
481
|
|
|
507
482
|
Examples:
|
|
508
483
|
- glob("*.js") - all .js files in current directory
|
|
509
484
|
- glob("**/*.ts") - all .ts files recursively
|
|
510
485
|
- glob("src/**/*.{js,ts}") - all .js and .ts files under src/
|
|
511
486
|
|
|
512
|
-
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=
|
|
487
|
+
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;Wn=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=y(()=>{U();Dt();K();Ot=class extends P{getDefinition(){return{name:"grep",description:`Search for text patterns in files using regular expressions with glob support.
|
|
513
488
|
|
|
514
489
|
\u{1F4CB} USE CASES:
|
|
515
490
|
- Find code patterns and function definitions
|
|
@@ -540,8 +515,62 @@ Returns an array of matching file paths.`,input_schema:{type:"object",properties
|
|
|
540
515
|
- Cross-platform glob pattern matching
|
|
541
516
|
- Ignores system and gitignore files
|
|
542
517
|
- Case-sensitive matching (use regex flags for case-insensitive)
|
|
543
|
-
- 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("\\")?
|
|
544
|
-
`),l=[];c.forEach((p
|
|
518
|
+
- 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(C(`Processing glob pattern: ${e.path}`),t=Zu(e.path,c),t.length===0)return`No files found matching pattern: ${e.path}`;C(`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(`
|
|
519
|
+
`),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=y(()=>{U();Dt();jt=class extends P{getDefinition(){return{name:"search-docs",description:`Search for content in documentation files using keywords and regular expressions.
|
|
520
|
+
|
|
521
|
+
\u{1F4CB} USE CASES:
|
|
522
|
+
- Find information in project documentation
|
|
523
|
+
- Search for specific topics across multiple docs
|
|
524
|
+
- Locate configuration guidelines in docs
|
|
525
|
+
- Find usage examples and tutorials
|
|
526
|
+
- Search for API documentation
|
|
527
|
+
|
|
528
|
+
\u{1F511} PARAMETERS:
|
|
529
|
+
- query: Search query string or regular expression pattern (required)
|
|
530
|
+
- path: Documentation directory or file path (default: ".niums/docs")
|
|
531
|
+
- maxResults: Maximum number of results to return (default: 10)
|
|
532
|
+
|
|
533
|
+
\u{1F4A1} EXAMPLES:
|
|
534
|
+
- search-docs({ query: "API", path: ".niums/docs" }) - Search for API in docs
|
|
535
|
+
- search-docs({ query: "configuration", maxResults: 5 }) - Get top 5 results for configuration
|
|
536
|
+
- search-docs({ query: "function.*example", path: ".niums/docs/examples" }) - Regex search in examples
|
|
537
|
+
|
|
538
|
+
\u{1F4DD} RETURN VALUE:
|
|
539
|
+
- Array of matching results with file paths, line numbers, and content
|
|
540
|
+
- Results sorted by relevance score
|
|
541
|
+
- Each result formatted as: "path:line: content"
|
|
542
|
+
- Summary statistics for multiple files
|
|
543
|
+
- Helpful error messages for invalid queries or no matches
|
|
544
|
+
|
|
545
|
+
\u{1F517} RELATED TOOLS:
|
|
546
|
+
- read: View the full content of files found in search results
|
|
547
|
+
- grep: Search for code patterns in source files (complementary to documentation search)
|
|
548
|
+
- 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(`
|
|
549
|
+
`).forEach((x,k)=>{if(u.test(x)){let f=this.calculateMatchScore(x,r,k);p.push({path:m,line:k+1,content:x.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=y(()=>{U();Dt();_t=class extends P{getDefinition(){return{name:"build-doc-index",description:`Build and update documentation index for efficient search.
|
|
550
|
+
|
|
551
|
+
\u{1F4CB} USE CASES:
|
|
552
|
+
- Create initial documentation index
|
|
553
|
+
- Update index when docs are added or modified
|
|
554
|
+
- Refresh index to ensure search accuracy
|
|
555
|
+
- Maintain up-to-date metadata for docs
|
|
556
|
+
|
|
557
|
+
\u{1F511} PARAMETERS:
|
|
558
|
+
- path: Documentation directory path (default: ".niums/docs")
|
|
559
|
+
|
|
560
|
+
\u{1F4A1} EXAMPLES:
|
|
561
|
+
- build-doc-index() - Build index for default docs directory
|
|
562
|
+
- build-doc-index({ path: ".niums/docs" }) - Build index for specific docs directory
|
|
563
|
+
- build-doc-index({ path: "docs/" }) - Build index for custom docs location
|
|
564
|
+
|
|
565
|
+
\u{1F4DD} RETURN VALUE:
|
|
566
|
+
- Success message with index statistics
|
|
567
|
+
- Path to generated index file
|
|
568
|
+
- Number of documents indexed
|
|
569
|
+
- 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,x=this.extractDocMetadata(d,h,w);l.push(x)}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:
|
|
570
|
+
- Index file: ${g}
|
|
571
|
+
- Total documents indexed: ${u.totalDocuments}
|
|
572
|
+
- Last indexed: ${u.lastIndexed}
|
|
573
|
+
- 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={};O(ks,{BuildDocIndexTool:()=>_t,GlobTool:()=>Ft,GrepTool:()=>Ot,SearchDocsTool:()=>jt,buildDocIndex:()=>qn,buildDocIndexTool:()=>Kn,glob:()=>Vn,globTool:()=>Wn,grep:()=>zn,grepTool:()=>Hn,searchDocs:()=>Jn,searchDocsTool:()=>Gn});var Qr=y(()=>{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=y(()=>{U();Es=null,mc=!1;Nt=class o extends P{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.
|
|
545
574
|
|
|
546
575
|
\u{1F30D} **\u667A\u80FD\u73AF\u5883\u611F\u77E5**
|
|
547
576
|
\u6B64\u5DE5\u5177\u4F1A\u6839\u636E\u5F53\u524D\u8FD0\u884C\u5E73\u53F0\u81EA\u52A8\u4F18\u5316\u547D\u4EE4\u6267\u884C\uFF1A
|
|
@@ -586,7 +615,7 @@ Returns an array of matching file paths.`,input_schema:{type:"object",properties
|
|
|
586
615
|
\u{1F504} **AUTOMATIC CONVERSIONS:**
|
|
587
616
|
- ls \u2192 dir, pwd \u2192 cd, which \u2192 where, cat \u2192 type
|
|
588
617
|
- rm -rf \u2192 rmdir /s /q, cp \u2192 copy, mv \u2192 move
|
|
589
|
-
- grep \u2192 findstr, ps \u2192 tasklist, ifconfig \u2192 ipconfig`,input_schema:{type:"object",properties:{command:{type:"string",description:"Shell command to execute"},timeout:{type:"number",description:"Maximum execution time in milliseconds (default: 60000)",default:6e4},captureOutput:{type:"boolean",description:"Whether to capture and return command output (default: true)",default:!0}},required:["command"]},requiresConfirmation:!1}}getDynamicDefinition(e){return{...this.getDefinition(),requiresConfirmation:this.isHighRiskCommand(e.command)}}isCommandNotFoundError(e,t){if(!e)return!1;let n=e.toLowerCase();return(t==="win32"?["\u4E0D\u662F\u5185\u90E8\u6216\u5916\u90E8\u547D\u4EE4","\u4E0D\u662F\u53EF\u8FD0\u884C\u7684\u7A0B\u5E8F","is not recognized as an internal or external command","is not recognized as","'command' is not recognized","\u627E\u4E0D\u5230\u547D\u4EE4","\u65E0\u6CD5\u5C06","command not found"]:["command not found","not found","no such file or directory","cannot find","bash: command not found","sh: command not found","zsh: command not found"]).some(a=>n.includes(a))}extractCommandName(e){let t=e?e.trim():"",n=t.match(/^(\S+)/);return n?n[1]:t}generateCommandNotFoundMessage(e,t){let n=t==="win32"?"Windows":t==="darwin"?"macOS":"Linux",
|
|
618
|
+
- grep \u2192 findstr, ps \u2192 tasklist, ifconfig \u2192 ipconfig`,input_schema:{type:"object",properties:{command:{type:"string",description:"Shell command to execute"},timeout:{type:"number",description:"Maximum execution time in milliseconds (default: 60000)",default:6e4},captureOutput:{type:"boolean",description:"Whether to capture and return command output (default: true)",default:!0}},required:["command"]},requiresConfirmation:!1}}getDynamicDefinition(e){return{...this.getDefinition(),requiresConfirmation:this.isHighRiskCommand(e.command)}}isCommandNotFoundError(e,t){if(!e)return!1;let n=e.toLowerCase();return(t==="win32"?["\u4E0D\u662F\u5185\u90E8\u6216\u5916\u90E8\u547D\u4EE4","\u4E0D\u662F\u53EF\u8FD0\u884C\u7684\u7A0B\u5E8F","is not recognized as an internal or external command","is not recognized as","'command' is not recognized","\u627E\u4E0D\u5230\u547D\u4EE4","\u65E0\u6CD5\u5C06","command not found"]:["command not found","not found","no such file or directory","cannot find","bash: command not found","sh: command not found","zsh: command not found"]).some(a=>n.includes(a))}extractCommandName(e){let t=e?e.trim():"",n=t.match(/^(\S+)/);return n?n[1]:t}generateCommandNotFoundMessage(e,t){let n=t==="win32"?"Windows":t==="darwin"?"macOS":"Linux",r={git:{win:"Download from https://git-scm.com/download/win or use 'winget install Git.Git'",unix:"Install using: sudo apt-get install git (Ubuntu/Debian) or brew install git (macOS)",description:"Version control system"},python:{win:"Download from https://www.python.org/downloads/ or use 'winget install Python.Python.3'",unix:"Install using: sudo apt-get install python3 (Ubuntu/Debian) or brew install python3 (macOS)",description:"Python programming language"},node:{win:"Download from https://nodejs.org/ or use 'winget install OpenJS.NodeJS'",unix:"Install using: sudo apt-get install nodejs (Ubuntu/Debian) or brew install node (macOS)",description:"Node.js JavaScript runtime"},npm:{win:"Install Node.js from https://nodejs.org/ (includes npm)",unix:"Install Node.js (includes npm): sudo apt-get install nodejs npm or brew install node",description:"Node Package Manager (comes with Node.js)"},docker:{win:"Download Docker Desktop from https://www.docker.com/products/docker-desktop",unix:"Install using: sudo apt-get install docker.io (Ubuntu/Debian) or brew install docker (macOS)",description:"Container platform"},curl:{win:"Usually built-in on Windows 10+. If missing, download from https://curl.se/windows/",unix:"Install using: sudo apt-get install curl (Ubuntu/Debian) or brew install curl (macOS)",description:"Command-line tool for transferring data with URLs"},wget:{win:"Download from https://eternallybored.org/misc/wget/ or use 'winget install GNU.Wget'",unix:"Install using: sudo apt-get install wget (Ubuntu/Debian) or brew install wget (macOS)",description:"Network downloader"},make:{win:"Install via Chocolatey: choco install make or use WSL",unix:"Install using: sudo apt-get install build-essential (Ubuntu/Debian) or xcode-select --install (macOS)",description:"Build automation tool"},gcc:{win:"Install MinGW from http://mingw.org/ or use Visual Studio Build Tools",unix:"Install using: sudo apt-get install build-essential (Ubuntu/Debian) or xcode-select --install (macOS)",description:"GNU Compiler Collection"},code:{win:"Install VS Code from https://code.visualstudio.com/ and add to PATH during installation",unix:"Install VS Code and run: sudo ln -s /Applications/Visual\\ Studio\\ Code.app/Contents/Resources/app/bin/code /usr/local/bin/code",description:"Visual Studio Code editor"}};if(e.toLowerCase()==="ls"&&t==="win32")return`\u274C Command Not Found: '${e}'
|
|
590
619
|
|
|
591
620
|
\u{1F5A5}\uFE0F Current Environment: ${n}
|
|
592
621
|
|
|
@@ -608,7 +637,7 @@ Returns an array of matching file paths.`,input_schema:{type:"object",properties
|
|
|
608
637
|
\u{1F3AF} Try this instead:
|
|
609
638
|
dir
|
|
610
639
|
|
|
611
|
-
\u26A0\uFE0F Please use Windows equivalent commands for better compatibility.`;let s=
|
|
640
|
+
\u26A0\uFE0F Please use Windows equivalent commands for better compatibility.`;let s=r[e.toLowerCase()],i=`\u274C Command Not Found: '${e}'
|
|
612
641
|
|
|
613
642
|
`;return i+=`\u{1F5A5}\uFE0F Current Environment: ${n}
|
|
614
643
|
|
|
@@ -633,38 +662,38 @@ Returns an array of matching file paths.`,input_schema:{type:"object",properties
|
|
|
633
662
|
`,i+=` - dnf: sudo dnf install <package-name> (Fedora)
|
|
634
663
|
`))),i+=`
|
|
635
664
|
\u26A0\uFE0F Please install the required command before proceeding.
|
|
636
|
-
`,i+=" The AI assistant cannot continue without this tool being available.",i}async execute(e){try{let{command:t,timeout:n=6e4,captureOutput:
|
|
637
|
-
${
|
|
665
|
+
`,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}
|
|
666
|
+
${h}
|
|
638
667
|
|
|
639
668
|
Command failed with error:
|
|
640
|
-
TypeError: Command is undefined or null`)}let s=
|
|
669
|
+
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),x=Buffer.concat([h,w]);try{let k=await fc();if(k){let f=["cp936","gbk","utf8","gb2312","big5"],v=!1;for(let S of f)try{if(g=k.decode(x,S),/[\u4e00-\u9fff]/.test(g)||g.length>0){v=!0;break}}catch{continue}v||(g=x.toString("utf8"))}else g=x.toString("utf8");m.status===0&&g&&g.trim()&&(g+=`
|
|
641
670
|
|
|
642
|
-
\u2705 Windows\u7F16\u7801\u5DF2\u4F18\u5316\u5904\u7406`)}catch{g=
|
|
643
|
-
${
|
|
671
|
+
\u2705 Windows\u7F16\u7801\u5DF2\u4F18\u5316\u5904\u7406`)}catch{g=x.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}
|
|
672
|
+
${p}
|
|
644
673
|
|
|
645
|
-
${
|
|
674
|
+
${m}
|
|
646
675
|
|
|
647
676
|
Original error:
|
|
648
|
-
${g}`,!0)}return this.createToolResult(
|
|
649
|
-
${
|
|
677
|
+
${g}`,!0)}return this.createToolResult(g,`${u}
|
|
678
|
+
${p}
|
|
650
679
|
|
|
651
680
|
Command output:
|
|
652
|
-
${g}`)}catch(g){let
|
|
681
|
+
${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"],x="";for(let k of w)try{if(x=h.decode(m,k),x.length>0){d+=x;break}}catch{continue}x||(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
|
|
653
682
|
|
|
654
|
-
${
|
|
655
|
-
${
|
|
683
|
+
${h}`),this.createToolResult({error:d,success:!1,commandNotFound:!0},`${u}
|
|
684
|
+
${p}
|
|
656
685
|
|
|
657
|
-
${
|
|
686
|
+
${w}
|
|
658
687
|
|
|
659
688
|
Original error:
|
|
660
|
-
${
|
|
661
|
-
${
|
|
689
|
+
${d}`,!0)}return this.createToolResult({error:d,success:!1},`${u}
|
|
690
|
+
${p}
|
|
662
691
|
|
|
663
692
|
Command failed with error:
|
|
664
|
-
${
|
|
665
|
-
${
|
|
693
|
+
${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}
|
|
694
|
+
${p}
|
|
666
695
|
|
|
667
|
-
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}},
|
|
696
|
+
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={};O(Ps,{ShellTool:()=>Nt,shell:()=>Yn,shellTool:()=>Ut});var eo=y(()=>{hc()});var Ms={};O(Ms,{THINK_TOOL:()=>to,ThinkTool:()=>ot,extractThought:()=>no,isThinkTool:()=>zt,think:()=>Vt,thinkTool:()=>Wt});function Vt(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,Wt,to,Xn=y(()=>{U();ot=class extends P{getDefinition(){return{name:"think",description:`Use this tool to think, reason, and reflect before taking actions.
|
|
668
697
|
This is a zero-side-effect tool that makes your thinking process observable.
|
|
669
698
|
|
|
670
699
|
IMPORTANT: You should call this tool:
|
|
@@ -672,12 +701,175 @@ IMPORTANT: You should call this tool:
|
|
|
672
701
|
- AFTER receiving an Observation (to reflect on the result)
|
|
673
702
|
- When you need to analyze complex situations
|
|
674
703
|
|
|
675
|
-
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."}}
|
|
704
|
+
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;Wt=$s,to=$s.getDefinition()});var Fs={};O(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(`
|
|
705
|
+
`),n=yc.all,r=yc[e]||[];return`<instructions>
|
|
706
|
+
${[...new Set([...n,...r])].map(a=>gg[a]).join(`
|
|
707
|
+
`)}
|
|
676
708
|
|
|
677
|
-
<
|
|
678
|
-
You have access to
|
|
709
|
+
<available_tools>
|
|
710
|
+
You have access to the following tools (detailed schemas are provided separately):
|
|
679
711
|
|
|
680
|
-
|
|
712
|
+
${t}
|
|
713
|
+
|
|
714
|
+
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.
|
|
715
|
+
Use the tool definitions to understand what parameters each tool requires.
|
|
716
|
+
</available_tools>
|
|
717
|
+
</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
|
|
718
|
+
|
|
719
|
+
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
720
|
+
${o}
|
|
721
|
+
|
|
722
|
+
\u8BC4\u4F30\u6807\u51C6\uFF1A
|
|
723
|
+
- 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
|
|
724
|
+
- 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
|
|
725
|
+
- 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
|
|
726
|
+
|
|
727
|
+
\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?`
|
|
728
|
+
|
|
729
|
+
\u53EF\u7528\u7684\u5B50\u667A\u80FD\u4F53\uFF1A
|
|
730
|
+
${e.map(r=>`- ${r.name}: ${r.description}`).join(`
|
|
731
|
+
`)}`:"";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
|
|
732
|
+
|
|
733
|
+
\u7528\u6237\u8BF7\u6C42\uFF1A
|
|
734
|
+
${o}
|
|
735
|
+
${n}
|
|
736
|
+
|
|
737
|
+
## \u89C4\u5212\u8981\u6C42
|
|
738
|
+
|
|
739
|
+
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)
|
|
740
|
+
|
|
741
|
+
2. **\u5DE5\u5177\u6743\u9650\u63A7\u5236** (\u91CD\u8981):
|
|
742
|
+
- \u5F53\u6B65\u9AA4\u4F7F\u7528 **default \u901A\u7528\u667A\u80FD\u4F53** \u65F6\uFF0C\u5FC5\u987B\u6307\u5B9A \`allowedTools\` \u5217\u8868
|
|
743
|
+
- \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)
|
|
744
|
+
|
|
745
|
+
3. **\u5E38\u89C1\u6B65\u9AA4\u7684\u5DE5\u5177\u914D\u7F6E**:
|
|
746
|
+
|
|
747
|
+
| \u6B65\u9AA4\u6027\u8D28 | allowedTools \u914D\u7F6E | \u793A\u4F8B\u573A\u666F |
|
|
748
|
+
|---------|------------------|---------|
|
|
749
|
+
| \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 |
|
|
750
|
+
| \u4EE3\u7801\u63A2\u7D22 | \`["read", "glob", "grep", "quickProjectScan", "shell", "think"]\` | \u5206\u6790\u73B0\u6709\u67B6\u6784\u3001\u67E5\u627E\u6A21\u5757 |
|
|
751
|
+
| \u4EE3\u7801\u5B9E\u73B0 | \`["read", "write", "merge", "delete", "mkdir", "glob", "grep", "shell", "think"]\` | \u521B\u5EFA\u6587\u4EF6\u3001\u5B9E\u73B0\u529F\u80FD |
|
|
752
|
+
| \u6D4B\u8BD5\u9A8C\u8BC1 | \`["read", "shell", "glob", "grep", "think"]\` | \u8FD0\u884C\u6D4B\u8BD5\u3001\u67E5\u770B\u7ED3\u679C |
|
|
753
|
+
|
|
754
|
+
4. **\u5B50\u667A\u80FD\u4F53\u9009\u62E9**:
|
|
755
|
+
\u53EF\u7528\u5B50\u667A\u80FD\u4F53: ${t}
|
|
756
|
+
- explorer: \u4E13\u95E8\u7528\u4E8E\u9879\u76EE\u63A2\u7D22\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u53EA\u8BFB\u6743\u9650
|
|
757
|
+
- coder: \u4E13\u95E8\u7528\u4E8E\u4EE3\u7801\u5B9E\u73B0\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u8BFB\u5199\u6743\u9650
|
|
758
|
+
- default: \u901A\u7528\u667A\u80FD\u4F53\uFF0C\u9700\u8981\u660E\u786E\u6307\u5B9A allowedTools
|
|
759
|
+
|
|
760
|
+
## \u793A\u4F8B\u89C4\u5212
|
|
761
|
+
|
|
762
|
+
### \u274C \u9519\u8BEF\u793A\u4F8B
|
|
763
|
+
\`\`\`json
|
|
764
|
+
{
|
|
765
|
+
"steps": [
|
|
766
|
+
{
|
|
767
|
+
"description": "\u5B8C\u6210\u9700\u6C42\u5206\u6790\u4E0E\u6280\u672F\u9009\u578B",
|
|
768
|
+
"subAgent": "default"
|
|
769
|
+
// \u274C \u7F3A\u5C11 allowedTools\uFF0C\u667A\u80FD\u4F53\u53EF\u80FD\u6EE5\u7528\u5199\u5DE5\u5177
|
|
770
|
+
}
|
|
771
|
+
]
|
|
772
|
+
}
|
|
773
|
+
\`\`\`
|
|
774
|
+
|
|
775
|
+
### \u2705 \u6B63\u786E\u793A\u4F8B1: \u4F7F\u7528 default \u667A\u80FD\u4F53 + \u660E\u786E\u5DE5\u5177\u6743\u9650
|
|
776
|
+
\`\`\`json
|
|
777
|
+
{
|
|
778
|
+
"overview": "\u521D\u59CB\u5316\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF",
|
|
779
|
+
"steps": [
|
|
780
|
+
{
|
|
781
|
+
"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",
|
|
782
|
+
"subAgent": "default",
|
|
783
|
+
"allowedTools": ["read", "glob", "grep", "quickProjectScan", "think", "askUser"]
|
|
784
|
+
},
|
|
785
|
+
{
|
|
786
|
+
"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",
|
|
787
|
+
"subAgent": "default",
|
|
788
|
+
"allowedTools": ["read", "write", "merge", "mkdir", "glob", "grep", "shell", "think"]
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"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",
|
|
792
|
+
"subAgent": "default",
|
|
793
|
+
"allowedTools": ["read", "shell", "glob", "grep", "think"]
|
|
794
|
+
}
|
|
795
|
+
],
|
|
796
|
+
"expectedResult": "\u5B8C\u6210\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\u7684\u5B8C\u6574\u5B9E\u73B0\u5E76\u901A\u8FC7\u6D4B\u8BD5"
|
|
797
|
+
}
|
|
798
|
+
\`\`\`
|
|
799
|
+
|
|
800
|
+
### \u2705 \u6B63\u786E\u793A\u4F8B2: \u4F7F\u7528\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53(\u65E0\u9700\u6307\u5B9A allowedTools)
|
|
801
|
+
\`\`\`json
|
|
802
|
+
{
|
|
803
|
+
"overview": "\u91CD\u6784\u9879\u76EE\u67B6\u6784",
|
|
804
|
+
"steps": [
|
|
805
|
+
{
|
|
806
|
+
"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",
|
|
807
|
+
"subAgent": "explorer"
|
|
808
|
+
// \u2705 \u4F7F\u7528 explorer \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"description": "\u6839\u636E\u5206\u6790\u7ED3\u679C\uFF0C\u91CD\u6784\u4EE3\u7801\u7ED3\u6784\uFF0C\u4F18\u5316\u6A21\u5757\u5212\u5206",
|
|
812
|
+
"subAgent": "coder"
|
|
813
|
+
// \u2705 \u4F7F\u7528 coder \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
814
|
+
}
|
|
815
|
+
],
|
|
816
|
+
"expectedResult": "\u5B8C\u6210\u67B6\u6784\u91CD\u6784\u5E76\u4FDD\u6301\u529F\u80FD\u5B8C\u6574\u6027"
|
|
817
|
+
}
|
|
818
|
+
\`\`\`
|
|
819
|
+
|
|
820
|
+
\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?`
|
|
821
|
+
\u53EF\u7528\u7684\u5B50\u667A\u80FD\u4F53\uFF1A
|
|
822
|
+
${e.map(n=>`- ${n.name}: ${n.description}`).join(`
|
|
823
|
+
`)}`:"";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
|
|
824
|
+
|
|
825
|
+
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
826
|
+
${o}
|
|
827
|
+
${t}
|
|
828
|
+
|
|
829
|
+
\u8BF7\u6309\u7167\u4EE5\u4E0BMarkdown\u683C\u5F0F\u8F93\u51FA\u4EFB\u52A1\u89C4\u5212\uFF1A
|
|
830
|
+
|
|
831
|
+
# \u4EFB\u52A1\u89C4\u5212
|
|
832
|
+
|
|
833
|
+
## \u4EFB\u52A1\u6982\u8FF0
|
|
834
|
+
[\u7B80\u8981\u63CF\u8FF0\u4EFB\u52A1\u76EE\u6807\uFF0C\u5305\u62EC\u8F93\u5165\u3001\u5904\u7406\u548C\u9884\u671F\u8F93\u51FA]
|
|
835
|
+
|
|
836
|
+
## \u6267\u884C\u6B65\u9AA4
|
|
837
|
+
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"])
|
|
838
|
+
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"])
|
|
839
|
+
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"])
|
|
840
|
+
...
|
|
841
|
+
|
|
842
|
+
## \u9884\u671F\u7ED3\u679C
|
|
843
|
+
[\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]
|
|
844
|
+
|
|
845
|
+
## \u6CE8\u610F\u4E8B\u9879
|
|
846
|
+
[\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]
|
|
847
|
+
|
|
848
|
+
\u91CD\u8981\u89C4\u5219\uFF1A
|
|
849
|
+
- \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
|
|
850
|
+
- \u5FC5\u987B\u5305\u542B2-4\u4E2A\u903B\u8F91\u6B65\u9AA4\uFF0C\u786E\u4FDD\u8986\u76D6\u6240\u6709\u5FC5\u8981\u5DE5\u4F5C
|
|
851
|
+
- \u6B65\u9AA4\u4E4B\u95F4\u5FC5\u987B\u6709\u660E\u786E\u7684\u4F9D\u8D56\u5173\u7CFB\u548C\u987A\u5E8F\u903B\u8F91
|
|
852
|
+
- \u6BCF\u4E2A\u6B65\u9AA4\u5FC5\u987B\u6807\u6CE8\u6700\u9002\u5408\u7684\u63A8\u8350\u5B50\u667A\u80FD\u4F53
|
|
853
|
+
- \u4EFB\u52A1\u6982\u8FF0\u5E94\u8BE5\u7B80\u660E\u627C\u8981\u5730\u6982\u62EC\u6574\u4E2A\u4EFB\u52A1\u7684\u76EE\u7684\u548C\u8303\u56F4
|
|
854
|
+
- \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
|
|
855
|
+
|
|
856
|
+
${o}
|
|
857
|
+
|
|
858
|
+
\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
|
|
859
|
+
|
|
860
|
+
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
861
|
+
${o}
|
|
862
|
+
|
|
863
|
+
\u53EF\u7528\u667A\u80FD\u4F53\uFF1A
|
|
864
|
+
${e}
|
|
865
|
+
|
|
866
|
+
\u5339\u914D\u6807\u51C6\uFF1A
|
|
867
|
+
1. \u667A\u80FD\u4F53\u7684\u4E13\u4E1A\u9886\u57DF\u4E0E\u4EFB\u52A1\u9700\u6C42\u7684\u5339\u914D\u5EA6
|
|
868
|
+
2. \u667A\u80FD\u4F53\u7684\u80FD\u529B\u8303\u56F4\u662F\u5426\u6DB5\u76D6\u4EFB\u52A1\u6240\u9700\u7684\u6240\u6709\u6280\u80FD
|
|
869
|
+
3. \u667A\u80FD\u4F53\u7684\u4E13\u957F\u662F\u5426\u80FD\u591F\u89E3\u51B3\u4EFB\u52A1\u4E2D\u7684\u6838\u5FC3\u6311\u6218
|
|
870
|
+
4. \u8003\u8651\u4EFB\u52A1\u7684\u590D\u6742\u5EA6\u548C\u667A\u80FD\u4F53\u7684\u5904\u7406\u80FD\u529B
|
|
871
|
+
|
|
872
|
+
\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=y(()=>{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:`
|
|
681
873
|
\u{1F30D} **\u6838\u5FC3\u539F\u5219\uFF1A\u4F60\u5FC5\u987B\u59CB\u7EC8\u611F\u77E5\u5E76\u9002\u5E94\u8FD0\u884C\u73AF\u5883**
|
|
682
874
|
|
|
683
875
|
**\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
|
|
@@ -694,9 +886,7 @@ You have access to a comprehensive set of tools, with the 'think' tool being spe
|
|
|
694
886
|
1. \u8BC6\u522B\u7528\u6237\u8BF7\u6C42\u7684\u6F5C\u5728\u5E73\u53F0\u4F9D\u8D56\u6027
|
|
695
887
|
2. \u9009\u62E9\u6700\u9002\u5408\u5F53\u524D\u5E73\u53F0\u7684\u5B9E\u73B0\u65B9\u6848
|
|
696
888
|
3. \u5982\u679C\u6D89\u53CAshell\u547D\u4EE4\uFF0C\u4F7F\u7528\u5E73\u53F0\u539F\u751F\u547D\u4EE4
|
|
697
|
-
4. \u4E3B\u52A8\u8BF4\u660E\u8DE8\u5E73\u53F0\u8003\u8651\u56E0\u7D20
|
|
698
|
-
</environment_awareness>
|
|
699
|
-
|
|
889
|
+
4. \u4E3B\u52A8\u8BF4\u660E\u8DE8\u5E73\u53F0\u8003\u8651\u56E0\u7D20`,workflow:`
|
|
700
890
|
<workflow>
|
|
701
891
|
You must follow this strict thinking pattern for EVERY response:
|
|
702
892
|
|
|
@@ -719,32 +909,27 @@ You must follow this strict thinking pattern for EVERY response:
|
|
|
719
909
|
- **\u9A8C\u8BC1\u7ED3\u679C\u662F\u5426\u7B26\u5408\u5F53\u524D\u5E73\u53F0\u9884\u671F**
|
|
720
910
|
- Verify if the expected outcome was achieved
|
|
721
911
|
- Adjust your plan if necessary
|
|
722
|
-
- Decide on the next appropriate action
|
|
723
|
-
|
|
724
|
-
This cycle continues: think \u2192 act \u2192 observe \u2192 think \u2192 act \u2192 ... until task completion.
|
|
725
|
-
</workflow>
|
|
726
|
-
|
|
727
|
-
<available_tools>
|
|
728
|
-
You have access to the following tools (detailed schemas are provided separately):
|
|
729
|
-
|
|
730
|
-
${r.map(t=>`- ${t.name}: ${t.description}`).join(`
|
|
731
|
-
`)}
|
|
732
|
-
|
|
733
|
-
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.
|
|
734
|
-
Use the tool definitions to understand what parameters each tool requires.
|
|
735
|
-
</available_tools>
|
|
912
|
+
- Decide on the next appropriate action
|
|
736
913
|
|
|
914
|
+
This cycle continues: think \u2192 act \u2192 observe \u2192 think \u2192 act \u2192 ... until task completion.
|
|
915
|
+
</workflow>`,critical_rules:`
|
|
737
916
|
<critical_rules>
|
|
738
917
|
1. ALWAYS call 'think' tool FIRST before taking any action
|
|
739
918
|
2. ALWAYS call 'think' tool AFTER receiving an Observation to reflect
|
|
740
919
|
3. The 'think' tool is zero-side-effect - it only makes your reasoning observable
|
|
741
920
|
4. NEVER write "Observation:" yourself - the system provides it
|
|
742
|
-
5. When you
|
|
921
|
+
5. TASK COMPLETION: When you have completed the task, use the 'finish' tool
|
|
922
|
+
- Call finish({ answer: "comprehensive summary", success: true })
|
|
923
|
+
- The answer should detail what was accomplished, files modified, results achieved
|
|
924
|
+
- This is the RECOMMENDED way to signal task completion
|
|
925
|
+
- Alternative: Return plain text without tool calls (implicit completion fallback)
|
|
926
|
+
- NEVER consider a task complete after just generating a summary
|
|
927
|
+
- ALWAYS continue execution until all steps in your plan are finished
|
|
928
|
+
- ONLY end the task when you have successfully completed the user's original request
|
|
743
929
|
6. Think deeply and systematically: analyze context, plan actions, reflect on results
|
|
744
930
|
7. If you encounter errors or unexpected results, use 'think' to analyze the problem and determine the best next step
|
|
745
931
|
8. ALWAYS maintain high code quality standards - follow project conventions, add appropriate comments, and write clean code
|
|
746
|
-
</critical_rules
|
|
747
|
-
|
|
932
|
+
</critical_rules>`,code_modification:`
|
|
748
933
|
<code_modification_workflow>
|
|
749
934
|
When modifying existing code:
|
|
750
935
|
1. Call think() to plan your approach and identify risks
|
|
@@ -756,7 +941,7 @@ When modifying existing code:
|
|
|
756
941
|
- Plan how to update each reference appropriately
|
|
757
942
|
5. Choose the appropriate tool:
|
|
758
943
|
- Use merge() for comprehensive changes to individual files
|
|
759
|
-
- Use
|
|
944
|
+
- Use searchReplace() for batch updates across multiple files (e.g., updating function calls)
|
|
760
945
|
6. If conflicts occur, call think() to decide whether to fix or use write() to overwrite
|
|
761
946
|
7. After making changes, verify the updates by calling grep() again to ensure all references are correctly updated
|
|
762
947
|
|
|
@@ -767,7 +952,7 @@ When creating new files:
|
|
|
767
952
|
|
|
768
953
|
When renaming or doing batch replacements:
|
|
769
954
|
1. Call think() to identify all occurrences and plan the replacement strategy
|
|
770
|
-
2. Use
|
|
955
|
+
2. Use searchReplace() with appropriate search pattern and replacement text
|
|
771
956
|
- For simple text: provide literal strings
|
|
772
957
|
- For patterns: use regex patterns
|
|
773
958
|
- Can target single file or multiple files with glob patterns
|
|
@@ -775,7 +960,7 @@ When renaming or doing batch replacements:
|
|
|
775
960
|
|
|
776
961
|
CRITICAL FILE OPERATION RULES:
|
|
777
962
|
- merge() and write() REQUIRE the complete file content, not just changes
|
|
778
|
-
-
|
|
963
|
+
- searchReplace() is ideal for renaming identifiers, updating imports, or pattern-based replacements
|
|
779
964
|
- Read the file first, prepare the full new version, then call merge() or write()
|
|
780
965
|
- NEVER skip the thinking steps - they make your reasoning observable and debuggable
|
|
781
966
|
- NEVER modify files without first reading their current content
|
|
@@ -790,8 +975,7 @@ FILE PATH SAFETY CONSTRAINTS:
|
|
|
790
975
|
- If user requests writing outside project directory, politely refuse and explain the security constraint
|
|
791
976
|
- Valid paths: "src/...", "lib/...", "config/...", "tests/...", "docs/...", etc.
|
|
792
977
|
- Invalid paths: "/etc/...", "../../../...", "C:Windows...", "/usr/local/..."
|
|
793
|
-
</code_modification_workflow
|
|
794
|
-
|
|
978
|
+
</code_modification_workflow>`,language_constraints:`
|
|
795
979
|
<language_constraints>
|
|
796
980
|
- ALWAYS analyze the project's primary programming language and file context before generating code
|
|
797
981
|
- Check .nium/project/project.json for language documentation
|
|
@@ -804,8 +988,7 @@ FILE PATH SAFETY CONSTRAINTS:
|
|
|
804
988
|
- For multi-language projects, follow the specific context of the file layer you're modifying
|
|
805
989
|
- When unsure, use glob() to explore file extensions and project structure first
|
|
806
990
|
- Maintain consistent code style within each language layer
|
|
807
|
-
</language_constraints
|
|
808
|
-
|
|
991
|
+
</language_constraints>`,specialized_task_routing:`
|
|
809
992
|
<specialized_task_routing>
|
|
810
993
|
For coding tasks that involve:
|
|
811
994
|
- Implementing new features or functions
|
|
@@ -828,8 +1011,7 @@ Example routing:
|
|
|
828
1011
|
- User: "\u91CD\u6784\u8FD9\u4E2A\u6A21\u5757\u63D0\u9AD8\u6027\u80FD" \u2192 Call plan() to route to coder agent
|
|
829
1012
|
|
|
830
1013
|
For simple tasks that don't involve code generation (reading files, exploring structure, running commands), you can handle them directly.
|
|
831
|
-
</specialized_task_routing
|
|
832
|
-
|
|
1014
|
+
</specialized_task_routing>`,project_exploration:`
|
|
833
1015
|
<project_exploration_guidelines>
|
|
834
1016
|
IMPORTANT: Avoid redundant project exploration in plan mode
|
|
835
1017
|
|
|
@@ -859,8 +1041,7 @@ When working within a plan/task context:
|
|
|
859
1041
|
Example:
|
|
860
1042
|
\u274C Bad: Call quickProjectScan() in every step of a plan task
|
|
861
1043
|
\u2705 Good: Call read('.nium/project/project.json') to get project info
|
|
862
|
-
</project_exploration_guidelines
|
|
863
|
-
|
|
1044
|
+
</project_exploration_guidelines>`,project_type_detection:`
|
|
864
1045
|
<project_type_detection>
|
|
865
1046
|
IMPORTANT: Identify project build system before making assumptions
|
|
866
1047
|
|
|
@@ -902,8 +1083,7 @@ Example 2 - Adding a dependency:
|
|
|
902
1083
|
2. Call think to plan based on detected build system
|
|
903
1084
|
3. Read the appropriate file
|
|
904
1085
|
4. Add dependency using correct syntax for that build system
|
|
905
|
-
</project_type_detection
|
|
906
|
-
|
|
1086
|
+
</project_type_detection>`,best_practices:`
|
|
907
1087
|
<best_practices>
|
|
908
1088
|
- Write modular, reusable code where appropriate
|
|
909
1089
|
- Add clear comments explaining complex logic or non-obvious implementation details
|
|
@@ -911,22 +1091,21 @@ Example 2 - Adding a dependency:
|
|
|
911
1091
|
- Follow language-specific coding standards and conventions
|
|
912
1092
|
- When modifying existing code, preserve the original author's intent while making improvements
|
|
913
1093
|
- Test your solutions conceptually before implementation
|
|
914
|
-
</best_practices
|
|
915
|
-
|
|
1094
|
+
</best_practices>`,examples:`
|
|
916
1095
|
<examples>
|
|
917
1096
|
<example>
|
|
918
1097
|
<scenario>User asks: Create a config.json file</scenario>
|
|
919
1098
|
<correct_response>
|
|
920
1099
|
Step 1 - Think first:
|
|
921
|
-
Call think: "The user wants a config.json file. I should create a new file with write() since it doesn't exist yet. Let me prepare a default JSON structure with common configuration options that would be useful."
|
|
1100
|
+
Call think({ thought: "The user wants a config.json file. I should create a new file with write() since it doesn't exist yet. Let me prepare a default JSON structure with common configuration options that would be useful." })
|
|
922
1101
|
|
|
923
1102
|
Step 2 - Execute action:
|
|
924
|
-
Call write
|
|
1103
|
+
Call write({ path: "config.json", content: "{"default": true, "settings": {}}" })
|
|
925
1104
|
|
|
926
1105
|
[System provides: Observation: done]
|
|
927
1106
|
|
|
928
1107
|
Step 3 - Think again to reflect:
|
|
929
|
-
Call think: "Write operation successful. The config.json file has been created with default settings. Task is complete."
|
|
1108
|
+
Call think({ thought: "Write operation successful. The config.json file has been created with default settings. Task is complete." })
|
|
930
1109
|
|
|
931
1110
|
Step 4 - Provide final answer:
|
|
932
1111
|
"Created config.json with default configuration that includes common settings."
|
|
@@ -937,193 +1116,59 @@ Step 4 - Provide final answer:
|
|
|
937
1116
|
<scenario>User asks: Add a new function to utils.js</scenario>
|
|
938
1117
|
<correct_response>
|
|
939
1118
|
Step 1 - Think:
|
|
940
|
-
Call think: "Need to add a function to utils.js. First I should read the existing file to understand its structure, coding style, and existing functions to ensure consistency."
|
|
1119
|
+
Call think({ thought: "Need to add a function to utils.js. First I should read the existing file to understand its structure, coding style, and existing functions to ensure consistency." })
|
|
941
1120
|
|
|
942
1121
|
Step 2 - Read file:
|
|
943
|
-
Call read
|
|
1122
|
+
Call read({ path: "utils.js" })
|
|
944
1123
|
|
|
945
1124
|
[System provides: Observation: <file content>]
|
|
946
1125
|
|
|
947
1126
|
Step 3 - Think about the content:
|
|
948
|
-
Call think: "I can see the current structure. The file has 3 existing utility functions with JSDoc comments and follows a specific naming convention. I'll add the new function at the end, following the same style pattern, and use merge() to safely integrate it."
|
|
1127
|
+
Call think({ thought: "I can see the current structure. The file has 3 existing utility functions with JSDoc comments and follows a specific naming convention. I'll add the new function at the end, following the same style pattern, and use merge() to safely integrate it." })
|
|
949
1128
|
|
|
950
1129
|
Step 4 - Merge changes:
|
|
951
|
-
Call merge
|
|
1130
|
+
Call merge({ path: "utils.js", content: "// Existing content...
|
|
1131
|
+
// New function added here
|
|
1132
|
+
function newFunction() {
|
|
1133
|
+
// Implementation
|
|
1134
|
+
}
|
|
1135
|
+
" })
|
|
952
1136
|
|
|
953
1137
|
[System provides: Observation: merge successful]
|
|
954
1138
|
|
|
955
1139
|
Step 5 - Think about result:
|
|
956
|
-
Call think: "Merge completed successfully without conflicts. The new function is now integrated into utils.js following the project's coding style."
|
|
1140
|
+
Call think({ thought: "Merge completed successfully without conflicts. The new function is now integrated into utils.js following the project's coding style." })
|
|
957
1141
|
|
|
958
1142
|
Step 6 - Final answer:
|
|
959
1143
|
"Successfully added the new function to utils.js using safe merge, maintaining consistency with existing code style."
|
|
960
1144
|
</correct_response>
|
|
961
1145
|
</example>
|
|
962
|
-
</examples
|
|
963
|
-
|
|
1146
|
+
</examples>`,final_note:`
|
|
964
1147
|
<final_note>
|
|
965
1148
|
The key difference from traditional tool calling:
|
|
966
1149
|
- OLD: You called tools directly and reasoned implicitly
|
|
967
1150
|
- NEW: You call think() to make reasoning explicit, THEN call tools
|
|
968
1151
|
|
|
969
1152
|
This makes your decision-making process transparent, debuggable, and more reliable. Always prioritize clarity and thoroughness in your thinking process.
|
|
970
|
-
</final_note
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
\
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
\
|
|
977
|
-
-
|
|
978
|
-
|
|
979
|
-
-
|
|
980
|
-
|
|
981
|
-
\
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
\u7528\
|
|
988
|
-
|
|
989
|
-
${n}
|
|
990
|
-
|
|
991
|
-
## \u89C4\u5212\u8981\u6C42
|
|
992
|
-
|
|
993
|
-
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)
|
|
994
|
-
|
|
995
|
-
2. **\u5DE5\u5177\u6743\u9650\u63A7\u5236** (\u91CD\u8981):
|
|
996
|
-
- \u5F53\u6B65\u9AA4\u4F7F\u7528 **default \u901A\u7528\u667A\u80FD\u4F53** \u65F6\uFF0C\u5FC5\u987B\u6307\u5B9A \`allowedTools\` \u5217\u8868
|
|
997
|
-
- \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)
|
|
998
|
-
|
|
999
|
-
3. **\u5E38\u89C1\u6B65\u9AA4\u7684\u5DE5\u5177\u914D\u7F6E**:
|
|
1000
|
-
|
|
1001
|
-
| \u6B65\u9AA4\u6027\u8D28 | allowedTools \u914D\u7F6E | \u793A\u4F8B\u573A\u666F |
|
|
1002
|
-
|---------|------------------|---------|
|
|
1003
|
-
| \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 |
|
|
1004
|
-
| \u4EE3\u7801\u63A2\u7D22 | \`["read", "glob", "grep", "quickProjectScan", "shell", "think"]\` | \u5206\u6790\u73B0\u6709\u67B6\u6784\u3001\u67E5\u627E\u6A21\u5757 |
|
|
1005
|
-
| \u4EE3\u7801\u5B9E\u73B0 | \`["read", "write", "merge", "delete", "mkdir", "glob", "grep", "shell", "think"]\` | \u521B\u5EFA\u6587\u4EF6\u3001\u5B9E\u73B0\u529F\u80FD |
|
|
1006
|
-
| \u6D4B\u8BD5\u9A8C\u8BC1 | \`["read", "shell", "glob", "grep", "think"]\` | \u8FD0\u884C\u6D4B\u8BD5\u3001\u67E5\u770B\u7ED3\u679C |
|
|
1007
|
-
|
|
1008
|
-
4. **\u5B50\u667A\u80FD\u4F53\u9009\u62E9**:
|
|
1009
|
-
\u53EF\u7528\u5B50\u667A\u80FD\u4F53: ${t}
|
|
1010
|
-
- explorer: \u4E13\u95E8\u7528\u4E8E\u9879\u76EE\u63A2\u7D22\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u53EA\u8BFB\u6743\u9650
|
|
1011
|
-
- coder: \u4E13\u95E8\u7528\u4E8E\u4EE3\u7801\u5B9E\u73B0\uFF0C\u9ED8\u8BA4\u6709\u5B8C\u6574\u8BFB\u5199\u6743\u9650
|
|
1012
|
-
- default: \u901A\u7528\u667A\u80FD\u4F53\uFF0C\u9700\u8981\u660E\u786E\u6307\u5B9A allowedTools
|
|
1013
|
-
|
|
1014
|
-
## \u793A\u4F8B\u89C4\u5212
|
|
1015
|
-
|
|
1016
|
-
### \u274C \u9519\u8BEF\u793A\u4F8B
|
|
1017
|
-
\`\`\`json
|
|
1018
|
-
{
|
|
1019
|
-
"steps": [
|
|
1020
|
-
{
|
|
1021
|
-
"description": "\u5B8C\u6210\u9700\u6C42\u5206\u6790\u4E0E\u6280\u672F\u9009\u578B",
|
|
1022
|
-
"subAgent": "default"
|
|
1023
|
-
// \u274C \u7F3A\u5C11 allowedTools\uFF0C\u667A\u80FD\u4F53\u53EF\u80FD\u6EE5\u7528\u5199\u5DE5\u5177
|
|
1024
|
-
}
|
|
1025
|
-
]
|
|
1026
|
-
}
|
|
1027
|
-
\`\`\`
|
|
1028
|
-
|
|
1029
|
-
### \u2705 \u6B63\u786E\u793A\u4F8B1: \u4F7F\u7528 default \u667A\u80FD\u4F53 + \u660E\u786E\u5DE5\u5177\u6743\u9650
|
|
1030
|
-
\`\`\`json
|
|
1031
|
-
{
|
|
1032
|
-
"overview": "\u521D\u59CB\u5316\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF",
|
|
1033
|
-
"steps": [
|
|
1034
|
-
{
|
|
1035
|
-
"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",
|
|
1036
|
-
"subAgent": "default",
|
|
1037
|
-
"allowedTools": ["read", "glob", "grep", "quickProjectScan", "think", "askUser"]
|
|
1038
|
-
},
|
|
1039
|
-
{
|
|
1040
|
-
"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",
|
|
1041
|
-
"subAgent": "default",
|
|
1042
|
-
"allowedTools": ["read", "write", "merge", "mkdir", "glob", "grep", "shell", "think"]
|
|
1043
|
-
},
|
|
1044
|
-
{
|
|
1045
|
-
"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",
|
|
1046
|
-
"subAgent": "default",
|
|
1047
|
-
"allowedTools": ["read", "shell", "glob", "grep", "think"]
|
|
1048
|
-
}
|
|
1049
|
-
],
|
|
1050
|
-
"expectedResult": "\u5B8C\u6210\u7528\u6237\u7BA1\u7406\u7CFB\u7EDF\u7684\u5B8C\u6574\u5B9E\u73B0\u5E76\u901A\u8FC7\u6D4B\u8BD5"
|
|
1051
|
-
}
|
|
1052
|
-
\`\`\`
|
|
1053
|
-
|
|
1054
|
-
### \u2705 \u6B63\u786E\u793A\u4F8B2: \u4F7F\u7528\u81EA\u5B9A\u4E49\u5B50\u667A\u80FD\u4F53(\u65E0\u9700\u6307\u5B9A allowedTools)
|
|
1055
|
-
\`\`\`json
|
|
1056
|
-
{
|
|
1057
|
-
"overview": "\u91CD\u6784\u9879\u76EE\u67B6\u6784",
|
|
1058
|
-
"steps": [
|
|
1059
|
-
{
|
|
1060
|
-
"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",
|
|
1061
|
-
"subAgent": "explorer"
|
|
1062
|
-
// \u2705 \u4F7F\u7528 explorer \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
1063
|
-
},
|
|
1064
|
-
{
|
|
1065
|
-
"description": "\u6839\u636E\u5206\u6790\u7ED3\u679C\uFF0C\u91CD\u6784\u4EE3\u7801\u7ED3\u6784\uFF0C\u4F18\u5316\u6A21\u5757\u5212\u5206",
|
|
1066
|
-
"subAgent": "coder"
|
|
1067
|
-
// \u2705 \u4F7F\u7528 coder \u5B50\u667A\u80FD\u4F53\uFF0C\u4E0D\u9700\u8981 allowedTools
|
|
1068
|
-
}
|
|
1069
|
-
],
|
|
1070
|
-
"expectedResult": "\u5B8C\u6210\u67B6\u6784\u91CD\u6784\u5E76\u4FDD\u6301\u529F\u80FD\u5B8C\u6574\u6027"
|
|
1071
|
-
}
|
|
1072
|
-
\`\`\`
|
|
1073
|
-
|
|
1074
|
-
\u8BF7\u4F7F\u7528 create_task_plan \u5DE5\u5177\u8FD4\u56DE\u7ED3\u6784\u5316\u7684\u4EFB\u52A1\u89C4\u5212\u3002`}function _o(r,e=[]){let t=e.length>0?`
|
|
1075
|
-
\u53EF\u7528\u7684\u5B50\u667A\u80FD\u4F53\uFF1A
|
|
1076
|
-
${e.map(n=>`- ${n.name}: ${n.description}`).join(`
|
|
1077
|
-
`)}`:"";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
|
|
1078
|
-
|
|
1079
|
-
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
1080
|
-
${r}
|
|
1081
|
-
${t}
|
|
1082
|
-
|
|
1083
|
-
\u8BF7\u6309\u7167\u4EE5\u4E0BMarkdown\u683C\u5F0F\u8F93\u51FA\u4EFB\u52A1\u89C4\u5212\uFF1A
|
|
1084
|
-
|
|
1085
|
-
# \u4EFB\u52A1\u89C4\u5212
|
|
1086
|
-
|
|
1087
|
-
## \u4EFB\u52A1\u6982\u8FF0
|
|
1088
|
-
[\u7B80\u8981\u63CF\u8FF0\u4EFB\u52A1\u76EE\u6807\uFF0C\u5305\u62EC\u8F93\u5165\u3001\u5904\u7406\u548C\u9884\u671F\u8F93\u51FA]
|
|
1089
|
-
|
|
1090
|
-
## \u6267\u884C\u6B65\u9AA4
|
|
1091
|
-
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"])
|
|
1092
|
-
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"])
|
|
1093
|
-
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"])
|
|
1094
|
-
...
|
|
1095
|
-
|
|
1096
|
-
## \u9884\u671F\u7ED3\u679C
|
|
1097
|
-
[\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]
|
|
1098
|
-
|
|
1099
|
-
## \u6CE8\u610F\u4E8B\u9879
|
|
1100
|
-
[\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]
|
|
1101
|
-
|
|
1102
|
-
\u91CD\u8981\u89C4\u5219\uFF1A
|
|
1103
|
-
- \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
|
|
1104
|
-
- \u5FC5\u987B\u5305\u542B2-4\u4E2A\u903B\u8F91\u6B65\u9AA4\uFF0C\u786E\u4FDD\u8986\u76D6\u6240\u6709\u5FC5\u8981\u5DE5\u4F5C
|
|
1105
|
-
- \u6B65\u9AA4\u4E4B\u95F4\u5FC5\u987B\u6709\u660E\u786E\u7684\u4F9D\u8D56\u5173\u7CFB\u548C\u987A\u5E8F\u903B\u8F91
|
|
1106
|
-
- \u6BCF\u4E2A\u6B65\u9AA4\u5FC5\u987B\u6807\u6CE8\u6700\u9002\u5408\u7684\u63A8\u8350\u5B50\u667A\u80FD\u4F53
|
|
1107
|
-
- \u4EFB\u52A1\u6982\u8FF0\u5E94\u8BE5\u7B80\u660E\u627C\u8981\u5730\u6982\u62EC\u6574\u4E2A\u4EFB\u52A1\u7684\u76EE\u7684\u548C\u8303\u56F4
|
|
1108
|
-
- \u9884\u671F\u7ED3\u679C\u5E94\u8BE5\u5177\u4F53\u3001\u53EF\u8861\u91CF\uFF0C\u660E\u786E\u8BF4\u660E\u5B8C\u6210\u540E\u7684\u72B6\u6001`}function No(r){return`\u8BF7\u5C06\u4EE5\u4E0B Markdown \u683C\u5F0F\u7684\u4EFB\u52A1\u89C4\u5212\u8F6C\u6362\u4E3A\u7ED3\u6784\u5316\u683C\u5F0F\u3002
|
|
1109
|
-
|
|
1110
|
-
${r}
|
|
1111
|
-
|
|
1112
|
-
\u8BF7\u4F7F\u7528 create_task_plan \u5DE5\u5177\u8FD4\u56DE\u7ED3\u6784\u5316\u7684\u4EFB\u52A1\u89C4\u5212\u6570\u636E\u3002`}function Uo(r,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
|
|
1113
|
-
|
|
1114
|
-
\u4EFB\u52A1\u63CF\u8FF0\uFF1A
|
|
1115
|
-
${r}
|
|
1116
|
-
|
|
1117
|
-
\u53EF\u7528\u667A\u80FD\u4F53\uFF1A
|
|
1118
|
-
${e}
|
|
1119
|
-
|
|
1120
|
-
\u5339\u914D\u6807\u51C6\uFF1A
|
|
1121
|
-
1. \u667A\u80FD\u4F53\u7684\u4E13\u4E1A\u9886\u57DF\u4E0E\u4EFB\u52A1\u9700\u6C42\u7684\u5339\u914D\u5EA6
|
|
1122
|
-
2. \u667A\u80FD\u4F53\u7684\u80FD\u529B\u8303\u56F4\u662F\u5426\u6DB5\u76D6\u4EFB\u52A1\u6240\u9700\u7684\u6240\u6709\u6280\u80FD
|
|
1123
|
-
3. \u667A\u80FD\u4F53\u7684\u4E13\u957F\u662F\u5426\u80FD\u591F\u89E3\u51B3\u4EFB\u52A1\u4E2D\u7684\u6838\u5FC3\u6311\u6218
|
|
1124
|
-
4. \u8003\u8651\u4EFB\u52A1\u7684\u590D\u6742\u5EA6\u548C\u667A\u80FD\u4F53\u7684\u5904\u7406\u80FD\u529B
|
|
1125
|
-
|
|
1126
|
-
\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 bt,_e=y(()=>{vt();bt=qi()});var Te={};O(Te,{TaskComplexity:()=>ur,evaluateTaskComplexity:()=>Ll,generatePlanSummary:()=>fn,generateTaskPlan:()=>dn,getTaskFilePath:()=>_l,listTaskPlans:()=>Ul,loadTaskPlan:()=>Nl,updateTaskStatus:()=>Ne});import j from"chalk";import ae from"fs";import pe from"path";async function Ll(r){let e=Oo(r);try{let t=await te({model:Se(),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(j.yellow("[\u4EFB\u52A1\u8BC4\u4F30] \u68C0\u6D4B\u5230\u590D\u6742\u4EFB\u52A1\uFF0C\u5C06\u8FDB\u884C\u4EFB\u52A1\u89C4\u5212")),ur.COMPLEX):(console.log(j.blue("[\u4EFB\u52A1\u8BC4\u4F30] \u68C0\u6D4B\u5230\u7B80\u5355\u4EFB\u52A1\uFF0C\u4F7F\u7528\u5355\u6B65\u9AA4\u6A21\u5F0F")),ur.SIMPLE)}catch(t){return console.log(j.yellow(`[\u4EFB\u52A1\u8BC4\u4F30] \u8BC4\u4F30\u5931\u8D25\uFF0C\u9ED8\u8BA4\u4E3A\u7B80\u5355\u4EFB\u52A1: ${t.message}`)),ur.SIMPLE}}function Bi(r=[]){let e=r.length>0?r.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
|
|
1153
|
+
</final_note>`,error_handling:`
|
|
1154
|
+
<error_handling_strategies>
|
|
1155
|
+
**\u9047\u5230\u9519\u8BEF\u65F6\u7684\u5904\u7406\u7B56\u7565**\uFF1A
|
|
1156
|
+
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
|
|
1157
|
+
2. **\u5206\u7C7B\u5904\u7406**\uFF1A
|
|
1158
|
+
- \u5DE5\u5177\u8C03\u7528\u9519\u8BEF\uFF1A\u68C0\u67E5\u53C2\u6570\u683C\u5F0F\u3001\u8DEF\u5F84\u6B63\u786E\u6027\u3001\u6743\u9650\u95EE\u9898
|
|
1159
|
+
- \u4EE3\u7801\u7F16\u8BD1\u9519\u8BEF\uFF1A\u68C0\u67E5\u8BED\u6CD5\u3001\u4F9D\u8D56\u5173\u7CFB\u3001\u7C7B\u578B\u5B9A\u4E49
|
|
1160
|
+
- \u547D\u4EE4\u6267\u884C\u9519\u8BEF\uFF1A\u68C0\u67E5\u547D\u4EE4\u8BED\u6CD5\u3001\u5E73\u53F0\u517C\u5BB9\u6027\u3001\u73AF\u5883\u914D\u7F6E
|
|
1161
|
+
3. **\u91CD\u8BD5\u673A\u5236**\uFF1A
|
|
1162
|
+
- \u4E34\u65F6\u7F51\u7EDC\u6216\u8D44\u6E90\u95EE\u9898\uFF1A\u53EF\u91CD\u8BD51-2\u6B21
|
|
1163
|
+
- \u660E\u786E\u7684\u9519\u8BEF\uFF1A\u4E0D\u91CD\u8BD5\uFF0C\u76F4\u63A5\u5206\u6790\u5E76\u4FEE\u590D
|
|
1164
|
+
4. **\u964D\u7EA7\u65B9\u6848**\uFF1A\u5F53\u9996\u9009\u5DE5\u5177\u6216\u65B9\u6CD5\u5931\u8D25\u65F6\uFF0C\u51C6\u5907\u66FF\u4EE3\u65B9\u6848
|
|
1165
|
+
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
|
|
1166
|
+
|
|
1167
|
+
**\u5E38\u89C1\u9519\u8BEF\u5904\u7406\u793A\u4F8B**\uFF1A
|
|
1168
|
+
- \u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E\uFF0C\u6587\u4EF6\u662F\u5426\u5B58\u5728
|
|
1169
|
+
- \u547D\u4EE4\u6267\u884C\u5931\u8D25\uFF1A\u68C0\u67E5\u547D\u4EE4\u8BED\u6CD5\uFF0C\u662F\u5426\u9002\u5408\u5F53\u524D\u5E73\u53F0
|
|
1170
|
+
- \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
|
|
1171
|
+
</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 Ve={};O(Ve,{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 N(`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?N("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
|
|
1127
1172
|
\u5E38\u7528\u5DE5\u5177\u7EC4\u5408\uFF1A
|
|
1128
1173
|
- \u53EA\u8BFB\u5206\u6790: ["read", "glob", "grep", "quickProjectScan", "think", "askUser"]
|
|
1129
1174
|
- \u4EE3\u7801\u63A2\u7D22: ["read", "glob", "grep", "quickProjectScan", "shell", "think"]
|
|
@@ -1131,53 +1176,51 @@ ${e}
|
|
|
1131
1176
|
- \u6D4B\u8BD5\u9A8C\u8BC1: ["read", "shell", "glob", "grep", "think"]
|
|
1132
1177
|
|
|
1133
1178
|
\u5982\u679C\u4E3A\u7A7A\u6570\u7EC4\u6216\u4E0D\u6307\u5B9A\uFF0C\u5219\u4F7F\u7528\u6240\u6709\u53EF\u7528\u5DE5\u5177\u3002
|
|
1134
|
-
\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
|
|
1179
|
+
\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=[]){N("\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 N("\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}
|
|
1135
1180
|
- \u63A8\u8350\u5B50\u667A\u80FD\u4F53: ${t.subAgent}`).join(`
|
|
1136
1181
|
|
|
1137
1182
|
`);return`# \u4EFB\u52A1\u89C4\u5212
|
|
1138
1183
|
|
|
1139
1184
|
## \u4EFB\u52A1\u6982\u8FF0
|
|
1140
|
-
${
|
|
1185
|
+
${o.overview}
|
|
1141
1186
|
|
|
1142
1187
|
## \u6267\u884C\u6B65\u9AA4
|
|
1143
1188
|
${e}
|
|
1144
1189
|
|
|
1145
1190
|
## \u9884\u671F\u7ED3\u679C
|
|
1146
|
-
${
|
|
1191
|
+
${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",j("Function Calling \u65B9\u6848\u6210\u529F","Task")}catch(c){N(`Function Calling \u5931\u8D25: ${c.message}`,"Task");try{t=await hg(o,e),n="Markdown + Conversion",j("Markdown \u8F6C\u6362\u65B9\u6848\u6210\u529F","Task")}catch(l){N(`Markdown \u8F6C\u6362\u5931\u8D25: ${l.message}`,"Task"),t=yg(o),n="Default Fallback",N("\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),j(`\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})
|
|
1147
1192
|
|
|
1148
1193
|
## \u4EFB\u52A1\u6982\u8FF0
|
|
1149
|
-
${
|
|
1194
|
+
${o.substring(o.indexOf("## \u4EFB\u52A1\u6982\u8FF0")+7)}
|
|
1150
1195
|
|
|
1151
1196
|
## \u66F4\u65B0\u65F6\u95F4
|
|
1152
|
-
${new Date().toLocaleString()}`,s=
|
|
1153
|
-
`),a=!1,c=1,l=[];for(let
|
|
1154
|
-
`),"utf8"),
|
|
1155
|
-
\
|
|
1156
|
-
`);e
|
|
1157
|
-
|
|
1158
|
-
`}
|
|
1159
|
-
`)
|
|
1160
|
-
`)
|
|
1161
|
-
`)
|
|
1162
|
-
`)
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
*...\u8FD8\u6709 ${
|
|
1166
|
-
*...\u8FD8\u6709 ${
|
|
1167
|
-
|
|
1168
|
-
*...\u8FD8\u6709 ${e.codeStandards.length-5} \u4E2A\u89C4\u8303*`),r.push("")}var gr=y(()=>{});import*as Tt from"os";var ke,$e,Pe,Ee,Yi=y(()=>{K();gr();ke=class{originalTask;plan;stepSummaries;sharedState;stepDependencies;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}initializeTask(e,t){this.originalTask=e,this.plan={tasks:t.tasks||[],currentStep:0,totalSteps:t.tasks?.length||0},k(`\u5168\u5C40\u4E0A\u4E0B\u6587\u521D\u59CB\u5316: ${this.plan.totalSteps} \u4E2A\u6B65\u9AA4`)}recordStepCompletion(e,t,n={}){this.stepSummaries.set(e,{summary:t,metadata:n,timestamp:new Date().toISOString()}),h(`\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,h(`\u5171\u4EAB\u72B6\u6001\u66F4\u65B0: ${e}`)):h(`\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}},$e=class{globalContext;constructor(e){this.globalContext=e}async selectRelevantHistory(e,t){let n=[],o=this.globalContext.getStepDependencies().get(e)||[];for(let i of o){let a=this.globalContext.getStepSummary(i);a&&n.push({stepId:i,type:"dependency",content:a.summary,metadata:a.metadata})}let s=this.getRecentCompletedSteps(3);for(let i of s)if(!o.includes(i)){let a=this.globalContext.getStepSummary(i);a&&this.isLikelyRelevant(a.summary,t)&&n.push({stepId:i,type:"recent",content:a.summary,metadata:a.metadata})}return h(`\u4E3A\u6B65\u9AA4 ${e} \u9009\u62E9\u4E86 ${n.length} \u6761\u76F8\u5173\u5386\u53F2`),n}getRecentCompletedSteps(e){return Array.from(this.globalContext.getStepDependencies().keys()).slice(-e)}isLikelyRelevant(e,t){let n=a=>a.toLowerCase().split(/\s+/).filter(c=>c.length>3).slice(0,10),o=new Set(n(e));return n(t).filter(a=>o.has(a)).length>=2}async selectRelevantHistoryWithLLM(e,t){let{MODEL:n}=await Promise.resolve().then(()=>(re(),ot)),{callModelAPI:o}=await Promise.resolve().then(()=>(de(),kt)),s=Array.from(this.globalContext.getStepDependencies().entries()).map(([a,c])=>{let l=this.globalContext.getStepSummary(a);return l?`\u6B65\u9AA4${a}: ${l.summary}`:""}).filter(Boolean).join(`
|
|
1169
|
-
`);if(!s)return[];let i=`\u4EFB\u52A1: ${this.globalContext.getOriginalTask()||""}
|
|
1197
|
+
${new Date().toLocaleString()}`,s=Pe.join(n,`${e}.md`);if(Se.writeFileSync(s,r,"utf8"),j(`\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"),j(`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(`
|
|
1198
|
+
`),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(`
|
|
1199
|
+
`),"utf8"),j(`\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 j(`\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(`
|
|
1200
|
+
\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(`
|
|
1201
|
+
`)}var xe,$e=y(()=>{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
|
|
1202
|
+
`),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(`
|
|
1203
|
+
`)}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(`
|
|
1204
|
+
`)}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(`
|
|
1205
|
+
`);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(`
|
|
1206
|
+
`):(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(`
|
|
1207
|
+
`):"\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(`
|
|
1208
|
+
*...\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(`
|
|
1209
|
+
*...\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(`
|
|
1210
|
+
*...\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(`
|
|
1211
|
+
*...\u8FD8\u6709 ${e.codeStandards.length-5} \u4E2A\u89C4\u8303*`),o.push("")}var ro=y(()=>{});import*as Jt from"os";var We,ze,He,Je,vc=y(()=>{K();ro();We=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},$(`\u5168\u5C40\u4E0A\u4E0B\u6587\u521D\u59CB\u5316: ${this.plan.totalSteps} \u4E2A\u6B65\u9AA4`)}recordStepCompletion(e,t,n={}){this.stepSummaries.set(e,{summary:t,metadata:n,timestamp:new Date().toISOString()}),C(`\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,C(`\u5171\u4EAB\u72B6\u6001\u66F4\u65B0: ${e}`)):C(`\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},$("\u5DF2\u8BB0\u5F55\u9879\u76EE\u63A2\u7D22\u7ED3\u679C\u5230\u5168\u5C40\u4E0A\u4E0B\u6587")}getExplorationHistory(){return this.explorationHistory}},ze=class{globalContext;constructor(e){this.globalContext=e}async selectRelevantHistory(e,t,n){let r=[],s=this.globalContext.getStepDependencies().get(e)||[];for(let c of s){let l=this.globalContext.getStepSummary(c);l&&r.push({stepId:c,type:"dependency",content:l.summary,metadata:l.metadata})}let i=this.getRecentCompletedSteps(3);for(let c of i)if(!s.includes(c)){let l=this.globalContext.getStepSummary(c);l&&this.isLikelyRelevant(l.summary,t)&&r.push({stepId:c,type:"recent",content:l.summary,metadata:l.metadata})}if(n==="explorer")C("\u8DF3\u8FC7\u63A2\u7D22\u5386\u53F2\u6CE8\u5165 (\u5F53\u524D\u4E3A explorer \u667A\u80FD\u4F53)");else{let c=this.globalContext.getExplorationHistory();c&&(r.push({stepId:0,type:"exploration",content:c.content,metadata:{timestamp:c.timestamp,summary:c.summary}}),C(`\u5DF2\u6DFB\u52A0\u63A2\u7D22\u5386\u53F2\u5230\u4E0A\u4E0B\u6587 (\u667A\u80FD\u4F53: ${n||"unknown"})`))}return C(`\u4E3A\u6B65\u9AA4 ${e} \u9009\u62E9\u4E86 ${r.length} \u6761\u76F8\u5173\u5386\u53F2`),r}getRecentCompletedSteps(e){return Array.from(this.globalContext.getStepDependencies().keys()).slice(-e)}isLikelyRelevant(e,t){let n=a=>a.toLowerCase().split(/\s+/).filter(c=>c.length>3).slice(0,10),r=new Set(n(e));return n(t).filter(a=>r.has(a)).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(`
|
|
1212
|
+
`);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()||""}
|
|
1170
1213
|
|
|
1171
1214
|
\u5DF2\u5B8C\u6210\u7684\u5386\u53F2\u6B65\u9AA4\u6458\u8981:
|
|
1172
|
-
${
|
|
1215
|
+
${i}
|
|
1173
1216
|
|
|
1174
1217
|
\u5F53\u524D\u6B65\u9AA4: ${t}
|
|
1175
1218
|
|
|
1176
1219
|
\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
|
|
1177
1220
|
\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
|
|
1178
|
-
\u53EA\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981\u5176\u4ED6\u89E3\u91CA\u3002`;try{let
|
|
1221
|
+
\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")C("\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}}),C(`\u5DF2\u6DFB\u52A0\u63A2\u7D22\u5386\u53F2\u5230\u4E0A\u4E0B\u6587 (LLM\u6A21\u5F0F, \u667A\u80FD\u4F53: ${n||"unknown"})`))}return $(`LLM \u4E3A\u6B65\u9AA4 ${e} \u9009\u62E9\u4E86 ${p.length} \u6761\u76F8\u5173\u5386\u53F2`),p}catch(c){return C(`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;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
|
|
1179
1222
|
|
|
1180
|
-
${
|
|
1223
|
+
${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
|
|
1181
1224
|
|
|
1182
1225
|
===============================
|
|
1183
1226
|
===== \u9879\u76EE\u89C4\u5219\u4E0E\u7EA6\u5B9A =====
|
|
@@ -1186,20 +1229,20 @@ ${a}`}),i.push({role:"user",content:`\u539F\u59CB\u4EFB\u52A1: ${this.globalCont
|
|
|
1186
1229
|
${this.globalContext.getSharedState().rules}
|
|
1187
1230
|
|
|
1188
1231
|
===============================
|
|
1189
|
-
\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
|
|
1232
|
+
\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(`
|
|
1190
1233
|
|
|
1191
|
-
`);
|
|
1192
|
-
${
|
|
1193
|
-
${t}`}),s&&s.length>0&&
|
|
1234
|
+
`);a.push({role:"user",content:`\u76F8\u5173\u5386\u53F2\u4FE1\u606F:
|
|
1235
|
+
${u}`})}return a.push({role:"user",content:`\u5F53\u524D\u4EFB\u52A1 (\u6B65\u9AA4 ${e}/${this.globalContext.getPlan().totalSteps}):
|
|
1236
|
+
${t}`}),s&&s.length>0&&a.push({role:"system",content:`\u26A0\uFE0F \u672C\u6B65\u9AA4\u5DE5\u5177\u4F7F\u7528\u9650\u5236:
|
|
1194
1237
|
\u4F60\u53EA\u80FD\u4F7F\u7528\u4EE5\u4E0B\u5DE5\u5177: ${s.join(", ")}
|
|
1195
1238
|
|
|
1196
1239
|
\u5982\u679C\u4F60\u5C1D\u8BD5\u4F7F\u7528\u672A\u6388\u6743\u7684\u5DE5\u5177\uFF0C\u8C03\u7528\u4F1A\u88AB\u62D2\u7EDD\u3002
|
|
1197
|
-
\u8BF7\u4E25\u683C\u9075\u5B88\u5DE5\u5177\u4F7F\u7528\u8303\u56F4\uFF0C\u4E13\u6CE8\u4E8E\u5F53\u524D\u6B65\u9AA4\u7684\u76EE\u6807\u3002`}),this.globalContext.getSharedState().recentFiles.length>0&&
|
|
1240
|
+
\u8BF7\u4E25\u683C\u9075\u5B88\u5DE5\u5177\u4F7F\u7528\u8303\u56F4\uFF0C\u4E13\u6CE8\u4E8E\u5F53\u524D\u6B65\u9AA4\u7684\u76EE\u6807\u3002`}),this.globalContext.getSharedState().recentFiles.length>0&&a.push({role:"system",content:`\u6700\u8FD1\u8BBF\u95EE\u7684\u6587\u4EF6: ${this.globalContext.getSharedState().recentFiles.slice(0,5).join(", ")}`}),t.match(/实现|创建|编写|设计|开发|生成/)&&a.push({role:"system",content:`\u26A0\uFE0F CRITICAL REMINDER FOR CODE TASKS:
|
|
1198
1241
|
- You MUST use Action: write(path, content) to save any code you generate
|
|
1199
1242
|
- You MUST use Action: merge(path, content) to modify existing files
|
|
1200
1243
|
- NEVER just output code without saving it using Action:
|
|
1201
1244
|
- Follow the exact format: "Thought: ..." then "Action: tool_name(args)"
|
|
1202
|
-
- When task is done, use "Answer: ..." to finish`})
|
|
1245
|
+
- When task is done, use "Answer: ..." to finish`}),$(`\u4E3A\u6B65\u9AA4 ${e} \u6784\u5EFA\u4E86\u9694\u79BB\u4E0A\u4E0B\u6587\uFF0C\u5305\u542B ${a.length} \u6761\u6D88\u606F`),s&&$(`\u5DE5\u5177\u9650\u5236: ${s.join(", ")}`),C(`\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}),$("\u6784\u5EFA\u4E86\u7B80\u5316\u4E0A\u4E0B\u6587\uFF08\u7B80\u5355\u4EFB\u52A1\u6A21\u5F0F\uFF09"),n}async buildProjectEnvironmentContext(){try{let e=Jt.platform(),t=Jt.arch(),n=Jt.version(),r=process.cwd(),s=`\u{1F30D} **\u667A\u80FD\u73AF\u5883\u611F\u77E5\u7CFB\u7EDF**
|
|
1203
1246
|
|
|
1204
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**
|
|
1205
1248
|
|
|
@@ -1207,7 +1250,7 @@ ${t}`}),s&&s.length>0&&i.push({role:"system",content:`\u26A0\uFE0F \u672C\u6B65\
|
|
|
1207
1250
|
- **\u64CD\u4F5C\u7CFB\u7EDF\u5E73\u53F0:** ${e} ${e==="win32"?"(Windows)":e==="darwin"?"(macOS)":"(Linux)"}
|
|
1208
1251
|
- **\u64CD\u4F5C\u7CFB\u7EDF\u7248\u672C:** ${n}
|
|
1209
1252
|
- **\u7CFB\u7EDF\u67B6\u6784:** ${t}
|
|
1210
|
-
- **\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55:** ${
|
|
1253
|
+
- **\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55:** ${r}
|
|
1211
1254
|
- **\u9ED8\u8BA4Shell:** ${e==="win32"?"cmd.exe (Windows\u547D\u4EE4\u63D0\u793A\u7B26)":e==="darwin"?"zsh (macOS\u7EC8\u7AEF)":"bash (Linux\u7EC8\u7AEF)"}
|
|
1212
1255
|
|
|
1213
1256
|
### \u{1F3AF} \u5E73\u53F0\u7279\u5B9A\u6307\u5BFC\u539F\u5219
|
|
@@ -1254,31 +1297,31 @@ ${e==="win32"?`
|
|
|
1254
1297
|
- \u5728\u6267\u884Cshell\u547D\u4EE4\u524D\uFF0C\u52A1\u5FC5\u8003\u8651\u5F53\u524D\u5E73\u53F0\u7279\u6027
|
|
1255
1298
|
- \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"}
|
|
1256
1299
|
- \u63D0\u4F9B\u547D\u4EE4\u5EFA\u8BAE\u65F6\uFF0C\u4F18\u5148\u63A8\u8350${e==="win32"?"Windows\u539F\u751F":"Unix\u539F\u751F"}\u65B9\u6848
|
|
1257
|
-
- \u9047\u5230\u8DE8\u5E73\u53F0\u517C\u5BB9\u6027\u95EE\u9898\u65F6\uFF0C\u4E3B\u52A8\u63D0\u51FA\u89E3\u51B3\u65B9\u6848`;try{let i=await import("fs"),c=(await import("path")).join(
|
|
1300
|
+
- \u9047\u5230\u8DE8\u5E73\u53F0\u517C\u5BB9\u6027\u95EE\u9898\u65F6\uFF0C\u4E3B\u52A8\u63D0\u51FA\u89E3\u51B3\u65B9\u6848`;try{let i=await import("fs"),c=(await import("path")).join(r,".nium/project/project.json");if(i.existsSync(c)){let l=i.readFileSync(c,"utf-8");try{let u=JSON.parse(l),p=this.extractProjectSummaryFromJSON(u);s+=`
|
|
1258
1301
|
**\u9879\u76EE\u7ED3\u6784\u6458\u8981:**
|
|
1259
|
-
${
|
|
1302
|
+
${p}
|
|
1260
1303
|
|
|
1261
|
-
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}catch(
|
|
1304
|
+
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}catch(u){C(`\u89E3\u6790project.json\u5931\u8D25\uFF0C\u4F7F\u7528\u6587\u672C\u6458\u8981: ${u}`);let p=this.extractProjectSummary(l);s+=`
|
|
1262
1305
|
**\u9879\u76EE\u7ED3\u6784\u6458\u8981:**
|
|
1263
|
-
${
|
|
1306
|
+
${p}
|
|
1264
1307
|
|
|
1265
|
-
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}}}catch(i){
|
|
1266
|
-
`),n=[],
|
|
1267
|
-
`)}},
|
|
1268
|
-
`);if(
|
|
1308
|
+
**\u5B8C\u6574\u7ED3\u6784\u6587\u6863:** \u5982\u9700\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u8BF7\u4F7F\u7528 read('.nium/project/project.json')`}}}catch(i){C(`\u83B7\u53D6\u9879\u76EE\u7ED3\u6784\u4FE1\u606F\u5931\u8D25: ${i}`)}return s}catch(e){return C(`\u6784\u5EFA\u9879\u76EE\u73AF\u5883\u4E0A\u4E0B\u6587\u5931\u8D25: ${e}`),null}}extractProjectSummaryFromJSON(e){return tr(e,{format:"summary",maxSections:3})}extractProjectSummary(e){let t=e.split(`
|
|
1309
|
+
`),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(`
|
|
1310
|
+
`)}},Je=class{async extractSummary(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(", ")})`)),C(`\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(`
|
|
1311
|
+
`);if(r.length<100)return this.extractSummary(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 $(`LLM \u751F\u6210\u6458\u8981: ${i.substring(0,50)}...`),i}catch(s){return C(`LLM \u6458\u8981\u5931\u8D25\uFF0C\u964D\u7EA7\u5230\u542F\u53D1\u5F0F\u65B9\u6CD5: ${s instanceof Error?s.message:String(s)}`),this.extractSummary(e)}}extractMetadata(e){let t={toolsUsed:[],filesAccessed:[],errors:[],iterations:0};for(let n of e)if(n.role==="assistant"){if(t.iterations++,n.tool_calls&&n.tool_calls.length>0)for(let r of n.tool_calls){let s=r.function.name;if(s!=="think"&&(t.toolsUsed.push(s),["read","write","merge"].includes(s)))try{let i=JSON.parse(r.function.arguments),a=i.path||i.newContent;a&&t.filesAccessed.push(a)}catch{}}}else n.role==="tool"&&n.content&&n.content.includes("Error:")&&t.errors.push(n.content.substring(0,100));return t}}});var nr,Os=y(()=>{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}):
|
|
1269
1312
|
|
|
1270
1313
|
\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
|
|
1271
1314
|
|
|
1272
|
-
\u539F\u59CB\u4EFB\u52A1: ${
|
|
1315
|
+
\u539F\u59CB\u4EFB\u52A1: ${r.originalQuestion}
|
|
1273
1316
|
|
|
1274
1317
|
\u{1F3AF} \u5173\u952E\u7EA6\u675F (\u5FC5\u987B\u9075\u5B88):
|
|
1275
|
-
${
|
|
1318
|
+
${r.keyConstraints.map(i=>` \u2022 ${i}`).join(`
|
|
1276
1319
|
`)}
|
|
1277
1320
|
|
|
1278
1321
|
\u2705 \u6210\u529F\u6807\u51C6 (\u5FC5\u987B\u8FBE\u6210):
|
|
1279
|
-
${
|
|
1280
|
-
`)}
|
|
1281
|
-
|
|
1322
|
+
${r.successCriteria.map(i=>` \u2022 ${i}`).join(`
|
|
1323
|
+
`)}`;return t&&(s+=`
|
|
1324
|
+
|
|
1282
1325
|
\u{1F504} \u5F53\u524D\u504F\u79BB\u63D0\u9192: ${t}`),s+=`
|
|
1283
1326
|
|
|
1284
1327
|
\u{1F4A1} \u884C\u52A8\u6307\u5BFC:
|
|
@@ -1288,7 +1331,7 @@ ${o.successCriteria.map(i=>` \u2022 ${i}`).join(`
|
|
|
1288
1331
|
4. \u786E\u4FDD\u6BCF\u4E00\u6B65\u90FD\u671D\u7740\u6700\u7EC8\u76EE\u6807\u524D\u8FDB
|
|
1289
1332
|
5. \u6700\u7EC8\u7B54\u6848\u5FC5\u987B\u76F4\u63A5\u56DE\u5E94\u539F\u59CB\u95EE\u9898\u7684\u8981\u6C42
|
|
1290
1333
|
|
|
1291
|
-
\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,
|
|
1334
|
+
\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=y(()=>{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
|
|
1292
1335
|
|
|
1293
1336
|
\u539F\u59CB\u6587\u672C: "${e}"
|
|
1294
1337
|
|
|
@@ -1300,7 +1343,7 @@ ${o.successCriteria.map(i=>` \u2022 ${i}`).join(`
|
|
|
1300
1343
|
3. keyTopics: \u4E24\u4E2A\u6587\u672C\u7684\u5173\u952E\u4E3B\u9898\u5217\u8868
|
|
1301
1344
|
4. deviationFactors: \u5BFC\u81F4\u504F\u79BB\u7684\u56E0\u7D20\u5217\u8868
|
|
1302
1345
|
|
|
1303
|
-
\u53EA\u8FD4\u56DEJSON\uFF0C\u4E0D\u8981\u5176\u4ED6\u89E3\u91CA\u3002`;try{let i=(await this.modelClient({model:
|
|
1346
|
+
\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
|
|
1304
1347
|
|
|
1305
1348
|
\u68C0\u6D4B\u5230${t==="severe"?"\u4E25\u91CD":"\u8F7B\u5FAE"}\u504F\u79BB\u539F\u59CB\u95EE\u9898\u3002
|
|
1306
1349
|
|
|
@@ -1310,19 +1353,47 @@ ${o.successCriteria.map(i=>` \u2022 ${i}`).join(`
|
|
|
1310
1353
|
${n.map(s=>`\u2022 ${s}`).join(`
|
|
1311
1354
|
`)}
|
|
1312
1355
|
|
|
1313
|
-
\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"&&(
|
|
1356
|
+
\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+=`
|
|
1357
|
+
|
|
1358
|
+
\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=y(()=>{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=y(()=>{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={};O(kc,{getGitDiff:()=>sr,getGitStatus:()=>or,gitAddAll:()=>Vs,gitCommit:()=>Ws,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"}),C("Git is available"),!0):(C("Git not available: .git directory not found"),!1)}catch(o){return C(`Git not available: ${o.message}`),!1}}function or(){try{return ct("git status",{encoding:"utf-8"})}catch(o){return H(`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 ===
|
|
1359
|
+
`+o+`
|
|
1360
|
+
`),e&&(t+=`=== Unstaged Changes ===
|
|
1361
|
+
`+e),t||"No changes detected"}catch(o){return H(`Failed to get git diff: ${o.message}`),""}}function Vs(){try{ct("git add .",{stdio:"inherit"})}catch(o){throw new Error(`Failed to stage changes: ${o.message}`)}}function Ws(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){H(`Failed to cleanup temporary file: ${t.message}`)}}}function ir(){try{return ct("git status --porcelain",{encoding:"utf-8"}).trim().length>0}catch(o){return H(`Failed to check for uncommitted changes: ${o.message}`),!1}}var so=y(()=>{K()});var Hs={};O(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=y(()=>{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(`
|
|
1362
|
+
`))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
|
|
1363
|
+
|
|
1364
|
+
`;return r+=`\u{1F4C1} \u603B\u6587\u4EF6\u6570: ${n.totalFiles}
|
|
1365
|
+
`,r+=`\u2795 \u65B0\u589E\u6587\u4EF6: ${n.addedFiles}
|
|
1366
|
+
`,r+=`\u270F\uFE0F \u4FEE\u6539\u6587\u4EF6: ${n.modifiedFiles}
|
|
1367
|
+
`,r+=`\u{1F5D1}\uFE0F \u5220\u9664\u6587\u4EF6: ${n.deletedFiles}
|
|
1368
|
+
`,r+=`\u{1F504} \u91CD\u547D\u540D\u6587\u4EF6: ${n.renamedFiles}
|
|
1369
|
+
`,r+=`\u{1F4E6} \u603B\u5927\u5C0F: ${(n.totalSize/1024).toFixed(2)} KB
|
|
1370
|
+
`,r+=`
|
|
1371
|
+
\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=y(()=>{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
|
|
1372
|
+
|
|
1373
|
+
`,n=this.config.promptIntegration.maxSummaryLength-t.length,s=this.fileChangeTracker.generateChangeSummaryText("text").split(`
|
|
1374
|
+
`),i="";for(let a of s)if(i.length+a.length<n)i+=a+`
|
|
1375
|
+
`;else break;if(t+=i+`
|
|
1376
|
+
`,n=this.config.promptIntegration.maxSummaryLength-t.length,this.config.promptIntegration.includeFileList&&n>50){t+=`\u{1F4CB} \u53D8\u66F4\u6587\u4EF6\u5217\u8868\uFF1A
|
|
1377
|
+
`;let a=e.changes.map(c=>` - ${c.changeType==="added"?"\u2795":c.changeType==="modified"?"\u270F\uFE0F":c.changeType==="deleted"?"\u{1F5D1}\uFE0F":"\u{1F504}"} ${c.filePath}`);for(let c of a)if(t.length+c.length<this.config.promptIntegration.maxSummaryLength)t+=c+`
|
|
1378
|
+
`;else{t+=` ...\uFF08\u66F4\u591A\u6587\u4EF6\u53D8\u66F4\u8BF7\u4F7F\u7528\u5DE5\u5177\u67E5\u8BE2\uFF09
|
|
1379
|
+
`;break}t+=`
|
|
1380
|
+
`}return this.config.promptIntegration.includeChangeDetails&&n>100&&(t+=`\u{1F4DD} \u53D8\u66F4\u8BE6\u60C5\u9884\u89C8\uFF1A
|
|
1381
|
+
`),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
|
|
1382
|
+
`,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={};O(Js,{AnchorInjector:()=>ut,createAnchorInjector:()=>$c});function $c(o,e){return new ut(o,e)}var ut,cr=y(()=>{Os();js();Us();K();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
|
|
1383
|
+
${Array.from(g.entries()).map(([w,x])=>`${w}: ${x}`).join(`
|
|
1384
|
+
`)}
|
|
1314
1385
|
|
|
1315
|
-
\
|
|
1316
|
-
`),
|
|
1317
|
-
`),u=await this.anchorManager.calculateSemanticSimilarity(p);if(await this.anchorManager.shouldInjectAnchor(n,u,p)){let g=await this.anchorManager.createAnchorMessage(n,u,void 0,void 0,p);h(`\u{1F3AF} \u6CE8\u5165\u4E0A\u4E0B\u6587\u951A\u70B9\uFF08\u8FED\u4EE3 ${n}\uFF0C\u76F8\u4F3C\u5EA6: ${u.toFixed(2)}\uFF0C\u4F18\u5148\u7EA7: ${g.metadata?.priority}}`),l.push(g)}}catch(p){G(`\u951A\u70B9\u6CE8\u5165\u5931\u8D25: ${p.message}`)}return{messages:l,lastSemanticCheckIteration:c}}}});var Bo=y(()=>{Yi();Vo();Ho();Cn()});var Zi={};O(Zi,{GradleBuildParser:()=>xn,JavaDependencyAnalyzer:()=>hr,MavenPomParser:()=>fr,analyzeJavaProject:()=>Yo});import{readFileSync as mr,existsSync as dr}from"fs";import{resolve as Ko}from"path";import{parseString as Zl}from"xml2js";async function Yo(r=process.cwd()){let e=Ko(r,"pom.xml"),t=Ko(r,"build.gradle"),n=Ko(r,"build.gradle.kts"),o=null;try{if(dr(e)){let i=mr(e,"utf-8");o=await new fr(i,e).parse()}else if(dr(t)){let i=mr(t,"utf-8");o=new xn(i,t).parse()}else if(dr(n)){let i=mr(n,"utf-8");o=new xn(i,n).parse()}if(!o)return null;let s={project:o,conflicts:[],outdated:[],unused:[],recommendations:[]};return s.recommendations=hr.generateRecommendations(s),s}catch(s){return console.error("Error analyzing Java project:",s),null}}var fr,xn,hr,Xo=y(()=>{fr=class{content;filePath;constructor(e,t){this.content=e,this.filePath=t}async parse(){try{return new Promise((e,t)=>{Zl(this.content,{explicitArray:!1},(n,o)=>{if(n){t(n);return}try{let{project:s}=o;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(o=>({groupId:o.groupId,artifactId:o.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):[]}},xn=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(dr(e))try{let n=mr(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(o=>{let s;for(;(s=o.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,o;for(;(o=n.exec(this.content))!==null;)t[o[1]]=o[2];return t}},hr=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 o=[];return t.forEach((s,i)=>{if(s.size>1){let[a,c]=i.split(":"),l=Array.from(s);o.push({groupId:a,artifactId:c,versions:l,locations:n.get(i)||[],severity:this.calculateConflictSeverity(l)})}}),o}static calculateConflictSeverity(e){let t=e.map(o=>o.split(".")[0]).filter(o=>/^\d+$/.test(o));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(o=>o.groupId==="org.springframework.boot")&&t.push("\u9879\u76EE\u4F7F\u7528Spring Boot\uFF0C\u5EFA\u8BAE\u4F7F\u7528Spring Dependency Management\u63D2\u4EF6"),t}}});import{existsSync as ea,readFileSync as eu}from"fs";import{resolve as ta,dirname as tu}from"path";function ra(r=process.cwd()){let e={name:"unknown",version:"0.0.0",description:"",languages:["Unknown"],primaryLanguage:"Unknown",configFiles:[]},t=new Set,n=[],o="Unknown",s,i=null;for(let[a,c]of Object.entries(na))for(let l of c.files){if(l.includes("*"))continue;let p=ta(r,l);if(ea(p)&&(t.add(c.language),n.push(l),o==="Unknown")){o=c.language,s=a;try{let u=eu(p,"utf-8"),g=c.parser(u,p);g instanceof Promise?console.warn(`Async parser not supported in sync readProjectConfig: ${a}`):i=g}catch(u){console.warn(`Error parsing ${l}: ${u instanceof Error?u.message:"Unknown error"}`)}}}return t.size===0?e:{...e,...i||{},languages:Array.from(t),primaryLanguage:o,buildTool:s,configFiles:n}}function nu(r,e){try{let t=JSON.parse(r);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 ru(r,e){try{let t=r.match(/name\s*=\s*['"]([^'"]+)['"]/),n=r.match(/version\s*=\s*['"]([^'"]+)['"]/),o=r.match(/description\s*=\s*['"]([^'"]+)['"]/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:o?o[1]:""}}catch{return null}}function ou(r,e){try{let t=r.match(/name\s*=\s*"([^"]+)"/),n=r.match(/version\s*=\s*"([^"]+)"/),o=r.match(/description\s*=\s*"([^"]+)"/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:o?o[1]:""}}catch{return null}}function su(r,e){try{return{name:e.split(/[/\\]/).slice(-2,-1)[0]||"unknown",version:"0.0.0",description:""}}catch{return null}}function iu(r,e){try{let t=r.match(/module\s+([^\s]+)/),n=r.match(/go\s+([^\s]+)/),o={},s=/require\s+([^\s]+)\s+([^\s]+)/g,i;for(;(i=s.exec(r))!==null;)o[i[1]]=i[2];return{name:t&&t[1].split("/").pop()||"unknown",version:n?n[1]:"0.0.0",description:"",dependencies:o}}catch{return null}}function au(r,e){try{let t=r.match(/name\s*=\s*"([^"]+)"/),n=r.match(/version\s*=\s*"([^"]+)"/),o=r.match(/description\s*=\s*"([^"]+)"/);return{name:t?t[1]:"unknown",version:n?n[1]:"0.0.0",description:o?o[1]:""}}catch{return null}}function cu(r,e){try{return{name:e.split(/[/\\]/).slice(-2,-1)[0]||"unknown",version:"0.0.0",description:""}}catch{return null}}function lu(r,e){try{let t=JSON.parse(r);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 uu(r,e){try{let n=(e.split(/[/\\]/).pop()||"unknown").replace(/\.(cs|vb|fs)proj$/,""),o=r.match(/<Version>(.*?)<\/Version>/),s=r.match(/<Description>(.*?)<\/Description>/);return{name:n,version:o?o[1]:"0.0.0",description:s?s[1]:""}}catch{return null}}function oa(r){let e=r.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 gu(r,e){try{let t=await Yo(tu(e));if(!t)return null;let n=t.project,o={};n.dependencies.forEach(i=>{o[`${i.groupId}:${i.artifactId}`]=i.version});let s=oa(n.dependencies);return{name:n.name,version:n.version,description:n.description||"",dependencies:o,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 pu(r,e){try{let t=await Promise.resolve().then(()=>(Xo(),Zi)),o=new t.GradleBuildParser(r,e).parse();if(!o)return null;let s={};o.dependencies.forEach(a=>{s[`${a.groupId}:${a.artifactId}`]=a.version});let i=oa(o.dependencies);return{name:o.name,version:o.version,description:o.description||"",dependencies:s,languageExtensionInfo:{javaDetails:o,framework:i,javaVersion:o.javaVersion,buildToolVersion:o.buildToolVersion||"Gradle"},configFiles:[e.split("/").pop()||"build.gradle"]}}catch(t){return console.error("Error parsing Gradle build file with enhanced parser:",t),null}}function sa(r=process.cwd()){let e=[];for(let[t,n]of Object.entries(na))for(let o of n.files){if(o.includes("*"))continue;let s=ta(r,o);if(ea(s)){e.push(t);break}}return e}var na,ia=y(()=>{Xo();na={nodejs:{files:["package.json"],language:"JavaScript/TypeScript",parser:nu},"java-maven":{files:["pom.xml"],language:"Java",parser:gu},"java-gradle":{files:["build.gradle","build.gradle.kts"],language:"Java",parser:async(r,e)=>await pu(r,e)},"python-pip":{files:["setup.py","setup.cfg"],language:"Python",parser:ru},"python-poetry":{files:["pyproject.toml"],language:"Python",parser:ou},"python-pipenv":{files:["Pipfile"],language:"Python",parser:su},go:{files:["go.mod"],language:"Go",parser:iu},rust:{files:["Cargo.toml"],language:"Rust",parser:au},ruby:{files:["Gemfile"],language:"Ruby",parser:cu},php:{files:["composer.json"],language:"PHP",parser:lu},dotnet:{files:["*.csproj","*.vbproj","*.fsproj"],language:"C#/.NET",parser:uu}}});import{writeFileSync as mu,existsSync as du,mkdirSync as fu}from"fs";import{resolve as aa}from"path";function ca(r,e=process.cwd()){let t=aa(e,".nium","project");du(t)||fu(t,{recursive:!0});let o=aa(t,"project.json"),s=JSON.stringify(r,null,2);mu(o,s,"utf-8"),console.log(`\u2705 \u9879\u76EE\u4FE1\u606F\u5DF2\u4FDD\u5B58\u81F3: ${o}`)}function la(r){let e=r.reduce((t,n)=>t+n.count,0);return r.map(t=>({...t,percentage:e>0?(t.count/e*100).toFixed(1)+"%":"0%"}))}var ua=y(()=>{gr()});import{createHash as hu}from"crypto";import{readFileSync as ga,writeFileSync as yu,existsSync as Su,statSync as Cu}from"fs";import{resolve as xu}from"path";function wu(r){try{let e=ga(r),t=hu("md5");return t.update(e),t.digest("hex")}catch(e){return console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u8BA1\u7B97\u6587\u4EF6 MD5: ${r}`,e),""}}function bu(r,e=process.cwd()){try{let t=xu(e,r),n=Cu(t),o=wu(t);return{path:r,size:n.size,md5:o,updatedAt:n.mtime.toISOString(),description:""}}catch(t){return console.warn(`\u26A0\uFE0F \u65E0\u6CD5\u83B7\u53D6\u6587\u4EF6\u4FE1\u606F: ${r}`,t),null}}function vu(r){let e=new Map;if(!Su(r))return e;try{let n=ga(r,"utf-8").trim().split(`
|
|
1318
|
-
`);for(let
|
|
1386
|
+
\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),C(`\u5DF2\u6CE8\u5165 ${g.size} \u4E2A\u6587\u4EF6\u53D8\u66F4\u951A\u70B9`)}}catch(u){C(`\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(`
|
|
1387
|
+
`),p=await this.semanticAnalyzer.analyzeSemanticDrift(t||this.anchorManager.getOriginalQuestion(),u,n);if(C(`\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):C(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);C(`\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){H(`\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(`
|
|
1388
|
+
`),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);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: ${g.metadata?.priority}}`),l.push(g)}}catch(u){H(`\u951A\u70B9\u6CE8\u5165\u5931\u8D25: ${u.message}`)}return{messages:l,lastSemanticCheckIteration:c}}}});var Gs=y(()=>{vc();Os();js();cr()});var Mc={};O(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 Vg}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=y(()=>{xo=class{content;filePath;constructor(e,t){this.content=e,this.filePath=t}async parse(){try{return new Promise((e,t)=>{Vg(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 Wg}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=Wg(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=y(()=>{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=y(()=>{ro()});import{createHash as op}from"crypto";import{readFileSync as Vc,writeFileSync as sp,existsSync as ip,statSync as ap}from"fs";import{resolve as cp}from"path";function lp(o){try{let e=Vc(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=Vc(o,"utf-8").trim().split(`
|
|
1389
|
+
`);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(`
|
|
1319
1390
|
`)+`
|
|
1320
|
-
`,"utf-8")}catch(t){throw console.error(`\u274C \u5199\u5165 JSONL \u6587\u4EF6\u5931\u8D25: ${e}`,t),t}}function
|
|
1321
|
-
`)}var da=y(()=>{});var z,Ce=y(()=>{z=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 Qo,readFileSync as fa}from"fs";import{resolve as Zo}from"path";var yr,ha=y(()=>{Ce();yr=class extends z{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={},o=Zo(e,"package.json");if(Qo(o))try{let s=fa(o,"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=[],o=["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=Zo(t,"package.json");if(Qo(s))try{let i=fa(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 o.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[o,s]of Object.entries(n))for(let i of s)if(Qo(Zo(e,i))){t.push(o);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"]}}});import{existsSync as Sr,readFileSync as Cr}from"fs";import{resolve as wn}from"path";var xr,ya=y(()=>{Ce();xr=class extends z{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={},o=wn(e,"pom.xml");if(Sr(o))try{let a=Cr(o,"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=wn(e,"build.gradle"),i=wn(e,"build.gradle.kts");if(Sr(s))try{let a=Cr(s,"utf-8"),c=a.match(/sourceCompatibility\s*=\s*['"]?([^'"\\s]+)['"]?/)||a.match(/targetCompatibility\s*=\s*['"]?([^'"\\s]+)['"]?/);c&&(n.Java=c[1])}catch{}else if(Sr(i))try{let a=Cr(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=[],o=["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{Cr(wn(t,s),"utf-8").includes("public static void main(String[] args)")&&n.push(s)}catch{}}),o.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[o,s]of Object.entries(n))for(let i of s)if(Sr(wn(e,i))){t.push(o);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"]}}});import{existsSync as bn,readFileSync as vn}from"fs";import{resolve as $t}from"path";var wr,Sa=y(()=>{Ce();wr=class extends z{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={},o=$t(e,".python-version");if(bn(o))try{let a=vn(o,"utf-8");n.Python=a.trim()}catch{}let s=$t(e,"pyproject.toml");if(bn(s))try{let c=vn(s,"utf-8").match(/python\s*=\s*['"]([^'"]+)['"]/);c&&(n.Python=c[1])}catch{}let i=$t(e,"setup.py");if(bn(i))try{let c=vn(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=$t(t,"setup.py");if(bn(s))try{let a=vn(s,"utf-8").match(/entry_points\s*=\s*\{[^}]+\}/s);if(a){let l=a[0].match(/console_scripts\s*:\s*\[([^\]]+)\]/s);if(l){let u=l[1].match(/([^=]+)\s*=\s*([^,]+)/g);u&&u.forEach(g=>{let[m,f]=g.split("=").map(S=>S.trim()),w=f.replace(/\./g,"/").replace(":","/")+".py";n.push(w)})}}}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[o,s]of Object.entries(n))for(let i of s)if(bn($t(e,i)))if(o==="Black")try{if(vn($t(e,i),"utf-8").includes("[tool.black]")){t.push(o);break}}catch{}else{t.push(o);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"]}}});import{existsSync as es,readFileSync as ts}from"fs";import{resolve as br}from"path";var vr,Ca=y(()=>{Ce();vr=class extends z{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={},o=br(e,"go.mod");if(es(o))try{let a=ts(o,"utf-8").match(/^go\s+(\d+\.\d+)/m);a&&(n.Go=a[1])}catch{}let s=br(e,"go.sum");if(es(s))try{let a=ts(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{ts(br(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[o,s]of Object.entries(n))for(let i of s)if(es(br(e,i))){t.push(o);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"]}}});import{existsSync as xa,readFileSync as ku}from"fs";import{resolve as wa}from"path";var Tr,ba=y(()=>{Ce();Tr=class extends z{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={},o=wa(e,"Cargo.toml");if(xa(o))try{let i=ku(o,"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[o,s]of Object.entries(n))for(let i of s)if(xa(wa(e,i))){t.push(o);break}return t}getCommonSourceExtensions(){return[".rs",".toml",".lock"]}getCommonTestExtensions(){return["_test.rs",".test.rs","tests/*.rs"]}getCommonConfigFiles(){return["Cargo.toml","Cargo.lock","rustfmt.toml",".rustfmt.toml","clippy.toml",".clippy.toml",".editorconfig"]}}});import{existsSync as ns,readFileSync as va}from"fs";import{resolve as rs}from"path";var kr,Ta=y(()=>{Ce();kr=class extends z{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={},o=rs(e,"composer.json");if(ns(o))try{let i=va(o,"utf-8"),a=JSON.parse(i);a.require&&a.require.php&&(n.PHP=a.require.php)}catch{}let s=rs(e,".php-version");if(ns(s))try{let i=va(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[o,s]of Object.entries(n))for(let i of s)if(ns(rs(e,i))){t.push(o);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"]}}});import{existsSync as os,readFileSync as ka}from"fs";import{resolve as ss}from"path";var $r,$a=y(()=>{Ce();$r=class extends z{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={},o=ss(e,".ruby-version");if(os(o))try{let i=ka(o,"utf-8");n.Ruby=i.trim()}catch{}let s=ss(e,"Gemfile");if(os(s))try{let a=ka(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[o,s]of Object.entries(n))for(let i of s)if(os(ss(e,i))){t.push(o);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"]}}});import{existsSync as Pa,readFileSync as Ea}from"fs";import{resolve as is}from"path";import{globSync as as}from"glob";var Pr,Ma=y(()=>{Ce();Pr=class extends z{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={},o=[...as("*.csproj",{cwd:e}),...as("*.vbproj",{cwd:e}),...as("*.fsproj",{cwd:e})];for(let i of o)try{let a=is(e,i),c=Ea(a,"utf-8"),l=c.match(/<TargetFramework>([^<]+)<\/TargetFramework>/)||c.match(/<TargetFrameworks>([^<]+)<\/TargetFrameworks>/);if(l){n[".NET Framework"]=l[1];break}let p=c.match(/<LangVersion>([^<]+)<\/LangVersion>/);p&&(n["C# Version"]=p[1])}catch{}let s=is(e,"global.json");if(Pa(s))try{let i=Ea(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[o,s]of Object.entries(n))for(let i of s)if(Pa(is(e,i))){t.push(o);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"]}}});var cs,Tn,Ia=y(()=>{ha();ya();Sa();Ca();ba();Ta();$a();Ma();cs=class r{static instance;handlers=new Map;constructor(){this.registerHandlers()}static getInstance(){return r.instance||(r.instance=new r),r.instance}registerHandlers(){[new yr,new xr,new wr,new vr,new Tr,new kr,new $r,new Pr].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#"]},o=e.toLowerCase();n[o]&&n[o].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 o=this.getHandler(e);return o?await o.detectVersions(t,n):{}}findEntryPoints(e,t,n){let o=this.getHandler(e);return o?o.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 o=this.getDirectoryDescriptions(n);Object.assign(t,o)}),t}async detectVersionsForLanguages(e,t,n){let o={};for(let s of e){let i=await this.detectVersions(s,t,n);Object.assign(o,i)}return o}findEntryPointsForLanguages(e,t,n){let o=[];for(let s of e){let i=this.findEntryPoints(s,t,n);o.push(...i)}return[...new Set(o)]}detectCodeStandardsForLanguages(e,t){let n=[];for(let o of e){let s=this.detectCodeStandards(o,t);n.push(...s)}return[...new Set(n)]}},Tn=cs.getInstance()});var La={};O(La,{QuickProjectScanTool:()=>Ve,quickProjectScan:()=>Pt,quickProjectScanTool:()=>Et});import{existsSync as We}from"fs";import{globSync as $u}from"glob";async function Pt(){return Aa.execute({})}var Ve,Aa,Et,ls=y(()=>{B();or();ia();ua();da();Ia();Ve=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...
|
|
1322
|
-
`),t.push("\u{1F4C2} \u626B\u63CF\u9879\u76EE\u6587\u4EF6...");let
|
|
1323
|
-
`),t.push("\u{1F4CB} \u68C0\u6D4B\u9879\u76EE\u7C7B\u578B\u548C\u914D\u7F6E...");let c=
|
|
1324
|
-
`)}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
|
|
1325
|
-
`):"\u6682\u65E0\u7248\u672C\u4FE1\u606F",
|
|
1391
|
+
`,"utf-8")}catch(t){throw console.error(`\u274C \u5199\u5165 JSONL \u6587\u4EF6\u5931\u8D25: ${e}`,t),t}}function Wc(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(`
|
|
1392
|
+
`)}var Hc=y(()=>{});var Gc={};O(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=y(()=>{U();Dt();Oc();Uc();Hc();bs();pt=class extends P{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...
|
|
1393
|
+
`),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)
|
|
1394
|
+
`),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,b]of Object.entries(d))t.push(` - ${S}: ${b}`);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,b)=>S+(b.dependencies?.length||0),0),x=Object.values(h).reduce((S,b)=>S+(b.conflicts?.length||0),0);t.push(` - \u4F9D\u8D56\u603B\u6570: ${w}`),x>0&&t.push(` - \u4F9D\u8D56\u51B2\u7A81: ${x}`),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 k=this.buildProjectBasicInfo(u,p,i,g,l,d,m,h);try{_c(k,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(),b=Wc(i,f,n),L=((Date.now()-S)/1e3).toFixed(1);t.push("\u2705 \u6587\u4EF6\u4FE1\u606F\u5DF2\u66F4\u65B0\u81F3: .nium/project/files.jsonl"),t.push("");let M=zc(b);t.push(M),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 v=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(v),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(`
|
|
1395
|
+
`)}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(`
|
|
1396
|
+
`):"\u6682\u65E0\u7248\u672C\u4FE1\u606F",p=a.length>0?a.map(g=>`- ${g}`).join(`
|
|
1326
1397
|
`):"\u6682\u65E0\u4EE3\u7801\u89C4\u8303\u914D\u7F6E";return`# ${e.name} - \u9879\u76EE\u7ED3\u6784\u6587\u6863
|
|
1327
1398
|
|
|
1328
1399
|
> \u6700\u540E\u66F4\u65B0: ${c}
|
|
@@ -1337,10 +1408,10 @@ ${n.map(s=>`\u2022 ${s}`).join(`
|
|
|
1337
1408
|
${s.buildTool?`**\u6784\u5EFA\u5DE5\u5177**: ${s.buildTool}`:""}
|
|
1338
1409
|
|
|
1339
1410
|
### \u8FD0\u884C\u65F6\u7248\u672C
|
|
1340
|
-
${
|
|
1411
|
+
${u}
|
|
1341
1412
|
|
|
1342
1413
|
### \u4EE3\u7801\u89C4\u8303
|
|
1343
|
-
${
|
|
1414
|
+
${p}
|
|
1344
1415
|
|
|
1345
1416
|
---
|
|
1346
1417
|
|
|
@@ -1355,7 +1426,7 @@ ${this.generateDirectoryTree(n)}
|
|
|
1355
1426
|
## \u7F16\u7A0B\u8BED\u8A00\u5206\u6790
|
|
1356
1427
|
|
|
1357
1428
|
### \u8BED\u8A00\u5206\u5E03
|
|
1358
|
-
${
|
|
1429
|
+
${r.languages.length>0?r.languages.map(g=>`- **${g.language}**: ${g.count} \u4E2A\u6587\u4EF6`).join(`
|
|
1359
1430
|
`):"\u6682\u65E0\u68C0\u6D4B\u5230\u7684\u7F16\u7A0B\u8BED\u8A00"}
|
|
1360
1431
|
|
|
1361
1432
|
---
|
|
@@ -1415,11 +1486,11 @@ ${t.testFiles.length>0?t.testFiles.slice(0,20).map(g=>`- \`${g}\``).join(`
|
|
|
1415
1486
|
## \u4F9D\u8D56\u5173\u7CFB
|
|
1416
1487
|
|
|
1417
1488
|
### \u751F\u4EA7\u4F9D\u8D56
|
|
1418
|
-
${e.dependencies?Object.entries(e.dependencies).map(([g,
|
|
1489
|
+
${e.dependencies?Object.entries(e.dependencies).map(([g,d])=>`- **${g}**: ${d}`).join(`
|
|
1419
1490
|
`):"\u6682\u65E0\u751F\u4EA7\u4F9D\u8D56"}
|
|
1420
1491
|
|
|
1421
1492
|
### \u5F00\u53D1\u4F9D\u8D56
|
|
1422
|
-
${e.devDependencies?Object.entries(e.devDependencies).map(([g,
|
|
1493
|
+
${e.devDependencies?Object.entries(e.devDependencies).map(([g,d])=>`- **${g}**: ${d}`).join(`
|
|
1423
1494
|
`):"\u6682\u65E0\u5F00\u53D1\u4F9D\u8D56"}
|
|
1424
1495
|
|
|
1425
1496
|
---
|
|
@@ -1438,23 +1509,43 @@ ${this.findCoreModules(t.sourceFiles).map(g=>`- \`${g}\``).join(`
|
|
|
1438
1509
|
|
|
1439
1510
|
**\u6587\u6863\u751F\u6210\u65F6\u95F4**: ${c}
|
|
1440
1511
|
**\u6587\u6863\u751F\u6210\u5DE5\u5177**: quickProjectScan \u5DE5\u5177
|
|
1441
|
-
`}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(([p
|
|
1442
|
-
`,
|
|
1512
|
+
`}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+`
|
|
1513
|
+
`,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}/\`
|
|
1443
1514
|
${s}`}).join(`
|
|
1444
1515
|
|
|
1445
|
-
`)}findEntryPoints(e,t,n){let
|
|
1516
|
+
`)}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(k=>({name:k.name,description:k.description,fileCount:k.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[k,f]of Object.entries(c))f.dependencies&&f.dependencies.forEach(v=>{let S=v.groupId&&v.artifactId?`${v.groupId}:${v.artifactId}`:v.name||"";S&&v.version&&(v.scope&&v.scope.toLowerCase().includes("test")?m[S]||(m[S]=v.version,w++):d[S]||(d[S]=v.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`
|
|
1446
1517
|
\u{1F4E6} \u9879\u76EE: ${e.name} (v${e.version})
|
|
1447
|
-
\u{1F310} \u4E3B\u8981\u8BED\u8A00: ${
|
|
1448
|
-
${
|
|
1518
|
+
\u{1F310} \u4E3B\u8981\u8BED\u8A00: ${r.primaryLanguage}
|
|
1519
|
+
${r.buildTool?`\u{1F527} \u6784\u5EFA\u5DE5\u5177: ${r.buildTool}`:""}
|
|
1449
1520
|
\u{1F4C1} \u4E3B\u8981\u76EE\u5F55: ${t.directories.join(", ")}
|
|
1450
1521
|
\u{1F4DD} \u6E90\u6587\u4EF6: ${t.sourceFiles.length} \u4E2A
|
|
1451
1522
|
\u2699\uFE0F \u914D\u7F6E\u6587\u4EF6: ${t.configFiles.length} \u4E2A
|
|
1452
1523
|
\u{1F4DA} \u6587\u6863\u6587\u4EF6: ${t.docFiles.length} \u4E2A
|
|
1453
1524
|
\u{1F9EA} \u6D4B\u8BD5\u6587\u4EF6: ${t.testFiles.length} \u4E2A
|
|
1454
|
-
`}formatAction(e){return"quickProjectScan()"}formatObservation(e){return String(e)}},
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1525
|
+
`}formatAction(e){return"quickProjectScan()"}formatObservation(e){return String(e)}},Jc=new pt;Kt=Jc});var ei={};O(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=y(()=>{U();vo=class extends P{getDefinition(){return{name:"finish",description:`Call this tool when you have completed the task and want to provide the final answer.
|
|
1526
|
+
|
|
1527
|
+
IMPORTANT: This is the RECOMMENDED way to signal task completion.
|
|
1528
|
+
|
|
1529
|
+
You should call this tool when:
|
|
1530
|
+
- You have successfully completed all requested actions
|
|
1531
|
+
- You have gathered all necessary information to answer the user's question
|
|
1532
|
+
- You have verified that your work meets the requirements
|
|
1533
|
+
- You are ready to provide a comprehensive summary
|
|
1534
|
+
|
|
1535
|
+
The answer should be detailed and include:
|
|
1536
|
+
- What was accomplished or discovered
|
|
1537
|
+
- Key results, files modified, or actions taken
|
|
1538
|
+
- Any important findings or observations
|
|
1539
|
+
- Recommendations or next steps (if applicable)
|
|
1540
|
+
|
|
1541
|
+
Example usage:
|
|
1542
|
+
finish({
|
|
1543
|
+
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.",
|
|
1544
|
+
success: true
|
|
1545
|
+
})`,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={};O(ni,{executePlanTask:()=>xp,getGlobalSession:()=>Cp,resumePlanTask:()=>Sp,setGlobalSession:()=>ti});import E from"chalk";function ti(o){V=o}function Cp(){return V}async function xp(o,e=1,t={}){let n=new We,r=new ze(n),s=new He(n,r),i=new Je,{callModelAPI:a}=await Promise.resolve().then(()=>(ve(),Gt)),{AnchorInjector:c}=await Promise.resolve().then(()=>(cr(),Js)),l=new c(o,a),u=Yt(),p={useLLMDisclosure:t.useLLMDisclosure!==void 0?t.useLLMDisclosure:!0,useLLMSummary:t.useLLMSummary!==void 0?t.useLLMSummary:!0,verbose:t.verbose||!1},g=f=>{V?V.log(f):console.log(f)},d=f=>{V?V.info(f):console.log(E.blue(f))},m=f=>{V?V.success(f):console.log(E.green(f))},h=f=>{V?V.warning(f):console.log(E.yellow(f))},w=f=>{V?V.error(f):console.log(E.red(f))},x=" ".repeat(e-1),k=new bo({log:g,info:d,success:m,warning:h,error:w});try{let f=await import("fs"),v=await import("path");try{let M=v.join(process.cwd(),".nium/project/project.json");if(f.existsSync(M)){let I=f.statSync(M);(Date.now()-I.mtimeMs)/(1e3*60*60)>24&&h("\u26A0\uFE0F \u9879\u76EE\u7ED3\u6784\u6587\u6863\u5DF2\u8D85\u8FC724\u5C0F\u65F6\uFF0C\u5EFA\u8BAE\u66F4\u65B0")}else{d("\u{1F4CB} \u9996\u6B21\u6267\u884C\u4EFB\u52A1\uFF0C\u6B63\u5728\u626B\u63CF\u9879\u76EE\u7ED3\u6784...");let{quickProjectScan:I}=await Promise.resolve().then(()=>(Ys(),Gc));await I(),m(`\u2705 \u9879\u76EE\u7ED3\u6784\u626B\u63CF\u5B8C\u6210
|
|
1546
|
+
`)}}catch{h("\u9879\u76EE\u7ED3\u6784\u626B\u63CF\u5931\u8D25\uFF0C\u5C06\u7EE7\u7EED\u6267\u884C\u4EFB\u52A1")}g(""),g(`${x}${"\u2550".repeat(60-e*2)}`),d(`${x}\u{1F4CB} \u5F00\u59CB\u89C4\u5212\u4EFB\u52A1 (\u5D4C\u5957\u5C42\u7EA7: ${e})`),g(`${x}${"\u2550".repeat(60-e*2)}`),g("");let S=u.getAllSubAgents(),b=await Zn(o,S);n.initializeTask(o,b),b.taskId&&St(b.taskId);let L=vp(er(b),e);g(L),g(""),k.showTaskStart(o,b.tasks.length,e);for(let M=0;M<b.tasks.length;M++){let I=b.tasks[M],q=I.step;k.showStepProgress(q,b.tasks.length,I,e),n.plan.currentStep=q,b.taskId&&await at(b.taskId,q,"in_progress");try{let Q=Bc(I,u),J=await s.buildIsolatedContext(q,I.description,Q?.prompt||"",p.useLLMDisclosure,I.allowedTools);Q?await qc(q,I.description,Q,J,n,i,u,p,{log:g,info:d,success:m,warning:h,error:w},I.allowedTools):await Kc(I.description,J,n,{log:g,info:d},I.allowedTools),k.showStepComplete(q,b.tasks.length,I,e),b.taskId&&await at(b.taskId,q,"completed")}catch(Q){let J=Q instanceof Error?Q.message:String(Q);throw k.showStepError(q,b.tasks.length,J,e),h(`${x}\u4E2D\u6B62\u540E\u7EED\u6B65\u9AA4\u6267\u884C`),n.recordStepCompletion(q,`\u5931\u8D25: ${J}`,{success:!1,error:J}),Q}}return k.showTaskComplete(b.tasks.length,b.tasks.length,e),vt(),{success:!0,taskId:b.taskId,completedSteps:b.tasks.length,plan:b,planMarkdown:b.markdown,tasks:b.tasks}}catch(f){vt();let v=f instanceof Error?f.message:String(f);throw w(`${x}\u274C \u89C4\u5212\u4EFB\u52A1\u6267\u884C\u5931\u8D25: ${v}`),f}}async function Sp(o,e=0,t={}){let{loadTaskPlan:n}=await Promise.resolve().then(()=>($e(),Ve)),r=n(o);if(!r)throw new Error(`\u65E0\u6CD5\u52A0\u8F7D\u4EFB\u52A1\u8BA1\u5212: ${o}`);let s=new We,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=>{V?V.log(f):console.log(f)},g=f=>{V?V.info(f):console.log(E.blue(f))},d=f=>{V?V.success(f):console.log(E.green(f))},m=f=>{V?V.warning(f):console.log(E.yellow(f))},h=f=>{V?V.error(f):console.log(E.red(f))};p(E.cyan(`[\u4EFB\u52A1\u6062\u590D] \u6B63\u5728\u6062\u590D\u4EFB\u52A1: ${o}`)),p(E.gray(`\u4ECE\u6B65\u9AA4 ${e||1} \u5F00\u59CB\u6267\u884C`));let w=1,x="",k=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(E.cyan("\u2550".repeat(60))),g("\u{1F4CB} \u6062\u590D\u4EFB\u52A1\u6267\u884C"),p(E.cyan("\u2550".repeat(60))),p(""),k.showTaskStart(r.taskId,r.tasks.length,w);let f=e>0?e-1:0;for(let v=f;v<r.tasks.length;v++){let S=r.tasks[v],b=S.step;if(k.showStepProgress(b,r.tasks.length,S,w),s.plan.currentStep=b,r.taskId){let{updateTaskStatus:L}=await Promise.resolve().then(()=>($e(),Ve));await L(r.taskId,b,"in_progress")}try{let L=Bc(S,l),M=await a.buildIsolatedContext(b,S.description,L?.prompt||"",u.useLLMDisclosure,S.allowedTools);if(L?await qc(b,S.description,L,M,s,c,l,u,{log:p,info:g,success:d,warning:m,error:h},S.allowedTools):await Kc(S.description,M,s,{log:p,info:g},S.allowedTools),k.showStepComplete(b,r.tasks.length,S,w),r.taskId){let{updateTaskStatus:I}=await Promise.resolve().then(()=>($e(),Ve));await I(r.taskId,b,"completed")}}catch(L){let M=L instanceof Error?L.message:String(L);throw k.showStepError(b,r.tasks.length,M,w),m(`${x}\u4E2D\u6B62\u540E\u7EED\u6B65\u9AA4\u6267\u884C`),s.recordStepCompletion(b,`\u5931\u8D25: ${M}`,{success:!1,error:M}),L}}return k.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 v=f instanceof Error?f.message:String(f);throw h(`${x}\u274C \u4EFB\u52A1\u6062\u590D\u6267\u884C\u5931\u8D25: ${v}`),f}}function vp(o,e){return e<=1?o:o.split(`
|
|
1547
|
+
`).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(`
|
|
1548
|
+
`)}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){let{log:u,info:p,error:g}=c,d=Date.now();p(`\u{1F527} \u4F7F\u7528\u5B50\u667A\u80FD\u4F53: ${t.name}`),u(E.gray(`\u63CF\u8FF0: ${t.description}`)),l&&l.length>0&&u(E.gray(`\u6CE8\u610F: \u5B50\u667A\u80FD\u4F53 ${t.name} \u4E0D\u53D7\u6B65\u9AA4\u5DE5\u5177\u9650\u5236\u5F71\u54CD`)),u("");try{let{SYSTEM_PROMPT:m}=await Promise.resolve().then(()=>(it(),Fs)),h=[{role:"system",content:m},...n.filter(k=>k.role!=="system"),...n.filter(k=>k.role==="system"&&k!==n[0])],w=await Yc(h,e,c,void 0,t);await wp(o,w,r,s,a,c);let x=Date.now()-d;i.recordAgentPerformance(t.name,!0,x)}catch(m){let h=Date.now()-d;throw i.recordAgentPerformance(t.name,!1,h),m}}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(E.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:x}=await Promise.resolve().then(()=>(Ne(),Zi)),{logDebug:k,logWarn:f}=await Promise.resolve().then(()=>(K(),Yo)),{AnchorInjector:v}=await Promise.resolve().then(()=>(cr(),Js)),S=[...o],b=0,L=50,M=0,I=new v(e,c),q=d(),Q=n&&n.length>0?q.filter(J=>n.includes(J.name)):q;for(n&&n.length>0&&k(`\u672C\u6B65\u9AA4\u53EF\u7528\u5DE5\u5177: ${Q.map(J=>J.name).join(", ")}`);b<L;){b++,k(`Loop iteration ${b}`);try{let J=await I.injectAnchors({taskDescription:e,iterations:b,messages:S,lastSemanticCheckIteration:M,callModelAPI:c}),{messages:R,lastSemanticCheckIteration:oe}=J;S=R,M=oe,x(S,e);let te=await c({model:a(),messages:S,temperature:.1,tools:Q}),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(()=>(K(),Yo));Oe(`Error in finalAnswerCallback: ${Fe}`)}s(E.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(E.yellow(F)),s(""));continue}let z=on[0],Te=z.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:[z]}),S.push({role:"tool",tool_call_id:z.id,content:F});continue}let kr;try{kr=JSON.parse(z.function.arguments)}catch{i(`\u89E3\u6790\u5DE5\u5177\u53C2\u6570\u5931\u8D25: ${z.function.arguments}`),S.push({role:"assistant",content:null,tool_calls:[z]}),S.push({role:"tool",tool_call_id:z.id,content:"Error: Invalid JSON arguments"});continue}if(l(Te)){let F=u(z);F&&(s(E.cyan(`\u{1F4AD} Think: ${F}`)),s("")),S.push({role:"assistant",content:null,tool_calls:[z]}),S.push({role:"tool",tool_call_id:z.id,content:"Noted. Continue with your action."});continue}if(p(Te)){let F=g(z);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(E.green(`${Rl} \u4EFB\u52A1\u5B8C\u6210 (\u901A\u8FC7 finish \u5DE5\u5177):`)),s(Fe),s(""),S.push({role:"assistant",content:null,tool_calls:[z]}),S.push({role:"tool",tool_call_id:z.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:[z]}),S.push({role:"tool",tool_call_id:z.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:[z]}),S.push({role:"tool",tool_call_id:z.id,content:Oe});continue}}let ft=h[Te],Ml=ft?ft.formatAction(kr):`${Te}()`;s(E.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(E.yellow(`\u{1F4CA} \u89C2\u5BDF: ${Ll}`)),s("")),S.push({role:"assistant",content:null,tool_calls:[z]}),S.push({role:"tool",tool_call_id:z.id,content:String(Il)}),x(S,e)}catch(J){throw i(`\u9519\u8BEF: ${J.message}`),x(S,e),J}}if(b>=L)throw i("\u9519\u8BEF: \u5DF2\u8FBE\u5230\u6700\u5927\u8FED\u4EE3\u6B21\u6570"),x(S,e),new Error("Maximum iterations reached");return S}async function wp(o,e,t,n,r,s){let{info:i,log:a}=s,c;r.useLLMSummary?c=await n.extractSummaryWithLLM(e):c=await n.extractSummary(e);let l=n.extractMetadata(e);l.success=!0,t.recordStepCompletion(o,c,l),r.verbose&&(i(`\u6B65\u9AA4 ${o} \u6458\u8981\u5DF2\u8BB0\u5F55\u5230\u5168\u5C40\u4E0A\u4E0B\u6587`),a(""),a(E.gray("\u2500\u2500\u2500 \u6B65\u9AA4\u6267\u884C\u6458\u8981 \u2500\u2500\u2500")),a(E.gray(`\u6458\u8981: ${c}`)),a(E.gray(`\u5DE5\u5177: ${l.toolsUsed.join(", ")}`)),a(E.gray(`\u6587\u4EF6: ${l.filesAccessed.join(", ")}`)),a(E.gray(`\u8FED\u4EE3: ${l.iterations} \u6B21`)))}var bo,V,To=y(()=>{$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(E.cyan(`${r}\u2554${"\u2550".repeat(58-n*2)}\u2557`)),this.log(E.cyan(`${r}\u2551`)+E.bold.white(" \u{1F680} \u5F00\u59CB\u6267\u884C\u4EFB\u52A1\u8BA1\u5212")+E.cyan(` (\u5171${t}\u6B65)`.padEnd(58-n*2-13))+E.cyan("\u2551")),this.log(E.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(E.blue(`${s}\u250C${"\u2500".repeat(58-r*2)}\u2510`)),this.log(E.blue(`${s}\u2502`)+` \u6B65\u9AA4 ${e}/${t} (${i}%)`.padEnd(60-r*2)+E.blue("\u2502")),this.log(E.blue(`${s}\u2502`)+` ${a}`.padEnd(60-r*2)+E.blue("\u2502")),this.log(E.blue(`${s}\u2502`)+E.cyan(` \u{1F4CC} ${n.description}`.substring(0,58-r*2)).padEnd(60-r*2)+E.blue("\u2502")),this.log(E.blue(`${s}\u2502`)+E.gray(` \u{1F916} \u667A\u80FD\u4F53: ${n.subAgent}`.substring(0,58-r*2)).padEnd(60-r*2)+E.blue("\u2502")),this.log(E.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${E.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(E.green(`${r}\u2554${"\u2550".repeat(58-n*2)}\u2557`)),this.log(E.green(`${r}\u2551`)+E.bold.white(" \u{1F389} \u4EFB\u52A1\u6267\u884C\u5B8C\u6210!")+E.green("".padEnd(58-n*2-12))+E.green("\u2551")),this.log(E.green(`${r}\u2551`)+` \u5B8C\u6210\u8FDB\u5EA6: ${e}/${t} (${i}%)`.padEnd(60-n*2)+E.green("\u2551")),this.log(E.green(`${r}\u2551`)+` \u603B\u8017\u65F6: ${s}`.padEnd(60-n*2)+E.green("\u2551")),this.log(E.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`${E.green("\u2588".repeat(n))+E.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`}},V=null});import bp from"chalk";async function gr(o){return await Xc.execute(o)}var De,Xc,pr,oi=y(()=>{U();De=class o extends P{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}
|
|
1458
1549
|
|
|
1459
1550
|
IDEAL USE CASES:
|
|
1460
1551
|
- Building new features that span multiple files or components
|
|
@@ -1481,7 +1572,7 @@ AVOID FOR:
|
|
|
1481
1572
|
RECOMMENDATION BASED ON CURRENT NESTING LEVEL (${e}/${t}):
|
|
1482
1573
|
${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!"}
|
|
1483
1574
|
|
|
1484
|
-
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:
|
|
1575
|
+
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(),Ve)),{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
|
|
1485
1576
|
|
|
1486
1577
|
`;return l+=`**\u4EFB\u52A1 ID**: ${c.taskId}
|
|
1487
1578
|
`,l+=`**\u603B\u6B65\u9AA4\u6570**: ${c.tasks.length}
|
|
@@ -1492,19 +1583,19 @@ When you're uncertain if a task needs planning, default to using regular tools d
|
|
|
1492
1583
|
`,l+=`- JSON: ./.nium/tasks/${c.taskId}.json
|
|
1493
1584
|
|
|
1494
1585
|
`,l+=`**\u6267\u884C\u6B65\u9AA4**:
|
|
1495
|
-
`,c.tasks.forEach((p
|
|
1586
|
+
`,c.tasks.forEach((u,p)=>{l+=`${p+1}. ${u.description} [${u.subAgent}]
|
|
1496
1587
|
`}),l+=`
|
|
1497
|
-
\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(
|
|
1588
|
+
\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!
|
|
1498
1589
|
|
|
1499
|
-
`;return s+=`**Task ID**: ${
|
|
1500
|
-
`,s+=`**Completed Steps**: ${
|
|
1590
|
+
`;return s+=`**Task ID**: ${r.taskId}
|
|
1591
|
+
`,s+=`**Completed Steps**: ${r.completedSteps}
|
|
1501
1592
|
|
|
1502
|
-
`,
|
|
1503
|
-
${
|
|
1593
|
+
`,r.planMarkdown&&(s+=`**Generated Plan**:
|
|
1594
|
+
${r.planMarkdown}
|
|
1504
1595
|
|
|
1505
|
-
`),
|
|
1506
|
-
`,
|
|
1507
|
-
`})),this.createToolResult(s,s,!0)}catch(
|
|
1596
|
+
`),r.tasks&&r.tasks.length>0&&(s+=`**Executed Steps**:
|
|
1597
|
+
`,r.tasks.forEach((i,a)=>{s+=`${a+1}. \u2713 ${i.description}
|
|
1598
|
+
`})),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=y(()=>{Zc=null});import Ke from"readline";import dt from"chalk";async function mr(o){return await tl.execute(o)}var Xt,tl,fr,nl=y(()=>{U();Eo();Xt=class extends P{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.
|
|
1508
1599
|
|
|
1509
1600
|
Use this tool when you need:
|
|
1510
1601
|
- User confirmation or decision
|
|
@@ -1521,7 +1612,7 @@ IMPORTANT:
|
|
|
1521
1612
|
Examples:
|
|
1522
1613
|
- askUser({ question: "Which file should I modify?" }) - Free text input
|
|
1523
1614
|
- askUser({ question: "Proceed with deletion?", choices: ["Yes", "No"] }) - Multiple choice
|
|
1524
|
-
- 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:
|
|
1615
|
+
- 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=y(()=>{U();Qt=class extends P{getDefinition(){return{name:"todo",description:`Execute and manage saved task plans. Use this tool to:
|
|
1525
1616
|
- Resume execution of a previously generated plan
|
|
1526
1617
|
- List all available task plans
|
|
1527
1618
|
- View details of a specific task plan
|
|
@@ -1535,62 +1626,57 @@ WHEN TO USE:
|
|
|
1535
1626
|
FEATURES:
|
|
1536
1627
|
- Resume from any step (default: continue from last step)
|
|
1537
1628
|
- View task progress and status
|
|
1538
|
-
- 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:
|
|
1539
|
-
|
|
1540
|
-
`;return s+=`**\u4EFB\u52A1 ID**: ${
|
|
1541
|
-
`,s+=`**\u5B8C\u6210\u6B65\u9AA4**: ${
|
|
1542
|
-
`,s+=`**\u6062\u590D\u8D77\u70B9**: \u6B65\u9AA4 ${
|
|
1543
|
-
|
|
1544
|
-
`,s+="\u6240\u6709\u6B65\u9AA4\u5DF2\u6210\u529F\u6267\u884C\u5B8C\u6BD5\u3002",this.createToolResult(s,s,!0)}catch(n){let
|
|
1545
|
-
`;
|
|
1546
|
-
|
|
1547
|
-
`;for(let s of n){let i=t(s);if(i){let a=i.tasks.filter(
|
|
1548
|
-
`,
|
|
1549
|
-
`,
|
|
1550
|
-
`,
|
|
1551
|
-
`,
|
|
1552
|
-
`,
|
|
1553
|
-
`}}return
|
|
1554
|
-
\u{1F4A1} \u4F7F\u7528 todo(action="view", taskId="...") \u67E5\u770B\u8BE6\u60C5`,
|
|
1555
|
-
\u{1F4A1} \u4F7F\u7528 todo(action="resume", taskId="...") \u6062\u590D\u6267\u884C`,this.createToolResult(
|
|
1556
|
-
`;
|
|
1557
|
-
|
|
1558
|
-
`,
|
|
1559
|
-
`,
|
|
1560
|
-
`,
|
|
1561
|
-
`,
|
|
1562
|
-
`,
|
|
1563
|
-
`,
|
|
1564
|
-
|
|
1565
|
-
`,
|
|
1566
|
-
`,
|
|
1567
|
-
`;for(let i of n.tasks){let a=i.status==="completed"?"\u2705":i.status==="in_progress"?"\u23F3":i.status==="pending"?"\u{1F4CB}":"\u2753",c=i;
|
|
1568
|
-
`,
|
|
1569
|
-
`,
|
|
1570
|
-
`,c.startTime&&(
|
|
1571
|
-
`),c.endTime&&(
|
|
1572
|
-
`),c.duration&&(
|
|
1573
|
-
`),c.error&&(
|
|
1574
|
-
`),
|
|
1575
|
-
`}let s=n.tasks.find(i=>i.status!=="completed");return s?
|
|
1576
|
-
\u{1F4A1} \u4F7F\u7528 todo(action="resume", taskId="${e}", resumeFrom=${s.step}) \u4ECE\u6B65\u9AA4 ${s.step} \u7EE7\u7EED\u6267\u884C`:
|
|
1577
|
-
\u2705 \u6240\u6709\u6B65\u9AA4\u5DF2\u5B8C\u6210\uFF01`,this.createToolResult(
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
`,
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
`,o+=`
|
|
1590
|
-
\u{1F550} \u751F\u6210\u65F6\u95F4: ${new Date().toLocaleString()}`,o}},Lt=null});var kn={};O(kn,{AgentTools:()=>ds,AskUserTool:()=>It,BaseTool:()=>E,ConfirmableTool:()=>ie,CopyTool:()=>gt,CoreTools:()=>xo,DeleteTool:()=>lt,FileChangeTools:()=>Ss,FileChangeTracker:()=>jt,FileOpsTools:()=>Io,GlobTool:()=>ft,GrepTool:()=>ht,MergeTool:()=>pt,MkdirTool:()=>at,MoveTool:()=>ut,PlanTool:()=>we,QuickProjectScanTool:()=>Ve,ReadTool:()=>it,SearchReplaceTool:()=>mt,SearchTools:()=>Ao,ShellTool:()=>yt,SystemTools:()=>jo,THINK_TOOL:()=>cr,ThinkTool:()=>Fe,TodoTool:()=>At,WriteTool:()=>ct,askUser:()=>En,askUserTool:()=>Mn,copyFile:()=>en,copyTool:()=>tn,createFileChangeTracker:()=>Rr,createToolResult:()=>xs,deleteFile:()=>Yt,deleteTool:()=>Xt,detectFileChanges:()=>Or,extractThought:()=>lr,extractToolResult:()=>Ht,fileChangeTracking:()=>_u,generateChangeSummary:()=>Fr,getCurrentSessionFileChanges:()=>Wr,getFileChangeTracker:()=>fe,getSessionFileChanges:()=>Ur,glob:()=>an,globTool:()=>cn,grep:()=>ln,grepTool:()=>un,handleGitCommit:()=>Nr,isThinkTool:()=>wt,isToolResult:()=>st,merge:()=>nn,mergeTool:()=>rn,mkdir:()=>qt,mkdirTool:()=>Oe,moveFile:()=>Qt,moveTool:()=>Zt,plan:()=>$n,planTool:()=>Pn,quickProjectScan:()=>Pt,quickProjectScanTool:()=>Et,read:()=>Jt,readTool:()=>zt,recordFileChange:()=>_r,resetFileChangeTracker:()=>Dr,searchReplace:()=>on,searchReplaceTool:()=>sn,shell:()=>gn,shellTool:()=>St,think:()=>Ct,thinkTool:()=>xt,todo:()=>In,todoTool:()=>An,toolInstances:()=>_,tools:()=>Cs,write:()=>Bt,writeTool:()=>Kt});function xs(r,e=null,t=!0){return{__tool_result:!0,result:r,display:e!==null?e:r,shouldPrint:t}}var _,Cs,_u,xe=y(()=>{wo();wo();rr();rr();sr();sr();ar();ar();Lr();Lr();Vr();Vr();rr();sr();ar();Lr();Vr();_={think:xt,plan:Pn,todo:An,askUser:Mn,quickProjectScan:Et,read:zt,write:Kt,mkdir:Oe,glob:cn,grep:un,shell:St,merge:rn,deleteFile:Xt,moveFile:Zt,copyFile:tn,search_replace:sn},Cs={think:Ct,plan:$n,todo:In,askUser:En,quickProjectScan:Pt,read:Jt,write:Bt,mkdir:qt,merge:nn,glob:an,grep:ln,shell:gn,deleteFile:Yt,moveFile:Qt,copyFile:en,search_replace:on},_u={detectFileChanges:Or,generateChangeSummary:Fr,recordFileChange:_r,handleGitCommit:Nr,getSessionFileChanges:Ur,getCurrentSessionFileChanges:Wr,getFileChangeTracker:fe,createFileChangeTracker:Rr,resetFileChangeTracker:Dr}});var Ba=y(()=>{});import{Client as Nu}from"@modelcontextprotocol/sdk/client/index.js";import{StreamableHTTPClientTransport as Uu}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{StdioClientTransport as Wu}from"@modelcontextprotocol/sdk/client/stdio.js";var Dn,ws=y(()=>{K();Dn=class{client=null;config;connected=!1;tools=[];constructor(e){this.config={timeout:3e4,enabled:!0,...e}}async connect(){h(`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 Uu(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 Wu({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 Nu({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})),h(`Loaded ${this.tools.length} tools from ${this.config.name}`)}catch(e){throw h(`Failed to connect to MCP server ${this.config.name}: ${e.message}`),e}}async disconnect(){h(`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 Ka=y(()=>{ws()});function Rt(){return bs.getInstance()}var bs,vs=y(()=>{ws();K();bs=class r{static instance=null;clients=new Map;mcpTools=new Map;initialized=!1;constructor(){}static getInstance(){return r.instance||(r.instance=new r),r.instance}async initialize(e){if(this.initialized){G("MCP Manager already initialized");return}k(`Initializing ${e.length} MCP server(s)...`),e.length>0&&(h("MCP Server Configurations:"),e.forEach(t=>{h(` - Server: ${t.name} (${t.transport})`),h(` Enabled: ${t.enabled!==!1}`),t.url?h(` URL: ${t.url}`):t.command&&h(` Command: ${t.command}`)}));for(let t of e){if(t.enabled===!1){h(`Skipping disabled MCP server: ${t.name}`);continue}try{h(`Attempting to connect to MCP server ${t.name} with URL: ${t.url||"N/A"}`),await this.connectToServer(t)}catch(n){ee(`Failed to connect to MCP server ${t.name}: ${n.message}`),h(`Error details for ${t.name}: ${n.message}
|
|
1591
|
-
${n.stack||""}`)}}this.initialized=!0,k(`MCP Manager initialized with ${this.clients.size} server(s) and ${this.mcpTools.size} tool(s)`)}async connectToServer(e){h(`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 o of n)this.registerTool(o);k(`Connected to MCP server: ${e.name} (${n.length} tools)`)}createClient(e){return new Dn(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),h(`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 o=this.clients.get(n.serverName);return o?o.isConnected()?o.callTool(e,t):{success:!1,error:`MCP server not connected: ${n.serverName}`}:{success:!1,error:`MCP server not connected: ${n.serverName}`}}async disconnectAll(){h("Disconnecting all MCP servers...");for(let[e,t]of this.clients.entries())try{await t.disconnect(),h(`Disconnected from MCP server: ${e}`)}catch(n){ee(`Error disconnecting from ${e}: ${n.message}`)}this.clients.clear(),this.mcpTools.clear(),this.initialized=!1,k("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 Ya(r){let e={};for(let t of r)e[t.name]=new Hr(t);return e}function Xa(r){let e={};for(let t of r){let n=new Hr(t);e[t.name]=async(...o)=>n.execute(...o)}return e}var Hr,Qa=y(()=>{vs();B();xe();K();Hr=class extends E{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){h(`Executing MCP tool: ${this.mcpTool.name}`);let t=this.argsToParams(e),o=await Rt().callTool(this.mcpTool.name,t);if(!o.success)throw new Error(o.error||"MCP tool execution failed");let s=this.formatMCPResult(o.content);return xs(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||{},o=Object.keys(n),s={};return e.forEach((i,a)=>{a<o.length&&(s[o[a]]=i)}),s}formatMCPResult(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>this.formatContentItem(t)).join(`
|
|
1592
|
-
|
|
1593
|
-
`):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,o])=>`${n}=${JSON.stringify(o)}`).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 Ts=y(()=>{Ba();Ka();vs();Qa()});async function Gr(){if(ks){h("Tools already loaded, skipping");return}k("Loading tools..."),Dt={..._},Za={...Cs};let r=Object.keys(_);k(`Loaded ${r.length} local tools`);let t=Rt().getAllTools();if(t.length===0){h("No MCP tools available"),ks=!0;return}let n=Ya(t),o=Xa(t),s=0,i=0;for(let[a,c]of Object.entries(n)){if(Dt[a]){h(`Skipping MCP tool ${a} (local tool has priority)`),i++;continue}Dt[a]=c,Za[a]=o[a],s++}k(`Added ${s} MCP tools, skipped ${i} (local priority)`),k(`Total tools available: ${Object.keys(Dt).length}`),ks=!0}function Ot(){return Dt}function ec(){let r=Object.keys(_),e=Object.keys(Dt),t=e.filter(n=>!r.includes(n));return{local:r.length,mcp:t.length,total:e.length,localTools:r,mcpTools:t}}var Dt,Za,ks,On=y(()=>{xe();Ts();K();Dt={},Za={},ks=!1});var ps={};O(ps,{TOOL_DEFINITIONS:()=>Jr,getRawToolDefinitions:()=>mn,getToolDefinitions:()=>Fn,getToolNames:()=>nc,isRealTool:()=>Vu});function tc(r){return{name:r.name,description:r.description,input_schema:r.input_schema}}function Fn(){let r=Ot();if(Object.keys(r).length===0)return Jr.map(tc);let e=[],t=we.getCurrentNestingLevel(),n=we.MAX_NESTING_LEVEL,o=["think","todo","askUser"];t<n&&o.splice(1,0,"plan");for(let s of o)if(r[s]){let i=r[s].getDefinition();i&&e.push(i)}for(let[s,i]of Object.entries(r))if(!o.includes(s)&&i){let a=i.getDefinition();a&&e.push(a)}return e.filter(s=>s!=null).map(tc)}function mn(){return Jr}function nc(){return Jr.map(r=>r.name)}function Vu(r){return r!=="think"&&nc().includes(r)}var Jr,vt=y(()=>{xe();On();ms();Jr=[_.think.getDefinition(),_.plan.getDefinition(),_.todo.getDefinition(),_.askUser.getDefinition(),_.quickProjectScan.getDefinition(),_.read.getDefinition(),_.write.getDefinition(),_.merge.getDefinition(),_.mkdir.getDefinition(),_.glob.getDefinition(),_.grep.getDefinition(),_.deleteFile.getDefinition(),_.moveFile.getDefinition(),_.copyFile.getDefinition(),_.search_replace.getDefinition(),_.shell.getDefinition()]});function $s(r){return!r||typeof r!="string"?0:Math.ceil(r.length/4)}function Ae(r){if(!Array.isArray(r))return 0;let e=0;for(let t of r){if(t.content&&typeof t.content=="string"&&(e+=$s(t.content)),t.tool_calls&&Array.isArray(t.tool_calls))for(let n of t.tool_calls)n.function&&(e+=$s(n.function.name||""),e+=$s(n.function.arguments||""));e+=4}return e}function zr(r,e){return!e||e<=0?0:r/e*100}function Ps(r,e,t=80){return zr(r,e)>=t}function Es(r,e,t){return`\u26A0\uFE0F Token usage warning: ${r.toLocaleString()} / ${e.toLocaleString()} tokens (${t.toFixed(1)}%)`}var Ms=y(()=>{});import _n from"chalk";var qr,rc=y(()=>{Ms();K();qr=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?Ae(e)/t>=this.options.threshold:!1}async compress(e,t,n){let o=Ae(e),s=e.length;k(`\u5F00\u59CB\u4E0A\u4E0B\u6587\u538B\u7F29: ${s} \u6761\u6D88\u606F, ${o} tokens`);let i=this.calculateDynamicWindowSize(e,t);h(`\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:o,compressedMessageCount:s,compressedTokenCount:o,compressionRatio:1,llmSummaryCount:0,heuristicSummaryCount:0}};let{summaryMessage:l,llmCount:p,heuristicCount:u}=await this.createCompressedSummary(a,n),g=[l,...c],m=Ae(g),f={originalMessageCount:s,originalTokenCount:o,compressedMessageCount:g.length,compressedTokenCount:m,compressionRatio:m/o,llmSummaryCount:p,heuristicSummaryCount:u};return this.logCompressionStats(f),{messages:g,stats:f}}calculateDynamicWindowSize(e,t){let o=Ae(e)/t,s;return o>=.9?(s=this.options.minKeepMessages,h("Token\u538B\u529B\u6781\u9AD8 (>=90%), \u4F7F\u7528\u6700\u5C0F\u7A97\u53E3")):o>=.85?(s=Math.floor(this.options.minKeepMessages+(this.options.maxKeepMessages-this.options.minKeepMessages)*.25),h("Token\u538B\u529B\u9AD8 (>=85%), \u4F7F\u7528\u8F83\u5C0F\u7A97\u53E3")):o>=.8?(s=Math.floor(this.options.minKeepMessages+(this.options.maxKeepMessages-this.options.minKeepMessages)*.5),h("Token\u538B\u529B\u4E2D\u7B49 (>=80%), \u4F7F\u7528\u4E2D\u7B49\u7A97\u53E3")):(s=this.options.maxKeepMessages,h("Token\u538B\u529B\u6B63\u5E38, \u4F7F\u7528\u6700\u5927\u7A97\u53E3")),Math.min(s,e.length)}async createCompressedSummary(e,t){let n=[],o=0,s=0,i=this.groupMessages(e);for(let c of i){let l=Ae(c),p=this.assessMessageImportance(c),u;this.options.useMixedSummary&&p==="important"&&l>=this.options.llmSummaryTokenThreshold&&t?(u=await this.generateLLMSummary(c,t),o++,h(`\u4F7F\u7528LLM\u6458\u8981 (${c.length}\u6761\u6D88\u606F, ${l} tokens)`)):(u=this.generateHeuristicSummary(c),s++,h(`\u4F7F\u7528\u542F\u53D1\u5F0F\u6458\u8981 (${c.length}\u6761\u6D88\u606F, ${l} tokens)`)),n.push(u)}return{summaryMessage:{role:"system",content:`[\u5386\u53F2\u4E0A\u4E0B\u6587\u6458\u8981]
|
|
1629
|
+
- 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
|
|
1630
|
+
|
|
1631
|
+
`;return s+=`**\u4EFB\u52A1 ID**: ${r.taskId}
|
|
1632
|
+
`,s+=`**\u5B8C\u6210\u6B65\u9AA4**: ${r.completedSteps}
|
|
1633
|
+
`,s+=`**\u6062\u590D\u8D77\u70B9**: \u6B65\u9AA4 ${r.resumedFrom}
|
|
1634
|
+
|
|
1635
|
+
`,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(),Ve)),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)
|
|
1636
|
+
`;r+=`${"\u2550".repeat(60)}
|
|
1637
|
+
|
|
1638
|
+
`;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}**
|
|
1639
|
+
`,r+=` \u72B6\u6001: ${l}
|
|
1640
|
+
`,r+=` \u6B65\u9AA4: ${c} \u4E2A
|
|
1641
|
+
`,r+=` \u7B56\u7565: ${i.strategy}
|
|
1642
|
+
`,r+=` \u521B\u5EFA\u65F6\u95F4: ${i.createdAt||"N/A"}
|
|
1643
|
+
`,r+=`
|
|
1644
|
+
`}}return r+=`
|
|
1645
|
+
\u{1F4A1} \u4F7F\u7528 todo(action="view", taskId="...") \u67E5\u770B\u8BE6\u60C5`,r+=`
|
|
1646
|
+
\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(),Ve)),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
|
|
1647
|
+
`;r+=`${"\u2550".repeat(60)}
|
|
1648
|
+
|
|
1649
|
+
`,r+=`**\u4EFB\u52A1 ID**: ${n.taskId}
|
|
1650
|
+
`,r+=`**\u521B\u5EFA\u65F6\u95F4**: ${n.createdAt||"N/A"}
|
|
1651
|
+
`,r+=`**\u66F4\u65B0\u65F6\u95F4**: ${n.updatedAt||"N/A"}
|
|
1652
|
+
`,r+=`**\u603B\u6B65\u9AA4\u6570**: ${n.tasks.length}
|
|
1653
|
+
`,r+=`**\u89C4\u5212\u7B56\u7565**: ${n.strategy}
|
|
1654
|
+
`,r+=`**\u5F53\u524D\u72B6\u6001**: ${n.status||"N/A"}
|
|
1655
|
+
|
|
1656
|
+
`,r+=`**\u6267\u884C\u6B65\u9AA4**:
|
|
1657
|
+
`,r+=`${"\u2500".repeat(60)}
|
|
1658
|
+
`;for(let i of n.tasks){let a=i.status==="completed"?"\u2705":i.status==="in_progress"?"\u23F3":i.status==="pending"?"\u{1F4CB}":"\u2753",c=i;r+=`${i.step}. ${a} ${i.description}
|
|
1659
|
+
`,r+=` \u667A\u80FD\u4F53: ${i.subAgent}
|
|
1660
|
+
`,r+=` \u72B6\u6001: ${i.status}
|
|
1661
|
+
`,c.startTime&&(r+=` \u5F00\u59CB: ${c.startTime}
|
|
1662
|
+
`),c.endTime&&(r+=` \u5B8C\u6210: ${c.endTime}
|
|
1663
|
+
`),c.duration&&(r+=` \u8017\u65F6: ${c.duration}ms
|
|
1664
|
+
`),c.error&&(r+=` \u9519\u8BEF: ${c.error}
|
|
1665
|
+
`),r+=`
|
|
1666
|
+
`}let s=n.tasks.find(i=>i.status!=="completed");return s?r+=`
|
|
1667
|
+
\u{1F4A1} \u4F7F\u7528 todo(action="resume", taskId="${e}", resumeFrom=${s.step}) \u4ECE\u6B65\u9AA4 ${s.step} \u7EE7\u7EED\u6267\u884C`:r+=`
|
|
1668
|
+
\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={};O(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:()=>Vt,thinkTool:()=>Wt,todo:()=>hr,todoTool:()=>yr});var Po=y(()=>{Xn();oi();nl();Ys();ol()});async function sl(o){return ai.execute(o)}var ii,ai,il,wx,al=y(()=>{U();ar();ii=class extends P{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.
|
|
1669
|
+
|
|
1670
|
+
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.
|
|
1671
|
+
|
|
1672
|
+
Typical use cases:
|
|
1673
|
+
- When you need to check what files have been modified recently
|
|
1674
|
+
- When you want to understand the scope of changes in the workspace
|
|
1675
|
+
- When you need to verify if certain files have been changed
|
|
1676
|
+
- 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={};O(ur,{AgentTools:()=>si,AskUserTool:()=>Xt,BaseTool:()=>P,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:()=>Vn,globTool:()=>Wn,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:()=>Vt,thinkTool:()=>Wt,todo:()=>hr,todoTool:()=>yr,toolInstances:()=>W,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 W,ci,Tp,kp,Re=y(()=>{ls();ls();Xr();Xr();Qr();Qr();eo();eo();Po();Po();lt();lt();Xr();Qr();eo();Po();al();lt();ar();W={think:Wt,plan:pr,todo:yr,askUser:fr,quickProjectScan:Kt,read:wn,write:kn,mkdir:rt,glob:Wn,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:Vt,plan:gr,todo:hr,askUser:mr,quickProjectScan:qt,read:vn,write:Tn,mkdir:bn,merge:Ln,glob:Vn,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=y(()=>{});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=y(()=>{K();Cr=class{client=null;config;connected=!1;tools=[];constructor(e){this.config={timeout:3e4,enabled:!0,...e}}async connect(){C(`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})),C(`Loaded ${this.tools.length} tools from ${this.config.name}`)}catch(e){throw C(`Failed to connect to MCP server ${this.config.name}: ${e.message}`),e}}async disconnect(){C(`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=y(()=>{ui()});function Zt(){return gi.getInstance()}var gi,pi=y(()=>{ui();K();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){H("MCP Manager already initialized");return}if($(`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(", ");C(`MCP Server Configurations: ${t}`)}for(let t of e){if(t.enabled===!1){C(`Skipping disabled MCP server: ${t.name}`);continue}try{C(`Attempting to connect to MCP server ${t.name} with URL: ${t.url||"N/A"}`),await this.connectToServer(t)}catch(n){Y(`Failed to connect to MCP server ${t.name}: ${n.message}`),C(`Error details for ${t.name}: ${n.message}
|
|
1677
|
+
${n.stack||""}`)}}this.initialized=!0,$(`MCP Manager initialized with ${this.clients.size} server(s) and ${this.mcpTools.size} tool(s)`)}async connectToServer(e){C(`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);$(`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)){H(`MCP tool ${t} already registered, skipping (using first registered)`);return}this.mcpTools.set(t,e),C(`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(){C("Disconnecting all MCP servers...");for(let[e,t]of this.clients.entries())try{await t.disconnect(),C(`Disconnected from MCP server: ${e}`)}catch(n){Y(`Error disconnecting from ${e}: ${n.message}`)}this.clients.clear(),this.mcpTools.clear(),this.initialized=!1,$("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=y(()=>{pi();U();Re();K();$o=class extends P{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){C(`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(`
|
|
1678
|
+
|
|
1679
|
+
`):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=y(()=>{cl();ll();pi();pl()});async function Mo(){if(mi){C("Tools already loaded, skipping");return}$("Loading tools..."),en={...W},dl={...ci};let o=Object.keys(W);$(`Loaded ${o.length} local tools`);let t=Zt().getAllTools();if(t.length===0){C("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]){C(`Skipping MCP tool ${a} (local tool has priority)`),i++;continue}en[a]=c,dl[a]=r[a],s++}$(`Added ${s} MCP tools, skipped ${i} (local priority)`),$(`Total tools available: ${Object.keys(en).length}`),mi=!0}function tn(){return en}function ml(){let o=Object.keys(W),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=y(()=>{Re();di();K();en={},dl={},mi=!1});var ri={};O(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=y(()=>{Re();xr();oi();Io=[W.think.getDefinition(),W.plan.getDefinition(),W.todo.getDefinition(),W.askUser.getDefinition(),W.quickProjectScan.getDefinition(),W.read.getDefinition(),W.write.getDefinition(),W.merge.getDefinition(),W.mkdir.getDefinition(),W.glob.getDefinition(),W.grep.getDefinition(),W.delete.getDefinition(),W.move.getDefinition(),W.copy.getDefinition(),W.searchReplace.getDefinition(),W.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=y(()=>{});import vr from"chalk";var Lo,yl=y(()=>{Ci();K();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;$(`\u5F00\u59CB\u4E0A\u4E0B\u6587\u538B\u7F29: ${s} \u6761\u6D88\u606F, ${r} tokens`);let i=this.calculateDynamicWindowSize(e,t);C(`\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 H("\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,C("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),C("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),C("Token\u538B\u529B\u4E2D\u7B49 (>=80%), \u4F7F\u7528\u4E2D\u7B49\u7A97\u53E3")):(s=this.options.maxKeepMessages,C("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++,C(`\u4F7F\u7528LLM\u6458\u8981 (${c.length}\u6761\u6D88\u606F, ${l} tokens)`)):(p=this.generateHeuristicSummary(c),s++,C(`\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]
|
|
1594
1680
|
\u4EE5\u4E0B\u662F\u4E4B\u524D\u7684\u5BF9\u8BDD\u6458\u8981,\u5DF2\u538B\u7F29\u4EE5\u8282\u7701token:
|
|
1595
1681
|
|
|
1596
1682
|
${n.join(`
|
|
@@ -1599,33 +1685,245 @@ ${n.join(`
|
|
|
1599
1685
|
|
|
1600
1686
|
`)}
|
|
1601
1687
|
|
|
1602
|
-
[\u6458\u8981\u7ED3\u675F]`},llmCount:
|
|
1603
|
-
`);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:
|
|
1604
|
-
\u2728 \u4E0A\u4E0B\u6587\u538B\u7F29\u5B8C\u6210`)),console.log(
|
|
1605
|
-
`))
|
|
1606
|
-
${
|
|
1607
|
-
`));let
|
|
1608
|
-
`))}else
|
|
1609
|
-
${
|
|
1610
|
-
`))}
|
|
1611
|
-
`)
|
|
1612
|
-
|
|
1613
|
-
|
|
1688
|
+
[\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(`
|
|
1689
|
+
`);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 H(`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(`
|
|
1690
|
+
\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
|
|
1691
|
+
`)),$(`\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},C(`\u538B\u7F29\u914D\u7F6E\u5DF2\u66F4\u65B0: ${JSON.stringify(this.options)}`)}getOptions(){return{...this.options}}}});var Gt={};O(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();C(`\u6A21\u578B\u8C03\u7528\u914D\u7F6E: useCompression=${s}, \u6A21\u578B=${e}, provider=${u.getProviderType()}`),s?C(`\u6B63\u5728\u4F7F\u7528\u8F7B\u91CF\u6A21\u578B: ${e}`):C(`\u6B63\u5728\u4F7F\u7528\u9ED8\u8BA4\u6A21\u578B: ${e}`),C(`\u5DE5\u5177\u6570\u91CF: ${i?i.length:0}`);let p=s?os():rs(),g=t,d=Ye(g),m=Ao(d,p),h=v=>(v/1e3).toFixed(1)+"k";if($(`\u4F7F\u7528\u6A21\u578B: ${e}, Token usage: ${h(d)} / ${h(p)} (${m.toFixed(1)}%)`),T.currentTaskId){let v=T.tasks.find(S=>S.id===T.currentTaskId);v&&(v.tokenCount=(v.tokenCount||0)+d)}if(l&&hi(d,p,80)){let v=yi(d,p,m);H(v),console.log(nn.yellow(`
|
|
1692
|
+
${v}`)),console.log(nn.cyan(`\u{1F504} \u6B63\u5728\u81EA\u52A8\u538B\u7F29\u4E0A\u4E0B\u6587...
|
|
1693
|
+
`));let S=new Lo(c);if(S.shouldCompress(g,p))try{let{messages:b,stats:L}=await S.compress(g,p,ee);g=b,d=L.compressedTokenCount,m=Ao(d,p),$(`\u538B\u7F29\u540EToken\u4F7F\u7528: ${d} / ${p} (${m.toFixed(1)}%)`)}catch(b){H(`\u4E0A\u4E0B\u6587\u538B\u7F29\u5931\u8D25: ${b instanceof Error?b.message:String(b)}`),console.log(nn.yellow(`\u26A0\uFE0F \u4E0A\u4E0B\u6587\u538B\u7F29\u5931\u8D25,\u5C06\u4F7F\u7528\u539F\u59CB\u6D88\u606F\u7EE7\u7EED\u6267\u884C
|
|
1694
|
+
`))}else C("\u5F53\u524D\u4E0D\u6EE1\u8DB3\u538B\u7F29\u6761\u4EF6,\u8DF3\u8FC7\u538B\u7F29")}else if(hi(d,p,80)){let v=yi(d,p,m);H(v),console.log(nn.yellow(`
|
|
1695
|
+
${v}`)),console.log(nn.yellow(`Consider archiving old messages or starting a new session.
|
|
1696
|
+
`))}C(`\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,x=10,k=1e4,f=0;for(;f<=x;)try{w=await u.callModel({model:e,messages:g,temperature:n,max_tokens:r,tools:i,tool_choice:a});break}catch(v){let S=v instanceof Error?v.message:String(v);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<x)f++,H(`API\u901F\u7387\u9650\u5236(429), \u6B63\u5728\u91CD\u8BD5... (${f}/${x}) \u7B49\u5F85 ${k/1e3}\u79D2`),console.log(nn.yellow(`\u26A0\uFE0F API\u901F\u7387\u9650\u5236, \u6B63\u5728\u91CD\u8BD5... (${f}/${x}) \u7B49\u5F85 ${k/1e3}\u79D2
|
|
1697
|
+
`)),await new Promise(L=>setTimeout(L,k));else throw Y(`\u8C03\u7528\u6A21\u578BAPI\u65F6\u53D1\u751F\u9519\u8BEF: ${S}`),v instanceof Error&&v.stack&&C(`\u9519\u8BEF\u5806\u6808: ${v.stack}`),v}if(!w)throw Y("\u6A21\u578B\u8FD4\u56DE undefined \u6216 null"),new Error("\u6A21\u578BAPI\u8FD4\u56DE\u7A7A\u54CD\u5E94");if(!w.choices)throw Y(`\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 Y(`\u6A21\u578B\u8FD4\u56DE\u7A7A\u7684choices\u6570\u7EC4: ${JSON.stringify(w)}`),new Error("\u6A21\u578BAPI\u8FD4\u56DE\u7684choices\u4E3A\u7A7A");return C(`\u6A21\u578B\u8FD4\u56DE: ${JSON.stringify(w)}`),w}function Ip(){return"You are a helpful assistant."}var ve=y(()=>{le();ia();Ne();Ht();K();Ci();yl()});import*as pe from"fs";import*as Xe from"path";var xi,Cl=y(()=>{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
|
|
1698
|
+
|
|
1699
|
+
## \u8F93\u51FA\u8981\u6C42
|
|
1700
|
+
|
|
1701
|
+
- **\u603B\u7ED3\u578B\u63CF\u8FF0**\uFF1A\u4F60\u7684\u8F93\u51FA\u5FC5\u987B\u662F\u7CBE\u7B80\u3001\u7ED3\u6784\u5316\u7684\u603B\u7ED3\uFF0C\u9002\u5408\u4F5C\u4E3A\u52A8\u6001\u63D0\u793A\u8BCD\u4F5C\u7528\u4E8E\u540E\u7EED\u5185\u5BB9
|
|
1702
|
+
- **\u4FBF\u4E8E\u6A21\u578B\u7406\u89E3**\uFF1A\u6E05\u6670\u63CF\u8FF0\u9879\u76EE\u7684\u6838\u5FC3\u7ED3\u6784\u3001\u4E3B\u8981\u6280\u672F\u6808\u548C\u5173\u952E\u6A21\u5757
|
|
1703
|
+
- **\u4FBF\u4E8E\u68C0\u7D22**\uFF1A\u4F7F\u7528\u660E\u786E\u7684\u5173\u952E\u8BCD\u548C\u5C42\u6B21\u7ED3\u6784\uFF0C\u65B9\u4FBF\u76EE\u5F55\u57FA\u4E8E\u6B64\u5185\u5BB9\u8F85\u52A9\u68C0\u7D22
|
|
1704
|
+
- **\u91CD\u70B9\u7A81\u51FA**\uFF1A\u4F18\u5148\u5448\u73B0\u9879\u76EE\u7684\u6838\u5FC3\u67B6\u6784\u3001\u4E3B\u8981\u529F\u80FD\u548C\u5173\u952E\u6587\u4EF6
|
|
1705
|
+
|
|
1706
|
+
## \u53EF\u7528\u5DE5\u5177
|
|
1707
|
+
|
|
1708
|
+
1. **quickProjectScan()** - \u5FEB\u901F\u626B\u63CF\u5E76\u751F\u6210\u5B8C\u6574\u7684\u9879\u76EE\u4FE1\u606F
|
|
1709
|
+
- \u81EA\u52A8\u626B\u63CF\u6240\u6709\u6587\u4EF6
|
|
1710
|
+
- \u5206\u6790\u76EE\u5F55\u7ED3\u6784
|
|
1711
|
+
- \u68C0\u6D4B\u7F16\u7A0B\u8BED\u8A00
|
|
1712
|
+
- \u751F\u6210 \`.nium/project/project.json\` \u6587\u4EF6
|
|
1713
|
+
- \u63A8\u8350\u7528\u4E8E\uFF1A\u9996\u6B21\u63A2\u7D22\u3001\u751F\u6210\u9879\u76EE\u4FE1\u606F
|
|
1714
|
+
|
|
1715
|
+
2. **glob(pattern)** - \u6309\u6A21\u5F0F\u641C\u7D22\u6587\u4EF6
|
|
1716
|
+
- \u4F8B\u5982\uFF1A\`glob('**/*.js')\` \u67E5\u627E\u6240\u6709 JS \u6587\u4EF6
|
|
1717
|
+
- \u4F8B\u5982\uFF1A\`glob('src/**/*')\` \u67E5\u627E src \u76EE\u5F55\u4E0B\u6240\u6709\u6587\u4EF6
|
|
1718
|
+
|
|
1719
|
+
3. **grep(pattern, path)** - \u5728\u6587\u4EF6\u4E2D\u641C\u7D22\u5185\u5BB9
|
|
1720
|
+
- \u4F8B\u5982\uFF1A\`grep('export.*API', 'src')\` \u67E5\u627E API \u5BFC\u51FA
|
|
1721
|
+
|
|
1722
|
+
4. **read(path)** - \u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9
|
|
1723
|
+
- \u7528\u4E8E\u6DF1\u5165\u4E86\u89E3\u5173\u952E\u6587\u4EF6
|
|
1724
|
+
|
|
1725
|
+
## \u5DE5\u4F5C\u7B56\u7565
|
|
1726
|
+
|
|
1727
|
+
### \u573A\u666F 1\uFF1A\u7528\u6237\u8981\u6C42\u63A2\u7D22\u9879\u76EE\u6216\u751F\u6210\u9879\u76EE\u4FE1\u606F
|
|
1728
|
+
|
|
1729
|
+
**\u7B56\u7565\uFF1A\u4F7F\u7528\u5FEB\u901F\u626B\u63CF**
|
|
1730
|
+
|
|
1731
|
+
1. \u76F4\u63A5\u8C03\u7528 \`quickProjectScan()\` \u5DE5\u5177
|
|
1732
|
+
2. \u5DE5\u5177\u4F1A\u81EA\u52A8\u5B8C\u6210\u6240\u6709\u626B\u63CF\u548C\u4FE1\u606F\u6536\u96C6
|
|
1733
|
+
3. \u751F\u6210\u7CBE\u7B80\u7684\u603B\u7ED3\u578B\u63CF\u8FF0\uFF0C\u5305\u62EC\uFF1A
|
|
1734
|
+
- \u9879\u76EE\u540D\u79F0\u548C\u7248\u672C
|
|
1735
|
+
- \u4E3B\u8981\u6280\u672F\u6808
|
|
1736
|
+
- \u6838\u5FC3\u76EE\u5F55\u7ED3\u6784
|
|
1737
|
+
- \u4E3B\u8981\u529F\u80FD\u6A21\u5757
|
|
1738
|
+
- \u5173\u952E\u5165\u53E3\u6587\u4EF6
|
|
1739
|
+
|
|
1740
|
+
### \u573A\u666F 2\uFF1A\u7528\u6237\u63D0\u51FA\u5177\u4F53\u95EE\u9898\uFF08\u5982\u524D\u7AEF\u4EE3\u7801\u5728\u54EA\u91CC\uFF1F\uFF09
|
|
1741
|
+
|
|
1742
|
+
**\u7B56\u7565\uFF1A\u4F7F\u7528\u5DE5\u5177\u7EC4\u5408\u8FDB\u884C\u667A\u80FD\u5206\u6790**
|
|
1743
|
+
|
|
1744
|
+
1. \u4F7F\u7528 \`glob()\` \u641C\u7D22\u76F8\u5173\u6587\u4EF6
|
|
1745
|
+
2. \u5FC5\u8981\u65F6\u4F7F\u7528 \`read()\` \u8BFB\u53D6\u5173\u952E\u6587\u4EF6
|
|
1746
|
+
3. \u751F\u6210\u9488\u5BF9\u6027\u7684\u603B\u7ED3\u63CF\u8FF0\uFF0C\u76F4\u63A5\u56DE\u7B54\u7528\u6237\u95EE\u9898
|
|
1747
|
+
|
|
1748
|
+
### \u573A\u666F 3\uFF1A\u7528\u6237\u8981\u6C42\u63A2\u7D22\u5E76\u5206\u6790\u67D0\u4E2A\u65B9\u9762
|
|
1749
|
+
|
|
1750
|
+
**\u7B56\u7565\uFF1A\u6DF7\u5408\u4F7F\u7528**
|
|
1751
|
+
|
|
1752
|
+
1. \u5148\u8C03\u7528 \`quickProjectScan()\` \u83B7\u53D6\u6574\u4F53\u7ED3\u6784
|
|
1753
|
+
2. \u518D\u4F7F\u7528\u5176\u4ED6\u5DE5\u5177\u6DF1\u5165\u5206\u6790\u7279\u5B9A\u65B9\u9762
|
|
1754
|
+
3. \u6574\u5408\u4FE1\u606F\u5E76\u751F\u6210\u7ED3\u6784\u5316\u7684\u603B\u7ED3\u63CF\u8FF0
|
|
1755
|
+
|
|
1756
|
+
## \u793A\u4F8B\u8F93\u51FA\u683C\u5F0F
|
|
1757
|
+
|
|
1758
|
+
# \u9879\u76EE\u7ED3\u6784\u603B\u7ED3
|
|
1759
|
+
|
|
1760
|
+
## \u9879\u76EE\u6982\u89C8
|
|
1761
|
+
- \u540D\u79F0\uFF1Axxx
|
|
1762
|
+
- \u7248\u672C\uFF1Axxx
|
|
1763
|
+
- \u4E3B\u8981\u8BED\u8A00\uFF1Axxx
|
|
1764
|
+
- \u6784\u5EFA\u5DE5\u5177\uFF1Axxx
|
|
1765
|
+
|
|
1766
|
+
## \u6838\u5FC3\u76EE\u5F55\u7ED3\u6784
|
|
1767
|
+
- src/\uFF1A\u6E90\u4EE3\u7801\u76EE\u5F55
|
|
1768
|
+
- agent/\uFF1A\u667A\u80FD\u4F53\u76F8\u5173\u4EE3\u7801
|
|
1769
|
+
- tools/\uFF1A\u5DE5\u5177\u51FD\u6570
|
|
1770
|
+
- config/\uFF1A\u914D\u7F6E\u6587\u4EF6
|
|
1771
|
+
- test/\uFF1A\u6D4B\u8BD5\u6587\u4EF6\u76EE\u5F55
|
|
1772
|
+
- docs/\uFF1A\u6587\u6863\u76EE\u5F55
|
|
1773
|
+
|
|
1774
|
+
## \u4E3B\u8981\u529F\u80FD\u6A21\u5757
|
|
1775
|
+
1. \u667A\u80FD\u4F53\u7CFB\u7EDF\uFF1A\u5B9E\u73B0\u4E86 ReAct \u5FAA\u73AF\u548C\u4EFB\u52A1\u89C4\u5212
|
|
1776
|
+
2. \u5DE5\u5177\u7CFB\u7EDF\uFF1A\u63D0\u4F9B\u4E86\u6587\u4EF6\u64CD\u4F5C\u3001\u4EE3\u7801\u641C\u7D22\u7B49\u529F\u80FD
|
|
1777
|
+
3. \u4E0A\u4E0B\u6587\u7BA1\u7406\uFF1A\u667A\u80FD\u7BA1\u7406\u5BF9\u8BDD\u4E0A\u4E0B\u6587
|
|
1778
|
+
|
|
1779
|
+
## \u5173\u952E\u6587\u4EF6
|
|
1780
|
+
- src/main.ts\uFF1A\u9879\u76EE\u4E3B\u5165\u53E3
|
|
1781
|
+
- src/config/index.ts\uFF1A\u914D\u7F6E\u7BA1\u7406
|
|
1782
|
+
- src/agent/react-agent.ts\uFF1AReAct \u667A\u80FD\u4F53\u5B9E\u73B0
|
|
1783
|
+
|
|
1784
|
+
## \u6280\u672F\u6808
|
|
1785
|
+
- \u4E3B\u8981\u8BED\u8A00\uFF1ATypeScript
|
|
1786
|
+
- \u8FD0\u884C\u65F6\uFF1ANode.js
|
|
1787
|
+
- \u6838\u5FC3\u4F9D\u8D56\uFF1Axxx
|
|
1788
|
+
|
|
1789
|
+
## \u6838\u5FC3\u539F\u5219
|
|
1790
|
+
|
|
1791
|
+
1. **\u9AD8\u6548\u4F18\u5148**\uFF1A\u5BF9\u4E8E\u6807\u51C6\u7684\u63A2\u7D22\u8BF7\u6C42\uFF0C\u4F18\u5148\u4F7F\u7528 \`quickProjectScan()\`
|
|
1792
|
+
2. **\u7CBE\u51C6\u56DE\u7B54**\uFF1A\u5BF9\u4E8E\u5177\u4F53\u95EE\u9898\uFF0C\u4F7F\u7528\u6700\u5408\u9002\u7684\u5DE5\u5177\u7EC4\u5408
|
|
1793
|
+
3. **\u6DF1\u5EA6\u5206\u6790**\uFF1A\u5FC5\u8981\u65F6\u6DF1\u5165\u8BFB\u53D6\u548C\u5206\u6790\u5173\u952E\u4EE3\u7801\u6587\u4EF6
|
|
1794
|
+
4. **\u6E05\u6670\u8868\u8FBE**\uFF1A\u4EE5\u7ED3\u6784\u5316\u3001\u6613\u61C2\u7684\u65B9\u5F0F\u5448\u73B0\u5206\u6790\u7ED3\u679C
|
|
1795
|
+
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
|
|
1796
|
+
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
|
|
1797
|
+
|
|
1798
|
+
> \u751F\u6210\u65F6\u95F4: ${new Date().toLocaleString("zh-CN",{timeZone:"Asia/Shanghai"})}
|
|
1799
|
+
> \u751F\u6210\u5DE5\u5177: Explorer Agent
|
|
1800
|
+
|
|
1801
|
+
---
|
|
1802
|
+
|
|
1803
|
+
${o}
|
|
1804
|
+
|
|
1805
|
+
---
|
|
1806
|
+
|
|
1807
|
+
*\u6B64\u6587\u6863\u7531 Explorer Agent \u81EA\u52A8\u751F\u6210\uFF0C\u8BB0\u5F55\u4E86\u9879\u76EE\u7ED3\u6784\u5206\u6790\u7ED3\u679C\u3002*
|
|
1808
|
+
`;if(!pe.existsSync(r))pe.writeFileSync(r,s,"utf-8"),console.log(`
|
|
1809
|
+
\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
|
|
1810
|
+
|
|
1811
|
+
## \u5F53\u524D\u6587\u4EF6\u5185\u5BB9
|
|
1812
|
+
${pe.readFileSync(r,"utf-8")}
|
|
1813
|
+
|
|
1814
|
+
## \u65B0\u751F\u6210\u5185\u5BB9
|
|
1815
|
+
${s}
|
|
1816
|
+
|
|
1817
|
+
## \u5408\u5E76\u8981\u6C42
|
|
1818
|
+
\u8BF7\u6839\u636E\u4EE5\u4E0B\u539F\u5219\u5408\u5E76\u8FD9\u4E24\u4E2A\u5185\u5BB9\uFF1A
|
|
1819
|
+
1. \u4FDD\u7559\u6700\u65B0\u7684\u751F\u6210\u65F6\u95F4\u548C\u5DE5\u5177\u4FE1\u606F
|
|
1820
|
+
2. \u5408\u5E76\u9879\u76EE\u7ED3\u6784\u63CF\u8FF0\uFF0C\u4FDD\u7559\u66F4\u8BE6\u7EC6\u7684\u4FE1\u606F
|
|
1821
|
+
3. \u5408\u5E76\u6280\u672F\u6808\u4FE1\u606F\uFF0C\u53BB\u9664\u91CD\u590D\u5185\u5BB9
|
|
1822
|
+
4. \u5408\u5E76\u6838\u5FC3\u6A21\u5757\u5206\u6790\uFF0C\u4FDD\u7559\u6240\u6709\u6709\u7528\u4FE1\u606F
|
|
1823
|
+
5. \u786E\u4FDD\u5408\u5E76\u540E\u7684\u6587\u6863\u7ED3\u6784\u6E05\u6670\uFF0C\u4FBF\u4E8E\u9605\u8BFB\u548C\u68C0\u7D22
|
|
1824
|
+
6. \u4FDD\u6301\u8F93\u51FA\u4E3A\u7CBE\u7B80\u7684\u603B\u7ED3\u578B\u63CF\u8FF0\uFF0C\u9002\u5408\u4F5C\u4E3A\u52A8\u6001\u63D0\u793A\u8BCD
|
|
1825
|
+
`;pe.writeFileSync(c,l,"utf-8"),console.log(`
|
|
1826
|
+
\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
|
|
1827
|
+
|
|
1828
|
+
${l}
|
|
1829
|
+
|
|
1830
|
+
\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=y(()=>{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
|
|
1831
|
+
|
|
1832
|
+
## \u6838\u5FC3\u89C4\u5219
|
|
1833
|
+
|
|
1834
|
+
1. **\u6587\u6863\u641C\u7D22\u7B56\u7565**\uFF1A
|
|
1835
|
+
- \u4F18\u5148\u4F7F\u7528search-docs\u5DE5\u5177\u8FDB\u884C\u6587\u6863\u641C\u7D22
|
|
1836
|
+
- \u652F\u6301\u5173\u952E\u8BCD\u641C\u7D22\u548C\u6B63\u5219\u8868\u8FBE\u5F0F
|
|
1837
|
+
- \u53EF\u4EE5\u6307\u5B9A\u641C\u7D22\u8DEF\u5F84\u548C\u6700\u5927\u8FD4\u56DE\u7ED3\u679C\u6570
|
|
1838
|
+
- \u7ED3\u679C\u6309\u76F8\u5173\u6027\u6392\u5E8F
|
|
1839
|
+
|
|
1840
|
+
2. **\u641C\u7D22\u7ED3\u679C\u5904\u7406**\uFF1A
|
|
1841
|
+
- \u63D0\u53D6\u76F8\u5173\u6587\u6863\u5185\u5BB9
|
|
1842
|
+
- \u8FC7\u6EE4\u65E0\u5173\u4FE1\u606F
|
|
1843
|
+
- \u6574\u7406\u548C\u683C\u5F0F\u5316\u641C\u7D22\u7ED3\u679C
|
|
1844
|
+
- \u63D0\u4F9B\u6E05\u6670\u7684\u5F15\u7528\u548C\u6765\u6E90
|
|
1845
|
+
|
|
1846
|
+
3. **\u6587\u6863\u7D22\u5F15\u7BA1\u7406**\uFF1A
|
|
1847
|
+
- \u5B9A\u671F\u66F4\u65B0\u6587\u6863\u7D22\u5F15
|
|
1848
|
+
- \u786E\u4FDD\u7D22\u5F15\u4E0E\u5B9E\u9645\u6587\u6863\u540C\u6B65
|
|
1849
|
+
- \u4F7F\u7528build-doc-index\u5DE5\u5177\u6784\u5EFA\u548C\u66F4\u65B0\u7D22\u5F15
|
|
1850
|
+
|
|
1851
|
+
4. **\u641C\u7D22\u4F18\u5316**\uFF1A
|
|
1852
|
+
- \u5206\u6790\u7528\u6237\u67E5\u8BE2\u610F\u56FE
|
|
1853
|
+
- \u4F18\u5316\u641C\u7D22\u5173\u952E\u8BCD
|
|
1854
|
+
- \u8C03\u6574\u641C\u7D22\u8303\u56F4
|
|
1855
|
+
- \u63D0\u4F9B\u76F8\u5173\u641C\u7D22\u5EFA\u8BAE
|
|
1856
|
+
|
|
1857
|
+
## \u5DE5\u4F5C\u6D41\u7A0B
|
|
1858
|
+
|
|
1859
|
+
1. **\u63A5\u6536\u67E5\u8BE2**\uFF1A\u7406\u89E3\u7528\u6237\u7684\u641C\u7D22\u9700\u6C42
|
|
1860
|
+
2. **\u6784\u5EFA\u641C\u7D22**\uFF1A\u6839\u636E\u9700\u6C42\u6784\u5EFA\u5408\u9002\u7684\u641C\u7D22\u67E5\u8BE2
|
|
1861
|
+
3. **\u6267\u884C\u641C\u7D22**\uFF1A\u4F7F\u7528search-docs\u5DE5\u5177\u6267\u884C\u641C\u7D22
|
|
1862
|
+
4. **\u5904\u7406\u7ED3\u679C**\uFF1A\u6574\u7406\u548C\u8FC7\u6EE4\u641C\u7D22\u7ED3\u679C
|
|
1863
|
+
5. **\u8FD4\u56DE\u5185\u5BB9**\uFF1A\u63D0\u4F9B\u76F8\u5173\u6587\u6863\u5185\u5BB9\u548C\u5F15\u7528
|
|
1864
|
+
6. **\u7D22\u5F15\u7BA1\u7406**\uFF1A\u5B9A\u671F\u66F4\u65B0\u6587\u6863\u7D22\u5F15\uFF08\u5982\u679C\u9700\u8981\uFF09
|
|
1865
|
+
|
|
1866
|
+
## \u5DE5\u5177\u4F7F\u7528\u6307\u5357
|
|
1867
|
+
|
|
1868
|
+
1. **\u641C\u7D22\u6587\u6863**\uFF1A
|
|
1869
|
+
- \u4F7F\u7528search-docs\u5DE5\u5177\u8FDB\u884C\u6587\u6863\u641C\u7D22
|
|
1870
|
+
- \u53C2\u6570\uFF1A
|
|
1871
|
+
- query: \u641C\u7D22\u67E5\u8BE2\u5B57\u7B26\u4E32
|
|
1872
|
+
- path: \u6587\u6863\u8DEF\u5F84\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4.niums/docs\uFF09
|
|
1873
|
+
- maxResults: \u6700\u5927\u8FD4\u56DE\u7ED3\u679C\u6570\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA410\uFF09
|
|
1874
|
+
|
|
1875
|
+
2. **\u6784\u5EFA\u7D22\u5F15**\uFF1A
|
|
1876
|
+
- \u4F7F\u7528build-doc-index\u5DE5\u5177\u6784\u5EFA\u548C\u66F4\u65B0\u6587\u6863\u7D22\u5F15
|
|
1877
|
+
- \u53C2\u6570\uFF1A
|
|
1878
|
+
- path: \u6587\u6863\u8DEF\u5F84\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4.niums/docs\uFF09
|
|
1879
|
+
|
|
1880
|
+
3. **\u8BFB\u53D6\u6587\u6863**\uFF1A
|
|
1881
|
+
- \u4F7F\u7528read\u5DE5\u5177\u8BFB\u53D6\u5B8C\u6574\u6587\u6863\u5185\u5BB9
|
|
1882
|
+
- \u53C2\u6570\uFF1A
|
|
1883
|
+
- path: \u6587\u6863\u8DEF\u5F84
|
|
1884
|
+
|
|
1885
|
+
## \u641C\u7D22\u6280\u5DE7
|
|
1886
|
+
|
|
1887
|
+
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' })"
|
|
1888
|
+
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' })"
|
|
1889
|
+
3. **\u6307\u5B9A\u8DEF\u5F84**\uFF1A\u5728\u7279\u5B9A\u76EE\u5F55\u4E0B\u641C\u7D22\uFF0C\u5982"search-docs({ query: 'config', path: '.niums/docs/config' })"
|
|
1890
|
+
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 })"
|
|
1891
|
+
|
|
1892
|
+
## \u7ED3\u679C\u5448\u73B0
|
|
1893
|
+
|
|
1894
|
+
1. **\u6E05\u6670\u5F15\u7528**\uFF1A\u6BCF\u4E2A\u641C\u7D22\u7ED3\u679C\u90FD\u8981\u5305\u542B\u6587\u6863\u8DEF\u5F84\u548C\u6765\u6E90
|
|
1895
|
+
2. **\u76F8\u5173\u5185\u5BB9**\uFF1A\u53EA\u8FD4\u56DE\u4E0E\u67E5\u8BE2\u76F8\u5173\u7684\u5185\u5BB9\u7247\u6BB5
|
|
1896
|
+
3. **\u4E0A\u4E0B\u6587\u4FE1\u606F**\uFF1A\u63D0\u4F9B\u8DB3\u591F\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF0C\u4FBF\u4E8E\u7406\u89E3
|
|
1897
|
+
4. **\u683C\u5F0F\u5316\u8F93\u51FA**\uFF1A\u4F7F\u7528\u6E05\u6670\u7684\u683C\u5F0F\u5448\u73B0\u641C\u7D22\u7ED3\u679C
|
|
1898
|
+
|
|
1899
|
+
## \u7279\u522B\u6CE8\u610F
|
|
1900
|
+
|
|
1901
|
+
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
|
|
1902
|
+
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
|
|
1903
|
+
3. **\u7ED3\u679C\u51C6\u786E\u6027**\uFF1A\u786E\u4FDD\u641C\u7D22\u7ED3\u679C\u51C6\u786E\u53CD\u6620\u7528\u6237\u9700\u6C42
|
|
1904
|
+
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=y(()=>{ea();Cl();xl();Ap={[ts.name]:ts,[xi.name]:xi,[Si.name]:Si}});var Qc={};O(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=y(()=>{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(`
|
|
1905
|
+
`);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(`
|
|
1906
|
+
`),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 B 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&&T.messages&&T.messages.length>0)Z(`Resuming existing session: ${T.sessionId}`),r=T.messages,Qe(`\u6062\u590D\u4F1A\u8BDD [ID:${T.sessionId.substring(0,8)}]: ${T.currentTask}`),hn(B.green(`\u4ECE ${T.updatedAt} \u6062\u590D\u4E4B\u524D\u7684\u4F1A\u8BDD [ID:${T.sessionId.substring(0,8)}]`),t),G(B.gray(`\u4E4B\u524D\u7684\u4EFB\u52A1: ${T.currentTask}`),t),T.tasks&&T.tasks.length>0&&G(B.gray(`\u4F1A\u8BDD\u4E2D\u4EFB\u52A1\u6570\u91CF: ${T.tasks.length}`),t),G("",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}
|
|
1907
|
+
|
|
1908
|
+
${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 x=await s.injectAnchors({taskDescription:o||T.currentTask,iterations:a,messages:r,lastSemanticCheckIteration:l,session:t,logWarning:Ct,callModelAPI:ee}),{messages:k,lastSemanticCheckIteration:f}=x;r=k,l=f}ce(r);let u=ye();t&&G(B.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 x=`\u6A21\u578B\u8FD4\u56DE\u65E0\u6548\u54CD\u5E94: ${JSON.stringify(p)}`;throw he(x),new Error(x)}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(x){he(`Error in finalAnswerCallback: ${x}`)}hn(B.green(`
|
|
1909
|
+
\u6700\u7EC8\u7B54\u6848:`),t),G(B.white(h),t),G("",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}G(B.magenta(`\u{1F4AD} \u601D\u8003: ${h}`),t),G("",t)}if(w&&w.length>0){let x=w[0],k=x.function.name,f=x.function.arguments;Z(`Tool call: ${k} with args: ${f}`);let v;try{v=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(k)){let M=v.thought||"";G(B.magenta(`\u601D\u8003: ${M}`),t),G("",t),r.push({role:"assistant",content:h||null,tool_calls:[x]}),r.push({role:"tool",tool_call_id:x.id,content:"Noted. Continue."});continue}if(Qs(k)){let M=Zs(x);if(M){let{answer:I,success:q}=M;if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(I)}catch(J){he(`Error in finalAnswerCallback: ${J}`)}let Q=q?"\u2705":"\u26A0\uFE0F";hn(B.green(`
|
|
1910
|
+
${Q} \u4EFB\u52A1\u5B8C\u6210 (\u901A\u8FC7 finish \u5DE5\u5177):`),t),G(B.white(I),t),G("",t),r.push({role:"assistant",content:h||null,tool_calls:[x]}),r.push({role:"tool",tool_call_id:x.id,content:"Task completed successfully."}),r.push({role:"assistant",content:I}),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 b=tn()[k];if(!b){let M=`Unknown tool: ${k}`;he(M),r.push({role:"assistant",content:h||null,tool_calls:[x]}),r.push({role:"tool",tool_call_id:x.id,content:M});continue}let L=b.formatAction(v);G(B.cyan(`\u884C\u52A8: ${L}`),t),G("",t);try{let M=!1;if(k==="shell"&&b&&typeof b.getDynamicDefinition=="function"?M=b.getDynamicDefinition(v).requiresConfirmation||!1:M=Qn().find(te=>te.name===k)?.requiresConfirmation||!1,M&&!await Op(k,v,t)){let te=`\u5DE5\u5177\u6267\u884C\u5DF2\u53D6\u6D88: ${k}`;Qe(te),Ct(B.yellow(`\u26A0 ${te}`),t),G(B.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:[x]}),r.push({role:"tool",tool_call_id:x.id,content:"Execution cancelled by user"});continue}Z(`\u6267\u884C\u5DE5\u5177: ${k}(${JSON.stringify(v)})`);let I=await Promise.resolve(b.execute(v));Z(`\u5DE5\u5177 ${k} \u6267\u884C\u5B8C\u6210`);let q=xn(I),Q=b?b.shouldPrintObservation(I):!0,R=`${b?b.formatObservation(I):String(I)}`;Q&&(G(B.yellow(`\u{1F4CA} \u89C2\u5BDF: ${R}`),t),G("",t)),r.push({role:"assistant",content:h||null,tool_calls:[x]}),r.push({role:"tool",tool_call_id:x.id,content:String(q)})}catch(M){let I=`\u5DE5\u5177\u6267\u884C\u9519\u8BEF: ${k} - ${M.message}`;he(I,t),G("",t),r.push({role:"assistant",content:h||null,tool_calls:[x]}),r.push({role:"tool",tool_call_id:x.id,content:`Error: ${I}`}),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?B.yellow(`\u26A0 \u786E\u8BA4\u6267\u884C ${o}(${i})\uFF1F\u6B64\u64CD\u4F5C\u53EF\u80FD\u65E0\u6CD5\u64A4\u9500\u3002`):B.yellow(`\u26A0 Confirm execution of ${o}(${i})? This action may be irreversible.`);console.log(""),console.log(d),console.log(""),console.log(B.cyan("\u8BF7\u9009\u62E9 (\u4F7F\u7528\u4E0A\u4E0B\u7BAD\u5934\u952E\uFF0CEnter\u786E\u8BA4):")),console.log(""),s.forEach((m,h)=>{let w=h===r,x=w?B.green("> "):" ",k=w?B.green.bold(m.text):B.white(m.text);console.log(`${x}${k}`)}),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=y(()=>{le();ve();it();Re();xr();Xn();wo();Ne();Ht();cr();Us();Eo();lt();ar();K()});import _ from"chalk";async function wl(o,e=!1,t=null,n={}){await new wr(t,n).executeTask(o,e)}var wr,bl=y(()=>{ko();$e();vi();it();Ne();K();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.orchestratorContext=new We,this.progressiveDisclosure=new ze(this.orchestratorContext),this.workerContextBuilder=new He(this.orchestratorContext,this.progressiveDisclosure),this.summaryExtractor=new Je,this.options={useLLMDisclosure:t.useLLMDisclosure!==void 0?t.useLLMDisclosure:!0,useLLMSummary:t.useLLMSummary!==void 0?t.useLLMSummary:!0,verbose:t.verbose||!1}}log(e){this.session?this.session.log(e):console.log(e)}info(e){this.session?this.session.info(e):console.log(_.blue(e))}success(e){this.session?this.session.success(e):console.log(_.green(e))}warning(e){this.session?this.session.warning(e):console.log(_.yellow(e))}error(e){this.session?this.session.error(e):console.log(_.red(e))}async executeTask(e,t=!1){try{if(C("MasterAgent.executeTask called"),t){C("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(),Ve));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(_.gray("\u2550\u2550\u2550 \u5168\u5C40\u4E0A\u4E0B\u6587\u6458\u8981 \u2550\u2550\u2550")),this.log(_.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(_.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(_.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")){C("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(""),$("\u5DF2\u81EA\u52A8\u751F\u6210 project.json")}catch(e){C(`\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,$("\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+=`
|
|
1614
1911
|
|
|
1615
1912
|
---
|
|
1616
1913
|
|
|
1617
|
-
`),
|
|
1914
|
+
`),r+=`## \u9879\u76EE\u5173\u952E\u4FE1\u606F
|
|
1618
1915
|
|
|
1619
|
-
`;try{let l=JSON.parse(c)
|
|
1916
|
+
`;try{let l=JSON.parse(c),u=this.extractProjectKeySummary(l);r+=u,$("\u5DF2\u52A0\u8F7D\u9879\u76EE\u5173\u952E\u4FE1\u606F\u6458\u8981")}catch{r+=c,C("\u89E3\u6790\u9879\u76EE\u7ED3\u6784JSON\u5931\u8D25\uFF0C\u4F7F\u7528\u539F\u59CB\u5185\u5BB9")}}r&&this.orchestratorContext.updateSharedState("rules",r)}catch{C("\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)}C("\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(_.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 x=await s({model:r(),messages:m,temperature:.1,tools:u()}),k=x.choices[0].message.tool_calls;if(x.choices[0].finish_reason==="stop"){let{content:R}=x.choices[0].message;if(R&&R.trim()){if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(R,n)}catch(oe){Y(`Error in finalAnswerCallback: ${oe}`)}this.log(_.green("\u4EFB\u52A1\u5B8C\u6210:")),this.log(R),this.log("")}break}if(!k||k.length===0){let{content:R}=x.choices[0].message;if(R&&R.trim()){if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(R,n)}catch(oe){Y(`Error in finalAnswerCallback: ${oe}`)}this.log(_.green("\u4EFB\u52A1\u5B8C\u6210:")),this.log(R),this.log(""),m.push({role:"assistant",content:R});break}continue}let f=k[0],v=f.function.name,S;try{S=JSON.parse(f.function.arguments),this.log(_.gray(`[DEBUG] Tool: ${v}`)),this.log(_.gray(`[DEBUG] Raw arguments: ${f.function.arguments.substring(0,200)}${f.function.arguments.length>200?"...":""}`)),this.log(_.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(v)){let R=a(f);R&&(this.log(_.cyan(`\u{1F4AD} Think: ${R}`)),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(v)){let R=l(f);if(R){let{answer:oe,success:te}=R;if(n?.finalAnswerCallback)try{await n.finalAnswerCallback(oe,n)}catch(z){Y(`Error in finalAnswerCallback: ${z}`)}let on=te?"\u2705":"\u26A0\uFE0F";this.log(_.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[v]){let R=`Error: Unknown tool '${v}'`;this.error(R),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:R});continue}let b=u().find(R=>R.name===v);if(b&&b.input_schema&&b.input_schema.required){let R=b.input_schema.required||[],oe=R.filter(te=>S[te]===void 0);if(oe.length>0){let te=`Error: Missing required parameters: ${oe.join(", ")}
|
|
1620
1917
|
|
|
1621
|
-
Tool: ${
|
|
1622
|
-
Required parameters: ${
|
|
1623
|
-
Provided parameters: ${Object.keys(
|
|
1918
|
+
Tool: ${v}
|
|
1919
|
+
Required parameters: ${R.join(", ")}
|
|
1920
|
+
Provided parameters: ${Object.keys(S).join(", ")||"none"}
|
|
1624
1921
|
|
|
1625
|
-
Please call the tool again with ALL required parameters.`;this.error(
|
|
1626
|
-
`
|
|
1627
|
-
`
|
|
1628
|
-
|
|
1922
|
+
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 L=g[v],M=L?L.formatAction(S):`${v}()`;this.log(_.blue(`\u{1F527} \u884C\u52A8: ${M}`)),this.log("");let I=await p[v](S),q=d(I),Q=L?L.shouldPrintObservation(I):!0,J=L?L.formatObservation(I):String(I);Q&&(this.log(_.yellow(`\u{1F4CA} \u89C2\u5BDF: ${J}`)),this.log("")),m.push({role:"assistant",content:null,tool_calls:[f]}),m.push({role:"tool",tool_call_id:f.id,content:String(q)}),["read","write","merge"].includes(v)&&S.path&&this.orchestratorContext.addRecentFile(S.path),ce(m,t)}catch(x){throw this.error(`\u9519\u8BEF: ${x.message}`),ce(m,t),x}}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;this.options.useLLMSummary?n=await this.summaryExtractor.extractSummaryWithLLM(t):n=await this.summaryExtractor.extractSummary(t);let r=this.summaryExtractor.extractMetadata(t);r.success=!0,this.orchestratorContext.recordStepCompletion(e,n,r),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(_.gray("\u2500\u2500\u2500 \u6B65\u9AA4\u6267\u884C\u6458\u8981 \u2500\u2500\u2500")),this.log(_.gray(`\u6458\u8981: ${n}`)),this.log(_.gray(`\u5DE5\u5177: ${r.toolsUsed.join(", ")}`)),this.log(_.gray(`\u6587\u4EF6: ${r.filesAccessed.join(", ")}`)),this.log(_.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(`
|
|
1923
|
+
`)}formatProjectStructureInfo(e){return tr(e,{format:"markdown",detailed:!0,customTitle:`# \u9879\u76EE\u7ED3\u6784\u4FE1\u606F
|
|
1924
|
+
`})}}});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(`
|
|
1925
|
+
`);for(let r of n)if(r.startsWith("USE_LLM_DISCLOSURE=")){let s=r.split("=")[1]?.trim()||"";C(`[\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()||"";C(`[\u914D\u7F6E\u8BFB\u53D6] \u4ECE .nium/.env \u6587\u4EF6\u4E2D\u8BFB\u53D6: USE_LLM_SUMMARY=${s}`),o.useLLMSummary=s.toLowerCase()==="true"}}catch(e){C(`[\u914D\u7F6E\u8BFB\u53D6] \u65E0\u6CD5\u8BFB\u53D6 .nium/.env \u6587\u4EF6: ${e.message}`)}return process.env.USE_LLM_DISCLOSURE!==void 0&&(C(`[\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&&(C(`[\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 $("[\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 Y(`[\u914D\u7F6E\u8BFB\u53D6] \u914D\u7F6E\u8BFB\u53D6\u51FA\u9519: ${o}`),o}}var Tl=y(()=>{bl();vi();K();Ns()});var Pl={};O(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(),T.sessionId&&(e.log(A.gray(`\u5F53\u524D\u4F1A\u8BDD ID: ${T.sessionId.substring(0,8)}`)),T.tasks&&T.tasks.length>0&&e.log(A.gray(`\u5F53\u524D\u4F1A\u8BDD\u4EFB\u52A1\u6570: ${T.tasks.length}`)),e.log())}catch(t){throw e.error(`\u4EFB\u52A1\u5904\u7406\u5931\u8D25: ${t.message}`),t}}async function Vp(o){if(T.messages&&T.messages.length>0&&T.currentTask){o.log(),o.info(`\u6B63\u5728\u6062\u590D\u4F1A\u8BDD [ID:${T.sessionId?T.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"),T.sessionId&&(o.log(A.gray(`\u4F1A\u8BDD ID: ${T.sessionId.substring(0,8)}`)),T.tasks&&T.tasks.length>0&&o.log(A.gray(`\u4F1A\u8BDD\u4EFB\u52A1\u6570: ${T.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 Wp(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)+`
|
|
1926
|
+
...(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
|
|
1629
1927
|
\u8BF7\u6839\u636E\u63D0\u4F9B\u7684git diff\u5185\u5BB9\uFF0C\u751F\u6210\u4E00\u4E2A\u7B80\u6D01\u660E\u4E86\u7684commit message\u3002
|
|
1630
1928
|
|
|
1631
1929
|
\u8981\u6C42\uFF1A
|
|
@@ -1642,9 +1940,9 @@ feat: \u6DFB\u52A0\u7528\u6237\u8BA4\u8BC1\u529F\u80FD
|
|
|
1642
1940
|
- \u6DFB\u52A0\u767B\u5F55\u548C\u6CE8\u518C\u63A5\u53E3
|
|
1643
1941
|
- \u66F4\u65B0\u7528\u6237\u6A21\u578B`},{role:"user",content:`\u8BF7\u4E3A\u4EE5\u4E0Bgit\u53D8\u66F4\u751F\u6210commit message:
|
|
1644
1942
|
|
|
1645
|
-
${t}`}],i=await
|
|
1943
|
+
${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+`
|
|
1646
1944
|
|
|
1647
|
-
[Generated by niumagents]`;
|
|
1648
|
-
${e.stack||""}`)
|
|
1649
|
-
Commands:`)),this.log(
|
|
1650
|
-
\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(){
|
|
1945
|
+
[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 ."),Vs(),o.success("\u5DF2\u6682\u5B58\u6240\u6709\u53D8\u66F4"),o.info("\u6B63\u5728\u6267\u884C git commit..."),Ws(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=y(()=>{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:Vp,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:Wp,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();K();le();di();xr();Eo();import ae from"chalk";import we from"readline";import Kp from"fuzzysort";var $l="0.1.10";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(),$("\u4EA4\u4E92\u5F0F\u4F1A\u8BDD\u542F\u52A8"),this.debug&&(C("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()&&T.messages&&T.messages.length>0&&T.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($(`Loaded ${e.length} MCP server configuration(s)`),e.length===0){C("No MCP servers configured"),await Mo();return}let t=Zt();$("Initializing MCP manager with configured servers..."),await t.initialize(e),$("Loading all tools (local + MCP)..."),await Mo();let n=t.getStatus();C(`MCP Status: ${n.serversConnected} servers connected, ${n.toolsAvailable} tools available`),n.serversConnected>0?j(`Connected to ${n.serversConnected} MCP server(s), ${n.toolsAvailable} tools available`,"MCP"):N(`Configured ${e.length} MCP server(s) but none connected`,"MCP")}catch(e){Y(`Failed to initialize MCP: ${e.message}`),C(`MCP initialization error details: ${e.message}
|
|
1946
|
+
${e.stack||""}`),$("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(`
|
|
1947
|
+
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(`
|
|
1948
|
+
\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){j(e,null)}warning(e){N(e,null)}error(e){ke(e,null)}info(e){se(e,null)}exit(){$("\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();
|