@codemcp/agentskills-cli 0.0.5
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/LICENSE +19 -0
- package/dist/__tests__/cli.test.d.ts +2 -0
- package/dist/__tests__/cli.test.d.ts.map +1 -0
- package/dist/__tests__/cli.test.js +210 -0
- package/dist/__tests__/cli.test.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +66 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/__tests__/add.test.d.ts +2 -0
- package/dist/commands/__tests__/add.test.d.ts.map +1 -0
- package/dist/commands/__tests__/add.test.js +363 -0
- package/dist/commands/__tests__/add.test.js.map +1 -0
- package/dist/commands/__tests__/install.test.d.ts +2 -0
- package/dist/commands/__tests__/install.test.d.ts.map +1 -0
- package/dist/commands/__tests__/install.test.js +587 -0
- package/dist/commands/__tests__/install.test.js.map +1 -0
- package/dist/commands/__tests__/list.test.d.ts +2 -0
- package/dist/commands/__tests__/list.test.d.ts.map +1 -0
- package/dist/commands/__tests__/list.test.js +69 -0
- package/dist/commands/__tests__/list.test.js.map +1 -0
- package/dist/commands/__tests__/validate.test.d.ts +2 -0
- package/dist/commands/__tests__/validate.test.d.ts.map +1 -0
- package/dist/commands/__tests__/validate.test.js +858 -0
- package/dist/commands/__tests__/validate.test.js.map +1 -0
- package/dist/commands/add.d.ts +28 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +65 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/install.d.ts +16 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +125 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +4 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +41 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/validate.d.ts +26 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +244 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command implementation
|
|
3
|
+
*
|
|
4
|
+
* This command validates Agent Skills definitions either individually or in bulk.
|
|
5
|
+
* It uses @codemcp/agentskills-core's SkillParser and SkillValidator to check skills
|
|
6
|
+
* for correctness and compliance with the Agent Skills standard.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* agentskills validate [path] [options]
|
|
10
|
+
*
|
|
11
|
+
* Options:
|
|
12
|
+
* --strict Enable strict validation (treat warnings as errors)
|
|
13
|
+
* --fix Auto-fix issues if possible (not yet implemented)
|
|
14
|
+
*/
|
|
15
|
+
import { parseSkill, validateSkill } from "@codemcp/agentskills-core";
|
|
16
|
+
import { promises as fs } from "fs";
|
|
17
|
+
import { join } from "path";
|
|
18
|
+
import chalk from "chalk";
|
|
19
|
+
/**
|
|
20
|
+
* Validate command entry point
|
|
21
|
+
*
|
|
22
|
+
* @param path - Optional path to skill or directory to validate
|
|
23
|
+
* @param options - Command options
|
|
24
|
+
*/
|
|
25
|
+
export async function validateCommand(path, options) {
|
|
26
|
+
try {
|
|
27
|
+
// Show --fix message if flag is present
|
|
28
|
+
if (options.fix) {
|
|
29
|
+
console.log(chalk.yellow("Auto-fix is not implemented yet"));
|
|
30
|
+
console.log("");
|
|
31
|
+
}
|
|
32
|
+
// Resolve paths to validate
|
|
33
|
+
const skillPaths = await resolvePaths(path);
|
|
34
|
+
if (skillPaths.length === 0) {
|
|
35
|
+
console.log("No skills found");
|
|
36
|
+
process.exit(0);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
// Validate all skills
|
|
40
|
+
const results = [];
|
|
41
|
+
for (const skillPath of skillPaths) {
|
|
42
|
+
const result = await validateSingleSkill(skillPath, options);
|
|
43
|
+
results.push(result);
|
|
44
|
+
}
|
|
45
|
+
// Display results
|
|
46
|
+
let hasErrors = false;
|
|
47
|
+
for (const result of results) {
|
|
48
|
+
if (result.success) {
|
|
49
|
+
formatSuccess(result.name, result.warnings);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
formatError(result.name, result.errors);
|
|
53
|
+
hasErrors = true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Display summary if multiple skills
|
|
57
|
+
if (skillPaths.length > 1) {
|
|
58
|
+
const valid = results.filter((r) => r.success).length;
|
|
59
|
+
const invalid = results.length - valid;
|
|
60
|
+
formatSummary(results.length, valid, invalid);
|
|
61
|
+
}
|
|
62
|
+
// Exit with appropriate code
|
|
63
|
+
process.exit(hasErrors ? 1 : 0);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// Handle unexpected errors
|
|
67
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
68
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Resolve paths to validate based on input
|
|
74
|
+
*/
|
|
75
|
+
async function resolvePaths(path) {
|
|
76
|
+
if (!path) {
|
|
77
|
+
// No path provided - would normally load from config
|
|
78
|
+
// For now, return empty array
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const stat = await fs.stat(path);
|
|
83
|
+
if (stat.isFile()) {
|
|
84
|
+
// Direct SKILL.md file
|
|
85
|
+
if (path.endsWith("SKILL.md")) {
|
|
86
|
+
return [path];
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
throw new Error(`Path not found: ${path}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else if (stat.isDirectory()) {
|
|
93
|
+
// Check if directory contains SKILL.md
|
|
94
|
+
const skillPath = join(path, "SKILL.md");
|
|
95
|
+
try {
|
|
96
|
+
await fs.access(skillPath);
|
|
97
|
+
// Single skill directory
|
|
98
|
+
return [skillPath];
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Not a single skill dir, search for all skills
|
|
102
|
+
const skills = await findAllSkills(path);
|
|
103
|
+
if (skills.length === 0) {
|
|
104
|
+
// Check if this looks like it should have been a single skill directory
|
|
105
|
+
const entries = await fs.readdir(path);
|
|
106
|
+
// If directory has exactly 1 file and it's a markdown file, likely meant to be a skill dir
|
|
107
|
+
if (entries.length === 1 && entries[0].endsWith(".md")) {
|
|
108
|
+
// Single markdown file that's not SKILL.md - probably meant to be a skill
|
|
109
|
+
throw new Error(`No SKILL.md found in ${path}`);
|
|
110
|
+
}
|
|
111
|
+
// Otherwise, just no skills found (return empty array, will show message)
|
|
112
|
+
}
|
|
113
|
+
return skills;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
const errorCode = error && typeof error === "object" && "code" in error
|
|
119
|
+
? error.code
|
|
120
|
+
: undefined;
|
|
121
|
+
if (errorCode === "ENOENT") {
|
|
122
|
+
throw new Error(`Path not found: ${path}`);
|
|
123
|
+
}
|
|
124
|
+
else if (errorCode === "EACCES") {
|
|
125
|
+
throw new Error(`Permission denied: ${path}`);
|
|
126
|
+
}
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Recursively find all SKILL.md files in a directory
|
|
133
|
+
*/
|
|
134
|
+
async function findAllSkills(dir) {
|
|
135
|
+
const skills = [];
|
|
136
|
+
async function walk(currentDir) {
|
|
137
|
+
try {
|
|
138
|
+
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
139
|
+
for (const entry of entries) {
|
|
140
|
+
const fullPath = join(currentDir, entry.name);
|
|
141
|
+
if (entry.isDirectory()) {
|
|
142
|
+
// Recurse into subdirectories
|
|
143
|
+
await walk(fullPath);
|
|
144
|
+
}
|
|
145
|
+
else if (entry.name === "SKILL.md") {
|
|
146
|
+
skills.push(fullPath);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
const errorCode = error && typeof error === "object" && "code" in error
|
|
152
|
+
? error.code
|
|
153
|
+
: undefined;
|
|
154
|
+
if (errorCode === "EACCES") {
|
|
155
|
+
throw new Error(`Permission denied: ${currentDir}`);
|
|
156
|
+
}
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
await walk(dir);
|
|
161
|
+
return skills;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Validate a single skill file
|
|
165
|
+
*/
|
|
166
|
+
async function validateSingleSkill(skillPath, options) {
|
|
167
|
+
try {
|
|
168
|
+
// Check if file exists and has SKILL.md
|
|
169
|
+
if (!skillPath.endsWith("SKILL.md")) {
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
errors: [`No SKILL.md found in ${skillPath}`],
|
|
173
|
+
warnings: []
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Parse the skill
|
|
177
|
+
const parseResult = await parseSkill(skillPath);
|
|
178
|
+
if (!parseResult.success) {
|
|
179
|
+
// Parse error
|
|
180
|
+
return {
|
|
181
|
+
success: false,
|
|
182
|
+
errors: [parseResult.error.message],
|
|
183
|
+
warnings: []
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// Validate the skill
|
|
187
|
+
const validationResult = validateSkill(parseResult.skill);
|
|
188
|
+
const errors = validationResult.errors.map((e) => e.message);
|
|
189
|
+
const warnings = validationResult.warnings.map((w) => w.message);
|
|
190
|
+
// In strict mode, warnings become errors
|
|
191
|
+
if (options.strict && warnings.length > 0) {
|
|
192
|
+
return {
|
|
193
|
+
success: false,
|
|
194
|
+
name: parseResult.skill.metadata.name,
|
|
195
|
+
errors: [...errors, ...warnings],
|
|
196
|
+
warnings: []
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
success: validationResult.valid,
|
|
201
|
+
name: parseResult.skill.metadata.name,
|
|
202
|
+
errors,
|
|
203
|
+
warnings
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
errors: [errorMessage],
|
|
211
|
+
warnings: []
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Format success message with optional warnings
|
|
217
|
+
*/
|
|
218
|
+
function formatSuccess(skillName, warnings) {
|
|
219
|
+
console.log(chalk.green(`✓ Skill '${skillName}' is valid`));
|
|
220
|
+
if (warnings.length > 0) {
|
|
221
|
+
warnings.forEach((warning) => {
|
|
222
|
+
console.log(chalk.yellow(` ⚠ Warning: ${warning}`));
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Format error message with details
|
|
228
|
+
*/
|
|
229
|
+
function formatError(skillName, errors) {
|
|
230
|
+
const name = skillName || "unknown";
|
|
231
|
+
console.error(chalk.red(`✗ Skill '${name}' failed validation:`));
|
|
232
|
+
errors.forEach((error) => {
|
|
233
|
+
console.error(chalk.red(` - ${error}`));
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Format summary statistics
|
|
238
|
+
*/
|
|
239
|
+
function formatSummary(total, valid, invalid) {
|
|
240
|
+
const skillWord = total === 1 ? "skill" : "skills";
|
|
241
|
+
console.log("");
|
|
242
|
+
console.log(`Validated ${total} ${skillWord}: ${valid} valid, ${invalid} invalid`);
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;AAE5B,IAAI,CAAC;IACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@codemcp/agentskills-cli",
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"description": "Command-line interface for Agent Skills management",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"agentskills": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"chalk": "^5.3.0",
|
|
22
|
+
"commander": "^12.0.0",
|
|
23
|
+
"ora": "^8.0.1",
|
|
24
|
+
"@codemcp/agentskills-core": "0.0.5"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@types/node": "^22.10.7",
|
|
28
|
+
"@typescript-eslint/eslint-plugin": "^8.21.0",
|
|
29
|
+
"@typescript-eslint/parser": "^8.21.0",
|
|
30
|
+
"eslint": "^9.18.0",
|
|
31
|
+
"eslint-config-prettier": "^10.0.1",
|
|
32
|
+
"prettier": "^3.4.2",
|
|
33
|
+
"rimraf": "^6.0.1",
|
|
34
|
+
"typescript": "^5.7.3",
|
|
35
|
+
"typescript-eslint": "8.21.0",
|
|
36
|
+
"vitest": "^3.0.3"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"agentskills",
|
|
40
|
+
"cli",
|
|
41
|
+
"skills-management"
|
|
42
|
+
],
|
|
43
|
+
"author": "Oliver Jägle <github@beimir.net>",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "tsc -p tsconfig.build.json",
|
|
47
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
48
|
+
"clean:build": "rimraf dist",
|
|
49
|
+
"lint": "eslint .",
|
|
50
|
+
"lint:fix": "eslint . --fix",
|
|
51
|
+
"format": "prettier --check .",
|
|
52
|
+
"format:fix": "prettier --write .",
|
|
53
|
+
"test": "vitest run",
|
|
54
|
+
"test:watch": "vitest",
|
|
55
|
+
"typecheck": "tsc --noEmit"
|
|
56
|
+
}
|
|
57
|
+
}
|