xiaozhi-client 1.6.9 → 1.6.10-beta.0
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/package.json +4 -3
- package/package.json +4 -3
- package/dist/Logger.d.ts +0 -94
- package/dist/Logger.js +0 -3
- package/dist/Logger.js.map +0 -1
- package/dist/MCPService-CXNkXAKv.d.ts +0 -238
- package/dist/ProxyMCPServer.d.ts +0 -294
- package/dist/ProxyMCPServer.js +0 -3
- package/dist/ProxyMCPServer.js.map +0 -1
- package/dist/WebServer.d.ts +0 -83
- package/dist/WebServer.js +0 -70
- package/dist/WebServer.js.map +0 -1
- package/dist/adapters/ConfigAdapter.d.ts +0 -30
- package/dist/adapters/ConfigAdapter.js +0 -3
- package/dist/adapters/ConfigAdapter.js.map +0 -1
- package/dist/configManager.d.ts +0 -253
- package/dist/configManager.js +0 -3
- package/dist/configManager.js.map +0 -1
- package/dist/mcpCommands.d.ts +0 -27
- package/dist/mcpCommands.js +0 -3
- package/dist/mcpCommands.js.map +0 -1
- package/dist/services/MCPServer.d.ts +0 -265
- package/dist/services/MCPServer.js +0 -8
- package/dist/services/MCPServer.js.map +0 -1
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xiaozhi-client",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.10-beta.0",
|
|
4
4
|
"description": "小智 AI 客户端 命令行工具",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"xiaozhi-client": "dist/cli.js"
|
|
22
22
|
},
|
|
23
23
|
"scripts": {
|
|
24
|
-
"build": "pnpm run build:web && tsup",
|
|
24
|
+
"build": "pnpm run build:web && cross-env NODE_ENV=production tsup",
|
|
25
25
|
"build:web": "cd web && pnpm install && pnpm run build",
|
|
26
|
-
"dev": "tsup --watch",
|
|
26
|
+
"dev": "cross-env NODE_ENV=development tsup --watch",
|
|
27
27
|
"test": "vitest run",
|
|
28
28
|
"test:watch": "vitest",
|
|
29
29
|
"test:coverage": "vitest run --coverage",
|
|
@@ -82,6 +82,7 @@
|
|
|
82
82
|
"@vitest/coverage-v8": "^3.2.3",
|
|
83
83
|
"conventional-changelog-cli": "^5.0.0",
|
|
84
84
|
"conventional-changelog-conventionalcommits": "^9.0.0",
|
|
85
|
+
"cross-env": "^10.0.0",
|
|
85
86
|
"cspell": "^9.1.1",
|
|
86
87
|
"esbuild": "^0.25.5",
|
|
87
88
|
"execa": "^9.6.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xiaozhi-client",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.10-beta.0",
|
|
4
4
|
"description": "小智 AI 客户端 命令行工具",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/cli.js",
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
"xiaozhi-client": "dist/cli.js"
|
|
22
22
|
},
|
|
23
23
|
"scripts": {
|
|
24
|
-
"build": "pnpm run build:web && tsup",
|
|
24
|
+
"build": "pnpm run build:web && cross-env NODE_ENV=production tsup",
|
|
25
25
|
"build:web": "cd web && pnpm install && pnpm run build",
|
|
26
|
-
"dev": "tsup --watch",
|
|
26
|
+
"dev": "cross-env NODE_ENV=development tsup --watch",
|
|
27
27
|
"test": "vitest run",
|
|
28
28
|
"test:watch": "vitest",
|
|
29
29
|
"test:coverage": "vitest run --coverage",
|
|
@@ -82,6 +82,7 @@
|
|
|
82
82
|
"@vitest/coverage-v8": "^3.2.3",
|
|
83
83
|
"conventional-changelog-cli": "^5.0.0",
|
|
84
84
|
"conventional-changelog-conventionalcommits": "^9.0.0",
|
|
85
|
+
"cross-env": "^10.0.0",
|
|
85
86
|
"cspell": "^9.1.1",
|
|
86
87
|
"esbuild": "^0.25.5",
|
|
87
88
|
"execa": "^9.6.0",
|
package/dist/Logger.d.ts
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 高性能日志记录器,基于 pino 实现
|
|
3
|
-
*
|
|
4
|
-
* 特性:
|
|
5
|
-
* - 支持控制台和文件双重输出
|
|
6
|
-
* - 支持守护进程模式(仅文件输出)
|
|
7
|
-
* - 支持结构化日志记录
|
|
8
|
-
* - 自动日志文件轮转和管理
|
|
9
|
-
* - 高性能异步写入
|
|
10
|
-
* - 完整的错误堆栈跟踪
|
|
11
|
-
*/
|
|
12
|
-
declare class Logger {
|
|
13
|
-
private logFilePath;
|
|
14
|
-
private pinoInstance;
|
|
15
|
-
private isDaemonMode;
|
|
16
|
-
private maxLogFileSize;
|
|
17
|
-
private maxLogFiles;
|
|
18
|
-
constructor();
|
|
19
|
-
private createPinoInstance;
|
|
20
|
-
private createOptimizedConsoleStream;
|
|
21
|
-
/**
|
|
22
|
-
* 安全地写入到 stderr,在测试环境中避免错误
|
|
23
|
-
*/
|
|
24
|
-
private safeWrite;
|
|
25
|
-
private formatConsoleMessageOptimized;
|
|
26
|
-
/**
|
|
27
|
-
* 初始化日志文件
|
|
28
|
-
* @param projectDir 项目目录
|
|
29
|
-
*/
|
|
30
|
-
initLogFile(projectDir: string): void;
|
|
31
|
-
/**
|
|
32
|
-
* 设置是否启用文件日志
|
|
33
|
-
* @param enable 是否启用
|
|
34
|
-
*/
|
|
35
|
-
enableFileLogging(enable: boolean): void;
|
|
36
|
-
/**
|
|
37
|
-
* 记录信息级别日志
|
|
38
|
-
* @param message 日志消息
|
|
39
|
-
* @param args 额外参数
|
|
40
|
-
* @example
|
|
41
|
-
* logger.info('用户登录', 'userId', 12345);
|
|
42
|
-
* logger.info({ userId: 12345, action: 'login' }, '用户登录');
|
|
43
|
-
*/
|
|
44
|
-
info(message: string, ...args: any[]): void;
|
|
45
|
-
/**
|
|
46
|
-
* 记录结构化信息级别日志
|
|
47
|
-
* @param obj 结构化日志对象
|
|
48
|
-
* @param message 可选的日志消息
|
|
49
|
-
*/
|
|
50
|
-
info(obj: object, message?: string): void;
|
|
51
|
-
success(message: string, ...args: any[]): void;
|
|
52
|
-
success(obj: object, message?: string): void;
|
|
53
|
-
warn(message: string, ...args: any[]): void;
|
|
54
|
-
warn(obj: object, message?: string): void;
|
|
55
|
-
error(message: string, ...args: any[]): void;
|
|
56
|
-
error(obj: object, message?: string): void;
|
|
57
|
-
debug(message: string, ...args: any[]): void;
|
|
58
|
-
debug(obj: object, message?: string): void;
|
|
59
|
-
log(message: string, ...args: any[]): void;
|
|
60
|
-
log(obj: object, message?: string): void;
|
|
61
|
-
/**
|
|
62
|
-
* 增强错误对象,提取更多错误信息
|
|
63
|
-
*/
|
|
64
|
-
private enhanceErrorObject;
|
|
65
|
-
/**
|
|
66
|
-
* 检查并轮转日志文件(如果需要)
|
|
67
|
-
*/
|
|
68
|
-
private rotateLogFileIfNeeded;
|
|
69
|
-
/**
|
|
70
|
-
* 轮转日志文件
|
|
71
|
-
*/
|
|
72
|
-
private rotateLogFile;
|
|
73
|
-
/**
|
|
74
|
-
* 清理旧的日志文件
|
|
75
|
-
*/
|
|
76
|
-
cleanupOldLogs(): void;
|
|
77
|
-
/**
|
|
78
|
-
* 设置日志文件管理参数
|
|
79
|
-
*/
|
|
80
|
-
setLogFileOptions(maxSize: number, maxFiles: number): void;
|
|
81
|
-
/**
|
|
82
|
-
* 创建一个带标签的日志实例(已废弃,直接返回原实例)
|
|
83
|
-
* @param tag 标签(不再使用)
|
|
84
|
-
* @deprecated 标签功能已移除
|
|
85
|
-
*/
|
|
86
|
-
withTag(_tag: string): Logger;
|
|
87
|
-
/**
|
|
88
|
-
* 关闭日志文件流
|
|
89
|
-
*/
|
|
90
|
-
close(): void;
|
|
91
|
-
}
|
|
92
|
-
declare const logger: Logger;
|
|
93
|
-
|
|
94
|
-
export { Logger, logger };
|
package/dist/Logger.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
var d=Object.defineProperty;var c=(r,e)=>d(r,"name",{value:e,configurable:!0});import*as o from"fs";import*as s from"path";import h from"chalk";import g from"pino";function u(r){let e=r.getFullYear(),t=String(r.getMonth()+1).padStart(2,"0"),n=String(r.getDate()).padStart(2,"0"),i=String(r.getHours()).padStart(2,"0"),a=String(r.getMinutes()).padStart(2,"0"),l=String(r.getSeconds()).padStart(2,"0");return`${e}-${t}-${n} ${i}:${a}:${l}`}c(u,"formatDateTime");var m=class{static{c(this,"Logger")}logFilePath=null;pinoInstance;isDaemonMode;maxLogFileSize=10*1024*1024;maxLogFiles=5;constructor(){this.isDaemonMode=process.env.XIAOZHI_DAEMON==="true",this.pinoInstance=this.createPinoInstance()}createPinoInstance(){let e=[];if(!this.isDaemonMode){let t=this.createOptimizedConsoleStream();e.push({level:"debug",stream:t})}return this.logFilePath&&e.push({level:"debug",stream:g.destination({dest:this.logFilePath,sync:!1,append:!0,mkdir:!0})}),e.length===0&&e.push({level:"debug",stream:g.destination({dest:"/dev/null"})}),g({level:"debug",timestamp:g.stdTimeFunctions?.isoTime||(()=>`,"time":${Date.now()}`),formatters:{level:c((t,n)=>({level:n}),"level")},base:null,serializers:{err:g.stdSerializers?.err||(t=>t)}},g.multistream(e,{dedupe:!0}))}createOptimizedConsoleStream(){let e=new Map([[20,{name:"DEBUG",color:h.gray}],[30,{name:"INFO",color:h.blue}],[40,{name:"WARN",color:h.yellow}],[50,{name:"ERROR",color:h.red}],[60,{name:"FATAL",color:h.red}]]);return{write:c(t=>{try{let n=JSON.parse(t),i=this.formatConsoleMessageOptimized(n,e);this.safeWrite(`${i}
|
|
2
|
-
`)}catch{this.safeWrite(t)}},"write")}}safeWrite(e){try{process.stderr&&typeof process.stderr.write=="function"?process.stderr.write(e):console&&typeof console.error=="function"&&console.error(e.trim())}catch{}}formatConsoleMessageOptimized(e,t){let n=u(new Date),i=t.get(e.level)||{name:"UNKNOWN",color:c(p=>p,"color")},a=i.color(`[${i.name}]`),l=e.msg;if(e.args&&Array.isArray(e.args)){let p=e.args.map(f=>typeof f=="object"?JSON.stringify(f):String(f)).join(" ");l=`${l} ${p}`}return`[${n}] ${a} ${l}`}initLogFile(e){this.logFilePath=s.join(e,"xiaozhi.log"),this.rotateLogFileIfNeeded(),o.existsSync(this.logFilePath)||o.writeFileSync(this.logFilePath,""),this.pinoInstance=this.createPinoInstance()}enableFileLogging(e){e&&this.logFilePath&&(this.pinoInstance=this.createPinoInstance())}info(e,...t){typeof e=="string"?t.length===0?this.pinoInstance.info(e):this.pinoInstance.info({args:t},e):this.pinoInstance.info(e,t[0]||"")}success(e,...t){typeof e=="string"?t.length===0?this.pinoInstance.info(e):this.pinoInstance.info({args:t},e):this.pinoInstance.info(e,t[0]||"")}warn(e,...t){typeof e=="string"?t.length===0?this.pinoInstance.warn(e):this.pinoInstance.warn({args:t},e):this.pinoInstance.warn(e,t[0]||"")}error(e,...t){if(typeof e=="string")if(t.length===0)this.pinoInstance.error(e);else{let n=t.map(i=>i instanceof Error?{message:i.message,stack:i.stack,name:i.name,cause:i.cause}:i);this.pinoInstance.error({args:n},e)}else{let n=this.enhanceErrorObject(e);this.pinoInstance.error(n,t[0]||"")}}debug(e,...t){typeof e=="string"?t.length===0?this.pinoInstance.debug(e):this.pinoInstance.debug({args:t},e):this.pinoInstance.debug(e,t[0]||"")}log(e,...t){typeof e=="string"?t.length===0?this.pinoInstance.info(e):this.pinoInstance.info({args:t},e):this.pinoInstance.info(e,t[0]||"")}enhanceErrorObject(e){let t={...e};for(let[n,i]of Object.entries(t))i instanceof Error&&(t[n]={message:i.message,stack:i.stack,name:i.name,cause:i.cause});return t}rotateLogFileIfNeeded(){if(!(!this.logFilePath||!o.existsSync(this.logFilePath)))try{o.statSync(this.logFilePath).size>this.maxLogFileSize&&this.rotateLogFile()}catch{}}rotateLogFile(){if(this.logFilePath)try{let e=s.dirname(this.logFilePath),t=s.basename(this.logFilePath,".log");for(let i=this.maxLogFiles-1;i>=1;i--){let a=s.join(e,`${t}.${i}.log`),l=s.join(e,`${t}.${i+1}.log`);o.existsSync(a)&&(i===this.maxLogFiles-1?o.unlinkSync(a):o.renameSync(a,l))}let n=s.join(e,`${t}.1.log`);o.renameSync(this.logFilePath,n)}catch{}}cleanupOldLogs(){if(this.logFilePath)try{let e=s.dirname(this.logFilePath),t=s.basename(this.logFilePath,".log");for(let n=this.maxLogFiles+1;n<=this.maxLogFiles+10;n++){let i=s.join(e,`${t}.${n}.log`);o.existsSync(i)&&o.unlinkSync(i)}}catch{}}setLogFileOptions(e,t){this.maxLogFileSize=e,this.maxLogFiles=t}withTag(e){return this}close(){}},S=new m;export{m as Logger,S as logger};
|
|
3
|
-
//# sourceMappingURL=Logger.js.map
|
package/dist/Logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Logger.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport chalk from \"chalk\";\nimport pino from \"pino\";\nimport type { Logger as PinoLogger } from \"pino\";\n\n/**\n * 格式化日期时间为 YYYY-MM-DD HH:mm:ss 格式\n * @param date 要格式化的日期对象\n * @returns 格式化后的日期时间字符串\n */\nfunction formatDateTime(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n const hours = String(date.getHours()).padStart(2, \"0\");\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\n\n return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n}\n\n/**\n * 高性能日志记录器,基于 pino 实现\n *\n * 特性:\n * - 支持控制台和文件双重输出\n * - 支持守护进程模式(仅文件输出)\n * - 支持结构化日志记录\n * - 自动日志文件轮转和管理\n * - 高性能异步写入\n * - 完整的错误堆栈跟踪\n */\nexport class Logger {\n private logFilePath: string | null = null;\n private pinoInstance: PinoLogger;\n private isDaemonMode: boolean;\n private maxLogFileSize = 10 * 1024 * 1024; // 10MB 默认最大文件大小\n private maxLogFiles = 5; // 最多保留5个日志文件\n\n constructor() {\n // 检查是否为守护进程模式\n this.isDaemonMode = process.env.XIAOZHI_DAEMON === \"true\";\n\n // 创建 pino 实例\n this.pinoInstance = this.createPinoInstance();\n }\n\n private createPinoInstance(): PinoLogger {\n const streams: pino.StreamEntry[] = [];\n\n // 控制台流 - 只在非守护进程模式下添加\n if (!this.isDaemonMode) {\n // 使用高性能的控制台输出流\n const consoleStream = this.createOptimizedConsoleStream();\n streams.push({\n level: \"debug\",\n stream: consoleStream,\n });\n }\n\n // 文件流 - 如果有日志文件路径,使用高性能异步写入\n if (this.logFilePath) {\n streams.push({\n level: \"debug\",\n stream: pino.destination({\n dest: this.logFilePath,\n sync: false, // 异步写入提升性能\n append: true,\n mkdir: true,\n }),\n });\n }\n\n // 如果没有流,创建一个空的流避免错误\n if (streams.length === 0) {\n streams.push({\n level: \"debug\",\n stream: pino.destination({ dest: \"/dev/null\" }),\n });\n }\n\n return pino(\n {\n level: \"debug\",\n // 高性能配置\n timestamp:\n pino.stdTimeFunctions?.isoTime || (() => `,\"time\":${Date.now()}`),\n formatters: {\n // 优化级别格式化\n level: (_label: string, number: number) => ({ level: number }),\n },\n // 禁用不必要的功能以提升性能\n base: null, // 不包含 pid 和 hostname\n serializers: {\n // 优化错误序列化,在测试环境中安全处理\n err: pino.stdSerializers?.err || ((err: any) => err),\n },\n },\n pino.multistream(streams, { dedupe: true })\n );\n }\n\n private createOptimizedConsoleStream() {\n // 预编译级别映射以提升性能\n const levelMap = new Map([\n [20, { name: \"DEBUG\", color: chalk.gray }],\n [30, { name: \"INFO\", color: chalk.blue }],\n [40, { name: \"WARN\", color: chalk.yellow }],\n [50, { name: \"ERROR\", color: chalk.red }],\n [60, { name: \"FATAL\", color: chalk.red }],\n ]);\n\n return {\n write: (chunk: string) => {\n try {\n const logObj = JSON.parse(chunk);\n const message = this.formatConsoleMessageOptimized(logObj, levelMap);\n // 在测试环境中安全地写入\n this.safeWrite(`${message}\\n`);\n } catch (error) {\n // 如果解析失败,直接输出原始内容\n this.safeWrite(chunk);\n }\n },\n };\n }\n\n /**\n * 安全地写入到 stderr,在测试环境中避免错误\n */\n private safeWrite(content: string): void {\n try {\n if (process.stderr && typeof process.stderr.write === \"function\") {\n process.stderr.write(content);\n } else if (console && typeof console.error === \"function\") {\n // 在测试环境中回退到 console.error\n console.error(content.trim());\n }\n } catch (error) {\n // 在极端情况下静默失败,避免测试中断\n }\n }\n\n private formatConsoleMessageOptimized(\n logObj: any,\n levelMap: Map<number, { name: string; color: (text: string) => string }>\n ): string {\n const timestamp = formatDateTime(new Date());\n\n const levelInfo = levelMap.get(logObj.level) || {\n name: \"UNKNOWN\",\n color: (text: string) => text,\n };\n const coloredLevel = levelInfo.color(`[${levelInfo.name}]`);\n\n // 处理结构化日志中的 args,保持兼容性\n let message = logObj.msg;\n if (logObj.args && Array.isArray(logObj.args)) {\n const argsStr = logObj.args\n .map((arg: any) =>\n typeof arg === \"object\" ? JSON.stringify(arg) : String(arg)\n )\n .join(\" \");\n message = `${message} ${argsStr}`;\n }\n\n return `[${timestamp}] ${coloredLevel} ${message}`;\n }\n\n /**\n * 初始化日志文件\n * @param projectDir 项目目录\n */\n initLogFile(projectDir: string): void {\n this.logFilePath = path.join(projectDir, \"xiaozhi.log\");\n\n // 检查并轮转日志文件\n this.rotateLogFileIfNeeded();\n\n // 确保日志文件存在\n if (!fs.existsSync(this.logFilePath)) {\n fs.writeFileSync(this.logFilePath, \"\");\n }\n\n // 重新创建 pino 实例以包含文件流\n this.pinoInstance = this.createPinoInstance();\n }\n\n /**\n * 设置是否启用文件日志\n * @param enable 是否启用\n */\n enableFileLogging(enable: boolean): void {\n // 在 pino 实现中,文件日志的启用/禁用通过重新创建实例来实现\n // 这里保持方法兼容性,但实际上文件日志在 initLogFile 时就已经启用\n if (enable && this.logFilePath) {\n // 重新创建 pino 实例以确保文件流正确配置\n this.pinoInstance = this.createPinoInstance();\n }\n }\n\n /**\n * 记录信息级别日志\n * @param message 日志消息\n * @param args 额外参数\n * @example\n * logger.info('用户登录', 'userId', 12345);\n * logger.info({ userId: 12345, action: 'login' }, '用户登录');\n */\n info(message: string, ...args: any[]): void;\n /**\n * 记录结构化信息级别日志\n * @param obj 结构化日志对象\n * @param message 可选的日志消息\n */\n info(obj: object, message?: string): void;\n info(messageOrObj: string | object, ...args: any[]): void {\n if (typeof messageOrObj === \"string\") {\n if (args.length === 0) {\n this.pinoInstance.info(messageOrObj);\n } else {\n this.pinoInstance.info({ args }, messageOrObj);\n }\n } else {\n // 结构化日志支持\n this.pinoInstance.info(messageOrObj, args[0] || \"\");\n }\n }\n\n success(message: string, ...args: any[]): void;\n success(obj: object, message?: string): void;\n success(messageOrObj: string | object, ...args: any[]): void {\n // success 映射为 info 级别,保持 API 兼容性\n if (typeof messageOrObj === \"string\") {\n if (args.length === 0) {\n this.pinoInstance.info(messageOrObj);\n } else {\n this.pinoInstance.info({ args }, messageOrObj);\n }\n } else {\n this.pinoInstance.info(messageOrObj, args[0] || \"\");\n }\n }\n\n warn(message: string, ...args: any[]): void;\n warn(obj: object, message?: string): void;\n warn(messageOrObj: string | object, ...args: any[]): void {\n if (typeof messageOrObj === \"string\") {\n if (args.length === 0) {\n this.pinoInstance.warn(messageOrObj);\n } else {\n this.pinoInstance.warn({ args }, messageOrObj);\n }\n } else {\n this.pinoInstance.warn(messageOrObj, args[0] || \"\");\n }\n }\n\n error(message: string, ...args: any[]): void;\n error(obj: object, message?: string): void;\n error(messageOrObj: string | object, ...args: any[]): void {\n if (typeof messageOrObj === \"string\") {\n if (args.length === 0) {\n this.pinoInstance.error(messageOrObj);\n } else {\n // 改进错误处理 - 特殊处理 Error 对象\n const errorArgs = args.map((arg) => {\n if (arg instanceof Error) {\n return {\n message: arg.message,\n stack: arg.stack,\n name: arg.name,\n cause: arg.cause,\n };\n }\n return arg;\n });\n this.pinoInstance.error({ args: errorArgs }, messageOrObj);\n }\n } else {\n // 结构化错误日志,自动提取错误信息\n const enhancedObj = this.enhanceErrorObject(messageOrObj);\n this.pinoInstance.error(enhancedObj, args[0] || \"\");\n }\n }\n\n debug(message: string, ...args: any[]): void;\n debug(obj: object, message?: string): void;\n debug(messageOrObj: string | object, ...args: any[]): void {\n if (typeof messageOrObj === \"string\") {\n if (args.length === 0) {\n this.pinoInstance.debug(messageOrObj);\n } else {\n this.pinoInstance.debug({ args }, messageOrObj);\n }\n } else {\n this.pinoInstance.debug(messageOrObj, args[0] || \"\");\n }\n }\n\n log(message: string, ...args: any[]): void;\n log(obj: object, message?: string): void;\n log(messageOrObj: string | object, ...args: any[]): void {\n // log 方法使用 info 级别\n if (typeof messageOrObj === \"string\") {\n if (args.length === 0) {\n this.pinoInstance.info(messageOrObj);\n } else {\n this.pinoInstance.info({ args }, messageOrObj);\n }\n } else {\n this.pinoInstance.info(messageOrObj, args[0] || \"\");\n }\n }\n\n /**\n * 增强错误对象,提取更多错误信息\n */\n private enhanceErrorObject(obj: any): any {\n const enhanced = { ...obj };\n\n // 遍历对象属性,查找 Error 实例\n for (const [key, value] of Object.entries(enhanced)) {\n if (value instanceof Error) {\n enhanced[key] = {\n message: value.message,\n stack: value.stack,\n name: value.name,\n cause: value.cause,\n };\n }\n }\n\n return enhanced;\n }\n\n /**\n * 检查并轮转日志文件(如果需要)\n */\n private rotateLogFileIfNeeded(): void {\n if (!this.logFilePath || !fs.existsSync(this.logFilePath)) {\n return;\n }\n\n try {\n const stats = fs.statSync(this.logFilePath);\n if (stats.size > this.maxLogFileSize) {\n this.rotateLogFile();\n }\n } catch (error) {\n // 忽略文件状态检查错误\n }\n }\n\n /**\n * 轮转日志文件\n */\n private rotateLogFile(): void {\n if (!this.logFilePath) return;\n\n try {\n const logDir = path.dirname(this.logFilePath);\n const logName = path.basename(this.logFilePath, \".log\");\n\n // 移动现有的编号日志文件\n for (let i = this.maxLogFiles - 1; i >= 1; i--) {\n const oldFile = path.join(logDir, `${logName}.${i}.log`);\n const newFile = path.join(logDir, `${logName}.${i + 1}.log`);\n\n if (fs.existsSync(oldFile)) {\n if (i === this.maxLogFiles - 1) {\n // 删除最老的文件\n fs.unlinkSync(oldFile);\n } else {\n fs.renameSync(oldFile, newFile);\n }\n }\n }\n\n // 将当前日志文件重命名为 .1.log\n const firstRotatedFile = path.join(logDir, `${logName}.1.log`);\n fs.renameSync(this.logFilePath, firstRotatedFile);\n } catch (error) {\n // 轮转失败时忽略错误,继续使用当前文件\n }\n }\n\n /**\n * 清理旧的日志文件\n */\n cleanupOldLogs(): void {\n if (!this.logFilePath) return;\n\n try {\n const logDir = path.dirname(this.logFilePath);\n const logName = path.basename(this.logFilePath, \".log\");\n\n // 删除超过最大数量的日志文件\n for (let i = this.maxLogFiles + 1; i <= this.maxLogFiles + 10; i++) {\n const oldFile = path.join(logDir, `${logName}.${i}.log`);\n if (fs.existsSync(oldFile)) {\n fs.unlinkSync(oldFile);\n }\n }\n } catch (error) {\n // 忽略清理错误\n }\n }\n\n /**\n * 设置日志文件管理参数\n */\n setLogFileOptions(maxSize: number, maxFiles: number): void {\n this.maxLogFileSize = maxSize;\n this.maxLogFiles = maxFiles;\n }\n\n /**\n * 创建一个带标签的日志实例(已废弃,直接返回原实例)\n * @param tag 标签(不再使用)\n * @deprecated 标签功能已移除\n */\n withTag(_tag: string): Logger {\n // 不再添加标签,直接返回共享实例\n return this;\n }\n\n /**\n * 关闭日志文件流\n */\n close(): void {\n // pino 实例会自动处理流的关闭\n // 这里保持方法兼容性\n }\n}\n\n// 导出单例实例\nexport const logger = new Logger();\n"],"mappings":"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","names":["fs","path","chalk","pino","formatDateTime","date","year","month","day","hours","minutes","seconds","__name","Logger","streams","consoleStream","pino","_label","number","err","levelMap","chalk","chunk","logObj","message","content","timestamp","levelInfo","text","coloredLevel","argsStr","arg","projectDir","enable","messageOrObj","args","errorArgs","enhancedObj","obj","enhanced","key","value","logDir","logName","oldFile","newFile","firstRotatedFile","i","maxSize","maxFiles","_tag","logger"]}
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
-
|
|
3
|
-
declare enum MCPTransportType {
|
|
4
|
-
STDIO = "stdio",
|
|
5
|
-
SSE = "sse",
|
|
6
|
-
STREAMABLE_HTTP = "streamable-http",
|
|
7
|
-
MODELSCOPE_SSE = "modelscope-sse"
|
|
8
|
-
}
|
|
9
|
-
declare enum ConnectionState {
|
|
10
|
-
DISCONNECTED = "disconnected",
|
|
11
|
-
CONNECTING = "connecting",
|
|
12
|
-
CONNECTED = "connected",
|
|
13
|
-
RECONNECTING = "reconnecting",
|
|
14
|
-
FAILED = "failed"
|
|
15
|
-
}
|
|
16
|
-
interface ReconnectOptions {
|
|
17
|
-
enabled: boolean;
|
|
18
|
-
maxAttempts: number;
|
|
19
|
-
initialInterval: number;
|
|
20
|
-
maxInterval: number;
|
|
21
|
-
backoffStrategy: "linear" | "exponential" | "fixed";
|
|
22
|
-
backoffMultiplier: number;
|
|
23
|
-
timeout: number;
|
|
24
|
-
jitter: boolean;
|
|
25
|
-
}
|
|
26
|
-
interface PingOptions {
|
|
27
|
-
enabled: boolean;
|
|
28
|
-
interval: number;
|
|
29
|
-
timeout: number;
|
|
30
|
-
maxFailures: number;
|
|
31
|
-
startDelay: number;
|
|
32
|
-
}
|
|
33
|
-
interface ModelScopeSSEOptions {
|
|
34
|
-
eventSourceInit?: {
|
|
35
|
-
fetch?: (url: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
36
|
-
};
|
|
37
|
-
requestInit?: RequestInit;
|
|
38
|
-
}
|
|
39
|
-
interface MCPServiceConfig {
|
|
40
|
-
name: string;
|
|
41
|
-
type: MCPTransportType;
|
|
42
|
-
command?: string;
|
|
43
|
-
args?: string[];
|
|
44
|
-
env?: Record<string, string>;
|
|
45
|
-
url?: string;
|
|
46
|
-
apiKey?: string;
|
|
47
|
-
headers?: Record<string, string>;
|
|
48
|
-
modelScopeAuth?: boolean;
|
|
49
|
-
customSSEOptions?: ModelScopeSSEOptions;
|
|
50
|
-
reconnect?: Partial<ReconnectOptions>;
|
|
51
|
-
ping?: Partial<PingOptions>;
|
|
52
|
-
timeout?: number;
|
|
53
|
-
retryAttempts?: number;
|
|
54
|
-
}
|
|
55
|
-
interface MCPServiceStatus {
|
|
56
|
-
name: string;
|
|
57
|
-
connected: boolean;
|
|
58
|
-
initialized: boolean;
|
|
59
|
-
transportType: MCPTransportType;
|
|
60
|
-
toolCount: number;
|
|
61
|
-
lastError?: string;
|
|
62
|
-
reconnectAttempts: number;
|
|
63
|
-
connectionState: ConnectionState;
|
|
64
|
-
pingEnabled: boolean;
|
|
65
|
-
lastPingTime?: Date;
|
|
66
|
-
pingFailureCount: number;
|
|
67
|
-
isPinging: boolean;
|
|
68
|
-
}
|
|
69
|
-
interface MCPServiceOptions {
|
|
70
|
-
reconnect?: Partial<ReconnectOptions>;
|
|
71
|
-
}
|
|
72
|
-
interface ToolCallResult {
|
|
73
|
-
content: Array<{
|
|
74
|
-
type: string;
|
|
75
|
-
text: string;
|
|
76
|
-
}>;
|
|
77
|
-
isError?: boolean;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* MCP 服务类
|
|
81
|
-
* 负责管理单个 MCP 服务的连接、工具管理和调用
|
|
82
|
-
*/
|
|
83
|
-
declare class MCPService {
|
|
84
|
-
private config;
|
|
85
|
-
private client;
|
|
86
|
-
private transport;
|
|
87
|
-
private tools;
|
|
88
|
-
private connectionState;
|
|
89
|
-
private reconnectOptions;
|
|
90
|
-
private reconnectState;
|
|
91
|
-
private logger;
|
|
92
|
-
private connectionTimeout;
|
|
93
|
-
private initialized;
|
|
94
|
-
private pingOptions;
|
|
95
|
-
private pingTimer;
|
|
96
|
-
private pingFailureCount;
|
|
97
|
-
private lastPingTime;
|
|
98
|
-
private isPinging;
|
|
99
|
-
constructor(config: MCPServiceConfig, options?: MCPServiceOptions);
|
|
100
|
-
/**
|
|
101
|
-
* 带标签的日志方法
|
|
102
|
-
*/
|
|
103
|
-
private logWithTag;
|
|
104
|
-
/**
|
|
105
|
-
* 验证配置
|
|
106
|
-
*/
|
|
107
|
-
private validateConfig;
|
|
108
|
-
/**
|
|
109
|
-
* 连接到 MCP 服务
|
|
110
|
-
*/
|
|
111
|
-
connect(): Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* 尝试建立连接
|
|
114
|
-
*/
|
|
115
|
-
private attemptConnection;
|
|
116
|
-
/**
|
|
117
|
-
* 处理连接成功
|
|
118
|
-
*/
|
|
119
|
-
private handleConnectionSuccess;
|
|
120
|
-
/**
|
|
121
|
-
* 处理连接错误
|
|
122
|
-
*/
|
|
123
|
-
private handleConnectionError;
|
|
124
|
-
/**
|
|
125
|
-
* 检查是否应该重连
|
|
126
|
-
*/
|
|
127
|
-
private shouldReconnect;
|
|
128
|
-
/**
|
|
129
|
-
* 安排重连
|
|
130
|
-
*/
|
|
131
|
-
private scheduleReconnect;
|
|
132
|
-
/**
|
|
133
|
-
* 计算下次重连间隔
|
|
134
|
-
*/
|
|
135
|
-
private calculateNextInterval;
|
|
136
|
-
/**
|
|
137
|
-
* 清理连接资源
|
|
138
|
-
*/
|
|
139
|
-
private cleanupConnection;
|
|
140
|
-
/**
|
|
141
|
-
* 停止重连
|
|
142
|
-
*/
|
|
143
|
-
private stopReconnect;
|
|
144
|
-
/**
|
|
145
|
-
* 刷新工具列表
|
|
146
|
-
*/
|
|
147
|
-
private refreshTools;
|
|
148
|
-
/**
|
|
149
|
-
* 断开连接
|
|
150
|
-
*/
|
|
151
|
-
disconnect(): Promise<void>;
|
|
152
|
-
/**
|
|
153
|
-
* 手动重连
|
|
154
|
-
*/
|
|
155
|
-
reconnect(): Promise<void>;
|
|
156
|
-
/**
|
|
157
|
-
* 获取工具列表
|
|
158
|
-
*/
|
|
159
|
-
getTools(): Tool[];
|
|
160
|
-
/**
|
|
161
|
-
* 调用工具
|
|
162
|
-
*/
|
|
163
|
-
callTool(name: string, arguments_: any): Promise<ToolCallResult>;
|
|
164
|
-
/**
|
|
165
|
-
* 获取服务配置
|
|
166
|
-
*/
|
|
167
|
-
getConfig(): MCPServiceConfig;
|
|
168
|
-
/**
|
|
169
|
-
* 获取服务状态
|
|
170
|
-
*/
|
|
171
|
-
getStatus(): MCPServiceStatus;
|
|
172
|
-
/**
|
|
173
|
-
* 检查是否已连接
|
|
174
|
-
*/
|
|
175
|
-
isConnected(): boolean;
|
|
176
|
-
/**
|
|
177
|
-
* 启用自动重连
|
|
178
|
-
*/
|
|
179
|
-
enableReconnect(): void;
|
|
180
|
-
/**
|
|
181
|
-
* 禁用自动重连
|
|
182
|
-
*/
|
|
183
|
-
disableReconnect(): void;
|
|
184
|
-
/**
|
|
185
|
-
* 更新重连配置
|
|
186
|
-
*/
|
|
187
|
-
updateReconnectOptions(options: Partial<ReconnectOptions>): void;
|
|
188
|
-
/**
|
|
189
|
-
* 获取重连配置
|
|
190
|
-
*/
|
|
191
|
-
getReconnectOptions(): ReconnectOptions;
|
|
192
|
-
/**
|
|
193
|
-
* 重置重连状态
|
|
194
|
-
*/
|
|
195
|
-
resetReconnectState(): void;
|
|
196
|
-
/**
|
|
197
|
-
* 启动ping监控
|
|
198
|
-
*/
|
|
199
|
-
private startPingMonitoring;
|
|
200
|
-
/**
|
|
201
|
-
* 停止ping监控
|
|
202
|
-
*/
|
|
203
|
-
private stopPingMonitoring;
|
|
204
|
-
/**
|
|
205
|
-
* 执行ping检查
|
|
206
|
-
*/
|
|
207
|
-
private performPing;
|
|
208
|
-
/**
|
|
209
|
-
* 处理ping成功
|
|
210
|
-
*/
|
|
211
|
-
private handlePingSuccess;
|
|
212
|
-
/**
|
|
213
|
-
* 处理ping失败
|
|
214
|
-
*/
|
|
215
|
-
private handlePingFailure;
|
|
216
|
-
/**
|
|
217
|
-
* 重置ping状态
|
|
218
|
-
*/
|
|
219
|
-
private resetPingState;
|
|
220
|
-
/**
|
|
221
|
-
* 启用ping监控
|
|
222
|
-
*/
|
|
223
|
-
enablePing(): void;
|
|
224
|
-
/**
|
|
225
|
-
* 禁用ping监控
|
|
226
|
-
*/
|
|
227
|
-
disablePing(): void;
|
|
228
|
-
/**
|
|
229
|
-
* 更新ping配置
|
|
230
|
-
*/
|
|
231
|
-
updatePingOptions(options: Partial<PingOptions>): void;
|
|
232
|
-
/**
|
|
233
|
-
* 获取ping配置
|
|
234
|
-
*/
|
|
235
|
-
getPingOptions(): PingOptions;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
export { type MCPServiceConfig as M, MCPService as a };
|