@cg3/equip 0.2.22 → 0.4.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/LICENSE +1 -1
- package/README.md +26 -10
- package/bin/equip.js +159 -68
- package/demo/README.md +1 -1
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +175 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cli.d.ts +22 -0
- package/dist/lib/cli.d.ts.map +1 -0
- package/dist/lib/cli.js +148 -0
- package/dist/lib/cli.js.map +1 -0
- package/dist/lib/commands/doctor.d.ts +2 -0
- package/dist/lib/commands/doctor.d.ts.map +1 -0
- package/dist/lib/commands/doctor.js +162 -0
- package/dist/lib/commands/doctor.js.map +1 -0
- package/dist/lib/commands/status.d.ts +2 -0
- package/dist/lib/commands/status.d.ts.map +1 -0
- package/dist/lib/commands/status.js +134 -0
- package/dist/lib/commands/status.js.map +1 -0
- package/dist/lib/commands/update.d.ts +2 -0
- package/dist/lib/commands/update.d.ts.map +1 -0
- package/dist/lib/commands/update.js +93 -0
- package/dist/lib/commands/update.js.map +1 -0
- package/dist/lib/detect.d.ts +12 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +109 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/hooks.d.ts +40 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +226 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/mcp.d.ts +73 -0
- package/dist/lib/mcp.d.ts.map +1 -0
- package/dist/lib/mcp.js +418 -0
- package/dist/lib/mcp.js.map +1 -0
- package/dist/lib/platforms.d.ts +67 -0
- package/dist/lib/platforms.d.ts.map +1 -0
- package/dist/lib/platforms.js +353 -0
- package/dist/lib/platforms.js.map +1 -0
- package/dist/lib/rules.d.ts +35 -0
- package/dist/lib/rules.d.ts.map +1 -0
- package/dist/lib/rules.js +161 -0
- package/dist/lib/rules.js.map +1 -0
- package/dist/lib/state.d.ts +33 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +130 -0
- package/dist/lib/state.js.map +1 -0
- package/package.json +19 -13
- package/registry.json +9 -0
- package/index.js +0 -244
- package/lib/cli.js +0 -99
- package/lib/detect.js +0 -242
- package/lib/hooks.js +0 -238
- package/lib/mcp.js +0 -503
- package/lib/platforms.js +0 -184
- package/lib/rules.js +0 -170
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const GREEN = "\u001B[32m";
|
|
2
|
+
export declare const RED = "\u001B[31m";
|
|
3
|
+
export declare const YELLOW = "\u001B[33m";
|
|
4
|
+
export declare const CYAN = "\u001B[36m";
|
|
5
|
+
export declare const BOLD = "\u001B[1m";
|
|
6
|
+
export declare const DIM = "\u001B[2m";
|
|
7
|
+
export declare const RESET = "\u001B[0m";
|
|
8
|
+
export declare function log(msg?: string): void;
|
|
9
|
+
export declare function ok(msg: string): void;
|
|
10
|
+
export declare function fail(msg: string): void;
|
|
11
|
+
export declare function warn(msg: string): void;
|
|
12
|
+
export declare function info(msg: string): void;
|
|
13
|
+
export declare function step(n: number, total: number, title: string): void;
|
|
14
|
+
export declare function prompt(question: string): Promise<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Prompt that resolves on Enter (true) or Esc (false).
|
|
17
|
+
* Falls back to readline if stdin isn't a TTY.
|
|
18
|
+
*/
|
|
19
|
+
export declare function promptEnterOrEsc(question: string): Promise<boolean>;
|
|
20
|
+
export declare function copyToClipboard(text: string): boolean;
|
|
21
|
+
export declare function sanitizeError(msg: string): string;
|
|
22
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,KAAK,eAAa,CAAC;AAChC,eAAO,MAAM,GAAG,eAAa,CAAC;AAC9B,eAAO,MAAM,MAAM,eAAa,CAAC;AACjC,eAAO,MAAM,IAAI,eAAa,CAAC;AAC/B,eAAO,MAAM,IAAI,cAAY,CAAC;AAC9B,eAAO,MAAM,GAAG,cAAY,CAAC;AAC7B,eAAO,MAAM,KAAK,cAAY,CAAC;AAI/B,wBAAgB,GAAG,CAAC,GAAG,SAAK,GAAG,IAAI,CAAsC;AACzE,wBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAuC;AAC5E,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAqC;AAC5E,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAwC;AAC/E,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAsC;AAC7E,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAsD;AAIzH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKxD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BnE;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAcrD;AAID,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
package/dist/lib/cli.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// CLI output helpers, prompts, and clipboard.
|
|
3
|
+
// Zero dependencies.
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.RESET = exports.DIM = exports.BOLD = exports.CYAN = exports.YELLOW = exports.RED = exports.GREEN = void 0;
|
|
39
|
+
exports.log = log;
|
|
40
|
+
exports.ok = ok;
|
|
41
|
+
exports.fail = fail;
|
|
42
|
+
exports.warn = warn;
|
|
43
|
+
exports.info = info;
|
|
44
|
+
exports.step = step;
|
|
45
|
+
exports.prompt = prompt;
|
|
46
|
+
exports.promptEnterOrEsc = promptEnterOrEsc;
|
|
47
|
+
exports.copyToClipboard = copyToClipboard;
|
|
48
|
+
exports.sanitizeError = sanitizeError;
|
|
49
|
+
const os = __importStar(require("os"));
|
|
50
|
+
const readline = __importStar(require("readline"));
|
|
51
|
+
// ─── Colors ──────────────────────────────────────────────────
|
|
52
|
+
exports.GREEN = "\x1b[32m";
|
|
53
|
+
exports.RED = "\x1b[31m";
|
|
54
|
+
exports.YELLOW = "\x1b[33m";
|
|
55
|
+
exports.CYAN = "\x1b[36m";
|
|
56
|
+
exports.BOLD = "\x1b[1m";
|
|
57
|
+
exports.DIM = "\x1b[2m";
|
|
58
|
+
exports.RESET = "\x1b[0m";
|
|
59
|
+
// ─── Output ──────────────────────────────────────────────────
|
|
60
|
+
function log(msg = "") { process.stderr.write(msg + "\n"); }
|
|
61
|
+
function ok(msg) { log(` ${exports.GREEN}✓${exports.RESET} ${msg}`); }
|
|
62
|
+
function fail(msg) { log(` ${exports.RED}✗${exports.RESET} ${msg}`); }
|
|
63
|
+
function warn(msg) { log(` ${exports.YELLOW}⚠${exports.RESET} ${msg}`); }
|
|
64
|
+
function info(msg) { log(` ${exports.CYAN}ⓘ${exports.RESET} ${msg}`); }
|
|
65
|
+
function step(n, total, title) { log(`\n${exports.BOLD}[${n}/${total}] ${title}${exports.RESET}`); }
|
|
66
|
+
// ─── Prompts ─────────────────────────────────────────────────
|
|
67
|
+
function prompt(question) {
|
|
68
|
+
return new Promise((resolve) => {
|
|
69
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
70
|
+
rl.question(question, (answer) => { rl.close(); resolve(answer.trim()); });
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Prompt that resolves on Enter (true) or Esc (false).
|
|
75
|
+
* Falls back to readline if stdin isn't a TTY.
|
|
76
|
+
*/
|
|
77
|
+
function promptEnterOrEsc(question) {
|
|
78
|
+
return new Promise((resolve) => {
|
|
79
|
+
process.stderr.write(question);
|
|
80
|
+
if (!process.stdin.isTTY) {
|
|
81
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
82
|
+
rl.question("", (answer) => { rl.close(); resolve(answer.toLowerCase() !== "n"); });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
process.stdin.setRawMode(true);
|
|
86
|
+
process.stdin.resume();
|
|
87
|
+
process.stdin.setEncoding("utf-8");
|
|
88
|
+
const onData = (key) => {
|
|
89
|
+
if (key === "\x1b") {
|
|
90
|
+
process.stdin.setRawMode(false);
|
|
91
|
+
process.stdin.pause();
|
|
92
|
+
process.stdin.removeListener("data", onData);
|
|
93
|
+
process.stderr.write("\n");
|
|
94
|
+
resolve(false);
|
|
95
|
+
}
|
|
96
|
+
else if (key === "\r" || key === "\n") {
|
|
97
|
+
process.stdin.setRawMode(false);
|
|
98
|
+
process.stdin.pause();
|
|
99
|
+
process.stdin.removeListener("data", onData);
|
|
100
|
+
process.stderr.write("\n");
|
|
101
|
+
resolve(true);
|
|
102
|
+
}
|
|
103
|
+
else if (key === "\x03") {
|
|
104
|
+
process.stdin.setRawMode(false);
|
|
105
|
+
process.stdin.pause();
|
|
106
|
+
process.stdin.removeListener("data", onData);
|
|
107
|
+
process.stderr.write("\n");
|
|
108
|
+
process.exit(0);
|
|
109
|
+
}
|
|
110
|
+
// else: ignore unrecognized keys, keep listening
|
|
111
|
+
};
|
|
112
|
+
process.stdin.on("data", onData);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// ─── Clipboard ───────────────────────────────────────────────
|
|
116
|
+
function copyToClipboard(text) {
|
|
117
|
+
try {
|
|
118
|
+
const cp = require("child_process");
|
|
119
|
+
if (process.platform === "darwin") {
|
|
120
|
+
cp.execSync("pbcopy", { input: text, timeout: 3000 });
|
|
121
|
+
}
|
|
122
|
+
else if (process.platform === "win32") {
|
|
123
|
+
cp.execSync("clip", { input: text, timeout: 3000 });
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
try {
|
|
127
|
+
cp.execSync("xclip -selection clipboard", { input: text, timeout: 3000 });
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
try {
|
|
131
|
+
cp.execSync("xsel --clipboard --input", { input: text, timeout: 3000 });
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
cp.execSync("wl-copy", { input: text, timeout: 3000 });
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// ─── Utilities ───────────────────────────────────────────────
|
|
145
|
+
function sanitizeError(msg) {
|
|
146
|
+
return msg.replace(os.homedir(), "~");
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/lib/cli.ts"],"names":[],"mappings":";AAAA,8CAA8C;AAC9C,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBrB,kBAAyE;AACzE,gBAA4E;AAC5E,oBAA4E;AAC5E,oBAA+E;AAC/E,oBAA6E;AAC7E,oBAAyH;AAIzH,wBAKC;AAMD,4CA0BC;AAID,0CAcC;AAID,sCAEC;AArFD,uCAAyB;AACzB,mDAAqC;AAErC,gEAAgE;AAEnD,QAAA,KAAK,GAAG,UAAU,CAAC;AACnB,QAAA,GAAG,GAAG,UAAU,CAAC;AACjB,QAAA,MAAM,GAAG,UAAU,CAAC;AACpB,QAAA,IAAI,GAAG,UAAU,CAAC;AAClB,QAAA,IAAI,GAAG,SAAS,CAAC;AACjB,QAAA,GAAG,GAAG,SAAS,CAAC;AAChB,QAAA,KAAK,GAAG,SAAS,CAAC;AAE/B,gEAAgE;AAEhE,SAAgB,GAAG,CAAC,GAAG,GAAG,EAAE,IAAU,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzE,SAAgB,EAAE,CAAC,GAAW,IAAU,GAAG,CAAC,KAAK,aAAK,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,SAAgB,IAAI,CAAC,GAAW,IAAU,GAAG,CAAC,KAAK,WAAG,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,SAAgB,IAAI,CAAC,GAAW,IAAU,GAAG,CAAC,KAAK,cAAM,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/E,SAAgB,IAAI,CAAC,GAAW,IAAU,GAAG,CAAC,KAAK,YAAI,IAAI,aAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,SAAgB,IAAI,CAAC,CAAS,EAAE,KAAa,EAAE,KAAa,IAAU,GAAG,CAAC,KAAK,YAAI,IAAI,CAAC,IAAI,KAAK,KAAK,KAAK,GAAG,aAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAEzH,gEAAgE;AAEhE,SAAgB,MAAM,CAAC,QAAgB;IACrC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YACtF,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAQ,EAAE;YACnC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7C,CAAC;iBAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,CAAC;iBAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,iDAAiD;QACnD,CAAC,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gEAAgE;AAEhE,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACxC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBAAC,EAAE,CAAC,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAClF,MAAM,CAAC;gBAAC,IAAI,CAAC;oBAAC,EAAE,CAAC,QAAQ,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;gBACxF,MAAM,CAAC;oBAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,CAAC;YAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,gEAAgE;AAEhE,SAAgB,aAAa,CAAC,GAAW;IACvC,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/doctor.ts"],"names":[],"mappings":"AASA,wBAAgB,SAAS,IAAI,IAAI,CAsHhC"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// equip doctor — validate config integrity and detect drift.
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.runDoctor = runDoctor;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const platforms_1 = require("../platforms");
|
|
40
|
+
const mcp_1 = require("../mcp");
|
|
41
|
+
const state_1 = require("../state");
|
|
42
|
+
const detect_1 = require("../detect");
|
|
43
|
+
const cli = __importStar(require("../cli"));
|
|
44
|
+
function runDoctor() {
|
|
45
|
+
cli.log(`\n${cli.BOLD}equip doctor${cli.RESET}\n`);
|
|
46
|
+
const state = (0, state_1.readState)();
|
|
47
|
+
let issues = 0;
|
|
48
|
+
let checks = 0;
|
|
49
|
+
// Check 1: State file exists
|
|
50
|
+
checks++;
|
|
51
|
+
if (!state.lastUpdated && Object.keys(state.tools).length === 0) {
|
|
52
|
+
cli.warn("No equip state found — run 'equip update' to initialize");
|
|
53
|
+
issues++;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
cli.ok("State file present");
|
|
57
|
+
}
|
|
58
|
+
// Check 2: For each tracked tool × platform, verify config exists
|
|
59
|
+
const toolNames = Object.keys(state.tools);
|
|
60
|
+
if (toolNames.length === 0) {
|
|
61
|
+
cli.log(`\n ${cli.DIM}No tracked tools to check.${cli.RESET}`);
|
|
62
|
+
cli.log(` ${cli.DIM}Install a tool (e.g. 'equip prior') to start tracking.${cli.RESET}\n`);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
cli.log(`\n${cli.BOLD}Checking tracked tools${cli.RESET}`);
|
|
66
|
+
for (const toolName of toolNames) {
|
|
67
|
+
const tool = state.tools[toolName];
|
|
68
|
+
cli.log(`\n ${cli.BOLD}${toolName}${cli.RESET} ${cli.DIM}(${tool.package})${cli.RESET}`);
|
|
69
|
+
for (const [platformId, record] of Object.entries(tool.platforms)) {
|
|
70
|
+
checks++;
|
|
71
|
+
const def = platforms_1.PLATFORM_REGISTRY.get(platformId);
|
|
72
|
+
if (!def) {
|
|
73
|
+
cli.fail(` ${platformId}: unknown platform (may have been removed)`);
|
|
74
|
+
issues++;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
const configPath = record.configPath || def.configPath();
|
|
78
|
+
// Check config file exists
|
|
79
|
+
if (!(0, detect_1.fileExists)(configPath)) {
|
|
80
|
+
cli.fail(` ${def.name}: config file missing (${sanitizePath(configPath)})`);
|
|
81
|
+
issues++;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Check tool entry is present in config
|
|
85
|
+
const entry = (0, mcp_1.readMcpEntry)(configPath, def.rootKey, toolName, def.configFormat);
|
|
86
|
+
if (!entry) {
|
|
87
|
+
cli.fail(` ${def.name}: "${toolName}" entry missing from config (drift detected)`);
|
|
88
|
+
issues++;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
// Check URL is HTTPS
|
|
92
|
+
const url = entry.url || entry.serverUrl || entry.httpUrl;
|
|
93
|
+
if (url && typeof url === "string" && !url.startsWith("https://") && !url.startsWith("http://localhost")) {
|
|
94
|
+
checks++;
|
|
95
|
+
cli.warn(` ${def.name}: server URL is not HTTPS (${url})`);
|
|
96
|
+
issues++;
|
|
97
|
+
}
|
|
98
|
+
// Check rules version if tracked
|
|
99
|
+
if (record.rulesVersion && def.rulesPath) {
|
|
100
|
+
checks++;
|
|
101
|
+
const rulesPath = def.rulesPath();
|
|
102
|
+
try {
|
|
103
|
+
const rulesContent = fs.readFileSync(rulesPath, "utf-8");
|
|
104
|
+
const versionMatch = rulesContent.match(new RegExp(`<!-- ${toolName}:v([\\d.]+) -->`));
|
|
105
|
+
if (!versionMatch) {
|
|
106
|
+
cli.warn(` ${def.name}: rules block not found in ${sanitizePath(rulesPath)}`);
|
|
107
|
+
issues++;
|
|
108
|
+
}
|
|
109
|
+
else if (versionMatch[1] !== record.rulesVersion) {
|
|
110
|
+
cli.warn(` ${def.name}: rules version mismatch (installed: v${versionMatch[1]}, expected: v${record.rulesVersion})`);
|
|
111
|
+
issues++;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
cli.ok(` ${def.name}: config + rules v${record.rulesVersion}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
cli.warn(` ${def.name}: rules file not readable (${sanitizePath(rulesPath)})`);
|
|
119
|
+
issues++;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
cli.ok(` ${def.name}: config present`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
// Check 3: Config file parse health for all detected platforms
|
|
128
|
+
cli.log(`\n${cli.BOLD}Config file health${cli.RESET}`);
|
|
129
|
+
for (const [id, def] of platforms_1.PLATFORM_REGISTRY) {
|
|
130
|
+
const configPath = def.configPath();
|
|
131
|
+
if (!(0, detect_1.fileExists)(configPath))
|
|
132
|
+
continue;
|
|
133
|
+
checks++;
|
|
134
|
+
try {
|
|
135
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
136
|
+
if (def.configFormat === "json") {
|
|
137
|
+
JSON.parse(raw.charCodeAt(0) === 0xFEFF ? raw.slice(1) : raw);
|
|
138
|
+
cli.ok(` ${def.name}: valid JSON`);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
cli.ok(` ${def.name}: readable TOML`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
cli.fail(` ${def.name}: config file is corrupt or unparseable (${sanitizePath(configPath)})`);
|
|
146
|
+
issues++;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Summary
|
|
150
|
+
cli.log("");
|
|
151
|
+
if (issues === 0) {
|
|
152
|
+
cli.log(` ${cli.GREEN}${cli.BOLD}All ${checks} checks passed${cli.RESET}\n`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
cli.log(` ${cli.YELLOW}${issues} issue${issues === 1 ? "" : "s"} found${cli.RESET} ${cli.DIM}(${checks} checks)${cli.RESET}\n`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function sanitizePath(p) {
|
|
159
|
+
const home = require("os").homedir();
|
|
160
|
+
return p.replace(home, "~");
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/lib/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/status.ts"],"names":[],"mappings":"AAgBA,wBAAgB,SAAS,IAAI,IAAI,CAoEhC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// equip status — show all MCP servers across all platforms.
|
|
3
|
+
// Reads config files directly; no state required.
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.runStatus = runStatus;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const platforms_1 = require("../platforms");
|
|
41
|
+
const state_1 = require("../state");
|
|
42
|
+
const detect_1 = require("../detect");
|
|
43
|
+
const cli = __importStar(require("../cli"));
|
|
44
|
+
function runStatus() {
|
|
45
|
+
const state = (0, state_1.readState)();
|
|
46
|
+
const servers = new Map();
|
|
47
|
+
const platformResults = [];
|
|
48
|
+
cli.log(`\n${cli.BOLD}equip status${cli.RESET}\n`);
|
|
49
|
+
// Scan all platforms
|
|
50
|
+
for (const [id, def] of platforms_1.PLATFORM_REGISTRY) {
|
|
51
|
+
const configPath = def.configPath();
|
|
52
|
+
// Check if platform is present
|
|
53
|
+
const dirFound = def.detection.dirs.some(fn => (0, detect_1.dirExists)(fn()));
|
|
54
|
+
const fileFound = def.detection.files.some(fn => (0, detect_1.fileExists)(fn()));
|
|
55
|
+
if (!dirFound && !fileFound && !(0, detect_1.fileExists)(configPath))
|
|
56
|
+
continue;
|
|
57
|
+
// Read all MCP entries from config
|
|
58
|
+
const entries = readAllEntries(configPath, def.rootKey, def.configFormat);
|
|
59
|
+
if (!entries) {
|
|
60
|
+
platformResults.push({ id, name: def.name, count: 0 });
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const entryNames = Object.keys(entries);
|
|
64
|
+
platformResults.push({ id, name: def.name, count: entryNames.length });
|
|
65
|
+
for (const name of entryNames) {
|
|
66
|
+
if (!servers.has(name)) {
|
|
67
|
+
const tracked = !!state.tools[name];
|
|
68
|
+
servers.set(name, { name, platforms: [], tracked });
|
|
69
|
+
}
|
|
70
|
+
servers.get(name).platforms.push(def.name);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Print platforms
|
|
74
|
+
if (platformResults.length === 0) {
|
|
75
|
+
cli.warn("No AI coding platforms detected.");
|
|
76
|
+
cli.log("");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
cli.log(`${cli.BOLD}Detected platforms${cli.RESET}`);
|
|
80
|
+
for (const p of platformResults) {
|
|
81
|
+
const countStr = p.count === 0
|
|
82
|
+
? `${cli.DIM}no MCP servers${cli.RESET}`
|
|
83
|
+
: `${cli.GREEN}${p.count} MCP server${p.count === 1 ? "" : "s"}${cli.RESET}`;
|
|
84
|
+
cli.log(` ${p.name.padEnd(22)} ${countStr}`);
|
|
85
|
+
}
|
|
86
|
+
// Print servers
|
|
87
|
+
if (servers.size === 0) {
|
|
88
|
+
cli.log(`\n${cli.DIM}No MCP servers configured on any platform.${cli.RESET}\n`);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
cli.log(`\n${cli.BOLD}MCP servers${cli.RESET}`);
|
|
92
|
+
const sorted = [...servers.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
93
|
+
for (const srv of sorted) {
|
|
94
|
+
const badge = srv.tracked ? `${cli.GREEN}equip${cli.RESET}` : `${cli.DIM}manual${cli.RESET}`;
|
|
95
|
+
const plats = srv.platforms.join(", ");
|
|
96
|
+
cli.log(` ${srv.name.padEnd(20)} ${plats.padEnd(35)} [${badge}]`);
|
|
97
|
+
}
|
|
98
|
+
// Summary
|
|
99
|
+
const trackedCount = sorted.filter(s => s.tracked).length;
|
|
100
|
+
const manualCount = sorted.length - trackedCount;
|
|
101
|
+
cli.log(`\n ${cli.DIM}${sorted.length} server${sorted.length === 1 ? "" : "s"} total (${trackedCount} via equip, ${manualCount} manual)${cli.RESET}\n`);
|
|
102
|
+
}
|
|
103
|
+
// ─── Helpers ────────────────────────────────────────────────
|
|
104
|
+
function readAllEntries(configPath, rootKey, configFormat) {
|
|
105
|
+
try {
|
|
106
|
+
let raw = fs.readFileSync(configPath, "utf-8");
|
|
107
|
+
if (raw.charCodeAt(0) === 0xFEFF)
|
|
108
|
+
raw = raw.slice(1);
|
|
109
|
+
if (configFormat === "toml") {
|
|
110
|
+
return readAllTomlEntries(raw, rootKey);
|
|
111
|
+
}
|
|
112
|
+
const data = JSON.parse(raw);
|
|
113
|
+
return data?.[rootKey] || null;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function readAllTomlEntries(content, rootKey) {
|
|
120
|
+
const prefix = `[${rootKey}.`;
|
|
121
|
+
const result = {};
|
|
122
|
+
const lines = content.split("\n");
|
|
123
|
+
for (const line of lines) {
|
|
124
|
+
const trimmed = line.trim();
|
|
125
|
+
if (trimmed.startsWith(prefix) && !trimmed.includes(".", prefix.length)) {
|
|
126
|
+
const name = trimmed.slice(prefix.length, -1); // remove trailing ]
|
|
127
|
+
if (name && !name.includes(".")) {
|
|
128
|
+
result[name] = {}; // just mark presence
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return Object.keys(result).length > 0 ? result : null;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/lib/commands/status.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kDAAkD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAelD,8BAoEC;AAjFD,uCAAyB;AACzB,4CAAiD;AAEjD,oCAAqC;AACrC,sCAAkD;AAClD,4CAA8B;AAQ9B,SAAgB,SAAS;IACvB,MAAM,KAAK,GAAG,IAAA,iBAAS,GAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC9C,MAAM,eAAe,GAAkD,EAAE,CAAC;IAE1E,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;IAEnD,qBAAqB;IACrB,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,6BAAiB,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;QAEpC,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,kBAAS,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,IAAA,mBAAU,EAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,IAAA,mBAAU,EAAC,UAAU,CAAC;YAAE,SAAS;QAEjE,mCAAmC;QACnC,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAEvE,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC;YAC5B,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,iBAAiB,GAAG,CAAC,KAAK,EAAE;YACxC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;QAC/E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,6CAA6C,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC;QAC7F,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;IACrE,CAAC;IAED,UAAU;IACV,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC1D,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;IACjD,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,UAAU,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,WAAW,YAAY,eAAe,WAAW,WAAW,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3J,CAAC;AAED,+DAA+D;AAE/D,SAAS,cAAc,CAAC,UAAkB,EAAE,OAAe,EAAE,YAAoB;IAC/E,IAAI,CAAC;QACH,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAErD,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe,EAAE,OAAe;IAC1D,MAAM,MAAM,GAAG,IAAI,OAAO,GAAG,CAAC;IAC9B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB;YACnE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,qBAAqB;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,IAAI,IAAI,CA2ChC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// equip update — self-update equip and migrate configs if needed.
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.runUpdate = runUpdate;
|
|
38
|
+
const child_process_1 = require("child_process");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const state_1 = require("../state");
|
|
42
|
+
const cli = __importStar(require("../cli"));
|
|
43
|
+
function runUpdate() {
|
|
44
|
+
cli.log(`\n${cli.BOLD}equip update${cli.RESET}\n`);
|
|
45
|
+
const oldVersion = getInstalledVersion();
|
|
46
|
+
cli.log(` Current version: ${cli.CYAN}v${oldVersion}${cli.RESET}`);
|
|
47
|
+
// Step 1: Self-update via npm
|
|
48
|
+
cli.log(`\n${cli.BOLD}[1/2] Updating equip${cli.RESET}`);
|
|
49
|
+
try {
|
|
50
|
+
const npmCmd = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
51
|
+
(0, child_process_1.execSync)(`${npmCmd} update -g @cg3/equip`, {
|
|
52
|
+
encoding: "utf-8",
|
|
53
|
+
timeout: 60000,
|
|
54
|
+
stdio: "pipe",
|
|
55
|
+
});
|
|
56
|
+
const newVersion = getInstalledVersion();
|
|
57
|
+
if (newVersion !== oldVersion) {
|
|
58
|
+
cli.ok(`Updated to v${newVersion}`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
cli.ok(`Already at latest (v${oldVersion})`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
// npm update might fail if installed via npx or locally
|
|
66
|
+
cli.warn(`npm update failed — you may need to run: npm install -g @cg3/equip`);
|
|
67
|
+
cli.log(` ${cli.DIM}${err.message?.split("\n")[0] || "unknown error"}${cli.RESET}`);
|
|
68
|
+
}
|
|
69
|
+
// Step 2: Check for config migrations
|
|
70
|
+
cli.log(`\n${cli.BOLD}[2/2] Checking configs${cli.RESET}`);
|
|
71
|
+
const state = (0, state_1.readState)();
|
|
72
|
+
const toolCount = Object.keys(state.tools).length;
|
|
73
|
+
if (toolCount === 0) {
|
|
74
|
+
cli.ok("No tracked tools — nothing to migrate");
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
cli.ok(`${toolCount} tracked tool${toolCount === 1 ? "" : "s"} — configs verified`);
|
|
78
|
+
// Future: compare old platform defs vs new, migrate if paths changed
|
|
79
|
+
}
|
|
80
|
+
// Mark updated
|
|
81
|
+
(0, state_1.markUpdated)();
|
|
82
|
+
cli.log(`\n${cli.GREEN}${cli.BOLD}Update complete${cli.RESET}\n`);
|
|
83
|
+
}
|
|
84
|
+
function getInstalledVersion() {
|
|
85
|
+
try {
|
|
86
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "..", "..", "package.json"), "utf-8"));
|
|
87
|
+
return pkg.version;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return "unknown";
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type DetectedPlatform } from "./platforms";
|
|
2
|
+
export declare function whichSync(cmd: string): string | null;
|
|
3
|
+
export declare function dirExists(p: string): boolean;
|
|
4
|
+
export declare function fileExists(p: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Detect installed AI coding platforms.
|
|
7
|
+
* Checks directories and files first (fast), then CLI presence.
|
|
8
|
+
* Skips --version calls for performance.
|
|
9
|
+
* @param serverName - MCP server name to check for existing config
|
|
10
|
+
*/
|
|
11
|
+
export declare function detectPlatforms(serverName?: string): DetectedPlatform[];
|
|
12
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"AAOA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKvE,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKpD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7C;AAID;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAgCvE"}
|