@cg3/equip 0.10.1 → 0.11.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/README.md CHANGED
@@ -1,14 +1,16 @@
1
- # @cg3/equip
1
+ # Equip
2
2
 
3
3
  Cross-platform installer for MCP tools, behavioral rules, agent skills, and lifecycle hooks.
4
4
 
5
- [Join the Discord](https://discord.gg/bBcRHT4J) | [Tool Author Guide](./docs/tool-author.md)
5
+ [![npm](https://img.shields.io/npm/v/@cg3/equip)](https://www.npmjs.com/package/@cg3/equip)
6
+
7
+ [Discord](https://discord.gg/bBcRHT4J) | [Tool Author Guide](./docs/tool-author.md)
6
8
 
7
9
  ## What It Does
8
10
 
9
11
  You build an MCP tool. You want it to work on Claude Code, Cursor, VS Code, Windsurf, Cline, Roo Code, Codex, Gemini CLI, and more. Each platform has its own config format, file paths, root keys, URL fields, and quirks.
10
12
 
11
- Equip handles all of that. One setup script, 11 platforms.
13
+ Equip handles all of that. One setup script, every platform.
12
14
 
13
15
  ## Install
14
16
 
@@ -61,9 +63,9 @@ Equip distributes your tool through four complementary layers:
61
63
 
62
64
  | Layer | What It Does | Reliability | Coverage |
63
65
  |---|---|---|---|
64
- | [MCP Config](./docs/mcp-servers.md) | Makes the tool *available* — agent can call it | Baseline | 11 platforms |
65
- | [Behavioral Rules](./docs/rules.md) | Teaches the agent *when* to call it | Strong | 8 platforms + clipboard |
66
- | [Agent Skills](./docs/skills.md) | Gives the agent *detailed knowledge* of how to use it | Strong (varies) | 8 platforms |
66
+ | [MCP Config](./docs/mcp-servers.md) | Makes the tool *available* — agent can call it | Baseline | All platforms |
67
+ | [Behavioral Rules](./docs/rules.md) | Teaches the agent *when* to call it | Strong | Most platforms + clipboard |
68
+ | [Agent Skills](./docs/skills.md) | Gives the agent *detailed knowledge* of how to use it | Strong (varies) | Most platforms |
67
69
  | [Lifecycle Hooks](./docs/hooks.md) | *Structurally enforces* behavior at key moments | Strongest | 1 platform (Claude Code) |
68
70
 
69
71
  Each layer compensates for the limitations of the one before it. Tool descriptions alone don't reliably trigger behavior. Rules are stronger but can be compacted. Skills add depth but may not auto-invoke on all platforms. Hooks fire automatically, independent of the agent's memory.
@@ -85,6 +87,8 @@ No layer is a silver bullet. Together, they give you the best coverage available
85
87
  | Junie | Yes | -- | -- | -- |
86
88
  | Copilot (JetBrains) | Yes | -- | -- | -- |
87
89
  | Copilot CLI | Yes | -- | -- | -- |
90
+ | Amazon Q | Yes | -- | -- | -- |
91
+ | Tabnine | Yes | Yes | -- | -- |
88
92
 
89
93
  See [Platforms](./docs/platforms.md) for full details — config paths, detection, and per-platform quirks.
90
94
 
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"AAOA,wBAAgB,SAAS,IAAI,IAAI,CA2ChC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"AAQA,wBAAgB,SAAS,IAAI,IAAI,CAyDhC"}
@@ -38,6 +38,7 @@ exports.runUpdate = runUpdate;
38
38
  const child_process_1 = require("child_process");
39
39
  const state_1 = require("../state");
40
40
  const fs_1 = require("../fs");
41
+ const migrate_1 = require("../migrate");
41
42
  const cli = __importStar(require("../cli"));
42
43
  function runUpdate() {
43
44
  cli.log(`\n${cli.BOLD}equip update${cli.RESET}\n`);
@@ -61,20 +62,33 @@ function runUpdate() {
61
62
  }
62
63
  }
63
64
  catch (err) {
64
- // npm update might fail if installed via npx or locally
65
65
  cli.warn(`npm update failed — you may need to run: npm install -g @cg3/equip`);
66
66
  cli.log(` ${cli.DIM}${err.message?.split("\n")[0] || "unknown error"}${cli.RESET}`);
67
67
  }
68
- // Step 2: Check for config migrations
69
- cli.log(`\n${cli.BOLD}[2/2] Checking configs${cli.RESET}`);
68
+ // Step 2: Migrate configs
69
+ cli.log(`\n${cli.BOLD}[2/2] Migrating configs${cli.RESET}`);
70
70
  const state = (0, state_1.readState)();
71
71
  const toolCount = Object.keys(state.tools).length;
72
72
  if (toolCount === 0) {
73
73
  cli.ok("No tracked tools — nothing to migrate");
74
74
  }
75
75
  else {
76
- cli.ok(`${toolCount} tracked tool${toolCount === 1 ? "" : "s"} — configs verified`);
77
- // Future: compare old platform defs vs new, migrate if paths changed
76
+ const results = (0, migrate_1.migrateConfigs)();
77
+ const migrated = results.filter(r => r.action === "migrated");
78
+ const errors = results.filter(r => r.action === "error");
79
+ if (migrated.length > 0) {
80
+ for (const r of migrated) {
81
+ cli.ok(`${r.platform}/${r.toolName}: migrated (${r.detail})`);
82
+ }
83
+ }
84
+ if (errors.length > 0) {
85
+ for (const r of errors) {
86
+ cli.fail(`${r.platform}/${r.toolName}: ${r.detail}`);
87
+ }
88
+ }
89
+ if (migrated.length === 0 && errors.length === 0) {
90
+ cli.ok(`${toolCount} tool${toolCount === 1 ? "" : "s"} — all configs current`);
91
+ }
78
92
  }
79
93
  // Mark updated
80
94
  (0, state_1.markUpdated)();
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/lib/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface MigrationResult {
2
+ platform: string;
3
+ toolName: string;
4
+ action: "migrated" | "skipped" | "error";
5
+ detail?: string;
6
+ }
7
+ /**
8
+ * Check all tracked tools across all platforms for config entries
9
+ * that don't match the current platform definitions, and fix them.
10
+ *
11
+ * Returns a list of migration actions taken.
12
+ */
13
+ export declare function migrateConfigs(): MigrationResult[];
14
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,eAAe,EAAE,CAqDlD"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ // Config migration — detects and fixes MCP config entries that were written
3
+ // by older equip versions with different platform definitions.
4
+ //
5
+ // Migration scenarios:
6
+ // - Type field added (Roo Code v0.9.4: added "streamable-http")
7
+ // - Type field removed (Cursor v0.9.4: removed "streamable-http")
8
+ // - Type field changed (hypothetical future)
9
+ // - Headers wrapper changed (hypothetical future)
10
+ // - URL field name changed (hypothetical future)
11
+ //
12
+ // Zero dependencies.
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.migrateConfigs = migrateConfigs;
15
+ const platforms_1 = require("./platforms");
16
+ const mcp_1 = require("./mcp");
17
+ const state_1 = require("./state");
18
+ const fs_1 = require("./fs");
19
+ // ─── Migration ──────────────────────────────────────────────
20
+ /**
21
+ * Check all tracked tools across all platforms for config entries
22
+ * that don't match the current platform definitions, and fix them.
23
+ *
24
+ * Returns a list of migration actions taken.
25
+ */
26
+ function migrateConfigs() {
27
+ const state = (0, state_1.readState)();
28
+ const results = [];
29
+ for (const [toolName, tool] of Object.entries(state.tools)) {
30
+ for (const [platformId, record] of Object.entries(tool.platforms)) {
31
+ const def = platforms_1.PLATFORM_REGISTRY.get(platformId);
32
+ if (!def)
33
+ continue;
34
+ const configPath = record.configPath || def.configPath();
35
+ // Read the existing entry
36
+ const existing = (0, mcp_1.readMcpEntry)(configPath, def.rootKey, toolName, def.configFormat);
37
+ if (!existing) {
38
+ results.push({ platform: platformId, toolName, action: "skipped", detail: "no MCP entry found" });
39
+ continue;
40
+ }
41
+ // TOML migration is not supported yet — too complex for the minimal parser
42
+ if (def.configFormat === "toml") {
43
+ results.push({ platform: platformId, toolName, action: "skipped", detail: "TOML migration not supported" });
44
+ continue;
45
+ }
46
+ // Check if migration is needed
47
+ const issues = detectIssues(existing, def);
48
+ if (issues.length === 0) {
49
+ results.push({ platform: platformId, toolName, action: "skipped", detail: "config is current" });
50
+ continue;
51
+ }
52
+ // Rebuild the entry with current platform shape
53
+ try {
54
+ const migrated = rebuildEntry(existing, def);
55
+ writeEntry(configPath, def.rootKey, toolName, migrated);
56
+ results.push({
57
+ platform: platformId,
58
+ toolName,
59
+ action: "migrated",
60
+ detail: issues.join("; "),
61
+ });
62
+ }
63
+ catch (err) {
64
+ results.push({
65
+ platform: platformId,
66
+ toolName,
67
+ action: "error",
68
+ detail: err.message,
69
+ });
70
+ }
71
+ }
72
+ }
73
+ return results;
74
+ }
75
+ // ─── Issue Detection ────────────────────────────────────────
76
+ function detectIssues(entry, def) {
77
+ const issues = [];
78
+ const shape = def.httpShape;
79
+ // Check type field
80
+ if (shape.typeField) {
81
+ if (entry.type !== shape.typeField) {
82
+ issues.push(`type field should be "${shape.typeField}", got "${entry.type ?? "missing"}"`);
83
+ }
84
+ }
85
+ else {
86
+ if (entry.type !== undefined) {
87
+ issues.push(`type field should not be present, got "${entry.type}"`);
88
+ }
89
+ }
90
+ // Check URL field name
91
+ const hasCorrectUrl = entry[shape.urlField] !== undefined;
92
+ if (!hasCorrectUrl) {
93
+ // Check if URL exists under a different field name
94
+ const altUrlFields = ["url", "serverUrl", "httpUrl"];
95
+ const foundUrl = altUrlFields.find(f => entry[f] !== undefined);
96
+ if (foundUrl && foundUrl !== shape.urlField) {
97
+ issues.push(`URL in "${foundUrl}" field, should be "${shape.urlField}"`);
98
+ }
99
+ }
100
+ // Check headers wrapper
101
+ if (shape.headersWrapper) {
102
+ // Should have nested headers (e.g., requestInit.headers)
103
+ const wrapper = entry[shape.headersWrapper];
104
+ if (!wrapper && entry[shape.headersField]) {
105
+ issues.push(`headers should be nested in "${shape.headersWrapper}", found at top level`);
106
+ }
107
+ }
108
+ else {
109
+ // Should have top-level headers
110
+ if (entry.requestInit && !entry[shape.headersField]) {
111
+ issues.push(`headers nested in wrapper, should be top-level "${shape.headersField}"`);
112
+ }
113
+ }
114
+ return issues;
115
+ }
116
+ // ─── Entry Rebuilding ───────────────────────────────────────
117
+ function rebuildEntry(existing, def) {
118
+ const shape = def.httpShape;
119
+ // Extract the server URL from whichever field it's in
120
+ const serverUrl = (existing[shape.urlField] || existing.url || existing.serverUrl || existing.httpUrl);
121
+ if (!serverUrl) {
122
+ throw new Error("Cannot migrate: no server URL found in existing entry");
123
+ }
124
+ // Extract auth headers from wherever they are
125
+ let authHeaders;
126
+ if (shape.headersWrapper) {
127
+ const wrapper = existing[shape.headersWrapper];
128
+ authHeaders = wrapper?.[shape.headersField];
129
+ }
130
+ if (!authHeaders) {
131
+ authHeaders = (existing[shape.headersField] || existing.headers || existing.http_headers);
132
+ }
133
+ // Build new entry with current platform shape
134
+ const result = { [shape.urlField]: serverUrl };
135
+ if (shape.typeField)
136
+ result.type = shape.typeField;
137
+ if (authHeaders) {
138
+ if (shape.headersWrapper) {
139
+ result[shape.headersWrapper] = { [shape.headersField]: authHeaders };
140
+ }
141
+ else {
142
+ result[shape.headersField] = authHeaders;
143
+ }
144
+ }
145
+ // Preserve any extra fields that aren't part of the shape (e.g., alwaysAllow, disabled, timeout)
146
+ const shapeKeys = new Set([shape.urlField, "url", "serverUrl", "httpUrl", "type", shape.headersField, "headers", "http_headers", "requestInit"]);
147
+ for (const [k, v] of Object.entries(existing)) {
148
+ if (!shapeKeys.has(k) && !(k in result)) {
149
+ result[k] = v;
150
+ }
151
+ }
152
+ return result;
153
+ }
154
+ // ─── Write ──────────────────────────────────────────────────
155
+ function writeEntry(configPath, rootKey, serverName, entry) {
156
+ const { data, status, error } = (0, fs_1.safeReadJsonSync)(configPath);
157
+ if (status === "corrupt") {
158
+ throw new Error(`Config file corrupt: ${error}`);
159
+ }
160
+ const config = data || {};
161
+ if (!config[rootKey])
162
+ config[rootKey] = {};
163
+ config[rootKey][serverName] = entry;
164
+ (0, fs_1.atomicWriteFileSync)(configPath, JSON.stringify(config, null, 2) + "\n");
165
+ }
166
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/lib/migrate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cg3/equip",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "description": "Universal MCP + behavioral rules installer for AI coding agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",