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.
Files changed (142) hide show
  1. package/README.md +18 -17
  2. package/dist/cli/agents.d.ts +10 -0
  3. package/dist/cli/agents.d.ts.map +1 -0
  4. package/dist/cli/agents.js +270 -0
  5. package/dist/cli/agents.js.map +1 -0
  6. package/dist/cli/commands/audit.d.ts +11 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -0
  8. package/dist/cli/commands/audit.js +168 -0
  9. package/dist/cli/commands/audit.js.map +1 -0
  10. package/dist/cli/commands/blueprint.d.ts +11 -0
  11. package/dist/cli/commands/blueprint.d.ts.map +1 -0
  12. package/dist/cli/commands/blueprint.js +210 -0
  13. package/dist/cli/commands/blueprint.js.map +1 -0
  14. package/dist/cli/commands/bootstrap.d.ts +11 -0
  15. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/commands/bootstrap.js +267 -0
  17. package/dist/cli/commands/bootstrap.js.map +1 -0
  18. package/dist/cli/commands/capture.d.ts +11 -0
  19. package/dist/cli/commands/capture.d.ts.map +1 -0
  20. package/dist/cli/commands/capture.js +109 -0
  21. package/dist/cli/commands/capture.js.map +1 -0
  22. package/dist/cli/commands/ci.d.ts +11 -0
  23. package/dist/cli/commands/ci.d.ts.map +1 -0
  24. package/dist/cli/commands/ci.js +144 -0
  25. package/dist/cli/commands/ci.js.map +1 -0
  26. package/dist/cli/commands/collab.d.ts +11 -0
  27. package/dist/cli/commands/collab.d.ts.map +1 -0
  28. package/dist/cli/commands/collab.js +196 -0
  29. package/dist/cli/commands/collab.js.map +1 -0
  30. package/dist/cli/commands/convert.d.ts +11 -0
  31. package/dist/cli/commands/convert.d.ts.map +1 -0
  32. package/dist/cli/commands/convert.js +219 -0
  33. package/dist/cli/commands/convert.js.map +1 -0
  34. package/dist/cli/commands/craft.d.ts +18 -0
  35. package/dist/cli/commands/craft.d.ts.map +1 -0
  36. package/dist/cli/commands/craft.js +205 -0
  37. package/dist/cli/commands/craft.js.map +1 -0
  38. package/dist/cli/commands/export.d.ts +9 -0
  39. package/dist/cli/commands/export.d.ts.map +1 -0
  40. package/dist/cli/commands/export.js +103 -0
  41. package/dist/cli/commands/export.js.map +1 -0
  42. package/dist/cli/commands/forge.d.ts +11 -0
  43. package/dist/cli/commands/forge.d.ts.map +1 -0
  44. package/dist/cli/commands/forge.js +152 -0
  45. package/dist/cli/commands/forge.js.map +1 -0
  46. package/dist/cli/commands/grid.d.ts +11 -0
  47. package/dist/cli/commands/grid.d.ts.map +1 -0
  48. package/dist/cli/commands/grid.js +217 -0
  49. package/dist/cli/commands/grid.js.map +1 -0
  50. package/dist/cli/commands/insight.d.ts +7 -0
  51. package/dist/cli/commands/insight.d.ts.map +1 -0
  52. package/dist/cli/commands/insight.js +71 -0
  53. package/dist/cli/commands/insight.js.map +1 -0
  54. package/dist/cli/commands/install.d.ts +6 -0
  55. package/dist/cli/commands/install.d.ts.map +1 -0
  56. package/dist/cli/commands/install.js +359 -0
  57. package/dist/cli/commands/install.js.map +1 -0
  58. package/dist/cli/commands/interactive.d.ts +7 -0
  59. package/dist/cli/commands/interactive.d.ts.map +1 -0
  60. package/dist/cli/commands/interactive.js +535 -0
  61. package/dist/cli/commands/interactive.js.map +1 -0
  62. package/dist/cli/commands/list.d.ts +6 -0
  63. package/dist/cli/commands/list.d.ts.map +1 -0
  64. package/dist/cli/commands/list.js +77 -0
  65. package/dist/cli/commands/list.js.map +1 -0
  66. package/dist/cli/commands/lockspec.d.ts +11 -0
  67. package/dist/cli/commands/lockspec.d.ts.map +1 -0
  68. package/dist/cli/commands/lockspec.js +179 -0
  69. package/dist/cli/commands/lockspec.js.map +1 -0
  70. package/dist/cli/commands/marketplace.d.ts +7 -0
  71. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  72. package/dist/cli/commands/marketplace.js +417 -0
  73. package/dist/cli/commands/marketplace.js.map +1 -0
  74. package/dist/cli/commands/method.d.ts +7 -0
  75. package/dist/cli/commands/method.d.ts.map +1 -0
  76. package/dist/cli/commands/method.js +140 -0
  77. package/dist/cli/commands/method.js.map +1 -0
  78. package/dist/cli/commands/mine.d.ts +11 -0
  79. package/dist/cli/commands/mine.d.ts.map +1 -0
  80. package/dist/cli/commands/mine.js +254 -0
  81. package/dist/cli/commands/mine.js.map +1 -0
  82. package/dist/cli/commands/recall.d.ts +11 -0
  83. package/dist/cli/commands/recall.d.ts.map +1 -0
  84. package/dist/cli/commands/recall.js +201 -0
  85. package/dist/cli/commands/recall.js.map +1 -0
  86. package/dist/cli/commands/rule.d.ts +11 -0
  87. package/dist/cli/commands/rule.d.ts.map +1 -0
  88. package/dist/cli/commands/rule.js +230 -0
  89. package/dist/cli/commands/rule.js.map +1 -0
  90. package/dist/cli/commands/search.d.ts +6 -0
  91. package/dist/cli/commands/search.d.ts.map +1 -0
  92. package/dist/cli/commands/search.js +173 -0
  93. package/dist/cli/commands/search.js.map +1 -0
  94. package/dist/cli/commands/show.d.ts +6 -0
  95. package/dist/cli/commands/show.d.ts.map +1 -0
  96. package/dist/cli/commands/show.js +150 -0
  97. package/dist/cli/commands/show.js.map +1 -0
  98. package/dist/cli/commands/submit.d.ts +15 -0
  99. package/dist/cli/commands/submit.d.ts.map +1 -0
  100. package/dist/cli/commands/submit.js +151 -0
  101. package/dist/cli/commands/submit.js.map +1 -0
  102. package/dist/cli/commands/suggest.d.ts +11 -0
  103. package/dist/cli/commands/suggest.d.ts.map +1 -0
  104. package/dist/cli/commands/suggest.js +164 -0
  105. package/dist/cli/commands/suggest.js.map +1 -0
  106. package/dist/cli/commands/track.d.ts +11 -0
  107. package/dist/cli/commands/track.d.ts.map +1 -0
  108. package/dist/cli/commands/track.js +199 -0
  109. package/dist/cli/commands/track.js.map +1 -0
  110. package/dist/cli/commands/trigger.d.ts +11 -0
  111. package/dist/cli/commands/trigger.d.ts.map +1 -0
  112. package/dist/cli/commands/trigger.js +157 -0
  113. package/dist/cli/commands/trigger.js.map +1 -0
  114. package/dist/cli/commands/utils-commands.d.ts +9 -0
  115. package/dist/cli/commands/utils-commands.d.ts.map +1 -0
  116. package/dist/cli/commands/utils-commands.js +389 -0
  117. package/dist/cli/commands/utils-commands.js.map +1 -0
  118. package/dist/cli/commands/validate.d.ts +6 -0
  119. package/dist/cli/commands/validate.d.ts.map +1 -0
  120. package/dist/cli/commands/validate.js +40 -0
  121. package/dist/cli/commands/validate.js.map +1 -0
  122. package/dist/cli/index.d.ts +3 -0
  123. package/dist/cli/index.d.ts.map +1 -1
  124. package/dist/cli/index.js +84 -2743
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/core/audit.d.ts +24 -0
  127. package/dist/core/audit.d.ts.map +1 -0
  128. package/dist/core/audit.js +195 -0
  129. package/dist/core/audit.js.map +1 -0
  130. package/dist/core/index.d.ts +6 -0
  131. package/dist/core/index.d.ts.map +1 -1
  132. package/dist/core/index.js +6 -0
  133. package/dist/core/index.js.map +1 -1
  134. package/dist/core/scanner-rules.d.ts +58 -0
  135. package/dist/core/scanner-rules.d.ts.map +1 -0
  136. package/dist/core/scanner-rules.js +335 -0
  137. package/dist/core/scanner-rules.js.map +1 -0
  138. package/dist/core/suggest.d.ts +51 -0
  139. package/dist/core/suggest.d.ts.map +1 -0
  140. package/dist/core/suggest.js +241 -0
  141. package/dist/core/suggest.js.map +1 -0
  142. package/package.json +1 -1
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Trigger Command
3
+ * Auto-trigger skills on file/event changes
4
+ * (SkillKit calls this "workflow" — we call it "trigger")
5
+ */
6
+ import chalk from 'chalk';
7
+ import { readFile, writeFile } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { resolve } from 'path';
10
+ const TRIGGER_FILE = '.skills-triggers.json';
11
+ /**
12
+ * Register the trigger command
13
+ */
14
+ export function registerTriggerCommand(program) {
15
+ const trigger = program
16
+ .command('trigger')
17
+ .alias('tr')
18
+ .description('Auto-trigger skills on events');
19
+ trigger
20
+ .command('add <name>')
21
+ .description('Add a trigger rule')
22
+ .requiredOption('-e, --event <event>', 'Event type: file-change, commit, branch, save')
23
+ .requiredOption('-p, --pattern <pattern>', 'Pattern to match (glob or regex)')
24
+ .requiredOption('-a, --action <action>', 'Action: run-skill, validate, audit, notify')
25
+ .option('-s, --skill <skill>', 'Skill to run (for run-skill action)')
26
+ .action(async (name, options) => {
27
+ try {
28
+ await triggerAdd(name, options);
29
+ }
30
+ catch (err) {
31
+ console.error(chalk.red('Error:'), err.message);
32
+ process.exit(1);
33
+ }
34
+ });
35
+ trigger
36
+ .command('list')
37
+ .description('List all trigger rules')
38
+ .action(async () => {
39
+ try {
40
+ await triggerList();
41
+ }
42
+ catch (err) {
43
+ console.error(chalk.red('Error:'), err.message);
44
+ process.exit(1);
45
+ }
46
+ });
47
+ trigger
48
+ .command('enable <name>')
49
+ .description('Enable a trigger')
50
+ .action(async (name) => {
51
+ try {
52
+ await triggerToggle(name, true);
53
+ }
54
+ catch (err) {
55
+ console.error(chalk.red('Error:'), err.message);
56
+ process.exit(1);
57
+ }
58
+ });
59
+ trigger
60
+ .command('disable <name>')
61
+ .description('Disable a trigger')
62
+ .action(async (name) => {
63
+ try {
64
+ await triggerToggle(name, false);
65
+ }
66
+ catch (err) {
67
+ console.error(chalk.red('Error:'), err.message);
68
+ process.exit(1);
69
+ }
70
+ });
71
+ trigger
72
+ .command('remove <name>')
73
+ .description('Remove a trigger')
74
+ .action(async (name) => {
75
+ try {
76
+ await triggerRemove(name);
77
+ }
78
+ catch (err) {
79
+ console.error(chalk.red('Error:'), err.message);
80
+ process.exit(1);
81
+ }
82
+ });
83
+ }
84
+ async function loadTriggers() {
85
+ const configPath = resolve(TRIGGER_FILE);
86
+ if (!existsSync(configPath))
87
+ return { version: '1.0.0', triggers: [] };
88
+ try {
89
+ return JSON.parse(await readFile(configPath, 'utf-8'));
90
+ }
91
+ catch {
92
+ return { version: '1.0.0', triggers: [] };
93
+ }
94
+ }
95
+ async function saveTriggers(config) {
96
+ await writeFile(resolve(TRIGGER_FILE), JSON.stringify(config, null, 2));
97
+ }
98
+ async function triggerAdd(name, options) {
99
+ const config = await loadTriggers();
100
+ if (config.triggers.some(t => t.name === name)) {
101
+ console.error(chalk.yellow(`Trigger "${name}" already exists`));
102
+ return;
103
+ }
104
+ config.triggers.push({
105
+ name,
106
+ event: options.event,
107
+ pattern: options.pattern,
108
+ action: options.action,
109
+ skill: options.skill,
110
+ enabled: true,
111
+ });
112
+ await saveTriggers(config);
113
+ console.log(chalk.green(`✓ Added trigger: ${chalk.cyan(name)}`));
114
+ console.log(chalk.dim(` ${options.event} → ${options.pattern} → ${options.action}`));
115
+ }
116
+ async function triggerList() {
117
+ const config = await loadTriggers();
118
+ if (config.triggers.length === 0) {
119
+ console.log(chalk.dim('No triggers configured.'));
120
+ console.log(chalk.dim(' Add one: skills trigger add <name> -e file-change -p "*.ts" -a validate'));
121
+ return;
122
+ }
123
+ console.log('');
124
+ console.log(chalk.bold(`⚡ Triggers (${config.triggers.length})`));
125
+ console.log('');
126
+ for (const t of config.triggers) {
127
+ const status = t.enabled ? chalk.green('●') : chalk.red('○');
128
+ console.log(` ${status} ${chalk.bold(t.name)}`);
129
+ console.log(` ${chalk.dim('Event:')} ${t.event}`);
130
+ console.log(` ${chalk.dim('Pattern:')} ${t.pattern}`);
131
+ console.log(` ${chalk.dim('Action:')} ${t.action}${t.skill ? ` (${t.skill})` : ''}`);
132
+ console.log('');
133
+ }
134
+ }
135
+ async function triggerToggle(name, enabled) {
136
+ const config = await loadTriggers();
137
+ const trigger = config.triggers.find(t => t.name === name);
138
+ if (!trigger) {
139
+ console.error(chalk.red(`Trigger "${name}" not found`));
140
+ return;
141
+ }
142
+ trigger.enabled = enabled;
143
+ await saveTriggers(config);
144
+ console.log(chalk.green(`✓ Trigger "${name}" ${enabled ? 'enabled' : 'disabled'}`));
145
+ }
146
+ async function triggerRemove(name) {
147
+ const config = await loadTriggers();
148
+ const idx = config.triggers.findIndex(t => t.name === name);
149
+ if (idx < 0) {
150
+ console.error(chalk.red(`Trigger "${name}" not found`));
151
+ return;
152
+ }
153
+ config.triggers.splice(idx, 1);
154
+ await saveTriggers(config);
155
+ console.log(chalk.green(`✓ Removed trigger: ${name}`));
156
+ }
157
+ //# sourceMappingURL=trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../../src/cli/commands/trigger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Utility commands — doctor, check, update, exec
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function registerDoctorCommand(program: Command): void;
6
+ export declare function registerCheckCommand(program: Command): void;
7
+ export declare function registerUpdateCommand(program: Command): void;
8
+ export declare function registerExecCommand(program: Command): void;
9
+ //# sourceMappingURL=utils-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/utils-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAwIrD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAgEpD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA+JrD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA+DnD"}
@@ -0,0 +1,389 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import inquirer from 'inquirer';
4
+ import { AGENTS } from '../agents.js';
5
+ export function registerDoctorCommand(program) {
6
+ program
7
+ .command('doctor')
8
+ .description('Diagnose installation and configuration issues')
9
+ .option('-f, --fix', 'Attempt to fix issues automatically')
10
+ .action(async (options) => {
11
+ try {
12
+ const { existsSync } = await import('fs');
13
+ const { mkdir, readdir } = await import('fs/promises');
14
+ const { homedir } = await import('os');
15
+ const { join } = await import('path');
16
+ const { exec } = await import('child_process');
17
+ const { promisify } = await import('util');
18
+ const execAsync = promisify(exec);
19
+ console.log(chalk.bold('\n🩺 Agent Skills Doctor\n'));
20
+ const home = homedir();
21
+ const checks = [];
22
+ // Check 1: Node version
23
+ const nodeVersion = process.version;
24
+ const major = parseInt(nodeVersion.slice(1));
25
+ if (major >= 18) {
26
+ checks.push({ name: 'Node.js version', status: 'pass', message: `${nodeVersion}` });
27
+ }
28
+ else {
29
+ checks.push({ name: 'Node.js version', status: 'fail', message: `${nodeVersion} (requires 18+)` });
30
+ }
31
+ // Check 2: Global skills directory
32
+ const skillsDir = join(home, '.antigravity', 'skills');
33
+ if (existsSync(skillsDir)) {
34
+ checks.push({ name: 'Skills directory', status: 'pass', message: skillsDir });
35
+ }
36
+ else {
37
+ checks.push({
38
+ name: 'Skills directory',
39
+ status: 'warn',
40
+ message: `${skillsDir} (not found)`,
41
+ fix: async () => { await mkdir(skillsDir, { recursive: true }); }
42
+ });
43
+ }
44
+ // Check 3: Agent directories
45
+ for (const [key, config] of Object.entries(AGENTS).slice(0, 5)) {
46
+ if (existsSync(config.globalDir)) {
47
+ checks.push({ name: `${config.displayName} dir`, status: 'pass', message: config.globalDir });
48
+ }
49
+ else {
50
+ checks.push({
51
+ name: `${config.displayName} dir`,
52
+ status: 'warn',
53
+ message: `${config.globalDir} (not created)`,
54
+ fix: async () => { await mkdir(config.globalDir, { recursive: true }); }
55
+ });
56
+ }
57
+ }
58
+ // Check 4: Git availability
59
+ try {
60
+ const { stdout } = await execAsync('git --version');
61
+ checks.push({ name: 'Git', status: 'pass', message: stdout.trim() });
62
+ }
63
+ catch {
64
+ checks.push({ name: 'Git', status: 'fail', message: 'Not installed' });
65
+ }
66
+ // Check 5: GitHub API connectivity
67
+ try {
68
+ const response = await fetch('https://api.github.com', {
69
+ headers: { 'User-Agent': 'agent-skills-cli' }
70
+ });
71
+ if (response.ok) {
72
+ checks.push({ name: 'GitHub API', status: 'pass', message: 'Connected' });
73
+ }
74
+ else {
75
+ checks.push({ name: 'GitHub API', status: 'warn', message: `Status ${response.status}` });
76
+ }
77
+ }
78
+ catch {
79
+ checks.push({ name: 'GitHub API', status: 'fail', message: 'Cannot connect' });
80
+ }
81
+ // Check 6: Installed skills have valid SKILL.md
82
+ if (existsSync(skillsDir)) {
83
+ const entries = await readdir(skillsDir, { withFileTypes: true });
84
+ const skillCount = entries.filter(e => e.isDirectory()).length;
85
+ let validCount = 0;
86
+ for (const entry of entries) {
87
+ if (entry.isDirectory()) {
88
+ const skillMd = join(skillsDir, entry.name, 'SKILL.md');
89
+ if (existsSync(skillMd))
90
+ validCount++;
91
+ }
92
+ }
93
+ if (skillCount === 0) {
94
+ checks.push({ name: 'Installed skills', status: 'pass', message: 'None installed' });
95
+ }
96
+ else if (validCount === skillCount) {
97
+ checks.push({ name: 'Installed skills', status: 'pass', message: `${validCount}/${skillCount} valid` });
98
+ }
99
+ else {
100
+ checks.push({ name: 'Installed skills', status: 'warn', message: `${validCount}/${skillCount} valid` });
101
+ }
102
+ }
103
+ // Display results
104
+ let hasIssues = false;
105
+ for (const check of checks) {
106
+ const icon = check.status === 'pass' ? chalk.green('✓') :
107
+ check.status === 'warn' ? chalk.yellow('⚠') :
108
+ chalk.red('✗');
109
+ console.log(` ${icon} ${check.name}: ${chalk.gray(check.message)}`);
110
+ if (check.status !== 'pass')
111
+ hasIssues = true;
112
+ }
113
+ // Fix issues if requested
114
+ if (options.fix && hasIssues) {
115
+ console.log(chalk.cyan('\n🔧 Attempting fixes...\n'));
116
+ for (const check of checks) {
117
+ if (check.fix && check.status !== 'pass') {
118
+ try {
119
+ await check.fix();
120
+ console.log(chalk.green(` ✓ Fixed: ${check.name}`));
121
+ }
122
+ catch (err) {
123
+ console.log(chalk.red(` ✗ Could not fix: ${check.name}`));
124
+ }
125
+ }
126
+ }
127
+ }
128
+ if (!hasIssues) {
129
+ console.log(chalk.green('\n✓ All checks passed!\n'));
130
+ }
131
+ else if (!options.fix) {
132
+ console.log(chalk.gray('\nRun with --fix to attempt automatic fixes.\n'));
133
+ }
134
+ console.log('');
135
+ }
136
+ catch (error) {
137
+ console.error(chalk.red('Error running doctor:'), error);
138
+ process.exit(1);
139
+ }
140
+ });
141
+ }
142
+ export function registerCheckCommand(program) {
143
+ program
144
+ .command('check')
145
+ .description('Check installed skills and available updates')
146
+ .option('-a, --agent <agent>', 'Check specific agent only')
147
+ .option('-g, --global', 'Check globally installed skills only')
148
+ .option('--json', 'Output as JSON')
149
+ .action(async (options) => {
150
+ try {
151
+ const { listInstalledSkills, readLock } = await import('../../core/index.js');
152
+ const spinner = ora('Checking installed skills...').start();
153
+ // Read from lock file
154
+ const lock = await readLock();
155
+ let skills = Object.values(lock.skills);
156
+ // Filter by global/project
157
+ if (options.global) {
158
+ skills = skills.filter(s => s.isGlobal);
159
+ }
160
+ // Filter by agent
161
+ if (options.agent) {
162
+ skills = skills.filter(s => s.agents.includes(options.agent));
163
+ }
164
+ spinner.stop();
165
+ if (options.json) {
166
+ console.log(JSON.stringify({ skills, count: skills.length }, null, 2));
167
+ return;
168
+ }
169
+ if (skills.length === 0) {
170
+ console.log(chalk.yellow('\n📦 No skills installed.'));
171
+ console.log(chalk.gray('Use `skills search` or `skills install` to add skills.\n'));
172
+ return;
173
+ }
174
+ console.log(chalk.bold(`\n📦 Found ${skills.length} installed skill(s):\n`));
175
+ for (const skill of skills) {
176
+ const sourceLabel = skill.sourceType === 'database' ? '🌐 Database' :
177
+ skill.sourceType === 'github' ? '🐙 GitHub' :
178
+ skill.sourceType === 'gitlab' ? '🦊 GitLab' : '📁 Local';
179
+ console.log(` ${chalk.cyan(skill.scopedName)} ${chalk.gray(`[${sourceLabel}]`)}`);
180
+ console.log(chalk.gray(` Agents: ${skill.agents.join(', ')}`));
181
+ console.log(chalk.gray(` Installed: ${new Date(skill.installedAt).toLocaleDateString()}`));
182
+ if (skill.version) {
183
+ console.log(chalk.gray(` Version: ${skill.version.slice(0, 7)}`));
184
+ }
185
+ console.log('');
186
+ }
187
+ console.log(chalk.gray('Tip: Run `skills update` to update all skills.'));
188
+ console.log(chalk.gray(' Run `skills remove` to uninstall skills.\n'));
189
+ }
190
+ catch (error) {
191
+ console.error(chalk.red('Error checking installed skills:'), error);
192
+ process.exit(1);
193
+ }
194
+ });
195
+ }
196
+ export function registerUpdateCommand(program) {
197
+ program
198
+ .command('update [skill-names...]')
199
+ .description('Update installed skills from their sources')
200
+ .option('-a, --all', 'Update all installed skills')
201
+ .option('-g, --global', 'Only update globally installed skills')
202
+ .option('-y, --yes', 'Skip confirmation prompts')
203
+ .action(async (skillNames, options) => {
204
+ try {
205
+ const { readLock, removeSkillFromLock, addSkillToLock, createLockEntry } = await import('../../core/index.js');
206
+ const { mkdir, cp, rm } = await import('fs/promises');
207
+ const { existsSync } = await import('fs');
208
+ const { join } = await import('path');
209
+ const { tmpdir } = await import('os');
210
+ const { exec } = await import('child_process');
211
+ const { promisify } = await import('util');
212
+ const execAsync = promisify(exec);
213
+ const lock = await readLock();
214
+ let skillsToUpdate = Object.values(lock.skills);
215
+ // Filter by global
216
+ if (options.global) {
217
+ skillsToUpdate = skillsToUpdate.filter(s => s.isGlobal);
218
+ }
219
+ // Filter by specific names
220
+ if (skillNames && skillNames.length > 0) {
221
+ skillsToUpdate = skillsToUpdate.filter(s => skillNames.some((n) => s.name.toLowerCase() === n.toLowerCase() ||
222
+ s.scopedName.toLowerCase() === n.toLowerCase()));
223
+ }
224
+ // If not --all and no specific skills, prompt for selection
225
+ if (!options.all && skillNames.length === 0 && skillsToUpdate.length > 0) {
226
+ const { selected } = await inquirer.prompt([{
227
+ type: 'checkbox',
228
+ name: 'selected',
229
+ message: 'Select skills to update:',
230
+ choices: skillsToUpdate.map(s => ({
231
+ name: `${s.scopedName} (${s.sourceType})`,
232
+ value: s,
233
+ checked: true
234
+ }))
235
+ }]);
236
+ skillsToUpdate = selected;
237
+ }
238
+ if (skillsToUpdate.length === 0) {
239
+ console.log(chalk.yellow('\n📦 No skills to update.'));
240
+ console.log(chalk.gray('Use `skills install` to add skills first.\n'));
241
+ return;
242
+ }
243
+ // Filter to only updateable skills (github/gitlab)
244
+ const updateable = skillsToUpdate.filter(s => s.sourceType === 'github' || s.sourceType === 'gitlab' || s.sourceType === 'database');
245
+ if (updateable.length === 0) {
246
+ console.log(chalk.yellow('\n📦 No remote skills to update.'));
247
+ console.log(chalk.gray('Local skills cannot be updated automatically.\n'));
248
+ return;
249
+ }
250
+ console.log(chalk.bold(`\n📦 Updating ${updateable.length} skill(s)...\n`));
251
+ let successCount = 0;
252
+ let failCount = 0;
253
+ for (const skill of updateable) {
254
+ const spinner = ora(`Updating ${skill.scopedName}...`).start();
255
+ try {
256
+ // Clone to temp directory
257
+ const tempDir = join(tmpdir(), `skill-update-${Date.now()}`);
258
+ await mkdir(tempDir, { recursive: true });
259
+ // Parse GitHub/GitLab URL
260
+ const urlMatch = skill.source.match(/(github|gitlab)\.com\/([^/]+)\/([^/]+)/);
261
+ if (!urlMatch) {
262
+ spinner.fail(`${skill.scopedName}: Invalid source URL`);
263
+ failCount++;
264
+ continue;
265
+ }
266
+ // Clone the repo
267
+ await execAsync(`git clone --depth 1 ${skill.source} .`, { cwd: tempDir });
268
+ // Update each agent directory
269
+ for (const agent of skill.agents) {
270
+ const agentConfig = AGENTS[agent];
271
+ if (!agentConfig)
272
+ continue;
273
+ const targetDir = skill.isGlobal ? agentConfig.globalDir : agentConfig.projectDir;
274
+ const skillDir = skill.isGlobal
275
+ ? join(targetDir, skill.name)
276
+ : join(skill.projectDir || process.cwd(), targetDir, skill.name);
277
+ // Remove old version
278
+ if (existsSync(skillDir)) {
279
+ await rm(skillDir, { recursive: true, force: true });
280
+ }
281
+ // Copy new version
282
+ await mkdir(skillDir, { recursive: true });
283
+ await cp(tempDir, skillDir, { recursive: true });
284
+ }
285
+ // Get latest commit SHA for version tracking
286
+ let version;
287
+ try {
288
+ const { stdout } = await execAsync('git rev-parse HEAD', { cwd: tempDir });
289
+ version = stdout.trim();
290
+ }
291
+ catch { }
292
+ // Update lock file
293
+ await removeSkillFromLock(skill.scopedName);
294
+ const updatedEntry = createLockEntry({
295
+ name: skill.name,
296
+ scopedName: skill.scopedName,
297
+ source: skill.source,
298
+ sourceType: skill.sourceType,
299
+ version,
300
+ agents: skill.agents,
301
+ canonicalPath: skill.canonicalPath,
302
+ isGlobal: skill.isGlobal,
303
+ projectDir: skill.projectDir
304
+ });
305
+ await addSkillToLock(updatedEntry);
306
+ // Cleanup
307
+ await rm(tempDir, { recursive: true, force: true }).catch(() => { });
308
+ spinner.succeed(`${skill.scopedName}: Updated successfully`);
309
+ successCount++;
310
+ }
311
+ catch (err) {
312
+ spinner.fail(`${skill.scopedName}: ${err.message || err}`);
313
+ failCount++;
314
+ }
315
+ }
316
+ console.log('');
317
+ if (successCount > 0) {
318
+ console.log(chalk.bold.green(`✨ Updated ${successCount} skill(s)`));
319
+ }
320
+ if (failCount > 0) {
321
+ console.log(chalk.yellow(`⚠ ${failCount} skill(s) failed to update`));
322
+ }
323
+ console.log('');
324
+ }
325
+ catch (error) {
326
+ console.error(chalk.red('Error updating skills:'), error);
327
+ process.exit(1);
328
+ }
329
+ });
330
+ }
331
+ export function registerExecCommand(program) {
332
+ program
333
+ .command('exec <skill-name> [script-name]')
334
+ .description('Execute a script from a skill')
335
+ .option('-a, --args <args...>', 'Arguments to pass to the script')
336
+ .action(async (skillName, scriptName, options) => {
337
+ try {
338
+ const { executeScript, listScripts } = await import('../../core/executor.js');
339
+ const { homedir } = await import('os');
340
+ const { join } = await import('path');
341
+ const { existsSync } = await import('fs');
342
+ // Find the skill path
343
+ const skillsDir = join(homedir(), '.antigravity', 'skills');
344
+ const skillPath = join(skillsDir, skillName);
345
+ if (!existsSync(skillPath)) {
346
+ console.error(chalk.red(`Skill not found: ${skillName}`));
347
+ process.exit(1);
348
+ }
349
+ // If no script name, list available scripts
350
+ if (!scriptName) {
351
+ const scripts = await listScripts(skillPath);
352
+ if (scripts.length === 0) {
353
+ console.log(chalk.yellow('No scripts found in this skill.'));
354
+ return;
355
+ }
356
+ console.log(chalk.bold(`\nAvailable scripts for ${skillName}:\n`));
357
+ scripts.forEach((s) => {
358
+ console.log(chalk.cyan(` ${s}`));
359
+ });
360
+ console.log('');
361
+ return;
362
+ }
363
+ // Execute the script
364
+ const spinner = ora(`Executing ${scriptName}...`).start();
365
+ try {
366
+ const result = await executeScript(skillPath, scriptName, options.args || []);
367
+ spinner.stop();
368
+ if (result.stdout) {
369
+ console.log(result.stdout);
370
+ }
371
+ if (result.stderr) {
372
+ console.error(chalk.yellow(result.stderr));
373
+ }
374
+ if (result.exitCode !== 0) {
375
+ process.exit(result.exitCode);
376
+ }
377
+ }
378
+ catch (err) {
379
+ spinner.fail(`Script failed: ${err.message}`);
380
+ process.exit(1);
381
+ }
382
+ }
383
+ catch (error) {
384
+ console.error(chalk.red('Error executing script:'), error);
385
+ process.exit(1);
386
+ }
387
+ });
388
+ }
389
+ //# sourceMappingURL=utils-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-commands.js","sourceRoot":"","sources":["../../../src/cli/commands/utils-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `skills validate` command — Validate a skill against the Agent Skills specification
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare function registerValidateCommand(program: Command): void;
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAuCvD"}
@@ -0,0 +1,40 @@
1
+ import chalk from 'chalk';
2
+ import { loadSkill, validateMetadata, validateBody, formatValidationResult } from '../../core/index.js';
3
+ export function registerValidateCommand(program) {
4
+ program
5
+ .command('validate <path>')
6
+ .description('Validate a skill against the Agent Skills specification')
7
+ .action(async (path) => {
8
+ try {
9
+ const skill = await loadSkill(path);
10
+ if (!skill) {
11
+ console.error(chalk.red(`Skill not found at: ${path}`));
12
+ process.exit(1);
13
+ }
14
+ console.log(chalk.bold(`\nValidating: ${skill.metadata.name}\n`));
15
+ // Validate metadata
16
+ const metadataResult = validateMetadata(skill.metadata);
17
+ console.log(chalk.underline('Metadata:'));
18
+ console.log(formatValidationResult(metadataResult));
19
+ // Validate body
20
+ const bodyResult = validateBody(skill.body);
21
+ console.log(chalk.underline('\nBody Content:'));
22
+ console.log(formatValidationResult(bodyResult));
23
+ // Overall result
24
+ const isValid = metadataResult.valid && bodyResult.valid;
25
+ console.log('\n' + '─'.repeat(40));
26
+ if (isValid) {
27
+ console.log(chalk.green.bold('✓ Skill is valid'));
28
+ }
29
+ else {
30
+ console.log(chalk.red.bold('✗ Skill has validation errors'));
31
+ process.exit(1);
32
+ }
33
+ }
34
+ catch (error) {
35
+ console.error(chalk.red('Error validating skill:'), error);
36
+ process.exit(1);
37
+ }
38
+ });
39
+ }
40
+ //# sourceMappingURL=validate.js.map