@cg3/equip 0.6.1 → 0.9.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 (44) hide show
  1. package/bin/equip.js +11 -65
  2. package/demo/setup.js +85 -12
  3. package/dist/index.d.ts +26 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +77 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/commands/doctor.d.ts.map +1 -1
  8. package/dist/lib/commands/doctor.js +14 -1
  9. package/dist/lib/commands/doctor.js.map +1 -1
  10. package/dist/lib/commands/update.d.ts.map +1 -1
  11. package/dist/lib/commands/update.js +2 -9
  12. package/dist/lib/commands/update.js.map +1 -1
  13. package/dist/lib/detect.d.ts.map +1 -1
  14. package/dist/lib/detect.js +2 -0
  15. package/dist/lib/detect.js.map +1 -1
  16. package/dist/lib/fs.d.ts +36 -0
  17. package/dist/lib/fs.d.ts.map +1 -0
  18. package/dist/lib/fs.js +137 -0
  19. package/dist/lib/fs.js.map +1 -0
  20. package/dist/lib/mcp.d.ts +2 -0
  21. package/dist/lib/mcp.d.ts.map +1 -1
  22. package/dist/lib/mcp.js +37 -55
  23. package/dist/lib/mcp.js.map +1 -1
  24. package/dist/lib/platforms.d.ts +2 -0
  25. package/dist/lib/platforms.d.ts.map +1 -1
  26. package/dist/lib/platforms.js +12 -0
  27. package/dist/lib/platforms.js.map +1 -1
  28. package/dist/lib/reconcile.d.ts +16 -0
  29. package/dist/lib/reconcile.d.ts.map +1 -0
  30. package/dist/lib/reconcile.js +126 -0
  31. package/dist/lib/reconcile.js.map +1 -0
  32. package/dist/lib/rules.d.ts.map +1 -1
  33. package/dist/lib/rules.js +4 -6
  34. package/dist/lib/rules.js.map +1 -1
  35. package/dist/lib/skills.d.ts +36 -0
  36. package/dist/lib/skills.d.ts.map +1 -0
  37. package/dist/lib/skills.js +125 -0
  38. package/dist/lib/skills.js.map +1 -0
  39. package/dist/lib/state.d.ts +6 -0
  40. package/dist/lib/state.d.ts.map +1 -1
  41. package/dist/lib/state.js +4 -12
  42. package/dist/lib/state.js.map +1 -1
  43. package/package.json +1 -1
  44. package/registry.json +5 -2
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ // State reconciliation — scans platform configs after tool dispatch
3
+ // and records what's actually on disk in ~/.equip/state.json.
4
+ //
5
+ // Called by the global CLI after a tool's setup completes.
6
+ // This is the single source of truth for state writes.
7
+ // Zero dependencies.
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.reconcileState = reconcileState;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const platforms_1 = require("./platforms");
47
+ const mcp_1 = require("./mcp");
48
+ const state_1 = require("./state");
49
+ const detect_1 = require("./detect");
50
+ // ─── Reconcile ──────────────────────────────────────────────
51
+ /**
52
+ * Scan all platform configs and update state based on what's on disk.
53
+ * Returns the number of platforms where the tool was found.
54
+ */
55
+ function reconcileState(options) {
56
+ const { toolName, package: pkg, marker = toolName, hookDir: customHookDir } = options;
57
+ const defaultHookDir = path.join(os.homedir(), `.${toolName}`, "hooks");
58
+ const hookDir = customHookDir || defaultHookDir;
59
+ let count = 0;
60
+ for (const [id, def] of platforms_1.PLATFORM_REGISTRY) {
61
+ // Quick presence check (fast fs stat)
62
+ const dirFound = def.detection.dirs.some(fn => (0, detect_1.dirExists)(fn()));
63
+ const fileFound = def.detection.files.some(fn => (0, detect_1.fileExists)(fn()));
64
+ const configPath = def.configPath();
65
+ if (!dirFound && !fileFound && !(0, detect_1.fileExists)(configPath))
66
+ continue;
67
+ // Check if tool has an MCP entry on this platform
68
+ const entry = (0, mcp_1.readMcpEntry)(configPath, def.rootKey, toolName, def.configFormat);
69
+ if (!entry)
70
+ continue;
71
+ // Build state record from what's on disk
72
+ const record = {
73
+ configPath,
74
+ transport: entry.command ? "stdio" : "http",
75
+ };
76
+ // Check for rules (only on platforms that have a writable rules path)
77
+ if (def.rulesPath) {
78
+ const rulesPath = def.rulesPath();
79
+ try {
80
+ const content = fs.readFileSync(rulesPath, "utf-8");
81
+ const versionMatch = content.match(new RegExp(`<!-- ${marker}:v([0-9.]+) -->`));
82
+ if (versionMatch) {
83
+ record.rulesPath = rulesPath;
84
+ record.rulesVersion = versionMatch[1];
85
+ }
86
+ }
87
+ catch { /* rules file may not exist */ }
88
+ }
89
+ // Check for hooks (only on platforms that support hooks)
90
+ if (def.hooks) {
91
+ try {
92
+ const hookFiles = fs.readdirSync(hookDir).filter(f => f.endsWith(".js"));
93
+ if (hookFiles.length > 0) {
94
+ record.hookDir = hookDir;
95
+ record.hookScripts = hookFiles;
96
+ }
97
+ }
98
+ catch { /* hook dir may not exist */ }
99
+ }
100
+ // Check for skills (only on platforms that support skills)
101
+ if (def.skillsPath) {
102
+ const skillsBasePath = def.skillsPath();
103
+ const toolSkillDir = path.join(skillsBasePath, toolName);
104
+ try {
105
+ const skillDirs = fs.readdirSync(toolSkillDir);
106
+ const skillWithMd = skillDirs.find(s => {
107
+ try {
108
+ return fs.statSync(path.join(toolSkillDir, s, "SKILL.md")).isFile();
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ });
114
+ if (skillWithMd) {
115
+ record.skillsPath = toolSkillDir;
116
+ record.skillName = skillWithMd;
117
+ }
118
+ }
119
+ catch { /* skill dir may not exist */ }
120
+ }
121
+ (0, state_1.trackInstall)(toolName, pkg, id, record);
122
+ count++;
123
+ }
124
+ return count;
125
+ }
126
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../src/lib/reconcile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhF;AAID,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CA0DzG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAmCpI"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMpD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAKtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhF;AAID,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAuDzG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAmCpI"}
package/dist/lib/rules.js CHANGED
@@ -43,6 +43,7 @@ exports.uninstallRules = uninstallRules;
43
43
  const fs = __importStar(require("fs"));
44
44
  const path = __importStar(require("path"));
45
45
  const cli_1 = require("./cli");
46
+ const fs_1 = require("./fs");
46
47
  // ─── Constants ──────────────────────────────────────────────
47
48
  /**
48
49
  * Create regex patterns for a given marker name.
@@ -97,16 +98,13 @@ function installRules(platform, options) {
97
98
  return { action: "skipped" };
98
99
  }
99
100
  if (!dryRun) {
100
- const dir = path.dirname(rulesPath);
101
- if (!fs.existsSync(dir))
102
- fs.mkdirSync(dir, { recursive: true });
103
101
  if (existingVersion) {
104
102
  const updated = existing.replace(BLOCK_RE, content + "\n");
105
- fs.writeFileSync(rulesPath, updated);
103
+ (0, fs_1.atomicWriteFileSync)(rulesPath, updated);
106
104
  return { action: "updated" };
107
105
  }
108
106
  const sep = existing && !existing.endsWith("\n\n") ? (existing.endsWith("\n") ? "\n" : "\n\n") : "";
109
- fs.writeFileSync(rulesPath, existing + sep + content + "\n");
107
+ (0, fs_1.atomicWriteFileSync)(rulesPath, existing + sep + content + "\n");
110
108
  return { action: "created" };
111
109
  }
112
110
  return { action: existingVersion ? "updated" : "created" };
@@ -146,7 +144,7 @@ function uninstallRules(platform, options) {
146
144
  if (!dryRun) {
147
145
  const cleaned = content.replace(BLOCK_RE, "").replace(/\n{3,}/g, "\n\n").trim();
148
146
  if (cleaned) {
149
- fs.writeFileSync(rulesPath, cleaned + "\n");
147
+ (0, fs_1.atomicWriteFileSync)(rulesPath, cleaned + "\n");
150
148
  }
151
149
  else {
152
150
  fs.unlinkSync(rulesPath);
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type DetectedPlatform } from "./platforms";
2
+ export interface SkillFile {
3
+ /** Relative path within the skill directory (e.g., "SKILL.md", "scripts/validate.sh") */
4
+ path: string;
5
+ /** File content */
6
+ content: string;
7
+ }
8
+ export interface SkillConfig {
9
+ /** Skill directory name (e.g., "search") */
10
+ name: string;
11
+ /** Files to install */
12
+ files: SkillFile[];
13
+ }
14
+ /**
15
+ * Install skill files to a platform's skills directory.
16
+ * Layout: {skillsPath}/{toolName}/{skillName}/SKILL.md
17
+ *
18
+ * @param platform - Detected platform with skillsPath
19
+ * @param toolName - Tool name (scopes skills per tool, e.g., "prior")
20
+ * @param skill - Skill config with name and files
21
+ * @param options - { dryRun }
22
+ */
23
+ export declare function installSkill(platform: DetectedPlatform, toolName: string, skill: SkillConfig, options?: {
24
+ dryRun?: boolean;
25
+ }): {
26
+ action: string;
27
+ };
28
+ /**
29
+ * Remove a skill directory from a platform.
30
+ */
31
+ export declare function uninstallSkill(platform: DetectedPlatform, toolName: string, skillName: string, dryRun?: boolean): boolean;
32
+ /**
33
+ * Check if a skill is installed on a platform.
34
+ */
35
+ export declare function hasSkill(platform: DetectedPlatform, toolName: string, skillName: string): boolean;
36
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,aAAa,CAAC;AAKjE,MAAM,WAAW,SAAS;IACxB,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAID;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAyBpB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,OAAe,GACtB,OAAO,CAmBT;AAID;;GAEG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAIT"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ // Skill file installation — copies SKILL.md and supporting files to platform skill directories.
3
+ // Skills use a universal format (Agent Skills spec) — no per-platform translation needed.
4
+ // Zero dependencies.
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.installSkill = installSkill;
40
+ exports.uninstallSkill = uninstallSkill;
41
+ exports.hasSkill = hasSkill;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const fs_1 = require("./fs");
45
+ // ─── Install ────────────────────────────────────────────────
46
+ /**
47
+ * Install skill files to a platform's skills directory.
48
+ * Layout: {skillsPath}/{toolName}/{skillName}/SKILL.md
49
+ *
50
+ * @param platform - Detected platform with skillsPath
51
+ * @param toolName - Tool name (scopes skills per tool, e.g., "prior")
52
+ * @param skill - Skill config with name and files
53
+ * @param options - { dryRun }
54
+ */
55
+ function installSkill(platform, toolName, skill, options = {}) {
56
+ if (!platform.skillsPath)
57
+ return { action: "skipped" };
58
+ if (!skill.files || skill.files.length === 0)
59
+ return { action: "skipped" };
60
+ const skillDir = path.join(platform.skillsPath, toolName, skill.name);
61
+ // Check if already installed (idempotent — skip if SKILL.md exists and matches)
62
+ const mainFile = skill.files.find(f => f.path === "SKILL.md");
63
+ if (mainFile) {
64
+ try {
65
+ const existing = fs.readFileSync(path.join(skillDir, "SKILL.md"), "utf-8");
66
+ if (existing === mainFile.content)
67
+ return { action: "skipped" };
68
+ }
69
+ catch { /* doesn't exist yet — proceed with install */ }
70
+ }
71
+ if (!options.dryRun) {
72
+ for (const file of skill.files) {
73
+ const filePath = path.join(skillDir, file.path);
74
+ const dir = path.dirname(filePath);
75
+ if (!fs.existsSync(dir))
76
+ fs.mkdirSync(dir, { recursive: true });
77
+ (0, fs_1.atomicWriteFileSync)(filePath, file.content);
78
+ }
79
+ }
80
+ return { action: "created" };
81
+ }
82
+ // ─── Uninstall ──────────────────────────────────────────────
83
+ /**
84
+ * Remove a skill directory from a platform.
85
+ */
86
+ function uninstallSkill(platform, toolName, skillName, dryRun = false) {
87
+ if (!platform.skillsPath)
88
+ return false;
89
+ const skillDir = path.join(platform.skillsPath, toolName, skillName);
90
+ try {
91
+ if (!fs.statSync(skillDir).isDirectory())
92
+ return false;
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ if (!dryRun) {
98
+ fs.rmSync(skillDir, { recursive: true, force: true });
99
+ // Clean up parent tool dir if empty
100
+ const toolDir = path.join(platform.skillsPath, toolName);
101
+ try {
102
+ const remaining = fs.readdirSync(toolDir);
103
+ if (remaining.length === 0)
104
+ fs.rmdirSync(toolDir);
105
+ }
106
+ catch { /* not empty or doesn't exist */ }
107
+ }
108
+ return true;
109
+ }
110
+ // ─── Check ──────────────────────────────────────────────────
111
+ /**
112
+ * Check if a skill is installed on a platform.
113
+ */
114
+ function hasSkill(platform, toolName, skillName) {
115
+ if (!platform.skillsPath)
116
+ return false;
117
+ const skillMd = path.join(platform.skillsPath, toolName, skillName, "SKILL.md");
118
+ try {
119
+ return fs.statSync(skillMd).isFile();
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
125
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,12 @@ export interface ToolPlatformRecord {
11
11
  hookDir?: string;
12
12
  /** List of installed hook script filenames */
13
13
  hookScripts?: string[];
14
+ /** Directory where skills were installed */
15
+ skillsPath?: string;
16
+ /** Skill directory name (e.g., "search") */
17
+ skillName?: string;
18
+ /** Equip version that wrote this record */
19
+ equipVersion?: string;
14
20
  }
15
21
  export interface ToolRecord {
16
22
  package: string;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACnC;AAOD,wBAAgB,WAAW,IAAI,MAAM,CAAsB;AAC3D,wBAAgB,YAAY,IAAI,MAAM,CAAuB;AAI7D,wBAAgB,SAAS,IAAI,UAAU,CAWtC;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAKlD;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAoBzH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAc1E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,kBAAkB;IACjC,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACnC;AAOD,wBAAgB,WAAW,IAAI,MAAM,CAAsB;AAC3D,wBAAgB,YAAY,IAAI,MAAM,CAAuB;AAI7D,wBAAgB,SAAS,IAAI,UAAU,CAWtC;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAElD;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAoBzH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAc1E;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
package/dist/lib/state.js CHANGED
@@ -52,6 +52,7 @@ exports.markUpdated = markUpdated;
52
52
  const fs = __importStar(require("fs"));
53
53
  const path = __importStar(require("path"));
54
54
  const os = __importStar(require("os"));
55
+ const fs_1 = require("./fs");
55
56
  // ─── Paths ──────────────────────────────────────────────────
56
57
  const EQUIP_DIR = path.join(os.homedir(), ".equip");
57
58
  const STATE_PATH = path.join(EQUIP_DIR, "state.json");
@@ -72,10 +73,7 @@ function readState() {
72
73
  }
73
74
  }
74
75
  function writeState(state) {
75
- fs.mkdirSync(EQUIP_DIR, { recursive: true });
76
- const tmp = STATE_PATH + ".tmp";
77
- fs.writeFileSync(tmp, JSON.stringify(state, null, 2) + "\n");
78
- fs.renameSync(tmp, STATE_PATH);
76
+ (0, fs_1.atomicWriteFileSync)(STATE_PATH, JSON.stringify(state, null, 2) + "\n");
79
77
  }
80
78
  // ─── Tool Tracking ──────────────────────────────────────────
81
79
  /**
@@ -94,7 +92,7 @@ function trackInstall(toolName, pkg, platformId, fields) {
94
92
  }
95
93
  // Merge into existing platform record (preserves fields from prior calls)
96
94
  const existing = state.tools[toolName].platforms[platformId] || {};
97
- state.tools[toolName].platforms[platformId] = { ...existing, ...fields };
95
+ state.tools[toolName].platforms[platformId] = { ...existing, ...fields, equipVersion: version };
98
96
  state.tools[toolName].updatedAt = new Date().toISOString();
99
97
  state.tools[toolName].package = pkg;
100
98
  state.equipVersion = version;
@@ -129,12 +127,6 @@ function markUpdated() {
129
127
  }
130
128
  // ─── Helpers ────────────────────────────────────────────────
131
129
  function getEquipVersion() {
132
- try {
133
- const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, "..", "..", "package.json"), "utf-8"));
134
- return pkg.version;
135
- }
136
- catch {
137
- return "unknown";
138
- }
130
+ return (0, fs_1.resolvePackageVersion)(__dirname);
139
131
  }
140
132
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/lib/state.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.6.1",
3
+ "version": "0.9.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",
package/registry.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$comment": "Tool registry for npx @cg3/equip <shorthand>. Submit a PR to add your tool.",
3
+ "$comment": "Tool registry for equip <shorthand>. Submit a PR to add your tool.",
4
4
  "prior": {
5
5
  "package": "@cg3/prior-node",
6
6
  "command": "setup",
7
- "description": "Prior — agent-centric shared knowledge base"
7
+ "description": "Prior — agent-centric shared knowledge base",
8
+ "marker": "prior",
9
+ "hookDir": "~/.prior/hooks",
10
+ "skillName": "search"
8
11
  }
9
12
  }