agent-skills-cli 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -17
- package/dist/cli/agents.d.ts +10 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +270 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +11 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +168 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/blueprint.d.ts +11 -0
- package/dist/cli/commands/blueprint.d.ts.map +1 -0
- package/dist/cli/commands/blueprint.js +210 -0
- package/dist/cli/commands/blueprint.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +11 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +267 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/capture.d.ts +11 -0
- package/dist/cli/commands/capture.d.ts.map +1 -0
- package/dist/cli/commands/capture.js +109 -0
- package/dist/cli/commands/capture.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +11 -0
- package/dist/cli/commands/ci.d.ts.map +1 -0
- package/dist/cli/commands/ci.js +144 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/collab.d.ts +11 -0
- package/dist/cli/commands/collab.d.ts.map +1 -0
- package/dist/cli/commands/collab.js +196 -0
- package/dist/cli/commands/collab.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +11 -0
- package/dist/cli/commands/convert.d.ts.map +1 -0
- package/dist/cli/commands/convert.js +219 -0
- package/dist/cli/commands/convert.js.map +1 -0
- package/dist/cli/commands/craft.d.ts +18 -0
- package/dist/cli/commands/craft.d.ts.map +1 -0
- package/dist/cli/commands/craft.js +205 -0
- package/dist/cli/commands/craft.js.map +1 -0
- package/dist/cli/commands/export.d.ts +9 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +103 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/forge.d.ts +11 -0
- package/dist/cli/commands/forge.d.ts.map +1 -0
- package/dist/cli/commands/forge.js +152 -0
- package/dist/cli/commands/forge.js.map +1 -0
- package/dist/cli/commands/grid.d.ts +11 -0
- package/dist/cli/commands/grid.d.ts.map +1 -0
- package/dist/cli/commands/grid.js +217 -0
- package/dist/cli/commands/grid.js.map +1 -0
- package/dist/cli/commands/insight.d.ts +7 -0
- package/dist/cli/commands/insight.d.ts.map +1 -0
- package/dist/cli/commands/insight.js +71 -0
- package/dist/cli/commands/insight.js.map +1 -0
- package/dist/cli/commands/install.d.ts +6 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +359 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +7 -0
- package/dist/cli/commands/interactive.d.ts.map +1 -0
- package/dist/cli/commands/interactive.js +535 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +77 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/lockspec.d.ts +11 -0
- package/dist/cli/commands/lockspec.d.ts.map +1 -0
- package/dist/cli/commands/lockspec.js +179 -0
- package/dist/cli/commands/lockspec.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +7 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +417 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/method.d.ts +7 -0
- package/dist/cli/commands/method.d.ts.map +1 -0
- package/dist/cli/commands/method.js +140 -0
- package/dist/cli/commands/method.js.map +1 -0
- package/dist/cli/commands/mine.d.ts +11 -0
- package/dist/cli/commands/mine.d.ts.map +1 -0
- package/dist/cli/commands/mine.js +254 -0
- package/dist/cli/commands/mine.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +11 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +201 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/rule.d.ts +11 -0
- package/dist/cli/commands/rule.d.ts.map +1 -0
- package/dist/cli/commands/rule.js +230 -0
- package/dist/cli/commands/rule.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +173 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/show.d.ts +6 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +150 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/submit.d.ts +15 -0
- package/dist/cli/commands/submit.d.ts.map +1 -0
- package/dist/cli/commands/submit.js +151 -0
- package/dist/cli/commands/submit.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +11 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +164 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/commands/track.d.ts +11 -0
- package/dist/cli/commands/track.d.ts.map +1 -0
- package/dist/cli/commands/track.js +199 -0
- package/dist/cli/commands/track.js.map +1 -0
- package/dist/cli/commands/trigger.d.ts +11 -0
- package/dist/cli/commands/trigger.d.ts.map +1 -0
- package/dist/cli/commands/trigger.js +157 -0
- package/dist/cli/commands/trigger.js.map +1 -0
- package/dist/cli/commands/utils-commands.d.ts +9 -0
- package/dist/cli/commands/utils-commands.d.ts.map +1 -0
- package/dist/cli/commands/utils-commands.js +389 -0
- package/dist/cli/commands/utils-commands.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +40 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +84 -2743
- package/dist/cli/index.js.map +1 -1
- package/dist/core/audit.d.ts +24 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +195 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/scanner-rules.d.ts +58 -0
- package/dist/core/scanner-rules.d.ts.map +1 -0
- package/dist/core/scanner-rules.js +335 -0
- package/dist/core/scanner-rules.js.map +1 -0
- package/dist/core/suggest.d.ts +51 -0
- package/dist/core/suggest.d.ts.map +1 -0
- package/dist/core/suggest.js +241 -0
- package/dist/core/suggest.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI Command
|
|
3
|
+
* Generate CI/CD workflow files for GitHub Actions, GitLab CI, etc.
|
|
4
|
+
* (SkillKit calls this "cicd" — we call it "ci")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register the ci command
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerCiCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=ci.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ci.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAexD"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CI Command
|
|
3
|
+
* Generate CI/CD workflow files for GitHub Actions, GitLab CI, etc.
|
|
4
|
+
* (SkillKit calls this "cicd" — we call it "ci")
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
8
|
+
import { existsSync } from 'fs';
|
|
9
|
+
import { resolve, join } from 'path';
|
|
10
|
+
/**
|
|
11
|
+
* Register the ci command
|
|
12
|
+
*/
|
|
13
|
+
export function registerCiCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command('ci [platform]')
|
|
16
|
+
.description('Generate CI/CD workflow for skill validation')
|
|
17
|
+
.option('-o, --output <dir>', 'Output directory (auto-detected)')
|
|
18
|
+
.option('--audit', 'Include security audit step', true)
|
|
19
|
+
.option('--validate', 'Include validation step', true)
|
|
20
|
+
.action(async (platform, options) => {
|
|
21
|
+
try {
|
|
22
|
+
await ciCommand(platform || 'github', options);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(chalk.red('Error:'), err.message);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
async function ciCommand(platform, options) {
|
|
31
|
+
const generators = {
|
|
32
|
+
github: () => generateGitHubActions(options),
|
|
33
|
+
gitlab: () => generateGitLabCI(options),
|
|
34
|
+
bitbucket: () => generateBitbucketPipelines(options),
|
|
35
|
+
};
|
|
36
|
+
const generator = generators[platform];
|
|
37
|
+
if (!generator) {
|
|
38
|
+
console.error(chalk.red(`Unknown platform: ${platform}`));
|
|
39
|
+
console.log(chalk.dim(`Supported: ${Object.keys(generators).join(', ')}`));
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
const { path: outputPath, content } = generator();
|
|
43
|
+
const finalPath = options.output ? join(resolve(options.output), outputPath) : resolve(outputPath);
|
|
44
|
+
if (existsSync(finalPath)) {
|
|
45
|
+
console.log(chalk.yellow(`⚠ File already exists: ${finalPath}`));
|
|
46
|
+
console.log(chalk.dim(' Delete it first or use --output to specify a different location'));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const dir = finalPath.substring(0, finalPath.lastIndexOf('/'));
|
|
50
|
+
await mkdir(dir, { recursive: true });
|
|
51
|
+
await writeFile(finalPath, content);
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(chalk.green(`✨ Generated ${platform} CI workflow`));
|
|
54
|
+
console.log(` ${chalk.dim('File:')} ${chalk.cyan(finalPath)}`);
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(chalk.dim('Features:'));
|
|
57
|
+
if (options.validate !== false)
|
|
58
|
+
console.log(chalk.dim(' ✓ Skill validation'));
|
|
59
|
+
if (options.audit !== false)
|
|
60
|
+
console.log(chalk.dim(' ✓ Security audit'));
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(chalk.dim(`Commit and push to activate the workflow.`));
|
|
63
|
+
console.log('');
|
|
64
|
+
}
|
|
65
|
+
function generateGitHubActions(options) {
|
|
66
|
+
const steps = [];
|
|
67
|
+
steps.push(` - uses: actions/checkout@v4
|
|
68
|
+
- uses: actions/setup-node@v4
|
|
69
|
+
with:
|
|
70
|
+
node-version: '20'
|
|
71
|
+
- name: Install agent-skills-cli
|
|
72
|
+
run: npm install -g agent-skills-cli`);
|
|
73
|
+
if (options.validate !== false) {
|
|
74
|
+
steps.push(` - name: Validate Skills
|
|
75
|
+
run: skills validate .`);
|
|
76
|
+
}
|
|
77
|
+
if (options.audit !== false) {
|
|
78
|
+
steps.push(` - name: Security Audit
|
|
79
|
+
run: skills audit . --format sarif --output results.sarif
|
|
80
|
+
- name: Upload SARIF
|
|
81
|
+
if: always()
|
|
82
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
83
|
+
with:
|
|
84
|
+
sarif_file: results.sarif`);
|
|
85
|
+
}
|
|
86
|
+
const content = `name: Skill Validation
|
|
87
|
+
|
|
88
|
+
on:
|
|
89
|
+
push:
|
|
90
|
+
paths:
|
|
91
|
+
- '**/*.md'
|
|
92
|
+
- '.agent/**'
|
|
93
|
+
- '.cursor/**'
|
|
94
|
+
- '.claude/**'
|
|
95
|
+
- '.github/skills/**'
|
|
96
|
+
pull_request:
|
|
97
|
+
paths:
|
|
98
|
+
- '**/*.md'
|
|
99
|
+
|
|
100
|
+
jobs:
|
|
101
|
+
validate:
|
|
102
|
+
runs-on: ubuntu-latest
|
|
103
|
+
steps:
|
|
104
|
+
${steps.join('\n')}
|
|
105
|
+
`;
|
|
106
|
+
return { path: '.github/workflows/skill-validation.yml', content };
|
|
107
|
+
}
|
|
108
|
+
function generateGitLabCI(options) {
|
|
109
|
+
const scripts = ['npm install -g agent-skills-cli'];
|
|
110
|
+
if (options.validate !== false)
|
|
111
|
+
scripts.push('skills validate .');
|
|
112
|
+
if (options.audit !== false)
|
|
113
|
+
scripts.push('skills audit . --fail-on high');
|
|
114
|
+
const content = `skill-validation:
|
|
115
|
+
image: node:20
|
|
116
|
+
stage: test
|
|
117
|
+
script:
|
|
118
|
+
${scripts.map(s => ` - ${s}`).join('\n')}
|
|
119
|
+
only:
|
|
120
|
+
changes:
|
|
121
|
+
- "**/*.md"
|
|
122
|
+
- ".agent/**"
|
|
123
|
+
- ".cursor/**"
|
|
124
|
+
- ".claude/**"
|
|
125
|
+
`;
|
|
126
|
+
return { path: '.gitlab-ci.yml', content };
|
|
127
|
+
}
|
|
128
|
+
function generateBitbucketPipelines(options) {
|
|
129
|
+
const scripts = ['npm install -g agent-skills-cli'];
|
|
130
|
+
if (options.validate !== false)
|
|
131
|
+
scripts.push('skills validate .');
|
|
132
|
+
if (options.audit !== false)
|
|
133
|
+
scripts.push('skills audit . --fail-on high');
|
|
134
|
+
const content = `pipelines:
|
|
135
|
+
default:
|
|
136
|
+
- step:
|
|
137
|
+
name: Skill Validation
|
|
138
|
+
image: node:20
|
|
139
|
+
script:
|
|
140
|
+
${scripts.map(s => ` - ${s}`).join('\n')}
|
|
141
|
+
`;
|
|
142
|
+
return { path: 'bitbucket-pipelines.yml', content };
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=ci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.js","sourceRoot":"","sources":["../../../src/cli/commands/ci.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collab Command
|
|
3
|
+
* Team skill sharing and collaboration
|
|
4
|
+
* (SkillKit calls this "team" — we call it "collab")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register the collab command
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerCollabCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=collab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collab.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/collab.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE5D"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collab Command
|
|
3
|
+
* Team skill sharing and collaboration
|
|
4
|
+
* (SkillKit calls this "team" — we call it "collab")
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import * as p from '@clack/prompts';
|
|
8
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { resolve } from 'path';
|
|
11
|
+
const COLLAB_FILE = '.skills-collab.json';
|
|
12
|
+
/**
|
|
13
|
+
* Register the collab command
|
|
14
|
+
*/
|
|
15
|
+
export function registerCollabCommand(program) {
|
|
16
|
+
const collab = program
|
|
17
|
+
.command('collab')
|
|
18
|
+
.alias('cl')
|
|
19
|
+
.description('Team skill collaboration');
|
|
20
|
+
collab
|
|
21
|
+
.command('init <team-name>')
|
|
22
|
+
.description('Initialize team collaboration')
|
|
23
|
+
.action(async (teamName) => {
|
|
24
|
+
try {
|
|
25
|
+
await collabInit(teamName);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error(chalk.red('Error:'), err.message);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
collab
|
|
33
|
+
.command('add <member>')
|
|
34
|
+
.description('Add a team member')
|
|
35
|
+
.action(async (member) => {
|
|
36
|
+
try {
|
|
37
|
+
await collabAddMember(member);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error(chalk.red('Error:'), err.message);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
collab
|
|
45
|
+
.command('share <skill>')
|
|
46
|
+
.description('Share a skill with the team')
|
|
47
|
+
.action(async (skill) => {
|
|
48
|
+
try {
|
|
49
|
+
await collabShare(skill);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error(chalk.red('Error:'), err.message);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
collab
|
|
57
|
+
.command('status')
|
|
58
|
+
.description('Show team collaboration status')
|
|
59
|
+
.action(async () => {
|
|
60
|
+
try {
|
|
61
|
+
await collabStatus();
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
console.error(chalk.red('Error:'), err.message);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
collab
|
|
69
|
+
.command('sync')
|
|
70
|
+
.description('Sync shared skills with team')
|
|
71
|
+
.action(async () => {
|
|
72
|
+
try {
|
|
73
|
+
await collabSync();
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
console.error(chalk.red('Error:'), err.message);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
async function loadCollabConfig() {
|
|
82
|
+
const configPath = resolve(COLLAB_FILE);
|
|
83
|
+
if (!existsSync(configPath))
|
|
84
|
+
return null;
|
|
85
|
+
try {
|
|
86
|
+
return JSON.parse(await readFile(configPath, 'utf-8'));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function saveCollabConfig(config) {
|
|
93
|
+
config.updatedAt = new Date().toISOString();
|
|
94
|
+
await writeFile(resolve(COLLAB_FILE), JSON.stringify(config, null, 2));
|
|
95
|
+
}
|
|
96
|
+
async function collabInit(teamName) {
|
|
97
|
+
const existing = await loadCollabConfig();
|
|
98
|
+
if (existing) {
|
|
99
|
+
console.error(chalk.yellow(`Team "${existing.team}" already initialized. Use collab status to view.`));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const config = {
|
|
103
|
+
team: teamName,
|
|
104
|
+
members: [],
|
|
105
|
+
sharedSkills: [],
|
|
106
|
+
createdAt: new Date().toISOString(),
|
|
107
|
+
updatedAt: new Date().toISOString(),
|
|
108
|
+
};
|
|
109
|
+
await saveCollabConfig(config);
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log(chalk.green(`✨ Team "${teamName}" initialized!`));
|
|
112
|
+
console.log('');
|
|
113
|
+
console.log(chalk.dim('Next steps:'));
|
|
114
|
+
console.log(chalk.dim(` skills collab add <username> Add team members`));
|
|
115
|
+
console.log(chalk.dim(` skills collab share <skill> Share a skill`));
|
|
116
|
+
console.log(chalk.dim(` skills collab status View team status`));
|
|
117
|
+
console.log('');
|
|
118
|
+
}
|
|
119
|
+
async function collabAddMember(member) {
|
|
120
|
+
const config = await loadCollabConfig();
|
|
121
|
+
if (!config) {
|
|
122
|
+
console.error(chalk.red('No team initialized. Run: skills collab init <team-name>'));
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
if (config.members.includes(member)) {
|
|
126
|
+
console.log(chalk.yellow(`${member} is already a team member`));
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
config.members.push(member);
|
|
130
|
+
await saveCollabConfig(config);
|
|
131
|
+
console.log(chalk.green(`✓ Added ${member} to team "${config.team}"`));
|
|
132
|
+
console.log(chalk.dim(` Total members: ${config.members.length}`));
|
|
133
|
+
}
|
|
134
|
+
async function collabShare(skillName) {
|
|
135
|
+
const config = await loadCollabConfig();
|
|
136
|
+
if (!config) {
|
|
137
|
+
console.error(chalk.red('No team initialized. Run: skills collab init <team-name>'));
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
if (config.sharedSkills.includes(skillName)) {
|
|
141
|
+
console.log(chalk.yellow(`${skillName} is already shared`));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
config.sharedSkills.push(skillName);
|
|
145
|
+
await saveCollabConfig(config);
|
|
146
|
+
console.log(chalk.green(`✓ Shared "${skillName}" with team "${config.team}"`));
|
|
147
|
+
console.log(chalk.dim(` Total shared skills: ${config.sharedSkills.length}`));
|
|
148
|
+
}
|
|
149
|
+
async function collabStatus() {
|
|
150
|
+
const config = await loadCollabConfig();
|
|
151
|
+
if (!config) {
|
|
152
|
+
console.log(chalk.yellow('No team initialized. Run: skills collab init <team-name>'));
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log(chalk.bold(`👥 Team: ${chalk.cyan(config.team)}`));
|
|
157
|
+
console.log('');
|
|
158
|
+
console.log(chalk.bold('Members:'));
|
|
159
|
+
if (config.members.length === 0) {
|
|
160
|
+
console.log(chalk.dim(' No members yet. Use: skills collab add <username>'));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
for (const m of config.members) {
|
|
164
|
+
console.log(` ${chalk.green('●')} ${m}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(chalk.bold('Shared Skills:'));
|
|
169
|
+
if (config.sharedSkills.length === 0) {
|
|
170
|
+
console.log(chalk.dim(' No skills shared. Use: skills collab share <skill>'));
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
for (const s of config.sharedSkills) {
|
|
174
|
+
console.log(` ${chalk.cyan('◆')} ${s}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
console.log('');
|
|
178
|
+
console.log(chalk.dim(`Created: ${config.createdAt}`));
|
|
179
|
+
console.log(chalk.dim(`Updated: ${config.updatedAt}`));
|
|
180
|
+
console.log('');
|
|
181
|
+
}
|
|
182
|
+
async function collabSync() {
|
|
183
|
+
const config = await loadCollabConfig();
|
|
184
|
+
if (!config) {
|
|
185
|
+
console.error(chalk.red('No team initialized. Run: skills collab init <team-name>'));
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
const spinner = p.spinner();
|
|
189
|
+
spinner.start('Syncing team skills...');
|
|
190
|
+
// Sync is currently local-only (future: Git/API based sync)
|
|
191
|
+
await new Promise(r => setTimeout(r, 500));
|
|
192
|
+
spinner.stop('Skills synchronized');
|
|
193
|
+
console.log(chalk.dim(` ${config.sharedSkills.length} skill(s) in sync`));
|
|
194
|
+
console.log('');
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=collab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collab.js","sourceRoot":"","sources":["../../../src/cli/commands/collab.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAS,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAQ,MAAM,MAAM,CAAC;AAWrC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,MAAM,MAAM,GAAG,OAAO;SACjB,OAAO,CAAC,QAAQ,CAAC;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,0BAA0B,CAAC,CAAC;IAE7C,MAAM;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;QAC/B,IAAI,CAAC;YACD,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE;QAC7B,IAAI,CAAC;YACD,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC5B,IAAI,CAAC;YACD,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACD,MAAM,YAAY,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,MAAM;SACD,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACD,MAAM,UAAU,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC3B,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAoB;IAChD,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,MAAM,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAgB;IACtC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,IAAI,mDAAmD,CAAC,CAAC,CAAC;QACvG,OAAO;IACX,CAAC;IAED,MAAM,MAAM,GAAiB;QACzB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,QAAQ,gBAAgB,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,MAAc;IACzC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,2BAA2B,CAAC,CAAC,CAAC;QAChE,OAAO;IACX,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,MAAM,aAAa,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,SAAiB;IACxC,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,oBAAoB,CAAC,CAAC,CAAC;QAC5D,OAAO;IACX,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,SAAS,gBAAgB,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,KAAK,UAAU,YAAY;IACvB,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACtF,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACJ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACJ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,UAAU;IACrB,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAExC,4DAA4D;IAC5D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAE3C,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,MAAM,mBAAmB,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert Command
|
|
3
|
+
* Cross-agent format translation for skills
|
|
4
|
+
* (SkillKit calls this "translate" — we call it "convert")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register the convert command
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerConvertCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/convert.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAe7D"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert Command
|
|
3
|
+
* Cross-agent format translation for skills
|
|
4
|
+
* (SkillKit calls this "translate" — we call it "convert")
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { readFile, writeFile, mkdir } from 'fs/promises';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { resolve, join, basename, dirname } from 'path';
|
|
11
|
+
// File patterns for each agent format
|
|
12
|
+
const FORMAT_MAP = {
|
|
13
|
+
cursor: { file: 'SKILL.md', dir: '.cursor/skills' },
|
|
14
|
+
claude: { file: 'SKILL.md', dir: '.claude/skills' },
|
|
15
|
+
copilot: { file: 'SKILL.md', dir: '.github/skills' },
|
|
16
|
+
codex: { file: 'SKILL.md', dir: '.codex/skills' },
|
|
17
|
+
windsurf: { file: 'SKILL.md', dir: '.windsurf/skills' },
|
|
18
|
+
antigravity: { file: 'SKILL.md', dir: '.agent/skills' },
|
|
19
|
+
};
|
|
20
|
+
const VALID_FORMATS = Object.keys(FORMAT_MAP);
|
|
21
|
+
/**
|
|
22
|
+
* Register the convert command
|
|
23
|
+
*/
|
|
24
|
+
export function registerConvertCommand(program) {
|
|
25
|
+
program
|
|
26
|
+
.command('convert <source> <target-format>')
|
|
27
|
+
.alias('cv')
|
|
28
|
+
.description(`Convert skills between agent formats (${VALID_FORMATS.join(', ')})`)
|
|
29
|
+
.option('-o, --output <path>', 'Output file path (default: auto)')
|
|
30
|
+
.option('--overwrite', 'Overwrite existing output file')
|
|
31
|
+
.action(async (source, targetFormat, options) => {
|
|
32
|
+
try {
|
|
33
|
+
await convertCommand(source, targetFormat, options);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.error(chalk.red('Error:'), err.message);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async function convertCommand(source, targetFormat, options) {
|
|
42
|
+
// Validate target format
|
|
43
|
+
if (!VALID_FORMATS.includes(targetFormat)) {
|
|
44
|
+
console.error(chalk.red(`Invalid format: ${targetFormat}`));
|
|
45
|
+
console.log(chalk.dim(`Valid formats: ${VALID_FORMATS.join(', ')}`));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const sourcePath = resolve(source);
|
|
49
|
+
if (!existsSync(sourcePath)) {
|
|
50
|
+
console.error(chalk.red(`Source not found: ${sourcePath}`));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const spinner = ora(`Converting to ${targetFormat} format...`).start();
|
|
54
|
+
// Read source content
|
|
55
|
+
const content = await readFile(sourcePath, 'utf-8');
|
|
56
|
+
const sourceFormat = detectFormat(sourcePath, content);
|
|
57
|
+
if (!sourceFormat) {
|
|
58
|
+
spinner.fail('Could not detect source format');
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
// Parse source into intermediate representation
|
|
62
|
+
const parsed = parseSkillContent(content, sourceFormat);
|
|
63
|
+
// Convert to target format
|
|
64
|
+
const converted = renderToFormat(parsed, targetFormat);
|
|
65
|
+
// Determine output path
|
|
66
|
+
const target = FORMAT_MAP[targetFormat];
|
|
67
|
+
const outputPath = options.output
|
|
68
|
+
? resolve(options.output)
|
|
69
|
+
: join(dirname(sourcePath), target.dir, target.file);
|
|
70
|
+
if (existsSync(outputPath) && !options.overwrite) {
|
|
71
|
+
spinner.fail(`Output file exists: ${outputPath}`);
|
|
72
|
+
console.log(chalk.dim('Use --overwrite to replace'));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
// Write output
|
|
76
|
+
await mkdir(dirname(outputPath), { recursive: true });
|
|
77
|
+
await writeFile(outputPath, converted);
|
|
78
|
+
spinner.succeed(`Converted ${sourceFormat} → ${targetFormat}`);
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log(` ${chalk.dim('Source:')} ${chalk.cyan(basename(sourcePath))}`);
|
|
81
|
+
console.log(` ${chalk.dim('Output:')} ${chalk.green(outputPath)}`);
|
|
82
|
+
console.log('');
|
|
83
|
+
}
|
|
84
|
+
function detectFormat(filePath, content) {
|
|
85
|
+
const filename = basename(filePath).toLowerCase();
|
|
86
|
+
if (filename === '.cursorrules')
|
|
87
|
+
return 'cursor';
|
|
88
|
+
if (filename === '.windsurfrules')
|
|
89
|
+
return 'windsurf';
|
|
90
|
+
if (filename === 'claude.md')
|
|
91
|
+
return 'claude';
|
|
92
|
+
if (filename === 'agents.md')
|
|
93
|
+
return 'codex';
|
|
94
|
+
if (filename === 'copilot-instructions.md')
|
|
95
|
+
return 'copilot';
|
|
96
|
+
if (filename === 'skill.md')
|
|
97
|
+
return 'antigravity';
|
|
98
|
+
// Try content-based detection
|
|
99
|
+
if (content.startsWith('---\n') && content.includes('name:'))
|
|
100
|
+
return 'antigravity';
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
function parseSkillContent(content, format) {
|
|
104
|
+
const parsed = {
|
|
105
|
+
name: '',
|
|
106
|
+
description: '',
|
|
107
|
+
sections: [],
|
|
108
|
+
rawContent: content,
|
|
109
|
+
};
|
|
110
|
+
// Extract frontmatter if present
|
|
111
|
+
if (content.startsWith('---\n')) {
|
|
112
|
+
const endIdx = content.indexOf('\n---\n', 4);
|
|
113
|
+
if (endIdx > 0) {
|
|
114
|
+
const fm = content.substring(4, endIdx);
|
|
115
|
+
parsed.frontmatter = {};
|
|
116
|
+
for (const line of fm.split('\n')) {
|
|
117
|
+
const colonIdx = line.indexOf(':');
|
|
118
|
+
if (colonIdx > 0) {
|
|
119
|
+
const key = line.substring(0, colonIdx).trim();
|
|
120
|
+
const val = line.substring(colonIdx + 1).trim();
|
|
121
|
+
parsed.frontmatter[key] = val;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
parsed.name = parsed.frontmatter['name'] || '';
|
|
125
|
+
parsed.description = parsed.frontmatter['description'] || '';
|
|
126
|
+
content = content.substring(endIdx + 5);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Parse markdown sections
|
|
130
|
+
const lines = content.split('\n');
|
|
131
|
+
let currentHeading = '';
|
|
132
|
+
let currentContent = [];
|
|
133
|
+
for (const line of lines) {
|
|
134
|
+
if (line.startsWith('# ') || line.startsWith('## ')) {
|
|
135
|
+
if (currentHeading || currentContent.length > 0) {
|
|
136
|
+
parsed.sections.push({ heading: currentHeading, content: currentContent.join('\n').trim() });
|
|
137
|
+
}
|
|
138
|
+
currentHeading = line.replace(/^#+\s*/, '');
|
|
139
|
+
currentContent = [];
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
currentContent.push(line);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (currentHeading || currentContent.length > 0) {
|
|
146
|
+
parsed.sections.push({ heading: currentHeading, content: currentContent.join('\n').trim() });
|
|
147
|
+
}
|
|
148
|
+
if (!parsed.name && parsed.sections.length > 0) {
|
|
149
|
+
parsed.name = parsed.sections[0].heading;
|
|
150
|
+
}
|
|
151
|
+
return parsed;
|
|
152
|
+
}
|
|
153
|
+
function renderToFormat(parsed, format) {
|
|
154
|
+
switch (format) {
|
|
155
|
+
case 'antigravity':
|
|
156
|
+
return renderAsSkillMd(parsed);
|
|
157
|
+
case 'cursor':
|
|
158
|
+
case 'windsurf':
|
|
159
|
+
return renderAsCursorRules(parsed);
|
|
160
|
+
case 'claude':
|
|
161
|
+
return renderAsClaudeMd(parsed);
|
|
162
|
+
case 'copilot':
|
|
163
|
+
return renderAsCopilot(parsed);
|
|
164
|
+
case 'codex':
|
|
165
|
+
return renderAsAgentsMd(parsed);
|
|
166
|
+
default:
|
|
167
|
+
return parsed.rawContent;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function renderAsSkillMd(parsed) {
|
|
171
|
+
const lines = [];
|
|
172
|
+
lines.push('---');
|
|
173
|
+
lines.push(`name: ${parsed.name || 'converted-skill'}`);
|
|
174
|
+
lines.push(`description: ${parsed.description || 'Converted skill'}`);
|
|
175
|
+
lines.push('---');
|
|
176
|
+
lines.push('');
|
|
177
|
+
for (const section of parsed.sections) {
|
|
178
|
+
if (section.heading)
|
|
179
|
+
lines.push(`## ${section.heading}`);
|
|
180
|
+
if (section.content)
|
|
181
|
+
lines.push(section.content);
|
|
182
|
+
lines.push('');
|
|
183
|
+
}
|
|
184
|
+
return lines.join('\n');
|
|
185
|
+
}
|
|
186
|
+
function renderAsCursorRules(parsed) {
|
|
187
|
+
const lines = [];
|
|
188
|
+
if (parsed.name)
|
|
189
|
+
lines.push(`# ${parsed.name}`);
|
|
190
|
+
lines.push('');
|
|
191
|
+
for (const section of parsed.sections) {
|
|
192
|
+
if (section.heading)
|
|
193
|
+
lines.push(`## ${section.heading}`);
|
|
194
|
+
if (section.content)
|
|
195
|
+
lines.push(section.content);
|
|
196
|
+
lines.push('');
|
|
197
|
+
}
|
|
198
|
+
return lines.join('\n');
|
|
199
|
+
}
|
|
200
|
+
function renderAsClaudeMd(parsed) {
|
|
201
|
+
return renderAsCursorRules(parsed);
|
|
202
|
+
}
|
|
203
|
+
function renderAsCopilot(parsed) {
|
|
204
|
+
const lines = [];
|
|
205
|
+
lines.push(`# Copilot Instructions${parsed.name ? `: ${parsed.name}` : ''}`);
|
|
206
|
+
lines.push('');
|
|
207
|
+
for (const section of parsed.sections) {
|
|
208
|
+
if (section.heading)
|
|
209
|
+
lines.push(`## ${section.heading}`);
|
|
210
|
+
if (section.content)
|
|
211
|
+
lines.push(section.content);
|
|
212
|
+
lines.push('');
|
|
213
|
+
}
|
|
214
|
+
return lines.join('\n');
|
|
215
|
+
}
|
|
216
|
+
function renderAsAgentsMd(parsed) {
|
|
217
|
+
return renderAsClaudeMd(parsed);
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/cli/commands/convert.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASxD,sCAAsC;AACtC,MAAM,UAAU,GAAuD;IACnE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE;IACnD,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE;IACnD,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,gBAAgB,EAAE;IACpD,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE;IACjD,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,kBAAkB,EAAE;IACvD,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,EAAE;CAC1D,CAAC;AAEF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,OAAO;SACF,OAAO,CAAC,kCAAkC,CAAC;SAC3C,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,yCAAyC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SACjF,MAAM,CAAC,qBAAqB,EAAE,kCAAkC,CAAC;SACjE,MAAM,CAAC,aAAa,EAAE,gCAAgC,CAAC;SACvD,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,YAAoB,EAAE,OAAuB,EAAE,EAAE;QAC5E,IAAI,CAAC;YACD,MAAM,cAAc,CAAC,MAAM,EAAE,YAA2B,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,YAAyB,EAAE,OAAuB;IAC5F,yBAAyB;IACzB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,YAAY,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;IAEvE,sBAAsB;IACtB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACpD,MAAM,YAAY,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEvD,IAAI,CAAC,YAAY,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,gDAAgD;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAExD,2BAA2B;IAC3B,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEvD,wBAAwB;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM;QAC7B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QACzB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,eAAe;IACf,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEvC,OAAO,CAAC,OAAO,CAAC,aAAa,YAAY,MAAM,YAAY,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAUD,SAAS,YAAY,CAAC,QAAgB,EAAE,OAAe;IACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,QAAQ,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,QAAQ,KAAK,gBAAgB;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,QAAQ,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAC7C,IAAI,QAAQ,KAAK,yBAAyB;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,aAAa,CAAC;IAElD,8BAA8B;IAC9B,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,aAAa,CAAC;IAEnF,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAmB;IAC3D,MAAM,MAAM,GAAgB;QACxB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,OAAO;KACtB,CAAC;IAEF,iCAAiC;IACjC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACf,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC7D,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAED,0BAA0B;IAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,cAAc,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjG,CAAC;YACD,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC5C,cAAc,GAAG,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACL,CAAC;IAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAAmB,EAAE,MAAmB;IAC5D,QAAQ,MAAM,EAAE,CAAC;QACb,KAAK,aAAa;YACd,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,QAAQ,CAAC;QACd,KAAK,UAAU;YACX,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,QAAQ;YACT,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,SAAS;YACV,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,OAAO;YACR,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpC;YACI,OAAO,MAAM,CAAC,UAAU,CAAC;IACjC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,MAAmB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,WAAW,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAmB;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAmB;IACzC,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,eAAe,CAAC,MAAmB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAmB;IACzC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Craft Command
|
|
3
|
+
* Enhanced skill scaffolding with optional directories
|
|
4
|
+
* (SkillKit calls this "create" — we call it "craft")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
export interface CraftOptions {
|
|
8
|
+
full?: boolean;
|
|
9
|
+
scripts?: boolean;
|
|
10
|
+
references?: boolean;
|
|
11
|
+
assets?: boolean;
|
|
12
|
+
dir?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Register the craft command with commander
|
|
16
|
+
*/
|
|
17
|
+
export declare function registerCraftCommand(program: Command): void;
|
|
18
|
+
//# sourceMappingURL=craft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"craft.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/craft.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB3D"}
|