@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
package/dist/utils/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAQA;;GAEG;AAEH,wBAAsB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAOzE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMvE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE"}
|
package/dist/utils/fs.js
CHANGED
|
@@ -1,30 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
await
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fsExtra from 'fs-extra';
|
|
4
|
+
//--------------------------------------------------------------
|
|
5
|
+
// Safe file system helpers
|
|
6
|
+
//--------------------------------------------------------------
|
|
7
|
+
/**
|
|
8
|
+
* Read and parse a JSON file. Returns null if the file doesn't exist or is invalid.
|
|
9
|
+
*/
|
|
10
|
+
export async function safeReadJSON(filePath) {
|
|
11
|
+
try {
|
|
12
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
13
|
+
return JSON.parse(content);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Write an object to a JSON file, creating directories as needed.
|
|
21
|
+
*/
|
|
22
|
+
export async function safeWriteJSON(filePath, data) {
|
|
23
|
+
await fsExtra.outputJSON(filePath, data, { encoding: 'utf-8', spaces: 2 });
|
|
24
|
+
const tmpPath = filePath + '.tmp';
|
|
25
|
+
await fs.writeFile(tmpPath, JSON.stringify(data, null, 2), 'utf-8');
|
|
26
|
+
await fs.rename(tmpPath, filePath);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if a file exists.
|
|
30
|
+
*/
|
|
31
|
+
export async function fileExists(filePath) {
|
|
32
|
+
try {
|
|
33
|
+
await fs.access(filePath);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check whether path is writable.
|
|
42
|
+
*/
|
|
43
|
+
export async function isWritable(filePath) {
|
|
44
|
+
try {
|
|
45
|
+
await fs.access(filePath, fs.constants.W_OK);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Ensure a directory exists, creating it if necessary.
|
|
54
|
+
*/
|
|
55
|
+
export async function ensureDir(dirPath) {
|
|
56
|
+
await fsExtra.ensureDir(dirPath);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Read a text file, returning null if it doesn't exist.
|
|
60
|
+
*/
|
|
61
|
+
export async function readText(filePath) {
|
|
62
|
+
try {
|
|
63
|
+
return await fs.readFile(filePath, 'utf-8');
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Write text to a file, creating directories as needed.
|
|
71
|
+
*/
|
|
72
|
+
export async function writeText(filePath, content) {
|
|
73
|
+
await fsExtra.ensureDir(path.dirname(filePath));
|
|
74
|
+
await fsExtra.outputFile(filePath, content, 'utf-8');
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Append text to a file, creating it if it doesn't exist.
|
|
78
|
+
*/
|
|
79
|
+
export async function appendText(filePath, content) {
|
|
80
|
+
await fsExtra.ensureDir(path.dirname(filePath));
|
|
81
|
+
await fsExtra.appendFile(filePath, content, 'utf-8');
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Delete a file if it exists.
|
|
85
|
+
*/
|
|
86
|
+
export async function deleteFile(filePath) {
|
|
87
|
+
try {
|
|
88
|
+
await fs.unlink(filePath);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Ignore errors if the file doesn't exist
|
|
92
|
+
}
|
|
29
93
|
}
|
|
30
94
|
//# sourceMappingURL=fs.js.map
|
package/dist/utils/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;kBACX,MAAM,KAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,GAAG;gBACF,MAAM,KAAG,IAAI;mBACV,MAAM,KAAG,IAAI;gBAChB,MAAM,KAAG,IAAI;iBACZ,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;kBACX,MAAM,KAAG,IAAI;iBAQd,MAAM,KAAG,IAAI;gBACd,MAAM,KAAG,IAAI;iBACd,IAAI;CAChB,CAAC;AAGF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAOpE"}
|
package/dist/utils/logger.js
CHANGED
|
@@ -1,35 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.log = void 0;
|
|
7
|
-
exports.printTable = printTable;
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const boxen_1 = __importDefault(require("boxen"));
|
|
10
|
-
const table_1 = require("table");
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import boxen from "boxen";
|
|
3
|
+
import { table } from "table";
|
|
11
4
|
// Chalk-based colored logger
|
|
12
|
-
|
|
13
|
-
info: (msg) => console.log(`${
|
|
14
|
-
success: (msg) => console.log(`${
|
|
15
|
-
warn: (msg) => console.log(`${
|
|
16
|
-
error: (msg) => console.error(`${
|
|
17
|
-
step: (msg) => console.log(`${
|
|
18
|
-
header: (msg) => console.log((
|
|
5
|
+
export const log = {
|
|
6
|
+
info: (msg) => console.log(`${chalk.cyan("ℹ")} ${msg}`),
|
|
7
|
+
success: (msg) => console.log(`${chalk.green("✅")} ${msg}`),
|
|
8
|
+
warn: (msg) => console.log(`${chalk.yellow("⚠️")} ${msg}`),
|
|
9
|
+
error: (msg) => console.error(`${chalk.red("❌")} ${msg}`),
|
|
10
|
+
step: (msg) => console.log(`${chalk.blue("→")} ${msg}`),
|
|
11
|
+
header: (msg) => console.log(boxen(chalk.bold(msg), {
|
|
19
12
|
padding: 1,
|
|
20
|
-
borderColor: "cyan"
|
|
13
|
+
borderColor: "cyan",
|
|
14
|
+
borderStyle: "round",
|
|
21
15
|
})),
|
|
22
|
-
muted: (msg) => console.log(
|
|
23
|
-
code: (msg) => console.log(
|
|
16
|
+
muted: (msg) => console.log(chalk.gray(msg)),
|
|
17
|
+
code: (msg) => console.log(chalk.bgGray.white(` ${msg} `)),
|
|
24
18
|
blank: () => console.log("")
|
|
25
19
|
};
|
|
26
20
|
// ASCII table renderer
|
|
27
|
-
function printTable(headers, rows) {
|
|
21
|
+
export function printTable(headers, rows) {
|
|
28
22
|
if (rows.length === 0) {
|
|
29
|
-
|
|
23
|
+
log.muted("(no entries)");
|
|
30
24
|
return;
|
|
31
25
|
}
|
|
32
|
-
const data = [headers.map((h) =>
|
|
33
|
-
console.log(
|
|
26
|
+
const data = [headers.map((h) => chalk.bold.cyan(h)), ...rows];
|
|
27
|
+
console.log(table(data));
|
|
34
28
|
}
|
|
35
29
|
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,6BAA6B;AAC7B,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrE,OAAO,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACzE,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACxE,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACvE,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrE,MAAM,EAAE,CAAC,GAAW,EAAQ,EAAE,CAC5B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACrB,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,OAAO;KACrB,CAAC,CACH;IACH,KAAK,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,IAAI,EAAE,CAAC,GAAW,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACxE,KAAK,EAAE,GAAS,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;CACnC,CAAC;AAEF,uBAAuB;AACvB,MAAM,UAAU,UAAU,CAAC,OAAiB,EAAE,IAAgB;IAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/utils/network.d.ts
CHANGED
|
@@ -1,2 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Ping a URL to check if it's reachable. Returns true if the request succeeds, false otherwise.
|
|
3
|
+
*/
|
|
4
|
+
export declare function checkConnectivity(url: string, timeoutMs?: number): Promise<boolean>;
|
|
5
|
+
/**
|
|
6
|
+
* Fetch the latest published version of a package from the npm registry. Returns 'unknown' if the package doesn't exist or there's an error.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getNpmPackageVersion(packageName: string): Promise<string | null>;
|
|
9
|
+
/**
|
|
10
|
+
* check whether an npm package exists. Returns true if the package exists, false otherwise.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkNpmPackageExists(packageName: string): Promise<boolean>;
|
|
2
13
|
//# sourceMappingURL=network.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAOvF;AAED;;IAEI;AAEJ,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUtF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASjF"}
|
package/dist/utils/network.js
CHANGED
|
@@ -1,17 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
async function
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
//------------------------------------------------------------
|
|
3
|
+
// Connectivity & npm registry helpers
|
|
4
|
+
//------------------------------------------------------------
|
|
5
|
+
/**
|
|
6
|
+
* Ping a URL to check if it's reachable. Returns true if the request succeeds, false otherwise.
|
|
7
|
+
*/
|
|
8
|
+
export async function checkConnectivity(url, timeoutMs = 8000) {
|
|
9
9
|
try {
|
|
10
|
-
const response = await
|
|
10
|
+
const response = await axios.head(url, { timeout: timeoutMs });
|
|
11
11
|
return response.status >= 200 && response.status < 300;
|
|
12
12
|
}
|
|
13
13
|
catch {
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Fetch the latest published version of a package from the npm registry. Returns 'unknown' if the package doesn't exist or there's an error.
|
|
19
|
+
*/
|
|
20
|
+
export async function getNpmPackageVersion(packageName) {
|
|
21
|
+
try {
|
|
22
|
+
const pkgPath = packageName.replace(/\//g, '%2f');
|
|
23
|
+
const url = `https://registry.npmjs.org/${pkgPath}/latest`;
|
|
24
|
+
const response = await axios.get(url, { timeout: 8000 });
|
|
25
|
+
return response.data?.version ?? 'unknown';
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return 'unknown';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* check whether an npm package exists. Returns true if the package exists, false otherwise.
|
|
33
|
+
*/
|
|
34
|
+
export async function checkNpmPackageExists(packageName) {
|
|
35
|
+
try {
|
|
36
|
+
const pkgPath = packageName.replace(/\//g, '%2f');
|
|
37
|
+
const url = `https://registry.npmjs.org/${pkgPath}`;
|
|
38
|
+
await axios.head(url, { timeout: 8000 });
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
17
45
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,8DAA8D;AAC9D,sCAAsC;AACtC,8DAA8D;AAE9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,SAAS,GAAG,IAAI;IACnE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;IAEI;AAEJ,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,IAAI,CAAC;QACL,MAAM,OAAO,GAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,8BAA8B,OAAO,SAAS,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAsB,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC;IAC7C,CAAC;IACA,MAAM,CAAC;QACJ,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,WAAmB;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,8BAA8B,OAAO,EAAE,CAAC;QACpD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/utils/spinner.js
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.startSpinner = startSpinner;
|
|
7
|
-
exports.succeedSpinner = succeedSpinner;
|
|
8
|
-
exports.failSpinner = failSpinner;
|
|
9
|
-
exports.updateSpinner = updateSpinner;
|
|
10
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
-
const ora_1 = __importDefault(require("ora"));
|
|
12
|
-
function startSpinner(text) {
|
|
13
|
-
return (0, ora_1.default)({ text: chalk_1.default.cyan(text), color: "cyan" }).start();
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import ora from "ora";
|
|
3
|
+
export function startSpinner(text) {
|
|
4
|
+
return ora({ text: chalk.cyan(text), color: "cyan" }).start();
|
|
14
5
|
}
|
|
15
|
-
function succeedSpinner(spinner, text) {
|
|
16
|
-
spinner.succeed(
|
|
6
|
+
export function succeedSpinner(spinner, text) {
|
|
7
|
+
spinner.succeed(chalk.cyan(text));
|
|
17
8
|
}
|
|
18
|
-
function failSpinner(spinner, text) {
|
|
19
|
-
spinner.fail(
|
|
9
|
+
export function failSpinner(spinner, text) {
|
|
10
|
+
spinner.fail(chalk.cyan(text));
|
|
20
11
|
}
|
|
21
|
-
function updateSpinner(spinner, text) {
|
|
22
|
-
spinner.text =
|
|
12
|
+
export function updateSpinner(spinner, text) {
|
|
13
|
+
spinner.text = chalk.cyan(text);
|
|
23
14
|
}
|
|
24
15
|
//# sourceMappingURL=spinner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/utils/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAY,MAAM,KAAK,CAAC;AAI/B,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,IAAY;IAC3D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,IAAY;IACxD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB,EAAE,IAAY;IAC1D,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@global-packages/mcp-kit",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Universal MCP Configuration CLI
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "Universal MCP Configuration CLI - auto-detect, configure and manage MCP servers across Azure, Confluence, MSSQL, Playwright and more. Works on Windows, macOS and Linux.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
|
|
5
7
|
"main": "dist/index.js",
|
|
6
8
|
"types": "dist/index.d.ts",
|
|
9
|
+
|
|
7
10
|
"bin": {
|
|
8
11
|
"mcp-kit": "./dist/index.js"
|
|
9
12
|
},
|
|
13
|
+
|
|
10
14
|
"scripts": {
|
|
11
15
|
"build": "tsc && chmod +x dist/index.js",
|
|
12
|
-
"dev": "ts-node src/index.ts",
|
|
16
|
+
"dev": "node --loader ts-node/esm src/index.ts",
|
|
13
17
|
"start": "node dist/index.js",
|
|
14
|
-
"postinstall": "node dist/postinstall.js",
|
|
15
18
|
"prepare": "npm run build",
|
|
16
|
-
"
|
|
19
|
+
"postinstall": "node dist/postinstall.js || true",
|
|
20
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
17
21
|
"lint": "eslint src/**/*.ts"
|
|
18
22
|
},
|
|
23
|
+
|
|
19
24
|
"keywords": [
|
|
20
25
|
"mcp",
|
|
21
26
|
"model-context-protocol",
|
|
22
|
-
"vscode",
|
|
23
27
|
"cli",
|
|
24
28
|
"azure",
|
|
25
29
|
"confluence",
|
|
@@ -30,11 +34,28 @@
|
|
|
30
34
|
"automation",
|
|
31
35
|
"ai-tools"
|
|
32
36
|
],
|
|
37
|
+
|
|
33
38
|
"author": "global-packages",
|
|
34
39
|
"license": "MIT",
|
|
40
|
+
|
|
35
41
|
"publishConfig": {
|
|
36
42
|
"access": "public"
|
|
37
43
|
},
|
|
44
|
+
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
"files": [
|
|
50
|
+
"dist/",
|
|
51
|
+
"README.md",
|
|
52
|
+
"src/postinstall.ts"
|
|
53
|
+
],
|
|
54
|
+
|
|
55
|
+
"optionalDependencies": {
|
|
56
|
+
"keytar": "^7.9.0"
|
|
57
|
+
},
|
|
58
|
+
|
|
38
59
|
"dependencies": {
|
|
39
60
|
"axios": "^1.6.0",
|
|
40
61
|
"boxen": "^7.1.0",
|
|
@@ -44,8 +65,6 @@
|
|
|
44
65
|
"fs-extra": "^11.2.0",
|
|
45
66
|
"glob": "^10.3.0",
|
|
46
67
|
"inquirer": "^9.2.0",
|
|
47
|
-
"keytar": "^7.9.0",
|
|
48
|
-
"mcp-kit": "^1.2.8",
|
|
49
68
|
"node-machine-id": "^1.1.12",
|
|
50
69
|
"ora": "^8.0.0",
|
|
51
70
|
"semver": "^7.6.0",
|
|
@@ -53,6 +72,7 @@
|
|
|
53
72
|
"update-notifier": "^7.0.0",
|
|
54
73
|
"zod": "^3.22.0"
|
|
55
74
|
},
|
|
75
|
+
|
|
56
76
|
"devDependencies": {
|
|
57
77
|
"@types/fs-extra": "^11.0.0",
|
|
58
78
|
"@types/inquirer": "^9.0.0",
|
|
@@ -64,11 +84,33 @@
|
|
|
64
84
|
"ts-node": "^10.9.0",
|
|
65
85
|
"typescript": "^5.3.0"
|
|
66
86
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
87
|
+
|
|
88
|
+
"jest": {
|
|
89
|
+
"preset": "ts-jest/presets/default-esm",
|
|
90
|
+
|
|
91
|
+
"extensionsToTreatAsEsm": [
|
|
92
|
+
".ts"
|
|
93
|
+
],
|
|
94
|
+
|
|
95
|
+
"moduleNameMapper": {
|
|
96
|
+
"^chalk$": "<rootDir>/test/mocks/chalk.ts",
|
|
97
|
+
"^boxen$": "<rootDir>/test/mocks/boxen.ts",
|
|
98
|
+
"^(\\.{1,2}/.*)\\.js$": "$1"
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
"transform": {
|
|
102
|
+
"^.+\\.tsx?$": [
|
|
103
|
+
"ts-jest",
|
|
104
|
+
{
|
|
105
|
+
"useESM": true
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
"testEnvironment": "node",
|
|
111
|
+
|
|
112
|
+
"testMatch": [
|
|
113
|
+
"**/test/**/*.test.ts"
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* postinstall.ts
|
|
5
|
+
*
|
|
6
|
+
* Runs automatically after `npm install -g @global-packages/mcp-kit`.
|
|
7
|
+
* Prints the MCP-KIT welcome banner with a quick-start command table.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import boxen from "boxen";
|
|
12
|
+
import { table } from "table";
|
|
13
|
+
|
|
14
|
+
const ASCII = `
|
|
15
|
+
███╗ ███╗ ██████╗██████╗ ██╗ ██╗██╗████████╗
|
|
16
|
+
████╗ ████║██╔════╝██╔══██╗ ██║ ██╔╝██║╚══██╔══╝
|
|
17
|
+
██╔████╔██║██║ ██████╔╝█████╗█████╔╝ ██║ ██║
|
|
18
|
+
██║╚██╔╝██║██║ ██╔═══╝ ╚════╝██╔═██╗ ██║ ██║
|
|
19
|
+
██║ ╚═╝ ██║╚██████╗██║ ██║ ██╗██║ ██║
|
|
20
|
+
╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
const COMMANDS: [string, string][] = [
|
|
24
|
+
["mcp-kit init --dev", "Interactive setup for development MCPs (filesystem, git, playwright...)"],
|
|
25
|
+
["mcp-kit init --non-dev", "Interactive setup for shared/team MCPs (azure, confluence, slack...)"],
|
|
26
|
+
["mcp-kit install", "Pre-download MCP packages (recommended in restricted networks)"],
|
|
27
|
+
["mcp-kit list", "Show configured MCPs and availability"],
|
|
28
|
+
["mcp-kit status", "Show MCP versions and config health summary"],
|
|
29
|
+
["mcp-kit add <id>", "Add one MCP server by ID (e.g. mcp-kit add azure)"],
|
|
30
|
+
["mcp-kit remove <id>", "Remove a configured MCP server"],
|
|
31
|
+
["mcp-kit update", "Refresh command args to latest package tags"],
|
|
32
|
+
["mcp-kit doctor", "Diagnose env/version/path/credential issues"],
|
|
33
|
+
["mcp-kit export", "Export current setup as shareable JSON"],
|
|
34
|
+
["mcp-kit import <file>", "Import shared setup (prompts for redacted secrets)"],
|
|
35
|
+
["mcp-kit reset", "Remove all configured MCPs and start fresh"]
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
function render(): void {
|
|
39
|
+
if (process.env.CI || process.env.MCP_KIT_POSTINSTALL_SILENT === "1") {
|
|
40
|
+
console.log("✅ @global-packages/mcp-kit installed. Run: mcp-kit init --dev");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
console.log(`\n${chalk.bold.magentaBright(ASCII)}`);
|
|
45
|
+
|
|
46
|
+
const topLine = boxen(
|
|
47
|
+
`${chalk.bold.whiteBright("Universal MCP Configuration CLI")}\n${chalk.gray(
|
|
48
|
+
"Auto-detect | Configure | Manage MCP servers - Windows | macOS | Linux"
|
|
49
|
+
)}`,
|
|
50
|
+
{
|
|
51
|
+
padding: { top: 0, bottom: 0, left: 2, right: 2 },
|
|
52
|
+
margin: { top: 0, bottom: 1, left: 2, right: 0 },
|
|
53
|
+
borderColor: "magenta",
|
|
54
|
+
borderStyle: "round",
|
|
55
|
+
textAlignment: "center"
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
console.log(topLine);
|
|
60
|
+
console.log(chalk.bold.yellowBright(" Quickstart commands\n"));
|
|
61
|
+
|
|
62
|
+
const tableData = [
|
|
63
|
+
[chalk.bold.cyanBright("Command"), chalk.bold.cyanBright("Description")],
|
|
64
|
+
...COMMANDS.map(([cmd, desc]) => [chalk.cyan(cmd), chalk.white(desc)])
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
const output = table(tableData, {
|
|
68
|
+
border: {
|
|
69
|
+
topBody: chalk.gray("─"),
|
|
70
|
+
topJoin: chalk.gray("┬"),
|
|
71
|
+
topLeft: chalk.gray("┌"),
|
|
72
|
+
topRight: chalk.gray("┐"),
|
|
73
|
+
bottomBody: chalk.gray("─"),
|
|
74
|
+
bottomJoin: chalk.gray("┴"),
|
|
75
|
+
bottomLeft: chalk.gray("└"),
|
|
76
|
+
bottomRight: chalk.gray("┘"),
|
|
77
|
+
bodyLeft: chalk.gray("│"),
|
|
78
|
+
bodyRight: chalk.gray("│"),
|
|
79
|
+
bodyJoin: chalk.gray("│"),
|
|
80
|
+
joinBody: chalk.gray("─"),
|
|
81
|
+
joinLeft: chalk.gray("├"),
|
|
82
|
+
joinRight: chalk.gray("┤"),
|
|
83
|
+
joinJoin: chalk.gray("┼")
|
|
84
|
+
},
|
|
85
|
+
columns: {
|
|
86
|
+
0: { width: 32, paddingLeft: 1, paddingRight: 1 },
|
|
87
|
+
1: { width: 58, paddingLeft: 1, paddingRight: 1, wrapWord: true }
|
|
88
|
+
},
|
|
89
|
+
drawHorizontalLine: (lineIndex: number, rowCount: number): boolean =>
|
|
90
|
+
lineIndex === 0 || lineIndex === 1 || lineIndex === rowCount
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
const indented = output
|
|
94
|
+
.split("\n")
|
|
95
|
+
.map((line) => ` ${line}`)
|
|
96
|
+
.join("\n");
|
|
97
|
+
console.log(indented);
|
|
98
|
+
|
|
99
|
+
console.log(
|
|
100
|
+
boxen(
|
|
101
|
+
`${chalk.bold.greenBright("✅ Get started:")} ${chalk.whiteBright("mcp-kit init --dev")}\n${chalk.gray(
|
|
102
|
+
"or"
|
|
103
|
+
)} ${chalk.whiteBright("mcp-kit install")}\n${chalk.underline.blue(
|
|
104
|
+
"https://github.com/global-packages/mcp-kit"
|
|
105
|
+
)}`,
|
|
106
|
+
{
|
|
107
|
+
padding: { top: 0, bottom: 0, left: 1, right: 1 },
|
|
108
|
+
margin: { top: 0, bottom: 1, left: 2, right: 0 },
|
|
109
|
+
borderColor: "green",
|
|
110
|
+
borderStyle: "double",
|
|
111
|
+
textAlignment: "center"
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
render();
|
|
119
|
+
} catch {
|
|
120
|
+
// Never fail npm install because of postinstall formatting.
|
|
121
|
+
}
|