@parkercto/cli 0.2.1 → 0.2.2

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 (36) hide show
  1. package/dist/src/bin/preuninstall.d.ts +10 -0
  2. package/dist/src/bin/preuninstall.d.ts.map +1 -0
  3. package/dist/src/bin/preuninstall.js +51 -0
  4. package/dist/src/bin/preuninstall.js.map +1 -0
  5. package/dist/src/commands/connect.d.ts.map +1 -1
  6. package/dist/src/commands/connect.js +38 -61
  7. package/dist/src/commands/connect.js.map +1 -1
  8. package/dist/src/constants.d.ts +2 -0
  9. package/dist/src/constants.d.ts.map +1 -1
  10. package/dist/src/constants.js +2 -0
  11. package/dist/src/constants.js.map +1 -1
  12. package/dist/src/lib/auto-update.d.ts +4 -0
  13. package/dist/src/lib/auto-update.d.ts.map +1 -1
  14. package/dist/src/lib/auto-update.js +1 -1
  15. package/dist/src/lib/auto-update.js.map +1 -1
  16. package/dist/src/lib/auto-update_tests.d.ts +2 -0
  17. package/dist/src/lib/auto-update_tests.d.ts.map +1 -0
  18. package/dist/src/lib/auto-update_tests.js +36 -0
  19. package/dist/src/lib/auto-update_tests.js.map +1 -0
  20. package/dist/src/lib/claude-settings.d.ts +38 -0
  21. package/dist/src/lib/claude-settings.d.ts.map +1 -0
  22. package/dist/src/lib/claude-settings.js +66 -0
  23. package/dist/src/lib/claude-settings.js.map +1 -0
  24. package/dist/src/lib/claude-settings_tests.d.ts +2 -0
  25. package/dist/src/lib/claude-settings_tests.d.ts.map +1 -0
  26. package/dist/src/lib/claude-settings_tests.js +117 -0
  27. package/dist/src/lib/claude-settings_tests.js.map +1 -0
  28. package/dist/src/lib/project-registry.d.ts +13 -0
  29. package/dist/src/lib/project-registry.d.ts.map +1 -0
  30. package/dist/src/lib/project-registry.js +115 -0
  31. package/dist/src/lib/project-registry.js.map +1 -0
  32. package/dist/src/lib/project-registry_tests.d.ts +2 -0
  33. package/dist/src/lib/project-registry_tests.d.ts.map +1 -0
  34. package/dist/src/lib/project-registry_tests.js +75 -0
  35. package/dist/src/lib/project-registry_tests.js.map +1 -0
  36. package/package.json +3 -2
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * npm preuninstall lifecycle script.
4
+ *
5
+ * Iterates all projects registered in ~/.parker/projects.json and removes
6
+ * Parker skills and session hooks from each. Runs before `npm uninstall -g`
7
+ * removes the package files.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=preuninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preuninstall.d.ts","sourceRoot":"","sources":["../../../src/bin/preuninstall.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * npm preuninstall lifecycle script.
4
+ *
5
+ * Iterates all projects registered in ~/.parker/projects.json and removes
6
+ * Parker skills and session hooks from each. Runs before `npm uninstall -g`
7
+ * removes the package files.
8
+ */
9
+ import { existsSync, rmSync } from "fs";
10
+ import { join } from "path";
11
+ import { BUNDLED_SKILLS } from "../constants.js";
12
+ import { readClaudeSettings, writeClaudeSettings, removeParkerHooks } from "../lib/claude-settings.js";
13
+ import { getRegisteredProjects } from "../lib/project-registry.js";
14
+ function removeSkillsFromProject(projectRoot) {
15
+ const skillsDir = join(projectRoot, ".claude", "skills");
16
+ for (const skillName of BUNDLED_SKILLS) {
17
+ const skillDir = join(skillsDir, skillName);
18
+ if (existsSync(skillDir)) {
19
+ rmSync(skillDir, { recursive: true });
20
+ }
21
+ }
22
+ }
23
+ function removeHooksFromProject(projectRoot) {
24
+ const settings = readClaudeSettings(projectRoot);
25
+ const removed = removeParkerHooks(settings);
26
+ if (removed > 0) {
27
+ writeClaudeSettings(projectRoot, settings);
28
+ }
29
+ }
30
+ function cleanupAllProjects() {
31
+ const projects = getRegisteredProjects();
32
+ if (projects.length === 0) {
33
+ return;
34
+ }
35
+ console.error("Parker: cleaning up integrations...");
36
+ for (const projectRoot of projects) {
37
+ if (!existsSync(projectRoot)) {
38
+ continue;
39
+ }
40
+ try {
41
+ removeSkillsFromProject(projectRoot);
42
+ removeHooksFromProject(projectRoot);
43
+ console.error(` Cleaned up: ${projectRoot}`);
44
+ }
45
+ catch {
46
+ console.error(` Failed to clean up: ${projectRoot}`);
47
+ }
48
+ }
49
+ }
50
+ cleanupAllProjects();
51
+ //# sourceMappingURL=preuninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preuninstall.js","sourceRoot":"","sources":["../../../src/bin/preuninstall.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,SAAS,uBAAuB,CAAC,WAAmB;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,WAAmB;IACjD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;IACzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAErD,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,uBAAuB,CAAC,WAAW,CAAC,CAAC;YACrC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC;AAED,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyMpC;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2D9D;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAgChE;AAED,eAAO,MAAM,cAAc,SAYvB,CAAC;AAEL,eAAO,MAAM,iBAAiB,SAY1B,CAAC"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+JpC;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8D9D;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAmChE;AAED,eAAO,MAAM,cAAc,SAYvB,CAAC;AAEL,eAAO,MAAM,iBAAiB,SAY1B,CAAC"}
@@ -4,7 +4,9 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, rmSync
4
4
  import { join, resolve, dirname } from "path";
5
5
  import { fileURLToPath } from "url";
6
6
  import { getGitRoot } from "../lib/local-git.js";
7
- import { HOOK_SESSION_START_COMMAND, HOOK_EVENT_COMMAND, HOOK_CONTEXT_COMMAND, HOOK_SESSION_END_COMMAND, PARKER_HOOK_PREFIX, } from "../constants.js";
7
+ import { registerProject, unregisterProject } from "../lib/project-registry.js";
8
+ import { readClaudeSettings, writeClaudeSettings, removeParkerHooks, } from "../lib/claude-settings.js";
9
+ import { HOOK_SESSION_START_COMMAND, HOOK_EVENT_COMMAND, HOOK_CONTEXT_COMMAND, HOOK_SESSION_END_COMMAND, BUNDLED_SKILLS, } from "../constants.js";
8
10
  const __filename = fileURLToPath(import.meta.url);
9
11
  const __dirname = dirname(__filename);
10
12
  /** Path to the bundled skill templates relative to this file. */
@@ -14,10 +16,6 @@ function getSkillsTemplateDir() {
14
16
  const cliRoot = resolve(__dirname, "../..");
15
17
  return join(cliRoot, "src", "skills");
16
18
  }
17
- /** Names of bundled skill directories to install. */
18
- const BUNDLED_SKILLS = [
19
- "prp",
20
- ];
21
19
  const SUPPORTED_TARGETS = ["claude"];
22
20
  function parseSkillFrontmatter(content) {
23
21
  const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
@@ -51,28 +49,36 @@ function copyDirSync(src, dest) {
51
49
  }
52
50
  /**
53
51
  * Builds the Parker session hooks configuration for .claude/settings.json.
52
+ *
53
+ * Claude Code hooks use a matcher + hooks[] structure:
54
+ * { "matcher": "<tool_name|...>", "hooks": [{ "type": "command", "command": "..." }] }
55
+ * An empty matcher string matches all tools.
54
56
  */
55
57
  function buildParkerHooks() {
56
58
  return {
57
59
  SessionStart: [
58
- { type: "command", command: HOOK_SESSION_START_COMMAND, timeout: 5 },
60
+ {
61
+ matcher: "",
62
+ hooks: [{ type: "command", command: HOOK_SESSION_START_COMMAND, timeout: 5 }],
63
+ },
59
64
  ],
60
65
  PostToolUse: [
61
66
  {
62
- type: "command",
63
- command: HOOK_EVENT_COMMAND,
64
- timeout: 3,
67
+ matcher: "",
68
+ hooks: [{ type: "command", command: HOOK_EVENT_COMMAND, timeout: 3 }],
65
69
  },
66
70
  ],
67
71
  PreToolUse: [
68
72
  {
69
- type: "command",
70
- command: HOOK_CONTEXT_COMMAND,
71
- timeout: 3,
73
+ matcher: "",
74
+ hooks: [{ type: "command", command: HOOK_CONTEXT_COMMAND, timeout: 3 }],
72
75
  },
73
76
  ],
74
77
  Stop: [
75
- { type: "command", command: HOOK_SESSION_END_COMMAND, timeout: 5 },
78
+ {
79
+ matcher: "",
80
+ hooks: [{ type: "command", command: HOOK_SESSION_END_COMMAND, timeout: 5 }],
81
+ },
76
82
  ],
77
83
  };
78
84
  }
@@ -81,71 +87,38 @@ function buildParkerHooks() {
81
87
  * Merges with existing settings rather than overwriting.
82
88
  */
83
89
  function installClaudeHooks(projectRoot) {
84
- const settingsPath = join(projectRoot, ".claude", "settings.json");
85
- let settings = {};
86
- if (existsSync(settingsPath)) {
87
- try {
88
- settings = JSON.parse(readFileSync(settingsPath, "utf-8"));
89
- }
90
- catch {
91
- // Malformed JSON — start fresh but warn
92
- console.warn(chalk.yellow(" Warning: existing .claude/settings.json was malformed, recreating"));
93
- }
94
- }
90
+ const settings = readClaudeSettings(projectRoot);
95
91
  const parkerHooks = buildParkerHooks();
96
92
  if (!settings.hooks) {
97
93
  settings.hooks = {};
98
94
  }
99
95
  // Merge Parker hooks into each event, avoiding duplicates
100
- for (const [event, hooks] of Object.entries(parkerHooks)) {
96
+ for (const [event, groups] of Object.entries(parkerHooks)) {
101
97
  if (!settings.hooks[event]) {
102
98
  settings.hooks[event] = [];
103
99
  }
104
- for (const hook of hooks) {
105
- const alreadyInstalled = settings.hooks[event].some((existing) => existing.command === hook.command);
106
- if (!alreadyInstalled) {
107
- settings.hooks[event].push(hook);
100
+ for (const group of groups) {
101
+ for (const hook of group.hooks) {
102
+ const alreadyInstalled = settings.hooks[event].some((existingGroup) => existingGroup.hooks.some((h) => h.command === hook.command));
103
+ if (!alreadyInstalled) {
104
+ settings.hooks[event].push({
105
+ matcher: group.matcher,
106
+ hooks: [hook],
107
+ });
108
+ }
108
109
  }
109
110
  }
110
111
  }
111
- mkdirSync(join(projectRoot, ".claude"), { recursive: true });
112
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n");
112
+ writeClaudeSettings(projectRoot, settings);
113
113
  }
114
114
  /**
115
115
  * Removes Parker session hooks from the project's .claude/settings.json.
116
116
  */
117
117
  function removeClaudeHooks(projectRoot) {
118
- const settingsPath = join(projectRoot, ".claude", "settings.json");
119
- if (!existsSync(settingsPath)) {
120
- return;
121
- }
122
- let settings;
123
- try {
124
- settings = JSON.parse(readFileSync(settingsPath, "utf-8"));
125
- }
126
- catch {
127
- console.warn(chalk.yellow(" Warning: .claude/settings.json is malformed, skipping hook removal"));
128
- return;
129
- }
130
- if (!settings.hooks) {
131
- return;
132
- }
133
- let removedCount = 0;
134
- for (const [event, hooks] of Object.entries(settings.hooks)) {
135
- const filtered = hooks.filter((h) => !h.command.startsWith(PARKER_HOOK_PREFIX));
136
- removedCount += hooks.length - filtered.length;
137
- if (filtered.length === 0) {
138
- delete settings.hooks[event];
139
- }
140
- else {
141
- settings.hooks[event] = filtered;
142
- }
143
- }
144
- if (Object.keys(settings.hooks).length === 0) {
145
- delete settings.hooks;
146
- }
147
- writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n");
118
+ const settings = readClaudeSettings(projectRoot);
119
+ const removedCount = removeParkerHooks(settings);
148
120
  if (removedCount > 0) {
121
+ writeClaudeSettings(projectRoot, settings);
149
122
  console.log(chalk.red(` - Removed ${removedCount} Parker hook(s) from .claude/settings.json`));
150
123
  }
151
124
  }
@@ -187,6 +160,8 @@ export async function installClaudeIntegration() {
187
160
  // Install session hooks into .claude/settings.json
188
161
  installClaudeHooks(projectRoot);
189
162
  console.log(chalk.green(" + .claude/settings.json (session hooks)"));
163
+ // Track this project so preuninstall can clean up
164
+ registerProject(projectRoot);
190
165
  console.log("");
191
166
  console.log(chalk.bold("Parker enabled for Claude Code."));
192
167
  console.log(` ${skillsInstalled} skill(s) installed`);
@@ -227,6 +202,8 @@ export async function uninstallClaudeIntegration() {
227
202
  }
228
203
  // Remove session hooks from .claude/settings.json
229
204
  removeClaudeHooks(projectRoot);
205
+ // Remove from project registry
206
+ unregisterProject(projectRoot);
230
207
  if (removed === 0) {
231
208
  console.log(chalk.yellow("No Parker integration found to remove."));
232
209
  }
@@ -1 +1 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export declare const HOOK_CONTEXT_COMMAND = "parker hook context";
21
21
  export declare const HOOK_SESSION_END_COMMAND = "parker hook session-end";
22
22
  /** Prefix used to identify Parker-owned hooks when filtering .claude/settings.json. */
23
23
  export declare const PARKER_HOOK_PREFIX = "parker ";
24
+ /** Names of bundled skill directories to install/remove. */
25
+ export declare const BUNDLED_SKILLS: string[];
24
26
  /** URL where users sign up and create teams. */
25
27
  export declare const SIGNUP_URL = "https://app.parkercto.com";
26
28
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,qEAAqE;AACrE,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,QAAqC,CAAC;AAEpE,qEAAqE;AACrE,eAAO,MAAM,cAAc,QAA4C,CAAC;AAExE,+CAA+C;AAC/C,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,oCAAoC;AACpC,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AACtE,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,gDAAgD;AAChD,eAAO,MAAM,UAAU,8BAA8B,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAGA,qEAAqE;AACrE,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,QAAqC,CAAC;AAEpE,qEAAqE;AACrE,eAAO,MAAM,cAAc,QAA4C,CAAC;AAExE,+CAA+C;AAC/C,eAAO,MAAM,eAAe,YAAY,CAAC;AAEzC,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD,oCAAoC;AACpC,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAE/C,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AACtE,eAAO,MAAM,kBAAkB,sBAAsB,CAAC;AACtD,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,4BAA4B,CAAC;AAElE,uFAAuF;AACvF,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,4DAA4D;AAC5D,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,gDAAgD;AAChD,eAAO,MAAM,UAAU,8BAA8B,CAAC"}
@@ -23,6 +23,8 @@ export const HOOK_CONTEXT_COMMAND = "parker hook context";
23
23
  export const HOOK_SESSION_END_COMMAND = "parker hook session-end";
24
24
  /** Prefix used to identify Parker-owned hooks when filtering .claude/settings.json. */
25
25
  export const PARKER_HOOK_PREFIX = "parker ";
26
+ /** Names of bundled skill directories to install/remove. */
27
+ export const BUNDLED_SKILLS = ["prp"];
26
28
  /** URL where users sign up and create teams. */
27
29
  export const SIGNUP_URL = "https://app.parkercto.com";
28
30
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAExE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,2BAA2B,CAAC;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAElE,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,2BAA2B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,qEAAqE;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,2BAA2B,CAAC;AAE3D,4EAA4E;AAC5E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;AAExE,+CAA+C;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,gEAAgE;AAChE,MAAM,CAAC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAErD,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAE7C,4EAA4E;AAC5E,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,kEAAkE;AAClE,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,2BAA2B,CAAC;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAElE,uFAAuF;AACvF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAE5C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtC,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,2BAA2B,CAAC"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Returns true if `candidate` is strictly newer than `current` using semver comparison.
3
+ */
4
+ export declare function isNewerVersion(candidate: string, current: string): boolean;
1
5
  /**
2
6
  * Checks for a newer CLI version and, if found, installs it and re-execs
3
7
  * the current command transparently. Uses the update-notifier cache so this
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../../src/lib/auto-update.ts"],"names":[],"mappings":"AAoFA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAiCzC"}
1
+ {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../../src/lib/auto-update.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ1E;AAmDD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAiCzC"}
@@ -15,7 +15,7 @@ const UPDATE_CHECK_INTERVAL_MS = 6 * 60 * 60 * 1000; // 6 hours
15
15
  /**
16
16
  * Returns true if `candidate` is strictly newer than `current` using semver comparison.
17
17
  */
18
- function isNewerVersion(candidate, current) {
18
+ export function isNewerVersion(candidate, current) {
19
19
  const parse = (v) => v.split(".").map(Number);
20
20
  const [cMajor, cMinor = 0, cPatch = 0] = parse(candidate);
21
21
  const [major, minor = 0, patch = 0] = parse(current);
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../../src/lib/auto-update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auto-update.js","sourceRoot":"","sources":["../../../src/lib/auto-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auto-update_tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update_tests.d.ts","sourceRoot":"","sources":["../../../src/lib/auto-update_tests.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { isNewerVersion } from "./auto-update.js";
3
+ describe("isNewerVersion", () => {
4
+ it("returns true when candidate major is higher", () => {
5
+ expect(isNewerVersion("2.0.0", "1.0.0")).toBe(true);
6
+ });
7
+ it("returns true when candidate minor is higher", () => {
8
+ expect(isNewerVersion("1.1.0", "1.0.0")).toBe(true);
9
+ });
10
+ it("returns true when candidate patch is higher", () => {
11
+ expect(isNewerVersion("1.0.1", "1.0.0")).toBe(true);
12
+ });
13
+ it("returns false when versions are equal", () => {
14
+ expect(isNewerVersion("1.0.0", "1.0.0")).toBe(false);
15
+ });
16
+ it("returns false when candidate is older", () => {
17
+ expect(isNewerVersion("1.0.0", "1.0.1")).toBe(false);
18
+ expect(isNewerVersion("1.0.0", "1.1.0")).toBe(false);
19
+ expect(isNewerVersion("1.0.0", "2.0.0")).toBe(false);
20
+ });
21
+ it("handles two-segment versions", () => {
22
+ expect(isNewerVersion("1.1", "1.0")).toBe(true);
23
+ expect(isNewerVersion("1.0", "1.1")).toBe(false);
24
+ });
25
+ it("handles higher major but lower minor", () => {
26
+ expect(isNewerVersion("2.0.0", "1.9.9")).toBe(true);
27
+ });
28
+ it("handles higher minor but lower patch", () => {
29
+ expect(isNewerVersion("1.2.0", "1.1.9")).toBe(true);
30
+ });
31
+ it("returns false for NaN segments (pre-release tags)", () => {
32
+ // "1.0.0-beta.1" → [1, 0, NaN] — NaN comparisons return false
33
+ expect(isNewerVersion("1.0.0-beta.1", "1.0.0")).toBe(false);
34
+ });
35
+ });
36
+ //# sourceMappingURL=auto-update_tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-update_tests.js","sourceRoot":"","sources":["../../../src/lib/auto-update_tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,8DAA8D;QAC9D,MAAM,CAAC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared types and helpers for reading, writing, and filtering
3
+ * Claude Code hook configuration in .claude/settings.json.
4
+ *
5
+ * Claude Code hooks use a matcher + hooks[] structure per event:
6
+ * { "matcher": "<tool_name|...>", "hooks": [{ "type": "command", "command": "..." }] }
7
+ * An empty matcher string matches all tools.
8
+ */
9
+ export interface ClaudeHookCommand {
10
+ type: string;
11
+ command: string;
12
+ timeout?: number;
13
+ }
14
+ export interface ClaudeHookGroup {
15
+ matcher: string;
16
+ hooks: ClaudeHookCommand[];
17
+ }
18
+ export type ClaudeHooksMap = Record<string, ClaudeHookGroup[]>;
19
+ export interface ClaudeSettings {
20
+ hooks?: ClaudeHooksMap;
21
+ [key: string]: unknown;
22
+ }
23
+ /**
24
+ * Reads and parses .claude/settings.json from the given project root.
25
+ * Returns an empty object if the file is missing or malformed.
26
+ */
27
+ export declare function readClaudeSettings(projectRoot: string): ClaudeSettings;
28
+ /**
29
+ * Writes a ClaudeSettings object to .claude/settings.json, creating
30
+ * the .claude directory if it doesn't exist.
31
+ */
32
+ export declare function writeClaudeSettings(projectRoot: string, settings: ClaudeSettings): void;
33
+ /**
34
+ * Removes all Parker-owned hook groups from a ClaudeSettings object (in place).
35
+ * Returns the number of groups removed.
36
+ */
37
+ export declare function removeParkerHooks(settings: ClaudeSettings): number;
38
+ //# sourceMappingURL=claude-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings.d.ts","sourceRoot":"","sources":["../../../src/lib/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAYtE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI,CAIvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CA4BlE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Shared types and helpers for reading, writing, and filtering
3
+ * Claude Code hook configuration in .claude/settings.json.
4
+ *
5
+ * Claude Code hooks use a matcher + hooks[] structure per event:
6
+ * { "matcher": "<tool_name|...>", "hooks": [{ "type": "command", "command": "..." }] }
7
+ * An empty matcher string matches all tools.
8
+ */
9
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
10
+ import { join } from "path";
11
+ import { PARKER_HOOK_PREFIX } from "../constants.js";
12
+ /**
13
+ * Reads and parses .claude/settings.json from the given project root.
14
+ * Returns an empty object if the file is missing or malformed.
15
+ */
16
+ export function readClaudeSettings(projectRoot) {
17
+ const settingsPath = join(projectRoot, ".claude", "settings.json");
18
+ if (!existsSync(settingsPath)) {
19
+ return {};
20
+ }
21
+ try {
22
+ return JSON.parse(readFileSync(settingsPath, "utf-8"));
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ /**
29
+ * Writes a ClaudeSettings object to .claude/settings.json, creating
30
+ * the .claude directory if it doesn't exist.
31
+ */
32
+ export function writeClaudeSettings(projectRoot, settings) {
33
+ mkdirSync(join(projectRoot, ".claude"), { recursive: true });
34
+ const settingsPath = join(projectRoot, ".claude", "settings.json");
35
+ writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n");
36
+ }
37
+ /**
38
+ * Removes all Parker-owned hook groups from a ClaudeSettings object (in place).
39
+ * Returns the number of groups removed.
40
+ */
41
+ export function removeParkerHooks(settings) {
42
+ if (!settings.hooks) {
43
+ return 0;
44
+ }
45
+ let removedCount = 0;
46
+ for (const [event, groups] of Object.entries(settings.hooks)) {
47
+ const filtered = groups.filter((group) => {
48
+ const isParker = group.hooks.some((h) => h.command.startsWith(PARKER_HOOK_PREFIX));
49
+ if (isParker) {
50
+ removedCount++;
51
+ }
52
+ return !isParker;
53
+ });
54
+ if (filtered.length === 0) {
55
+ delete settings.hooks[event];
56
+ }
57
+ else {
58
+ settings.hooks[event] = filtered;
59
+ }
60
+ }
61
+ if (Object.keys(settings.hooks).length === 0) {
62
+ delete settings.hooks;
63
+ }
64
+ return removedCount;
65
+ }
66
+ //# sourceMappingURL=claude-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../../src/lib/claude-settings.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAoBrD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAEnE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAmB,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,QAAwB;IAC/E,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACnE,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAwB;IACxD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACnF,IAAI,QAAQ,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;YACjB,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude-settings_tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings_tests.d.ts","sourceRoot":"","sources":["../../../src/lib/claude-settings_tests.ts"],"names":[],"mappings":""}
@@ -0,0 +1,117 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { mkdirSync, writeFileSync, rmSync, readFileSync } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { readClaudeSettings, writeClaudeSettings, removeParkerHooks, } from "./claude-settings.js";
6
+ describe("claude-settings", () => {
7
+ let projectRoot;
8
+ beforeEach(() => {
9
+ projectRoot = join(tmpdir(), `parker-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
10
+ mkdirSync(join(projectRoot, ".claude"), { recursive: true });
11
+ });
12
+ afterEach(() => {
13
+ rmSync(projectRoot, { recursive: true, force: true });
14
+ });
15
+ describe("readClaudeSettings", () => {
16
+ it("returns empty object when settings file does not exist", () => {
17
+ const emptyRoot = join(tmpdir(), `parker-empty-${Date.now()}`);
18
+ const settings = readClaudeSettings(emptyRoot);
19
+ expect(settings).toEqual({});
20
+ });
21
+ it("returns empty object when settings file is malformed JSON", () => {
22
+ writeFileSync(join(projectRoot, ".claude", "settings.json"), "not json{");
23
+ const settings = readClaudeSettings(projectRoot);
24
+ expect(settings).toEqual({});
25
+ });
26
+ it("reads valid settings", () => {
27
+ const expected = { hooks: {}, customField: "value" };
28
+ writeFileSync(join(projectRoot, ".claude", "settings.json"), JSON.stringify(expected));
29
+ const settings = readClaudeSettings(projectRoot);
30
+ expect(settings).toEqual(expected);
31
+ });
32
+ });
33
+ describe("writeClaudeSettings", () => {
34
+ it("creates .claude directory if needed", () => {
35
+ const freshRoot = join(tmpdir(), `parker-fresh-${Date.now()}`);
36
+ mkdirSync(freshRoot, { recursive: true });
37
+ writeClaudeSettings(freshRoot, { hooks: {} });
38
+ const written = readFileSync(join(freshRoot, ".claude", "settings.json"), "utf-8");
39
+ expect(JSON.parse(written)).toEqual({ hooks: {} });
40
+ rmSync(freshRoot, { recursive: true, force: true });
41
+ });
42
+ it("pretty-prints with trailing newline", () => {
43
+ writeClaudeSettings(projectRoot, { foo: "bar" });
44
+ const raw = readFileSync(join(projectRoot, ".claude", "settings.json"), "utf-8");
45
+ expect(raw).toBe('{\n "foo": "bar"\n}\n');
46
+ });
47
+ });
48
+ describe("removeParkerHooks", () => {
49
+ it("returns 0 when there are no hooks", () => {
50
+ const settings = {};
51
+ expect(removeParkerHooks(settings)).toBe(0);
52
+ expect(settings).toEqual({});
53
+ });
54
+ it("removes parker hook groups and leaves others intact", () => {
55
+ const settings = {
56
+ hooks: {
57
+ SessionStart: [
58
+ {
59
+ matcher: "",
60
+ hooks: [{ type: "command", command: "parker hook session-start", timeout: 5 }],
61
+ },
62
+ {
63
+ matcher: "",
64
+ hooks: [{ type: "command", command: "some-other-tool start" }],
65
+ },
66
+ ],
67
+ },
68
+ };
69
+ const removed = removeParkerHooks(settings);
70
+ expect(removed).toBe(1);
71
+ expect(settings.hooks["SessionStart"]).toHaveLength(1);
72
+ expect(settings.hooks["SessionStart"][0].hooks[0].command).toBe("some-other-tool start");
73
+ });
74
+ it("deletes the event key when all groups are removed", () => {
75
+ const settings = {
76
+ hooks: {
77
+ SessionStart: [
78
+ {
79
+ matcher: "",
80
+ hooks: [{ type: "command", command: "parker hook session-start" }],
81
+ },
82
+ ],
83
+ },
84
+ };
85
+ removeParkerHooks(settings);
86
+ expect(settings.hooks).toBeUndefined();
87
+ });
88
+ it("deletes hooks key when all events are empty", () => {
89
+ const settings = {
90
+ hooks: {
91
+ SessionStart: [
92
+ { matcher: "", hooks: [{ type: "command", command: "parker hook session-start" }] },
93
+ ],
94
+ Stop: [
95
+ { matcher: "", hooks: [{ type: "command", command: "parker hook session-end" }] },
96
+ ],
97
+ },
98
+ };
99
+ const removed = removeParkerHooks(settings);
100
+ expect(removed).toBe(2);
101
+ expect(settings.hooks).toBeUndefined();
102
+ });
103
+ it("preserves non-parker events entirely", () => {
104
+ const settings = {
105
+ hooks: {
106
+ PreToolUse: [
107
+ { matcher: "Bash", hooks: [{ type: "command", command: "lint-check" }] },
108
+ ],
109
+ },
110
+ };
111
+ const removed = removeParkerHooks(settings);
112
+ expect(removed).toBe(0);
113
+ expect(settings.hooks["PreToolUse"]).toHaveLength(1);
114
+ });
115
+ });
116
+ });
117
+ //# sourceMappingURL=claude-settings_tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-settings_tests.js","sourceRoot":"","sources":["../../../src/lib/claude-settings_tests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Registers a project root so it can be cleaned up on global uninstall.
3
+ */
4
+ export declare function registerProject(projectRoot: string): void;
5
+ /**
6
+ * Removes a project root from the registry.
7
+ */
8
+ export declare function unregisterProject(projectRoot: string): void;
9
+ /**
10
+ * Returns all registered project roots.
11
+ */
12
+ export declare function getRegisteredProjects(): string[];
13
+ //# sourceMappingURL=project-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry.d.ts","sourceRoot":"","sources":["../../../src/lib/project-registry.ts"],"names":[],"mappings":"AA6FA;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAQzD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAM3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
@@ -0,0 +1,115 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, openSync, closeSync, unlinkSync, constants as fsConstants } from "fs";
2
+ import { PARKER_GLOBAL_DIR } from "../constants.js";
3
+ import { join } from "path";
4
+ /**
5
+ * Returns the path to the file that tracks which projects have Parker enabled.
6
+ * Computed lazily so that test mocks for PARKER_GLOBAL_DIR take effect.
7
+ */
8
+ function getRegistryPath() {
9
+ return join(PARKER_GLOBAL_DIR, "projects.json");
10
+ }
11
+ function getLockPath() {
12
+ return join(PARKER_GLOBAL_DIR, "projects.lock");
13
+ }
14
+ const LOCK_RETRY_INTERVAL_MS = 50;
15
+ const LOCK_MAX_RETRIES = 20; // 1 second total
16
+ /**
17
+ * Acquires a file-system lock via O_EXCL (atomic create-or-fail).
18
+ * Returns true if acquired, false if timed out.
19
+ */
20
+ function acquireLock() {
21
+ mkdirSync(PARKER_GLOBAL_DIR, { recursive: true });
22
+ const lockPath = getLockPath();
23
+ for (let attempt = 0; attempt < LOCK_MAX_RETRIES; attempt++) {
24
+ try {
25
+ const fd = openSync(lockPath, fsConstants.O_CREAT | fsConstants.O_EXCL | fsConstants.O_WRONLY);
26
+ closeSync(fd);
27
+ return true;
28
+ }
29
+ catch (err) {
30
+ if (err.code !== "EEXIST") {
31
+ throw err;
32
+ }
33
+ // Lock held by another process — spin briefly
34
+ const start = Date.now();
35
+ while (Date.now() - start < LOCK_RETRY_INTERVAL_MS) {
36
+ // busy-wait (sync context, no async available)
37
+ }
38
+ }
39
+ }
40
+ return false;
41
+ }
42
+ function releaseLock() {
43
+ try {
44
+ unlinkSync(getLockPath());
45
+ }
46
+ catch {
47
+ // Lock already gone — harmless
48
+ }
49
+ }
50
+ /**
51
+ * Executes `fn` while holding an exclusive file lock on the registry.
52
+ * If the lock cannot be acquired within ~1 second, proceeds without it
53
+ * (best-effort — avoids blocking the CLI indefinitely).
54
+ */
55
+ function withRegistryLock(fn) {
56
+ const locked = acquireLock();
57
+ try {
58
+ return fn();
59
+ }
60
+ finally {
61
+ if (locked) {
62
+ releaseLock();
63
+ }
64
+ }
65
+ }
66
+ function readRegistry() {
67
+ const registryPath = getRegistryPath();
68
+ if (!existsSync(registryPath)) {
69
+ return [];
70
+ }
71
+ try {
72
+ const raw = readFileSync(registryPath, "utf-8");
73
+ const parsed = JSON.parse(raw);
74
+ if (!Array.isArray(parsed)) {
75
+ return [];
76
+ }
77
+ return parsed.filter((entry) => typeof entry === "string");
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ }
83
+ function writeRegistry(projects) {
84
+ mkdirSync(PARKER_GLOBAL_DIR, { recursive: true });
85
+ writeFileSync(getRegistryPath(), JSON.stringify(projects, null, 2) + "\n");
86
+ }
87
+ /**
88
+ * Registers a project root so it can be cleaned up on global uninstall.
89
+ */
90
+ export function registerProject(projectRoot) {
91
+ withRegistryLock(() => {
92
+ const projects = readRegistry();
93
+ if (!projects.includes(projectRoot)) {
94
+ projects.push(projectRoot);
95
+ writeRegistry(projects);
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * Removes a project root from the registry.
101
+ */
102
+ export function unregisterProject(projectRoot) {
103
+ withRegistryLock(() => {
104
+ const projects = readRegistry();
105
+ const filtered = projects.filter((p) => p !== projectRoot);
106
+ writeRegistry(filtered);
107
+ });
108
+ }
109
+ /**
110
+ * Returns all registered project roots.
111
+ */
112
+ export function getRegisteredProjects() {
113
+ return readRegistry();
114
+ }
115
+ //# sourceMappingURL=project-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry.js","sourceRoot":"","sources":["../../../src/lib/project-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=project-registry_tests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry_tests.d.ts","sourceRoot":"","sources":["../../../src/lib/project-registry_tests.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
+ import { mkdirSync, rmSync, writeFileSync, existsSync } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ /**
6
+ * project-registry reads PARKER_GLOBAL_DIR from constants, which resolves to ~/.parker.
7
+ * To test in isolation we mock the constant so the registry writes to a temp directory.
8
+ */
9
+ import { vi } from "vitest";
10
+ let testDir;
11
+ vi.mock("../constants.js", () => {
12
+ // Lazy — testDir is set in beforeEach before any registry function runs
13
+ return {
14
+ get PARKER_GLOBAL_DIR() {
15
+ return testDir;
16
+ },
17
+ };
18
+ });
19
+ // Import after mock is set up
20
+ const { registerProject, unregisterProject, getRegisteredProjects } = await import("./project-registry.js");
21
+ describe("project-registry", () => {
22
+ beforeEach(() => {
23
+ testDir = join(tmpdir(), `parker-reg-${Date.now()}-${Math.random().toString(36).slice(2)}`);
24
+ mkdirSync(testDir, { recursive: true });
25
+ });
26
+ afterEach(() => {
27
+ rmSync(testDir, { recursive: true, force: true });
28
+ });
29
+ it("returns empty list when no registry exists", () => {
30
+ expect(getRegisteredProjects()).toEqual([]);
31
+ });
32
+ it("registers a project", () => {
33
+ registerProject("/fake/project-a");
34
+ expect(getRegisteredProjects()).toEqual(["/fake/project-a"]);
35
+ });
36
+ it("does not duplicate an already-registered project", () => {
37
+ registerProject("/fake/project-a");
38
+ registerProject("/fake/project-a");
39
+ expect(getRegisteredProjects()).toEqual(["/fake/project-a"]);
40
+ });
41
+ it("registers multiple projects", () => {
42
+ registerProject("/fake/project-a");
43
+ registerProject("/fake/project-b");
44
+ expect(getRegisteredProjects()).toEqual(["/fake/project-a", "/fake/project-b"]);
45
+ });
46
+ it("unregisters a project", () => {
47
+ registerProject("/fake/project-a");
48
+ registerProject("/fake/project-b");
49
+ unregisterProject("/fake/project-a");
50
+ expect(getRegisteredProjects()).toEqual(["/fake/project-b"]);
51
+ });
52
+ it("unregister is a no-op for unknown project", () => {
53
+ registerProject("/fake/project-a");
54
+ unregisterProject("/fake/nonexistent");
55
+ expect(getRegisteredProjects()).toEqual(["/fake/project-a"]);
56
+ });
57
+ it("handles corrupted registry file gracefully", () => {
58
+ writeFileSync(join(testDir, "projects.json"), "not json{");
59
+ expect(getRegisteredProjects()).toEqual([]);
60
+ });
61
+ it("handles registry file with non-array content", () => {
62
+ writeFileSync(join(testDir, "projects.json"), '{"not": "an array"}');
63
+ expect(getRegisteredProjects()).toEqual([]);
64
+ });
65
+ it("filters out non-string entries", () => {
66
+ writeFileSync(join(testDir, "projects.json"), '["/valid", 42, null, true]');
67
+ expect(getRegisteredProjects()).toEqual(["/valid"]);
68
+ });
69
+ it("creates the global dir if it does not exist", () => {
70
+ rmSync(testDir, { recursive: true, force: true });
71
+ registerProject("/fake/project-a");
72
+ expect(existsSync(join(testDir, "projects.json"))).toBe(true);
73
+ });
74
+ });
75
+ //# sourceMappingURL=project-registry_tests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry_tests.js","sourceRoot":"","sources":["../../../src/lib/project-registry_tests.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@parkercto/cli",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist",
@@ -28,6 +28,7 @@
28
28
  "typecheck": "tsc --noEmit",
29
29
  "clean": "rm -rf dist",
30
30
  "test": "vitest run",
31
- "test:watch": "vitest"
31
+ "test:watch": "vitest",
32
+ "preuninstall": "node dist/bin/preuninstall.js"
32
33
  }
33
34
  }