killer-skills 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/CHANGELOG.md +156 -0
  2. package/LICENSE +21 -0
  3. package/README.md +360 -0
  4. package/dist/commands/completion.d.ts +8 -0
  5. package/dist/commands/completion.d.ts.map +1 -0
  6. package/dist/commands/completion.js +242 -0
  7. package/dist/commands/completion.js.map +1 -0
  8. package/dist/commands/config.d.ts +24 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +132 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/create.d.ts +9 -0
  13. package/dist/commands/create.d.ts.map +1 -0
  14. package/dist/commands/create.js +361 -0
  15. package/dist/commands/create.js.map +1 -0
  16. package/dist/commands/deps.d.ts +8 -0
  17. package/dist/commands/deps.d.ts.map +1 -0
  18. package/dist/commands/deps.js +144 -0
  19. package/dist/commands/deps.js.map +1 -0
  20. package/dist/commands/do.d.ts +13 -0
  21. package/dist/commands/do.d.ts.map +1 -0
  22. package/dist/commands/do.js +223 -0
  23. package/dist/commands/do.js.map +1 -0
  24. package/dist/commands/init.d.ts +8 -0
  25. package/dist/commands/init.d.ts.map +1 -0
  26. package/dist/commands/init.js +191 -0
  27. package/dist/commands/init.js.map +1 -0
  28. package/dist/commands/install.d.ts +13 -0
  29. package/dist/commands/install.d.ts.map +1 -0
  30. package/dist/commands/install.js +234 -0
  31. package/dist/commands/install.js.map +1 -0
  32. package/dist/commands/list.d.ts +9 -0
  33. package/dist/commands/list.d.ts.map +1 -0
  34. package/dist/commands/list.js +103 -0
  35. package/dist/commands/list.js.map +1 -0
  36. package/dist/commands/manage.d.ts +9 -0
  37. package/dist/commands/manage.d.ts.map +1 -0
  38. package/dist/commands/manage.js +132 -0
  39. package/dist/commands/manage.js.map +1 -0
  40. package/dist/commands/outdated.d.ts +9 -0
  41. package/dist/commands/outdated.d.ts.map +1 -0
  42. package/dist/commands/outdated.js +168 -0
  43. package/dist/commands/outdated.js.map +1 -0
  44. package/dist/commands/plugin.d.ts +8 -0
  45. package/dist/commands/plugin.d.ts.map +1 -0
  46. package/dist/commands/plugin.js +98 -0
  47. package/dist/commands/plugin.js.map +1 -0
  48. package/dist/commands/publish.d.ts +8 -0
  49. package/dist/commands/publish.d.ts.map +1 -0
  50. package/dist/commands/publish.js +199 -0
  51. package/dist/commands/publish.js.map +1 -0
  52. package/dist/commands/read.d.ts +9 -0
  53. package/dist/commands/read.d.ts.map +1 -0
  54. package/dist/commands/read.js +69 -0
  55. package/dist/commands/read.js.map +1 -0
  56. package/dist/commands/search.d.ts +8 -0
  57. package/dist/commands/search.d.ts.map +1 -0
  58. package/dist/commands/search.js +105 -0
  59. package/dist/commands/search.js.map +1 -0
  60. package/dist/commands/stats.d.ts +16 -0
  61. package/dist/commands/stats.d.ts.map +1 -0
  62. package/dist/commands/stats.js +137 -0
  63. package/dist/commands/stats.js.map +1 -0
  64. package/dist/commands/submit.d.ts +9 -0
  65. package/dist/commands/submit.d.ts.map +1 -0
  66. package/dist/commands/submit.js +245 -0
  67. package/dist/commands/submit.js.map +1 -0
  68. package/dist/commands/sync.d.ts +11 -0
  69. package/dist/commands/sync.d.ts.map +1 -0
  70. package/dist/commands/sync.js +134 -0
  71. package/dist/commands/sync.js.map +1 -0
  72. package/dist/commands/update.d.ts +9 -0
  73. package/dist/commands/update.d.ts.map +1 -0
  74. package/dist/commands/update.js +175 -0
  75. package/dist/commands/update.js.map +1 -0
  76. package/dist/config/claude.d.ts +2 -0
  77. package/dist/config/claude.d.ts.map +1 -0
  78. package/dist/config/claude.js +19 -0
  79. package/dist/config/claude.js.map +1 -0
  80. package/dist/config/cursor.d.ts +2 -0
  81. package/dist/config/cursor.d.ts.map +1 -0
  82. package/dist/config/cursor.js +18 -0
  83. package/dist/config/cursor.js.map +1 -0
  84. package/dist/config/ides.d.ts +19 -0
  85. package/dist/config/ides.d.ts.map +1 -0
  86. package/dist/config/ides.js +221 -0
  87. package/dist/config/ides.js.map +1 -0
  88. package/dist/index.d.ts +3 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +57 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/mcp-server.d.ts +11 -0
  93. package/dist/mcp-server.d.ts.map +1 -0
  94. package/dist/mcp-server.js +264 -0
  95. package/dist/mcp-server.js.map +1 -0
  96. package/dist/registry.d.ts +8 -0
  97. package/dist/registry.d.ts.map +1 -0
  98. package/dist/registry.js +34 -0
  99. package/dist/registry.js.map +1 -0
  100. package/dist/types.d.ts +78 -0
  101. package/dist/types.d.ts.map +1 -0
  102. package/dist/types.js +7 -0
  103. package/dist/types.js.map +1 -0
  104. package/dist/utils/agents-md.d.ts +33 -0
  105. package/dist/utils/agents-md.d.ts.map +1 -0
  106. package/dist/utils/agents-md.js +137 -0
  107. package/dist/utils/agents-md.js.map +1 -0
  108. package/dist/utils/dependencies.d.ts +49 -0
  109. package/dist/utils/dependencies.d.ts.map +1 -0
  110. package/dist/utils/dependencies.js +141 -0
  111. package/dist/utils/dependencies.js.map +1 -0
  112. package/dist/utils/github.d.ts +58 -0
  113. package/dist/utils/github.d.ts.map +1 -0
  114. package/dist/utils/github.js +198 -0
  115. package/dist/utils/github.js.map +1 -0
  116. package/dist/utils/platform.d.ts +54 -0
  117. package/dist/utils/platform.d.ts.map +1 -0
  118. package/dist/utils/platform.js +154 -0
  119. package/dist/utils/platform.js.map +1 -0
  120. package/dist/utils/plugins.d.ts +50 -0
  121. package/dist/utils/plugins.d.ts.map +1 -0
  122. package/dist/utils/plugins.js +115 -0
  123. package/dist/utils/plugins.js.map +1 -0
  124. package/dist/utils/prompt-templates.d.ts +47 -0
  125. package/dist/utils/prompt-templates.d.ts.map +1 -0
  126. package/dist/utils/prompt-templates.js +160 -0
  127. package/dist/utils/prompt-templates.js.map +1 -0
  128. package/dist/utils/skill-metadata.d.ts +55 -0
  129. package/dist/utils/skill-metadata.d.ts.map +1 -0
  130. package/dist/utils/skill-metadata.js +82 -0
  131. package/dist/utils/skill-metadata.js.map +1 -0
  132. package/dist/utils/skills.d.ts +27 -0
  133. package/dist/utils/skills.d.ts.map +1 -0
  134. package/dist/utils/skills.js +163 -0
  135. package/dist/utils/skills.js.map +1 -0
  136. package/package.json +77 -0
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Install Command (Unified)
3
+ *
4
+ * Supports installation from:
5
+ * - GitHub: owner/repo, github.com/owner/repo
6
+ * - Local: ./path, ~/path, /absolute/path
7
+ * - Registry: skill-name
8
+ *
9
+ * Merged from install.ts and add.js for a unified experience.
10
+ */
11
+ import { Command } from 'commander';
12
+ import fs from 'fs-extra';
13
+ import path from 'path';
14
+ import ora from 'ora';
15
+ import chalk from 'chalk';
16
+ import { IDE_CONFIG, SUPPORTED_IDES, getInstallPath } from '../config/ides.js';
17
+ import { fetchSkillMeta } from '../registry.js';
18
+ import { writeSkillMetadata, buildRegistryMetadata, buildGitMetadata, buildLocalMetadata } from '../utils/skill-metadata.js';
19
+ import { isGitHubRepo, parseRepoString, normalizeGitHubUrl, findSkillFile, downloadSkillFiles } from '../utils/github.js';
20
+ import { isLocalPath, expandTilde, getBestIDE } from '../utils/platform.js';
21
+ export const installCommand = new Command('install')
22
+ .argument('<source>', 'Skill source: name, owner/repo, or local path')
23
+ .description('Install a skill from registry, GitHub, or local path')
24
+ .option('-i, --ide <ide>', `Target IDE (${SUPPORTED_IDES.join(', ')})`)
25
+ .option('-s, --scope <scope>', 'Installation scope: project or global', 'global')
26
+ .option('--all', 'Install to all supported IDEs')
27
+ .option('-y, --yes', 'Skip prompts, accept defaults')
28
+ .option('--sync', 'Auto-sync after installation')
29
+ .option('--with-deps', 'Install with dependencies')
30
+ .action(async (source, options) => {
31
+ const spinner = ora(`Installing from ${source}...`).start();
32
+ try {
33
+ // Determine target IDEs
34
+ let targetIDEs = [];
35
+ if (options.all) {
36
+ targetIDEs = SUPPORTED_IDES;
37
+ }
38
+ else if (options.ide) {
39
+ if (!SUPPORTED_IDES.includes(options.ide)) {
40
+ spinner.fail(chalk.red(`Unknown IDE: ${options.ide}`));
41
+ console.log(chalk.yellow(`\nSupported IDEs: ${SUPPORTED_IDES.join(', ')}`));
42
+ process.exit(1);
43
+ }
44
+ targetIDEs = [options.ide];
45
+ }
46
+ else {
47
+ // Auto-detect IDE
48
+ const detectedIDE = getBestIDE(options.scope === 'project' ? 'project' : 'global');
49
+ targetIDEs = [detectedIDE];
50
+ spinner.text = `Detected IDE: ${IDE_CONFIG[detectedIDE].name}`;
51
+ }
52
+ const scope = (options.scope === 'project' ? 'project' : 'global');
53
+ // Determine source type and install accordingly
54
+ let result;
55
+ if (isLocalPath(source)) {
56
+ result = await installFromLocal(source, targetIDEs, scope, spinner);
57
+ }
58
+ else if (isGitHubRepo(source)) {
59
+ result = await installFromGitHub(source, targetIDEs, scope, spinner);
60
+ }
61
+ else {
62
+ result = await installFromRegistry(source, targetIDEs, scope, spinner);
63
+ }
64
+ if (result.installed.length === 0) {
65
+ spinner.fail(chalk.red(`Failed to install ${source}`));
66
+ process.exit(1);
67
+ }
68
+ spinner.succeed(chalk.green(`Installed ${result.skillName}`));
69
+ // Show summary
70
+ console.log(chalk.dim('\n📦 Installation Summary'));
71
+ console.log(chalk.dim('─'.repeat(50)));
72
+ console.log(` ${chalk.bold('Skill:')} ${result.skillName}`);
73
+ console.log(` ${chalk.bold('Source:')} ${result.sourceType}`);
74
+ console.log(` ${chalk.bold('IDEs:')} ${result.installed.join(', ')}`);
75
+ console.log(chalk.dim('─'.repeat(50)));
76
+ // Tips
77
+ console.log(chalk.dim('\n💡 Next steps:'));
78
+ if (!options.sync) {
79
+ console.log(chalk.dim(' killer sync - Make skills discoverable by AI'));
80
+ }
81
+ console.log(chalk.dim(' killer list - View all installed skills'));
82
+ console.log(chalk.dim(' killer update - Update skills from source'));
83
+ // Auto-sync if requested
84
+ if (options.sync) {
85
+ console.log('');
86
+ const syncSpinner = ora('Auto-syncing skills...').start();
87
+ try {
88
+ const { execSync } = await import('child_process');
89
+ execSync('npx killer-skills sync', { stdio: 'pipe' });
90
+ syncSpinner.succeed(chalk.green('Skills synced to AGENTS.md'));
91
+ }
92
+ catch {
93
+ syncSpinner.warn(chalk.yellow('Auto-sync failed. Run manually: killer sync'));
94
+ }
95
+ }
96
+ }
97
+ catch (error) {
98
+ spinner.fail(chalk.red(`Failed to install ${source}`));
99
+ console.error(chalk.red(`\nError: ${error.message}`));
100
+ if (error.message.includes('404') || error.message.includes('Not Found')) {
101
+ console.log(chalk.yellow('\n💡 Make sure the repository exists and contains a SKILL.md file.'));
102
+ }
103
+ process.exit(1);
104
+ }
105
+ });
106
+ /**
107
+ * Install from local path
108
+ */
109
+ async function installFromLocal(source, targetIDEs, scope, spinner) {
110
+ const localPath = path.resolve(expandTilde(source));
111
+ if (!fs.existsSync(localPath)) {
112
+ throw new Error(`Path not found: ${localPath}`);
113
+ }
114
+ const skillMdPath = fs.statSync(localPath).isDirectory()
115
+ ? path.join(localPath, 'SKILL.md')
116
+ : localPath;
117
+ if (!fs.existsSync(skillMdPath)) {
118
+ throw new Error(`No SKILL.md found at ${localPath}`);
119
+ }
120
+ const skillDir = path.dirname(skillMdPath);
121
+ const skillName = path.basename(skillDir);
122
+ spinner.text = `Installing ${skillName} from local path...`;
123
+ const installed = [];
124
+ for (const ide of targetIDEs) {
125
+ const config = IDE_CONFIG[ide];
126
+ try {
127
+ const installPath = getInstallPath(ide, scope, skillName);
128
+ // Copy entire skill directory
129
+ await fs.ensureDir(installPath);
130
+ await fs.copy(skillDir, installPath, { overwrite: true });
131
+ // Write metadata
132
+ const metadata = buildLocalMetadata(skillName, localPath);
133
+ writeSkillMetadata(installPath, metadata);
134
+ installed.push(config.name);
135
+ }
136
+ catch {
137
+ // Skip if path not available
138
+ }
139
+ }
140
+ return { skillName, sourceType: 'local', installed };
141
+ }
142
+ /**
143
+ * Install from GitHub
144
+ */
145
+ async function installFromGitHub(source, targetIDEs, scope, spinner) {
146
+ spinner.text = 'Parsing repository...';
147
+ const normalizedSource = normalizeGitHubUrl(source);
148
+ const { owner, repo } = parseRepoString(normalizedSource);
149
+ spinner.text = `Finding skill in ${owner}/${repo}...`;
150
+ const skillFile = await findSkillFile(owner, repo);
151
+ const skillDir = path.dirname(skillFile.path);
152
+ const skillName = skillDir === '.' ? repo : path.basename(skillDir);
153
+ spinner.text = `Downloading ${skillName}...`;
154
+ const basePath = skillDir === '.' ? '' : skillDir;
155
+ const files = await downloadSkillFiles(owner, repo, basePath);
156
+ spinner.text = `Installing ${skillName}...`;
157
+ const installed = [];
158
+ for (const ide of targetIDEs) {
159
+ const config = IDE_CONFIG[ide];
160
+ try {
161
+ const installPath = getInstallPath(ide, scope, skillName);
162
+ await fs.ensureDir(installPath);
163
+ // Write all downloaded files
164
+ for (const file of files) {
165
+ const filePath = path.join(installPath, file.path);
166
+ await fs.ensureDir(path.dirname(filePath));
167
+ await fs.writeFile(filePath, file.content);
168
+ }
169
+ // Write metadata
170
+ const repoUrl = `https://github.com/${owner}/${repo}`;
171
+ const metadata = buildGitMetadata(skillName, repoUrl, basePath || undefined);
172
+ writeSkillMetadata(installPath, metadata);
173
+ installed.push(config.name);
174
+ }
175
+ catch {
176
+ // Skip if path not available
177
+ }
178
+ }
179
+ return { skillName, sourceType: 'github', installed };
180
+ }
181
+ /**
182
+ * Install from registry
183
+ */
184
+ async function installFromRegistry(skillName, targetIDEs, scope, spinner) {
185
+ spinner.text = 'Checking skill registry...';
186
+ const meta = await fetchSkillMeta(skillName);
187
+ let installed = [];
188
+ if (meta && meta.repo) {
189
+ // Found in registry - download from GitHub
190
+ spinner.text = `Found ${skillName} in registry, downloading...`;
191
+ const result = await installFromGitHub(meta.repo, targetIDEs, scope, spinner);
192
+ // Update metadata to mark as registry source
193
+ for (const ide of targetIDEs) {
194
+ try {
195
+ const installPath = getInstallPath(ide, scope, skillName);
196
+ const metadata = buildRegistryMetadata(skillName, meta.repo);
197
+ writeSkillMetadata(installPath, metadata);
198
+ }
199
+ catch {
200
+ // Skip
201
+ }
202
+ }
203
+ installed = result.installed;
204
+ }
205
+ else {
206
+ // Not in registry - create placeholder
207
+ spinner.text = `Creating placeholder for ${skillName}...`;
208
+ const skillContent = `---
209
+ name: ${skillName}
210
+ description: Installed via Killer-Skills CLI
211
+ ---
212
+
213
+ # ${skillName}
214
+
215
+ This skill was installed by Killer-Skills.
216
+ `;
217
+ for (const ide of targetIDEs) {
218
+ const config = IDE_CONFIG[ide];
219
+ try {
220
+ const installPath = getInstallPath(ide, scope, skillName);
221
+ await fs.ensureDir(installPath);
222
+ await fs.writeFile(path.join(installPath, 'SKILL.md'), skillContent);
223
+ const metadata = buildRegistryMetadata(skillName, '');
224
+ writeSkillMetadata(installPath, metadata);
225
+ installed.push(config.name);
226
+ }
227
+ catch {
228
+ // Skip if path not available
229
+ }
230
+ }
231
+ }
232
+ return { skillName, sourceType: 'registry', installed };
233
+ }
234
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * List Command (Refactored)
3
+ *
4
+ * Lists all installed skills across all supported IDEs.
5
+ * Uses the unified skills discovery from utils/skills.ts.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const listCommand: Command;
9
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SAoElB,CAAC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * List Command (Refactored)
3
+ *
4
+ * Lists all installed skills across all supported IDEs.
5
+ * Uses the unified skills discovery from utils/skills.ts.
6
+ */
7
+ import { Command } from 'commander';
8
+ import chalk from 'chalk';
9
+ import { findAllSkills } from '../utils/skills.js';
10
+ import { hasSkillMetadata, readSkillMetadata } from '../utils/skill-metadata.js';
11
+ import { dirname } from 'path';
12
+ export const listCommand = new Command('list')
13
+ .description('List all installed skills')
14
+ .option('-i, --ide <ide>', 'Filter by specific IDE')
15
+ .option('--verbose', 'Show detailed information including paths')
16
+ .action(async (options) => {
17
+ console.log(chalk.bold('\n📦 Installed Skills\n'));
18
+ const skills = findAllSkills(options.ide);
19
+ if (skills.length === 0) {
20
+ console.log(chalk.yellow('No skills installed yet.'));
21
+ console.log('');
22
+ console.log('Install skills:');
23
+ console.log(chalk.cyan(' killer install <skill-name>'));
24
+ console.log(chalk.cyan(' killer install owner/repo'));
25
+ console.log('');
26
+ console.log('Or run:');
27
+ console.log(chalk.cyan(' killer sync'));
28
+ console.log(chalk.dim(' to make existing skills discoverable by AI'));
29
+ return;
30
+ }
31
+ // Sort: project skills first, then global, alphabetically within each
32
+ const sorted = skills.sort((a, b) => {
33
+ if (a.location !== b.location) {
34
+ return a.location === 'project' ? -1 : 1;
35
+ }
36
+ return a.name.localeCompare(b.name);
37
+ });
38
+ // Group by location
39
+ const projectSkills = sorted.filter(s => s.location === 'project');
40
+ const globalSkills = sorted.filter(s => s.location === 'global');
41
+ // Display project skills
42
+ if (projectSkills.length > 0) {
43
+ console.log(chalk.blue.bold('Project Skills'));
44
+ console.log(chalk.dim('─'.repeat(50)));
45
+ for (const skill of projectSkills) {
46
+ displaySkill(skill, options.verbose);
47
+ }
48
+ console.log('');
49
+ }
50
+ // Display global skills
51
+ if (globalSkills.length > 0) {
52
+ console.log(chalk.dim.bold('Global Skills'));
53
+ console.log(chalk.dim('─'.repeat(50)));
54
+ for (const skill of globalSkills) {
55
+ displaySkill(skill, options.verbose);
56
+ }
57
+ console.log('');
58
+ }
59
+ // Summary
60
+ console.log(chalk.dim('─'.repeat(50)));
61
+ console.log(chalk.dim(`Summary: ${chalk.blue(`${projectSkills.length} project`)}, ` +
62
+ `${chalk.white(`${globalSkills.length} global`)} ` +
63
+ `(${skills.length} total)`));
64
+ // Tips
65
+ console.log('');
66
+ console.log(chalk.dim('💡 Commands:'));
67
+ console.log(chalk.dim(` killer sync - Make skills discoverable by AI`));
68
+ console.log(chalk.dim(` killer read <s> - Read skill content`));
69
+ console.log(chalk.dim(` killer manage - Interactively manage skills`));
70
+ });
71
+ /**
72
+ * Display a single skill entry
73
+ */
74
+ function displaySkill(skill, verbose) {
75
+ const locationBadge = skill.location === 'project'
76
+ ? chalk.blue('●')
77
+ : chalk.dim('○');
78
+ console.log(` ${locationBadge} ${chalk.bold(skill.name)}`);
79
+ if (skill.description) {
80
+ // Truncate long descriptions
81
+ const desc = skill.description.length > 60
82
+ ? skill.description.slice(0, 57) + '...'
83
+ : skill.description;
84
+ console.log(chalk.dim(` ${desc}`));
85
+ }
86
+ if (verbose) {
87
+ console.log(chalk.dim(` Path: ${skill.path}`));
88
+ // Check for metadata
89
+ const skillDir = dirname(skill.path);
90
+ if (hasSkillMetadata(skillDir)) {
91
+ const metadata = readSkillMetadata(skillDir);
92
+ if (metadata) {
93
+ console.log(chalk.dim(` Source: ${metadata.sourceType} (${metadata.source})`));
94
+ console.log(chalk.dim(` Installed: ${new Date(metadata.installedAt).toLocaleDateString()}`));
95
+ }
96
+ }
97
+ else {
98
+ console.log(chalk.yellow(` ⚠ No metadata (re-install to enable updates)`));
99
+ }
100
+ }
101
+ console.log('');
102
+ }
103
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Manage Command
3
+ *
4
+ * Interactively manage (remove) installed skills.
5
+ * Inspired by OpenSkills' manage command.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const manageCommand: Command;
9
+ //# sourceMappingURL=manage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../src/commands/manage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SAwHpB,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Manage Command
3
+ *
4
+ * Interactively manage (remove) installed skills.
5
+ * Inspired by OpenSkills' manage command.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { rmSync } from 'fs';
9
+ import chalk from 'chalk';
10
+ import ora from 'ora';
11
+ import { checkbox, confirm } from '@inquirer/prompts';
12
+ import { findAllSkills, getSkillBaseDir } from '../utils/skills.js';
13
+ export const manageCommand = new Command('manage')
14
+ .description('Interactively manage installed skills')
15
+ .option('--remove-all', 'Remove all skills (use with caution)')
16
+ .action(async (options) => {
17
+ const skills = findAllSkills();
18
+ if (skills.length === 0) {
19
+ console.log(chalk.yellow('No skills installed.'));
20
+ console.log('');
21
+ console.log('Install skills:');
22
+ console.log(chalk.cyan(' killer install <skill-name>'));
23
+ return;
24
+ }
25
+ // Handle --remove-all flag
26
+ if (options.removeAll) {
27
+ const confirmed = await confirm({
28
+ message: chalk.red(`Are you sure you want to remove ALL ${skills.length} skills?`),
29
+ default: false,
30
+ });
31
+ if (confirmed) {
32
+ const spinner = ora('Removing all skills...').start();
33
+ let removed = 0;
34
+ for (const skill of skills) {
35
+ try {
36
+ const skillDir = getSkillBaseDir(skill.path);
37
+ rmSync(skillDir, { recursive: true, force: true });
38
+ removed++;
39
+ }
40
+ catch {
41
+ // Skip errors
42
+ }
43
+ }
44
+ spinner.succeed(chalk.green(`Removed ${removed} skill(s)`));
45
+ }
46
+ else {
47
+ console.log(chalk.yellow('Cancelled.'));
48
+ }
49
+ return;
50
+ }
51
+ // Sort: project first, then global
52
+ const sorted = skills.sort((a, b) => {
53
+ if (a.location !== b.location) {
54
+ return a.location === 'project' ? -1 : 1;
55
+ }
56
+ return a.name.localeCompare(b.name);
57
+ });
58
+ try {
59
+ // Create choices for checkbox
60
+ const choices = sorted.map(skill => ({
61
+ name: formatSkillChoice(skill),
62
+ value: skill,
63
+ checked: false, // Nothing checked by default
64
+ }));
65
+ console.log('');
66
+ console.log(chalk.dim('Use ↑/↓ to navigate, Space to select, Enter to confirm'));
67
+ console.log('');
68
+ const toRemove = await checkbox({
69
+ message: 'Select skills to remove',
70
+ choices,
71
+ pageSize: 15,
72
+ });
73
+ if (toRemove.length === 0) {
74
+ console.log(chalk.yellow('No skills selected for removal.'));
75
+ return;
76
+ }
77
+ // Confirm removal
78
+ const confirmed = await confirm({
79
+ message: `Remove ${toRemove.length} skill(s)?`,
80
+ default: true,
81
+ });
82
+ if (!confirmed) {
83
+ console.log(chalk.yellow('Cancelled.'));
84
+ return;
85
+ }
86
+ // Remove selected skills
87
+ const spinner = ora('Removing skills...').start();
88
+ let removed = 0;
89
+ for (const skill of toRemove) {
90
+ try {
91
+ const skillDir = getSkillBaseDir(skill.path);
92
+ rmSync(skillDir, { recursive: true, force: true });
93
+ removed++;
94
+ }
95
+ catch (error) {
96
+ console.log(chalk.red(` Failed to remove ${skill.name}: ${error}`));
97
+ }
98
+ }
99
+ spinner.succeed(chalk.green(`Removed ${removed} skill(s)`));
100
+ // Show what was removed
101
+ console.log('');
102
+ console.log(chalk.dim('Removed:'));
103
+ for (const skill of toRemove) {
104
+ const locationLabel = skill.location === 'project'
105
+ ? chalk.blue('project')
106
+ : chalk.dim('global');
107
+ console.log(` ${chalk.red('✕')} ${skill.name} (${locationLabel})`);
108
+ }
109
+ // Reminder to sync
110
+ console.log('');
111
+ console.log(chalk.dim('💡 Run `killer sync` to update AGENTS.md'));
112
+ }
113
+ catch (error) {
114
+ // Handle Ctrl+C gracefully
115
+ if (error.name === 'ExitPromptError') {
116
+ console.log(chalk.yellow('\n\nCancelled by user'));
117
+ process.exit(0);
118
+ }
119
+ throw error;
120
+ }
121
+ });
122
+ /**
123
+ * Format skill choice for display
124
+ */
125
+ function formatSkillChoice(skill) {
126
+ const locationLabel = skill.location === 'project'
127
+ ? chalk.blue('(project)')
128
+ : chalk.dim('(global)');
129
+ const name = chalk.bold(skill.name.padEnd(25));
130
+ return `${name} ${locationLabel}`;
131
+ }
132
+ //# sourceMappingURL=manage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage.js","sourceRoot":"","sources":["../../src/commands/manage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Outdated Command
3
+ *
4
+ * Check for outdated skills that can be updated.
5
+ * Compares installed skills against their source repositories.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const outdatedCommand: Command;
9
+ //# sourceMappingURL=outdated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outdated.d.ts","sourceRoot":"","sources":["../../src/commands/outdated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,eAAe,SAmItB,CAAC"}