mta-mcp 1.9.1 → 2.3.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/bin/mta.cjs +43 -0
- package/dist/index.cjs +4784 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4769 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -16
- package/build/core/agentTemplate.d.ts +0 -33
- package/build/core/agentTemplate.d.ts.map +0 -1
- package/build/core/agentTemplate.js +0 -158
- package/build/core/agentTemplate.js.map +0 -1
- package/build/core/autoInitializer.d.ts +0 -34
- package/build/core/autoInitializer.d.ts.map +0 -1
- package/build/core/autoInitializer.js +0 -145
- package/build/core/autoInitializer.js.map +0 -1
- package/build/core/codeValidator.d.ts +0 -82
- package/build/core/codeValidator.d.ts.map +0 -1
- package/build/core/codeValidator.js +0 -287
- package/build/core/codeValidator.js.map +0 -1
- package/build/core/githubClient.d.ts +0 -26
- package/build/core/githubClient.d.ts.map +0 -1
- package/build/core/githubClient.js +0 -60
- package/build/core/githubClient.js.map +0 -1
- package/build/core/i18nDetector.d.ts +0 -47
- package/build/core/i18nDetector.d.ts.map +0 -1
- package/build/core/i18nDetector.js +0 -314
- package/build/core/i18nDetector.js.map +0 -1
- package/build/core/projectContextManager.d.ts +0 -39
- package/build/core/projectContextManager.d.ts.map +0 -1
- package/build/core/projectContextManager.js +0 -147
- package/build/core/projectContextManager.js.map +0 -1
- package/build/core/smartAgentMatcher.d.ts +0 -51
- package/build/core/smartAgentMatcher.d.ts.map +0 -1
- package/build/core/smartAgentMatcher.js +0 -493
- package/build/core/smartAgentMatcher.js.map +0 -1
- package/build/core/standardsManager.d.ts +0 -130
- package/build/core/standardsManager.d.ts.map +0 -1
- package/build/core/standardsManager.js +0 -600
- package/build/core/standardsManager.js.map +0 -1
- package/build/core/types.d.ts +0 -55
- package/build/core/types.d.ts.map +0 -1
- package/build/core/types.js +0 -21
- package/build/core/types.js.map +0 -1
- package/build/index.d.ts +0 -3
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -463
- package/build/index.js.map +0 -1
- package/build/tools/analyzeProject.d.ts +0 -12
- package/build/tools/analyzeProject.d.ts.map +0 -1
- package/build/tools/analyzeProject.js +0 -85
- package/build/tools/analyzeProject.js.map +0 -1
- package/build/tools/autoSetup.d.ts +0 -15
- package/build/tools/autoSetup.d.ts.map +0 -1
- package/build/tools/autoSetup.js +0 -291
- package/build/tools/autoSetup.js.map +0 -1
- package/build/tools/generateConfig.d.ts +0 -16
- package/build/tools/generateConfig.d.ts.map +0 -1
- package/build/tools/generateConfig.js +0 -379
- package/build/tools/generateConfig.js.map +0 -1
- package/build/tools/generateProjectAgent.d.ts +0 -15
- package/build/tools/generateProjectAgent.d.ts.map +0 -1
- package/build/tools/generateProjectAgent.js +0 -348
- package/build/tools/generateProjectAgent.js.map +0 -1
- package/build/tools/getCompactStandards.d.ts +0 -20
- package/build/tools/getCompactStandards.d.ts.map +0 -1
- package/build/tools/getCompactStandards.js +0 -367
- package/build/tools/getCompactStandards.js.map +0 -1
- package/build/tools/getSmartStandards.d.ts +0 -17
- package/build/tools/getSmartStandards.d.ts.map +0 -1
- package/build/tools/getSmartStandards.js +0 -190
- package/build/tools/getSmartStandards.js.map +0 -1
- package/build/tools/healthCheck.d.ts +0 -14
- package/build/tools/healthCheck.d.ts.map +0 -1
- package/build/tools/healthCheck.js +0 -237
- package/build/tools/healthCheck.js.map +0 -1
- package/build/tools/listAgents.d.ts +0 -10
- package/build/tools/listAgents.d.ts.map +0 -1
- package/build/tools/listAgents.js +0 -79
- package/build/tools/listAgents.js.map +0 -1
- package/build/tools/matchAgents.d.ts +0 -14
- package/build/tools/matchAgents.d.ts.map +0 -1
- package/build/tools/matchAgents.js +0 -70
- package/build/tools/matchAgents.js.map +0 -1
- package/build/tools/usePreset.d.ts +0 -23
- package/build/tools/usePreset.d.ts.map +0 -1
- package/build/tools/usePreset.js +0 -163
- package/build/tools/usePreset.js.map +0 -1
- 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 -214
- 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
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import glob from 'fast-glob';
|
|
4
|
-
/**
|
|
5
|
-
* 国际化检测器
|
|
6
|
-
* 支持检测 Vue、Flutter、React 等项目的国际化配置
|
|
7
|
-
*/
|
|
8
|
-
export class I18nDetector {
|
|
9
|
-
/**
|
|
10
|
-
* 检测项目的国际化配置
|
|
11
|
-
*/
|
|
12
|
-
static async detect(projectPath) {
|
|
13
|
-
// 检测 package.json(前端项目)
|
|
14
|
-
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
15
|
-
if (fs.existsSync(packageJsonPath)) {
|
|
16
|
-
return this.detectFrontendI18n(projectPath, packageJsonPath);
|
|
17
|
-
}
|
|
18
|
-
// 检测 pubspec.yaml(Flutter 项目)
|
|
19
|
-
const pubspecPath = path.join(projectPath, 'pubspec.yaml');
|
|
20
|
-
if (fs.existsSync(pubspecPath)) {
|
|
21
|
-
return this.detectFlutterI18n(projectPath, pubspecPath);
|
|
22
|
-
}
|
|
23
|
-
// 未检测到国际化
|
|
24
|
-
return {
|
|
25
|
-
enabled: false,
|
|
26
|
-
type: 'none',
|
|
27
|
-
configFiles: [],
|
|
28
|
-
messageFiles: [],
|
|
29
|
-
method: '',
|
|
30
|
-
example: '',
|
|
31
|
-
tips: ['项目未配置国际化,建议添加中英双语支持']
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* 检测前端项目的国际化配置(Vue/React)
|
|
36
|
-
*/
|
|
37
|
-
static detectFrontendI18n(projectPath, packageJsonPath) {
|
|
38
|
-
const content = fs.readFileSync(packageJsonPath, 'utf-8');
|
|
39
|
-
const packageJson = JSON.parse(content);
|
|
40
|
-
const allDeps = {
|
|
41
|
-
...packageJson.dependencies,
|
|
42
|
-
...packageJson.devDependencies
|
|
43
|
-
};
|
|
44
|
-
// 检测 vue-i18n
|
|
45
|
-
if (allDeps['vue-i18n']) {
|
|
46
|
-
return this.detectVueI18n(projectPath);
|
|
47
|
-
}
|
|
48
|
-
// 检测 react-i18next
|
|
49
|
-
if (allDeps['react-i18next'] || allDeps['i18next']) {
|
|
50
|
-
return this.detectReactI18n(projectPath);
|
|
51
|
-
}
|
|
52
|
-
// 检测 react-intl
|
|
53
|
-
if (allDeps['react-intl']) {
|
|
54
|
-
return this.detectReactIntl(projectPath);
|
|
55
|
-
}
|
|
56
|
-
// 检测自定义国际化方案
|
|
57
|
-
return this.detectCustomI18n(projectPath);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* 检测 vue-i18n 配置
|
|
61
|
-
*/
|
|
62
|
-
static detectVueI18n(projectPath) {
|
|
63
|
-
const configFiles = [];
|
|
64
|
-
const messageFiles = [];
|
|
65
|
-
// 查找配置文件
|
|
66
|
-
const possibleConfigPaths = [
|
|
67
|
-
'src/i18n/index.ts',
|
|
68
|
-
'src/i18n/index.js',
|
|
69
|
-
'src/locales/index.ts',
|
|
70
|
-
'src/locales/index.js',
|
|
71
|
-
'i18n.config.ts',
|
|
72
|
-
'i18n.config.js'
|
|
73
|
-
];
|
|
74
|
-
for (const configPath of possibleConfigPaths) {
|
|
75
|
-
const fullPath = path.join(projectPath, configPath);
|
|
76
|
-
if (fs.existsSync(fullPath)) {
|
|
77
|
-
configFiles.push(configPath);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// 查找消息文件
|
|
81
|
-
const possibleMessageDirs = ['src/i18n', 'src/locales', 'src/lang'];
|
|
82
|
-
for (const dir of possibleMessageDirs) {
|
|
83
|
-
const fullDir = path.join(projectPath, dir);
|
|
84
|
-
if (fs.existsSync(fullDir)) {
|
|
85
|
-
const files = fs.readdirSync(fullDir);
|
|
86
|
-
for (const file of files) {
|
|
87
|
-
if (/^(zh|en|ja|ko|fr|de|es).*\.(ts|js|json)$/.test(file)) {
|
|
88
|
-
messageFiles.push(path.join(dir, file));
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return {
|
|
94
|
-
enabled: true,
|
|
95
|
-
type: 'vue-i18n',
|
|
96
|
-
configFiles,
|
|
97
|
-
messageFiles,
|
|
98
|
-
method: '$t()',
|
|
99
|
-
example: `{{ $t('common.save') }} 或 :label="$t('user.username')"`,
|
|
100
|
-
tips: [
|
|
101
|
-
'使用命名空间格式:$t("common.save")',
|
|
102
|
-
'所有按钮、标签、提示文字必须使用 $t()',
|
|
103
|
-
'表单验证规则的 message 也需要国际化',
|
|
104
|
-
'确保 zh-CN.ts 和 en-US.ts 中的键名完全一致'
|
|
105
|
-
]
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* 检测 react-i18next 配置
|
|
110
|
-
*/
|
|
111
|
-
static detectReactI18n(projectPath) {
|
|
112
|
-
const configFiles = [];
|
|
113
|
-
const messageFiles = [];
|
|
114
|
-
// 查找配置文件
|
|
115
|
-
const possibleConfigPaths = [
|
|
116
|
-
'src/i18n.ts',
|
|
117
|
-
'src/i18n.js',
|
|
118
|
-
'src/i18n/config.ts',
|
|
119
|
-
'src/i18n/config.js'
|
|
120
|
-
];
|
|
121
|
-
for (const configPath of possibleConfigPaths) {
|
|
122
|
-
const fullPath = path.join(projectPath, configPath);
|
|
123
|
-
if (fs.existsSync(fullPath)) {
|
|
124
|
-
configFiles.push(configPath);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// 查找翻译文件
|
|
128
|
-
const possibleMessageDirs = ['public/locales', 'src/locales', 'src/i18n'];
|
|
129
|
-
for (const dir of possibleMessageDirs) {
|
|
130
|
-
const fullDir = path.join(projectPath, dir);
|
|
131
|
-
if (fs.existsSync(fullDir)) {
|
|
132
|
-
const pattern = path.join(fullDir, '**/*.json');
|
|
133
|
-
try {
|
|
134
|
-
const files = glob.sync(pattern);
|
|
135
|
-
messageFiles.push(...files.map(f => path.relative(projectPath, f)));
|
|
136
|
-
}
|
|
137
|
-
catch (e) {
|
|
138
|
-
// 忽略错误
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
enabled: true,
|
|
144
|
-
type: 'react-i18n',
|
|
145
|
-
configFiles,
|
|
146
|
-
messageFiles,
|
|
147
|
-
method: 't() 或 useTranslation()',
|
|
148
|
-
example: `{t('common.save')} 或 const { t } = useTranslation()`,
|
|
149
|
-
tips: [
|
|
150
|
-
'使用 useTranslation() hook 获取 t 函数',
|
|
151
|
-
'命名空间格式:t("common.save")',
|
|
152
|
-
'所有文案必须通过 t() 函数包裹',
|
|
153
|
-
'确保所有语言的翻译文件同步更新'
|
|
154
|
-
]
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* 检测 react-intl 配置
|
|
159
|
-
*/
|
|
160
|
-
static detectReactIntl(projectPath) {
|
|
161
|
-
return {
|
|
162
|
-
enabled: true,
|
|
163
|
-
type: 'react-i18n',
|
|
164
|
-
configFiles: [],
|
|
165
|
-
messageFiles: [],
|
|
166
|
-
method: 'formatMessage() 或 FormattedMessage',
|
|
167
|
-
example: `<FormattedMessage id="common.save" /> 或 intl.formatMessage({ id: 'common.save' })`,
|
|
168
|
-
tips: [
|
|
169
|
-
'使用 FormattedMessage 组件或 formatMessage 方法',
|
|
170
|
-
'消息 ID 格式:common.save',
|
|
171
|
-
'所有文案必须定义在消息文件中',
|
|
172
|
-
'确保多语言文件的消息 ID 保持一致'
|
|
173
|
-
]
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* 检测自定义国际化方案
|
|
178
|
-
*/
|
|
179
|
-
static detectCustomI18n(projectPath) {
|
|
180
|
-
const messageFiles = [];
|
|
181
|
-
// 查找可能的消息文件
|
|
182
|
-
const possibleDirs = ['src/locales', 'src/i18n', 'src/lang'];
|
|
183
|
-
for (const dir of possibleDirs) {
|
|
184
|
-
const fullDir = path.join(projectPath, dir);
|
|
185
|
-
if (fs.existsSync(fullDir)) {
|
|
186
|
-
const files = fs.readdirSync(fullDir);
|
|
187
|
-
for (const file of files) {
|
|
188
|
-
if (/messages?\.(ts|js)$/i.test(file)) {
|
|
189
|
-
messageFiles.push(path.join(dir, file));
|
|
190
|
-
// 读取文件检测格式
|
|
191
|
-
const content = fs.readFileSync(path.join(fullDir, file), 'utf-8');
|
|
192
|
-
// 检测是否是双语数组格式 [英文, 中文]
|
|
193
|
-
if (content.includes('[') && content.includes('],')) {
|
|
194
|
-
return {
|
|
195
|
-
enabled: true,
|
|
196
|
-
type: 'custom',
|
|
197
|
-
configFiles: [],
|
|
198
|
-
messageFiles,
|
|
199
|
-
method: '$t()',
|
|
200
|
-
example: `{{ $t('保存') }} 或 :label="$t('用户名')"`,
|
|
201
|
-
tips: [
|
|
202
|
-
'使用直接键名格式:$t("保存")',
|
|
203
|
-
'所有按钮、标签、提示文字必须使用 $t()',
|
|
204
|
-
'表单验证规则的 message 也需要国际化',
|
|
205
|
-
'新增文案时需要同时添加中英文翻译'
|
|
206
|
-
]
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
// 未检测到国际化配置
|
|
214
|
-
if (messageFiles.length > 0) {
|
|
215
|
-
return {
|
|
216
|
-
enabled: true,
|
|
217
|
-
type: 'custom',
|
|
218
|
-
configFiles: [],
|
|
219
|
-
messageFiles,
|
|
220
|
-
method: '$t()',
|
|
221
|
-
example: '请查看项目中现有页面的使用方式',
|
|
222
|
-
tips: [
|
|
223
|
-
'检测到国际化文件,但格式未知',
|
|
224
|
-
'请查看现有页面确认使用方式',
|
|
225
|
-
'确保所有新增文案都遵循项目规范'
|
|
226
|
-
]
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
return {
|
|
230
|
-
enabled: false,
|
|
231
|
-
type: 'none',
|
|
232
|
-
configFiles: [],
|
|
233
|
-
messageFiles: [],
|
|
234
|
-
method: '',
|
|
235
|
-
example: '',
|
|
236
|
-
tips: [
|
|
237
|
-
'⚠️ 项目未配置国际化',
|
|
238
|
-
'建议添加中英双语支持',
|
|
239
|
-
'推荐使用 vue-i18n(Vue)或 react-i18next(React)'
|
|
240
|
-
]
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* 检测 Flutter 项目的国际化配置
|
|
245
|
-
*/
|
|
246
|
-
static detectFlutterI18n(projectPath, pubspecPath) {
|
|
247
|
-
const content = fs.readFileSync(pubspecPath, 'utf-8');
|
|
248
|
-
// 检测是否配置了 flutter_localizations
|
|
249
|
-
if (content.includes('flutter_localizations')) {
|
|
250
|
-
const messageFiles = [];
|
|
251
|
-
// 查找 .arb 文件
|
|
252
|
-
const l10nDir = path.join(projectPath, 'lib', 'l10n');
|
|
253
|
-
if (fs.existsSync(l10nDir)) {
|
|
254
|
-
const files = fs.readdirSync(l10nDir);
|
|
255
|
-
for (const file of files) {
|
|
256
|
-
if (file.endsWith('.arb')) {
|
|
257
|
-
messageFiles.push(`lib/l10n/${file}`);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
// 检查是否有 l10n.yaml 配置文件
|
|
262
|
-
const l10nConfigPath = path.join(projectPath, 'l10n.yaml');
|
|
263
|
-
const configFiles = fs.existsSync(l10nConfigPath) ? ['l10n.yaml'] : [];
|
|
264
|
-
return {
|
|
265
|
-
enabled: true,
|
|
266
|
-
type: 'flutter-intl',
|
|
267
|
-
configFiles,
|
|
268
|
-
messageFiles,
|
|
269
|
-
method: 'AppLocalizations',
|
|
270
|
-
example: `AppLocalizations.of(context)!.save 或 S.of(context).save`,
|
|
271
|
-
tips: [
|
|
272
|
-
'使用 AppLocalizations.of(context)!.key',
|
|
273
|
-
'所有文本必须在 .arb 文件中定义',
|
|
274
|
-
'确保 app_en.arb 和 app_zh.arb 的键名完全一致',
|
|
275
|
-
'运行 flutter gen-l10n 生成代码'
|
|
276
|
-
]
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
// 检测 easy_localization
|
|
280
|
-
if (content.includes('easy_localization')) {
|
|
281
|
-
return {
|
|
282
|
-
enabled: true,
|
|
283
|
-
type: 'flutter-intl',
|
|
284
|
-
configFiles: [],
|
|
285
|
-
messageFiles: [],
|
|
286
|
-
method: 'tr()',
|
|
287
|
-
example: `'save'.tr() 或 Text('save'.tr())`,
|
|
288
|
-
tips: [
|
|
289
|
-
'使用 .tr() 扩展方法',
|
|
290
|
-
'翻译文件通常在 assets/translations/',
|
|
291
|
-
'确保所有语言文件的键名一致'
|
|
292
|
-
]
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
// 未检测到国际化配置
|
|
296
|
-
return {
|
|
297
|
-
enabled: false,
|
|
298
|
-
type: 'none',
|
|
299
|
-
configFiles: [],
|
|
300
|
-
messageFiles: [],
|
|
301
|
-
method: '',
|
|
302
|
-
example: '',
|
|
303
|
-
tips: [
|
|
304
|
-
'⚠️ Flutter 项目未配置国际化',
|
|
305
|
-
'建议添加 flutter_localizations',
|
|
306
|
-
'在 pubspec.yaml 中添加:',
|
|
307
|
-
' flutter_localizations:',
|
|
308
|
-
' sdk: flutter',
|
|
309
|
-
' intl: any'
|
|
310
|
-
]
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
//# sourceMappingURL=i18nDetector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"i18nDetector.js","sourceRoot":"","sources":["../../src/core/i18nDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 项目上下文信息
|
|
3
|
-
*/
|
|
4
|
-
export interface ProjectContext {
|
|
5
|
-
name: string;
|
|
6
|
-
type: string;
|
|
7
|
-
techStack: string[];
|
|
8
|
-
rootPath: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* 项目上下文管理器
|
|
12
|
-
* 负责识别和加载项目配置
|
|
13
|
-
*/
|
|
14
|
-
export declare class ProjectContextManager {
|
|
15
|
-
private contextCache;
|
|
16
|
-
/**
|
|
17
|
-
* 从文件路径检测项目上下文
|
|
18
|
-
* @param filePath 当前编辑的文件路径
|
|
19
|
-
* @returns 项目上下文,如果未找到返回 null
|
|
20
|
-
*/
|
|
21
|
-
detectProjectContext(filePath: string): ProjectContext | null;
|
|
22
|
-
/**
|
|
23
|
-
* 查找项目根目录
|
|
24
|
-
*/
|
|
25
|
-
private findProjectRoot;
|
|
26
|
-
/**
|
|
27
|
-
* 解析 copilot-project.md 文件
|
|
28
|
-
*/
|
|
29
|
-
private parseProjectConfig;
|
|
30
|
-
/**
|
|
31
|
-
* 从其他配置文件推断项目信息
|
|
32
|
-
*/
|
|
33
|
-
private inferProjectContext;
|
|
34
|
-
/**
|
|
35
|
-
* 清除缓存
|
|
36
|
-
*/
|
|
37
|
-
clearCache(): void;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=projectContextManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projectContextManager.d.ts","sourceRoot":"","sources":["../../src/core/projectContextManager.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,YAAY,CAA0C;IAE9D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IA8B7D;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgD3B;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
/**
|
|
4
|
-
* 项目上下文管理器
|
|
5
|
-
* 负责识别和加载项目配置
|
|
6
|
-
*/
|
|
7
|
-
export class ProjectContextManager {
|
|
8
|
-
contextCache = new Map();
|
|
9
|
-
/**
|
|
10
|
-
* 从文件路径检测项目上下文
|
|
11
|
-
* @param filePath 当前编辑的文件路径
|
|
12
|
-
* @returns 项目上下文,如果未找到返回 null
|
|
13
|
-
*/
|
|
14
|
-
detectProjectContext(filePath) {
|
|
15
|
-
const projectRoot = this.findProjectRoot(filePath);
|
|
16
|
-
if (!projectRoot) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
// 检查缓存
|
|
20
|
-
if (this.contextCache.has(projectRoot)) {
|
|
21
|
-
return this.contextCache.get(projectRoot);
|
|
22
|
-
}
|
|
23
|
-
// 尝试读取 copilot-project.md
|
|
24
|
-
const projectConfigPath = path.join(projectRoot, '.github', 'copilot-project.md');
|
|
25
|
-
if (fs.existsSync(projectConfigPath)) {
|
|
26
|
-
const context = this.parseProjectConfig(projectConfigPath, projectRoot);
|
|
27
|
-
if (context) {
|
|
28
|
-
this.contextCache.set(projectRoot, context);
|
|
29
|
-
return context;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
// 回退:从 package.json 或其他配置推断
|
|
33
|
-
const fallbackContext = this.inferProjectContext(projectRoot);
|
|
34
|
-
if (fallbackContext) {
|
|
35
|
-
this.contextCache.set(projectRoot, fallbackContext);
|
|
36
|
-
}
|
|
37
|
-
return fallbackContext;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* 查找项目根目录
|
|
41
|
-
*/
|
|
42
|
-
findProjectRoot(filePath) {
|
|
43
|
-
let currentDir = path.dirname(filePath);
|
|
44
|
-
const maxDepth = 10; // 最多向上查找10层
|
|
45
|
-
let depth = 0;
|
|
46
|
-
while (depth < maxDepth) {
|
|
47
|
-
// 检查是否是项目根目录的标志
|
|
48
|
-
const markers = [
|
|
49
|
-
'package.json',
|
|
50
|
-
'pubspec.yaml',
|
|
51
|
-
'.git',
|
|
52
|
-
'go.mod',
|
|
53
|
-
'Cargo.toml'
|
|
54
|
-
];
|
|
55
|
-
for (const marker of markers) {
|
|
56
|
-
if (fs.existsSync(path.join(currentDir, marker))) {
|
|
57
|
-
return currentDir;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
const parentDir = path.dirname(currentDir);
|
|
61
|
-
if (parentDir === currentDir) {
|
|
62
|
-
// 已到达根目录
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
currentDir = parentDir;
|
|
66
|
-
depth++;
|
|
67
|
-
}
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* 解析 copilot-project.md 文件
|
|
72
|
-
*/
|
|
73
|
-
parseProjectConfig(configPath, rootPath) {
|
|
74
|
-
try {
|
|
75
|
-
const content = fs.readFileSync(configPath, 'utf-8');
|
|
76
|
-
// 简单的正则解析
|
|
77
|
-
const nameMatch = content.match(/项目名称[::]\s*(.+)/);
|
|
78
|
-
const typeMatch = content.match(/项目类型[::]\s*(.+)/);
|
|
79
|
-
const techStackMatch = content.match(/技术栈[::]\s*(.+)/);
|
|
80
|
-
if (!nameMatch || !typeMatch) {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
name: nameMatch[1].trim(),
|
|
85
|
-
type: typeMatch[1].trim(),
|
|
86
|
-
techStack: techStackMatch ? techStackMatch[1].split(/[,,]/).map(s => s.trim()) : [],
|
|
87
|
-
rootPath
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* 从其他配置文件推断项目信息
|
|
96
|
-
*/
|
|
97
|
-
inferProjectContext(rootPath) {
|
|
98
|
-
const projectName = path.basename(rootPath);
|
|
99
|
-
// 检查 package.json
|
|
100
|
-
const packageJsonPath = path.join(rootPath, 'package.json');
|
|
101
|
-
if (fs.existsSync(packageJsonPath)) {
|
|
102
|
-
try {
|
|
103
|
-
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
104
|
-
const techStack = [];
|
|
105
|
-
// 检测 Vue
|
|
106
|
-
if (packageJson.dependencies?.vue || packageJson.devDependencies?.vue) {
|
|
107
|
-
techStack.push('vue');
|
|
108
|
-
}
|
|
109
|
-
// 检测 React
|
|
110
|
-
if (packageJson.dependencies?.react || packageJson.devDependencies?.react) {
|
|
111
|
-
techStack.push('react');
|
|
112
|
-
}
|
|
113
|
-
// 检测 TypeScript
|
|
114
|
-
if (packageJson.devDependencies?.typescript) {
|
|
115
|
-
techStack.push('typescript');
|
|
116
|
-
}
|
|
117
|
-
return {
|
|
118
|
-
name: packageJson.name || projectName,
|
|
119
|
-
type: techStack.includes('vue') ? 'vue' : techStack.includes('react') ? 'react' : 'javascript',
|
|
120
|
-
techStack,
|
|
121
|
-
rootPath
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
// 解析失败,继续尝试其他方式
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// 检查 pubspec.yaml (Flutter)
|
|
129
|
-
const pubspecPath = path.join(rootPath, 'pubspec.yaml');
|
|
130
|
-
if (fs.existsSync(pubspecPath)) {
|
|
131
|
-
return {
|
|
132
|
-
name: projectName,
|
|
133
|
-
type: 'flutter',
|
|
134
|
-
techStack: ['flutter', 'dart'],
|
|
135
|
-
rootPath
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* 清除缓存
|
|
142
|
-
*/
|
|
143
|
-
clearCache() {
|
|
144
|
-
this.contextCache.clear();
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
//# sourceMappingURL=projectContextManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"projectContextManager.js","sourceRoot":"","sources":["../../src/core/projectContextManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { ProjectFeatures, AgentMetadata, Logger } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* 工作区文件夹接口(简化版)
|
|
4
|
-
*/
|
|
5
|
-
interface WorkspaceFolder {
|
|
6
|
-
uri: {
|
|
7
|
-
fsPath: string;
|
|
8
|
-
};
|
|
9
|
-
name: string;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* 智能 Agent 匹配器
|
|
13
|
-
* 根据项目特征自动推荐和应用合适的 Agents
|
|
14
|
-
*/
|
|
15
|
-
export declare class SmartAgentMatcher {
|
|
16
|
-
private logger?;
|
|
17
|
-
constructor(logger?: Logger | undefined);
|
|
18
|
-
/**
|
|
19
|
-
* 分析项目特征
|
|
20
|
-
*/
|
|
21
|
-
analyzeProject(workspaceFolder: WorkspaceFolder): Promise<ProjectFeatures>;
|
|
22
|
-
/**
|
|
23
|
-
* 分析 package.json
|
|
24
|
-
*/
|
|
25
|
-
private analyzePackageJson;
|
|
26
|
-
/**
|
|
27
|
-
* 分析 pubspec.yaml (Flutter 项目)
|
|
28
|
-
*/
|
|
29
|
-
private analyzePubspecYaml;
|
|
30
|
-
/**
|
|
31
|
-
* 分析文件结构
|
|
32
|
-
*/
|
|
33
|
-
private analyzeFileStructure;
|
|
34
|
-
/**
|
|
35
|
-
* 匹配 Agents
|
|
36
|
-
*/
|
|
37
|
-
matchAgents(features: ProjectFeatures, availableAgents: AgentMetadata[]): AgentMetadata[];
|
|
38
|
-
/**
|
|
39
|
-
* 计算匹配分数
|
|
40
|
-
*/
|
|
41
|
-
private calculateMatchScore;
|
|
42
|
-
/**
|
|
43
|
-
* 解析 Agent 元数据
|
|
44
|
-
*/
|
|
45
|
-
parseAgentMetadata(filePath: string, content: string): AgentMetadata;
|
|
46
|
-
private mergeFeatures;
|
|
47
|
-
private inferProjectType;
|
|
48
|
-
private log;
|
|
49
|
-
}
|
|
50
|
-
export {};
|
|
51
|
-
//# sourceMappingURL=smartAgentMatcher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"smartAgentMatcher.d.ts","sourceRoot":"","sources":["../../src/core/smartAgentMatcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpE;;GAEG;AACH,UAAU,eAAe;IACrB,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IACd,OAAO,CAAC,MAAM,CAAC;gBAAP,MAAM,CAAC,EAAE,MAAM,YAAA;IAEnC;;OAEG;IACG,cAAc,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IA0ChF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsJ1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;OAEG;YACW,oBAAoB;IA4DlC;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;IAWzF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiD3B;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IAmDpE,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,GAAG;CAGd"}
|