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,168 @@
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
+ import chalk from 'chalk';
9
+ import ora from 'ora';
10
+ import path from 'path';
11
+ import { findAllSkills } from '../utils/skills.js';
12
+ import { readSkillMetadata } from '../utils/skill-metadata.js';
13
+ import { fetchGitHubAPI } from '../utils/github.js';
14
+ export const outdatedCommand = new Command('outdated')
15
+ .description('Check for outdated skills that can be updated')
16
+ .option('-v, --verbose', 'Show detailed information')
17
+ .action(async (options) => {
18
+ const spinner = ora('Checking for updates...').start();
19
+ try {
20
+ const skills = findAllSkills();
21
+ const results = [];
22
+ spinner.text = `Checking ${skills.length} skill(s)...`;
23
+ for (const skill of skills) {
24
+ const skillDir = path.dirname(skill.path);
25
+ const metadata = readSkillMetadata(skillDir);
26
+ if (!metadata) {
27
+ results.push({
28
+ name: skill.name,
29
+ path: skillDir,
30
+ sourceType: 'unknown',
31
+ installedAt: 'unknown',
32
+ isOutdated: false,
33
+ updateAvailable: false,
34
+ error: 'No metadata (re-install to enable updates)'
35
+ });
36
+ continue;
37
+ }
38
+ const result = {
39
+ name: skill.name,
40
+ path: skillDir,
41
+ sourceType: metadata.sourceType,
42
+ installedAt: metadata.installedAt,
43
+ currentCommit: metadata.commitHash,
44
+ isOutdated: false,
45
+ updateAvailable: false
46
+ };
47
+ // Check if update is available for git sources
48
+ if (metadata.sourceType === 'git' && metadata.repoUrl) {
49
+ try {
50
+ const latestCommit = await getLatestCommit(metadata.repoUrl);
51
+ result.latestCommit = latestCommit;
52
+ if (metadata.commitHash && latestCommit) {
53
+ result.isOutdated = metadata.commitHash !== latestCommit;
54
+ result.updateAvailable = result.isOutdated;
55
+ }
56
+ else {
57
+ // No commit hash stored, check by date
58
+ result.updateAvailable = true; // Assume updates might be available
59
+ }
60
+ }
61
+ catch (e) {
62
+ result.error = e.message;
63
+ }
64
+ }
65
+ else if (metadata.sourceType === 'local') {
66
+ result.updateAvailable = true; // Local sources can always be refreshed
67
+ }
68
+ results.push(result);
69
+ }
70
+ spinner.stop();
71
+ // Display results
72
+ const outdated = results.filter(r => r.updateAvailable && !r.error);
73
+ const unknown = results.filter(r => r.error);
74
+ const upToDate = results.filter(r => !r.updateAvailable && !r.error);
75
+ console.log(chalk.bold('\n📦 Skill Update Status\n'));
76
+ console.log(chalk.dim('─'.repeat(60)));
77
+ // Outdated skills
78
+ if (outdated.length > 0) {
79
+ console.log(chalk.yellow.bold(`\n⚠️ Updates Available (${outdated.length})\n`));
80
+ for (const skill of outdated) {
81
+ console.log(` ${chalk.yellow('↑')} ${chalk.bold(skill.name)}`);
82
+ if (options.verbose) {
83
+ console.log(chalk.dim(` Source: ${skill.sourceType}`));
84
+ console.log(chalk.dim(` Installed: ${formatDate(skill.installedAt)}`));
85
+ if (skill.currentCommit) {
86
+ console.log(chalk.dim(` Current: ${skill.currentCommit.slice(0, 7)}`));
87
+ }
88
+ if (skill.latestCommit) {
89
+ console.log(chalk.dim(` Latest: ${skill.latestCommit.slice(0, 7)}`));
90
+ }
91
+ }
92
+ }
93
+ }
94
+ // Up to date
95
+ if (upToDate.length > 0) {
96
+ console.log(chalk.green.bold(`\n✓ Up to Date (${upToDate.length})\n`));
97
+ for (const skill of upToDate) {
98
+ console.log(` ${chalk.green('✓')} ${skill.name}`);
99
+ if (options.verbose) {
100
+ console.log(chalk.dim(` Installed: ${formatDate(skill.installedAt)}`));
101
+ }
102
+ }
103
+ }
104
+ // Unknown / errors
105
+ if (unknown.length > 0) {
106
+ console.log(chalk.dim.bold(`\n? Cannot Check (${unknown.length})\n`));
107
+ for (const skill of unknown) {
108
+ console.log(` ${chalk.dim('?')} ${skill.name}`);
109
+ if (options.verbose && skill.error) {
110
+ console.log(chalk.dim(` ${skill.error}`));
111
+ }
112
+ }
113
+ }
114
+ console.log(chalk.dim('\n─'.repeat(60)));
115
+ console.log(chalk.dim(`Total: ${results.length} skill(s)`));
116
+ // Summary and next steps
117
+ if (outdated.length > 0) {
118
+ console.log(chalk.yellow(`\n💡 Run ${chalk.cyan('killer update')} to update all skills`));
119
+ console.log(chalk.dim(` Or: killer update ${outdated.map(s => s.name).join(' ')}`));
120
+ }
121
+ else if (unknown.length === results.length) {
122
+ console.log(chalk.dim('\n💡 Re-install skills to enable update tracking:'));
123
+ console.log(chalk.cyan(' killer install <skill-name>'));
124
+ }
125
+ else {
126
+ console.log(chalk.green('\n✅ All skills are up to date!'));
127
+ }
128
+ }
129
+ catch (error) {
130
+ spinner.fail(chalk.red('Failed to check for updates'));
131
+ console.error(chalk.red(`\nError: ${error.message}`));
132
+ process.exit(1);
133
+ }
134
+ });
135
+ /**
136
+ * Get latest commit hash from a GitHub repo
137
+ */
138
+ async function getLatestCommit(repoUrl) {
139
+ // Parse repo URL
140
+ const match = repoUrl.match(/github\.com[\/:]([^\/]+)\/([^\/\s.]+)/);
141
+ if (!match)
142
+ return undefined;
143
+ const [, owner, repo] = match;
144
+ const cleanRepo = repo.replace('.git', '');
145
+ try {
146
+ const data = await fetchGitHubAPI(`/repos/${owner}/${cleanRepo}/commits?per_page=1`);
147
+ if (Array.isArray(data) && data.length > 0) {
148
+ return data[0].sha;
149
+ }
150
+ }
151
+ catch {
152
+ // Ignore errors
153
+ }
154
+ return undefined;
155
+ }
156
+ /**
157
+ * Format date string
158
+ */
159
+ function formatDate(dateStr) {
160
+ try {
161
+ const date = new Date(dateStr);
162
+ return date.toLocaleDateString();
163
+ }
164
+ catch {
165
+ return dateStr;
166
+ }
167
+ }
168
+ //# sourceMappingURL=outdated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outdated.js","sourceRoot":"","sources":["../../src/commands/outdated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Plugin Command
3
+ *
4
+ * Manage CLI plugins - install, list, remove.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const pluginCommand: Command;
8
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAoFpB,CAAC"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Plugin Command
3
+ *
4
+ * Manage CLI plugins - install, list, remove.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import { loadPlugins, installPlugin, uninstallPlugin } from '../utils/plugins.js';
10
+ export const pluginCommand = new Command('plugin')
11
+ .description('Manage CLI plugins')
12
+ .argument('[action]', 'Action: list, add, remove')
13
+ .argument('[source]', 'Plugin source or name')
14
+ .action(async (action, source) => {
15
+ const spinner = ora();
16
+ try {
17
+ // Default to list
18
+ if (!action || action === 'list') {
19
+ spinner.start('Loading plugins...');
20
+ const plugins = await loadPlugins();
21
+ spinner.stop();
22
+ console.log(chalk.bold('\n🔌 Installed Plugins\n'));
23
+ console.log(chalk.dim('─'.repeat(50)));
24
+ if (plugins.length === 0) {
25
+ console.log(chalk.dim(' No plugins installed'));
26
+ console.log(chalk.dim('\n Install a plugin:'));
27
+ console.log(chalk.cyan(' killer plugin add ./my-plugin'));
28
+ }
29
+ else {
30
+ for (const plugin of plugins) {
31
+ const typeIcon = getTypeIcon(plugin.type);
32
+ console.log(` ${typeIcon} ${chalk.bold(plugin.name)} v${plugin.version}`);
33
+ console.log(chalk.dim(` ${plugin.description}`));
34
+ console.log(chalk.dim(` Type: ${plugin.type}`));
35
+ console.log('');
36
+ }
37
+ }
38
+ console.log(chalk.dim('─'.repeat(50)));
39
+ return;
40
+ }
41
+ // Install plugin
42
+ if (action === 'add' || action === 'install') {
43
+ if (!source) {
44
+ console.log(chalk.red('Please specify a plugin source'));
45
+ console.log(chalk.dim('Example: killer plugin add ./my-plugin'));
46
+ process.exit(1);
47
+ }
48
+ spinner.start(`Installing plugin from ${source}...`);
49
+ const result = await installPlugin(source);
50
+ if (result.success) {
51
+ spinner.succeed(chalk.green(result.message));
52
+ }
53
+ else {
54
+ spinner.fail(chalk.red(result.message));
55
+ process.exit(1);
56
+ }
57
+ return;
58
+ }
59
+ // Remove plugin
60
+ if (action === 'remove' || action === 'uninstall') {
61
+ if (!source) {
62
+ console.log(chalk.red('Please specify a plugin name'));
63
+ console.log(chalk.dim('Example: killer plugin remove my-plugin'));
64
+ process.exit(1);
65
+ }
66
+ spinner.start(`Removing plugin ${source}...`);
67
+ const result = await uninstallPlugin(source);
68
+ if (result.success) {
69
+ spinner.succeed(chalk.green(result.message));
70
+ }
71
+ else {
72
+ spinner.fail(chalk.red(result.message));
73
+ process.exit(1);
74
+ }
75
+ return;
76
+ }
77
+ // Unknown action
78
+ console.log(chalk.yellow(`Unknown action: ${action}`));
79
+ console.log(chalk.dim('Available actions: list, add, remove'));
80
+ }
81
+ catch (error) {
82
+ spinner.fail(chalk.red('Plugin operation failed'));
83
+ console.error(chalk.red(`\nError: ${error.message}`));
84
+ process.exit(1);
85
+ }
86
+ });
87
+ /**
88
+ * Get icon for plugin type
89
+ */
90
+ function getTypeIcon(type) {
91
+ switch (type) {
92
+ case 'command': return '⚡';
93
+ case 'ide-adapter': return '🖥️';
94
+ case 'hook': return '🪝';
95
+ default: return '📦';
96
+ }
97
+ }
98
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Publish Command
3
+ *
4
+ * Publish a skill to the Killer-Skills registry or prepare for GitHub publication.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const publishCommand: Command;
8
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,cAAc,SAsLrB,CAAC"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Publish Command
3
+ *
4
+ * Publish a skill to the Killer-Skills registry or prepare for GitHub publication.
5
+ */
6
+ import { Command } from 'commander';
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import fs from 'fs-extra';
10
+ import path from 'path';
11
+ import { execSync } from 'child_process';
12
+ export const publishCommand = new Command('publish')
13
+ .argument('[path]', 'Path to skill directory', '.')
14
+ .description('Publish a skill to GitHub or prepare for registry')
15
+ .option('--dry-run', 'Validate without publishing')
16
+ .option('--github', 'Initialize as GitHub repository')
17
+ .option('-m, --message <msg>', 'Commit message', 'Initial skill commit')
18
+ .action(async (skillPath, options) => {
19
+ const spinner = ora('Validating skill...').start();
20
+ try {
21
+ const absolutePath = path.resolve(skillPath);
22
+ // Validate skill structure
23
+ const skillMdPath = path.join(absolutePath, 'SKILL.md');
24
+ if (!await fs.pathExists(skillMdPath)) {
25
+ spinner.fail(chalk.red('No SKILL.md found'));
26
+ console.log(chalk.dim(`\nExpected: ${skillMdPath}`));
27
+ console.log(chalk.dim('Create a skill first: killer create <name>'));
28
+ process.exit(1);
29
+ }
30
+ // Parse SKILL.md
31
+ const content = await fs.readFile(skillMdPath, 'utf-8');
32
+ const meta = parseSkillMeta(content);
33
+ if (!meta.name) {
34
+ spinner.fail(chalk.red('SKILL.md missing required "name" field'));
35
+ process.exit(1);
36
+ }
37
+ if (!meta.description) {
38
+ spinner.fail(chalk.red('SKILL.md missing required "description" field'));
39
+ process.exit(1);
40
+ }
41
+ spinner.succeed('Skill validated');
42
+ // Display skill info
43
+ console.log('');
44
+ console.log(chalk.bold('📦 Skill Information'));
45
+ console.log(chalk.dim('─'.repeat(50)));
46
+ console.log(` ${chalk.bold('Name:')} ${meta.name}`);
47
+ console.log(` ${chalk.bold('Description:')} ${meta.description}`);
48
+ if (meta.version)
49
+ console.log(` ${chalk.bold('Version:')} ${meta.version}`);
50
+ if (meta.author)
51
+ console.log(` ${chalk.bold('Author:')} ${meta.author}`);
52
+ if (meta.tags?.length)
53
+ console.log(` ${chalk.bold('Tags:')} ${meta.tags.join(', ')}`);
54
+ console.log(` ${chalk.bold('Path:')} ${absolutePath}`);
55
+ console.log(chalk.dim('─'.repeat(50)));
56
+ // Validate structure
57
+ spinner.start('Checking skill structure...');
58
+ const issues = [];
59
+ const warnings = [];
60
+ // Check for common directories
61
+ const hasScripts = await fs.pathExists(path.join(absolutePath, 'scripts'));
62
+ const hasReferences = await fs.pathExists(path.join(absolutePath, 'references'));
63
+ const hasExamples = await fs.pathExists(path.join(absolutePath, 'examples'));
64
+ const hasAssets = await fs.pathExists(path.join(absolutePath, 'assets'));
65
+ // Check content quality
66
+ if (content.length < 200) {
67
+ warnings.push('SKILL.md content seems short (< 200 chars)');
68
+ }
69
+ if (!content.includes('## ')) {
70
+ warnings.push('SKILL.md has no sections (## headers)');
71
+ }
72
+ spinner.succeed('Structure validated');
73
+ if (warnings.length > 0) {
74
+ console.log(chalk.yellow('\n⚠️ Warnings:'));
75
+ warnings.forEach(w => console.log(chalk.yellow(` • ${w}`)));
76
+ }
77
+ if (issues.length > 0) {
78
+ console.log(chalk.red('\n❌ Issues:'));
79
+ issues.forEach(i => console.log(chalk.red(` • ${i}`)));
80
+ process.exit(1);
81
+ }
82
+ // Show structure summary
83
+ console.log(chalk.dim('\n📁 Structure:'));
84
+ console.log(chalk.dim(` SKILL.md ✓`));
85
+ console.log(chalk.dim(` scripts/ ${hasScripts ? '✓' : '○'}`));
86
+ console.log(chalk.dim(` references/ ${hasReferences ? '✓' : '○'}`));
87
+ console.log(chalk.dim(` examples/ ${hasExamples ? '✓' : '○'}`));
88
+ console.log(chalk.dim(` assets/ ${hasAssets ? '✓' : '○'}`));
89
+ // Dry run stops here
90
+ if (options.dryRun) {
91
+ console.log(chalk.green('\n✅ Dry run complete. Skill is ready to publish.'));
92
+ return;
93
+ }
94
+ // GitHub initialization
95
+ if (options.github) {
96
+ spinner.start('Initializing GitHub repository...');
97
+ const gitDir = path.join(absolutePath, '.git');
98
+ const isGitRepo = await fs.pathExists(gitDir);
99
+ if (!isGitRepo) {
100
+ execSync('git init', { cwd: absolutePath, stdio: 'pipe' });
101
+ }
102
+ // Create .gitignore if not exists
103
+ const gitignorePath = path.join(absolutePath, '.gitignore');
104
+ if (!await fs.pathExists(gitignorePath)) {
105
+ await fs.writeFile(gitignorePath, `# OS
106
+ .DS_Store
107
+ Thumbs.db
108
+
109
+ # IDE
110
+ .idea/
111
+ .vscode/
112
+ *.swp
113
+
114
+ # Dependencies
115
+ node_modules/
116
+ `);
117
+ }
118
+ // Create README if not exists
119
+ const readmePath = path.join(absolutePath, 'README.md');
120
+ if (!await fs.pathExists(readmePath)) {
121
+ await fs.writeFile(readmePath, `# ${meta.name}
122
+
123
+ ${meta.description}
124
+
125
+ ## Installation
126
+
127
+ \`\`\`bash
128
+ npx killer-skills install ${meta.name}
129
+ \`\`\`
130
+
131
+ ## Usage
132
+
133
+ See [SKILL.md](./SKILL.md) for detailed instructions.
134
+
135
+ ## License
136
+
137
+ MIT
138
+ `);
139
+ }
140
+ // Add and commit
141
+ try {
142
+ execSync('git add -A', { cwd: absolutePath, stdio: 'pipe' });
143
+ execSync(`git commit -m "${options.message}"`, { cwd: absolutePath, stdio: 'pipe' });
144
+ }
145
+ catch {
146
+ // Already committed or nothing to commit
147
+ }
148
+ spinner.succeed('GitHub repository initialized');
149
+ console.log(chalk.green('\n✅ Ready for GitHub!'));
150
+ console.log(chalk.dim('\nNext steps:'));
151
+ console.log(chalk.cyan(` 1. Create a new repo on GitHub: ${meta.name}`));
152
+ console.log(chalk.cyan(' 2. Add remote: git remote add origin <your-repo-url>'));
153
+ console.log(chalk.cyan(' 3. Push: git push -u origin main'));
154
+ console.log(chalk.dim('\nThen users can install with:'));
155
+ console.log(chalk.cyan(` killer install <your-username>/${meta.name}`));
156
+ }
157
+ else {
158
+ // Registry publication info
159
+ console.log(chalk.green('\n✅ Skill is ready to publish!'));
160
+ console.log(chalk.dim('\nTo publish to GitHub:'));
161
+ console.log(chalk.cyan(` killer publish ${skillPath} --github`));
162
+ console.log(chalk.dim('\nTo submit to the official registry:'));
163
+ console.log(chalk.cyan(' Visit: https://github.com/your-org/killer-skills/issues/new'));
164
+ }
165
+ }
166
+ catch (error) {
167
+ spinner.fail(chalk.red('Publish failed'));
168
+ console.error(chalk.red(`\nError: ${error.message}`));
169
+ process.exit(1);
170
+ }
171
+ });
172
+ /**
173
+ * Parse SKILL.md frontmatter
174
+ */
175
+ function parseSkillMeta(content) {
176
+ const meta = { name: '', description: '' };
177
+ const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
178
+ if (!frontmatterMatch)
179
+ return meta;
180
+ const frontmatter = frontmatterMatch[1];
181
+ const nameMatch = frontmatter.match(/^name:\s*(.+)$/m);
182
+ if (nameMatch)
183
+ meta.name = nameMatch[1].trim().replace(/^["']|["']$/g, '');
184
+ const descMatch = frontmatter.match(/^description:\s*(.+)$/m);
185
+ if (descMatch)
186
+ meta.description = descMatch[1].trim().replace(/^["']|["']$/g, '');
187
+ const versionMatch = frontmatter.match(/^version:\s*(.+)$/m);
188
+ if (versionMatch)
189
+ meta.version = versionMatch[1].trim();
190
+ const authorMatch = frontmatter.match(/^author:\s*(.+)$/m);
191
+ if (authorMatch)
192
+ meta.author = authorMatch[1].trim();
193
+ const tagsMatch = frontmatter.match(/^tags:\s*\[(.+)\]$/m);
194
+ if (tagsMatch) {
195
+ meta.tags = tagsMatch[1].split(',').map(t => t.trim().replace(/^["']|["']$/g, ''));
196
+ }
197
+ return meta;
198
+ }
199
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Read Command
3
+ *
4
+ * Outputs skill content to stdout for AI agents to consume dynamically.
5
+ * Compatible with OpenSkills format for cross-tool interoperability.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const readCommand: Command;
9
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SA+DlB,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Read Command
3
+ *
4
+ * Outputs skill content to stdout for AI agents to consume dynamically.
5
+ * Compatible with OpenSkills format for cross-tool interoperability.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { readFileSync } from 'fs';
9
+ import chalk from 'chalk';
10
+ import { findSkill, normalizeSkillNames, getSkillBaseDir } from '../utils/skills.js';
11
+ export const readCommand = new Command('read')
12
+ .argument('<skill-names...>', 'Skill name(s) to read (comma-separated or space-separated)')
13
+ .description('Read skill content to stdout (for AI agents)')
14
+ .action((skillNamesArg) => {
15
+ const skillNames = normalizeSkillNames(skillNamesArg);
16
+ if (skillNames.length === 0) {
17
+ console.error(chalk.red('Error: No skill names provided'));
18
+ process.exit(1);
19
+ }
20
+ const resolved = [];
21
+ const missing = [];
22
+ // Resolve all skill paths
23
+ for (const name of skillNames) {
24
+ const skill = findSkill(name);
25
+ if (!skill) {
26
+ missing.push(name);
27
+ continue;
28
+ }
29
+ resolved.push({
30
+ name,
31
+ path: skill.path,
32
+ baseDir: getSkillBaseDir(skill.path),
33
+ });
34
+ }
35
+ // Report missing skills
36
+ if (missing.length > 0) {
37
+ console.error(chalk.red(`Error: Skill(s) not found: ${missing.join(', ')}`));
38
+ console.error('');
39
+ console.error('Searched in skill directories for all supported IDEs.');
40
+ console.error('');
41
+ console.error('Install skills:');
42
+ console.error(chalk.cyan(' killer install <skill-name>'));
43
+ console.error(chalk.cyan(' killer install owner/repo'));
44
+ process.exit(1);
45
+ }
46
+ // Output each skill in standard format
47
+ for (const { name, path, baseDir } of resolved) {
48
+ try {
49
+ const content = readFileSync(path, 'utf-8');
50
+ // Output in OpenSkills-compatible format
51
+ console.log(`Reading: ${name}`);
52
+ console.log(`Base directory: ${baseDir}`);
53
+ console.log('');
54
+ console.log(content);
55
+ console.log('');
56
+ console.log(`Skill read: ${name}`);
57
+ // Add separator if multiple skills
58
+ if (resolved.length > 1 && resolved.indexOf({ name, path, baseDir }) < resolved.length - 1) {
59
+ console.log('---');
60
+ console.log('');
61
+ }
62
+ }
63
+ catch (error) {
64
+ console.error(chalk.red(`Error reading skill ${name}: ${error}`));
65
+ process.exit(1);
66
+ }
67
+ }
68
+ });
69
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/commands/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Search Command
3
+ *
4
+ * Search for skills on GitHub and the registry.
5
+ */
6
+ import { Command } from 'commander';
7
+ export declare const searchCommand: Command;
8
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,aAAa,SAoGpB,CAAC"}