agent-skills-cli 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -17
- package/dist/cli/agents.d.ts +10 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +270 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +11 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +168 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/blueprint.d.ts +11 -0
- package/dist/cli/commands/blueprint.d.ts.map +1 -0
- package/dist/cli/commands/blueprint.js +210 -0
- package/dist/cli/commands/blueprint.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +11 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +267 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/capture.d.ts +11 -0
- package/dist/cli/commands/capture.d.ts.map +1 -0
- package/dist/cli/commands/capture.js +109 -0
- package/dist/cli/commands/capture.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +11 -0
- package/dist/cli/commands/ci.d.ts.map +1 -0
- package/dist/cli/commands/ci.js +144 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/collab.d.ts +11 -0
- package/dist/cli/commands/collab.d.ts.map +1 -0
- package/dist/cli/commands/collab.js +196 -0
- package/dist/cli/commands/collab.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +11 -0
- package/dist/cli/commands/convert.d.ts.map +1 -0
- package/dist/cli/commands/convert.js +219 -0
- package/dist/cli/commands/convert.js.map +1 -0
- package/dist/cli/commands/craft.d.ts +18 -0
- package/dist/cli/commands/craft.d.ts.map +1 -0
- package/dist/cli/commands/craft.js +205 -0
- package/dist/cli/commands/craft.js.map +1 -0
- package/dist/cli/commands/export.d.ts +9 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +103 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/forge.d.ts +11 -0
- package/dist/cli/commands/forge.d.ts.map +1 -0
- package/dist/cli/commands/forge.js +152 -0
- package/dist/cli/commands/forge.js.map +1 -0
- package/dist/cli/commands/grid.d.ts +11 -0
- package/dist/cli/commands/grid.d.ts.map +1 -0
- package/dist/cli/commands/grid.js +217 -0
- package/dist/cli/commands/grid.js.map +1 -0
- package/dist/cli/commands/insight.d.ts +7 -0
- package/dist/cli/commands/insight.d.ts.map +1 -0
- package/dist/cli/commands/insight.js +71 -0
- package/dist/cli/commands/insight.js.map +1 -0
- package/dist/cli/commands/install.d.ts +6 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +359 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +7 -0
- package/dist/cli/commands/interactive.d.ts.map +1 -0
- package/dist/cli/commands/interactive.js +535 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +77 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/lockspec.d.ts +11 -0
- package/dist/cli/commands/lockspec.d.ts.map +1 -0
- package/dist/cli/commands/lockspec.js +179 -0
- package/dist/cli/commands/lockspec.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +7 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +417 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/method.d.ts +7 -0
- package/dist/cli/commands/method.d.ts.map +1 -0
- package/dist/cli/commands/method.js +140 -0
- package/dist/cli/commands/method.js.map +1 -0
- package/dist/cli/commands/mine.d.ts +11 -0
- package/dist/cli/commands/mine.d.ts.map +1 -0
- package/dist/cli/commands/mine.js +254 -0
- package/dist/cli/commands/mine.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +11 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +201 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/rule.d.ts +11 -0
- package/dist/cli/commands/rule.d.ts.map +1 -0
- package/dist/cli/commands/rule.js +230 -0
- package/dist/cli/commands/rule.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +173 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/show.d.ts +6 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +150 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/submit.d.ts +15 -0
- package/dist/cli/commands/submit.d.ts.map +1 -0
- package/dist/cli/commands/submit.js +151 -0
- package/dist/cli/commands/submit.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +11 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +164 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/commands/track.d.ts +11 -0
- package/dist/cli/commands/track.d.ts.map +1 -0
- package/dist/cli/commands/track.js +199 -0
- package/dist/cli/commands/track.js.map +1 -0
- package/dist/cli/commands/trigger.d.ts +11 -0
- package/dist/cli/commands/trigger.d.ts.map +1 -0
- package/dist/cli/commands/trigger.js +157 -0
- package/dist/cli/commands/trigger.js.map +1 -0
- package/dist/cli/commands/utils-commands.d.ts +9 -0
- package/dist/cli/commands/utils-commands.d.ts.map +1 -0
- package/dist/cli/commands/utils-commands.js +389 -0
- package/dist/cli/commands/utils-commands.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +40 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +84 -2743
- package/dist/cli/index.js.map +1 -1
- package/dist/core/audit.d.ts +24 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +195 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/scanner-rules.d.ts +58 -0
- package/dist/core/scanner-rules.d.ts.map +1 -0
- package/dist/core/scanner-rules.js +335 -0
- package/dist/core/scanner-rules.js.map +1 -0
- package/dist/core/suggest.d.ts +51 -0
- package/dist/core/suggest.d.ts.map +1 -0
- package/dist/core/suggest.js +241 -0
- package/dist/core/suggest.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAS,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAQ,MAAM,MAAM,CAAC;AAgBrC,MAAM,YAAY,GAAG,uBAAuB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACnD,MAAM,OAAO,GAAG,OAAO;SAClB,OAAO,CAAC,SAAS,CAAC;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAElD,OAAO;SACF,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,oBAAoB,CAAC;SACjC,cAAc,CAAC,qBAAqB,EAAE,+CAA+C,CAAC;SACtF,cAAc,CAAC,yBAAyB,EAAE,kCAAkC,CAAC;SAC7E,cAAc,CAAC,uBAAuB,EAAE,4CAA4C,CAAC;SACrF,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;SACpE,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,OAAY,EAAE,EAAE;QACzC,IAAI,CAAC;YACD,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,CAAC;YACD,MAAM,WAAW,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC3B,IAAI,CAAC;YAAC,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACnI,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC3B,IAAI,CAAC;YAAC,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACpI,CAAC,CAAC,CAAC;IAEP,OAAO;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC3B,IAAI,CAAC;YAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,YAAY;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACvE,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAAC,CAAC;AACxH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAqB;IAC7C,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,OAAY;IAChD,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IAEpC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC,CAAC;QAChE,OAAO;IACX,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjB,IAAI;QACJ,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,IAAI;KAChB,CAAC,CAAC;IAEH,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,KAAK,MAAM,OAAO,CAAC,OAAO,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,KAAK,UAAU,WAAW;IACtB,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IAEpC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC,CAAC;QACpG,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,OAAgB;IACvD,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAClF,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,IAAY;IACrC,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC5D,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACjF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -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":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,WAAW,EAAE,qCAAqC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,IAAI,CAAC;YACD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAElC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAEtD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAwF,EAAE,CAAC;YAEvG,wBAAwB;YACxB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC;YACxF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,iBAAiB,EAAE,CAAC,CAAC;YACvG,CAAC;YAED,mCAAmC;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;YACvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,kBAAkB;oBACxB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,GAAG,SAAS,cAAc;oBACnC,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;iBACpE,CAAC,CAAC;YACP,CAAC;YAED,6BAA6B;YAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC7D,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClG,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC;wBACR,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,MAAM;wBACjC,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,gBAAgB;wBAC5C,GAAG,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;qBAC3E,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YAED,4BAA4B;YAC5B,IAAI,CAAC;gBACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;gBACpD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC;YAAC,MAAM,CAAC;gBACL,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;YAC3E,CAAC;YAED,mCAAmC;YACnC,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,wBAAwB,EAAE;oBACnD,OAAO,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;gBACH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACd,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBAC9E,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC9F,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACL,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACnF,CAAC;YAED,gDAAgD;YAChD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBAC/D,IAAI,UAAU,GAAG,CAAC,CAAC;gBAEnB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC1B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACtB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;wBACxD,IAAI,UAAU,CAAC,OAAO,CAAC;4BAAE,UAAU,EAAE,CAAC;oBAC1C,CAAC;gBACL,CAAC;gBAED,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACzF,CAAC;qBAAM,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,UAAU,QAAQ,EAAE,CAAC,CAAC;gBAC5G,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,UAAU,QAAQ,EAAE,CAAC,CAAC;gBAC5G,CAAC;YACL,CAAC;YAED,kBAAkB;YAClB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrD,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;wBACzC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrE,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;oBAAE,SAAS,GAAG,IAAI,CAAC;YAClD,CAAC;YAED,0BAA0B;YAC1B,IAAI,OAAO,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBACvC,IAAI,CAAC;4BACD,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;4BAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACzD,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBAC/D,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC9E,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACjD,OAAO;SACF,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;SAC1D,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC;SAC9D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,IAAI,CAAC;YACD,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAE9E,MAAM,OAAO,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;YAE5D,sBAAsB;YACtB,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,2BAA2B;YAC3B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAED,kBAAkB;YAClB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvE,OAAO;YACX,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC,CAAC;gBACpF,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,wBAAwB,CAAC,CAAC,CAAC;YAE7E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;oBACjE,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;wBACzC,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;gBAEjE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC;gBACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9F,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAE/E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE,KAAK,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,OAAO;SACF,OAAO,CAAC,yBAAyB,CAAC;SAClC,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC;SAClD,MAAM,CAAC,cAAc,EAAE,uCAAuC,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,2BAA2B,CAAC;SAChD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;QAClC,IAAI,CAAC;YACD,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC/G,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAC/C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC9B,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAEhD,mBAAmB;YACnB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5D,CAAC;YAED,2BAA2B;YAC3B,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACvC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAC1B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;oBACxC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CACjD,CACJ,CAAC;YACN,CAAC;YAED,4DAA4D;YAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;wBACxC,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,0BAA0B;wBACnC,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,GAAG;4BACzC,KAAK,EAAE,CAAC;4BACR,OAAO,EAAE,IAAI;yBAChB,CAAC,CAAC;qBACN,CAAC,CAAC,CAAC;gBACJ,cAAc,GAAG,QAAQ,CAAC;YAC9B,CAAC;YAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;gBACvE,OAAO;YACX,CAAC;YAED,mDAAmD;YACnD,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,CACxF,CAAC;YAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;gBAC3E,OAAO;YACX,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAC;YAE5E,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,SAAS,GAAG,CAAC,CAAC;YAElB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBAE/D,IAAI,CAAC;oBACD,0BAA0B;oBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC7D,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAE1C,0BAA0B;oBAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;oBAC9E,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,sBAAsB,CAAC,CAAC;wBACxD,SAAS,EAAE,CAAC;wBACZ,SAAS;oBACb,CAAC;oBAED,iBAAiB;oBACjB,MAAM,SAAS,CAAC,uBAAuB,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;oBAE3E,8BAA8B;oBAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;wBAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;wBAClC,IAAI,CAAC,WAAW;4BAAE,SAAS;wBAE3B,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;wBAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;4BAC3B,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC;4BAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;wBAErE,qBAAqB;wBACrB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACvB,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBACzD,CAAC;wBAED,mBAAmB;wBACnB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC3C,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACrD,CAAC;oBAED,6CAA6C;oBAC7C,IAAI,OAA2B,CAAC;oBAChC,IAAI,CAAC;wBACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;wBAC3E,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5B,CAAC;oBAAC,MAAM,CAAC,CAAC,CAAC;oBAEX,mBAAmB;oBACnB,MAAM,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;oBAC5C,MAAM,YAAY,GAAG,eAAe,CAAC;wBACjC,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,UAAU,EAAE,KAAK,CAAC,UAAU;wBAC5B,OAAO;wBACP,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,aAAa,EAAE,KAAK,CAAC,aAAa;wBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,UAAU,EAAE,KAAK,CAAC,UAAU;qBAC/B,CAAC,CAAC;oBACH,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;oBAEnC,UAAU;oBACV,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;oBAErE,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,UAAU,wBAAwB,CAAC,CAAC;oBAC7D,YAAY,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;oBAC3D,SAAS,EAAE,CAAC;gBAChB,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,YAAY,WAAW,CAAC,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,4BAA4B,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,OAAO;SACF,OAAO,CAAC,iCAAiC,CAAC;SAC1C,WAAW,CAAC,+BAA+B,CAAC;SAC5C,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;QAC7C,IAAI,CAAC;YACD,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YAC9E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1C,sBAAsB;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAE7C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;YAED,4CAA4C;YAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;gBAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;oBAC7D,OAAO;gBACX,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,SAAS,KAAK,CAAC,CAAC,CAAC;gBACnE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;oBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtC,CAAC,CAAC,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO;YACX,CAAC;YAED,qBAAqB;YACrB,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,UAAU,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1D,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9E,OAAO,CAAC,IAAI,EAAE,CAAC;gBAEf,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,kBAAkB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -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
|