@cg3/equip 0.5.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/equip.js +34 -72
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/commands/update.d.ts.map +1 -1
- package/dist/lib/commands/update.js +2 -9
- package/dist/lib/commands/update.js.map +1 -1
- package/dist/lib/detect.d.ts +3 -2
- package/dist/lib/detect.d.ts.map +1 -1
- package/dist/lib/detect.js +8 -10
- package/dist/lib/detect.js.map +1 -1
- package/dist/lib/fs.d.ts +36 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +137 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/mcp.d.ts +3 -1
- package/dist/lib/mcp.d.ts.map +1 -1
- package/dist/lib/mcp.js +38 -80
- package/dist/lib/mcp.js.map +1 -1
- package/dist/lib/platforms.d.ts +0 -7
- package/dist/lib/platforms.d.ts.map +1 -1
- package/dist/lib/platforms.js +0 -40
- package/dist/lib/platforms.js.map +1 -1
- package/dist/lib/reconcile.d.ts +16 -0
- package/dist/lib/reconcile.d.ts.map +1 -0
- package/dist/lib/reconcile.js +105 -0
- package/dist/lib/reconcile.js.map +1 -0
- package/dist/lib/rules.d.ts.map +1 -1
- package/dist/lib/rules.js +4 -6
- package/dist/lib/rules.js.map +1 -1
- package/dist/lib/state.d.ts +2 -0
- package/dist/lib/state.d.ts.map +1 -1
- package/dist/lib/state.js +10 -12
- package/dist/lib/state.js.map +1 -1
- package/package.json +1 -1
- package/registry.json +4 -2
package/bin/equip.js
CHANGED
|
@@ -60,6 +60,7 @@ function cmdHelp() {
|
|
|
60
60
|
console.log("");
|
|
61
61
|
console.log("Commands:");
|
|
62
62
|
console.log(" <tool> Install an MCP tool (e.g. equip prior)");
|
|
63
|
+
console.log(" uninstall <tool> Remove an installed tool (alias: unequip)");
|
|
63
64
|
console.log(" status Show all MCP servers across all platforms");
|
|
64
65
|
console.log(" doctor Validate config integrity and detect drift");
|
|
65
66
|
console.log(" update Update equip and migrate configs");
|
|
@@ -123,6 +124,12 @@ function cmdDoctor() {
|
|
|
123
124
|
|
|
124
125
|
// ─── Command: update ────────────────────────────────────────
|
|
125
126
|
|
|
127
|
+
function cmdUninstall(args) {
|
|
128
|
+
// Reuse unequip.js by injecting the tool name into argv and requiring it
|
|
129
|
+
process.argv = [process.argv[0], process.argv[1], ...args];
|
|
130
|
+
require("./unequip.js");
|
|
131
|
+
}
|
|
132
|
+
|
|
126
133
|
function cmdUpdate() {
|
|
127
134
|
const { runUpdate } = require("../dist/lib/commands/update");
|
|
128
135
|
runUpdate();
|
|
@@ -162,7 +169,17 @@ function spawnTool(pkg, command, extraArgs, toolName) {
|
|
|
162
169
|
// the tool exited non-zero (e.g. user cancelled a post-install prompt)
|
|
163
170
|
if (toolName) {
|
|
164
171
|
try {
|
|
165
|
-
const
|
|
172
|
+
const { reconcileState } = require("../dist/lib/reconcile");
|
|
173
|
+
const toolMeta = TOOLS[toolName] || {};
|
|
174
|
+
const hookDir = toolMeta.hookDir
|
|
175
|
+
? toolMeta.hookDir.replace(/^~/, require("os").homedir())
|
|
176
|
+
: undefined;
|
|
177
|
+
const changed = reconcileState({
|
|
178
|
+
toolName,
|
|
179
|
+
package: pkg,
|
|
180
|
+
marker: toolMeta.marker || toolName,
|
|
181
|
+
hookDir,
|
|
182
|
+
});
|
|
166
183
|
if (changed > 0) {
|
|
167
184
|
process.stderr.write(`\n equip: tracked ${toolName} on ${changed} platform${changed === 1 ? "" : "s"}\n`);
|
|
168
185
|
}
|
|
@@ -178,80 +195,24 @@ function spawnTool(pkg, command, extraArgs, toolName) {
|
|
|
178
195
|
});
|
|
179
196
|
}
|
|
180
197
|
|
|
181
|
-
/**
|
|
182
|
-
* After a tool finishes, scan platform configs and update state
|
|
183
|
-
* based on what's actually on disk. This ensures state is always
|
|
184
|
-
* accurate regardless of which equip version the tool used internally.
|
|
185
|
-
*/
|
|
186
|
-
function reconcileState(toolName, pkg) {
|
|
187
|
-
const { PLATFORM_REGISTRY } = require("../dist/lib/platforms");
|
|
188
|
-
const { readMcpEntry } = require("../dist/lib/mcp");
|
|
189
|
-
const { trackInstall } = require("../dist/lib/state");
|
|
190
|
-
const { dirExists, fileExists } = require("../dist/lib/detect");
|
|
191
|
-
const _fs = require("fs");
|
|
192
|
-
const _path = require("path");
|
|
193
|
-
|
|
194
|
-
let count = 0;
|
|
195
|
-
|
|
196
|
-
for (const [id, def] of PLATFORM_REGISTRY) {
|
|
197
|
-
// Quick check: is this platform present?
|
|
198
|
-
const dirFound = def.detection.dirs.some(fn => dirExists(fn()));
|
|
199
|
-
const fileFound = def.detection.files.some(fn => fileExists(fn()));
|
|
200
|
-
const configPath = def.configPath();
|
|
201
|
-
if (!dirFound && !fileFound && !fileExists(configPath)) continue;
|
|
202
|
-
|
|
203
|
-
// Check if tool has an MCP entry on this platform
|
|
204
|
-
const entry = readMcpEntry(configPath, def.rootKey, toolName, def.configFormat);
|
|
205
|
-
if (!entry) continue;
|
|
206
|
-
|
|
207
|
-
// Build state record from what's on disk
|
|
208
|
-
const record = {
|
|
209
|
-
configPath,
|
|
210
|
-
transport: entry.command ? "stdio" : "http",
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
// Check for rules (only on platforms that support writable rules)
|
|
214
|
-
if (def.rulesPath) {
|
|
215
|
-
const rulesPath = def.rulesPath();
|
|
216
|
-
try {
|
|
217
|
-
const content = _fs.readFileSync(rulesPath, "utf-8");
|
|
218
|
-
const versionMatch = content.match(new RegExp(`<!-- ${toolName}:v([0-9.]+) -->`));
|
|
219
|
-
if (versionMatch) {
|
|
220
|
-
record.rulesPath = rulesPath;
|
|
221
|
-
record.rulesVersion = versionMatch[1];
|
|
222
|
-
}
|
|
223
|
-
} catch {}
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// Check for hooks (only on platforms that support hooks)
|
|
227
|
-
if (def.hooks) {
|
|
228
|
-
const hookDir = _path.join(require("os").homedir(), `.${toolName}`, "hooks");
|
|
229
|
-
try {
|
|
230
|
-
const hookFiles = _fs.readdirSync(hookDir).filter(f => f.endsWith(".js"));
|
|
231
|
-
if (hookFiles.length > 0) {
|
|
232
|
-
record.hookDir = hookDir;
|
|
233
|
-
record.hookScripts = hookFiles;
|
|
234
|
-
}
|
|
235
|
-
} catch {}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
trackInstall(toolName, pkg, id, record);
|
|
239
|
-
count++;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
return count;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
198
|
// ─── Main ───────────────────────────────────────────────────
|
|
246
199
|
|
|
247
200
|
const cmd = process.argv[2];
|
|
248
201
|
const extraArgs = process.argv.slice(3);
|
|
249
202
|
|
|
250
|
-
if (
|
|
203
|
+
if (cmd === "--help" || cmd === "-h") {
|
|
251
204
|
cmdHelp();
|
|
252
205
|
process.exit(0);
|
|
253
206
|
}
|
|
254
207
|
|
|
208
|
+
if (!cmd) {
|
|
209
|
+
checkStaleVersion();
|
|
210
|
+
cmdStatus();
|
|
211
|
+
const { DIM, RESET } = require("../dist/lib/cli");
|
|
212
|
+
process.stderr.write(` ${DIM}Run "equip --help" for all commands${RESET}\n\n`);
|
|
213
|
+
process.exit(0);
|
|
214
|
+
}
|
|
215
|
+
|
|
255
216
|
if (cmd === "--version" || cmd === "-v") {
|
|
256
217
|
cmdVersion();
|
|
257
218
|
process.exit(0);
|
|
@@ -263,10 +224,11 @@ if (cmd !== "update" && cmd !== "--version" && cmd !== "-v") {
|
|
|
263
224
|
}
|
|
264
225
|
|
|
265
226
|
switch (cmd) {
|
|
266
|
-
case "status":
|
|
267
|
-
case "doctor":
|
|
268
|
-
case "update":
|
|
269
|
-
case "list":
|
|
270
|
-
case "demo":
|
|
271
|
-
|
|
227
|
+
case "status": cmdStatus(); break;
|
|
228
|
+
case "doctor": cmdDoctor(); break;
|
|
229
|
+
case "update": cmdUpdate(); break;
|
|
230
|
+
case "list": cmdList(); break;
|
|
231
|
+
case "demo": cmdDemo(extraArgs); break;
|
|
232
|
+
case "uninstall": cmdUninstall(extraArgs); break;
|
|
233
|
+
default: dispatchTool(cmd, extraArgs); break;
|
|
272
234
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -68,6 +68,21 @@ declare class Equip {
|
|
|
68
68
|
hookDir?: string;
|
|
69
69
|
}): boolean;
|
|
70
70
|
supportsHooks(platform: DetectedPlatform): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Verify that a tool is correctly installed on a platform.
|
|
73
|
+
* Returns a structured result with per-check status.
|
|
74
|
+
*/
|
|
75
|
+
verify(platform: DetectedPlatform): VerifyResult;
|
|
76
|
+
}
|
|
77
|
+
export interface VerifyCheck {
|
|
78
|
+
name: string;
|
|
79
|
+
ok: boolean;
|
|
80
|
+
detail: string;
|
|
81
|
+
}
|
|
82
|
+
export interface VerifyResult {
|
|
83
|
+
platform: string;
|
|
84
|
+
ok: boolean;
|
|
85
|
+
checks: VerifyCheck[];
|
|
71
86
|
}
|
|
72
87
|
export { Equip, createManualPlatform, platformName, resolvePlatformId, KNOWN_PLATFORMS, PLATFORM_REGISTRY, getPlatform, parseRulesVersion, markerPatterns, cli, };
|
|
73
88
|
export type { DetectedPlatform, PlatformDefinition, PlatformHttpShape, PlatformHookCapabilities, HookDefinition };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAgC,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -43,6 +43,7 @@ const mcp_1 = require("./lib/mcp");
|
|
|
43
43
|
const rules_1 = require("./lib/rules");
|
|
44
44
|
Object.defineProperty(exports, "parseRulesVersion", { enumerable: true, get: function () { return rules_1.parseRulesVersion; } });
|
|
45
45
|
Object.defineProperty(exports, "markerPatterns", { enumerable: true, get: function () { return rules_1.markerPatterns; } });
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
46
47
|
const hooks_1 = require("./lib/hooks");
|
|
47
48
|
const platforms_1 = require("./lib/platforms");
|
|
48
49
|
Object.defineProperty(exports, "createManualPlatform", { enumerable: true, get: function () { return platforms_1.createManualPlatform; } });
|
|
@@ -141,6 +142,55 @@ class Equip {
|
|
|
141
142
|
supportsHooks(platform) {
|
|
142
143
|
return !!this.hookDefs && this.hookDefs.length > 0 && !!(0, hooks_1.getHookCapabilities)(platform.platform);
|
|
143
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Verify that a tool is correctly installed on a platform.
|
|
147
|
+
* Returns a structured result with per-check status.
|
|
148
|
+
*/
|
|
149
|
+
verify(platform) {
|
|
150
|
+
const checks = [];
|
|
151
|
+
// Check MCP config entry
|
|
152
|
+
const mcpEntry = this.readMcp(platform);
|
|
153
|
+
checks.push({
|
|
154
|
+
name: "mcp",
|
|
155
|
+
ok: !!mcpEntry,
|
|
156
|
+
detail: mcpEntry ? "MCP config entry present" : "MCP config entry missing",
|
|
157
|
+
});
|
|
158
|
+
// Check rules (if configured and platform supports them)
|
|
159
|
+
if (this.rules && platform.rulesPath) {
|
|
160
|
+
let rulesOk = false;
|
|
161
|
+
let rulesDetail = "Rules file not found";
|
|
162
|
+
try {
|
|
163
|
+
const content = fs.readFileSync(platform.rulesPath, "utf-8");
|
|
164
|
+
const version = (0, rules_1.parseRulesVersion)(content, this.rules.marker);
|
|
165
|
+
if (version === this.rules.version) {
|
|
166
|
+
rulesOk = true;
|
|
167
|
+
rulesDetail = `Rules v${version} present`;
|
|
168
|
+
}
|
|
169
|
+
else if (version) {
|
|
170
|
+
rulesDetail = `Rules version mismatch: installed v${version}, expected v${this.rules.version}`;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
rulesDetail = "Rules marker block not found";
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch { /* file not readable */ }
|
|
177
|
+
checks.push({ name: "rules", ok: rulesOk, detail: rulesDetail });
|
|
178
|
+
}
|
|
179
|
+
// Check hooks (if configured and platform supports them)
|
|
180
|
+
if (this.hookDefs && this.hookDefs.length > 0 && this.supportsHooks(platform)) {
|
|
181
|
+
const hooksInstalled = this.hasHooks(platform);
|
|
182
|
+
checks.push({
|
|
183
|
+
name: "hooks",
|
|
184
|
+
ok: hooksInstalled,
|
|
185
|
+
detail: hooksInstalled ? `${this.hookDefs.length} hook${this.hookDefs.length === 1 ? "" : "s"} registered` : "Hooks not registered",
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
platform: platform.platform,
|
|
190
|
+
ok: checks.every(c => c.ok),
|
|
191
|
+
checks,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
144
194
|
}
|
|
145
195
|
exports.Equip = Equip;
|
|
146
196
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,4GAA4G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE5G,2CAA6B;AAC7B,uCAAyB;AAEzB,yCAA+C;AAC/C,mCAA4H;AAC5H,uCAA8F;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"AAOA,wBAAgB,SAAS,IAAI,IAAI,CA2ChC"}
|
|
@@ -36,9 +36,8 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
exports.runUpdate = runUpdate;
|
|
38
38
|
const child_process_1 = require("child_process");
|
|
39
|
-
const fs = __importStar(require("fs"));
|
|
40
|
-
const path = __importStar(require("path"));
|
|
41
39
|
const state_1 = require("../state");
|
|
40
|
+
const fs_1 = require("../fs");
|
|
42
41
|
const cli = __importStar(require("../cli"));
|
|
43
42
|
function runUpdate() {
|
|
44
43
|
cli.log(`\n${cli.BOLD}equip update${cli.RESET}\n`);
|
|
@@ -82,13 +81,7 @@ function runUpdate() {
|
|
|
82
81
|
cli.log(`\n${cli.GREEN}${cli.BOLD}Update complete${cli.RESET}\n`);
|
|
83
82
|
}
|
|
84
83
|
function getInstalledVersion() {
|
|
85
|
-
|
|
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
|
-
}
|
|
84
|
+
return (0, fs_1.resolvePackageVersion)(__dirname);
|
|
92
85
|
}
|
|
93
86
|
function getGlobalVersion() {
|
|
94
87
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":";AAAA,kEAAkE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/detect.d.ts
CHANGED
|
@@ -4,8 +4,9 @@ export declare function dirExists(p: string): boolean;
|
|
|
4
4
|
export declare function fileExists(p: string): boolean;
|
|
5
5
|
/**
|
|
6
6
|
* Detect installed AI coding platforms.
|
|
7
|
-
* Checks directories and files first (fast
|
|
8
|
-
*
|
|
7
|
+
* Checks directories and files first (fast fs stat).
|
|
8
|
+
* Falls back to CLI presence check (which/where) only when
|
|
9
|
+
* no filesystem evidence exists.
|
|
9
10
|
* @param serverName - MCP server name to check for existing config
|
|
10
11
|
*/
|
|
11
12
|
export declare function detectPlatforms(serverName?: string): DetectedPlatform[];
|
package/dist/lib/detect.d.ts.map
CHANGED
|
@@ -1 +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
|
|
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;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA6BvE"}
|
package/dist/lib/detect.js
CHANGED
|
@@ -74,32 +74,30 @@ function fileExists(p) {
|
|
|
74
74
|
// ─── Detection ──────────────────────────────────────────────
|
|
75
75
|
/**
|
|
76
76
|
* Detect installed AI coding platforms.
|
|
77
|
-
* Checks directories and files first (fast
|
|
78
|
-
*
|
|
77
|
+
* Checks directories and files first (fast fs stat).
|
|
78
|
+
* Falls back to CLI presence check (which/where) only when
|
|
79
|
+
* no filesystem evidence exists.
|
|
79
80
|
* @param serverName - MCP server name to check for existing config
|
|
80
81
|
*/
|
|
81
82
|
function detectPlatforms(serverName) {
|
|
82
83
|
const platforms = [];
|
|
83
84
|
for (const [, def] of platforms_1.PLATFORM_REGISTRY) {
|
|
84
|
-
// Check dirs/files first (fast fs stat)
|
|
85
|
+
// Check dirs/files first (fast fs stat)
|
|
85
86
|
const dirFound = def.detection.dirs.some(fn => dirExists(fn()));
|
|
86
87
|
const fileFound = def.detection.files.some(fn => fileExists(fn()));
|
|
87
88
|
const parentDirFound = def.detection.files.some(fn => dirExists(path.dirname(fn())));
|
|
88
|
-
// Only shell out for `which` if no
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (!hasCli && !dirFound && !fileFound && !parentDirFound)
|
|
89
|
+
// Only shell out for `which` if no filesystem evidence found
|
|
90
|
+
const fsEvidence = dirFound || fileFound || parentDirFound;
|
|
91
|
+
const cliFound = !fsEvidence && def.detection.cli ? !!whichSync(def.detection.cli) : false;
|
|
92
|
+
if (!fsEvidence && !cliFound)
|
|
93
93
|
continue;
|
|
94
94
|
const configPath = def.configPath();
|
|
95
95
|
const rulesPath = def.rulesPath ? def.rulesPath() : null;
|
|
96
96
|
platforms.push({
|
|
97
97
|
platform: def.id,
|
|
98
|
-
version: "detected",
|
|
99
98
|
configPath,
|
|
100
99
|
rulesPath,
|
|
101
100
|
existingMcp: serverName ? (0, mcp_1.readMcpEntry)(configPath, def.rootKey, serverName, def.configFormat) : null,
|
|
102
|
-
hasCli,
|
|
103
101
|
rootKey: def.rootKey,
|
|
104
102
|
configFormat: def.configFormat,
|
|
105
103
|
});
|
package/dist/lib/detect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,wDAAwD;AACxD,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUrB,8BAKC;AAED,8BAEC;AAED,gCAEC;
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/lib/detect.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/fs.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write a file atomically: write to a .tmp file, then rename over the target.
|
|
3
|
+
* On most filesystems, rename is atomic — the file is never partially written.
|
|
4
|
+
* Creates parent directories if they don't exist.
|
|
5
|
+
*/
|
|
6
|
+
export declare function atomicWriteFileSync(filePath: string, content: string): void;
|
|
7
|
+
export interface SafeJsonResult {
|
|
8
|
+
/** The parsed data, or null if the file doesn't exist */
|
|
9
|
+
data: Record<string, unknown> | null;
|
|
10
|
+
/** "ok" = parsed successfully, "missing" = file doesn't exist, "corrupt" = exists but unparseable */
|
|
11
|
+
status: "ok" | "missing" | "corrupt";
|
|
12
|
+
/** Error message when status is "corrupt" */
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Read and parse a JSON file, distinguishing "missing" from "corrupt".
|
|
17
|
+
* Handles BOM-prefixed files.
|
|
18
|
+
*/
|
|
19
|
+
export declare function safeReadJsonSync(filePath: string): SafeJsonResult;
|
|
20
|
+
/**
|
|
21
|
+
* Create a backup of a file before modifying it.
|
|
22
|
+
* Returns true if backup was created, false if source doesn't exist.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createBackup(filePath: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Remove backup file after a successful write.
|
|
27
|
+
* Call this only after verifying the new file is valid.
|
|
28
|
+
*/
|
|
29
|
+
export declare function cleanupBackup(filePath: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Find the equip package version by walking up from the given directory
|
|
32
|
+
* until a package.json with name "@cg3/equip" is found.
|
|
33
|
+
* Falls back to any package.json if the name doesn't match.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolvePackageVersion(startDir: string): string;
|
|
36
|
+
//# sourceMappingURL=fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/lib/fs.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAO3E;AAID,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACrC,qGAAqG;IACrG,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,CAAC;IACrC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAwBjE;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIpD;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgB9D"}
|
package/dist/lib/fs.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File I/O utilities — atomic writes, safe reads, package resolution.
|
|
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.atomicWriteFileSync = atomicWriteFileSync;
|
|
39
|
+
exports.safeReadJsonSync = safeReadJsonSync;
|
|
40
|
+
exports.createBackup = createBackup;
|
|
41
|
+
exports.cleanupBackup = cleanupBackup;
|
|
42
|
+
exports.resolvePackageVersion = resolvePackageVersion;
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
// ─── Atomic Write ───────────────────────────────────────────
|
|
46
|
+
/**
|
|
47
|
+
* Write a file atomically: write to a .tmp file, then rename over the target.
|
|
48
|
+
* On most filesystems, rename is atomic — the file is never partially written.
|
|
49
|
+
* Creates parent directories if they don't exist.
|
|
50
|
+
*/
|
|
51
|
+
function atomicWriteFileSync(filePath, content) {
|
|
52
|
+
const dir = path.dirname(filePath);
|
|
53
|
+
if (!fs.existsSync(dir))
|
|
54
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
55
|
+
const tmp = filePath + ".tmp";
|
|
56
|
+
fs.writeFileSync(tmp, content);
|
|
57
|
+
fs.renameSync(tmp, filePath);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Read and parse a JSON file, distinguishing "missing" from "corrupt".
|
|
61
|
+
* Handles BOM-prefixed files.
|
|
62
|
+
*/
|
|
63
|
+
function safeReadJsonSync(filePath) {
|
|
64
|
+
let raw;
|
|
65
|
+
try {
|
|
66
|
+
raw = fs.readFileSync(filePath, "utf-8");
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
const code = err.code;
|
|
70
|
+
if (code === "ENOENT") {
|
|
71
|
+
return { data: null, status: "missing" };
|
|
72
|
+
}
|
|
73
|
+
return { data: null, status: "corrupt", error: `Cannot read file: ${err.message}` };
|
|
74
|
+
}
|
|
75
|
+
// Strip BOM
|
|
76
|
+
if (raw.charCodeAt(0) === 0xFEFF)
|
|
77
|
+
raw = raw.slice(1);
|
|
78
|
+
try {
|
|
79
|
+
const parsed = JSON.parse(raw);
|
|
80
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
81
|
+
return { data: null, status: "corrupt", error: "File contains valid JSON but is not an object" };
|
|
82
|
+
}
|
|
83
|
+
return { data: parsed, status: "ok" };
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return { data: null, status: "corrupt", error: `Invalid JSON: ${err.message}` };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// ─── Backup Management ──────────────────────────────────────
|
|
90
|
+
/**
|
|
91
|
+
* Create a backup of a file before modifying it.
|
|
92
|
+
* Returns true if backup was created, false if source doesn't exist.
|
|
93
|
+
*/
|
|
94
|
+
function createBackup(filePath) {
|
|
95
|
+
try {
|
|
96
|
+
if (!fs.statSync(filePath).isFile())
|
|
97
|
+
return false;
|
|
98
|
+
fs.copyFileSync(filePath, filePath + ".bak");
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Remove backup file after a successful write.
|
|
107
|
+
* Call this only after verifying the new file is valid.
|
|
108
|
+
*/
|
|
109
|
+
function cleanupBackup(filePath) {
|
|
110
|
+
try {
|
|
111
|
+
fs.unlinkSync(filePath + ".bak");
|
|
112
|
+
}
|
|
113
|
+
catch { /* backup may not exist */ }
|
|
114
|
+
}
|
|
115
|
+
// ─── Package Version Resolution ─────────────────────────────
|
|
116
|
+
/**
|
|
117
|
+
* Find the equip package version by walking up from the given directory
|
|
118
|
+
* until a package.json with name "@cg3/equip" is found.
|
|
119
|
+
* Falls back to any package.json if the name doesn't match.
|
|
120
|
+
*/
|
|
121
|
+
function resolvePackageVersion(startDir) {
|
|
122
|
+
let dir = startDir;
|
|
123
|
+
const root = path.parse(dir).root;
|
|
124
|
+
while (dir !== root) {
|
|
125
|
+
const pkgPath = path.join(dir, "package.json");
|
|
126
|
+
try {
|
|
127
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
128
|
+
if (pkg.name === "@cg3/equip" && pkg.version) {
|
|
129
|
+
return pkg.version;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch { /* keep walking */ }
|
|
133
|
+
dir = path.dirname(dir);
|
|
134
|
+
}
|
|
135
|
+
return "unknown";
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/lib/fs.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/mcp.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export declare function buildHttpConfigWithAuth(serverUrl: string, apiKey: strin
|
|
|
36
36
|
export declare function buildStdioConfig(command: string, args: string[], env: Record<string, string>): Record<string, unknown>;
|
|
37
37
|
/**
|
|
38
38
|
* Install MCP config for a platform.
|
|
39
|
-
*
|
|
39
|
+
* Writes directly to the platform's config file (JSON or TOML).
|
|
40
40
|
*/
|
|
41
41
|
export declare function installMcp(platform: DetectedPlatform, serverName: string, mcpEntry: Record<string, unknown>, options?: {
|
|
42
42
|
dryRun?: boolean;
|
|
@@ -47,6 +47,7 @@ export declare function installMcp(platform: DetectedPlatform, serverName: strin
|
|
|
47
47
|
};
|
|
48
48
|
/**
|
|
49
49
|
* Write MCP config directly to JSON file.
|
|
50
|
+
* Uses atomic writes and detects corrupt config files.
|
|
50
51
|
*/
|
|
51
52
|
export declare function installMcpJson(platform: DetectedPlatform, serverName: string, mcpEntry: Record<string, unknown>, dryRun: boolean): {
|
|
52
53
|
success: boolean;
|
|
@@ -54,6 +55,7 @@ export declare function installMcpJson(platform: DetectedPlatform, serverName: s
|
|
|
54
55
|
};
|
|
55
56
|
/**
|
|
56
57
|
* Write MCP config to TOML file (Codex).
|
|
58
|
+
* Uses atomic writes.
|
|
57
59
|
*/
|
|
58
60
|
export declare function installMcpToml(platform: DetectedPlatform, serverName: string, mcpEntry: Record<string, unknown>, dryRun: boolean): {
|
|
59
61
|
success: boolean;
|
package/dist/lib/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/lib/mcp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/lib/mcp.ts"],"names":[],"mappings":"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"}
|