agent-skills-cli 1.0.7 → 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 +43 -27
- 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/remove.d.ts +40 -0
- package/dist/cli/commands/remove.d.ts.map +1 -0
- package/dist/cli/commands/remove.js +161 -0
- package/dist/cli/commands/remove.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/fzf-search.d.ts +28 -0
- package/dist/cli/fzf-search.d.ts.map +1 -0
- package/dist/cli/fzf-search.js +211 -0
- package/dist/cli/fzf-search.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 +87 -2537
- 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 +10 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/installer.d.ts +79 -0
- package/dist/core/installer.d.ts.map +1 -0
- package/dist/core/installer.js +142 -0
- package/dist/core/installer.js.map +1 -0
- 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/skill-lock.d.ts +114 -0
- package/dist/core/skill-lock.d.ts.map +1 -0
- package/dist/core/skill-lock.js +133 -0
- package/dist/core/skill-lock.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 +2 -2
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { discoverSkills, loadSkill, listSkillResources, generateSkillsPromptXML, generateFullSkillsContext, } from '../../core/index.js';
|
|
3
|
+
export function registerShowCommand(program) {
|
|
4
|
+
// Show command
|
|
5
|
+
program
|
|
6
|
+
.command('show <name>')
|
|
7
|
+
.description('Show detailed information about a skill')
|
|
8
|
+
.action(async (name) => {
|
|
9
|
+
try {
|
|
10
|
+
const skills = await discoverSkills();
|
|
11
|
+
const skillRef = skills.find(s => s.name === name);
|
|
12
|
+
if (!skillRef) {
|
|
13
|
+
console.error(chalk.red(`Skill not found: ${name}`));
|
|
14
|
+
console.log(chalk.gray('Available skills:'), skills.map(s => s.name).join(', ') || 'none');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
const skill = await loadSkill(skillRef.path);
|
|
18
|
+
if (!skill) {
|
|
19
|
+
console.error(chalk.red(`Could not load skill: ${name}`));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
console.log(chalk.bold(`\n${skill.metadata.name}`));
|
|
23
|
+
console.log('─'.repeat(40));
|
|
24
|
+
console.log(chalk.cyan('Description:'), skill.metadata.description);
|
|
25
|
+
console.log(chalk.cyan('Path:'), skill.path);
|
|
26
|
+
if (skill.metadata.license) {
|
|
27
|
+
console.log(chalk.cyan('License:'), skill.metadata.license);
|
|
28
|
+
}
|
|
29
|
+
if (skill.metadata.compatibility) {
|
|
30
|
+
console.log(chalk.cyan('Compatibility:'), skill.metadata.compatibility);
|
|
31
|
+
}
|
|
32
|
+
// List resources
|
|
33
|
+
const resources = await listSkillResources(skill.path);
|
|
34
|
+
if (resources.scripts.length > 0) {
|
|
35
|
+
console.log(chalk.cyan('\nScripts:'));
|
|
36
|
+
resources.scripts.forEach(s => console.log(chalk.gray(` - ${s}`)));
|
|
37
|
+
}
|
|
38
|
+
if (resources.references.length > 0) {
|
|
39
|
+
console.log(chalk.cyan('\nReferences:'));
|
|
40
|
+
resources.references.forEach(r => console.log(chalk.gray(` - ${r}`)));
|
|
41
|
+
}
|
|
42
|
+
if (resources.assets.length > 0) {
|
|
43
|
+
console.log(chalk.cyan('\nAssets:'));
|
|
44
|
+
resources.assets.forEach(a => console.log(chalk.gray(` - ${a}`)));
|
|
45
|
+
}
|
|
46
|
+
// Body preview
|
|
47
|
+
const bodyLines = skill.body.split('\n').slice(0, 10);
|
|
48
|
+
console.log(chalk.cyan('\nInstructions (preview):'));
|
|
49
|
+
console.log(chalk.gray(bodyLines.join('\n')));
|
|
50
|
+
if (skill.body.split('\n').length > 10) {
|
|
51
|
+
console.log(chalk.gray('...'));
|
|
52
|
+
}
|
|
53
|
+
console.log('');
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error(chalk.red('Error showing skill:'), error);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
// Prompt command - generate system prompt XML
|
|
61
|
+
program
|
|
62
|
+
.command('prompt')
|
|
63
|
+
.description('Generate system prompt XML for discovered skills')
|
|
64
|
+
.option('-f, --full', 'Include full skill system instructions')
|
|
65
|
+
.action(async (options) => {
|
|
66
|
+
try {
|
|
67
|
+
const skills = await discoverSkills();
|
|
68
|
+
if (skills.length === 0) {
|
|
69
|
+
console.log(chalk.yellow('No skills found.'));
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (options.full) {
|
|
73
|
+
const context = generateFullSkillsContext(skills);
|
|
74
|
+
console.log(context);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const { xml, skillCount, estimatedTokens } = generateSkillsPromptXML(skills);
|
|
78
|
+
console.log(xml);
|
|
79
|
+
console.log(chalk.gray(`\n# ${skillCount} skills, ~${estimatedTokens} tokens`));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error(chalk.red('Error generating prompt:'), error);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// Init command - create a new skill
|
|
88
|
+
program
|
|
89
|
+
.command('init <name>')
|
|
90
|
+
.description('Create a new skill from template')
|
|
91
|
+
.option('-d, --directory <dir>', 'Directory to create skill in', './skills')
|
|
92
|
+
.action(async (name, options) => {
|
|
93
|
+
try {
|
|
94
|
+
const { mkdir, writeFile } = await import('fs/promises');
|
|
95
|
+
const { join } = await import('path');
|
|
96
|
+
const skillDir = join(options.directory, name);
|
|
97
|
+
// Create directories
|
|
98
|
+
await mkdir(join(skillDir, 'scripts'), { recursive: true });
|
|
99
|
+
await mkdir(join(skillDir, 'references'), { recursive: true });
|
|
100
|
+
await mkdir(join(skillDir, 'assets'), { recursive: true });
|
|
101
|
+
// Create SKILL.md
|
|
102
|
+
const skillMd = `---
|
|
103
|
+
name: ${name}
|
|
104
|
+
description: Brief description of what this skill does and when to use it.
|
|
105
|
+
license: MIT
|
|
106
|
+
metadata:
|
|
107
|
+
author: your-name
|
|
108
|
+
version: "1.0"
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# ${name.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')}
|
|
112
|
+
|
|
113
|
+
## When to use this skill
|
|
114
|
+
|
|
115
|
+
Use this skill when the user needs to...
|
|
116
|
+
|
|
117
|
+
## Instructions
|
|
118
|
+
|
|
119
|
+
1. First step
|
|
120
|
+
2. Second step
|
|
121
|
+
3. Third step
|
|
122
|
+
|
|
123
|
+
## Examples
|
|
124
|
+
|
|
125
|
+
### Example 1
|
|
126
|
+
|
|
127
|
+
\`\`\`
|
|
128
|
+
Example input or command
|
|
129
|
+
\`\`\`
|
|
130
|
+
|
|
131
|
+
## Best practices
|
|
132
|
+
|
|
133
|
+
- Best practice 1
|
|
134
|
+
- Best practice 2
|
|
135
|
+
`;
|
|
136
|
+
await writeFile(join(skillDir, 'SKILL.md'), skillMd);
|
|
137
|
+
console.log(chalk.green(`✓ Created skill: ${name}`));
|
|
138
|
+
console.log(chalk.gray(` Path: ${skillDir}`));
|
|
139
|
+
console.log(chalk.gray('\nNext steps:'));
|
|
140
|
+
console.log(chalk.gray(' 1. Edit SKILL.md with your instructions'));
|
|
141
|
+
console.log(chalk.gray(' 2. Add scripts to scripts/'));
|
|
142
|
+
console.log(chalk.gray(' 3. Run: skills validate ' + skillDir));
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error(chalk.red('Error creating skill:'), error);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=show.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/cli/commands/show.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Command
|
|
3
|
+
* Submit skills to the marketplace
|
|
4
|
+
* (SkillKit calls this "publish submit" — we call it "submit")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
export interface SubmitOptions {
|
|
8
|
+
dryRun?: boolean;
|
|
9
|
+
name?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Register the submit command with commander
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerSubmitCommand(program: Command): void;
|
|
15
|
+
//# sourceMappingURL=submit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/submit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,aAAa;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAc5D"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Submit Command
|
|
3
|
+
* Submit skills to the marketplace
|
|
4
|
+
* (SkillKit calls this "publish submit" — we call it "submit")
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { readFile, stat } from 'fs/promises';
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
import { resolve, join, basename } from 'path';
|
|
11
|
+
import { loadSkill, validateMetadata, validateBody } from '../../core/index.js';
|
|
12
|
+
// Supabase API for submission
|
|
13
|
+
const SUBMIT_API = 'https://www.agentskills.in/api/skills/submit';
|
|
14
|
+
/**
|
|
15
|
+
* Register the submit command with commander
|
|
16
|
+
*/
|
|
17
|
+
export function registerSubmitCommand(program) {
|
|
18
|
+
program
|
|
19
|
+
.command('submit [path]')
|
|
20
|
+
.description('Submit a skill to the Agent Skills marketplace')
|
|
21
|
+
.option('-n, --dry-run', 'Preview what would be submitted without uploading')
|
|
22
|
+
.option('--name <name>', 'Custom skill name (overrides SKILL.md name)')
|
|
23
|
+
.action(async (path, options) => {
|
|
24
|
+
try {
|
|
25
|
+
await submitCommand(path || '.', options);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error(chalk.red('Error:'), err.message);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Run the submit command
|
|
35
|
+
*/
|
|
36
|
+
async function submitCommand(targetPath, options) {
|
|
37
|
+
const resolvedPath = resolve(targetPath);
|
|
38
|
+
// Step 1: Find and validate SKILL.md
|
|
39
|
+
const spinner = ora('Validating skill...').start();
|
|
40
|
+
let skillMdPath;
|
|
41
|
+
const pathStat = await stat(resolvedPath);
|
|
42
|
+
if (pathStat.isDirectory()) {
|
|
43
|
+
skillMdPath = join(resolvedPath, 'SKILL.md');
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
skillMdPath = resolvedPath;
|
|
47
|
+
}
|
|
48
|
+
if (!existsSync(skillMdPath)) {
|
|
49
|
+
spinner.fail('No SKILL.md found');
|
|
50
|
+
console.log(chalk.dim(` Looked in: ${skillMdPath}`));
|
|
51
|
+
console.log(chalk.dim(` Create one with: ${chalk.white('skills craft <name>')}`));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Load and validate
|
|
55
|
+
const skillContent = await readFile(skillMdPath, 'utf-8');
|
|
56
|
+
let skill;
|
|
57
|
+
try {
|
|
58
|
+
skill = await loadSkill(pathStat.isDirectory() ? resolvedPath : resolve(resolvedPath, '..'));
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
spinner.fail(`Failed to load skill: ${err.message}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
if (!skill) {
|
|
65
|
+
spinner.fail('Could not parse skill from SKILL.md');
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
// Validate metadata
|
|
69
|
+
const metaResult = validateMetadata(skill.metadata);
|
|
70
|
+
if (!metaResult.valid) {
|
|
71
|
+
spinner.fail('Skill validation failed');
|
|
72
|
+
console.log('');
|
|
73
|
+
for (const error of metaResult.errors) {
|
|
74
|
+
console.log(` ${chalk.red('✖')} ${error.message}`);
|
|
75
|
+
}
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(chalk.dim('Fix validation errors before submitting.'));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
// Validate body
|
|
81
|
+
const bodyResult = validateBody(skill.body);
|
|
82
|
+
if (!bodyResult.valid) {
|
|
83
|
+
spinner.warn('Skill has body warnings');
|
|
84
|
+
for (const warning of bodyResult.warnings || []) {
|
|
85
|
+
console.log(` ${chalk.yellow('⚠')} ${warning.message}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
spinner.succeed('Skill validated');
|
|
89
|
+
console.log('');
|
|
90
|
+
// Step 2: Extract metadata
|
|
91
|
+
const skillName = options.name || skill.metadata?.name || basename(resolvedPath);
|
|
92
|
+
const description = skill.metadata?.description || '';
|
|
93
|
+
const tags = skill.metadata?.metadata?.tags || [];
|
|
94
|
+
const version = skill.metadata?.metadata?.version || '1.0.0';
|
|
95
|
+
// Display submission preview
|
|
96
|
+
console.log(chalk.bold('📦 Submission Preview:'));
|
|
97
|
+
console.log(` ${chalk.dim('Name:')} ${chalk.cyan(skillName)}`);
|
|
98
|
+
console.log(` ${chalk.dim('Description:')} ${description || chalk.yellow('(none)')}`);
|
|
99
|
+
console.log(` ${chalk.dim('Version:')} ${version}`);
|
|
100
|
+
console.log(` ${chalk.dim('Tags:')} ${tags.length > 0 ? tags.join(', ') : chalk.yellow('(none)')}`);
|
|
101
|
+
console.log(` ${chalk.dim('Content:')} ${skillContent.split('\n').length} lines`);
|
|
102
|
+
console.log('');
|
|
103
|
+
if (options.dryRun) {
|
|
104
|
+
console.log(chalk.yellow('🏃 Dry run — skill was NOT submitted'));
|
|
105
|
+
console.log(chalk.dim(' Remove --dry-run to submit for real'));
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Step 3: Submit to marketplace
|
|
109
|
+
const submitSpinner = ora('Submitting to marketplace...').start();
|
|
110
|
+
try {
|
|
111
|
+
const response = await fetch(SUBMIT_API, {
|
|
112
|
+
method: 'POST',
|
|
113
|
+
headers: { 'Content-Type': 'application/json' },
|
|
114
|
+
body: JSON.stringify({
|
|
115
|
+
name: skillName,
|
|
116
|
+
description,
|
|
117
|
+
tags,
|
|
118
|
+
version,
|
|
119
|
+
content: skillContent,
|
|
120
|
+
source: resolvedPath,
|
|
121
|
+
}),
|
|
122
|
+
});
|
|
123
|
+
if (response.ok) {
|
|
124
|
+
const data = await response.json();
|
|
125
|
+
submitSpinner.succeed('Submitted successfully!');
|
|
126
|
+
console.log('');
|
|
127
|
+
console.log(chalk.green('✨ Your skill has been submitted for review!'));
|
|
128
|
+
if (data?.url) {
|
|
129
|
+
console.log(chalk.dim(` View at: ${chalk.white(data.url)}`));
|
|
130
|
+
}
|
|
131
|
+
console.log(chalk.dim(` Status: Pending review`));
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const errorText = await response.text();
|
|
135
|
+
submitSpinner.fail('Submission failed');
|
|
136
|
+
console.log(chalk.red(` Server responded: ${response.status} ${errorText}`));
|
|
137
|
+
console.log('');
|
|
138
|
+
console.log(chalk.dim('If this persists, submit via GitHub:'));
|
|
139
|
+
console.log(chalk.dim(' https://github.com/Karanjot786/agent-skills-cli/issues/new'));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
submitSpinner.fail('Could not reach marketplace API');
|
|
144
|
+
console.log(chalk.dim(` ${err.message}`));
|
|
145
|
+
console.log('');
|
|
146
|
+
console.log(chalk.dim('Alternative: Submit via GitHub issue:'));
|
|
147
|
+
console.log(chalk.dim(` ${chalk.white('https://github.com/Karanjot786/agent-skills-cli/issues/new')}`));
|
|
148
|
+
}
|
|
149
|
+
console.log('');
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit.js","sourceRoot":"","sources":["../../../src/cli/commands/submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suggest Command
|
|
3
|
+
* Project-aware skill recommendations based on tech stack analysis
|
|
4
|
+
* (SkillKit calls this "recommend" — we call it "suggest")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register the suggest command with commander
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerSuggestCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/suggest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B7D"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Suggest Command
|
|
3
|
+
* Project-aware skill recommendations based on tech stack analysis
|
|
4
|
+
* (SkillKit calls this "recommend" — we call it "suggest")
|
|
5
|
+
*/
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { analyzeProject, buildSearchKeywords, scoreSkill } from '../../core/suggest.js';
|
|
9
|
+
import { fetchSkillsForCLI } from '../../core/skillsdb.js';
|
|
10
|
+
/**
|
|
11
|
+
* Register the suggest command with commander
|
|
12
|
+
*/
|
|
13
|
+
export function registerSuggestCommand(program) {
|
|
14
|
+
program
|
|
15
|
+
.command('suggest')
|
|
16
|
+
.alias('sg')
|
|
17
|
+
.description('Get skill suggestions based on your project\'s tech stack')
|
|
18
|
+
.option('-l, --limit <n>', 'Maximum number of suggestions', '10')
|
|
19
|
+
.option('-m, --min-score <n>', 'Minimum match score (0-100)', '20')
|
|
20
|
+
.option('-c, --category <cat>', 'Filter by category')
|
|
21
|
+
.option('-t, --task <query>', 'Search skills by task description')
|
|
22
|
+
.option('-v, --verbose', 'Show detailed match reasons')
|
|
23
|
+
.option('-j, --json', 'Output in JSON format')
|
|
24
|
+
.option('-p, --path <dir>', 'Project path (default: current directory)')
|
|
25
|
+
.action(async (options) => {
|
|
26
|
+
try {
|
|
27
|
+
await suggestCommand({
|
|
28
|
+
limit: parseInt(options.limit) || 10,
|
|
29
|
+
minScore: parseInt(options.minScore) || 20,
|
|
30
|
+
category: options.category,
|
|
31
|
+
task: options.task,
|
|
32
|
+
verbose: options.verbose || false,
|
|
33
|
+
json: options.json || false,
|
|
34
|
+
path: options.path || process.cwd(),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
console.error(chalk.red('Error:'), err.message);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Run the suggest command
|
|
45
|
+
*/
|
|
46
|
+
async function suggestCommand(options) {
|
|
47
|
+
const projectPath = options.path || process.cwd();
|
|
48
|
+
// Step 1: Analyze project
|
|
49
|
+
const spinner = ora('Analyzing your project...').start();
|
|
50
|
+
const analysis = await analyzeProject(projectPath);
|
|
51
|
+
if (analysis.languages.length === 0 && analysis.frameworks.length === 0) {
|
|
52
|
+
spinner.warn('Could not detect project tech stack. Try running from a project directory.');
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
spinner.text = 'Building search queries...';
|
|
56
|
+
const keywords = buildSearchKeywords(analysis, options.task);
|
|
57
|
+
// Show analysis
|
|
58
|
+
spinner.succeed('Project analyzed');
|
|
59
|
+
console.log('');
|
|
60
|
+
if (!options.json) {
|
|
61
|
+
console.log(chalk.bold('📊 Detected Tech Stack:'));
|
|
62
|
+
if (analysis.languages.length > 0) {
|
|
63
|
+
console.log(` ${chalk.dim('Languages:')} ${analysis.languages.join(', ')}`);
|
|
64
|
+
}
|
|
65
|
+
if (analysis.frameworks.length > 0) {
|
|
66
|
+
console.log(` ${chalk.dim('Frameworks:')} ${analysis.frameworks.join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
if (analysis.libraries.length > 0) {
|
|
69
|
+
console.log(` ${chalk.dim('Libraries:')} ${analysis.libraries.join(', ')}`);
|
|
70
|
+
}
|
|
71
|
+
if (analysis.testTools.length > 0) {
|
|
72
|
+
console.log(` ${chalk.dim('Testing:')} ${analysis.testTools.join(', ')}`);
|
|
73
|
+
}
|
|
74
|
+
if (analysis.buildTools.length > 0) {
|
|
75
|
+
console.log(` ${chalk.dim('Build:')} ${analysis.buildTools.join(', ')}`);
|
|
76
|
+
}
|
|
77
|
+
console.log('');
|
|
78
|
+
}
|
|
79
|
+
// Step 2: Fetch skills from DB
|
|
80
|
+
const spinner2 = ora('Searching 67K+ skills for matches...').start();
|
|
81
|
+
// Build multiple search queries from keywords
|
|
82
|
+
const searchQueries = keywords.slice(0, 5); // Top 5 keywords
|
|
83
|
+
const allSkills = [];
|
|
84
|
+
const seenIds = new Set();
|
|
85
|
+
for (const query of searchQueries) {
|
|
86
|
+
try {
|
|
87
|
+
const result = await fetchSkillsForCLI({
|
|
88
|
+
search: query,
|
|
89
|
+
limit: 50,
|
|
90
|
+
});
|
|
91
|
+
if (result?.skills) {
|
|
92
|
+
for (const skill of result.skills) {
|
|
93
|
+
if (!seenIds.has(skill.scopedName)) {
|
|
94
|
+
seenIds.add(skill.scopedName);
|
|
95
|
+
allSkills.push(skill);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Continue with other queries if one fails
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (allSkills.length === 0) {
|
|
105
|
+
spinner2.warn('No skills found matching your project. Try using --task to search by task.');
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Step 3: Score and rank skills
|
|
109
|
+
const suggestions = allSkills
|
|
110
|
+
.map(skill => {
|
|
111
|
+
const { score, reasons } = scoreSkill({ name: skill.name, description: skill.description || '', stars: skill.stars || 0 }, analysis, keywords);
|
|
112
|
+
return {
|
|
113
|
+
name: skill.name,
|
|
114
|
+
author: skill.author,
|
|
115
|
+
scopedName: skill.scoped_name || `@${skill.author}/${skill.name}`,
|
|
116
|
+
description: skill.description || '',
|
|
117
|
+
score,
|
|
118
|
+
matchReasons: reasons,
|
|
119
|
+
githubUrl: skill.github_url || '',
|
|
120
|
+
stars: skill.stars || 0,
|
|
121
|
+
};
|
|
122
|
+
})
|
|
123
|
+
.filter(s => s.score >= (options.minScore || 20))
|
|
124
|
+
.sort((a, b) => b.score - a.score)
|
|
125
|
+
.slice(0, options.limit || 10);
|
|
126
|
+
spinner2.succeed(`Found ${suggestions.length} matching skills`);
|
|
127
|
+
console.log('');
|
|
128
|
+
// Step 4: Display results
|
|
129
|
+
if (options.json) {
|
|
130
|
+
console.log(JSON.stringify(suggestions, null, 2));
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (suggestions.length === 0) {
|
|
134
|
+
console.log(chalk.yellow('No skills matched with sufficient confidence. Try lowering --min-score.'));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const stackLabel = [...analysis.frameworks, ...analysis.languages].slice(0, 3).join(' + ');
|
|
138
|
+
console.log(chalk.bold(`🎯 Skill Suggestions for your project (${stackLabel})`));
|
|
139
|
+
console.log('');
|
|
140
|
+
for (const suggestion of suggestions) {
|
|
141
|
+
const scoreColor = suggestion.score >= 80
|
|
142
|
+
? chalk.green
|
|
143
|
+
: suggestion.score >= 50
|
|
144
|
+
? chalk.yellow
|
|
145
|
+
: chalk.dim;
|
|
146
|
+
const starsStr = suggestion.stars > 0 ? chalk.dim(` ★${suggestion.stars}`) : '';
|
|
147
|
+
const scoreStr = scoreColor(`${suggestion.score}%`.padStart(4));
|
|
148
|
+
console.log(` ${scoreStr} ${chalk.cyan(suggestion.scopedName.padEnd(40))} ${chalk.dim(truncate(suggestion.description, 50))}${starsStr}`);
|
|
149
|
+
if (options.verbose && suggestion.matchReasons.length > 0) {
|
|
150
|
+
for (const reason of suggestion.matchReasons) {
|
|
151
|
+
console.log(` ${chalk.dim('↳')} ${chalk.dim(reason)}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
console.log('');
|
|
156
|
+
console.log(chalk.dim(` Install: ${chalk.white('skills install <name>')}`));
|
|
157
|
+
console.log('');
|
|
158
|
+
}
|
|
159
|
+
function truncate(str, maxLen) {
|
|
160
|
+
if (str.length <= maxLen)
|
|
161
|
+
return str;
|
|
162
|
+
return str.slice(0, maxLen - 1) + '…';
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../../src/cli/commands/suggest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EACH,cAAc,EACd,mBAAmB,EACnB,UAAU,EAIb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAkB,MAAM,wBAAwB,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,OAAO;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,2DAA2D,CAAC;SACxE,MAAM,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,IAAI,CAAC;SAChE,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,IAAI,CAAC;SAClE,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;SACpD,MAAM,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;SACjE,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC;SAC7C,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE;QAC3B,IAAI,CAAC;YACD,MAAM,cAAc,CAAC;gBACjB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;gBACpC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;gBAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;gBACjC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,KAAK;gBAC3B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE;aACtC,CAAC,CAAC;QACP,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;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,OAAuB;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAElD,0BAA0B;IAC1B,MAAM,OAAO,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IAEnD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC3F,OAAO;IACX,CAAC;IAED,OAAO,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC5C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7D,gBAAgB;IAChB,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAAC;IAErE,8CAA8C;IAC9C,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;IAC7D,MAAM,SAAS,GAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;gBACnC,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,EAAE;aACZ,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;gBACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;wBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;wBAC9B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,2CAA2C;QAC/C,CAAC;IACL,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;QAC5F,OAAO;IACX,CAAC;IAED,gCAAgC;IAChC,MAAM,WAAW,GAAqB,SAAS;SAC1C,GAAG,CAAC,KAAK,CAAC,EAAE;QACT,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CACjC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,EACnF,QAAQ,EACR,QAAQ,CACX,CAAC;QACF,OAAO;YACH,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;YACjE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,EAAE;YACpC,KAAK;YACL,YAAY,EAAE,OAAO;YACrB,SAAS,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;YACjC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC;SAC1B,CAAC;IACN,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SAChD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEnC,QAAQ,CAAC,OAAO,CAAC,SAAS,WAAW,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,0BAA0B;IAC1B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO;IACX,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yEAAyE,CAAC,CAAC,CAAC;QACrG,OAAO;IACX,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,UAAU,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACrC,CAAC,CAAC,KAAK,CAAC,KAAK;YACb,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpB,CAAC,CAAC,KAAK,CAAC,MAAM;gBACd,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAEpB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhE,OAAO,CAAC,GAAG,CACP,KAAK,QAAQ,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,CACjI,CAAC;QAEF,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClE,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAc;IACzC,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Track Command
|
|
3
|
+
* Session state tracking — save/restore working context
|
|
4
|
+
* (SkillKit calls this "session" — we call it "track")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register the track command
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerTrackCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=track.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/track.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC3D"}
|