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.
- package/CHANGELOG.md +156 -0
- package/LICENSE +21 -0
- package/README.md +360 -0
- package/dist/commands/completion.d.ts +8 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +242 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +24 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +132 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/create.d.ts +9 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +361 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/deps.d.ts +8 -0
- package/dist/commands/deps.d.ts.map +1 -0
- package/dist/commands/deps.js +144 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/do.d.ts +13 -0
- package/dist/commands/do.d.ts.map +1 -0
- package/dist/commands/do.js +223 -0
- package/dist/commands/do.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +191 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +13 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +234 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +9 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +103 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/manage.d.ts +9 -0
- package/dist/commands/manage.d.ts.map +1 -0
- package/dist/commands/manage.js +132 -0
- package/dist/commands/manage.js.map +1 -0
- package/dist/commands/outdated.d.ts +9 -0
- package/dist/commands/outdated.d.ts.map +1 -0
- package/dist/commands/outdated.js +168 -0
- package/dist/commands/outdated.js.map +1 -0
- package/dist/commands/plugin.d.ts +8 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +98 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/publish.d.ts +8 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +199 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/read.d.ts +9 -0
- package/dist/commands/read.d.ts.map +1 -0
- package/dist/commands/read.js +69 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +105 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/stats.d.ts +16 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +137 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/submit.d.ts +9 -0
- package/dist/commands/submit.d.ts.map +1 -0
- package/dist/commands/submit.js +245 -0
- package/dist/commands/submit.js.map +1 -0
- package/dist/commands/sync.d.ts +11 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +134 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +9 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +175 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config/claude.d.ts +2 -0
- package/dist/config/claude.d.ts.map +1 -0
- package/dist/config/claude.js +19 -0
- package/dist/config/claude.js.map +1 -0
- package/dist/config/cursor.d.ts +2 -0
- package/dist/config/cursor.d.ts.map +1 -0
- package/dist/config/cursor.js +18 -0
- package/dist/config/cursor.js.map +1 -0
- package/dist/config/ides.d.ts +19 -0
- package/dist/config/ides.d.ts.map +1 -0
- package/dist/config/ides.js +221 -0
- package/dist/config/ides.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +11 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +264 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/registry.d.ts +8 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +34 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/agents-md.d.ts +33 -0
- package/dist/utils/agents-md.d.ts.map +1 -0
- package/dist/utils/agents-md.js +137 -0
- package/dist/utils/agents-md.js.map +1 -0
- package/dist/utils/dependencies.d.ts +49 -0
- package/dist/utils/dependencies.d.ts.map +1 -0
- package/dist/utils/dependencies.js +141 -0
- package/dist/utils/dependencies.js.map +1 -0
- package/dist/utils/github.d.ts +58 -0
- package/dist/utils/github.d.ts.map +1 -0
- package/dist/utils/github.js +198 -0
- package/dist/utils/github.js.map +1 -0
- package/dist/utils/platform.d.ts +54 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +154 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/plugins.d.ts +50 -0
- package/dist/utils/plugins.d.ts.map +1 -0
- package/dist/utils/plugins.js +115 -0
- package/dist/utils/plugins.js.map +1 -0
- package/dist/utils/prompt-templates.d.ts +47 -0
- package/dist/utils/prompt-templates.d.ts.map +1 -0
- package/dist/utils/prompt-templates.js +160 -0
- package/dist/utils/prompt-templates.js.map +1 -0
- package/dist/utils/skill-metadata.d.ts +55 -0
- package/dist/utils/skill-metadata.d.ts.map +1 -0
- package/dist/utils/skill-metadata.js +82 -0
- package/dist/utils/skill-metadata.js.map +1 -0
- package/dist/utils/skills.d.ts +27 -0
- package/dist/utils/skills.d.ts.map +1 -0
- package/dist/utils/skills.js +163 -0
- package/dist/utils/skills.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search Command
|
|
3
|
+
*
|
|
4
|
+
* Search for skills on GitHub and the registry.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ora from 'ora';
|
|
9
|
+
import { searchSkillsOnGitHub } from '../utils/github.js';
|
|
10
|
+
import { searchSkills as searchRegistry } from '../registry.js';
|
|
11
|
+
export const searchCommand = new Command('search')
|
|
12
|
+
.argument('<query>', 'Search query')
|
|
13
|
+
.description('Search for skills on GitHub and registry')
|
|
14
|
+
.option('-s, --source <source>', 'Search source: all, github, registry', 'all')
|
|
15
|
+
.option('-l, --limit <number>', 'Maximum results per source', '10')
|
|
16
|
+
.action(async (query, options) => {
|
|
17
|
+
const spinner = ora(`Searching for "${query}"...`).start();
|
|
18
|
+
try {
|
|
19
|
+
const results = [];
|
|
20
|
+
const limit = parseInt(options.limit) || 10;
|
|
21
|
+
// Search registry
|
|
22
|
+
if (options.source === 'all' || options.source === 'registry') {
|
|
23
|
+
spinner.text = 'Searching registry...';
|
|
24
|
+
const registryResults = await searchRegistry(query);
|
|
25
|
+
for (const skill of registryResults.slice(0, limit)) {
|
|
26
|
+
results.push({
|
|
27
|
+
name: skill.name,
|
|
28
|
+
description: skill.description || 'No description',
|
|
29
|
+
source: 'registry',
|
|
30
|
+
repo: skill.repo
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Search GitHub
|
|
35
|
+
if (options.source === 'all' || options.source === 'github') {
|
|
36
|
+
spinner.text = 'Searching GitHub...';
|
|
37
|
+
const githubResults = await searchSkillsOnGitHub(query, limit);
|
|
38
|
+
for (const item of githubResults) {
|
|
39
|
+
if (item.repository) {
|
|
40
|
+
// Avoid duplicates
|
|
41
|
+
const repoName = item.repository.full_name || '';
|
|
42
|
+
if (!results.some(r => r.repo === repoName)) {
|
|
43
|
+
results.push({
|
|
44
|
+
name: repoName.split('/').pop() || repoName,
|
|
45
|
+
description: item.repository.description || 'No description',
|
|
46
|
+
source: 'github',
|
|
47
|
+
repo: repoName,
|
|
48
|
+
url: item.repository.html_url
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
spinner.stop();
|
|
55
|
+
if (results.length === 0) {
|
|
56
|
+
console.log(chalk.yellow(`\nNo skills found for "${query}"`));
|
|
57
|
+
console.log(chalk.dim('\n💡 Tips:'));
|
|
58
|
+
console.log(chalk.dim(' • Try a broader search term'));
|
|
59
|
+
console.log(chalk.dim(' • Search GitHub directly: killer search <query> -s github'));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
// Display results
|
|
63
|
+
console.log(chalk.bold(`\n🔍 Found ${results.length} skill(s) for "${query}"\n`));
|
|
64
|
+
// Group by source
|
|
65
|
+
const registryResults = results.filter(r => r.source === 'registry');
|
|
66
|
+
const githubResults = results.filter(r => r.source === 'github');
|
|
67
|
+
if (registryResults.length > 0) {
|
|
68
|
+
console.log(chalk.blue.bold('Registry Skills'));
|
|
69
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
70
|
+
for (const result of registryResults) {
|
|
71
|
+
console.log(` ${chalk.cyan('•')} ${chalk.bold(result.name)}`);
|
|
72
|
+
console.log(chalk.dim(` ${truncate(result.description, 60)}`));
|
|
73
|
+
if (result.repo) {
|
|
74
|
+
console.log(chalk.dim(` Install: killer install ${result.name}`));
|
|
75
|
+
}
|
|
76
|
+
console.log('');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (githubResults.length > 0) {
|
|
80
|
+
console.log(chalk.dim.bold('GitHub Skills'));
|
|
81
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
82
|
+
for (const result of githubResults) {
|
|
83
|
+
console.log(` ${chalk.gray('•')} ${chalk.bold(result.name)}`);
|
|
84
|
+
console.log(chalk.dim(` ${truncate(result.description, 60)}`));
|
|
85
|
+
if (result.repo) {
|
|
86
|
+
console.log(chalk.dim(` Install: killer install ${result.repo}`));
|
|
87
|
+
}
|
|
88
|
+
console.log('');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
92
|
+
console.log(chalk.dim(`Total: ${registryResults.length} registry, ${githubResults.length} github`));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
spinner.fail(chalk.red('Search failed'));
|
|
96
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
function truncate(str, length) {
|
|
101
|
+
if (str.length <= length)
|
|
102
|
+
return str;
|
|
103
|
+
return str.slice(0, length - 3) + '...';
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stats Command
|
|
3
|
+
*
|
|
4
|
+
* Track and display CLI usage statistics.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
export declare const statsCommand: Command;
|
|
8
|
+
/**
|
|
9
|
+
* Track a skill installation
|
|
10
|
+
*/
|
|
11
|
+
export declare function trackInstall(skillName: string): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Track command usage
|
|
14
|
+
*/
|
|
15
|
+
export declare function trackCommand(commandName: string): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,eAAO,MAAM,YAAY,SAuEnB,CAAC;AAEP;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBnE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stats Command
|
|
3
|
+
*
|
|
4
|
+
* Track and display CLI usage statistics.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import os from 'os';
|
|
11
|
+
const STATS_FILE = path.join(os.homedir(), '.killer-skills', 'stats.json');
|
|
12
|
+
const DEFAULT_STATS = {
|
|
13
|
+
installs: {},
|
|
14
|
+
commands: {},
|
|
15
|
+
lastRun: new Date().toISOString(),
|
|
16
|
+
totalRuns: 0,
|
|
17
|
+
firstRun: new Date().toISOString()
|
|
18
|
+
};
|
|
19
|
+
export const statsCommand = new Command('stats')
|
|
20
|
+
.description('View CLI usage statistics')
|
|
21
|
+
.option('--reset', 'Reset all statistics')
|
|
22
|
+
.option('--json', 'Output as JSON')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
try {
|
|
25
|
+
await fs.ensureDir(path.dirname(STATS_FILE));
|
|
26
|
+
// Reset stats
|
|
27
|
+
if (options.reset) {
|
|
28
|
+
await fs.writeJson(STATS_FILE, DEFAULT_STATS, { spaces: 2 });
|
|
29
|
+
console.log(chalk.green('✅ Statistics reset'));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Load stats
|
|
33
|
+
let stats;
|
|
34
|
+
if (await fs.pathExists(STATS_FILE)) {
|
|
35
|
+
stats = await fs.readJson(STATS_FILE);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
stats = { ...DEFAULT_STATS };
|
|
39
|
+
await fs.writeJson(STATS_FILE, stats, { spaces: 2 });
|
|
40
|
+
}
|
|
41
|
+
// JSON output
|
|
42
|
+
if (options.json) {
|
|
43
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Display stats
|
|
47
|
+
console.log(chalk.bold('\n📊 Killer-Skills Usage Statistics\n'));
|
|
48
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
49
|
+
// General stats
|
|
50
|
+
console.log(chalk.bold('\nGeneral'));
|
|
51
|
+
console.log(` Total Runs: ${stats.totalRuns}`);
|
|
52
|
+
console.log(` First Run: ${formatDate(stats.firstRun)}`);
|
|
53
|
+
console.log(` Last Run: ${formatDate(stats.lastRun)}`);
|
|
54
|
+
// Top skills
|
|
55
|
+
const topSkills = Object.entries(stats.installs)
|
|
56
|
+
.sort(([, a], [, b]) => b - a)
|
|
57
|
+
.slice(0, 10);
|
|
58
|
+
if (topSkills.length > 0) {
|
|
59
|
+
console.log(chalk.bold('\n📦 Most Installed Skills'));
|
|
60
|
+
topSkills.forEach(([name, count], i) => {
|
|
61
|
+
const rank = `${i + 1}.`.padEnd(3);
|
|
62
|
+
console.log(` ${rank} ${name.padEnd(25)} ${count} installs`);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Command usage
|
|
66
|
+
const topCommands = Object.entries(stats.commands)
|
|
67
|
+
.sort(([, a], [, b]) => b - a)
|
|
68
|
+
.slice(0, 10);
|
|
69
|
+
if (topCommands.length > 0) {
|
|
70
|
+
console.log(chalk.bold('\n🔧 Most Used Commands'));
|
|
71
|
+
topCommands.forEach(([name, count]) => {
|
|
72
|
+
console.log(` ${name.padEnd(15)} ${count} times`);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
console.log(chalk.dim('\n─'.repeat(50)));
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Track a skill installation
|
|
84
|
+
*/
|
|
85
|
+
export async function trackInstall(skillName) {
|
|
86
|
+
try {
|
|
87
|
+
await fs.ensureDir(path.dirname(STATS_FILE));
|
|
88
|
+
let stats;
|
|
89
|
+
if (await fs.pathExists(STATS_FILE)) {
|
|
90
|
+
stats = await fs.readJson(STATS_FILE);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
stats = { ...DEFAULT_STATS };
|
|
94
|
+
}
|
|
95
|
+
stats.installs[skillName] = (stats.installs[skillName] || 0) + 1;
|
|
96
|
+
stats.lastRun = new Date().toISOString();
|
|
97
|
+
stats.totalRuns++;
|
|
98
|
+
await fs.writeJson(STATS_FILE, stats, { spaces: 2 });
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Ignore errors
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Track command usage
|
|
106
|
+
*/
|
|
107
|
+
export async function trackCommand(commandName) {
|
|
108
|
+
try {
|
|
109
|
+
await fs.ensureDir(path.dirname(STATS_FILE));
|
|
110
|
+
let stats;
|
|
111
|
+
if (await fs.pathExists(STATS_FILE)) {
|
|
112
|
+
stats = await fs.readJson(STATS_FILE);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
stats = { ...DEFAULT_STATS };
|
|
116
|
+
}
|
|
117
|
+
stats.commands[commandName] = (stats.commands[commandName] || 0) + 1;
|
|
118
|
+
stats.lastRun = new Date().toISOString();
|
|
119
|
+
stats.totalRuns++;
|
|
120
|
+
await fs.writeJson(STATS_FILE, stats, { spaces: 2 });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Ignore errors
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Format date string
|
|
128
|
+
*/
|
|
129
|
+
function formatDate(dateStr) {
|
|
130
|
+
try {
|
|
131
|
+
return new Date(dateStr).toLocaleDateString();
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return dateStr;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Command
|
|
3
|
+
*
|
|
4
|
+
* Submit a skill to the Killer-Skills registry for inclusion.
|
|
5
|
+
* This prepares and validates the skill, then sends it to the registry API.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
export declare const submitCommand: Command;
|
|
9
|
+
//# sourceMappingURL=submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,aAAa,SAwJpB,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Command
|
|
3
|
+
*
|
|
4
|
+
* Submit a skill to the Killer-Skills registry for inclusion.
|
|
5
|
+
* This prepares and validates the skill, then sends it to the registry API.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import chalk from 'chalk';
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import fs from 'fs-extra';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import https from 'https';
|
|
13
|
+
import { confirm, input } from '@inquirer/prompts';
|
|
14
|
+
export const submitCommand = new Command('submit')
|
|
15
|
+
.argument('[path]', 'Path to skill directory', '.')
|
|
16
|
+
.description('Submit a skill to the Killer-Skills registry')
|
|
17
|
+
.option('--dry-run', 'Validate without submitting')
|
|
18
|
+
.option('-y, --yes', 'Skip confirmation prompts')
|
|
19
|
+
.action(async (skillPath, options) => {
|
|
20
|
+
const spinner = ora('Preparing skill for submission...').start();
|
|
21
|
+
try {
|
|
22
|
+
// Resolve skill path
|
|
23
|
+
const resolvedPath = path.resolve(skillPath);
|
|
24
|
+
const skillMdPath = path.join(resolvedPath, 'SKILL.md');
|
|
25
|
+
// Check SKILL.md exists
|
|
26
|
+
if (!await fs.pathExists(skillMdPath)) {
|
|
27
|
+
spinner.fail(chalk.red('SKILL.md not found'));
|
|
28
|
+
console.log(chalk.dim(`Looking in: ${resolvedPath}`));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
// Read and parse SKILL.md
|
|
32
|
+
const content = await fs.readFile(skillMdPath, 'utf-8');
|
|
33
|
+
const metadata = parseSkillMetadata(content);
|
|
34
|
+
spinner.succeed('Skill loaded');
|
|
35
|
+
// Validate metadata
|
|
36
|
+
console.log(chalk.bold('\n📦 Skill Information\n'));
|
|
37
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
38
|
+
console.log(` ${chalk.cyan('Name:')} ${metadata.name}`);
|
|
39
|
+
console.log(` ${chalk.cyan('Description:')} ${metadata.description || chalk.yellow('(missing)')}`);
|
|
40
|
+
console.log(` ${chalk.cyan('Author:')} ${metadata.author || chalk.yellow('(missing)')}`);
|
|
41
|
+
console.log(` ${chalk.cyan('Version:')} ${metadata.version || '1.0.0'}`);
|
|
42
|
+
console.log(` ${chalk.cyan('Tags:')} ${metadata.tags?.join(', ') || chalk.dim('none')}`);
|
|
43
|
+
console.log(chalk.dim('─'.repeat(50)));
|
|
44
|
+
// Check structure
|
|
45
|
+
const structure = {
|
|
46
|
+
'SKILL.md': true,
|
|
47
|
+
'scripts/': await fs.pathExists(path.join(resolvedPath, 'scripts')),
|
|
48
|
+
'references/': await fs.pathExists(path.join(resolvedPath, 'references')),
|
|
49
|
+
'examples/': await fs.pathExists(path.join(resolvedPath, 'examples')),
|
|
50
|
+
'assets/': await fs.pathExists(path.join(resolvedPath, 'assets'))
|
|
51
|
+
};
|
|
52
|
+
console.log(chalk.bold('\n📁 Structure\n'));
|
|
53
|
+
for (const [item, exists] of Object.entries(structure)) {
|
|
54
|
+
const icon = exists ? chalk.green('✓') : chalk.dim('○');
|
|
55
|
+
console.log(` ${icon} ${item}`);
|
|
56
|
+
}
|
|
57
|
+
// Validate required fields
|
|
58
|
+
const errors = [];
|
|
59
|
+
if (!metadata.name)
|
|
60
|
+
errors.push('Missing skill name in frontmatter');
|
|
61
|
+
if (!metadata.description)
|
|
62
|
+
errors.push('Missing description in frontmatter');
|
|
63
|
+
if (errors.length > 0) {
|
|
64
|
+
console.log(chalk.red('\n⚠️ Validation Errors:\n'));
|
|
65
|
+
errors.forEach(e => console.log(chalk.red(` • ${e}`)));
|
|
66
|
+
console.log(chalk.dim('\nFix these issues before submitting.'));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
// Collect additional info if needed
|
|
70
|
+
let author = metadata.author;
|
|
71
|
+
let email = metadata.email;
|
|
72
|
+
let repository = metadata.repository;
|
|
73
|
+
if (!options.yes) {
|
|
74
|
+
if (!author) {
|
|
75
|
+
author = await input({
|
|
76
|
+
message: 'Author name:',
|
|
77
|
+
required: true
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (!email) {
|
|
81
|
+
email = await input({
|
|
82
|
+
message: 'Contact email (optional):',
|
|
83
|
+
required: false
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (!repository) {
|
|
87
|
+
repository = await input({
|
|
88
|
+
message: 'GitHub repository URL (optional):',
|
|
89
|
+
required: false
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Dry run - stop here
|
|
94
|
+
if (options.dryRun) {
|
|
95
|
+
console.log(chalk.green('\n✅ Dry run complete. Skill is ready for submission.'));
|
|
96
|
+
console.log(chalk.dim('\nRemove --dry-run to submit.'));
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Confirm submission
|
|
100
|
+
if (!options.yes) {
|
|
101
|
+
const proceed = await confirm({
|
|
102
|
+
message: 'Submit this skill to the registry?',
|
|
103
|
+
default: true
|
|
104
|
+
});
|
|
105
|
+
if (!proceed) {
|
|
106
|
+
console.log(chalk.yellow('\nSubmission cancelled.'));
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Prepare submission
|
|
111
|
+
const submission = {
|
|
112
|
+
name: metadata.name,
|
|
113
|
+
description: metadata.description,
|
|
114
|
+
author: author || 'Anonymous',
|
|
115
|
+
email,
|
|
116
|
+
repository,
|
|
117
|
+
tags: metadata.tags || [],
|
|
118
|
+
version: metadata.version || '1.0.0',
|
|
119
|
+
content,
|
|
120
|
+
structure
|
|
121
|
+
};
|
|
122
|
+
// Submit to registry
|
|
123
|
+
spinner.start('Submitting to registry...');
|
|
124
|
+
const result = await submitToRegistry(submission);
|
|
125
|
+
if (result.success) {
|
|
126
|
+
spinner.succeed(chalk.green('Skill submitted successfully!'));
|
|
127
|
+
console.log(chalk.dim('\nYour skill will be reviewed and added to the registry.'));
|
|
128
|
+
if (result.trackingId) {
|
|
129
|
+
console.log(chalk.dim(`Tracking ID: ${result.trackingId}`));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
spinner.fail(chalk.red('Submission failed'));
|
|
134
|
+
console.log(chalk.red(`Error: ${result.error}`));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error.name === 'ExitPromptError') {
|
|
139
|
+
console.log(chalk.yellow('\n\nCancelled'));
|
|
140
|
+
process.exit(0);
|
|
141
|
+
}
|
|
142
|
+
spinner.fail(chalk.red('Submission failed'));
|
|
143
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
144
|
+
process.exit(1);
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
/**
|
|
148
|
+
* Parse skill metadata from SKILL.md frontmatter
|
|
149
|
+
*/
|
|
150
|
+
function parseSkillMetadata(content) {
|
|
151
|
+
const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
152
|
+
const result = {};
|
|
153
|
+
if (frontmatterMatch) {
|
|
154
|
+
const lines = frontmatterMatch[1].split('\n');
|
|
155
|
+
for (const line of lines) {
|
|
156
|
+
const match = line.match(/^(\w+):\s*(.+)?$/);
|
|
157
|
+
if (match) {
|
|
158
|
+
const [, key, value] = match;
|
|
159
|
+
if (value) {
|
|
160
|
+
result[key] = value.trim();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Parse tags if present
|
|
165
|
+
const tagsMatch = frontmatterMatch[1].match(/tags:\s*\n((?:\s*-\s*.+\n?)*)/m);
|
|
166
|
+
if (tagsMatch) {
|
|
167
|
+
const tags = tagsMatch[1]
|
|
168
|
+
.split('\n')
|
|
169
|
+
.map(line => line.match(/^\s*-\s*(.+)$/)?.[1]?.trim())
|
|
170
|
+
.filter(Boolean);
|
|
171
|
+
result.tags = tags;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Try to extract name from first heading if not in frontmatter
|
|
175
|
+
if (!result.name) {
|
|
176
|
+
const headingMatch = content.match(/^#\s+(.+)/m);
|
|
177
|
+
if (headingMatch) {
|
|
178
|
+
result.name = headingMatch[1].trim();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Submit skill to registry API
|
|
185
|
+
*/
|
|
186
|
+
async function submitToRegistry(submission) {
|
|
187
|
+
return new Promise((resolve) => {
|
|
188
|
+
// For now, simulate submission
|
|
189
|
+
// In production, this would POST to the actual registry API
|
|
190
|
+
const registryUrl = process.env.KILLER_SKILLS_REGISTRY_API ||
|
|
191
|
+
'https://killer-skills.vercel.app/api/skills/submit';
|
|
192
|
+
try {
|
|
193
|
+
const url = new URL(registryUrl);
|
|
194
|
+
const data = JSON.stringify(submission);
|
|
195
|
+
const req = https.request({
|
|
196
|
+
hostname: url.hostname,
|
|
197
|
+
port: url.port || 443,
|
|
198
|
+
path: url.pathname,
|
|
199
|
+
method: 'POST',
|
|
200
|
+
headers: {
|
|
201
|
+
'Content-Type': 'application/json',
|
|
202
|
+
'Content-Length': Buffer.byteLength(data),
|
|
203
|
+
'User-Agent': 'killer-skills-cli/1.6.0'
|
|
204
|
+
}
|
|
205
|
+
}, (res) => {
|
|
206
|
+
let body = '';
|
|
207
|
+
res.on('data', chunk => body += chunk);
|
|
208
|
+
res.on('end', () => {
|
|
209
|
+
try {
|
|
210
|
+
const result = JSON.parse(body);
|
|
211
|
+
resolve({
|
|
212
|
+
success: result.success || res.statusCode === 200 || res.statusCode === 201,
|
|
213
|
+
trackingId: result.trackingId || result.id,
|
|
214
|
+
error: result.error || result.message
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
resolve({
|
|
219
|
+
success: res.statusCode === 200 || res.statusCode === 201,
|
|
220
|
+
error: body
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
req.on('error', (e) => {
|
|
226
|
+
// If API not available, provide instructions
|
|
227
|
+
resolve({
|
|
228
|
+
success: false,
|
|
229
|
+
error: `Registry API not available. Submit via GitHub instead:\n` +
|
|
230
|
+
` 1. Create a PR to https://github.com/anthropics/killer-skills\n` +
|
|
231
|
+
` 2. Add your skill to the registry/skills.json file`
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
req.write(data);
|
|
235
|
+
req.end();
|
|
236
|
+
}
|
|
237
|
+
catch (e) {
|
|
238
|
+
resolve({
|
|
239
|
+
success: false,
|
|
240
|
+
error: e.message
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../src/commands/submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Command
|
|
3
|
+
*
|
|
4
|
+
* Synchronizes installed skills to a markdown file (AGENTS.md, CLAUDE.md, etc.)
|
|
5
|
+
* by generating standardized prompts that AI agents can understand.
|
|
6
|
+
*
|
|
7
|
+
* Uses IDE-specific templates for optimal compatibility.
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from 'commander';
|
|
10
|
+
export declare const syncCommand: Command;
|
|
11
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,eAAO,MAAM,WAAW,SAgGlB,CAAC"}
|