mta-mcp 3.1.0 → 3.2.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/agents/_TEMPLATE.md +26 -0
- package/agents/flutter.agent.md +16 -10
- package/agents/i18n.agent.md +21 -0
- package/agents/logicflow.agent.md +22 -0
- package/agents/mta.agent.md +35 -0
- package/agents/vue3.agent.md +16 -10
- package/agents/wechat-miniprogram.agent.md +22 -0
- package/bin/mta.cjs +0 -98
- package/dist/index.js +948 -1355
- package/dist/index.js.map +1 -1
- package/package.json +6 -8
- package/dist/skills/filesystem.d.ts +0 -96
- package/dist/skills/filesystem.js +0 -269
- package/dist/skills/filesystem.js.map +0 -1
- package/dist/skills/http.d.ts +0 -73
- package/dist/skills/http.js +0 -234
- package/dist/skills/http.js.map +0 -1
- package/dist/skills/index.d.ts +0 -79
- package/dist/skills/index.js +0 -206
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/memory.d.ts +0 -73
- package/dist/skills/memory.js +0 -223
- package/dist/skills/memory.js.map +0 -1
- package/dist/skills/thinking.d.ts +0 -48
- package/dist/skills/thinking.js +0 -199
- package/dist/skills/thinking.js.map +0 -1
- package/dist/skills/versionChecker.d.ts +0 -30
- package/dist/skills/versionChecker.js +0 -225
- package/dist/skills/versionChecker.js.map +0 -1
- package/skills.json +0 -68
package/dist/skills/http.js
DELETED
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
// src/skills/http.ts
|
|
2
|
-
import axios from "axios";
|
|
3
|
-
|
|
4
|
-
// src/core/logger.ts
|
|
5
|
-
var LOG_LEVEL_NAMES = {
|
|
6
|
-
[0 /* DEBUG */]: "DEBUG",
|
|
7
|
-
[1 /* INFO */]: "INFO",
|
|
8
|
-
[2 /* WARN */]: "WARN",
|
|
9
|
-
[3 /* ERROR */]: "ERROR",
|
|
10
|
-
[4 /* SILENT */]: "SILENT"
|
|
11
|
-
};
|
|
12
|
-
var globalConfig = {
|
|
13
|
-
level: process.env.DEBUG ? 0 /* DEBUG */ : 1 /* INFO */,
|
|
14
|
-
timestamp: false,
|
|
15
|
-
prefix: "[MCP]"
|
|
16
|
-
};
|
|
17
|
-
var Logger = class _Logger {
|
|
18
|
-
constructor(name, config) {
|
|
19
|
-
this.name = name || "";
|
|
20
|
-
this.config = { ...globalConfig, ...config };
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* 格式化日志消息
|
|
24
|
-
*/
|
|
25
|
-
format(level, message, ...args) {
|
|
26
|
-
const parts = [];
|
|
27
|
-
if (this.config.timestamp) {
|
|
28
|
-
parts.push((/* @__PURE__ */ new Date()).toISOString());
|
|
29
|
-
}
|
|
30
|
-
parts.push(this.config.prefix);
|
|
31
|
-
if (this.name) {
|
|
32
|
-
parts.push(`[${this.name}]`);
|
|
33
|
-
}
|
|
34
|
-
parts.push(`[${LOG_LEVEL_NAMES[level]}]`);
|
|
35
|
-
parts.push(message);
|
|
36
|
-
if (args.length > 0) {
|
|
37
|
-
const formatted = args.map((arg) => {
|
|
38
|
-
if (typeof arg === "object") {
|
|
39
|
-
try {
|
|
40
|
-
return JSON.stringify(arg, null, 2);
|
|
41
|
-
} catch {
|
|
42
|
-
return String(arg);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return String(arg);
|
|
46
|
-
});
|
|
47
|
-
parts.push(...formatted);
|
|
48
|
-
}
|
|
49
|
-
return parts.join(" ");
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* 检查日志级别是否应该输出
|
|
53
|
-
*/
|
|
54
|
-
shouldLog(level) {
|
|
55
|
-
return level >= this.config.level;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* 调试日志
|
|
59
|
-
*/
|
|
60
|
-
debug(message, ...args) {
|
|
61
|
-
if (this.shouldLog(0 /* DEBUG */)) {
|
|
62
|
-
console.error(this.format(0 /* DEBUG */, message, ...args));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* 信息日志
|
|
67
|
-
*/
|
|
68
|
-
info(message, ...args) {
|
|
69
|
-
if (this.shouldLog(1 /* INFO */)) {
|
|
70
|
-
console.error(this.format(1 /* INFO */, message, ...args));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* 简化的 log 方法(等同于 info)
|
|
75
|
-
*/
|
|
76
|
-
log(message, ...args) {
|
|
77
|
-
this.info(message, ...args);
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* 警告日志
|
|
81
|
-
*/
|
|
82
|
-
warn(message, ...args) {
|
|
83
|
-
if (this.shouldLog(2 /* WARN */)) {
|
|
84
|
-
console.error(this.format(2 /* WARN */, message, ...args));
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* 错误日志
|
|
89
|
-
*/
|
|
90
|
-
error(message, ...args) {
|
|
91
|
-
if (this.shouldLog(3 /* ERROR */)) {
|
|
92
|
-
console.error(this.format(3 /* ERROR */, message, ...args));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* 创建子 Logger
|
|
97
|
-
*/
|
|
98
|
-
child(name) {
|
|
99
|
-
const childName = this.name ? `${this.name}:${name}` : name;
|
|
100
|
-
return new _Logger(childName, this.config);
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
var logger = new Logger();
|
|
104
|
-
function createLogger(name) {
|
|
105
|
-
return new Logger(name);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// src/core/autoConfig.ts
|
|
109
|
-
var CACHE_DURATION = 5 * 60 * 1e3;
|
|
110
|
-
|
|
111
|
-
// src/skills/http.ts
|
|
112
|
-
var logger2 = createLogger("Skills:HTTP");
|
|
113
|
-
async function httpRequest(args) {
|
|
114
|
-
const { url, method = "GET", headers = {}, body, timeout = 3e4 } = args;
|
|
115
|
-
logger2.info(`\u53D1\u9001 ${method} \u8BF7\u6C42: ${url}`);
|
|
116
|
-
const startTime = Date.now();
|
|
117
|
-
try {
|
|
118
|
-
const config = {
|
|
119
|
-
url,
|
|
120
|
-
method,
|
|
121
|
-
headers,
|
|
122
|
-
timeout,
|
|
123
|
-
validateStatus: () => true
|
|
124
|
-
// 不抛出 HTTP 错误
|
|
125
|
-
};
|
|
126
|
-
if (body && ["POST", "PUT", "PATCH"].includes(method)) {
|
|
127
|
-
config.data = body;
|
|
128
|
-
}
|
|
129
|
-
const response = await axios(config);
|
|
130
|
-
const timing = Date.now() - startTime;
|
|
131
|
-
const responseHeaders = {};
|
|
132
|
-
for (const [key, value] of Object.entries(response.headers)) {
|
|
133
|
-
if (typeof value === "string") {
|
|
134
|
-
responseHeaders[key] = value;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
logger2.info(`\u8BF7\u6C42\u5B8C\u6210: ${response.status} ${response.statusText} (${timing}ms)`);
|
|
138
|
-
return {
|
|
139
|
-
status: response.status,
|
|
140
|
-
statusText: response.statusText,
|
|
141
|
-
headers: responseHeaders,
|
|
142
|
-
data: response.data,
|
|
143
|
-
timing
|
|
144
|
-
};
|
|
145
|
-
} catch (error) {
|
|
146
|
-
const timing = Date.now() - startTime;
|
|
147
|
-
logger2.error(`\u8BF7\u6C42\u5931\u8D25: ${error.message}`);
|
|
148
|
-
return {
|
|
149
|
-
status: 0,
|
|
150
|
-
statusText: "Request Failed",
|
|
151
|
-
headers: {},
|
|
152
|
-
data: { error: error.message },
|
|
153
|
-
timing
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
var httpRequestToolDefinition = {
|
|
158
|
-
name: "http_request",
|
|
159
|
-
description: "\u53D1\u9001 HTTP \u8BF7\u6C42\u3002\u652F\u6301 GET/POST/PUT/DELETE \u7B49\u65B9\u6CD5\uFF0C\u53EF\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\u548C\u8BF7\u6C42\u4F53\u3002\u9002\u7528\u4E8E API \u6D4B\u8BD5\u3001\u6570\u636E\u83B7\u53D6\u7B49\u573A\u666F\u3002",
|
|
160
|
-
inputSchema: {
|
|
161
|
-
type: "object",
|
|
162
|
-
properties: {
|
|
163
|
-
url: {
|
|
164
|
-
type: "string",
|
|
165
|
-
description: "\u8BF7\u6C42 URL\uFF08\u5FC5\u987B\u662F\u5B8C\u6574 URL\uFF0C\u5305\u542B\u534F\u8BAE\uFF09"
|
|
166
|
-
},
|
|
167
|
-
method: {
|
|
168
|
-
type: "string",
|
|
169
|
-
enum: ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"],
|
|
170
|
-
default: "GET",
|
|
171
|
-
description: "HTTP \u65B9\u6CD5"
|
|
172
|
-
},
|
|
173
|
-
headers: {
|
|
174
|
-
type: "object",
|
|
175
|
-
additionalProperties: { type: "string" },
|
|
176
|
-
description: "\u8BF7\u6C42\u5934\uFF08\u5982 Authorization\u3001Content-Type \u7B49\uFF09"
|
|
177
|
-
},
|
|
178
|
-
body: {
|
|
179
|
-
description: "\u8BF7\u6C42\u4F53\uFF08POST/PUT/PATCH \u65F6\u4F7F\u7528\uFF09"
|
|
180
|
-
},
|
|
181
|
-
timeout: {
|
|
182
|
-
type: "number",
|
|
183
|
-
default: 3e4,
|
|
184
|
-
description: "\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09"
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
required: ["url"]
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
async function handleHttpRequest(args) {
|
|
191
|
-
try {
|
|
192
|
-
const result = await httpRequest(args);
|
|
193
|
-
let output = `## HTTP \u54CD\u5E94
|
|
194
|
-
|
|
195
|
-
`;
|
|
196
|
-
output += `**\u72B6\u6001**: ${result.status} ${result.statusText}
|
|
197
|
-
`;
|
|
198
|
-
output += `**\u8017\u65F6**: ${result.timing}ms
|
|
199
|
-
|
|
200
|
-
`;
|
|
201
|
-
if (Object.keys(result.headers).length > 0) {
|
|
202
|
-
output += `### \u54CD\u5E94\u5934
|
|
203
|
-
\`\`\`json
|
|
204
|
-
${JSON.stringify(result.headers, null, 2)}
|
|
205
|
-
\`\`\`
|
|
206
|
-
|
|
207
|
-
`;
|
|
208
|
-
}
|
|
209
|
-
output += `### \u54CD\u5E94\u4F53
|
|
210
|
-
`;
|
|
211
|
-
if (typeof result.data === "object") {
|
|
212
|
-
output += `\`\`\`json
|
|
213
|
-
${JSON.stringify(result.data, null, 2)}
|
|
214
|
-
\`\`\``;
|
|
215
|
-
} else {
|
|
216
|
-
output += `\`\`\`
|
|
217
|
-
${result.data}
|
|
218
|
-
\`\`\``;
|
|
219
|
-
}
|
|
220
|
-
return {
|
|
221
|
-
content: [{ type: "text", text: output }]
|
|
222
|
-
};
|
|
223
|
-
} catch (error) {
|
|
224
|
-
return {
|
|
225
|
-
content: [{ type: "text", text: `\u274C HTTP \u8BF7\u6C42\u5931\u8D25: ${error.message}` }]
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
export {
|
|
230
|
-
handleHttpRequest,
|
|
231
|
-
httpRequest,
|
|
232
|
-
httpRequestToolDefinition
|
|
233
|
-
};
|
|
234
|
-
//# sourceMappingURL=http.js.map
|
package/dist/skills/http.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/skills/http.ts","../../src/core/logger.ts","../../src/core/autoConfig.ts"],"sourcesContent":["/**\n * HTTP 请求技能\n * \n * 提供 HTTP 请求能力,可以发送 GET/POST 等请求\n * 使用 axios 实现,不依赖外部 MCP 服务器\n */\n\nimport axios, { AxiosRequestConfig, Method } from 'axios';\nimport { createLogger } from '../core/index.js';\n\nconst logger = createLogger('Skills:HTTP');\n\nexport interface HttpRequestArgs {\n url: string;\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';\n headers?: Record<string, string>;\n body?: any;\n timeout?: number;\n}\n\nexport interface HttpResponse {\n status: number;\n statusText: string;\n headers: Record<string, string>;\n data: any;\n timing: number;\n}\n\n/**\n * 发送 HTTP 请求\n */\nexport async function httpRequest(args: HttpRequestArgs): Promise<HttpResponse> {\n const { url, method = 'GET', headers = {}, body, timeout = 30000 } = args;\n \n logger.info(`发送 ${method} 请求: ${url}`);\n \n const startTime = Date.now();\n \n try {\n const config: AxiosRequestConfig = {\n url,\n method: method as Method,\n headers,\n timeout,\n validateStatus: () => true, // 不抛出 HTTP 错误\n };\n \n if (body && ['POST', 'PUT', 'PATCH'].includes(method)) {\n config.data = body;\n }\n \n const response = await axios(config);\n \n const timing = Date.now() - startTime;\n \n // 简化响应头\n const responseHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(response.headers)) {\n if (typeof value === 'string') {\n responseHeaders[key] = value;\n }\n }\n \n logger.info(`请求完成: ${response.status} ${response.statusText} (${timing}ms)`);\n \n return {\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n data: response.data,\n timing\n };\n } catch (error: any) {\n const timing = Date.now() - startTime;\n \n logger.error(`请求失败: ${error.message}`);\n \n return {\n status: 0,\n statusText: 'Request Failed',\n headers: {},\n data: { error: error.message },\n timing\n };\n }\n}\n\n/**\n * 工具定义(供 MCP 注册)\n */\nexport const httpRequestToolDefinition = {\n name: 'http_request',\n description: '发送 HTTP 请求。支持 GET/POST/PUT/DELETE 等方法,可自定义请求头和请求体。适用于 API 测试、数据获取等场景。',\n inputSchema: {\n type: 'object' as const,\n properties: {\n url: {\n type: 'string',\n description: '请求 URL(必须是完整 URL,包含协议)'\n },\n method: {\n type: 'string',\n enum: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'],\n default: 'GET',\n description: 'HTTP 方法'\n },\n headers: {\n type: 'object',\n additionalProperties: { type: 'string' },\n description: '请求头(如 Authorization、Content-Type 等)'\n },\n body: {\n description: '请求体(POST/PUT/PATCH 时使用)'\n },\n timeout: {\n type: 'number',\n default: 30000,\n description: '超时时间(毫秒)'\n }\n },\n required: ['url']\n }\n};\n\n/**\n * 处理 http_request 工具调用\n */\nexport async function handleHttpRequest(args: any): Promise<{ content: Array<{ type: string; text: string }> }> {\n try {\n const result = await httpRequest(args as HttpRequestArgs);\n \n // 格式化输出\n let output = `## HTTP 响应\\n\\n`;\n output += `**状态**: ${result.status} ${result.statusText}\\n`;\n output += `**耗时**: ${result.timing}ms\\n\\n`;\n \n if (Object.keys(result.headers).length > 0) {\n output += `### 响应头\\n\\`\\`\\`json\\n${JSON.stringify(result.headers, null, 2)}\\n\\`\\`\\`\\n\\n`;\n }\n \n output += `### 响应体\\n`;\n if (typeof result.data === 'object') {\n output += `\\`\\`\\`json\\n${JSON.stringify(result.data, null, 2)}\\n\\`\\`\\``;\n } else {\n output += `\\`\\`\\`\\n${result.data}\\n\\`\\`\\``;\n }\n \n return {\n content: [{ type: 'text', text: output }]\n };\n } catch (error: any) {\n return {\n content: [{ type: 'text', text: `❌ HTTP 请求失败: ${error.message}` }]\n };\n }\n}\n","/**\n * MCP 日志模块\n * \n * 统一的日志接口,支持不同级别和格式化输出\n * MCP 服务器通过 stderr 输出日志,避免污染 stdout\n * \n * @module core/logger\n */\n\n/**\n * 日志级别\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4\n}\n\n/**\n * 日志级别名称\n */\nconst LOG_LEVEL_NAMES: Record<LogLevel, string> = {\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.SILENT]: 'SILENT'\n};\n\n/**\n * 日志配置\n */\ninterface LoggerConfig {\n /** 最小日志级别 */\n level: LogLevel;\n /** 是否显示时间戳 */\n timestamp: boolean;\n /** 前缀 */\n prefix: string;\n}\n\n/**\n * 全局日志配置\n */\nlet globalConfig: LoggerConfig = {\n level: process.env.DEBUG ? LogLevel.DEBUG : LogLevel.INFO,\n timestamp: false,\n prefix: '[MCP]'\n};\n\n/**\n * Logger 类\n */\nexport class Logger {\n private readonly name: string;\n private readonly config: LoggerConfig;\n \n constructor(name?: string, config?: Partial<LoggerConfig>) {\n this.name = name || '';\n this.config = { ...globalConfig, ...config };\n }\n \n /**\n * 格式化日志消息\n */\n private format(level: LogLevel, message: string, ...args: unknown[]): string {\n const parts: string[] = [];\n \n if (this.config.timestamp) {\n parts.push(new Date().toISOString());\n }\n \n parts.push(this.config.prefix);\n \n if (this.name) {\n parts.push(`[${this.name}]`);\n }\n \n parts.push(`[${LOG_LEVEL_NAMES[level]}]`);\n parts.push(message);\n \n // 处理额外参数\n if (args.length > 0) {\n const formatted = args.map(arg => {\n if (typeof arg === 'object') {\n try {\n return JSON.stringify(arg, null, 2);\n } catch {\n return String(arg);\n }\n }\n return String(arg);\n });\n parts.push(...formatted);\n }\n \n return parts.join(' ');\n }\n \n /**\n * 检查日志级别是否应该输出\n */\n private shouldLog(level: LogLevel): boolean {\n return level >= this.config.level;\n }\n \n /**\n * 调试日志\n */\n debug(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.DEBUG)) {\n console.error(this.format(LogLevel.DEBUG, message, ...args));\n }\n }\n \n /**\n * 信息日志\n */\n info(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.INFO)) {\n console.error(this.format(LogLevel.INFO, message, ...args));\n }\n }\n \n /**\n * 简化的 log 方法(等同于 info)\n */\n log(message: string, ...args: unknown[]): void {\n this.info(message, ...args);\n }\n \n /**\n * 警告日志\n */\n warn(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.WARN)) {\n console.error(this.format(LogLevel.WARN, message, ...args));\n }\n }\n \n /**\n * 错误日志\n */\n error(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.ERROR)) {\n console.error(this.format(LogLevel.ERROR, message, ...args));\n }\n }\n \n /**\n * 创建子 Logger\n */\n child(name: string): Logger {\n const childName = this.name ? `${this.name}:${name}` : name;\n return new Logger(childName, this.config);\n }\n}\n\n/**\n * 配置全局日志\n */\nexport function configureLogger(config: Partial<LoggerConfig>): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * 设置日志级别\n */\nexport function setLogLevel(level: LogLevel): void {\n globalConfig.level = level;\n}\n\n/**\n * 默认 Logger 实例\n */\nexport const logger = new Logger();\n\n/**\n * 创建带名称的 Logger\n */\nexport function createLogger(name: string): Logger {\n return new Logger(name);\n}\n\n/**\n * 工具函数:计时日志\n */\nexport function createTimer(logger: Logger, operation: string): () => void {\n const start = Date.now();\n logger.debug(`开始: ${operation}`);\n \n return () => {\n const duration = Date.now() - start;\n logger.debug(`完成: ${operation} (${duration}ms)`);\n };\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * 自动配置检测与修复\n * 当 AI 调用任何工具时,自动检测并修复配置问题\n */\n\nexport interface ConfigCheckResult {\n needsSetup: boolean;\n wasFixed: boolean;\n workspacePath: string;\n message?: string;\n}\n\n// 已检测过的工作区缓存(避免重复检测)\nconst checkedWorkspaces = new Map<string, { configured: boolean; timestamp: number }>();\nconst CACHE_DURATION = 5 * 60 * 1000; // 5 分钟缓存\n\n/**\n * 检测并自动修复工作区配置\n * 使用缓存避免重复检测,只在首次或缓存过期时执行\n * @param workspacePath 工作区路径\n * @returns 配置检测结果\n */\nexport function ensureWorkspaceConfig(workspacePath: string): ConfigCheckResult {\n const result: ConfigCheckResult = {\n needsSetup: false,\n wasFixed: false,\n workspacePath\n };\n \n if (!workspacePath || !fs.existsSync(workspacePath)) {\n return result;\n }\n \n // 检查缓存\n const cached = checkedWorkspaces.get(workspacePath);\n const now = Date.now();\n \n if (cached && cached.configured && (now - cached.timestamp) < CACHE_DURATION) {\n // 缓存有效且已配置,直接返回\n return result;\n }\n \n const vscodeDir = path.join(workspacePath, '.vscode');\n const mcpJsonPath = path.join(vscodeDir, 'mcp.json');\n const settingsPath = path.join(vscodeDir, 'settings.json');\n \n // 快速检查是否已配置(只读取文件,不修改)\n let hasMtaConfig = false;\n if (fs.existsSync(mcpJsonPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));\n hasMtaConfig = !!(config.servers?.mta || config.mcpServers?.mta);\n } catch {\n // 配置文件损坏\n }\n }\n \n if (hasMtaConfig) {\n // 已配置,更新缓存并返回\n checkedWorkspaces.set(workspacePath, { configured: true, timestamp: now });\n return result;\n }\n \n // 需要配置,自动修复\n result.needsSetup = true;\n \n try {\n // 创建 .vscode 目录\n if (!fs.existsSync(vscodeDir)) {\n fs.mkdirSync(vscodeDir, { recursive: true });\n }\n \n // 创建或更新 mcp.json\n let mcpConfig: any = { servers: {} };\n if (fs.existsSync(mcpJsonPath)) {\n try {\n mcpConfig = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));\n if (!mcpConfig.servers) {\n mcpConfig.servers = {};\n }\n } catch {\n mcpConfig = { servers: {} };\n }\n }\n \n mcpConfig.servers.mta = {\n command: 'npx',\n args: ['-y', 'mta-mcp'],\n env: {}\n };\n \n fs.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));\n \n // 更新 settings.json 启用 MCP\n let settings: any = {};\n if (fs.existsSync(settingsPath)) {\n try {\n settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));\n } catch {\n settings = {};\n }\n }\n \n if (!settings['github.copilot.chat.mcp.enabled']) {\n settings['github.copilot.chat.mcp.enabled'] = true;\n fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));\n }\n \n result.wasFixed = true;\n result.message = `✅ 已自动为 ${path.basename(workspacePath)} 配置 MTA MCP。请重新加载 VS Code 窗口使配置生效。`;\n \n // 更新缓存\n checkedWorkspaces.set(workspacePath, { configured: true, timestamp: now });\n \n } catch (error) {\n result.message = `⚠️ 自动配置失败: ${error instanceof Error ? error.message : String(error)}`;\n }\n \n return result;\n}\n\n/**\n * 包装工具响应,添加自动配置信息\n */\nexport function wrapResponseWithConfigInfo(\n response: any,\n configResult: ConfigCheckResult\n): any {\n if (!configResult.wasFixed) {\n return response;\n }\n \n // 在响应中添加配置修复信息\n if (typeof response === 'object' && response !== null) {\n return {\n ...response,\n _autoConfig: {\n wasFixed: true,\n message: configResult.message,\n action: '请运行命令: Cmd+Shift+P → \"重新加载窗口\" 使配置生效'\n }\n };\n }\n \n return response;\n}\n"],"mappings":"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","names":["logger"]}
|
package/dist/skills/index.d.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MTA Skills 集成层
|
|
3
|
-
*
|
|
4
|
-
* 作为 MTA 的扩展能力,不影响核心功能(规范、诊断、模板)
|
|
5
|
-
* Skills 配置随 npm 包发布,VSCode 本地无需额外配置
|
|
6
|
-
*
|
|
7
|
-
* 加载优先级:
|
|
8
|
-
* 1. npm 包内的 skills.json(随包更新)
|
|
9
|
-
* 2. 运行时检测已安装的 MCP 包
|
|
10
|
-
*/
|
|
11
|
-
interface SkillConfig {
|
|
12
|
-
package: string;
|
|
13
|
-
version: string;
|
|
14
|
-
enabled: boolean;
|
|
15
|
-
description: string;
|
|
16
|
-
tools: string[];
|
|
17
|
-
category: string;
|
|
18
|
-
note?: string;
|
|
19
|
-
}
|
|
20
|
-
interface SkillsRegistry {
|
|
21
|
-
version: string;
|
|
22
|
-
lastCheck: string | null;
|
|
23
|
-
skills: Record<string, SkillConfig>;
|
|
24
|
-
categories: Record<string, {
|
|
25
|
-
name: string;
|
|
26
|
-
icon: string;
|
|
27
|
-
}>;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Skills 管理器
|
|
31
|
-
* 负责加载和管理集成的 Skills
|
|
32
|
-
* 配置完全来自 npm 包,本地无需任何配置
|
|
33
|
-
*/
|
|
34
|
-
declare class SkillsManager {
|
|
35
|
-
private registry;
|
|
36
|
-
constructor();
|
|
37
|
-
/**
|
|
38
|
-
* 加载 Skills 注册表
|
|
39
|
-
* 从 npm 包内的 skills.json 加载,无需本地配置
|
|
40
|
-
*/
|
|
41
|
-
private loadRegistry;
|
|
42
|
-
/**
|
|
43
|
-
* 获取所有已启用的 Skills
|
|
44
|
-
*/
|
|
45
|
-
getEnabledSkills(): SkillConfig[];
|
|
46
|
-
/**
|
|
47
|
-
* 检查 Skill 是否可用(已启用且依赖包已集成)
|
|
48
|
-
*/
|
|
49
|
-
isSkillAvailable(skillId: string): boolean;
|
|
50
|
-
/**
|
|
51
|
-
* 获取 Skill 配置
|
|
52
|
-
*/
|
|
53
|
-
getSkill(skillId: string): SkillConfig | null;
|
|
54
|
-
/**
|
|
55
|
-
* 获取所有 Skills 信息(用于状态展示)
|
|
56
|
-
*/
|
|
57
|
-
getAllSkillsInfo(): Array<{
|
|
58
|
-
id: string;
|
|
59
|
-
config: SkillConfig;
|
|
60
|
-
}>;
|
|
61
|
-
/**
|
|
62
|
-
* 获取分类信息
|
|
63
|
-
*/
|
|
64
|
-
getCategories(): Record<string, {
|
|
65
|
-
name: string;
|
|
66
|
-
icon: string;
|
|
67
|
-
}>;
|
|
68
|
-
/**
|
|
69
|
-
* 获取注册表版本
|
|
70
|
-
*/
|
|
71
|
-
getVersion(): string;
|
|
72
|
-
/**
|
|
73
|
-
* 获取最后检查时间
|
|
74
|
-
*/
|
|
75
|
-
getLastCheck(): string | null;
|
|
76
|
-
}
|
|
77
|
-
declare function getSkillsManager(): SkillsManager;
|
|
78
|
-
|
|
79
|
-
export { type SkillConfig, SkillsManager, type SkillsRegistry, getSkillsManager };
|
package/dist/skills/index.js
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
// src/skills/index.ts
|
|
2
|
-
import * as fs from "fs";
|
|
3
|
-
import * as path from "path";
|
|
4
|
-
import { fileURLToPath } from "url";
|
|
5
|
-
|
|
6
|
-
// src/core/logger.ts
|
|
7
|
-
var LOG_LEVEL_NAMES = {
|
|
8
|
-
[0 /* DEBUG */]: "DEBUG",
|
|
9
|
-
[1 /* INFO */]: "INFO",
|
|
10
|
-
[2 /* WARN */]: "WARN",
|
|
11
|
-
[3 /* ERROR */]: "ERROR",
|
|
12
|
-
[4 /* SILENT */]: "SILENT"
|
|
13
|
-
};
|
|
14
|
-
var globalConfig = {
|
|
15
|
-
level: process.env.DEBUG ? 0 /* DEBUG */ : 1 /* INFO */,
|
|
16
|
-
timestamp: false,
|
|
17
|
-
prefix: "[MCP]"
|
|
18
|
-
};
|
|
19
|
-
var Logger = class _Logger {
|
|
20
|
-
constructor(name, config) {
|
|
21
|
-
this.name = name || "";
|
|
22
|
-
this.config = { ...globalConfig, ...config };
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 格式化日志消息
|
|
26
|
-
*/
|
|
27
|
-
format(level, message, ...args) {
|
|
28
|
-
const parts = [];
|
|
29
|
-
if (this.config.timestamp) {
|
|
30
|
-
parts.push((/* @__PURE__ */ new Date()).toISOString());
|
|
31
|
-
}
|
|
32
|
-
parts.push(this.config.prefix);
|
|
33
|
-
if (this.name) {
|
|
34
|
-
parts.push(`[${this.name}]`);
|
|
35
|
-
}
|
|
36
|
-
parts.push(`[${LOG_LEVEL_NAMES[level]}]`);
|
|
37
|
-
parts.push(message);
|
|
38
|
-
if (args.length > 0) {
|
|
39
|
-
const formatted = args.map((arg) => {
|
|
40
|
-
if (typeof arg === "object") {
|
|
41
|
-
try {
|
|
42
|
-
return JSON.stringify(arg, null, 2);
|
|
43
|
-
} catch {
|
|
44
|
-
return String(arg);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return String(arg);
|
|
48
|
-
});
|
|
49
|
-
parts.push(...formatted);
|
|
50
|
-
}
|
|
51
|
-
return parts.join(" ");
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* 检查日志级别是否应该输出
|
|
55
|
-
*/
|
|
56
|
-
shouldLog(level) {
|
|
57
|
-
return level >= this.config.level;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* 调试日志
|
|
61
|
-
*/
|
|
62
|
-
debug(message, ...args) {
|
|
63
|
-
if (this.shouldLog(0 /* DEBUG */)) {
|
|
64
|
-
console.error(this.format(0 /* DEBUG */, message, ...args));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* 信息日志
|
|
69
|
-
*/
|
|
70
|
-
info(message, ...args) {
|
|
71
|
-
if (this.shouldLog(1 /* INFO */)) {
|
|
72
|
-
console.error(this.format(1 /* INFO */, message, ...args));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* 简化的 log 方法(等同于 info)
|
|
77
|
-
*/
|
|
78
|
-
log(message, ...args) {
|
|
79
|
-
this.info(message, ...args);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* 警告日志
|
|
83
|
-
*/
|
|
84
|
-
warn(message, ...args) {
|
|
85
|
-
if (this.shouldLog(2 /* WARN */)) {
|
|
86
|
-
console.error(this.format(2 /* WARN */, message, ...args));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* 错误日志
|
|
91
|
-
*/
|
|
92
|
-
error(message, ...args) {
|
|
93
|
-
if (this.shouldLog(3 /* ERROR */)) {
|
|
94
|
-
console.error(this.format(3 /* ERROR */, message, ...args));
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* 创建子 Logger
|
|
99
|
-
*/
|
|
100
|
-
child(name) {
|
|
101
|
-
const childName = this.name ? `${this.name}:${name}` : name;
|
|
102
|
-
return new _Logger(childName, this.config);
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
var logger = new Logger();
|
|
106
|
-
function createLogger(name) {
|
|
107
|
-
return new Logger(name);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// src/core/autoConfig.ts
|
|
111
|
-
var CACHE_DURATION = 5 * 60 * 1e3;
|
|
112
|
-
|
|
113
|
-
// src/skills/index.ts
|
|
114
|
-
var __filename = fileURLToPath(import.meta.url);
|
|
115
|
-
var __dirname = path.dirname(__filename);
|
|
116
|
-
var logger2 = createLogger("Skills");
|
|
117
|
-
var SkillsManager = class {
|
|
118
|
-
constructor() {
|
|
119
|
-
this.registry = null;
|
|
120
|
-
this.loadRegistry();
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* 加载 Skills 注册表
|
|
124
|
-
* 从 npm 包内的 skills.json 加载,无需本地配置
|
|
125
|
-
*/
|
|
126
|
-
loadRegistry() {
|
|
127
|
-
var _a, _b;
|
|
128
|
-
try {
|
|
129
|
-
const registryPath = path.join(__dirname, "../../skills.json");
|
|
130
|
-
if (fs.existsSync(registryPath)) {
|
|
131
|
-
this.registry = JSON.parse(fs.readFileSync(registryPath, "utf-8"));
|
|
132
|
-
const enabledCount = Object.values(((_a = this.registry) == null ? void 0 : _a.skills) || {}).filter((s) => s.enabled).length;
|
|
133
|
-
const totalCount = Object.keys(((_b = this.registry) == null ? void 0 : _b.skills) || {}).length;
|
|
134
|
-
logger2.info(`Skills \u6CE8\u518C\u8868\u5DF2\u52A0\u8F7D\uFF1A${enabledCount}/${totalCount} \u4E2A\u5DF2\u542F\u7528`);
|
|
135
|
-
} else {
|
|
136
|
-
logger2.warn("skills.json \u4E0D\u5B58\u5728\uFF0CSkills \u529F\u80FD\u4E0D\u53EF\u7528");
|
|
137
|
-
}
|
|
138
|
-
} catch (error) {
|
|
139
|
-
logger2.warn("\u52A0\u8F7D Skills \u6CE8\u518C\u8868\u5931\u8D25", error);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* 获取所有已启用的 Skills
|
|
144
|
-
*/
|
|
145
|
-
getEnabledSkills() {
|
|
146
|
-
if (!this.registry) return [];
|
|
147
|
-
return Object.values(this.registry.skills).filter((skill) => skill.enabled);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* 检查 Skill 是否可用(已启用且依赖包已集成)
|
|
151
|
-
*/
|
|
152
|
-
isSkillAvailable(skillId) {
|
|
153
|
-
const skill = this.getSkill(skillId);
|
|
154
|
-
return (skill == null ? void 0 : skill.enabled) === true;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* 获取 Skill 配置
|
|
158
|
-
*/
|
|
159
|
-
getSkill(skillId) {
|
|
160
|
-
if (!this.registry) return null;
|
|
161
|
-
return this.registry.skills[skillId] || null;
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* 获取所有 Skills 信息(用于状态展示)
|
|
165
|
-
*/
|
|
166
|
-
getAllSkillsInfo() {
|
|
167
|
-
if (!this.registry) return [];
|
|
168
|
-
return Object.entries(this.registry.skills).map(([id, config]) => ({
|
|
169
|
-
id,
|
|
170
|
-
config
|
|
171
|
-
}));
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* 获取分类信息
|
|
175
|
-
*/
|
|
176
|
-
getCategories() {
|
|
177
|
-
var _a;
|
|
178
|
-
return ((_a = this.registry) == null ? void 0 : _a.categories) || {};
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* 获取注册表版本
|
|
182
|
-
*/
|
|
183
|
-
getVersion() {
|
|
184
|
-
var _a;
|
|
185
|
-
return ((_a = this.registry) == null ? void 0 : _a.version) || "0.0.0";
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* 获取最后检查时间
|
|
189
|
-
*/
|
|
190
|
-
getLastCheck() {
|
|
191
|
-
var _a;
|
|
192
|
-
return ((_a = this.registry) == null ? void 0 : _a.lastCheck) || null;
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
var skillsManagerInstance = null;
|
|
196
|
-
function getSkillsManager() {
|
|
197
|
-
if (!skillsManagerInstance) {
|
|
198
|
-
skillsManagerInstance = new SkillsManager();
|
|
199
|
-
}
|
|
200
|
-
return skillsManagerInstance;
|
|
201
|
-
}
|
|
202
|
-
export {
|
|
203
|
-
SkillsManager,
|
|
204
|
-
getSkillsManager
|
|
205
|
-
};
|
|
206
|
-
//# sourceMappingURL=index.js.map
|
package/dist/skills/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/skills/index.ts","../../src/core/logger.ts","../../src/core/autoConfig.ts"],"sourcesContent":["/**\n * MTA Skills 集成层\n * \n * 作为 MTA 的扩展能力,不影响核心功能(规范、诊断、模板)\n * Skills 配置随 npm 包发布,VSCode 本地无需额外配置\n * \n * 加载优先级:\n * 1. npm 包内的 skills.json(随包更新)\n * 2. 运行时检测已安装的 MCP 包\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\nimport { createLogger } from '../core/index.js';\n\n// ESM 模块兼容:获取 __dirname\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst logger = createLogger('Skills');\n\nexport interface SkillConfig {\n package: string;\n version: string;\n enabled: boolean;\n description: string;\n tools: string[];\n category: string;\n note?: string;\n}\n\nexport interface SkillsRegistry {\n version: string;\n lastCheck: string | null;\n skills: Record<string, SkillConfig>;\n categories: Record<string, { name: string; icon: string }>;\n}\n\n/**\n * Skills 管理器\n * 负责加载和管理集成的 Skills\n * 配置完全来自 npm 包,本地无需任何配置\n */\nexport class SkillsManager {\n private registry: SkillsRegistry | null = null;\n \n constructor() {\n this.loadRegistry();\n }\n \n /**\n * 加载 Skills 注册表\n * 从 npm 包内的 skills.json 加载,无需本地配置\n */\n private loadRegistry(): void {\n try {\n // 从 npm 包目录加载(dist 的上级目录)\n const registryPath = path.join(__dirname, '../../skills.json');\n \n if (fs.existsSync(registryPath)) {\n this.registry = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));\n const enabledCount = Object.values(this.registry?.skills || {}).filter(s => s.enabled).length;\n const totalCount = Object.keys(this.registry?.skills || {}).length;\n logger.info(`Skills 注册表已加载:${enabledCount}/${totalCount} 个已启用`);\n } else {\n logger.warn('skills.json 不存在,Skills 功能不可用');\n }\n } catch (error) {\n logger.warn('加载 Skills 注册表失败', error);\n }\n }\n \n /**\n * 获取所有已启用的 Skills\n */\n getEnabledSkills(): SkillConfig[] {\n if (!this.registry) return [];\n \n return Object.values(this.registry.skills).filter(skill => skill.enabled);\n }\n \n /**\n * 检查 Skill 是否可用(已启用且依赖包已集成)\n */\n isSkillAvailable(skillId: string): boolean {\n const skill = this.getSkill(skillId);\n return skill?.enabled === true;\n }\n \n /**\n * 获取 Skill 配置\n */\n getSkill(skillId: string): SkillConfig | null {\n if (!this.registry) return null;\n return this.registry.skills[skillId] || null;\n }\n \n /**\n * 获取所有 Skills 信息(用于状态展示)\n */\n getAllSkillsInfo(): Array<{ id: string; config: SkillConfig }> {\n if (!this.registry) return [];\n \n return Object.entries(this.registry.skills).map(([id, config]) => ({\n id,\n config\n }));\n }\n \n /**\n * 获取分类信息\n */\n getCategories(): Record<string, { name: string; icon: string }> {\n return this.registry?.categories || {};\n }\n \n /**\n * 获取注册表版本\n */\n getVersion(): string {\n return this.registry?.version || '0.0.0';\n }\n \n /**\n * 获取最后检查时间\n */\n getLastCheck(): string | null {\n return this.registry?.lastCheck || null;\n }\n}\n\n// 单例\nlet skillsManagerInstance: SkillsManager | null = null;\n\nexport function getSkillsManager(): SkillsManager {\n if (!skillsManagerInstance) {\n skillsManagerInstance = new SkillsManager();\n }\n return skillsManagerInstance;\n}\n","/**\n * MCP 日志模块\n * \n * 统一的日志接口,支持不同级别和格式化输出\n * MCP 服务器通过 stderr 输出日志,避免污染 stdout\n * \n * @module core/logger\n */\n\n/**\n * 日志级别\n */\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n SILENT = 4\n}\n\n/**\n * 日志级别名称\n */\nconst LOG_LEVEL_NAMES: Record<LogLevel, string> = {\n [LogLevel.DEBUG]: 'DEBUG',\n [LogLevel.INFO]: 'INFO',\n [LogLevel.WARN]: 'WARN',\n [LogLevel.ERROR]: 'ERROR',\n [LogLevel.SILENT]: 'SILENT'\n};\n\n/**\n * 日志配置\n */\ninterface LoggerConfig {\n /** 最小日志级别 */\n level: LogLevel;\n /** 是否显示时间戳 */\n timestamp: boolean;\n /** 前缀 */\n prefix: string;\n}\n\n/**\n * 全局日志配置\n */\nlet globalConfig: LoggerConfig = {\n level: process.env.DEBUG ? LogLevel.DEBUG : LogLevel.INFO,\n timestamp: false,\n prefix: '[MCP]'\n};\n\n/**\n * Logger 类\n */\nexport class Logger {\n private readonly name: string;\n private readonly config: LoggerConfig;\n \n constructor(name?: string, config?: Partial<LoggerConfig>) {\n this.name = name || '';\n this.config = { ...globalConfig, ...config };\n }\n \n /**\n * 格式化日志消息\n */\n private format(level: LogLevel, message: string, ...args: unknown[]): string {\n const parts: string[] = [];\n \n if (this.config.timestamp) {\n parts.push(new Date().toISOString());\n }\n \n parts.push(this.config.prefix);\n \n if (this.name) {\n parts.push(`[${this.name}]`);\n }\n \n parts.push(`[${LOG_LEVEL_NAMES[level]}]`);\n parts.push(message);\n \n // 处理额外参数\n if (args.length > 0) {\n const formatted = args.map(arg => {\n if (typeof arg === 'object') {\n try {\n return JSON.stringify(arg, null, 2);\n } catch {\n return String(arg);\n }\n }\n return String(arg);\n });\n parts.push(...formatted);\n }\n \n return parts.join(' ');\n }\n \n /**\n * 检查日志级别是否应该输出\n */\n private shouldLog(level: LogLevel): boolean {\n return level >= this.config.level;\n }\n \n /**\n * 调试日志\n */\n debug(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.DEBUG)) {\n console.error(this.format(LogLevel.DEBUG, message, ...args));\n }\n }\n \n /**\n * 信息日志\n */\n info(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.INFO)) {\n console.error(this.format(LogLevel.INFO, message, ...args));\n }\n }\n \n /**\n * 简化的 log 方法(等同于 info)\n */\n log(message: string, ...args: unknown[]): void {\n this.info(message, ...args);\n }\n \n /**\n * 警告日志\n */\n warn(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.WARN)) {\n console.error(this.format(LogLevel.WARN, message, ...args));\n }\n }\n \n /**\n * 错误日志\n */\n error(message: string, ...args: unknown[]): void {\n if (this.shouldLog(LogLevel.ERROR)) {\n console.error(this.format(LogLevel.ERROR, message, ...args));\n }\n }\n \n /**\n * 创建子 Logger\n */\n child(name: string): Logger {\n const childName = this.name ? `${this.name}:${name}` : name;\n return new Logger(childName, this.config);\n }\n}\n\n/**\n * 配置全局日志\n */\nexport function configureLogger(config: Partial<LoggerConfig>): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * 设置日志级别\n */\nexport function setLogLevel(level: LogLevel): void {\n globalConfig.level = level;\n}\n\n/**\n * 默认 Logger 实例\n */\nexport const logger = new Logger();\n\n/**\n * 创建带名称的 Logger\n */\nexport function createLogger(name: string): Logger {\n return new Logger(name);\n}\n\n/**\n * 工具函数:计时日志\n */\nexport function createTimer(logger: Logger, operation: string): () => void {\n const start = Date.now();\n logger.debug(`开始: ${operation}`);\n \n return () => {\n const duration = Date.now() - start;\n logger.debug(`完成: ${operation} (${duration}ms)`);\n };\n}\n","import * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * 自动配置检测与修复\n * 当 AI 调用任何工具时,自动检测并修复配置问题\n */\n\nexport interface ConfigCheckResult {\n needsSetup: boolean;\n wasFixed: boolean;\n workspacePath: string;\n message?: string;\n}\n\n// 已检测过的工作区缓存(避免重复检测)\nconst checkedWorkspaces = new Map<string, { configured: boolean; timestamp: number }>();\nconst CACHE_DURATION = 5 * 60 * 1000; // 5 分钟缓存\n\n/**\n * 检测并自动修复工作区配置\n * 使用缓存避免重复检测,只在首次或缓存过期时执行\n * @param workspacePath 工作区路径\n * @returns 配置检测结果\n */\nexport function ensureWorkspaceConfig(workspacePath: string): ConfigCheckResult {\n const result: ConfigCheckResult = {\n needsSetup: false,\n wasFixed: false,\n workspacePath\n };\n \n if (!workspacePath || !fs.existsSync(workspacePath)) {\n return result;\n }\n \n // 检查缓存\n const cached = checkedWorkspaces.get(workspacePath);\n const now = Date.now();\n \n if (cached && cached.configured && (now - cached.timestamp) < CACHE_DURATION) {\n // 缓存有效且已配置,直接返回\n return result;\n }\n \n const vscodeDir = path.join(workspacePath, '.vscode');\n const mcpJsonPath = path.join(vscodeDir, 'mcp.json');\n const settingsPath = path.join(vscodeDir, 'settings.json');\n \n // 快速检查是否已配置(只读取文件,不修改)\n let hasMtaConfig = false;\n if (fs.existsSync(mcpJsonPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));\n hasMtaConfig = !!(config.servers?.mta || config.mcpServers?.mta);\n } catch {\n // 配置文件损坏\n }\n }\n \n if (hasMtaConfig) {\n // 已配置,更新缓存并返回\n checkedWorkspaces.set(workspacePath, { configured: true, timestamp: now });\n return result;\n }\n \n // 需要配置,自动修复\n result.needsSetup = true;\n \n try {\n // 创建 .vscode 目录\n if (!fs.existsSync(vscodeDir)) {\n fs.mkdirSync(vscodeDir, { recursive: true });\n }\n \n // 创建或更新 mcp.json\n let mcpConfig: any = { servers: {} };\n if (fs.existsSync(mcpJsonPath)) {\n try {\n mcpConfig = JSON.parse(fs.readFileSync(mcpJsonPath, 'utf-8'));\n if (!mcpConfig.servers) {\n mcpConfig.servers = {};\n }\n } catch {\n mcpConfig = { servers: {} };\n }\n }\n \n mcpConfig.servers.mta = {\n command: 'npx',\n args: ['-y', 'mta-mcp'],\n env: {}\n };\n \n fs.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));\n \n // 更新 settings.json 启用 MCP\n let settings: any = {};\n if (fs.existsSync(settingsPath)) {\n try {\n settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));\n } catch {\n settings = {};\n }\n }\n \n if (!settings['github.copilot.chat.mcp.enabled']) {\n settings['github.copilot.chat.mcp.enabled'] = true;\n fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));\n }\n \n result.wasFixed = true;\n result.message = `✅ 已自动为 ${path.basename(workspacePath)} 配置 MTA MCP。请重新加载 VS Code 窗口使配置生效。`;\n \n // 更新缓存\n checkedWorkspaces.set(workspacePath, { configured: true, timestamp: now });\n \n } catch (error) {\n result.message = `⚠️ 自动配置失败: ${error instanceof Error ? error.message : String(error)}`;\n }\n \n return result;\n}\n\n/**\n * 包装工具响应,添加自动配置信息\n */\nexport function wrapResponseWithConfigInfo(\n response: any,\n configResult: ConfigCheckResult\n): any {\n if (!configResult.wasFixed) {\n return response;\n }\n \n // 在响应中添加配置修复信息\n if (typeof response === 'object' && response !== null) {\n return {\n ...response,\n _autoConfig: {\n wasFixed: true,\n message: configResult.message,\n action: '请运行命令: Cmd+Shift+P → \"重新加载窗口\" 使配置生效'\n }\n };\n }\n \n return response;\n}\n"],"mappings":"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","names":["logger"]}
|
package/dist/skills/memory.d.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Skill - 跨会话记忆
|
|
3
|
-
* 基于内存的简单 KV 存储,记住项目业务逻辑和约定
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* 存储记忆
|
|
7
|
-
*/
|
|
8
|
-
declare function storeMemory(key: string, value: string): Promise<void>;
|
|
9
|
-
/**
|
|
10
|
-
* 检索记忆
|
|
11
|
-
*/
|
|
12
|
-
declare function retrieveMemory(key: string): Promise<string | null>;
|
|
13
|
-
/**
|
|
14
|
-
* 列出所有记忆
|
|
15
|
-
*/
|
|
16
|
-
declare function listMemories(): Promise<Record<string, string>>;
|
|
17
|
-
/**
|
|
18
|
-
* 处理 store_memory 工具调用
|
|
19
|
-
*/
|
|
20
|
-
declare function handleStoreMemory(args: any): Promise<any>;
|
|
21
|
-
/**
|
|
22
|
-
* 处理 retrieve_memory 工具调用
|
|
23
|
-
*/
|
|
24
|
-
declare function handleRetrieveMemory(args: any): Promise<any>;
|
|
25
|
-
/**
|
|
26
|
-
* 处理 list_memories 工具调用
|
|
27
|
-
*/
|
|
28
|
-
declare function handleListMemories(): Promise<any>;
|
|
29
|
-
declare const MEMORY_TOOLS: ({
|
|
30
|
-
name: string;
|
|
31
|
-
description: string;
|
|
32
|
-
inputSchema: {
|
|
33
|
-
type: string;
|
|
34
|
-
properties: {
|
|
35
|
-
key: {
|
|
36
|
-
type: string;
|
|
37
|
-
description: string;
|
|
38
|
-
};
|
|
39
|
-
value: {
|
|
40
|
-
type: string;
|
|
41
|
-
description: string;
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
required: string[];
|
|
45
|
-
};
|
|
46
|
-
} | {
|
|
47
|
-
name: string;
|
|
48
|
-
description: string;
|
|
49
|
-
inputSchema: {
|
|
50
|
-
type: string;
|
|
51
|
-
properties: {
|
|
52
|
-
key: {
|
|
53
|
-
type: string;
|
|
54
|
-
description: string;
|
|
55
|
-
};
|
|
56
|
-
value?: undefined;
|
|
57
|
-
};
|
|
58
|
-
required: string[];
|
|
59
|
-
};
|
|
60
|
-
} | {
|
|
61
|
-
name: string;
|
|
62
|
-
description: string;
|
|
63
|
-
inputSchema: {
|
|
64
|
-
type: string;
|
|
65
|
-
properties: {
|
|
66
|
-
key?: undefined;
|
|
67
|
-
value?: undefined;
|
|
68
|
-
};
|
|
69
|
-
required?: undefined;
|
|
70
|
-
};
|
|
71
|
-
})[];
|
|
72
|
-
|
|
73
|
-
export { MEMORY_TOOLS, handleListMemories, handleRetrieveMemory, handleStoreMemory, listMemories, retrieveMemory, storeMemory };
|