@rpamis/comet 0.3.7 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +557 -539
- package/assets/manifest.json +41 -34
- package/assets/skills/comet/SKILL.md +282 -329
- package/assets/skills/comet/reference/auto-transition.md +27 -0
- package/assets/skills/comet/reference/comet-yaml-fields.md +68 -0
- package/assets/skills/comet/reference/context-recovery.md +35 -0
- package/assets/skills/comet/reference/debug-gate.md +17 -0
- package/assets/skills/comet/reference/decision-point.md +20 -0
- package/assets/skills/comet/reference/dirty-worktree.md +59 -59
- package/assets/skills/comet/reference/file-structure.md +28 -0
- package/assets/skills/comet/reference/subagent-dispatch.md +113 -0
- package/assets/skills/comet/rules/comet-phase-guard.en.md +123 -0
- package/assets/skills/comet/rules/comet-phase-guard.md +125 -90
- package/assets/skills/comet/scripts/comet-guard.sh +27 -1
- package/assets/skills/comet/scripts/comet-hook-guard.sh +121 -45
- package/assets/skills/comet/scripts/comet-state.sh +162 -7
- package/assets/skills/comet/scripts/comet-yaml-validate.sh +3 -1
- package/assets/skills/comet-archive/SKILL.md +100 -106
- package/assets/skills/comet-build/SKILL.md +304 -316
- package/assets/skills/comet-design/SKILL.md +263 -272
- package/assets/skills/comet-hotfix/SKILL.md +204 -211
- package/assets/skills/comet-open/SKILL.md +220 -186
- package/assets/skills/comet-tweak/SKILL.md +180 -179
- package/assets/skills/comet-verify/SKILL.md +234 -240
- package/assets/skills-zh/comet/SKILL.md +269 -332
- package/assets/skills-zh/comet/reference/auto-transition.md +27 -0
- package/assets/skills-zh/comet/reference/comet-yaml-fields.md +71 -0
- package/assets/skills-zh/comet/reference/context-recovery.md +35 -0
- package/assets/skills-zh/comet/reference/debug-gate.md +17 -0
- package/assets/skills-zh/comet/reference/decision-point.md +20 -0
- package/assets/skills-zh/comet/reference/dirty-worktree.md +59 -59
- package/assets/skills-zh/comet/reference/file-structure.md +28 -0
- package/assets/skills-zh/comet/reference/subagent-dispatch.md +120 -0
- package/assets/skills-zh/comet-archive/SKILL.md +100 -106
- package/assets/skills-zh/comet-build/SKILL.md +317 -316
- package/assets/skills-zh/comet-design/SKILL.md +264 -273
- package/assets/skills-zh/comet-hotfix/SKILL.md +200 -207
- package/assets/skills-zh/comet-open/SKILL.md +220 -186
- package/assets/skills-zh/comet-tweak/SKILL.md +176 -175
- package/assets/skills-zh/comet-verify/SKILL.md +232 -238
- package/bin/comet.js +3 -3
- package/dist/cli/index.js +21 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +5 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/i18n.d.ts +4 -0
- package/dist/commands/i18n.d.ts.map +1 -0
- package/dist/commands/i18n.js +154 -0
- package/dist/commands/i18n.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +127 -75
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/uninstall.d.ts +9 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +132 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +3 -2
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +105 -68
- package/dist/commands/update.js.map +1 -1
- package/dist/core/codegraph.d.ts +4 -7
- package/dist/core/codegraph.d.ts.map +1 -1
- package/dist/core/codegraph.js +63 -41
- package/dist/core/codegraph.js.map +1 -1
- package/dist/core/detect.d.ts +13 -1
- package/dist/core/detect.d.ts.map +1 -1
- package/dist/core/detect.js +68 -12
- package/dist/core/detect.js.map +1 -1
- package/dist/core/openspec.d.ts +2 -2
- package/dist/core/openspec.d.ts.map +1 -1
- package/dist/core/openspec.js +51 -22
- package/dist/core/openspec.js.map +1 -1
- package/dist/core/platforms.d.ts.map +1 -1
- package/dist/core/platforms.js +14 -1
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/skills.d.ts +3 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +151 -66
- package/dist/core/skills.js.map +1 -1
- package/dist/core/superpowers.d.ts +1 -1
- package/dist/core/superpowers.d.ts.map +1 -1
- package/dist/core/superpowers.js +5 -1
- package/dist/core/superpowers.js.map +1 -1
- package/dist/core/uninstall.d.ts +28 -0
- package/dist/core/uninstall.d.ts.map +1 -0
- package/dist/core/uninstall.js +421 -0
- package/dist/core/uninstall.js.map +1 -0
- package/dist/core/version.d.ts +31 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +111 -0
- package/dist/core/version.js.map +1 -0
- package/dist/utils/file-system.d.ts +23 -0
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +100 -5
- package/dist/utils/file-system.js.map +1 -1
- package/package.json +69 -64
- package/scripts/postinstall.js +44 -44
|
@@ -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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"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ensure a directory exists, creating it recursively if needed.
|
|
3
|
+
* Resolves symlinks so that broken symlink targets are created correctly.
|
|
3
4
|
*/
|
|
4
5
|
export declare function ensureDir(dir: string): Promise<void>;
|
|
5
6
|
/**
|
|
6
7
|
* Copy a file from src to dest, creating parent directories if needed.
|
|
8
|
+
* Resolves symlinks in the destination path so files are written to the
|
|
9
|
+
* actual target location when dest contains symlinks (e.g., skill dirs
|
|
10
|
+
* symlinked from ~/.claude/skills/ to ~/.agents/skills/).
|
|
7
11
|
*/
|
|
8
12
|
export declare function copyFile(src: string, dest: string): Promise<void>;
|
|
9
13
|
/**
|
|
@@ -16,10 +20,29 @@ export declare function fileExists(filePath: string): Promise<boolean>;
|
|
|
16
20
|
export declare function readJson<T = unknown>(filePath: string): Promise<T>;
|
|
17
21
|
/**
|
|
18
22
|
* Write content to a file, creating parent directories if needed.
|
|
23
|
+
* Resolves symlinks so files are written to the actual target location.
|
|
19
24
|
*/
|
|
20
25
|
export declare function writeFile(filePath: string, content: string): Promise<void>;
|
|
21
26
|
/**
|
|
22
27
|
* List entries in a directory. Returns empty array if directory doesn't exist.
|
|
23
28
|
*/
|
|
24
29
|
export declare function readDir(dirPath: string): Promise<string[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Remove a file. Returns true if the file existed and was removed.
|
|
32
|
+
* Operates on the path directly so a symlink entry is removed rather than its
|
|
33
|
+
* resolved target (avoids deleting files the symlink merely points at).
|
|
34
|
+
*/
|
|
35
|
+
export declare function removeFile(filePath: string): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Remove a directory recursively. Returns true if the directory existed and was removed.
|
|
38
|
+
* Symlinked directories are unlinked directly rather than recursed into, so the
|
|
39
|
+
* directory a symlink points at is never deleted.
|
|
40
|
+
*/
|
|
41
|
+
export declare function removeDir(dirPath: string): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Check if a directory is empty. A missing directory is treated as empty;
|
|
44
|
+
* unreadable directories (permissions/IO) return false so callers never delete
|
|
45
|
+
* a directory they could not inspect.
|
|
46
|
+
*/
|
|
47
|
+
export declare function isDirEmpty(dirPath: string): Promise<boolean>;
|
|
25
48
|
//# sourceMappingURL=file-system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/utils/file-system.ts"],"names":[],"mappings":"AAiCA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGxE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIhF;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWhE;AAYD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnE;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAajE;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE"}
|