mta-mcp 2.7.1 → 2.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +59 -109
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1878,7 +1878,7 @@ async function generateConfig(args) {
|
|
|
1878
1878
|
import * as fs6 from "fs";
|
|
1879
1879
|
import * as path6 from "path";
|
|
1880
1880
|
async function autoSetup(args) {
|
|
1881
|
-
var _a
|
|
1881
|
+
var _a;
|
|
1882
1882
|
const logger3 = new ConsoleLogger();
|
|
1883
1883
|
try {
|
|
1884
1884
|
const workspacePath = args.workspacePath || process.cwd();
|
|
@@ -1897,102 +1897,7 @@ async function autoSetup(args) {
|
|
|
1897
1897
|
steps: [],
|
|
1898
1898
|
warnings: []
|
|
1899
1899
|
};
|
|
1900
|
-
logger3.log("\u{1F680} \u5F00\u59CB\
|
|
1901
|
-
const vscodeDir = path6.join(workspacePath, ".vscode");
|
|
1902
|
-
if (!fs6.existsSync(vscodeDir)) {
|
|
1903
|
-
fs6.mkdirSync(vscodeDir, { recursive: true });
|
|
1904
|
-
results.steps.push({ step: "\u521B\u5EFA .vscode \u76EE\u5F55", status: "success" });
|
|
1905
|
-
} else {
|
|
1906
|
-
results.steps.push({ step: "\u68C0\u6D4B\u5230\u5DF2\u6709 .vscode \u76EE\u5F55", status: "skip" });
|
|
1907
|
-
}
|
|
1908
|
-
results.steps.push({
|
|
1909
|
-
step: "\u4F7F\u7528 npx mta-mcp \u914D\u7F6E",
|
|
1910
|
-
status: "success",
|
|
1911
|
-
detail: "\u901A\u8FC7 npm \u5305\u8FD0\u884C\uFF0C\u65E0\u9700\u672C\u5730\u5B89\u88C5"
|
|
1912
|
-
});
|
|
1913
|
-
const mcpJsonPath = path6.join(vscodeDir, "mcp.json");
|
|
1914
|
-
const mcpConfig = {
|
|
1915
|
-
servers: {
|
|
1916
|
-
"mta": {
|
|
1917
|
-
command: "npx",
|
|
1918
|
-
args: ["-y", "mta-mcp"],
|
|
1919
|
-
env: {}
|
|
1920
|
-
}
|
|
1921
|
-
}
|
|
1922
|
-
};
|
|
1923
|
-
if (fs6.existsSync(mcpJsonPath)) {
|
|
1924
|
-
try {
|
|
1925
|
-
const existingConfig = JSON.parse(fs6.readFileSync(mcpJsonPath, "utf-8"));
|
|
1926
|
-
if (existingConfig.mcpServers && !existingConfig.servers) {
|
|
1927
|
-
results.warnings.push("\u68C0\u6D4B\u5230\u65E7\u7248\u914D\u7F6E\u683C\u5F0F(mcpServers)\uFF0C\u5DF2\u81EA\u52A8\u5347\u7EA7\u4E3A\u65B0\u683C\u5F0F(servers)");
|
|
1928
|
-
existingConfig.servers = existingConfig.mcpServers;
|
|
1929
|
-
delete existingConfig.mcpServers;
|
|
1930
|
-
}
|
|
1931
|
-
if ((_a = existingConfig.servers) == null ? void 0 : _a.mta) {
|
|
1932
|
-
results.steps.push({ step: "mcp.json \u5DF2\u5305\u542B mta \u914D\u7F6E", status: "skip" });
|
|
1933
|
-
} else {
|
|
1934
|
-
existingConfig.servers = {
|
|
1935
|
-
...existingConfig.servers,
|
|
1936
|
-
...mcpConfig.servers
|
|
1937
|
-
};
|
|
1938
|
-
fs6.writeFileSync(mcpJsonPath, JSON.stringify(existingConfig, null, 2));
|
|
1939
|
-
results.steps.push({ step: "\u6DFB\u52A0 mta \u5230 mcp.json", status: "success" });
|
|
1940
|
-
}
|
|
1941
|
-
} catch (err) {
|
|
1942
|
-
fs6.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));
|
|
1943
|
-
results.steps.push({ step: "\u91CD\u65B0\u521B\u5EFA mcp.json", status: "success" });
|
|
1944
|
-
results.warnings.push(`\u539F\u914D\u7F6E\u6587\u4EF6\u89E3\u6790\u5931\u8D25: ${err}`);
|
|
1945
|
-
}
|
|
1946
|
-
} else {
|
|
1947
|
-
fs6.writeFileSync(mcpJsonPath, JSON.stringify(mcpConfig, null, 2));
|
|
1948
|
-
results.steps.push({ step: "\u521B\u5EFA mcp.json", status: "success" });
|
|
1949
|
-
}
|
|
1950
|
-
const settingsJsonPath = path6.join(vscodeDir, "settings.json");
|
|
1951
|
-
const mcpSettings = {
|
|
1952
|
-
"github.copilot.chat.mcp.enabled": true,
|
|
1953
|
-
"github.copilot.chat.mcp.configFile": "${workspaceFolder}/.vscode/mcp.json",
|
|
1954
|
-
"github.copilot.chat.mcp.autoStart": true
|
|
1955
|
-
};
|
|
1956
|
-
if (fs6.existsSync(settingsJsonPath)) {
|
|
1957
|
-
try {
|
|
1958
|
-
const existingSettings = JSON.parse(fs6.readFileSync(settingsJsonPath, "utf-8"));
|
|
1959
|
-
const updated = { ...existingSettings, ...mcpSettings };
|
|
1960
|
-
fs6.writeFileSync(settingsJsonPath, JSON.stringify(updated, null, 2) + "\n");
|
|
1961
|
-
results.steps.push({ step: "\u66F4\u65B0 settings.json", status: "success" });
|
|
1962
|
-
} catch {
|
|
1963
|
-
fs6.writeFileSync(settingsJsonPath, JSON.stringify(mcpSettings, null, 2) + "\n");
|
|
1964
|
-
results.steps.push({ step: "\u91CD\u65B0\u521B\u5EFA settings.json", status: "success" });
|
|
1965
|
-
}
|
|
1966
|
-
} else {
|
|
1967
|
-
fs6.writeFileSync(settingsJsonPath, JSON.stringify(mcpSettings, null, 2) + "\n");
|
|
1968
|
-
results.steps.push({ step: "\u521B\u5EFA settings.json", status: "success" });
|
|
1969
|
-
}
|
|
1970
|
-
const extensionsJsonPath = path6.join(vscodeDir, "extensions.json");
|
|
1971
|
-
const recommendedExtensions = {
|
|
1972
|
-
recommendations: [
|
|
1973
|
-
"github.copilot",
|
|
1974
|
-
"github.copilot-chat"
|
|
1975
|
-
]
|
|
1976
|
-
};
|
|
1977
|
-
if (!fs6.existsSync(extensionsJsonPath)) {
|
|
1978
|
-
fs6.writeFileSync(extensionsJsonPath, JSON.stringify(recommendedExtensions, null, 2));
|
|
1979
|
-
results.steps.push({ step: "\u521B\u5EFA extensions.json", status: "success" });
|
|
1980
|
-
} else {
|
|
1981
|
-
results.steps.push({ step: "extensions.json \u5DF2\u5B58\u5728", status: "skip" });
|
|
1982
|
-
}
|
|
1983
|
-
const gitignorePath = path6.join(workspacePath, ".gitignore");
|
|
1984
|
-
if (fs6.existsSync(gitignorePath)) {
|
|
1985
|
-
const gitignoreContent = fs6.readFileSync(gitignorePath, "utf-8");
|
|
1986
|
-
if (!gitignoreContent.includes(".vscode/mcp.json")) {
|
|
1987
|
-
const updatedContent = gitignoreContent + "\n# MCP \u914D\u7F6E\uFF08\u672C\u5730\uFF09\n.vscode/mcp.json\n";
|
|
1988
|
-
fs6.writeFileSync(gitignorePath, updatedContent);
|
|
1989
|
-
results.steps.push({ step: "\u6DFB\u52A0\u5230 .gitignore", status: "success" });
|
|
1990
|
-
} else {
|
|
1991
|
-
results.steps.push({ step: ".gitignore \u5DF2\u5305\u542B\u914D\u7F6E", status: "skip" });
|
|
1992
|
-
}
|
|
1993
|
-
} else {
|
|
1994
|
-
results.warnings.push("\u672A\u68C0\u6D4B\u5230 .gitignore\uFF0C\u5EFA\u8BAE\u624B\u52A8\u6DFB\u52A0 .vscode/mcp.json");
|
|
1995
|
-
}
|
|
1900
|
+
logger3.log("\u{1F680} \u5F00\u59CB\u4E3A\u9879\u76EE\u751F\u6210 copilot-instructions.md...");
|
|
1996
1901
|
const generateInstructions = args.generateInstructions !== false;
|
|
1997
1902
|
const instructionsPath = path6.join(workspacePath, ".github", "copilot-instructions.md");
|
|
1998
1903
|
const hasExistingInstructions = fs6.existsSync(instructionsPath);
|
|
@@ -2015,7 +1920,7 @@ async function autoSetup(args) {
|
|
|
2015
1920
|
if (configContent.type === "text") {
|
|
2016
1921
|
const configData = JSON.parse(configContent.text);
|
|
2017
1922
|
if (configData.success) {
|
|
2018
|
-
const agentIds = ((
|
|
1923
|
+
const agentIds = ((_a = configData.agents) == null ? void 0 : _a.map((a) => a.id || a.title)) || [];
|
|
2019
1924
|
results.steps.push({
|
|
2020
1925
|
step: "\u2705 \u81EA\u52A8\u751F\u6210 copilot-instructions.md",
|
|
2021
1926
|
status: "success",
|
|
@@ -2037,16 +1942,16 @@ async function autoSetup(args) {
|
|
|
2037
1942
|
} else {
|
|
2038
1943
|
results.steps.push({ step: "\u8DF3\u8FC7 copilot-instructions.md \u751F\u6210", status: "skip" });
|
|
2039
1944
|
}
|
|
2040
|
-
logger3.log("\u2705 \
|
|
1945
|
+
logger3.log("\u2705 \u914D\u7F6E\u5B8C\u6210\uFF01");
|
|
2041
1946
|
return {
|
|
2042
1947
|
content: [{
|
|
2043
1948
|
type: "text",
|
|
2044
1949
|
text: JSON.stringify({
|
|
2045
1950
|
success: true,
|
|
2046
|
-
message: "\u{1F389}
|
|
1951
|
+
message: "\u{1F389} \u5DF2\u4E3A\u9879\u76EE\u751F\u6210 copilot-instructions.md",
|
|
2047
1952
|
...results,
|
|
2048
1953
|
nextSteps: [
|
|
2049
|
-
"1. \
|
|
1954
|
+
"1. \u786E\u4FDD MCP \u670D\u52A1\u5668\u5DF2\u542F\u52A8\uFF08\u901A\u8FC7 VS Code \u63D2\u4EF6\u81EA\u52A8\u914D\u7F6E\uFF09",
|
|
2050
1955
|
"2. \u6253\u5F00 GitHub Copilot Chat",
|
|
2051
1956
|
"3. \u5F00\u59CB\u4F7F\u7528\uFF1ACopilot \u4F1A\u81EA\u52A8\u5E94\u7528\u9879\u76EE\u89C4\u8303",
|
|
2052
1957
|
'4. \u9AD8\u7EA7\u7528\u6CD5\uFF1A\u5C1D\u8BD5\u8BF4"\u83B7\u53D6 Vue 3 \u76F8\u5173\u89C4\u8303"'
|
|
@@ -2055,7 +1960,7 @@ async function autoSetup(args) {
|
|
|
2055
1960
|
}]
|
|
2056
1961
|
};
|
|
2057
1962
|
} catch (error) {
|
|
2058
|
-
logger3.error(`\
|
|
1963
|
+
logger3.error(`\u914D\u7F6E\u5931\u8D25: ${error}`);
|
|
2059
1964
|
return {
|
|
2060
1965
|
content: [{
|
|
2061
1966
|
type: "text",
|
|
@@ -3029,6 +2934,7 @@ function buildKeyRulesResponse(uris, context, manager) {
|
|
|
3029
2934
|
const keyRules = [];
|
|
3030
2935
|
if (context.fileType === "vue") {
|
|
3031
2936
|
keyRules.push(...getVueKeyRules(context.imports));
|
|
2937
|
+
keyRules.push(...getCssKeyRules());
|
|
3032
2938
|
} else if (context.fileType === "dart") {
|
|
3033
2939
|
keyRules.push(...getFlutterKeyRules());
|
|
3034
2940
|
} else if (context.fileType === "ts" || context.fileType === "tsx") {
|
|
@@ -3043,6 +2949,11 @@ function buildKeyRulesResponse(uris, context, manager) {
|
|
|
3043
2949
|
if (context.imports.includes("pinia")) {
|
|
3044
2950
|
keyRules.push(...getPiniaKeyRules());
|
|
3045
2951
|
}
|
|
2952
|
+
if (context.scenario.includes("\u6837\u5F0F") || context.scenario.includes("CSS")) {
|
|
2953
|
+
if (!keyRules.some((r) => r.includes("CSS \u6837\u5F0F\u89C4\u8303"))) {
|
|
2954
|
+
keyRules.push(...getCssKeyRules());
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
3046
2957
|
return {
|
|
3047
2958
|
success: true,
|
|
3048
2959
|
mode: "key-rules",
|
|
@@ -3206,6 +3117,46 @@ async function fetchUser(id: number): Promise<User | null> {
|
|
|
3206
3117
|
\`\`\``
|
|
3207
3118
|
];
|
|
3208
3119
|
}
|
|
3120
|
+
function getCssKeyRules() {
|
|
3121
|
+
return [
|
|
3122
|
+
`## CSS \u6837\u5F0F\u89C4\u8303
|
|
3123
|
+
|
|
3124
|
+
### \u57FA\u672C\u539F\u5219
|
|
3125
|
+
- **\u7981\u6B62\u5185\u8054\u6837\u5F0F** - \u4E0D\u4F7F\u7528 \`style="..."\`\uFF0C\u7528 CSS \u7C7B\u66FF\u4EE3
|
|
3126
|
+
- Vue \u7EC4\u4EF6\u4F7F\u7528 \`<style scoped>\` \u548C\u5D4C\u5957 CSS \u8BED\u6CD5
|
|
3127
|
+
- \u5168\u5C40\u6837\u5F0F\u4F7F\u7528\u6807\u51C6 CSS \u8BED\u6CD5\uFF08\u5E26 \`:\`\u3001\`;\`\u3001\`{}\`\uFF09
|
|
3128
|
+
|
|
3129
|
+
### Element Plus \u7EC4\u4EF6\u6837\u5F0F
|
|
3130
|
+
- \u901A\u7528\u6837\u5F0F\u5FC5\u987B\u901A\u8FC7\u7236\u5BB9\u5668\u9650\u5B9A\u4F5C\u7528\u57DF\uFF08\u5982 \`.el-form-item\`\uFF09
|
|
3131
|
+
- **\u907F\u514D\u76F4\u63A5\u9009\u62E9\u57FA\u7840\u7EC4\u4EF6**\uFF1A\u4E0D\u76F4\u63A5\u9009\u62E9 \`.el-input\`\u3001\`.el-select\` \u7B49\uFF0C\u9632\u6B62\u5F71\u54CD\u590D\u5408\u7EC4\u4EF6\u5185\u90E8\u5E03\u5C40
|
|
3132
|
+
- **\u7981\u6B62\u8BBE\u7F6E __wrapper \u5BBD\u5EA6**\uFF1A\`.el-input__wrapper\`\u3001\`.el-select__wrapper\` \u7B49\u53EA\u80FD\u8BBE\u7F6E\u9AD8\u5EA6\u3001\u5185\u8FB9\u8DDD\u3001\u80CC\u666F\u8272\uFF0C\u4E0D\u80FD\u8BBE\u7F6E\u5BBD\u5EA6\uFF08\u4F1A\u5F71\u54CD\u5206\u9875\u5668\u3001\u65E5\u671F\u9009\u62E9\u5668\u7B49\uFF09
|
|
3133
|
+
|
|
3134
|
+
### \u53EF\u4F7F\u7528\u7684\u5DE5\u5177\u7C7B
|
|
3135
|
+
\`\`\`css
|
|
3136
|
+
/* \u95F4\u8DDD */
|
|
3137
|
+
.ml_8, .mr_8, .mt_8, .mb_8 /* 8px margin */
|
|
3138
|
+
.ml_16, .mr_16, .mt_16, .mb_16 /* 16px margin */
|
|
3139
|
+
|
|
3140
|
+
/* \u5BBD\u5EA6 */
|
|
3141
|
+
.w_100, .w_120, .w_180, .w_200 /* \u56FA\u5B9A\u5BBD\u5EA6 */
|
|
3142
|
+
\`\`\`
|
|
3143
|
+
|
|
3144
|
+
### \u793A\u4F8B
|
|
3145
|
+
\`\`\`vue
|
|
3146
|
+
<style scoped>
|
|
3147
|
+
/* \u2705 \u6B63\u786E\uFF1A\u901A\u8FC7\u7236\u5BB9\u5668\u9650\u5B9A */
|
|
3148
|
+
.my-form :deep(.el-form-item) {
|
|
3149
|
+
margin-bottom: 16px;
|
|
3150
|
+
}
|
|
3151
|
+
|
|
3152
|
+
/* \u274C \u9519\u8BEF\uFF1A\u76F4\u63A5\u8BBE\u7F6E\u5168\u5C40\u7EC4\u4EF6 */
|
|
3153
|
+
.el-input__wrapper {
|
|
3154
|
+
width: 200px; /* \u4F1A\u5F71\u54CD\u5206\u9875\u5668\u7B49\u5176\u4ED6\u7EC4\u4EF6 */
|
|
3155
|
+
}
|
|
3156
|
+
\`\`\`
|
|
3157
|
+
`
|
|
3158
|
+
];
|
|
3159
|
+
}
|
|
3209
3160
|
function getFlutterKeyRules() {
|
|
3210
3161
|
return [
|
|
3211
3162
|
`## Flutter UI \u7CFB\u7EDF\u5173\u952E\u89C4\u5219
|
|
@@ -4216,14 +4167,13 @@ var CopilotPromptsMCPServer = class {
|
|
|
4216
4167
|
},
|
|
4217
4168
|
{
|
|
4218
4169
|
name: "auto_setup",
|
|
4219
|
-
description: `\u3010\
|
|
4170
|
+
description: `\u3010\u751F\u6210\u9879\u76EE\u914D\u7F6E\u3011\u4E3A\u9879\u76EE\u751F\u6210 copilot-instructions.md \u914D\u7F6E\u6587\u4EF6\u3002
|
|
4220
4171
|
\u529F\u80FD\uFF1A
|
|
4221
|
-
1. \
|
|
4222
|
-
2. \
|
|
4223
|
-
3. \
|
|
4224
|
-
4. \u4F7F\u7528\u5B8C\u6574\u7684 SmartAgentMatcher \u5339\u914D\u6700\u5408\u9002\u7684 Agents
|
|
4172
|
+
1. \u68C0\u6D4B\u9879\u76EE\u4E2D\u662F\u5426\u5B58\u5728 .github/copilot-instructions.md
|
|
4173
|
+
2. \u5982\u679C\u4E0D\u5B58\u5728\uFF0C\u5219\u81EA\u52A8\u5206\u6790\u9879\u76EE\u6280\u672F\u6808\u5E76\u751F\u6210\u914D\u7F6E\u6587\u4EF6
|
|
4174
|
+
3. \u4F7F\u7528 SmartAgentMatcher \u5339\u914D\u6700\u5408\u9002\u7684 Agents
|
|
4225
4175
|
|
|
4226
|
-
\
|
|
4176
|
+
\u6CE8\u610F\uFF1AMCP \u670D\u52A1\u5668\u7531 VS Code \u63D2\u4EF6\u901A\u8FC7 npm \u5305\u81EA\u52A8\u914D\u7F6E\uFF0C\u6B64\u5DE5\u5177\u53EA\u8D1F\u8D23\u751F\u6210 copilot-instructions.md`,
|
|
4227
4177
|
inputSchema: {
|
|
4228
4178
|
type: "object",
|
|
4229
4179
|
properties: {
|
|
@@ -4621,7 +4571,7 @@ var CopilotPromptsMCPServer = class {
|
|
|
4621
4571
|
``,
|
|
4622
4572
|
`\u{1F4CB} \u53EF\u7528\u5DE5\u5177:`,
|
|
4623
4573
|
` \u2022 analyze_project - \u5206\u6790\u9879\u76EE\u6280\u672F\u6808`,
|
|
4624
|
-
` \u2022 auto_setup - \
|
|
4574
|
+
` \u2022 auto_setup - \u751F\u6210\u9879\u76EE\u914D\u7F6E`,
|
|
4625
4575
|
` \u2022 health_check - \u5065\u5EB7\u68C0\u67E5\u8BCA\u65AD`,
|
|
4626
4576
|
` \u2022 get_compact_standards - \u83B7\u53D6\u7F16\u7801\u89C4\u8303`,
|
|
4627
4577
|
` \u2022 use_preset - \u4F7F\u7528\u9884\u8BBE\u573A\u666F`,
|