@rpamis/comet 0.3.6 → 0.3.8

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 (95) hide show
  1. package/README.md +575 -443
  2. package/assets/manifest.json +41 -24
  3. package/assets/skills/comet/SKILL.md +282 -301
  4. package/assets/skills/comet/reference/auto-transition.md +27 -0
  5. package/assets/skills/comet/reference/comet-yaml-fields.md +68 -0
  6. package/assets/skills/comet/reference/context-recovery.md +35 -0
  7. package/assets/skills/comet/reference/debug-gate.md +17 -0
  8. package/assets/skills/comet/reference/decision-point.md +20 -0
  9. package/assets/skills/comet/reference/dirty-worktree.md +1 -0
  10. package/assets/skills/comet/reference/file-structure.md +28 -0
  11. package/assets/skills/comet/reference/subagent-dispatch.md +113 -0
  12. package/assets/skills/comet/rules/comet-phase-guard.en.md +99 -0
  13. package/assets/skills/comet/rules/comet-phase-guard.md +99 -0
  14. package/assets/skills/comet/scripts/comet-archive.sh +71 -55
  15. package/assets/skills/comet/scripts/comet-guard.sh +174 -18
  16. package/assets/skills/comet/scripts/comet-handoff.sh +133 -6
  17. package/assets/skills/comet/scripts/comet-hook-guard.sh +260 -0
  18. package/assets/skills/comet/scripts/comet-state.sh +362 -25
  19. package/assets/skills/comet/scripts/comet-yaml-validate.sh +24 -1
  20. package/assets/skills/comet-archive/SKILL.md +100 -73
  21. package/assets/skills/comet-build/SKILL.md +304 -221
  22. package/assets/skills/comet-design/SKILL.md +263 -166
  23. package/assets/skills/comet-hotfix/SKILL.md +204 -169
  24. package/assets/skills/comet-open/SKILL.md +203 -113
  25. package/assets/skills/comet-tweak/SKILL.md +180 -154
  26. package/assets/skills/comet-verify/SKILL.md +234 -201
  27. package/assets/skills-zh/comet/SKILL.md +269 -301
  28. package/assets/skills-zh/comet/reference/auto-transition.md +27 -0
  29. package/assets/skills-zh/comet/reference/comet-yaml-fields.md +68 -0
  30. package/assets/skills-zh/comet/reference/context-recovery.md +35 -0
  31. package/assets/skills-zh/comet/reference/debug-gate.md +17 -0
  32. package/assets/skills-zh/comet/reference/decision-point.md +20 -0
  33. package/assets/skills-zh/comet/reference/dirty-worktree.md +2 -1
  34. package/assets/skills-zh/comet/reference/file-structure.md +28 -0
  35. package/assets/skills-zh/comet/reference/subagent-dispatch.md +113 -0
  36. package/assets/skills-zh/comet-archive/SKILL.md +100 -73
  37. package/assets/skills-zh/comet-build/SKILL.md +304 -221
  38. package/assets/skills-zh/comet-design/SKILL.md +264 -166
  39. package/assets/skills-zh/comet-hotfix/SKILL.md +200 -169
  40. package/assets/skills-zh/comet-open/SKILL.md +203 -113
  41. package/assets/skills-zh/comet-tweak/SKILL.md +176 -154
  42. package/assets/skills-zh/comet-verify/SKILL.md +232 -201
  43. package/dist/cli/index.js +19 -0
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/commands/doctor.d.ts.map +1 -1
  46. package/dist/commands/doctor.js +22 -0
  47. package/dist/commands/doctor.js.map +1 -1
  48. package/dist/commands/init.d.ts +5 -1
  49. package/dist/commands/init.d.ts.map +1 -1
  50. package/dist/commands/init.js +64 -9
  51. package/dist/commands/init.js.map +1 -1
  52. package/dist/commands/uninstall.d.ts +9 -0
  53. package/dist/commands/uninstall.d.ts.map +1 -0
  54. package/dist/commands/uninstall.js +113 -0
  55. package/dist/commands/uninstall.js.map +1 -0
  56. package/dist/commands/update.d.ts +1 -1
  57. package/dist/commands/update.d.ts.map +1 -1
  58. package/dist/commands/update.js +120 -32
  59. package/dist/commands/update.js.map +1 -1
  60. package/dist/core/codegraph.d.ts +4 -0
  61. package/dist/core/codegraph.d.ts.map +1 -0
  62. package/dist/core/codegraph.js +63 -0
  63. package/dist/core/codegraph.js.map +1 -0
  64. package/dist/core/detect.d.ts +8 -1
  65. package/dist/core/detect.d.ts.map +1 -1
  66. package/dist/core/detect.js +41 -2
  67. package/dist/core/detect.js.map +1 -1
  68. package/dist/core/openspec.d.ts +1 -1
  69. package/dist/core/openspec.d.ts.map +1 -1
  70. package/dist/core/openspec.js +40 -17
  71. package/dist/core/openspec.js.map +1 -1
  72. package/dist/core/platforms.d.ts +10 -0
  73. package/dist/core/platforms.d.ts.map +1 -1
  74. package/dist/core/platforms.js +177 -16
  75. package/dist/core/platforms.js.map +1 -1
  76. package/dist/core/skills.d.ts +36 -1
  77. package/dist/core/skills.d.ts.map +1 -1
  78. package/dist/core/skills.js +451 -15
  79. package/dist/core/skills.js.map +1 -1
  80. package/dist/core/superpowers.d.ts.map +1 -1
  81. package/dist/core/superpowers.js +1 -0
  82. package/dist/core/superpowers.js.map +1 -1
  83. package/dist/core/uninstall.d.ts +28 -0
  84. package/dist/core/uninstall.d.ts.map +1 -0
  85. package/dist/core/uninstall.js +421 -0
  86. package/dist/core/uninstall.js.map +1 -0
  87. package/dist/core/version.d.ts +31 -0
  88. package/dist/core/version.d.ts.map +1 -0
  89. package/dist/core/version.js +111 -0
  90. package/dist/core/version.js.map +1 -0
  91. package/dist/utils/file-system.d.ts +23 -0
  92. package/dist/utils/file-system.d.ts.map +1 -1
  93. package/dist/utils/file-system.js +100 -5
  94. package/dist/utils/file-system.js.map +1 -1
  95. package/package.json +69 -62
@@ -0,0 +1,28 @@
1
+ import { type Platform } from './platforms.js';
2
+ import type { InstallScope } from './types.js';
3
+ interface RemovalResult {
4
+ removed: number;
5
+ failed: number;
6
+ }
7
+ /**
8
+ * Remove Comet skill files for a specific platform.
9
+ * Reads the manifest to determine which skill paths to remove.
10
+ */
11
+ declare function removeCometSkillsForPlatform(baseDir: string, platform: Platform, scope?: InstallScope): Promise<RemovalResult>;
12
+ /**
13
+ * Remove Comet rule files for a specific platform.
14
+ * Reuses computeRuleDestPath for consistent path computation.
15
+ */
16
+ declare function removeCometRulesForPlatform(baseDir: string, platform: Platform, scope?: InstallScope): Promise<RemovalResult>;
17
+ /**
18
+ * Remove Comet hooks for platforms that support them.
19
+ * Preserves non-Comet hooks in configuration files.
20
+ */
21
+ declare function removeCometHooksForPlatform(baseDir: string, platform: Platform, scope?: InstallScope): Promise<RemovalResult>;
22
+ /**
23
+ * Remove Comet working directories from a project.
24
+ * Only applies to project scope.
25
+ */
26
+ declare function removeWorkingDirs(projectPath: string): Promise<RemovalResult>;
27
+ export { removeCometSkillsForPlatform, removeCometRulesForPlatform, removeCometHooksForPlatform, removeWorkingDirs, };
28
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/core/uninstall.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,iBAAe,4BAA4B,CACzC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC,aAAa,CAAC,CA4ExB;AAED;;;GAGG;AACH,iBAAe,2BAA2B,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAwCxB;AAED;;;GAGG;AACH,iBAAe,2BAA2B,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,YAAwB,GAC9B,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAuSD;;;GAGG;AACH,iBAAe,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAkC5E;AAED,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,iBAAiB,GAClB,CAAC"}
@@ -0,0 +1,421 @@
1
+ import path from 'path';
2
+ import { readFile, writeFile } from 'fs/promises';
3
+ import { fileExists, readDir, removeFile, removeDir, isDirEmpty } from '../utils/file-system.js';
4
+ import { getPlatformSkillsDir } from './platforms.js';
5
+ import { readManifest, computeRuleDestPath, isManagedHookCommand } from './skills.js';
6
+ /**
7
+ * Remove Comet skill files for a specific platform.
8
+ * Reads the manifest to determine which skill paths to remove.
9
+ */
10
+ async function removeCometSkillsForPlatform(baseDir, platform, scope = 'project') {
11
+ const manifest = await readManifest();
12
+ const skillsDir = getPlatformSkillsDir(platform, scope);
13
+ const skillsDirs = [skillsDir];
14
+ if (scope === 'global' && platform.id === 'pi') {
15
+ skillsDirs.push(platform.skillsDir);
16
+ }
17
+ const uniqueSkillsDirs = [...new Set(skillsDirs)];
18
+ let removed = 0;
19
+ const failed = 0;
20
+ for (const targetSkillsDir of uniqueSkillsDirs) {
21
+ for (const skillRelPath of manifest.skills) {
22
+ const dest = path.join(baseDir, targetSkillsDir, 'skills', skillRelPath);
23
+ const result = await removeFile(dest);
24
+ if (result) {
25
+ removed++;
26
+ }
27
+ }
28
+ }
29
+ // OpenCode: also remove generated command files
30
+ if (platform.id === 'opencode') {
31
+ const commandsDir = path.join(baseDir, skillsDir, 'commands');
32
+ for (const skillRelPath of manifest.skills) {
33
+ const parts = skillRelPath.split('/');
34
+ if (parts.length !== 2 || parts[1] !== 'SKILL.md')
35
+ continue;
36
+ const skillName = parts[0];
37
+ const commandFile = path.join(commandsDir, `${skillName}.md`);
38
+ const result = await removeFile(commandFile);
39
+ if (result) {
40
+ removed++;
41
+ }
42
+ }
43
+ }
44
+ if (platform.id === 'pi') {
45
+ const extensionsDir = path.join(baseDir, skillsDir, 'extensions');
46
+ if (await removeFile(path.join(extensionsDir, 'comet-commands.ts'))) {
47
+ removed++;
48
+ }
49
+ if (await isDirEmpty(extensionsDir)) {
50
+ await removeDir(extensionsDir);
51
+ }
52
+ }
53
+ // Clean up empty subdirectories and then empty comet skill directories
54
+ // Collect all unique parent directories of removed files (bottom-up cleanup)
55
+ const parentDirs = new Set();
56
+ for (const targetSkillsDir of uniqueSkillsDirs) {
57
+ for (const skillRelPath of manifest.skills) {
58
+ const parts = skillRelPath.split('/');
59
+ if (parts[0].startsWith('comet')) {
60
+ // Add all intermediate directories for nested paths
61
+ let current = path.join(baseDir, targetSkillsDir, 'skills', parts[0]);
62
+ parentDirs.add(current);
63
+ for (let i = 1; i < parts.length - 1; i++) {
64
+ current = path.join(current, parts[i]);
65
+ parentDirs.add(current);
66
+ }
67
+ }
68
+ }
69
+ }
70
+ // Sort by depth (deepest first) so we clean bottom-up
71
+ const sortedDirs = [...parentDirs].sort((a, b) => b.split(path.sep).length - a.split(path.sep).length);
72
+ for (const dir of sortedDirs) {
73
+ if (await isDirEmpty(dir)) {
74
+ await removeDir(dir);
75
+ }
76
+ }
77
+ return { removed, failed };
78
+ }
79
+ /**
80
+ * Remove Comet rule files for a specific platform.
81
+ * Reuses computeRuleDestPath for consistent path computation.
82
+ */
83
+ async function removeCometRulesForPlatform(baseDir, platform, scope = 'project') {
84
+ if (!platform.rulesDir || !platform.rulesFormat) {
85
+ return { removed: 0, failed: 0 };
86
+ }
87
+ const manifest = await readManifest();
88
+ const rulePaths = manifest.rules;
89
+ if (!rulePaths || rulePaths.length === 0) {
90
+ return { removed: 0, failed: 0 };
91
+ }
92
+ const skillsDir = getPlatformSkillsDir(platform, scope);
93
+ const rulesBase = platform.rulesBaseDir !== undefined
94
+ ? platform.rulesBaseDir === ''
95
+ ? baseDir
96
+ : path.join(baseDir, platform.rulesBaseDir)
97
+ : path.join(baseDir, skillsDir);
98
+ let removed = 0;
99
+ const failed = 0;
100
+ for (const ruleRelPath of rulePaths) {
101
+ const ruleFileName = path.basename(ruleRelPath);
102
+ const rulesDestDir = path.join(rulesBase, platform.rulesDir);
103
+ const dest = computeRuleDestPath(rulesDestDir, ruleFileName, platform.rulesFormat);
104
+ const result = await removeFile(dest);
105
+ if (result) {
106
+ removed++;
107
+ }
108
+ }
109
+ // Clean up empty rules directory
110
+ const rulesDestDir = path.join(rulesBase, platform.rulesDir);
111
+ if (await isDirEmpty(rulesDestDir)) {
112
+ await removeDir(rulesDestDir);
113
+ }
114
+ return { removed, failed };
115
+ }
116
+ /**
117
+ * Remove Comet hooks for platforms that support them.
118
+ * Preserves non-Comet hooks in configuration files.
119
+ */
120
+ async function removeCometHooksForPlatform(baseDir, platform, scope = 'project') {
121
+ if (!platform.supportsHooks || !platform.hookFormat) {
122
+ return { removed: 0, failed: 0 };
123
+ }
124
+ const manifest = await readManifest();
125
+ const hooksConfig = manifest.hooks;
126
+ if (!hooksConfig || Object.keys(hooksConfig).length === 0) {
127
+ return { removed: 0, failed: 0 };
128
+ }
129
+ const hookFormat = platform.hookFormat;
130
+ const skillsDir = getPlatformSkillsDir(platform, scope);
131
+ const platformBase = path.join(baseDir, skillsDir);
132
+ const scriptRelPaths = Object.keys(hooksConfig);
133
+ try {
134
+ switch (hookFormat) {
135
+ case 'claude-code':
136
+ return removeClaudeCodeHooks(platformBase, scriptRelPaths);
137
+ case 'qwen':
138
+ case 'qoder':
139
+ return removeQwenStyleHooks(platformBase, scriptRelPaths);
140
+ case 'gemini':
141
+ return removeGeminiHooks(platformBase, scriptRelPaths);
142
+ case 'windsurf':
143
+ return removeWindsurfHooks(platformBase, scriptRelPaths);
144
+ case 'copilot':
145
+ return removeCopilotHooks(platformBase, scriptRelPaths);
146
+ case 'kiro':
147
+ return removeKiroHooks(platformBase, scriptRelPaths);
148
+ default:
149
+ return { removed: 0, failed: 0 };
150
+ }
151
+ }
152
+ catch {
153
+ return { removed: 0, failed: 1 };
154
+ }
155
+ }
156
+ /**
157
+ * Claude Code, Codex, Amazon Q: settings.local.json with PreToolUse hooks.
158
+ */
159
+ async function removeClaudeCodeHooks(platformBase, scriptRelPaths) {
160
+ const settingsPath = path.join(platformBase, 'settings.local.json');
161
+ if (!(await fileExists(settingsPath))) {
162
+ return { removed: 0, failed: 0 };
163
+ }
164
+ let removed = 0;
165
+ let settings;
166
+ try {
167
+ settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
168
+ }
169
+ catch {
170
+ return { removed: 0, failed: 0 };
171
+ }
172
+ const existingHooks = settings.hooks;
173
+ if (!existingHooks) {
174
+ return { removed: 0, failed: 0 };
175
+ }
176
+ const existingPreToolUse = existingHooks.PreToolUse;
177
+ if (!existingPreToolUse || !Array.isArray(existingPreToolUse)) {
178
+ return { removed: 0, failed: 0 };
179
+ }
180
+ const filtered = existingPreToolUse.flatMap((group) => {
181
+ if (!Array.isArray(group.hooks))
182
+ return [group];
183
+ const hooksBefore = group.hooks.length;
184
+ const hooks = group.hooks.filter((hook) => !isManagedHookCommand(hook.command, scriptRelPaths));
185
+ removed += hooksBefore - hooks.length;
186
+ if (hooks.length === 0)
187
+ return [];
188
+ return [{ ...group, hooks }];
189
+ });
190
+ if (filtered.length === 0) {
191
+ delete existingHooks.PreToolUse;
192
+ }
193
+ else {
194
+ existingHooks.PreToolUse = filtered;
195
+ }
196
+ // Clean up empty hooks section
197
+ if (Object.keys(existingHooks).length === 0) {
198
+ delete settings.hooks;
199
+ }
200
+ const content = JSON.stringify(settings, null, 2) + '\n';
201
+ await writeFile(settingsPath, content, 'utf-8');
202
+ return { removed, failed: 0 };
203
+ }
204
+ /**
205
+ * Qwen / Qoder: settings.json with PreToolUse hooks.
206
+ */
207
+ async function removeQwenStyleHooks(platformBase, scriptRelPaths) {
208
+ const settingsPath = path.join(platformBase, 'settings.json');
209
+ if (!(await fileExists(settingsPath))) {
210
+ return { removed: 0, failed: 0 };
211
+ }
212
+ let removed = 0;
213
+ let settings;
214
+ try {
215
+ settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
216
+ }
217
+ catch {
218
+ return { removed: 0, failed: 0 };
219
+ }
220
+ const existingHooks = settings.hooks;
221
+ if (!existingHooks) {
222
+ return { removed: 0, failed: 0 };
223
+ }
224
+ const existingPreToolUse = existingHooks.PreToolUse;
225
+ if (!existingPreToolUse || !Array.isArray(existingPreToolUse)) {
226
+ return { removed: 0, failed: 0 };
227
+ }
228
+ const filtered = existingPreToolUse.flatMap((group) => {
229
+ if (!Array.isArray(group.hooks))
230
+ return [group];
231
+ const hooksBefore = group.hooks.length;
232
+ const hooks = group.hooks.filter((hook) => !isManagedHookCommand(hook.command, scriptRelPaths));
233
+ removed += hooksBefore - hooks.length;
234
+ if (hooks.length === 0)
235
+ return [];
236
+ return [{ ...group, hooks }];
237
+ });
238
+ if (filtered.length === 0) {
239
+ delete existingHooks.PreToolUse;
240
+ }
241
+ else {
242
+ existingHooks.PreToolUse = filtered;
243
+ }
244
+ if (Object.keys(existingHooks).length === 0) {
245
+ delete settings.hooks;
246
+ }
247
+ const content = JSON.stringify(settings, null, 2) + '\n';
248
+ await writeFile(settingsPath, content, 'utf-8');
249
+ return { removed, failed: 0 };
250
+ }
251
+ /**
252
+ * Gemini CLI: settings.json with BeforeTool hooks.
253
+ */
254
+ async function removeGeminiHooks(platformBase, scriptRelPaths) {
255
+ const settingsPath = path.join(platformBase, 'settings.json');
256
+ if (!(await fileExists(settingsPath))) {
257
+ return { removed: 0, failed: 0 };
258
+ }
259
+ let removed = 0;
260
+ let settings;
261
+ try {
262
+ settings = JSON.parse(await readFile(settingsPath, 'utf-8'));
263
+ }
264
+ catch {
265
+ return { removed: 0, failed: 0 };
266
+ }
267
+ const existingHooks = settings.hooks;
268
+ if (!existingHooks) {
269
+ return { removed: 0, failed: 0 };
270
+ }
271
+ const existingBeforeTool = existingHooks.BeforeTool;
272
+ if (!existingBeforeTool || !Array.isArray(existingBeforeTool)) {
273
+ return { removed: 0, failed: 0 };
274
+ }
275
+ const filtered = existingBeforeTool.flatMap((group) => {
276
+ if (!Array.isArray(group.hooks))
277
+ return [group];
278
+ const hooksBefore = group.hooks.length;
279
+ const hooks = group.hooks.filter((hook) => !isManagedHookCommand(hook.command, scriptRelPaths));
280
+ removed += hooksBefore - hooks.length;
281
+ if (hooks.length === 0)
282
+ return [];
283
+ return [{ ...group, hooks }];
284
+ });
285
+ if (filtered.length === 0) {
286
+ delete existingHooks.BeforeTool;
287
+ }
288
+ else {
289
+ existingHooks.BeforeTool = filtered;
290
+ }
291
+ if (Object.keys(existingHooks).length === 0) {
292
+ delete settings.hooks;
293
+ }
294
+ const content = JSON.stringify(settings, null, 2) + '\n';
295
+ await writeFile(settingsPath, content, 'utf-8');
296
+ return { removed, failed: 0 };
297
+ }
298
+ /**
299
+ * Windsurf: hooks.json with pre_write_code hooks.
300
+ */
301
+ async function removeWindsurfHooks(platformBase, scriptRelPaths) {
302
+ const hooksPath = path.join(platformBase, 'hooks.json');
303
+ if (!(await fileExists(hooksPath))) {
304
+ return { removed: 0, failed: 0 };
305
+ }
306
+ let removed = 0;
307
+ let hooksFile;
308
+ try {
309
+ hooksFile = JSON.parse(await readFile(hooksPath, 'utf-8'));
310
+ }
311
+ catch {
312
+ return { removed: 0, failed: 0 };
313
+ }
314
+ const existingHooks = hooksFile.hooks;
315
+ if (!existingHooks) {
316
+ return { removed: 0, failed: 0 };
317
+ }
318
+ const existingPreWrite = existingHooks.pre_write_code;
319
+ if (!existingPreWrite || !Array.isArray(existingPreWrite)) {
320
+ return { removed: 0, failed: 0 };
321
+ }
322
+ const filtered = existingPreWrite.filter((entry) => {
323
+ if (isManagedHookCommand(entry.command, scriptRelPaths)) {
324
+ removed++;
325
+ return false;
326
+ }
327
+ return true;
328
+ });
329
+ if (filtered.length === 0) {
330
+ delete existingHooks.pre_write_code;
331
+ }
332
+ else {
333
+ existingHooks.pre_write_code = filtered;
334
+ }
335
+ if (Object.keys(existingHooks).length === 0) {
336
+ delete hooksFile.hooks;
337
+ }
338
+ const content = JSON.stringify(hooksFile, null, 2) + '\n';
339
+ await writeFile(hooksPath, content, 'utf-8');
340
+ return { removed, failed: 0 };
341
+ }
342
+ /**
343
+ * GitHub Copilot: hooks/comet-guard.json file (delete the entire file).
344
+ */
345
+ async function removeCopilotHooks(platformBase, _scriptRelPaths) {
346
+ const hookFilePath = path.join(platformBase, 'hooks', 'comet-guard.json');
347
+ const removed = (await removeFile(hookFilePath)) ? 1 : 0;
348
+ // Clean up empty hooks directory
349
+ const hooksDir = path.join(platformBase, 'hooks');
350
+ if (await isDirEmpty(hooksDir)) {
351
+ await removeDir(hooksDir);
352
+ }
353
+ return { removed, failed: 0 };
354
+ }
355
+ /**
356
+ * Kiro: hooks/*.kiro.hook files matching comet patterns.
357
+ */
358
+ async function removeKiroHooks(platformBase, scriptRelPaths) {
359
+ const hooksDir = path.join(platformBase, 'hooks');
360
+ if (!(await fileExists(hooksDir))) {
361
+ return { removed: 0, failed: 0 };
362
+ }
363
+ let removed = 0;
364
+ const entries = await readDir(hooksDir);
365
+ for (const entry of entries) {
366
+ if (!entry.endsWith('.kiro.hook'))
367
+ continue;
368
+ // Match files that correspond to comet scripts
369
+ const baseName = entry.replace('.kiro.hook', '');
370
+ const isCometHook = scriptRelPaths.some((scriptPath) => {
371
+ const scriptBase = path.basename(scriptPath).replace('.sh', '');
372
+ return scriptBase === baseName;
373
+ });
374
+ if (isCometHook) {
375
+ const hookPath = path.join(hooksDir, entry);
376
+ if (await removeFile(hookPath)) {
377
+ removed++;
378
+ }
379
+ }
380
+ }
381
+ // Clean up empty hooks directory
382
+ if (await isDirEmpty(hooksDir)) {
383
+ await removeDir(hooksDir);
384
+ }
385
+ return { removed, failed: 0 };
386
+ }
387
+ /**
388
+ * Remove Comet working directories from a project.
389
+ * Only applies to project scope.
390
+ */
391
+ async function removeWorkingDirs(projectPath) {
392
+ let removed = 0;
393
+ // Remove .comet/ directory
394
+ const cometDir = path.join(projectPath, '.comet');
395
+ if (await removeDir(cometDir)) {
396
+ removed++;
397
+ }
398
+ // Remove docs/superpowers/specs/ if empty
399
+ const specsDir = path.join(projectPath, 'docs', 'superpowers', 'specs');
400
+ if (await isDirEmpty(specsDir)) {
401
+ await removeDir(specsDir);
402
+ }
403
+ // Remove docs/superpowers/plans/ if empty
404
+ const plansDir = path.join(projectPath, 'docs', 'superpowers', 'plans');
405
+ if (await isDirEmpty(plansDir)) {
406
+ await removeDir(plansDir);
407
+ }
408
+ // Remove docs/superpowers/ if empty
409
+ const superpowersDir = path.join(projectPath, 'docs', 'superpowers');
410
+ if (await isDirEmpty(superpowersDir)) {
411
+ await removeDir(superpowersDir);
412
+ }
413
+ // Remove docs/ if empty
414
+ const docsDir = path.join(projectPath, 'docs');
415
+ if (await isDirEmpty(docsDir)) {
416
+ await removeDir(docsDir);
417
+ }
418
+ return { removed, failed: 0 };
419
+ }
420
+ export { removeCometSkillsForPlatform, removeCometRulesForPlatform, removeCometHooksForPlatform, removeWorkingDirs, };
421
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/core/uninstall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface VersionCheckResult {
2
+ currentVersion: string;
3
+ latestVersion: string | null;
4
+ hasUpdate: boolean;
5
+ checked: boolean;
6
+ }
7
+ /**
8
+ * Compare two semver version strings.
9
+ * Returns a positive number if a > b, negative if a < b, 0 if equal.
10
+ */
11
+ export declare function compareVersions(a: string, b: string): number;
12
+ /**
13
+ * Get the current installed Comet version from package.json.
14
+ */
15
+ export declare function getCurrentVersion(): string;
16
+ /**
17
+ * Fetch the latest version from the npm registry.
18
+ * Returns null if the registry is unreachable or the request fails.
19
+ */
20
+ export declare function getLatestVersion(): Promise<string | null>;
21
+ /**
22
+ * Check for available updates.
23
+ * Silently returns a "not checked" result if the registry is unreachable.
24
+ */
25
+ export declare function checkForUpdate(): Promise<VersionCheckResult>;
26
+ /**
27
+ * Format and print version info to the console.
28
+ * Used by `comet init` and `comet update` at the start of command output.
29
+ */
30
+ export declare function printVersionInfo(log: (message: string) => void): Promise<VersionCheckResult>;
31
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BzD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAmBlE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC7B,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
@@ -0,0 +1,111 @@
1
+ import { createRequire } from 'module';
2
+ import https from 'https';
3
+ const require = createRequire(import.meta.url);
4
+ const { version: CURRENT_VERSION } = require('../../package.json');
5
+ const PACKAGE_NAME = '@rpamis/comet';
6
+ const REGISTRY_URL = `https://registry.npmjs.org/${PACKAGE_NAME}/latest`;
7
+ /**
8
+ * Compare two semver version strings.
9
+ * Returns a positive number if a > b, negative if a < b, 0 if equal.
10
+ */
11
+ export function compareVersions(a, b) {
12
+ const parseParts = (v) => v
13
+ .replace(/^v/, '')
14
+ .split('.')
15
+ .map((part) => {
16
+ const numeric = parseInt(part, 10);
17
+ return Number.isNaN(numeric) ? 0 : numeric;
18
+ });
19
+ const partsA = parseParts(a);
20
+ const partsB = parseParts(b);
21
+ const len = Math.max(partsA.length, partsB.length);
22
+ for (let i = 0; i < len; i++) {
23
+ const numA = partsA[i] ?? 0;
24
+ const numB = partsB[i] ?? 0;
25
+ if (numA !== numB) {
26
+ return numA - numB;
27
+ }
28
+ }
29
+ return 0;
30
+ }
31
+ /**
32
+ * Get the current installed Comet version from package.json.
33
+ */
34
+ export function getCurrentVersion() {
35
+ return CURRENT_VERSION;
36
+ }
37
+ /**
38
+ * Fetch the latest version from the npm registry.
39
+ * Returns null if the registry is unreachable or the request fails.
40
+ */
41
+ export function getLatestVersion() {
42
+ return new Promise((resolve) => {
43
+ const request = https.get(REGISTRY_URL, { timeout: 5000 }, (res) => {
44
+ if (res.statusCode !== 200) {
45
+ res.resume();
46
+ resolve(null);
47
+ return;
48
+ }
49
+ let data = '';
50
+ res.on('data', (chunk) => {
51
+ data += chunk;
52
+ });
53
+ res.on('end', () => {
54
+ try {
55
+ const parsed = JSON.parse(data);
56
+ resolve(typeof parsed.version === 'string' ? parsed.version : null);
57
+ }
58
+ catch {
59
+ resolve(null);
60
+ }
61
+ });
62
+ });
63
+ request.on('error', () => resolve(null));
64
+ request.on('timeout', () => {
65
+ request.destroy();
66
+ resolve(null);
67
+ });
68
+ });
69
+ }
70
+ /**
71
+ * Check for available updates.
72
+ * Silently returns a "not checked" result if the registry is unreachable.
73
+ */
74
+ export async function checkForUpdate() {
75
+ const currentVersion = getCurrentVersion();
76
+ const latestVersion = await getLatestVersion();
77
+ if (latestVersion === null) {
78
+ return {
79
+ currentVersion,
80
+ latestVersion: null,
81
+ hasUpdate: false,
82
+ checked: false,
83
+ };
84
+ }
85
+ return {
86
+ currentVersion,
87
+ latestVersion,
88
+ hasUpdate: compareVersions(latestVersion, currentVersion) > 0,
89
+ checked: true,
90
+ };
91
+ }
92
+ /**
93
+ * Format and print version info to the console.
94
+ * Used by `comet init` and `comet update` at the start of command output.
95
+ */
96
+ export async function printVersionInfo(log) {
97
+ const result = await checkForUpdate();
98
+ log(` Comet v${result.currentVersion}`);
99
+ if (!result.checked) {
100
+ // Registry unreachable — skip silently per requirement #6
101
+ return result;
102
+ }
103
+ if (result.hasUpdate) {
104
+ log(` New version v${result.latestVersion} available. Run 'npm update -g ${PACKAGE_NAME}' to upgrade.`);
105
+ }
106
+ else {
107
+ log(` You are on the latest version.`);
108
+ }
109
+ return result;
110
+ }
111
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"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"}