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,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Do Command - Natural Language Executor
|
|
3
|
+
*
|
|
4
|
+
* Execute tasks using natural language. Automatically matches
|
|
5
|
+
* the task description to available skills and suggests/executes them.
|
|
6
|
+
*
|
|
7
|
+
* Example:
|
|
8
|
+
* killer do "处理这个 PDF 文件"
|
|
9
|
+
* killer do "create algorithmic art"
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import ora from 'ora';
|
|
14
|
+
import { findAllSkills } from '../utils/skills.js';
|
|
15
|
+
import { readFileSync } from 'fs';
|
|
16
|
+
import { select, confirm } from '@inquirer/prompts';
|
|
17
|
+
export const doCommand = new Command('do')
|
|
18
|
+
.argument('<task>', 'Task description in natural language')
|
|
19
|
+
.description('Execute a task using natural language (auto-matches skills)')
|
|
20
|
+
.option('-y, --yes', 'Auto-execute best matching skill without confirmation')
|
|
21
|
+
.option('-l, --list', 'List matched skills without executing')
|
|
22
|
+
.option('-n, --top <number>', 'Number of top matches to show', '5')
|
|
23
|
+
.action(async (task, options) => {
|
|
24
|
+
const spinner = ora('Analyzing task...').start();
|
|
25
|
+
try {
|
|
26
|
+
// Find all installed skills
|
|
27
|
+
const skills = findAllSkills();
|
|
28
|
+
if (skills.length === 0) {
|
|
29
|
+
spinner.fail(chalk.red('No skills installed'));
|
|
30
|
+
console.log(chalk.dim('\nInstall skills first:'));
|
|
31
|
+
console.log(chalk.cyan(' killer install <skill-name>'));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
// Match task to skills
|
|
35
|
+
spinner.text = 'Matching skills...';
|
|
36
|
+
const matches = matchTaskToSkills(task, skills);
|
|
37
|
+
const topN = parseInt(options.top || '5');
|
|
38
|
+
const topMatches = matches.slice(0, topN);
|
|
39
|
+
spinner.stop();
|
|
40
|
+
if (topMatches.length === 0 || topMatches[0].score === 0) {
|
|
41
|
+
console.log(chalk.yellow('\n⚠️ No matching skills found for:'));
|
|
42
|
+
console.log(chalk.dim(` "${task}"`));
|
|
43
|
+
console.log(chalk.dim('\n💡 Try installing more skills:'));
|
|
44
|
+
console.log(chalk.cyan(' killer search <query>'));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Display matches
|
|
48
|
+
console.log(chalk.bold(`\n🎯 Task: "${task}"\n`));
|
|
49
|
+
console.log(chalk.dim('Matching skills (by relevance):'));
|
|
50
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
51
|
+
topMatches.forEach((match, index) => {
|
|
52
|
+
const rank = index === 0 ? chalk.green('★') : chalk.dim('○');
|
|
53
|
+
const scoreBar = renderScoreBar(match.score);
|
|
54
|
+
console.log(` ${rank} ${chalk.bold(match.name)} ${scoreBar}`);
|
|
55
|
+
console.log(chalk.dim(` ${match.description.slice(0, 60)}${match.description.length > 60 ? '...' : ''}`));
|
|
56
|
+
if (match.matchedKeywords.length > 0) {
|
|
57
|
+
console.log(chalk.dim(` Keywords: ${match.matchedKeywords.join(', ')}`));
|
|
58
|
+
}
|
|
59
|
+
console.log('');
|
|
60
|
+
});
|
|
61
|
+
// List mode - don't execute
|
|
62
|
+
if (options.list) {
|
|
63
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
64
|
+
console.log(chalk.dim(`Found ${matches.filter(m => m.score > 0).length} matching skill(s)`));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Determine which skill to use
|
|
68
|
+
let selectedSkill;
|
|
69
|
+
if (options.yes) {
|
|
70
|
+
// Auto-select best match
|
|
71
|
+
selectedSkill = topMatches[0];
|
|
72
|
+
console.log(chalk.green(`\n✓ Auto-selected: ${selectedSkill.name}`));
|
|
73
|
+
}
|
|
74
|
+
else if (topMatches.length === 1) {
|
|
75
|
+
// Only one match
|
|
76
|
+
const proceed = await confirm({
|
|
77
|
+
message: `Use ${topMatches[0].name} for this task?`,
|
|
78
|
+
default: true
|
|
79
|
+
});
|
|
80
|
+
if (!proceed) {
|
|
81
|
+
console.log(chalk.yellow('Cancelled'));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
selectedSkill = topMatches[0];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// Let user choose
|
|
88
|
+
const choices = topMatches.map(m => ({
|
|
89
|
+
name: `${m.name} - ${m.description.slice(0, 40)}...`,
|
|
90
|
+
value: m
|
|
91
|
+
}));
|
|
92
|
+
selectedSkill = await select({
|
|
93
|
+
message: 'Select skill to use:',
|
|
94
|
+
choices
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// Execute the skill
|
|
98
|
+
console.log(chalk.dim('\n─'.repeat(60)));
|
|
99
|
+
console.log(chalk.bold(`\n📖 Loading skill: ${selectedSkill.name}\n`));
|
|
100
|
+
// Read skill content
|
|
101
|
+
const content = readFileSync(selectedSkill.path, 'utf-8');
|
|
102
|
+
// Output skill content (like `killer read`)
|
|
103
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
104
|
+
console.log(content);
|
|
105
|
+
console.log(chalk.dim('─'.repeat(60)));
|
|
106
|
+
// Provide context
|
|
107
|
+
console.log(chalk.green(`\n✅ Skill "${selectedSkill.name}" loaded!`));
|
|
108
|
+
console.log(chalk.dim('\n💡 The skill instructions above can help you complete:'));
|
|
109
|
+
console.log(chalk.cyan(` "${task}"`));
|
|
110
|
+
console.log(chalk.dim('\nFollow the skill\'s instructions to complete your task.'));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error.name === 'ExitPromptError') {
|
|
114
|
+
console.log(chalk.yellow('\n\nCancelled'));
|
|
115
|
+
process.exit(0);
|
|
116
|
+
}
|
|
117
|
+
spinner.fail(chalk.red('Failed to execute task'));
|
|
118
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
/**
|
|
123
|
+
* Match task description to available skills
|
|
124
|
+
*/
|
|
125
|
+
function matchTaskToSkills(task, skills) {
|
|
126
|
+
const taskLower = task.toLowerCase();
|
|
127
|
+
const taskWords = extractKeywords(taskLower);
|
|
128
|
+
const matches = skills.map(skill => {
|
|
129
|
+
const nameLower = skill.name.toLowerCase();
|
|
130
|
+
const descLower = (skill.description || '').toLowerCase();
|
|
131
|
+
const skillWords = extractKeywords(`${nameLower} ${descLower}`);
|
|
132
|
+
let score = 0;
|
|
133
|
+
const matchedKeywords = [];
|
|
134
|
+
// Exact name match (highest priority)
|
|
135
|
+
if (taskLower.includes(nameLower)) {
|
|
136
|
+
score += 50;
|
|
137
|
+
matchedKeywords.push(skill.name);
|
|
138
|
+
}
|
|
139
|
+
// Word matching
|
|
140
|
+
for (const taskWord of taskWords) {
|
|
141
|
+
if (nameLower.includes(taskWord)) {
|
|
142
|
+
score += 20;
|
|
143
|
+
matchedKeywords.push(taskWord);
|
|
144
|
+
}
|
|
145
|
+
if (descLower.includes(taskWord)) {
|
|
146
|
+
score += 10;
|
|
147
|
+
if (!matchedKeywords.includes(taskWord)) {
|
|
148
|
+
matchedKeywords.push(taskWord);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Partial word match
|
|
152
|
+
for (const skillWord of skillWords) {
|
|
153
|
+
if (skillWord.includes(taskWord) || taskWord.includes(skillWord)) {
|
|
154
|
+
if (skillWord !== taskWord) {
|
|
155
|
+
score += 5;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Semantic matching for common terms
|
|
161
|
+
const semanticMatches = {
|
|
162
|
+
'pdf': ['document', 'file', 'convert', 'extract', '文档', '文件', 'pdf'],
|
|
163
|
+
'excel': ['spreadsheet', 'xlsx', 'csv', 'data', '表格', '电子表格'],
|
|
164
|
+
'word': ['document', 'docx', '.doc', '文档', '文字'],
|
|
165
|
+
'ppt': ['presentation', 'slide', 'pptx', '演示', '幻灯片'],
|
|
166
|
+
'art': ['creative', 'design', 'generate', 'draw', '艺术', '创作', '设计'],
|
|
167
|
+
'code': ['programming', 'developer', 'software', '代码', '编程'],
|
|
168
|
+
'test': ['testing', 'test', 'qa', 'quality', '测试'],
|
|
169
|
+
'ui': ['interface', 'ux', 'design', 'frontend', '界面', '设计'],
|
|
170
|
+
'api': ['backend', 'server', 'rest', 'graphql', '接口'],
|
|
171
|
+
};
|
|
172
|
+
for (const [key, synonyms] of Object.entries(semanticMatches)) {
|
|
173
|
+
const keyInName = nameLower.includes(key);
|
|
174
|
+
const keyInDesc = descLower.includes(key);
|
|
175
|
+
const taskHasSynonym = synonyms.some(s => taskLower.includes(s));
|
|
176
|
+
if ((keyInName || keyInDesc) && taskHasSynonym) {
|
|
177
|
+
score += 15;
|
|
178
|
+
matchedKeywords.push(key);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
name: skill.name,
|
|
183
|
+
description: skill.description || 'No description',
|
|
184
|
+
path: skill.path,
|
|
185
|
+
score,
|
|
186
|
+
matchedKeywords: [...new Set(matchedKeywords)]
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
// Sort by score (descending)
|
|
190
|
+
return matches.sort((a, b) => b.score - a.score);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Extract keywords from text
|
|
194
|
+
*/
|
|
195
|
+
function extractKeywords(text) {
|
|
196
|
+
// Remove common stop words
|
|
197
|
+
const stopWords = new Set([
|
|
198
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been',
|
|
199
|
+
'this', 'that', 'these', 'those', 'it', 'its',
|
|
200
|
+
'for', 'with', 'from', 'to', 'of', 'in', 'on', 'at', 'by',
|
|
201
|
+
'and', 'or', 'but', 'if', 'then', 'else',
|
|
202
|
+
'can', 'could', 'would', 'should', 'will',
|
|
203
|
+
'me', 'my', 'i', 'you', 'your', 'we', 'our', 'they', 'their',
|
|
204
|
+
'的', '是', '在', '和', '与', '或', '这', '那', '一个', '我', '你', '他', '她',
|
|
205
|
+
'help', 'please', 'want', 'need', '帮', '请', '要', '需要'
|
|
206
|
+
]);
|
|
207
|
+
return text
|
|
208
|
+
.split(/[\s,.\-_:;!?'"()[\]{}]+/)
|
|
209
|
+
.filter(word => word.length >= 2 && !stopWords.has(word));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Render a score bar
|
|
213
|
+
*/
|
|
214
|
+
function renderScoreBar(score) {
|
|
215
|
+
const maxBars = 5;
|
|
216
|
+
const normalized = Math.min(score / 50, 1); // Normalize to 0-1
|
|
217
|
+
const bars = Math.round(normalized * maxBars);
|
|
218
|
+
const filled = '█'.repeat(bars);
|
|
219
|
+
const empty = '░'.repeat(maxBars - bars);
|
|
220
|
+
const color = bars >= 4 ? chalk.green : bars >= 2 ? chalk.yellow : chalk.red;
|
|
221
|
+
return color(`[${filled}${empty}]`);
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=do.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"do.js","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,WAAW,SAoFlB,CAAC"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
3
|
+
*
|
|
4
|
+
* Initialize skills configuration in a project.
|
|
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 { select, confirm } from '@inquirer/prompts';
|
|
12
|
+
import { IDE_CONFIG, SUPPORTED_IDES } from '../config/ides.js';
|
|
13
|
+
export const initCommand = new Command('init')
|
|
14
|
+
.description('Initialize skills configuration in current project')
|
|
15
|
+
.option('-i, --ide <ide>', 'Target IDE')
|
|
16
|
+
.option('-y, --yes', 'Skip prompts, use defaults')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
const spinner = ora();
|
|
19
|
+
const cwd = process.cwd();
|
|
20
|
+
try {
|
|
21
|
+
console.log(chalk.bold('\n🚀 Initialize Killer-Skills\n'));
|
|
22
|
+
// Detect or select IDE
|
|
23
|
+
let targetIDE = options.ide;
|
|
24
|
+
if (!targetIDE && !options.yes) {
|
|
25
|
+
// Detect existing IDE configurations
|
|
26
|
+
const detected = detectExistingIDE(cwd);
|
|
27
|
+
if (detected) {
|
|
28
|
+
const useDetected = await confirm({
|
|
29
|
+
message: `Detected ${IDE_CONFIG[detected].name}. Use this IDE?`,
|
|
30
|
+
default: true
|
|
31
|
+
});
|
|
32
|
+
if (useDetected) {
|
|
33
|
+
targetIDE = detected;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (!targetIDE) {
|
|
37
|
+
const choices = SUPPORTED_IDES.slice(0, 10).map(ide => ({
|
|
38
|
+
name: `${IDE_CONFIG[ide].name}`,
|
|
39
|
+
value: ide
|
|
40
|
+
}));
|
|
41
|
+
targetIDE = await select({
|
|
42
|
+
message: 'Select your IDE:',
|
|
43
|
+
choices
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
targetIDE = targetIDE || 'claude';
|
|
48
|
+
const ideConfig = IDE_CONFIG[targetIDE];
|
|
49
|
+
console.log(chalk.dim(`\nConfiguring for: ${ideConfig.name}`));
|
|
50
|
+
// Create skills directory
|
|
51
|
+
spinner.start('Creating skills directory...');
|
|
52
|
+
const skillsDir = path.join(cwd, ideConfig.paths.project);
|
|
53
|
+
await fs.ensureDir(skillsDir);
|
|
54
|
+
spinner.succeed(`Created ${ideConfig.paths.project}`);
|
|
55
|
+
// Create .gitkeep
|
|
56
|
+
const gitkeepPath = path.join(skillsDir, '.gitkeep');
|
|
57
|
+
if (!await fs.pathExists(gitkeepPath)) {
|
|
58
|
+
await fs.writeFile(gitkeepPath, '');
|
|
59
|
+
}
|
|
60
|
+
// Create config file based on IDE
|
|
61
|
+
const configCreated = await createIDEConfig(cwd, targetIDE, options.yes);
|
|
62
|
+
// Summary
|
|
63
|
+
console.log(chalk.green('\n✅ Initialization complete!\n'));
|
|
64
|
+
console.log(chalk.dim('Created:'));
|
|
65
|
+
console.log(chalk.dim(` 📁 ${ideConfig.paths.project}/`));
|
|
66
|
+
if (configCreated) {
|
|
67
|
+
console.log(chalk.dim(` 📄 ${configCreated}`));
|
|
68
|
+
}
|
|
69
|
+
console.log(chalk.dim('\nNext steps:'));
|
|
70
|
+
console.log(chalk.cyan(' 1. Install skills: killer install <skill-name>'));
|
|
71
|
+
console.log(chalk.cyan(' 2. Create custom: killer create my-skill'));
|
|
72
|
+
console.log(chalk.cyan(' 3. Sync for AI: killer sync'));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error.name === 'ExitPromptError') {
|
|
76
|
+
console.log(chalk.yellow('\n\nCancelled by user'));
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
spinner.fail(chalk.red('Initialization failed'));
|
|
80
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* Detect existing IDE configuration in project
|
|
86
|
+
*/
|
|
87
|
+
function detectExistingIDE(projectPath) {
|
|
88
|
+
const detectionOrder = [
|
|
89
|
+
{ ide: 'cursor', files: ['.cursor', '.cursorrules'] },
|
|
90
|
+
{ ide: 'windsurf', files: ['.windsurf', '.windsurfrules'] },
|
|
91
|
+
{ ide: 'claude', files: ['.claude', 'CLAUDE.md'] },
|
|
92
|
+
{ ide: 'antigravity', files: ['.agent', '.gemini', 'AGENTS.md'] },
|
|
93
|
+
{ ide: 'vscode', files: ['.vscode'] },
|
|
94
|
+
];
|
|
95
|
+
for (const { ide, files } of detectionOrder) {
|
|
96
|
+
for (const file of files) {
|
|
97
|
+
if (fs.existsSync(path.join(projectPath, file))) {
|
|
98
|
+
return ide;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create IDE-specific configuration file
|
|
106
|
+
*/
|
|
107
|
+
async function createIDEConfig(projectPath, ide, skipPrompt) {
|
|
108
|
+
const configFiles = {
|
|
109
|
+
cursor: {
|
|
110
|
+
path: '.cursorrules',
|
|
111
|
+
content: `# Cursor Rules
|
|
112
|
+
|
|
113
|
+
## Skills Integration
|
|
114
|
+
|
|
115
|
+
This project uses Killer-Skills for AI capabilities.
|
|
116
|
+
|
|
117
|
+
Run \`killer sync\` to update this file with available skills.
|
|
118
|
+
|
|
119
|
+
<!-- SKILLS_TABLE_START -->
|
|
120
|
+
<!-- Run 'killer sync' to populate -->
|
|
121
|
+
<!-- SKILLS_TABLE_END -->
|
|
122
|
+
`
|
|
123
|
+
},
|
|
124
|
+
windsurf: {
|
|
125
|
+
path: '.windsurfrules',
|
|
126
|
+
content: `# Windsurf Rules
|
|
127
|
+
|
|
128
|
+
## Skills Integration
|
|
129
|
+
|
|
130
|
+
This project uses Killer-Skills for AI capabilities.
|
|
131
|
+
|
|
132
|
+
Run \`killer sync\` to update this file with available skills.
|
|
133
|
+
|
|
134
|
+
<!-- SKILLS_TABLE_START -->
|
|
135
|
+
<!-- Run 'killer sync' to populate -->
|
|
136
|
+
<!-- SKILLS_TABLE_END -->
|
|
137
|
+
`
|
|
138
|
+
},
|
|
139
|
+
claude: {
|
|
140
|
+
path: 'CLAUDE.md',
|
|
141
|
+
content: `# Claude Configuration
|
|
142
|
+
|
|
143
|
+
## Skills Integration
|
|
144
|
+
|
|
145
|
+
This project uses Killer-Skills for AI capabilities.
|
|
146
|
+
|
|
147
|
+
Run \`killer sync\` to update this file with available skills.
|
|
148
|
+
|
|
149
|
+
<!-- SKILLS_TABLE_START -->
|
|
150
|
+
<!-- Run 'killer sync' to populate -->
|
|
151
|
+
<!-- SKILLS_TABLE_END -->
|
|
152
|
+
`
|
|
153
|
+
},
|
|
154
|
+
antigravity: {
|
|
155
|
+
path: 'AGENTS.md',
|
|
156
|
+
content: `# Agents Configuration
|
|
157
|
+
|
|
158
|
+
## Skills Integration
|
|
159
|
+
|
|
160
|
+
This project uses Killer-Skills for AI capabilities.
|
|
161
|
+
|
|
162
|
+
Run \`killer sync\` to update this file with available skills.
|
|
163
|
+
|
|
164
|
+
<!-- SKILLS_TABLE_START -->
|
|
165
|
+
<!-- Run 'killer sync' to populate -->
|
|
166
|
+
<!-- SKILLS_TABLE_END -->
|
|
167
|
+
`
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
const config = configFiles[ide];
|
|
171
|
+
if (!config)
|
|
172
|
+
return null;
|
|
173
|
+
const configPath = path.join(projectPath, config.path);
|
|
174
|
+
// Check if already exists
|
|
175
|
+
if (await fs.pathExists(configPath)) {
|
|
176
|
+
if (!skipPrompt) {
|
|
177
|
+
const overwrite = await confirm({
|
|
178
|
+
message: `${config.path} already exists. Overwrite?`,
|
|
179
|
+
default: false
|
|
180
|
+
});
|
|
181
|
+
if (!overwrite)
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
return null; // Don't overwrite in yes mode
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
await fs.writeFile(configPath, config.content);
|
|
189
|
+
return config.path;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
export declare const installCommand: Command;
|
|
13
|
+
//# sourceMappingURL=install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,cAAc,SAiGrB,CAAC"}
|