agent-skills-cli 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +44 -19
  2. package/dist/adapters/adapter.d.ts +51 -0
  3. package/dist/adapters/adapter.d.ts.map +1 -0
  4. package/dist/adapters/adapter.js +51 -0
  5. package/dist/adapters/adapter.js.map +1 -0
  6. package/dist/adapters/claude.d.ts +16 -0
  7. package/dist/adapters/claude.d.ts.map +1 -0
  8. package/dist/adapters/claude.js +30 -0
  9. package/dist/adapters/claude.js.map +1 -0
  10. package/dist/adapters/copilot.d.ts +16 -0
  11. package/dist/adapters/copilot.d.ts.map +1 -0
  12. package/dist/adapters/copilot.js +32 -0
  13. package/dist/adapters/copilot.js.map +1 -0
  14. package/dist/adapters/cursor.d.ts +17 -0
  15. package/dist/adapters/cursor.d.ts.map +1 -0
  16. package/dist/adapters/cursor.js +34 -0
  17. package/dist/adapters/cursor.js.map +1 -0
  18. package/dist/adapters/index.d.ts +11 -0
  19. package/dist/adapters/index.d.ts.map +1 -0
  20. package/dist/adapters/index.js +10 -0
  21. package/dist/adapters/index.js.map +1 -0
  22. package/dist/adapters/universal.d.ts +12 -0
  23. package/dist/adapters/universal.d.ts.map +1 -0
  24. package/dist/adapters/universal.js +16 -0
  25. package/dist/adapters/universal.js.map +1 -0
  26. package/dist/cli/agents.d.ts +21 -0
  27. package/dist/cli/agents.d.ts.map +1 -0
  28. package/dist/cli/agents.js +317 -0
  29. package/dist/cli/agents.js.map +1 -0
  30. package/dist/cli/commands/audit.d.ts +11 -0
  31. package/dist/cli/commands/audit.d.ts.map +1 -0
  32. package/dist/cli/commands/audit.js +168 -0
  33. package/dist/cli/commands/audit.js.map +1 -0
  34. package/dist/cli/commands/blueprint.d.ts +11 -0
  35. package/dist/cli/commands/blueprint.d.ts.map +1 -0
  36. package/dist/cli/commands/blueprint.js +210 -0
  37. package/dist/cli/commands/blueprint.js.map +1 -0
  38. package/dist/cli/commands/bootstrap.d.ts +11 -0
  39. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  40. package/dist/cli/commands/bootstrap.js +267 -0
  41. package/dist/cli/commands/bootstrap.js.map +1 -0
  42. package/dist/cli/commands/capture.d.ts +11 -0
  43. package/dist/cli/commands/capture.d.ts.map +1 -0
  44. package/dist/cli/commands/capture.js +109 -0
  45. package/dist/cli/commands/capture.js.map +1 -0
  46. package/dist/cli/commands/ci.d.ts +11 -0
  47. package/dist/cli/commands/ci.d.ts.map +1 -0
  48. package/dist/cli/commands/ci.js +144 -0
  49. package/dist/cli/commands/ci.js.map +1 -0
  50. package/dist/cli/commands/collab.d.ts +11 -0
  51. package/dist/cli/commands/collab.d.ts.map +1 -0
  52. package/dist/cli/commands/collab.js +196 -0
  53. package/dist/cli/commands/collab.js.map +1 -0
  54. package/dist/cli/commands/convert.d.ts +11 -0
  55. package/dist/cli/commands/convert.d.ts.map +1 -0
  56. package/dist/cli/commands/convert.js +170 -0
  57. package/dist/cli/commands/convert.js.map +1 -0
  58. package/dist/cli/commands/craft.d.ts +18 -0
  59. package/dist/cli/commands/craft.d.ts.map +1 -0
  60. package/dist/cli/commands/craft.js +205 -0
  61. package/dist/cli/commands/craft.js.map +1 -0
  62. package/dist/cli/commands/export.d.ts +9 -0
  63. package/dist/cli/commands/export.d.ts.map +1 -0
  64. package/dist/cli/commands/export.js +111 -0
  65. package/dist/cli/commands/export.js.map +1 -0
  66. package/dist/cli/commands/forge.d.ts +11 -0
  67. package/dist/cli/commands/forge.d.ts.map +1 -0
  68. package/dist/cli/commands/forge.js +152 -0
  69. package/dist/cli/commands/forge.js.map +1 -0
  70. package/dist/cli/commands/grid.d.ts +11 -0
  71. package/dist/cli/commands/grid.d.ts.map +1 -0
  72. package/dist/cli/commands/grid.js +217 -0
  73. package/dist/cli/commands/grid.js.map +1 -0
  74. package/dist/cli/commands/insight.d.ts +7 -0
  75. package/dist/cli/commands/insight.d.ts.map +1 -0
  76. package/dist/cli/commands/insight.js +71 -0
  77. package/dist/cli/commands/insight.js.map +1 -0
  78. package/dist/cli/commands/install.d.ts +6 -0
  79. package/dist/cli/commands/install.d.ts.map +1 -0
  80. package/dist/cli/commands/install.js +359 -0
  81. package/dist/cli/commands/install.js.map +1 -0
  82. package/dist/cli/commands/interactive.d.ts +7 -0
  83. package/dist/cli/commands/interactive.d.ts.map +1 -0
  84. package/dist/cli/commands/interactive.js +535 -0
  85. package/dist/cli/commands/interactive.js.map +1 -0
  86. package/dist/cli/commands/list.d.ts +6 -0
  87. package/dist/cli/commands/list.d.ts.map +1 -0
  88. package/dist/cli/commands/list.js +77 -0
  89. package/dist/cli/commands/list.js.map +1 -0
  90. package/dist/cli/commands/lockspec.d.ts +11 -0
  91. package/dist/cli/commands/lockspec.d.ts.map +1 -0
  92. package/dist/cli/commands/lockspec.js +179 -0
  93. package/dist/cli/commands/lockspec.js.map +1 -0
  94. package/dist/cli/commands/marketplace.d.ts +7 -0
  95. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  96. package/dist/cli/commands/marketplace.js +417 -0
  97. package/dist/cli/commands/marketplace.js.map +1 -0
  98. package/dist/cli/commands/method.d.ts +7 -0
  99. package/dist/cli/commands/method.d.ts.map +1 -0
  100. package/dist/cli/commands/method.js +140 -0
  101. package/dist/cli/commands/method.js.map +1 -0
  102. package/dist/cli/commands/mine.d.ts +11 -0
  103. package/dist/cli/commands/mine.d.ts.map +1 -0
  104. package/dist/cli/commands/mine.js +254 -0
  105. package/dist/cli/commands/mine.js.map +1 -0
  106. package/dist/cli/commands/recall.d.ts +11 -0
  107. package/dist/cli/commands/recall.d.ts.map +1 -0
  108. package/dist/cli/commands/recall.js +201 -0
  109. package/dist/cli/commands/recall.js.map +1 -0
  110. package/dist/cli/commands/rule.d.ts +11 -0
  111. package/dist/cli/commands/rule.d.ts.map +1 -0
  112. package/dist/cli/commands/rule.js +230 -0
  113. package/dist/cli/commands/rule.js.map +1 -0
  114. package/dist/cli/commands/score.d.ts +10 -0
  115. package/dist/cli/commands/score.d.ts.map +1 -0
  116. package/dist/cli/commands/score.js +91 -0
  117. package/dist/cli/commands/score.js.map +1 -0
  118. package/dist/cli/commands/search.d.ts +6 -0
  119. package/dist/cli/commands/search.d.ts.map +1 -0
  120. package/dist/cli/commands/search.js +173 -0
  121. package/dist/cli/commands/search.js.map +1 -0
  122. package/dist/cli/commands/show.d.ts +6 -0
  123. package/dist/cli/commands/show.d.ts.map +1 -0
  124. package/dist/cli/commands/show.js +158 -0
  125. package/dist/cli/commands/show.js.map +1 -0
  126. package/dist/cli/commands/submit-repo.d.ts +11 -0
  127. package/dist/cli/commands/submit-repo.d.ts.map +1 -0
  128. package/dist/cli/commands/submit-repo.js +133 -0
  129. package/dist/cli/commands/submit-repo.js.map +1 -0
  130. package/dist/cli/commands/submit.d.ts +15 -0
  131. package/dist/cli/commands/submit.d.ts.map +1 -0
  132. package/dist/cli/commands/submit.js +161 -0
  133. package/dist/cli/commands/submit.js.map +1 -0
  134. package/dist/cli/commands/suggest.d.ts +11 -0
  135. package/dist/cli/commands/suggest.d.ts.map +1 -0
  136. package/dist/cli/commands/suggest.js +164 -0
  137. package/dist/cli/commands/suggest.js.map +1 -0
  138. package/dist/cli/commands/track.d.ts +11 -0
  139. package/dist/cli/commands/track.d.ts.map +1 -0
  140. package/dist/cli/commands/track.js +199 -0
  141. package/dist/cli/commands/track.js.map +1 -0
  142. package/dist/cli/commands/trigger.d.ts +11 -0
  143. package/dist/cli/commands/trigger.d.ts.map +1 -0
  144. package/dist/cli/commands/trigger.js +157 -0
  145. package/dist/cli/commands/trigger.js.map +1 -0
  146. package/dist/cli/commands/utils-commands.d.ts +9 -0
  147. package/dist/cli/commands/utils-commands.d.ts.map +1 -0
  148. package/dist/cli/commands/utils-commands.js +389 -0
  149. package/dist/cli/commands/utils-commands.js.map +1 -0
  150. package/dist/cli/commands/validate.d.ts +6 -0
  151. package/dist/cli/commands/validate.d.ts.map +1 -0
  152. package/dist/cli/commands/validate.js +40 -0
  153. package/dist/cli/commands/validate.js.map +1 -0
  154. package/dist/cli/index.d.ts +3 -0
  155. package/dist/cli/index.d.ts.map +1 -1
  156. package/dist/cli/index.js +88 -2743
  157. package/dist/cli/index.js.map +1 -1
  158. package/dist/core/audit.d.ts +24 -0
  159. package/dist/core/audit.d.ts.map +1 -0
  160. package/dist/core/audit.js +195 -0
  161. package/dist/core/audit.js.map +1 -0
  162. package/dist/core/index.d.ts +8 -0
  163. package/dist/core/index.d.ts.map +1 -1
  164. package/dist/core/index.js +8 -0
  165. package/dist/core/index.js.map +1 -1
  166. package/dist/core/quality.d.ts +48 -0
  167. package/dist/core/quality.d.ts.map +1 -0
  168. package/dist/core/quality.js +241 -0
  169. package/dist/core/quality.js.map +1 -0
  170. package/dist/core/scanner-rules.d.ts +58 -0
  171. package/dist/core/scanner-rules.d.ts.map +1 -0
  172. package/dist/core/scanner-rules.js +335 -0
  173. package/dist/core/scanner-rules.js.map +1 -0
  174. package/dist/core/suggest.d.ts +51 -0
  175. package/dist/core/suggest.d.ts.map +1 -0
  176. package/dist/core/suggest.js +241 -0
  177. package/dist/core/suggest.js.map +1 -0
  178. package/package.json +1 -1
@@ -0,0 +1,158 @@
1
+ import chalk from 'chalk';
2
+ import { discoverSkills, loadSkill, listSkillResources, generateSkillsPromptXML, generateFullSkillsContext, } from '../../core/index.js';
3
+ import { assessQuality, formatScoreBar, getScoreColor } from '../../core/quality.js';
4
+ export function registerShowCommand(program) {
5
+ // Show command
6
+ program
7
+ .command('show <name>')
8
+ .description('Show detailed information about a skill')
9
+ .action(async (name) => {
10
+ try {
11
+ const skills = await discoverSkills();
12
+ const skillRef = skills.find(s => s.name === name);
13
+ if (!skillRef) {
14
+ console.error(chalk.red(`Skill not found: ${name}`));
15
+ console.log(chalk.gray('Available skills:'), skills.map(s => s.name).join(', ') || 'none');
16
+ process.exit(1);
17
+ }
18
+ const skill = await loadSkill(skillRef.path);
19
+ if (!skill) {
20
+ console.error(chalk.red(`Could not load skill: ${name}`));
21
+ process.exit(1);
22
+ }
23
+ console.log(chalk.bold(`\n${skill.metadata.name}`));
24
+ console.log('─'.repeat(40));
25
+ console.log(chalk.cyan('Description:'), skill.metadata.description);
26
+ console.log(chalk.cyan('Path:'), skill.path);
27
+ if (skill.metadata.license) {
28
+ console.log(chalk.cyan('License:'), skill.metadata.license);
29
+ }
30
+ if (skill.metadata.compatibility) {
31
+ console.log(chalk.cyan('Compatibility:'), skill.metadata.compatibility);
32
+ }
33
+ // List resources
34
+ const resources = await listSkillResources(skill.path);
35
+ if (resources.scripts.length > 0) {
36
+ console.log(chalk.cyan('\nScripts:'));
37
+ resources.scripts.forEach(s => console.log(chalk.gray(` - ${s}`)));
38
+ }
39
+ if (resources.references.length > 0) {
40
+ console.log(chalk.cyan('\nReferences:'));
41
+ resources.references.forEach(r => console.log(chalk.gray(` - ${r}`)));
42
+ }
43
+ if (resources.assets.length > 0) {
44
+ console.log(chalk.cyan('\nAssets:'));
45
+ resources.assets.forEach(a => console.log(chalk.gray(` - ${a}`)));
46
+ }
47
+ // Body preview
48
+ const bodyLines = skill.body.split('\n').slice(0, 10);
49
+ console.log(chalk.cyan('\nInstructions (preview):'));
50
+ console.log(chalk.gray(bodyLines.join('\n')));
51
+ if (skill.body.split('\n').length > 10) {
52
+ console.log(chalk.gray('...'));
53
+ }
54
+ // Quality score badge
55
+ try {
56
+ const quality = await assessQuality(skill.path);
57
+ const qColor = getScoreColor(quality.overall);
58
+ console.log(chalk.cyan('\nQuality:'), chalk[qColor](`${quality.grade} (${quality.overall}/100) ${formatScoreBar(quality.overall, 12)}`));
59
+ }
60
+ catch { /* skip if scoring fails */ }
61
+ console.log('');
62
+ }
63
+ catch (error) {
64
+ console.error(chalk.red('Error showing skill:'), error);
65
+ process.exit(1);
66
+ }
67
+ });
68
+ // Prompt command - generate system prompt XML
69
+ program
70
+ .command('prompt')
71
+ .description('Generate system prompt XML for discovered skills')
72
+ .option('-f, --full', 'Include full skill system instructions')
73
+ .action(async (options) => {
74
+ try {
75
+ const skills = await discoverSkills();
76
+ if (skills.length === 0) {
77
+ console.log(chalk.yellow('No skills found.'));
78
+ return;
79
+ }
80
+ if (options.full) {
81
+ const context = generateFullSkillsContext(skills);
82
+ console.log(context);
83
+ }
84
+ else {
85
+ const { xml, skillCount, estimatedTokens } = generateSkillsPromptXML(skills);
86
+ console.log(xml);
87
+ console.log(chalk.gray(`\n# ${skillCount} skills, ~${estimatedTokens} tokens`));
88
+ }
89
+ }
90
+ catch (error) {
91
+ console.error(chalk.red('Error generating prompt:'), error);
92
+ process.exit(1);
93
+ }
94
+ });
95
+ // Init command - create a new skill
96
+ program
97
+ .command('init <name>')
98
+ .description('Create a new skill from template')
99
+ .option('-d, --directory <dir>', 'Directory to create skill in', './skills')
100
+ .action(async (name, options) => {
101
+ try {
102
+ const { mkdir, writeFile } = await import('fs/promises');
103
+ const { join } = await import('path');
104
+ const skillDir = join(options.directory, name);
105
+ // Create directories
106
+ await mkdir(join(skillDir, 'scripts'), { recursive: true });
107
+ await mkdir(join(skillDir, 'references'), { recursive: true });
108
+ await mkdir(join(skillDir, 'assets'), { recursive: true });
109
+ // Create SKILL.md
110
+ const skillMd = `---
111
+ name: ${name}
112
+ description: Brief description of what this skill does and when to use it.
113
+ license: MIT
114
+ metadata:
115
+ author: your-name
116
+ version: "1.0"
117
+ ---
118
+
119
+ # ${name.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')}
120
+
121
+ ## When to use this skill
122
+
123
+ Use this skill when the user needs to...
124
+
125
+ ## Instructions
126
+
127
+ 1. First step
128
+ 2. Second step
129
+ 3. Third step
130
+
131
+ ## Examples
132
+
133
+ ### Example 1
134
+
135
+ \`\`\`
136
+ Example input or command
137
+ \`\`\`
138
+
139
+ ## Best practices
140
+
141
+ - Best practice 1
142
+ - Best practice 2
143
+ `;
144
+ await writeFile(join(skillDir, 'SKILL.md'), skillMd);
145
+ console.log(chalk.green(`✓ Created skill: ${name}`));
146
+ console.log(chalk.gray(` Path: ${skillDir}`));
147
+ console.log(chalk.gray('\nNext steps:'));
148
+ console.log(chalk.gray(' 1. Edit SKILL.md with your instructions'));
149
+ console.log(chalk.gray(' 2. Add scripts to scripts/'));
150
+ console.log(chalk.gray(' 3. Run: skills validate ' + skillDir));
151
+ }
152
+ catch (error) {
153
+ console.error(chalk.red('Error creating skill:'), error);
154
+ process.exit(1);
155
+ }
156
+ });
157
+ }
158
+ //# 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,11 @@
1
+ /**
2
+ * Submit-Repo Command
3
+ * Submit a GitHub repo link for marketplace indexing.
4
+ * We extract everything from the repo — user only provides the link.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the submit-repo command
9
+ */
10
+ export declare function registerSubmitRepoCommand(program: Command): void;
11
+ //# sourceMappingURL=submit-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-repo.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/submit-repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAYhE"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Submit-Repo Command
3
+ * Submit a GitHub repo link for marketplace indexing.
4
+ * We extract everything from the repo — user only provides the link.
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ /**
9
+ * Register the submit-repo command
10
+ */
11
+ export function registerSubmitRepoCommand(program) {
12
+ program
13
+ .command('submit-repo <repo>')
14
+ .description('Submit a GitHub repo to be indexed in the marketplace')
15
+ .action(async (repo) => {
16
+ try {
17
+ await submitRepoCommand(repo);
18
+ }
19
+ catch (err) {
20
+ console.error(chalk.red('Error:'), err.message);
21
+ process.exit(1);
22
+ }
23
+ });
24
+ }
25
+ // API endpoint
26
+ const SUBMIT_REPO_API = 'https://www.agentskills.in/api/repos/submit';
27
+ /**
28
+ * Run the submit-repo command
29
+ */
30
+ async function submitRepoCommand(repo) {
31
+ // Parse owner/repo from any format
32
+ const parts = repo
33
+ .replace(/https?:\/\/(www\.)?github\.com\//, '')
34
+ .replace(/\.git$/, '')
35
+ .replace(/\/$/, '')
36
+ .split('/');
37
+ if (parts.length !== 2 || !parts[0] || !parts[1]) {
38
+ console.error(chalk.red('Invalid repo. Use: owner/repo or a GitHub URL'));
39
+ console.log(chalk.dim(' Example: skills submit-repo facebook/react'));
40
+ process.exit(1);
41
+ }
42
+ const [owner, repoName] = parts;
43
+ console.log('');
44
+ console.log(chalk.bold('📤 Submit Skills Repository'));
45
+ console.log('');
46
+ // Step 1: Fetch repo info from GitHub
47
+ const spinner = ora('Fetching repo info from GitHub...').start();
48
+ let repoData;
49
+ try {
50
+ const res = await fetch(`https://api.github.com/repos/${owner}/${repoName}`, {
51
+ headers: { 'Accept': 'application/vnd.github.v3+json' },
52
+ });
53
+ if (!res.ok) {
54
+ spinner.fail(res.status === 404 ? 'Repository not found' : `GitHub API error: ${res.status}`);
55
+ process.exit(1);
56
+ }
57
+ repoData = await res.json();
58
+ spinner.succeed(`Found ${chalk.cyan(repoData.full_name)}`);
59
+ }
60
+ catch (err) {
61
+ spinner.fail('Could not reach GitHub API');
62
+ console.log(chalk.dim(` ${err.message}`));
63
+ process.exit(1);
64
+ }
65
+ // Step 2: Scan for SKILL.md files
66
+ const scanSpinner = ora('Scanning for skills...').start();
67
+ let skillPaths = [];
68
+ try {
69
+ const treeRes = await fetch(`https://api.github.com/repos/${owner}/${repoName}/git/trees/${repoData.default_branch}?recursive=1`, { headers: { 'Accept': 'application/vnd.github.v3+json' } });
70
+ if (treeRes.ok) {
71
+ const treeData = await treeRes.json();
72
+ skillPaths = (treeData.tree || [])
73
+ .filter((f) => f.type === 'blob' && f.path.endsWith('SKILL.md'))
74
+ .map((f) => f.path);
75
+ }
76
+ }
77
+ catch { /* non-critical */ }
78
+ if (skillPaths.length === 0) {
79
+ scanSpinner.warn('No SKILL.md files found — repo will still be submitted for review');
80
+ }
81
+ else {
82
+ scanSpinner.succeed(`Found ${chalk.bold(skillPaths.length)} skill(s)`);
83
+ for (const p of skillPaths.slice(0, 5)) {
84
+ console.log(chalk.dim(` ${p}`));
85
+ }
86
+ if (skillPaths.length > 5) {
87
+ console.log(chalk.dim(` ... and ${skillPaths.length - 5} more`));
88
+ }
89
+ }
90
+ // Step 3: Submit
91
+ const submitSpinner = ora('Submitting for indexing...').start();
92
+ try {
93
+ const response = await fetch(SUBMIT_REPO_API, {
94
+ method: 'POST',
95
+ headers: { 'Content-Type': 'application/json' },
96
+ body: JSON.stringify({
97
+ full_name: repoData.full_name,
98
+ html_url: repoData.html_url,
99
+ description: repoData.description || '',
100
+ stars: repoData.stargazers_count || 0,
101
+ language: repoData.language || '',
102
+ license: repoData.license?.spdx_id || '',
103
+ default_branch: repoData.default_branch,
104
+ skills_count: skillPaths.length,
105
+ skill_paths: skillPaths,
106
+ }),
107
+ });
108
+ if (response.ok) {
109
+ submitSpinner.succeed('Submitted!');
110
+ console.log('');
111
+ console.log(chalk.green('✨ Your repo has been submitted for indexing!'));
112
+ console.log(chalk.dim(' Skills will appear in the marketplace once processed.'));
113
+ }
114
+ else {
115
+ const data = await response.json().catch(() => ({}));
116
+ if (response.status === 409) {
117
+ submitSpinner.warn('Already submitted');
118
+ console.log(chalk.dim(` Status: ${data.status || 'pending'}`));
119
+ }
120
+ else {
121
+ submitSpinner.fail(data.error || `Failed (${response.status})`);
122
+ }
123
+ }
124
+ }
125
+ catch (err) {
126
+ submitSpinner.fail('Could not reach API');
127
+ console.log(chalk.dim(` ${err.message}`));
128
+ console.log(chalk.dim(' Submit via GitHub issue instead:'));
129
+ console.log(chalk.dim(` ${chalk.white('https://github.com/Karanjot786/agent-skills-cli/issues/new')}`));
130
+ }
131
+ console.log('');
132
+ }
133
+ //# sourceMappingURL=submit-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"submit-repo.js","sourceRoot":"","sources":["../../../src/cli/commands/submit-repo.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;AAOpC,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,161 @@
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
+ import { assessQuality, formatScoreBar, getScoreColor } from '../../core/quality.js';
13
+ // Supabase API for submission
14
+ const SUBMIT_API = 'https://www.agentskills.in/api/skills/submit';
15
+ /**
16
+ * Register the submit command with commander
17
+ */
18
+ export function registerSubmitCommand(program) {
19
+ program
20
+ .command('submit [path]')
21
+ .description('Submit a skill to the Agent Skills marketplace')
22
+ .option('-n, --dry-run', 'Preview what would be submitted without uploading')
23
+ .option('--name <name>', 'Custom skill name (overrides SKILL.md name)')
24
+ .action(async (path, options) => {
25
+ try {
26
+ await submitCommand(path || '.', options);
27
+ }
28
+ catch (err) {
29
+ console.error(chalk.red('Error:'), err.message);
30
+ process.exit(1);
31
+ }
32
+ });
33
+ }
34
+ /**
35
+ * Run the submit command
36
+ */
37
+ async function submitCommand(targetPath, options) {
38
+ const resolvedPath = resolve(targetPath);
39
+ // Step 1: Find and validate SKILL.md
40
+ const spinner = ora('Validating skill...').start();
41
+ let skillMdPath;
42
+ const pathStat = await stat(resolvedPath);
43
+ if (pathStat.isDirectory()) {
44
+ skillMdPath = join(resolvedPath, 'SKILL.md');
45
+ }
46
+ else {
47
+ skillMdPath = resolvedPath;
48
+ }
49
+ if (!existsSync(skillMdPath)) {
50
+ spinner.fail('No SKILL.md found');
51
+ console.log(chalk.dim(` Looked in: ${skillMdPath}`));
52
+ console.log(chalk.dim(` Create one with: ${chalk.white('skills craft <name>')}`));
53
+ process.exit(1);
54
+ }
55
+ // Load and validate
56
+ const skillContent = await readFile(skillMdPath, 'utf-8');
57
+ let skill;
58
+ try {
59
+ skill = await loadSkill(pathStat.isDirectory() ? resolvedPath : resolve(resolvedPath, '..'));
60
+ }
61
+ catch (err) {
62
+ spinner.fail(`Failed to load skill: ${err.message}`);
63
+ process.exit(1);
64
+ }
65
+ if (!skill) {
66
+ spinner.fail('Could not parse skill from SKILL.md');
67
+ process.exit(1);
68
+ }
69
+ // Validate metadata
70
+ const metaResult = validateMetadata(skill.metadata);
71
+ if (!metaResult.valid) {
72
+ spinner.fail('Skill validation failed');
73
+ console.log('');
74
+ for (const error of metaResult.errors) {
75
+ console.log(` ${chalk.red('✖')} ${error.message}`);
76
+ }
77
+ console.log('');
78
+ console.log(chalk.dim('Fix validation errors before submitting.'));
79
+ process.exit(1);
80
+ }
81
+ // Validate body
82
+ const bodyResult = validateBody(skill.body);
83
+ if (!bodyResult.valid) {
84
+ spinner.warn('Skill has body warnings');
85
+ for (const warning of bodyResult.warnings || []) {
86
+ console.log(` ${chalk.yellow('⚠')} ${warning.message}`);
87
+ }
88
+ }
89
+ spinner.succeed('Skill validated');
90
+ console.log('');
91
+ // Step 1.5: Quality score
92
+ const quality = await assessQuality(resolvedPath);
93
+ const qColor = getScoreColor(quality.overall);
94
+ console.log(` ${chalk.dim('Quality:')} ${chalk[qColor](formatScoreBar(quality.overall, 15))} ${chalk.bold[qColor](quality.grade)}`);
95
+ if (quality.overall < 50) {
96
+ console.log(chalk.yellow(` ⚠ Low quality score (${quality.overall}/100). Consider improving before submitting.`));
97
+ console.log(chalk.dim(` Run: skills score ${targetPath} --verbose`));
98
+ }
99
+ console.log('');
100
+ // Step 2: Extract metadata
101
+ const skillName = options.name || skill.metadata?.name || basename(resolvedPath);
102
+ const description = skill.metadata?.description || '';
103
+ const tags = skill.metadata?.metadata?.tags || [];
104
+ const version = skill.metadata?.metadata?.version || '1.0.0';
105
+ // Display submission preview
106
+ console.log(chalk.bold('📦 Submission Preview:'));
107
+ console.log(` ${chalk.dim('Name:')} ${chalk.cyan(skillName)}`);
108
+ console.log(` ${chalk.dim('Description:')} ${description || chalk.yellow('(none)')}`);
109
+ console.log(` ${chalk.dim('Version:')} ${version}`);
110
+ console.log(` ${chalk.dim('Tags:')} ${tags.length > 0 ? tags.join(', ') : chalk.yellow('(none)')}`);
111
+ console.log(` ${chalk.dim('Content:')} ${skillContent.split('\n').length} lines`);
112
+ console.log('');
113
+ if (options.dryRun) {
114
+ console.log(chalk.yellow('🏃 Dry run — skill was NOT submitted'));
115
+ console.log(chalk.dim(' Remove --dry-run to submit for real'));
116
+ return;
117
+ }
118
+ // Step 3: Submit to marketplace
119
+ const submitSpinner = ora('Submitting to marketplace...').start();
120
+ try {
121
+ const response = await fetch(SUBMIT_API, {
122
+ method: 'POST',
123
+ headers: { 'Content-Type': 'application/json' },
124
+ body: JSON.stringify({
125
+ name: skillName,
126
+ description,
127
+ tags,
128
+ version,
129
+ content: skillContent,
130
+ source: resolvedPath,
131
+ }),
132
+ });
133
+ if (response.ok) {
134
+ const data = await response.json();
135
+ submitSpinner.succeed('Submitted successfully!');
136
+ console.log('');
137
+ console.log(chalk.green('✨ Your skill has been submitted for review!'));
138
+ if (data?.url) {
139
+ console.log(chalk.dim(` View at: ${chalk.white(data.url)}`));
140
+ }
141
+ console.log(chalk.dim(` Status: Pending review`));
142
+ }
143
+ else {
144
+ const errorText = await response.text();
145
+ submitSpinner.fail('Submission failed');
146
+ console.log(chalk.red(` Server responded: ${response.status} ${errorText}`));
147
+ console.log('');
148
+ console.log(chalk.dim('If this persists, submit via GitHub:'));
149
+ console.log(chalk.dim(' https://github.com/Karanjot786/agent-skills-cli/issues/new'));
150
+ }
151
+ }
152
+ catch (err) {
153
+ submitSpinner.fail('Could not reach marketplace API');
154
+ console.log(chalk.dim(` ${err.message}`));
155
+ console.log('');
156
+ console.log(chalk.dim('Alternative: Submit via GitHub issue:'));
157
+ console.log(chalk.dim(` ${chalk.white('https://github.com/Karanjot786/agent-skills-cli/issues/new')}`));
158
+ }
159
+ console.log('');
160
+ }
161
+ //# 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"}