@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.
Files changed (57) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +26 -10
  3. package/bin/equip.js +159 -68
  4. package/demo/README.md +1 -1
  5. package/dist/index.d.ts +74 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +175 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/lib/cli.d.ts +22 -0
  10. package/dist/lib/cli.d.ts.map +1 -0
  11. package/dist/lib/cli.js +148 -0
  12. package/dist/lib/cli.js.map +1 -0
  13. package/dist/lib/commands/doctor.d.ts +2 -0
  14. package/dist/lib/commands/doctor.d.ts.map +1 -0
  15. package/dist/lib/commands/doctor.js +162 -0
  16. package/dist/lib/commands/doctor.js.map +1 -0
  17. package/dist/lib/commands/status.d.ts +2 -0
  18. package/dist/lib/commands/status.d.ts.map +1 -0
  19. package/dist/lib/commands/status.js +134 -0
  20. package/dist/lib/commands/status.js.map +1 -0
  21. package/dist/lib/commands/update.d.ts +2 -0
  22. package/dist/lib/commands/update.d.ts.map +1 -0
  23. package/dist/lib/commands/update.js +93 -0
  24. package/dist/lib/commands/update.js.map +1 -0
  25. package/dist/lib/detect.d.ts +12 -0
  26. package/dist/lib/detect.d.ts.map +1 -0
  27. package/dist/lib/detect.js +109 -0
  28. package/dist/lib/detect.js.map +1 -0
  29. package/dist/lib/hooks.d.ts +40 -0
  30. package/dist/lib/hooks.d.ts.map +1 -0
  31. package/dist/lib/hooks.js +226 -0
  32. package/dist/lib/hooks.js.map +1 -0
  33. package/dist/lib/mcp.d.ts +73 -0
  34. package/dist/lib/mcp.d.ts.map +1 -0
  35. package/dist/lib/mcp.js +418 -0
  36. package/dist/lib/mcp.js.map +1 -0
  37. package/dist/lib/platforms.d.ts +67 -0
  38. package/dist/lib/platforms.d.ts.map +1 -0
  39. package/dist/lib/platforms.js +353 -0
  40. package/dist/lib/platforms.js.map +1 -0
  41. package/dist/lib/rules.d.ts +35 -0
  42. package/dist/lib/rules.d.ts.map +1 -0
  43. package/dist/lib/rules.js +161 -0
  44. package/dist/lib/rules.js.map +1 -0
  45. package/dist/lib/state.d.ts +33 -0
  46. package/dist/lib/state.d.ts.map +1 -0
  47. package/dist/lib/state.js +130 -0
  48. package/dist/lib/state.js.map +1 -0
  49. package/package.json +19 -13
  50. package/registry.json +9 -0
  51. package/index.js +0 -244
  52. package/lib/cli.js +0 -99
  53. package/lib/detect.js +0 -242
  54. package/lib/hooks.js +0 -238
  55. package/lib/mcp.js +0 -503
  56. package/lib/platforms.js +0 -184
  57. 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"}
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runDoctor(): void;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -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,2 @@
1
+ export declare function runStatus(): void;
2
+ //# sourceMappingURL=status.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runUpdate(): void;
2
+ //# sourceMappingURL=update.d.ts.map
@@ -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"}