mta-mcp 1.9.0 → 2.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/README.md +140 -2
- package/build/core/analyzers/eslint.d.ts +51 -0
- package/build/core/analyzers/eslint.d.ts.map +1 -0
- package/build/core/analyzers/eslint.js +259 -0
- package/build/core/analyzers/eslint.js.map +1 -0
- package/build/core/analyzers/index.d.ts +9 -0
- package/build/core/analyzers/index.d.ts.map +1 -0
- package/build/core/analyzers/index.js +9 -0
- package/build/core/analyzers/index.js.map +1 -0
- package/build/core/analyzers/registry.d.ts +59 -0
- package/build/core/analyzers/registry.d.ts.map +1 -0
- package/build/core/analyzers/registry.js +241 -0
- package/build/core/analyzers/registry.js.map +1 -0
- package/build/core/analyzers/tsconfig.d.ts +45 -0
- package/build/core/analyzers/tsconfig.d.ts.map +1 -0
- package/build/core/analyzers/tsconfig.js +197 -0
- package/build/core/analyzers/tsconfig.js.map +1 -0
- package/build/core/analyzers/types.d.ts +176 -0
- package/build/core/analyzers/types.d.ts.map +1 -0
- package/build/core/analyzers/types.js +39 -0
- package/build/core/analyzers/types.js.map +1 -0
- package/build/core/analyzers/vite.d.ts +46 -0
- package/build/core/analyzers/vite.d.ts.map +1 -0
- package/build/core/analyzers/vite.js +211 -0
- package/build/core/analyzers/vite.js.map +1 -0
- package/build/core/enhancedProjectAnalyzer.d.ts +102 -0
- package/build/core/enhancedProjectAnalyzer.d.ts.map +1 -0
- package/build/core/enhancedProjectAnalyzer.js +312 -0
- package/build/core/enhancedProjectAnalyzer.js.map +1 -0
- package/build/core/errors.d.ts +84 -0
- package/build/core/errors.d.ts.map +1 -0
- package/build/core/errors.js +151 -0
- package/build/core/errors.js.map +1 -0
- package/build/core/index.d.ts +11 -0
- package/build/core/index.d.ts.map +1 -0
- package/build/core/index.js +14 -0
- package/build/core/index.js.map +1 -0
- package/build/core/logger.d.ts +91 -0
- package/build/core/logger.d.ts.map +1 -0
- package/build/core/logger.js +164 -0
- package/build/core/logger.js.map +1 -0
- package/build/core/mappings/index.d.ts +5 -0
- package/build/core/mappings/index.d.ts.map +1 -0
- package/build/core/mappings/index.js +5 -0
- package/build/core/mappings/index.js.map +1 -0
- package/build/core/mappings/scenarioMappings.d.ts +51 -0
- package/build/core/mappings/scenarioMappings.d.ts.map +1 -0
- package/build/core/mappings/scenarioMappings.js +105 -0
- package/build/core/mappings/scenarioMappings.js.map +1 -0
- package/build/core/matching/index.d.ts +8 -0
- package/build/core/matching/index.d.ts.map +1 -0
- package/build/core/matching/index.js +8 -0
- package/build/core/matching/index.js.map +1 -0
- package/build/core/matching/intentAnalyzer.d.ts +78 -0
- package/build/core/matching/intentAnalyzer.d.ts.map +1 -0
- package/build/core/matching/intentAnalyzer.js +255 -0
- package/build/core/matching/intentAnalyzer.js.map +1 -0
- package/build/core/matching/standardMatcher.d.ts +101 -0
- package/build/core/matching/standardMatcher.d.ts.map +1 -0
- package/build/core/matching/standardMatcher.js +299 -0
- package/build/core/matching/standardMatcher.js.map +1 -0
- package/build/core/matching/weights.d.ts +64 -0
- package/build/core/matching/weights.d.ts.map +1 -0
- package/build/core/matching/weights.js +334 -0
- package/build/core/matching/weights.js.map +1 -0
- package/build/core/scenarioDetector.d.ts +2 -0
- package/build/core/scenarioDetector.d.ts.map +1 -0
- package/build/core/scenarioDetector.js +2 -0
- package/build/core/scenarioDetector.js.map +1 -0
- package/build/core/templates/discovery.d.ts +41 -0
- package/build/core/templates/discovery.d.ts.map +1 -0
- package/build/core/templates/discovery.js +262 -0
- package/build/core/templates/discovery.js.map +1 -0
- package/build/core/templates/types.d.ts +80 -0
- package/build/core/templates/types.d.ts.map +1 -0
- package/build/core/templates/types.js +10 -0
- package/build/core/templates/types.js.map +1 -0
- package/build/core/types.d.ts +2 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/core/types.js +4 -3
- package/build/core/types.js.map +1 -1
- package/build/index.js +136 -23
- package/build/index.js.map +1 -1
- package/build/tools/getStandardById.d.ts +42 -0
- package/build/tools/getStandardById.d.ts.map +1 -0
- package/build/tools/getStandardById.js +289 -0
- package/build/tools/getStandardById.js.map +1 -0
- package/build/tools/getTemplate.d.ts +37 -0
- package/build/tools/getTemplate.d.ts.map +1 -0
- package/build/tools/getTemplate.js +78 -0
- package/build/tools/getTemplate.js.map +1 -0
- package/build/tools/listTemplates.d.ts +41 -0
- package/build/tools/listTemplates.d.ts.map +1 -0
- package/build/tools/listTemplates.js +81 -0
- package/build/tools/listTemplates.js.map +1 -0
- package/build/tools/queryMappings.d.ts +55 -0
- package/build/tools/queryMappings.d.ts.map +1 -0
- package/build/tools/queryMappings.js +119 -0
- package/build/tools/queryMappings.js.map +1 -0
- package/package.json +25 -8
- package/src/core/autoInitializer.ts +0 -170
- package/src/core/codeValidator.ts +0 -357
- package/src/core/githubClient.ts +0 -64
- package/src/core/i18nDetector.ts +0 -357
- package/src/core/smartAgentMatcher.ts +0 -490
- package/src/core/standardsManager.ts +0 -769
- package/src/core/types.ts +0 -72
- package/src/index.ts +0 -519
- package/src/tools/analyzeProject.ts +0 -94
- package/src/tools/autoSetup.ts +0 -312
- package/src/tools/generateConfig.ts +0 -429
- package/src/tools/getCompactStandards.ts +0 -413
- package/src/tools/getSmartStandards.ts +0 -225
- package/src/tools/healthCheck.ts +0 -261
- package/src/tools/listAgents.ts +0 -91
- package/src/tools/matchAgents.ts +0 -80
- package/src/tools/usePreset.ts +0 -180
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模板发现器
|
|
3
|
+
*
|
|
4
|
+
* 扫描模板目录,解析 _CONFIG.md 获取元数据
|
|
5
|
+
* 只负责发现和读取,不做任何"智能"处理
|
|
6
|
+
*
|
|
7
|
+
* @module core/templates/discovery
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
/**
|
|
12
|
+
* 模板根目录
|
|
13
|
+
*/
|
|
14
|
+
const TEMPLATES_DIR = path.resolve(path.dirname(new URL(import.meta.url).pathname), '../../../../templates');
|
|
15
|
+
/**
|
|
16
|
+
* 模板缓存
|
|
17
|
+
*/
|
|
18
|
+
let templatesCache = null;
|
|
19
|
+
/**
|
|
20
|
+
* 确保缓存已加载
|
|
21
|
+
*/
|
|
22
|
+
function ensureCache() {
|
|
23
|
+
if (templatesCache)
|
|
24
|
+
return;
|
|
25
|
+
templatesCache = new Map();
|
|
26
|
+
scanTemplates(TEMPLATES_DIR, '');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 递归扫描模板目录
|
|
30
|
+
*/
|
|
31
|
+
function scanTemplates(dir, prefix) {
|
|
32
|
+
if (!fs.existsSync(dir))
|
|
33
|
+
return;
|
|
34
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
35
|
+
for (const entry of entries) {
|
|
36
|
+
if (!entry.isDirectory())
|
|
37
|
+
continue;
|
|
38
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
39
|
+
continue;
|
|
40
|
+
const fullPath = path.join(dir, entry.name);
|
|
41
|
+
const templateId = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
42
|
+
// 检查是否有 _CONFIG.md(表示这是一个模板目录)
|
|
43
|
+
const configPath = path.join(fullPath, '_CONFIG.md');
|
|
44
|
+
if (fs.existsSync(configPath)) {
|
|
45
|
+
const metadata = parseConfigMd(configPath, templateId, fullPath);
|
|
46
|
+
if (metadata) {
|
|
47
|
+
templatesCache.set(templateId, metadata);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// 继续递归扫描子目录
|
|
51
|
+
scanTemplates(fullPath, templateId);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 解析 _CONFIG.md 获取模板元数据
|
|
56
|
+
*/
|
|
57
|
+
function parseConfigMd(configPath, templateId, templateDir) {
|
|
58
|
+
try {
|
|
59
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
60
|
+
// 提取标题作为名称
|
|
61
|
+
const titleMatch = content.match(/^#\s+(.+)$/m);
|
|
62
|
+
const name = titleMatch ? titleMatch[1].trim() : templateId;
|
|
63
|
+
// 提取描述(第一个 > 引用块)
|
|
64
|
+
const descMatch = content.match(/^>\s*(.+)$/m);
|
|
65
|
+
const description = descMatch ? descMatch[1].trim() : '';
|
|
66
|
+
// 提取适用框架
|
|
67
|
+
const frameworkMatch = content.match(/\*\*适用框架\*\*:\s*(.+)/i);
|
|
68
|
+
const frameworks = frameworkMatch
|
|
69
|
+
? frameworkMatch[1].split(/[,\/+]/).map(f => f.trim())
|
|
70
|
+
: [];
|
|
71
|
+
// 推断模板类型
|
|
72
|
+
const type = inferTemplateType(templateId, name);
|
|
73
|
+
// 获取文件列表(排除 _CONFIG.md 和 _template.json)
|
|
74
|
+
const files = getTemplateFiles(templateDir);
|
|
75
|
+
// 提取依赖
|
|
76
|
+
const dependencies = extractDependencies(content);
|
|
77
|
+
// 提取建议路径
|
|
78
|
+
const pathMatch = content.match(/复制到.*?`([^`]+)`/i);
|
|
79
|
+
const suggestedPath = pathMatch ? pathMatch[1] : undefined;
|
|
80
|
+
return {
|
|
81
|
+
id: templateId,
|
|
82
|
+
name,
|
|
83
|
+
description,
|
|
84
|
+
frameworks,
|
|
85
|
+
type,
|
|
86
|
+
files,
|
|
87
|
+
dependencies,
|
|
88
|
+
configFile: '_CONFIG.md',
|
|
89
|
+
suggestedPath,
|
|
90
|
+
keywords: extractKeywords(name, description, frameworks)
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error(`解析模板配置失败: ${configPath}`, error);
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 推断模板类型
|
|
100
|
+
*/
|
|
101
|
+
function inferTemplateType(templateId, name) {
|
|
102
|
+
const lower = (templateId + name).toLowerCase();
|
|
103
|
+
if (lower.includes('api') || lower.includes('request') || lower.includes('axios')) {
|
|
104
|
+
return 'api-layer';
|
|
105
|
+
}
|
|
106
|
+
if (lower.includes('component'))
|
|
107
|
+
return 'component';
|
|
108
|
+
if (lower.includes('store') || lower.includes('pinia'))
|
|
109
|
+
return 'store';
|
|
110
|
+
if (lower.includes('composable') || lower.includes('hook'))
|
|
111
|
+
return 'composable';
|
|
112
|
+
if (lower.includes('config'))
|
|
113
|
+
return 'config';
|
|
114
|
+
if (lower.includes('type'))
|
|
115
|
+
return 'types';
|
|
116
|
+
return 'other';
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取模板目录下的所有文件
|
|
120
|
+
*/
|
|
121
|
+
function getTemplateFiles(dir, prefix = '') {
|
|
122
|
+
const files = [];
|
|
123
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
124
|
+
for (const entry of entries) {
|
|
125
|
+
const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
126
|
+
// 跳过配置文件
|
|
127
|
+
if (entry.name === '_CONFIG.md' || entry.name === '_template.json') {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (entry.isDirectory()) {
|
|
131
|
+
files.push(...getTemplateFiles(path.join(dir, entry.name), relativePath));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
files.push(relativePath);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return files;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 从 _CONFIG.md 提取依赖
|
|
141
|
+
*/
|
|
142
|
+
function extractDependencies(content) {
|
|
143
|
+
const depsMatch = content.match(/"dependencies":\s*\{([^}]+)\}/);
|
|
144
|
+
if (!depsMatch)
|
|
145
|
+
return undefined;
|
|
146
|
+
const deps = {};
|
|
147
|
+
const pairs = depsMatch[1].matchAll(/"([^"]+)":\s*"([^"]+)"/g);
|
|
148
|
+
for (const match of pairs) {
|
|
149
|
+
deps[match[1]] = match[2];
|
|
150
|
+
}
|
|
151
|
+
return Object.keys(deps).length > 0 ? deps : undefined;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* 提取关键词
|
|
155
|
+
*/
|
|
156
|
+
function extractKeywords(name, description, frameworks) {
|
|
157
|
+
const text = `${name} ${description}`.toLowerCase();
|
|
158
|
+
const keywords = new Set(frameworks.map(f => f.toLowerCase()));
|
|
159
|
+
// 添加常见关键词
|
|
160
|
+
const commonKeywords = ['axios', 'api', 'mock', 'request', 'http', 'fetch', 'store', 'pinia', 'vuex'];
|
|
161
|
+
for (const kw of commonKeywords) {
|
|
162
|
+
if (text.includes(kw))
|
|
163
|
+
keywords.add(kw);
|
|
164
|
+
}
|
|
165
|
+
return Array.from(keywords);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 列出所有可用模板
|
|
169
|
+
*/
|
|
170
|
+
export function listAllTemplates() {
|
|
171
|
+
ensureCache();
|
|
172
|
+
const result = [];
|
|
173
|
+
for (const [id, metadata] of templatesCache) {
|
|
174
|
+
result.push({
|
|
175
|
+
id,
|
|
176
|
+
name: metadata.name,
|
|
177
|
+
description: metadata.description,
|
|
178
|
+
frameworks: metadata.frameworks,
|
|
179
|
+
type: metadata.type,
|
|
180
|
+
fileCount: metadata.files.length,
|
|
181
|
+
suggestedPath: metadata.suggestedPath
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* 按类型筛选模板
|
|
188
|
+
*/
|
|
189
|
+
export function listTemplatesByType(type) {
|
|
190
|
+
return listAllTemplates().filter(t => t.type === type);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 按框架筛选模板
|
|
194
|
+
*/
|
|
195
|
+
export function listTemplatesByFramework(framework) {
|
|
196
|
+
const lower = framework.toLowerCase();
|
|
197
|
+
return listAllTemplates().filter(t => t.frameworks.some(f => f.toLowerCase().includes(lower)));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 获取模板详情
|
|
201
|
+
*
|
|
202
|
+
* @param templateId 模板 ID
|
|
203
|
+
* @param includeFiles 是否包含文件内容(默认 false,只返回配置说明)
|
|
204
|
+
*/
|
|
205
|
+
export function getTemplateById(templateId, includeFiles = false) {
|
|
206
|
+
ensureCache();
|
|
207
|
+
const metadata = templatesCache.get(templateId);
|
|
208
|
+
if (!metadata)
|
|
209
|
+
return null;
|
|
210
|
+
const templateDir = path.join(TEMPLATES_DIR, templateId);
|
|
211
|
+
// 读取配置说明
|
|
212
|
+
const configPath = path.join(templateDir, '_CONFIG.md');
|
|
213
|
+
const configGuide = fs.existsSync(configPath)
|
|
214
|
+
? fs.readFileSync(configPath, 'utf-8')
|
|
215
|
+
: '';
|
|
216
|
+
const result = {
|
|
217
|
+
metadata,
|
|
218
|
+
configGuide
|
|
219
|
+
};
|
|
220
|
+
// 如果需要完整文件内容
|
|
221
|
+
if (includeFiles) {
|
|
222
|
+
result.files = [];
|
|
223
|
+
for (const filePath of metadata.files) {
|
|
224
|
+
const fullPath = path.join(templateDir, filePath);
|
|
225
|
+
if (fs.existsSync(fullPath)) {
|
|
226
|
+
result.files.push({
|
|
227
|
+
path: filePath,
|
|
228
|
+
content: fs.readFileSync(fullPath, 'utf-8'),
|
|
229
|
+
isConfig: filePath.startsWith('_')
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* 获取模板目录的绝对路径
|
|
238
|
+
*/
|
|
239
|
+
export function getTemplateDir(templateId) {
|
|
240
|
+
ensureCache();
|
|
241
|
+
if (!templatesCache.has(templateId))
|
|
242
|
+
return null;
|
|
243
|
+
return path.join(TEMPLATES_DIR, templateId);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* 搜索模板
|
|
247
|
+
*/
|
|
248
|
+
export function searchTemplates(query) {
|
|
249
|
+
const lower = query.toLowerCase();
|
|
250
|
+
return listAllTemplates().filter(t => t.id.toLowerCase().includes(lower) ||
|
|
251
|
+
t.name.toLowerCase().includes(lower) ||
|
|
252
|
+
t.description.toLowerCase().includes(lower) ||
|
|
253
|
+
t.frameworks.some(f => f.toLowerCase().includes(lower)));
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* 刷新缓存
|
|
257
|
+
*/
|
|
258
|
+
export function refreshCache() {
|
|
259
|
+
templatesCache = null;
|
|
260
|
+
ensureCache();
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/core/templates/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 模板系统类型定义
|
|
3
|
+
*
|
|
4
|
+
* 设计理念:简洁的元数据,让 AI 自己决定如何使用
|
|
5
|
+
* MCP 只负责提供信息,不做复杂的渲染逻辑
|
|
6
|
+
*
|
|
7
|
+
* @module core/templates/types
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* 模板元数据
|
|
11
|
+
* 从 _CONFIG.md 或 _template.json 解析
|
|
12
|
+
*/
|
|
13
|
+
export interface TemplateMetadata {
|
|
14
|
+
/** 模板唯一标识(目录路径作为 ID) */
|
|
15
|
+
id: string;
|
|
16
|
+
/** 模板名称 */
|
|
17
|
+
name: string;
|
|
18
|
+
/** 模板描述 */
|
|
19
|
+
description: string;
|
|
20
|
+
/** 适用框架/技术栈 */
|
|
21
|
+
frameworks: string[];
|
|
22
|
+
/** 模板类型:api-layer, component, store, composable, config */
|
|
23
|
+
type: TemplateType;
|
|
24
|
+
/** 模板文件列表(相对路径) */
|
|
25
|
+
files: string[];
|
|
26
|
+
/** 依赖要求 */
|
|
27
|
+
dependencies?: Record<string, string>;
|
|
28
|
+
/** 配置说明文件路径(通常是 _CONFIG.md) */
|
|
29
|
+
configFile?: string;
|
|
30
|
+
/** 目标安装路径建议(如 src/api/) */
|
|
31
|
+
suggestedPath?: string;
|
|
32
|
+
/** 关键词(用于搜索) */
|
|
33
|
+
keywords?: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 模板类型枚举
|
|
37
|
+
*/
|
|
38
|
+
export type TemplateType = 'api-layer' | 'component' | 'store' | 'composable' | 'config' | 'types' | 'other';
|
|
39
|
+
/**
|
|
40
|
+
* 模板文件内容
|
|
41
|
+
*/
|
|
42
|
+
export interface TemplateFile {
|
|
43
|
+
/** 文件相对路径 */
|
|
44
|
+
path: string;
|
|
45
|
+
/** 文件内容 */
|
|
46
|
+
content: string;
|
|
47
|
+
/** 是否为配置文件(_CONFIG.md 等) */
|
|
48
|
+
isConfig: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 获取模板的返回结果
|
|
52
|
+
*/
|
|
53
|
+
export interface TemplateResult {
|
|
54
|
+
/** 模板元数据 */
|
|
55
|
+
metadata: TemplateMetadata;
|
|
56
|
+
/** 配置说明(_CONFIG.md 内容) */
|
|
57
|
+
configGuide: string;
|
|
58
|
+
/** 模板文件列表(可选,完整模式才返回) */
|
|
59
|
+
files?: TemplateFile[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 模板列表项(简化版,用于列表展示)
|
|
63
|
+
*/
|
|
64
|
+
export interface TemplateListItem {
|
|
65
|
+
/** 模板 ID */
|
|
66
|
+
id: string;
|
|
67
|
+
/** 模板名称 */
|
|
68
|
+
name: string;
|
|
69
|
+
/** 模板描述 */
|
|
70
|
+
description: string;
|
|
71
|
+
/** 适用框架 */
|
|
72
|
+
frameworks: string[];
|
|
73
|
+
/** 模板类型 */
|
|
74
|
+
type: TemplateType;
|
|
75
|
+
/** 文件数量 */
|
|
76
|
+
fileCount: number;
|
|
77
|
+
/** 建议安装路径 */
|
|
78
|
+
suggestedPath?: string;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/templates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2DAA2D;IAC3D,IAAI,EAAE,YAAY,CAAC;IACnB,mBAAmB;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW;IACX,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAClB,WAAW,GACX,WAAW,GACX,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,OAAO,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,YAAY;IACZ,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/templates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
package/build/core/types.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export interface GenerationResult {
|
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* 日志输出接口
|
|
40
|
+
* @deprecated 使用 core/logger.ts 中的 Logger 类
|
|
40
41
|
*/
|
|
41
42
|
export interface Logger {
|
|
42
43
|
log(message: string): void;
|
|
@@ -44,6 +45,7 @@ export interface Logger {
|
|
|
44
45
|
}
|
|
45
46
|
/**
|
|
46
47
|
* 控制台日志实现
|
|
48
|
+
* @deprecated 使用 core/logger.ts 中的 createLogger()
|
|
47
49
|
*/
|
|
48
50
|
export declare class ConsoleLogger implements Logger {
|
|
49
51
|
private enableDebug;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACnB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IACxC,OAAO,CAAC,WAAW,CAAU;gBAEjB,WAAW,GAAE,OAAe;IAIxC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAK/B"}
|
package/build/core/types.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 控制台日志实现
|
|
3
|
+
* @deprecated 使用 core/logger.ts 中的 createLogger()
|
|
3
4
|
*/
|
|
4
5
|
export class ConsoleLogger {
|
|
5
6
|
enableDebug;
|
|
@@ -7,14 +8,14 @@ export class ConsoleLogger {
|
|
|
7
8
|
this.enableDebug = enableDebug;
|
|
8
9
|
}
|
|
9
10
|
log(message) {
|
|
10
|
-
console.error(`[INFO] ${message}`);
|
|
11
|
+
console.error(`[MCP] [INFO] ${message}`);
|
|
11
12
|
}
|
|
12
13
|
error(message) {
|
|
13
|
-
console.error(`[ERROR] ${message}`);
|
|
14
|
+
console.error(`[MCP] [ERROR] ${message}`);
|
|
14
15
|
}
|
|
15
16
|
debug(message) {
|
|
16
17
|
if (this.enableDebug) {
|
|
17
|
-
console.error(`[DEBUG] ${message}`);
|
|
18
|
+
console.error(`[MCP] [DEBUG] ${message}`);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
}
|
package/build/core/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAiDA;;;GAGG;AACH,MAAM,OAAO,aAAa;IACd,WAAW,CAAU;IAE7B,YAAY,cAAuB,KAAK;QACpC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,OAAe;QACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;CACJ"}
|
package/build/index.js
CHANGED
|
@@ -11,9 +11,16 @@ import { getSmartStandards } from './tools/getSmartStandards.js';
|
|
|
11
11
|
import { usePreset, listPresets } from './tools/usePreset.js';
|
|
12
12
|
import { healthCheck } from './tools/healthCheck.js';
|
|
13
13
|
import { getCompactStandards } from './tools/getCompactStandards.js';
|
|
14
|
+
import { getStandardById } from './tools/getStandardById.js';
|
|
15
|
+
import { queryMappings, listScenarios } from './tools/queryMappings.js';
|
|
16
|
+
import { listTemplates } from './tools/listTemplates.js';
|
|
17
|
+
import { getTemplate } from './tools/getTemplate.js';
|
|
14
18
|
import { StandardsManager } from './core/standardsManager.js';
|
|
15
19
|
import { CodeValidator } from './core/codeValidator.js';
|
|
16
|
-
|
|
20
|
+
import { createLogger, errorResponse } from './core/index.js';
|
|
21
|
+
const SERVER_VERSION = '2.2.0'; // v2.2.0 质量保障系统
|
|
22
|
+
// 创建主 Logger
|
|
23
|
+
const logger = createLogger('Server');
|
|
17
24
|
/**
|
|
18
25
|
* Copilot Prompts MCP Server
|
|
19
26
|
* 智能项目分析和编码规范服务
|
|
@@ -61,24 +68,24 @@ class CopilotPromptsMCPServer {
|
|
|
61
68
|
*/
|
|
62
69
|
setupErrorHandlers() {
|
|
63
70
|
this.server.onerror = (error) => {
|
|
64
|
-
|
|
71
|
+
logger.error('MCP 服务器错误', error);
|
|
65
72
|
};
|
|
66
73
|
process.on('SIGINT', async () => {
|
|
67
|
-
|
|
74
|
+
logger.info('收到关闭信号,正在关闭服务器...');
|
|
68
75
|
await this.server.close();
|
|
69
76
|
process.exit(0);
|
|
70
77
|
});
|
|
71
78
|
process.on('SIGTERM', async () => {
|
|
72
|
-
|
|
79
|
+
logger.info('收到终止信号,正在关闭服务器...');
|
|
73
80
|
await this.server.close();
|
|
74
81
|
process.exit(0);
|
|
75
82
|
});
|
|
76
83
|
process.on('uncaughtException', (error) => {
|
|
77
|
-
|
|
84
|
+
logger.error('未捕获的异常:', error);
|
|
78
85
|
process.exit(1);
|
|
79
86
|
});
|
|
80
87
|
process.on('unhandledRejection', (reason, promise) => {
|
|
81
|
-
|
|
88
|
+
logger.error('未处理的 Promise 拒绝:', reason);
|
|
82
89
|
process.exit(1);
|
|
83
90
|
});
|
|
84
91
|
}
|
|
@@ -314,14 +321,118 @@ class CopilotPromptsMCPServer {
|
|
|
314
321
|
},
|
|
315
322
|
},
|
|
316
323
|
},
|
|
324
|
+
{
|
|
325
|
+
name: 'get_standard_by_id',
|
|
326
|
+
description: '📖 按 ID 直接获取规范。AI 知道需要什么规范时,直接按 ID 获取,最简洁高效。支持三种模式:summary(摘要)、key-rules(关键规则,默认)、full(完整内容)。',
|
|
327
|
+
inputSchema: {
|
|
328
|
+
type: 'object',
|
|
329
|
+
properties: {
|
|
330
|
+
id: {
|
|
331
|
+
type: 'string',
|
|
332
|
+
description: '规范 ID(如 vue3-composition, element-plus, pinia)',
|
|
333
|
+
},
|
|
334
|
+
ids: {
|
|
335
|
+
type: 'array',
|
|
336
|
+
items: { type: 'string' },
|
|
337
|
+
description: '多个规范 ID,批量获取',
|
|
338
|
+
},
|
|
339
|
+
mode: {
|
|
340
|
+
type: 'string',
|
|
341
|
+
enum: ['summary', 'key-rules', 'full'],
|
|
342
|
+
description: '加载模式:summary(摘要)、key-rules(关键规则,默认)、full(完整内容)',
|
|
343
|
+
default: 'key-rules',
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
name: 'query_mappings',
|
|
350
|
+
description: '🗺️ 查询场景-规范映射关系。提供映射信息给 AI 参考,AI 自己决定使用哪些规范。不做"智能推荐",只提供数据查询。',
|
|
351
|
+
inputSchema: {
|
|
352
|
+
type: 'object',
|
|
353
|
+
properties: {
|
|
354
|
+
scenario: {
|
|
355
|
+
type: 'string',
|
|
356
|
+
description: '场景名称(如 vue3-form, api-call, pinia-store)',
|
|
357
|
+
},
|
|
358
|
+
fileType: {
|
|
359
|
+
type: 'string',
|
|
360
|
+
description: '文件类型(如 vue, ts, tsx)',
|
|
361
|
+
},
|
|
362
|
+
imports: {
|
|
363
|
+
type: 'array',
|
|
364
|
+
items: { type: 'string' },
|
|
365
|
+
description: '导入的包(如 element-plus, pinia)',
|
|
366
|
+
},
|
|
367
|
+
listAll: {
|
|
368
|
+
type: 'boolean',
|
|
369
|
+
description: '列出所有映射关系',
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
name: 'list_scenarios',
|
|
376
|
+
description: '📋 列出所有可用的场景名称。AI 可使用这些场景名称调用 use_preset 或 query_mappings。',
|
|
377
|
+
inputSchema: {
|
|
378
|
+
type: 'object',
|
|
379
|
+
properties: {},
|
|
380
|
+
},
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
name: 'list_templates',
|
|
384
|
+
description: '📦 列出可用的代码模板。模板是可复用的代码片段,AI 可根据需要选择并应用到目标项目。',
|
|
385
|
+
inputSchema: {
|
|
386
|
+
type: 'object',
|
|
387
|
+
properties: {
|
|
388
|
+
type: {
|
|
389
|
+
type: 'string',
|
|
390
|
+
enum: ['api-layer', 'component', 'store', 'composable', 'config', 'types', 'other'],
|
|
391
|
+
description: '按类型筛选',
|
|
392
|
+
},
|
|
393
|
+
framework: {
|
|
394
|
+
type: 'string',
|
|
395
|
+
description: '按框架筛选(如 vue, react)',
|
|
396
|
+
},
|
|
397
|
+
search: {
|
|
398
|
+
type: 'string',
|
|
399
|
+
description: '搜索关键词',
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
},
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
name: 'get_template',
|
|
406
|
+
description: '📄 获取模板详情和文件内容。AI 可根据配置说明自行修改并应用模板。',
|
|
407
|
+
inputSchema: {
|
|
408
|
+
type: 'object',
|
|
409
|
+
properties: {
|
|
410
|
+
id: {
|
|
411
|
+
type: 'string',
|
|
412
|
+
description: '模板 ID(如 vue/api-layer)',
|
|
413
|
+
},
|
|
414
|
+
includeFiles: {
|
|
415
|
+
type: 'boolean',
|
|
416
|
+
description: '是否包含文件内容(默认 false,只返回配置说明)',
|
|
417
|
+
default: false,
|
|
418
|
+
},
|
|
419
|
+
files: {
|
|
420
|
+
type: 'array',
|
|
421
|
+
items: { type: 'string' },
|
|
422
|
+
description: '指定要获取的文件列表(可选)',
|
|
423
|
+
},
|
|
424
|
+
},
|
|
425
|
+
required: ['id'],
|
|
426
|
+
},
|
|
427
|
+
},
|
|
317
428
|
],
|
|
318
429
|
}));
|
|
319
430
|
// 处理工具调用
|
|
320
431
|
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
321
432
|
try {
|
|
322
433
|
const { name, arguments: args } = request.params;
|
|
323
|
-
|
|
324
|
-
|
|
434
|
+
logger.debug(`调用工具: ${name}`);
|
|
435
|
+
logger.debug(`参数:`, args);
|
|
325
436
|
switch (name) {
|
|
326
437
|
case 'analyze_project':
|
|
327
438
|
return await analyzeProject(args);
|
|
@@ -347,24 +458,23 @@ class CopilotPromptsMCPServer {
|
|
|
347
458
|
return this.getRelevantStandards(args);
|
|
348
459
|
case 'get_standards_stats':
|
|
349
460
|
return this.getStandardsStats(args);
|
|
461
|
+
case 'get_standard_by_id':
|
|
462
|
+
return await getStandardById(args);
|
|
463
|
+
case 'query_mappings':
|
|
464
|
+
return await queryMappings(args);
|
|
465
|
+
case 'list_scenarios':
|
|
466
|
+
return await listScenarios();
|
|
467
|
+
case 'list_templates':
|
|
468
|
+
return await listTemplates(args);
|
|
469
|
+
case 'get_template':
|
|
470
|
+
return await getTemplate(args);
|
|
350
471
|
default:
|
|
351
472
|
throw new Error(`未知工具: ${name}`);
|
|
352
473
|
}
|
|
353
474
|
}
|
|
354
475
|
catch (error) {
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
return {
|
|
358
|
-
content: [
|
|
359
|
-
{
|
|
360
|
-
type: 'text',
|
|
361
|
-
text: JSON.stringify({
|
|
362
|
-
error: errorMessage,
|
|
363
|
-
success: false,
|
|
364
|
-
}, null, 2),
|
|
365
|
-
},
|
|
366
|
-
],
|
|
367
|
-
};
|
|
476
|
+
logger.error(`工具执行失败:`, error);
|
|
477
|
+
return errorResponse(error);
|
|
368
478
|
}
|
|
369
479
|
});
|
|
370
480
|
}
|
|
@@ -454,10 +564,13 @@ class CopilotPromptsMCPServer {
|
|
|
454
564
|
async run() {
|
|
455
565
|
const transport = new StdioServerTransport();
|
|
456
566
|
await this.server.connect(transport);
|
|
457
|
-
|
|
567
|
+
logger.info(`Copilot Prompts MCP Server v${SERVER_VERSION} 已启动`);
|
|
458
568
|
}
|
|
459
569
|
}
|
|
460
570
|
// 启动服务器
|
|
461
571
|
const server = new CopilotPromptsMCPServer();
|
|
462
|
-
server.run().catch(
|
|
572
|
+
server.run().catch((error) => {
|
|
573
|
+
logger.error('服务器启动失败:', error);
|
|
574
|
+
process.exit(1);
|
|
575
|
+
});
|
|
463
576
|
//# sourceMappingURL=index.js.map
|