@global-packages/mcp-kit 1.0.0 → 1.0.3
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/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +117 -71
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +27 -27
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/completion.d.ts.map +1 -1
- package/dist/commands/completion.js +50 -35
- package/dist/commands/completion.js.map +1 -1
- package/dist/commands/doctor.d.ts +5 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +128 -104
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/env-check.d.ts.map +1 -1
- package/dist/commands/env-check.js +63 -40
- package/dist/commands/env-check.js.map +1 -1
- package/dist/commands/export.d.ts +6 -4
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +52 -41
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +109 -74
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +60 -56
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.d.ts +5 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +189 -87
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +56 -48
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +5 -2
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +103 -45
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/open.d.ts.map +1 -1
- package/dist/commands/open.js +31 -23
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +60 -43
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +52 -48
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +52 -20
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +94 -76
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/toggle.d.ts.map +1 -1
- package/dist/commands/toggle.js +22 -24
- package/dist/commands/toggle.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +86 -62
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +43 -37
- package/dist/commands/validate.js.map +1 -1
- package/dist/constants.d.ts +3 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +377 -78
- package/dist/constants.js.map +1 -1
- package/dist/core/credentials.d.ts +15 -2
- package/dist/core/credentials.d.ts.map +1 -1
- package/dist/core/credentials.js +205 -116
- package/dist/core/credentials.js.map +1 -1
- package/dist/core/detector.d.ts +28 -2
- package/dist/core/detector.d.ts.map +1 -1
- package/dist/core/detector.js +101 -60
- package/dist/core/detector.js.map +1 -1
- package/dist/core/registry.d.ts +25 -1
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +45 -33
- package/dist/core/registry.js.map +1 -1
- package/dist/core/validator.d.ts +18 -2
- package/dist/core/validator.d.ts.map +1 -1
- package/dist/core/validator.js +53 -30
- package/dist/core/validator.js.map +1 -1
- package/dist/core/writer.d.ts +19 -1
- package/dist/core/writer.d.ts.map +1 -1
- package/dist/core/writer.js +41 -35
- package/dist/core/writer.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +233 -123
- package/dist/index.js.map +1 -1
- package/dist/postinstall.js +25 -30
- package/dist/postinstall.js.map +1 -1
- package/dist/prompts/dev-prompts.d.ts +10 -2
- package/dist/prompts/dev-prompts.d.ts.map +1 -1
- package/dist/prompts/dev-prompts.js +87 -31
- package/dist/prompts/dev-prompts.js.map +1 -1
- package/dist/prompts/non-dev-prompts.d.ts +16 -2
- package/dist/prompts/non-dev-prompts.d.ts.map +1 -1
- package/dist/prompts/non-dev-prompts.js +90 -35
- package/dist/prompts/non-dev-prompts.js.map +1 -1
- package/dist/prompts/shared-prompts.d.ts +10 -1
- package/dist/prompts/shared-prompts.d.ts.map +1 -1
- package/dist/prompts/shared-prompts.js +66 -43
- package/dist/prompts/shared-prompts.js.map +1 -1
- package/dist/types.d.ts +22 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/dist/utils/fs.d.ts +36 -4
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +92 -28
- package/dist/utils/fs.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +18 -24
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/network.d.ts +12 -1
- package/dist/utils/network.d.ts.map +1 -1
- package/dist/utils/network.js +37 -9
- package/dist/utils/network.js.map +1 -1
- package/dist/utils/spinner.js +10 -19
- package/dist/utils/spinner.js.map +1 -1
- package/package.json +58 -16
- package/src/postinstall.ts +121 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAwDA,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGzD"}
|
package/dist/commands/add.js
CHANGED
|
@@ -1,88 +1,134 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { detectVsCodePath } from '../core/detector.js';
|
|
4
|
+
import { readMcpJson, addServerToMcpJson } from '../core/writer.js';
|
|
5
|
+
import { getMcpById } from '../core/registry.js';
|
|
6
|
+
import { storeCredential, buildEnvRefValue, getEnvFilePath } from '../core/credentials.js';
|
|
7
|
+
import { askCredentialStorage } from '../prompts/shared-prompts.js';
|
|
8
|
+
import { log } from '../utils/logger.js';
|
|
9
|
+
import { safeReadJSON, safeWriteJSON, ensureDir } from '../utils/fs.js';
|
|
10
|
+
import { MCP_REGISTRY, MCP_KIT_META_PATH, MCP_KIT_DIR } from '../constants.js';
|
|
11
|
+
import { createRequire } from 'node:module';
|
|
12
|
+
const _require = createRequire(import.meta.url);
|
|
13
|
+
const pkg = _require('../../package.json');
|
|
14
|
+
//
|
|
15
|
+
// mcp-kit add <mcp-id>
|
|
16
|
+
//
|
|
17
|
+
function buildArgs(mcp, answers) {
|
|
18
|
+
return mcp.args.map(arg => arg.replace(/\$\{([^}]+)\}/g, (_, key) => answers[key] ?? ''));
|
|
19
|
+
}
|
|
20
|
+
function buildCommand(mcp, answers) {
|
|
21
|
+
return mcp.command.replace(/\$\{([^}]+)\}/g, (_, key) => answers[key] ?? mcp.command);
|
|
22
|
+
}
|
|
23
|
+
function getArgEmbeddedKeys(mcp) {
|
|
24
|
+
const keys = new Set();
|
|
25
|
+
const allText = [...mcp.args, mcp.command].join('');
|
|
26
|
+
const matches = allText.matchAll(/\$\{([^}]+)\}/g);
|
|
27
|
+
for (const match of matches) {
|
|
28
|
+
keys.add(match[1]);
|
|
29
|
+
}
|
|
30
|
+
return keys;
|
|
31
|
+
}
|
|
32
|
+
function buildEnvRecord(mcp, answers, storage) {
|
|
33
|
+
const argEmbedded = getArgEmbeddedKeys(mcp);
|
|
34
|
+
const env = {};
|
|
35
|
+
for (const envVar of mcp.envVars) {
|
|
36
|
+
if (argEmbedded.has(envVar.key))
|
|
37
|
+
continue;
|
|
38
|
+
const value = answers[envVar.key] ?? '';
|
|
39
|
+
if (!value && !envVar.required)
|
|
40
|
+
continue;
|
|
41
|
+
env[envVar.key] = buildEnvRefValue(envVar.key, storage, value);
|
|
42
|
+
}
|
|
43
|
+
return env;
|
|
44
|
+
}
|
|
45
|
+
export async function runAdd(mcpId) {
|
|
17
46
|
try {
|
|
18
|
-
|
|
47
|
+
if (!mcpId) {
|
|
48
|
+
log.error('Please specify an MCP ID: mcp-kit add <mcp-id>');
|
|
49
|
+
log.info('Run "mcp-kit list" to see all available MCPs.');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
const mcp = getMcpById(mcpId);
|
|
19
53
|
if (!mcp) {
|
|
20
|
-
|
|
21
|
-
|
|
54
|
+
log.error(`Unknown MCP: "${mcpId}"`);
|
|
55
|
+
log.blank();
|
|
56
|
+
log.info('Available MCP IDs:');
|
|
57
|
+
MCP_REGISTRY.forEach(m => log.muted(` ${m.id.padEnd(16)} ${m.name}`));
|
|
22
58
|
process.exit(1);
|
|
23
59
|
}
|
|
24
|
-
const
|
|
25
|
-
const config = await
|
|
60
|
+
const vscodePaths = await detectVsCodePath();
|
|
61
|
+
const config = await readMcpJson(vscodePaths.mcpJsonPath);
|
|
26
62
|
if (config.servers[mcpId]) {
|
|
27
|
-
|
|
63
|
+
log.warn(`${mcp.name} is already configured. Continuing will overwrite it.`);
|
|
28
64
|
}
|
|
29
|
-
const storage = await
|
|
65
|
+
const storage = await askCredentialStorage();
|
|
66
|
+
const envFilePath = getEnvFilePath(vscodePaths.vscodeFolderPath);
|
|
67
|
+
// Collect answers for this MCP
|
|
30
68
|
const answers = {};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
69
|
+
if (mcp.envVars.length > 0) {
|
|
70
|
+
console.log('');
|
|
71
|
+
console.log(chalk.bold.cyan(`Setting up: ${mcp.name}`));
|
|
72
|
+
console.log(chalk.gray(`${mcp.description}`));
|
|
73
|
+
const questions = mcp.envVars.map(envVar => {
|
|
74
|
+
if (envVar.hint)
|
|
75
|
+
console.log(chalk.gray(`${envVar.hint}`));
|
|
76
|
+
return {
|
|
77
|
+
type: envVar.secret ? 'password' : 'input',
|
|
78
|
+
name: envVar.key,
|
|
79
|
+
message: `${envVar.label}${envVar.required ? ' *' : ' (optional)'}`,
|
|
80
|
+
default: envVar.defaultValue ?? '',
|
|
81
|
+
validate: (input) => {
|
|
82
|
+
if (!envVar.required)
|
|
83
|
+
return true;
|
|
84
|
+
if (input.trim().length === 0)
|
|
85
|
+
return 'This field is required';
|
|
86
|
+
return true;
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
});
|
|
90
|
+
const raw = await inquirer.prompt(questions);
|
|
91
|
+
Object.assign(answers, raw);
|
|
45
92
|
}
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
: [...mcp.args];
|
|
49
|
-
const env = {};
|
|
93
|
+
const argEmbedded = getArgEmbeddedKeys(mcp);
|
|
94
|
+
// Store secrets
|
|
50
95
|
for (const envVar of mcp.envVars) {
|
|
51
|
-
|
|
52
|
-
if (!value && !envVar.required) {
|
|
96
|
+
if (argEmbedded.has(envVar.key))
|
|
53
97
|
continue;
|
|
98
|
+
const value = answers[envVar.key];
|
|
99
|
+
if (value && envVar.secret && storage !== 'inline') {
|
|
100
|
+
await storeCredential(envVar.key, value, storage, envFilePath);
|
|
54
101
|
}
|
|
55
|
-
env[envVar.key] = (0, credentials_1.buildEnvRefValue)(envVar.key, storage, value);
|
|
56
102
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
meta
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
103
|
+
const entry = {
|
|
104
|
+
type: 'stdio',
|
|
105
|
+
command: buildCommand(mcp, answers),
|
|
106
|
+
args: buildArgs(mcp, answers),
|
|
107
|
+
env: buildEnvRecord(mcp, answers, storage),
|
|
108
|
+
};
|
|
109
|
+
if (entry.env && Object.keys(entry.env).length === 0) {
|
|
110
|
+
delete entry.env;
|
|
111
|
+
}
|
|
112
|
+
await addServerToMcpJson(vscodePaths.mcpJsonPath, mcp.id, entry);
|
|
113
|
+
// Update meta
|
|
114
|
+
await ensureDir(MCP_KIT_DIR);
|
|
115
|
+
const existingMeta = await safeReadJSON(MCP_KIT_META_PATH) ?? {};
|
|
116
|
+
const currentInstalled = existingMeta.installedMcps ?? [];
|
|
117
|
+
const meta = {
|
|
118
|
+
...existingMeta,
|
|
119
|
+
lastUpdated: new Date().toISOString(),
|
|
120
|
+
installedMcps: [...new Set([...currentInstalled, mcpId])],
|
|
121
|
+
mcpKitVersion: pkg.version,
|
|
122
|
+
};
|
|
123
|
+
await safeWriteJSON(MCP_KIT_META_PATH, meta);
|
|
124
|
+
log.success(`Added ${mcp.name} to ${vscodePaths.mcpJsonPath}`);
|
|
125
|
+
log.info('Reload VS Code to activate: Cmd/Ctrl+Shift+P → "Reload Window"');
|
|
78
126
|
}
|
|
79
127
|
catch (err) {
|
|
80
|
-
const message = err instanceof Error ? err.message :
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
console.error(err.stack);
|
|
85
|
-
}
|
|
128
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
129
|
+
log.error(`Add failed: ${message}`);
|
|
130
|
+
if (process.env['DEBUG'])
|
|
131
|
+
console.error(err);
|
|
86
132
|
process.exit(1);
|
|
87
133
|
}
|
|
88
134
|
}
|
package/dist/commands/add.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAUA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC1E"}
|
package/dist/commands/backup.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
-
const detector_1 = require("../core/detector");
|
|
10
|
-
const logger_1 = require("../utils/logger");
|
|
11
|
-
async function runBackup(options = {}) {
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs/promises';
|
|
3
|
+
import { detectVsCodePath } from '../core/detector.js';
|
|
4
|
+
import { log } from '../utils/logger.js';
|
|
5
|
+
import { fileExists } from '../utils/fs.js';
|
|
6
|
+
export async function runBackup(options = {}) {
|
|
12
7
|
try {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
const vscodePaths = await detectVsCodePath();
|
|
9
|
+
const mcpJsonPath = vscodePaths.mcpJsonPath;
|
|
10
|
+
if (!(await fileExists(mcpJsonPath))) {
|
|
11
|
+
log.error('No mcp.json found. Nothing to back up.');
|
|
12
|
+
log.info('Run "mcp-kit init dev" to create a config first.');
|
|
13
|
+
process.exit(1);
|
|
17
14
|
}
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
const timestamp = new Date()
|
|
16
|
+
.toISOString()
|
|
17
|
+
.replace(/[:.]/g, '-')
|
|
18
|
+
.replace('T', '_')
|
|
19
|
+
.slice(0, 19); // YYYY-MM-DD_HH-MM-SS
|
|
20
|
+
const destPath = options.output ??
|
|
21
|
+
path.join(path.dirname(mcpJsonPath), `mcp.backup.${timestamp}.json`);
|
|
22
|
+
const content = await fs.readFile(mcpJsonPath, 'utf-8');
|
|
23
|
+
await fs.writeFile(destPath, content, 'utf-8');
|
|
24
|
+
log.success(`Backup saved: ${destPath}`);
|
|
25
|
+
log.muted(`Source: ${mcpJsonPath}`);
|
|
26
26
|
}
|
|
27
27
|
catch (err) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
29
|
+
log.error(`Backup failed: ${message}`);
|
|
30
|
+
if (process.env['DEBUG'])
|
|
31
|
+
console.error(err);
|
|
32
32
|
process.exit(1);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAU5C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAyB,EAAE;IACzD,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;QAE5C,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YACrC,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACpD,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE;aACzB,WAAW,EAAE;aACb,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;aACjB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB;QAEvC,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM;YACd,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EACzB,cAAc,SAAS,OAAO,CAC/B,CAAC;QAEJ,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE/C,GAAG,CAAC,OAAO,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;QACzC,GAAG,CAAC,KAAK,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;IAEtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,KAAK,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAkFA,wBAAsB,aAAa,CAAC,KAAK,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBxE"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { log } from '../utils/logger.js';
|
|
2
|
+
//
|
|
3
|
+
// mcp-kit completion [shell]
|
|
4
|
+
//
|
|
5
5
|
const ZSH_COMPLETION = `
|
|
6
6
|
# mcp-kit zsh completion
|
|
7
7
|
# Add to ~/.zshrc: eval "$(mcp-kit completion zsh)"
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
_mcp_kit_completions() {
|
|
10
10
|
local -a subcmds
|
|
11
11
|
subcmds=(
|
|
12
12
|
'init:Initialise MCP configuration'
|
|
@@ -33,52 +33,67 @@ mcp_kit_completions() {
|
|
|
33
33
|
_describe 'command' subcmds
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
_mcp_kit_mcpids() {
|
|
37
|
+
local -a ids
|
|
38
|
+
ids=(
|
|
39
|
+
'azure' 'confluence' 'mssql' 'playwright' 'runbook'
|
|
40
|
+
'filesystem' 'git' 'azuredevops' 'postgres' 'slack'
|
|
41
|
+
'sonarqube' 'context' 'figma' 'everything'
|
|
42
|
+
)
|
|
43
|
+
_describe 'mcp-id' ids
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
_mcp_kit() {
|
|
47
|
+
local -a args
|
|
48
|
+
args=(\${words[@]})
|
|
49
|
+
case "\${args[2]}" in
|
|
50
|
+
add|remove|update|enable|disable|info)
|
|
51
|
+
_mcp_kit_mcpids ;;
|
|
52
|
+
*)
|
|
53
|
+
_mcp_kit_completions ;;
|
|
54
|
+
esac
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
compdef _mcp_kit mcp-kit
|
|
37
58
|
`.trimStart();
|
|
38
59
|
const BASH_COMPLETION = `
|
|
39
60
|
# mcp-kit bash completion
|
|
40
61
|
# Add to ~/.bashrc: eval "$(mcp-kit completion bash)"
|
|
41
62
|
|
|
42
|
-
|
|
43
|
-
local MCP_IDS="azure confluence mssql playwright runbook filesystem git azuredevops postgres slack sonarqube
|
|
63
|
+
_mcp_kit_completions() {
|
|
64
|
+
local MCP_IDS="azure confluence mssql playwright runbook filesystem git azuredevops postgres slack sonarqube context figma everything"
|
|
44
65
|
local SUBCMDS="init add remove update status doctor list reset export import install env validate enable disable info open backup search completion"
|
|
45
66
|
local cur prev
|
|
46
67
|
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
47
68
|
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
48
69
|
case "\${prev}" in
|
|
49
|
-
add|remove|enable|disable|info)
|
|
50
|
-
COMPREPLY=(
|
|
70
|
+
add|remove|update|enable|disable|info)
|
|
71
|
+
COMPREPLY=(\$(compgen -W "\${MCP_IDS}" -- "\${cur}"))
|
|
51
72
|
return ;;
|
|
52
73
|
esac
|
|
53
|
-
COMPREPLY=(
|
|
74
|
+
COMPREPLY=(\$(compgen -W "\${SUBCMDS}" -- "\${cur}"))
|
|
54
75
|
}
|
|
55
76
|
|
|
56
|
-
complete -F
|
|
77
|
+
complete -F _mcp_kit_completions mcp-kit
|
|
57
78
|
`.trimStart();
|
|
58
|
-
async function runCompletion(shell) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
if (s === "bash") {
|
|
66
|
-
process.stdout.write(BASH_COMPLETION);
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
logger_1.log.error(`Unsupported shell: '${shell}'. Use 'zsh' or 'bash'.`);
|
|
70
|
-
logger_1.log.blank();
|
|
71
|
-
logger_1.log.info("Usage:");
|
|
72
|
-
logger_1.log.muted(" mcp-kit completion zsh # zsh");
|
|
73
|
-
logger_1.log.muted(" mcp-kit completion bash # bash");
|
|
74
|
-
logger_1.log.blank();
|
|
75
|
-
logger_1.log.muted("Then add to your shell profile:");
|
|
76
|
-
logger_1.log.muted(' echo \'eval "$(mcp-kit completion zsh)"\' >> ~/.zshrc && source ~/.zshrc');
|
|
77
|
-
process.exit(1);
|
|
79
|
+
export async function runCompletion(shell = 'zsh') {
|
|
80
|
+
const s = shell.toLowerCase();
|
|
81
|
+
if (s === 'zsh') {
|
|
82
|
+
process.stdout.write(ZSH_COMPLETION);
|
|
83
|
+
return;
|
|
78
84
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
if (s === 'bash') {
|
|
86
|
+
process.stdout.write(BASH_COMPLETION);
|
|
87
|
+
return;
|
|
82
88
|
}
|
|
89
|
+
log.error(`Unsupported shell: "${shell}". Use 'zsh' or 'bash'.`);
|
|
90
|
+
log.blank();
|
|
91
|
+
log.info('Usage:');
|
|
92
|
+
log.muted(' mcp-kit completion zsh # zsh');
|
|
93
|
+
log.muted(' mcp-kit completion bash # bash');
|
|
94
|
+
log.blank();
|
|
95
|
+
log.muted('Then add to your shell profile:');
|
|
96
|
+
log.muted(` echo 'eval "$(mcp-kit completion zsh)"' >> ~/.zshrc && source ~/.zshrc`);
|
|
97
|
+
process.exit(1);
|
|
83
98
|
}
|
|
84
99
|
//# sourceMappingURL=completion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,EAAE;AACF,6BAA6B;AAC7B,EAAE;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDtB,CAAC,SAAS,EAAE,CAAC;AAEd,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;CAmBvB,CAAC,SAAS,EAAE,CAAC;AAEd,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,KAAK;IACvD,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAE9B,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,uBAAuB,KAAK,yBAAyB,CAAC,CAAC;IACjE,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9C,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC/C,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAC7C,GAAG,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsL1E"}
|