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.
Files changed (117) hide show
  1. package/README.md +140 -2
  2. package/build/core/analyzers/eslint.d.ts +51 -0
  3. package/build/core/analyzers/eslint.d.ts.map +1 -0
  4. package/build/core/analyzers/eslint.js +259 -0
  5. package/build/core/analyzers/eslint.js.map +1 -0
  6. package/build/core/analyzers/index.d.ts +9 -0
  7. package/build/core/analyzers/index.d.ts.map +1 -0
  8. package/build/core/analyzers/index.js +9 -0
  9. package/build/core/analyzers/index.js.map +1 -0
  10. package/build/core/analyzers/registry.d.ts +59 -0
  11. package/build/core/analyzers/registry.d.ts.map +1 -0
  12. package/build/core/analyzers/registry.js +241 -0
  13. package/build/core/analyzers/registry.js.map +1 -0
  14. package/build/core/analyzers/tsconfig.d.ts +45 -0
  15. package/build/core/analyzers/tsconfig.d.ts.map +1 -0
  16. package/build/core/analyzers/tsconfig.js +197 -0
  17. package/build/core/analyzers/tsconfig.js.map +1 -0
  18. package/build/core/analyzers/types.d.ts +176 -0
  19. package/build/core/analyzers/types.d.ts.map +1 -0
  20. package/build/core/analyzers/types.js +39 -0
  21. package/build/core/analyzers/types.js.map +1 -0
  22. package/build/core/analyzers/vite.d.ts +46 -0
  23. package/build/core/analyzers/vite.d.ts.map +1 -0
  24. package/build/core/analyzers/vite.js +211 -0
  25. package/build/core/analyzers/vite.js.map +1 -0
  26. package/build/core/enhancedProjectAnalyzer.d.ts +102 -0
  27. package/build/core/enhancedProjectAnalyzer.d.ts.map +1 -0
  28. package/build/core/enhancedProjectAnalyzer.js +312 -0
  29. package/build/core/enhancedProjectAnalyzer.js.map +1 -0
  30. package/build/core/errors.d.ts +84 -0
  31. package/build/core/errors.d.ts.map +1 -0
  32. package/build/core/errors.js +151 -0
  33. package/build/core/errors.js.map +1 -0
  34. package/build/core/index.d.ts +11 -0
  35. package/build/core/index.d.ts.map +1 -0
  36. package/build/core/index.js +14 -0
  37. package/build/core/index.js.map +1 -0
  38. package/build/core/logger.d.ts +91 -0
  39. package/build/core/logger.d.ts.map +1 -0
  40. package/build/core/logger.js +164 -0
  41. package/build/core/logger.js.map +1 -0
  42. package/build/core/mappings/index.d.ts +5 -0
  43. package/build/core/mappings/index.d.ts.map +1 -0
  44. package/build/core/mappings/index.js +5 -0
  45. package/build/core/mappings/index.js.map +1 -0
  46. package/build/core/mappings/scenarioMappings.d.ts +51 -0
  47. package/build/core/mappings/scenarioMappings.d.ts.map +1 -0
  48. package/build/core/mappings/scenarioMappings.js +105 -0
  49. package/build/core/mappings/scenarioMappings.js.map +1 -0
  50. package/build/core/matching/index.d.ts +8 -0
  51. package/build/core/matching/index.d.ts.map +1 -0
  52. package/build/core/matching/index.js +8 -0
  53. package/build/core/matching/index.js.map +1 -0
  54. package/build/core/matching/intentAnalyzer.d.ts +78 -0
  55. package/build/core/matching/intentAnalyzer.d.ts.map +1 -0
  56. package/build/core/matching/intentAnalyzer.js +255 -0
  57. package/build/core/matching/intentAnalyzer.js.map +1 -0
  58. package/build/core/matching/standardMatcher.d.ts +101 -0
  59. package/build/core/matching/standardMatcher.d.ts.map +1 -0
  60. package/build/core/matching/standardMatcher.js +299 -0
  61. package/build/core/matching/standardMatcher.js.map +1 -0
  62. package/build/core/matching/weights.d.ts +64 -0
  63. package/build/core/matching/weights.d.ts.map +1 -0
  64. package/build/core/matching/weights.js +334 -0
  65. package/build/core/matching/weights.js.map +1 -0
  66. package/build/core/scenarioDetector.d.ts +2 -0
  67. package/build/core/scenarioDetector.d.ts.map +1 -0
  68. package/build/core/scenarioDetector.js +2 -0
  69. package/build/core/scenarioDetector.js.map +1 -0
  70. package/build/core/templates/discovery.d.ts +41 -0
  71. package/build/core/templates/discovery.d.ts.map +1 -0
  72. package/build/core/templates/discovery.js +262 -0
  73. package/build/core/templates/discovery.js.map +1 -0
  74. package/build/core/templates/types.d.ts +80 -0
  75. package/build/core/templates/types.d.ts.map +1 -0
  76. package/build/core/templates/types.js +10 -0
  77. package/build/core/templates/types.js.map +1 -0
  78. package/build/core/types.d.ts +2 -0
  79. package/build/core/types.d.ts.map +1 -1
  80. package/build/core/types.js +4 -3
  81. package/build/core/types.js.map +1 -1
  82. package/build/index.js +136 -23
  83. package/build/index.js.map +1 -1
  84. package/build/tools/getStandardById.d.ts +42 -0
  85. package/build/tools/getStandardById.d.ts.map +1 -0
  86. package/build/tools/getStandardById.js +289 -0
  87. package/build/tools/getStandardById.js.map +1 -0
  88. package/build/tools/getTemplate.d.ts +37 -0
  89. package/build/tools/getTemplate.d.ts.map +1 -0
  90. package/build/tools/getTemplate.js +78 -0
  91. package/build/tools/getTemplate.js.map +1 -0
  92. package/build/tools/listTemplates.d.ts +41 -0
  93. package/build/tools/listTemplates.d.ts.map +1 -0
  94. package/build/tools/listTemplates.js +81 -0
  95. package/build/tools/listTemplates.js.map +1 -0
  96. package/build/tools/queryMappings.d.ts +55 -0
  97. package/build/tools/queryMappings.d.ts.map +1 -0
  98. package/build/tools/queryMappings.js +119 -0
  99. package/build/tools/queryMappings.js.map +1 -0
  100. package/package.json +25 -8
  101. package/src/core/autoInitializer.ts +0 -170
  102. package/src/core/codeValidator.ts +0 -357
  103. package/src/core/githubClient.ts +0 -64
  104. package/src/core/i18nDetector.ts +0 -357
  105. package/src/core/smartAgentMatcher.ts +0 -490
  106. package/src/core/standardsManager.ts +0 -769
  107. package/src/core/types.ts +0 -72
  108. package/src/index.ts +0 -519
  109. package/src/tools/analyzeProject.ts +0 -94
  110. package/src/tools/autoSetup.ts +0 -312
  111. package/src/tools/generateConfig.ts +0 -429
  112. package/src/tools/getCompactStandards.ts +0 -413
  113. package/src/tools/getSmartStandards.ts +0 -225
  114. package/src/tools/healthCheck.ts +0 -261
  115. package/src/tools/listAgents.ts +0 -91
  116. package/src/tools/matchAgents.ts +0 -80
  117. 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,10 @@
1
+ /**
2
+ * 模板系统类型定义
3
+ *
4
+ * 设计理念:简洁的元数据,让 AI 自己决定如何使用
5
+ * MCP 只负责提供信息,不做复杂的渲染逻辑
6
+ *
7
+ * @module core/templates/types
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/templates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -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;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;GAEG;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"}
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"}
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAgDA;;GAEG;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,UAAU,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,OAAe;QACjB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;CACJ"}
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
- const SERVER_VERSION = '1.7.0'; // v1.3.0 更新
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
- console.error('[MCP Error]', error);
71
+ logger.error('MCP 服务器错误', error);
65
72
  };
66
73
  process.on('SIGINT', async () => {
67
- console.error('[MCP] 收到关闭信号,正在关闭服务器...');
74
+ logger.info('收到关闭信号,正在关闭服务器...');
68
75
  await this.server.close();
69
76
  process.exit(0);
70
77
  });
71
78
  process.on('SIGTERM', async () => {
72
- console.error('[MCP] 收到终止信号,正在关闭服务器...');
79
+ logger.info('收到终止信号,正在关闭服务器...');
73
80
  await this.server.close();
74
81
  process.exit(0);
75
82
  });
76
83
  process.on('uncaughtException', (error) => {
77
- console.error('[MCP] 未捕获的异常:', error);
84
+ logger.error('未捕获的异常:', error);
78
85
  process.exit(1);
79
86
  });
80
87
  process.on('unhandledRejection', (reason, promise) => {
81
- console.error('[MCP] 未处理的 Promise 拒绝:', reason);
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
- console.error(`[MCP] 调用工具: ${name}`);
324
- console.error(`[MCP] 参数:`, JSON.stringify(args, null, 2));
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
- const errorMessage = error instanceof Error ? error.message : String(error);
356
- console.error(`[MCP] 工具执行失败:`, errorMessage);
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
- console.error('Copilot Prompts MCP Server 已启动');
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(console.error);
572
+ server.run().catch((error) => {
573
+ logger.error('服务器启动失败:', error);
574
+ process.exit(1);
575
+ });
463
576
  //# sourceMappingURL=index.js.map