claude-skills-cli 0.0.1
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 +455 -0
- package/dist/commands/init.js +70 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/package.js +133 -0
- package/dist/commands/package.js.map +1 -0
- package/dist/commands/validate.js +48 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/templates.js +90 -0
- package/dist/core/templates.js.map +1 -0
- package/dist/core/validator.js +185 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.js +25 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/output.js +9 -0
- package/dist/utils/output.js.map +1 -0
- package/docs/SKILL-DEVELOPMENT.md +457 -0
- package/docs/SKILL-EXAMPLES.md +518 -0
- package/docs/SKILLS-ARCHITECTURE.md +380 -0
- package/package.json +58 -0
- package/skills/skill-creator/SKILL.md +345 -0
- package/skills/skill-creator/references/skill-examples.md +403 -0
- package/skills/skill-creator/references/writing-guide.md +594 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { basename } from 'path';
|
|
2
|
+
import { SkillValidator } from '../core/validator.js';
|
|
3
|
+
import { info, error, success } from '../utils/output.js';
|
|
4
|
+
export function validate_command(options) {
|
|
5
|
+
const { skill_path, strict } = options;
|
|
6
|
+
const skill_name = basename(skill_path);
|
|
7
|
+
info(`Validating skill: ${skill_name}`);
|
|
8
|
+
console.log('='.repeat(60));
|
|
9
|
+
const validator = new SkillValidator(skill_path);
|
|
10
|
+
const result = validator.validate_all();
|
|
11
|
+
// Print errors
|
|
12
|
+
if (result.errors.length > 0) {
|
|
13
|
+
console.log('\n❌ Errors:');
|
|
14
|
+
for (const err of result.errors) {
|
|
15
|
+
console.log(` ${err}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
// Print warnings
|
|
19
|
+
if (result.warnings.length > 0) {
|
|
20
|
+
console.log('\n⚠️ Warnings:');
|
|
21
|
+
for (const warn of result.warnings) {
|
|
22
|
+
console.log(` ${warn}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Print final status
|
|
26
|
+
if (!result.errors.length && !result.warnings.length) {
|
|
27
|
+
console.log('');
|
|
28
|
+
success('Skill is valid!');
|
|
29
|
+
}
|
|
30
|
+
else if (!result.errors.length) {
|
|
31
|
+
console.log('');
|
|
32
|
+
success('Skill is valid (with warnings)');
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log('');
|
|
36
|
+
error(`Skill validation failed with ${result.errors.length} error(s)`);
|
|
37
|
+
}
|
|
38
|
+
// Handle exit codes
|
|
39
|
+
if (!result.is_valid) {
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
if (strict && result.warnings.length > 0) {
|
|
43
|
+
console.log('\n❌ Failed in strict mode due to warnings');
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
process.exit(0);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAW,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,UAAU,gBAAgB,CAAC,OAAwB;IACvD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACvC,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAExC,IAAI,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;IAExC,eAAe;IACf,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC;IACzE,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export const SKILL_MD_TEMPLATE = (name, description, title) => `---
|
|
2
|
+
name: ${name}
|
|
3
|
+
description: ${description}
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ${title}
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
[Provide a brief overview of what this skill does and when to use it]
|
|
11
|
+
|
|
12
|
+
## Quick Start
|
|
13
|
+
|
|
14
|
+
\`\`\`typescript
|
|
15
|
+
// Example code showing basic usage
|
|
16
|
+
\`\`\`
|
|
17
|
+
|
|
18
|
+
## Core Patterns
|
|
19
|
+
|
|
20
|
+
### Pattern 1: [Name]
|
|
21
|
+
|
|
22
|
+
[Describe the pattern]
|
|
23
|
+
|
|
24
|
+
\`\`\`typescript
|
|
25
|
+
// Code example
|
|
26
|
+
\`\`\`
|
|
27
|
+
|
|
28
|
+
### Pattern 2: [Name]
|
|
29
|
+
|
|
30
|
+
[Describe the pattern]
|
|
31
|
+
|
|
32
|
+
\`\`\`typescript
|
|
33
|
+
// Code example
|
|
34
|
+
\`\`\`
|
|
35
|
+
|
|
36
|
+
## Advanced Usage
|
|
37
|
+
|
|
38
|
+
For detailed information, see:
|
|
39
|
+
- [references/detailed-guide.md](references/detailed-guide.md)
|
|
40
|
+
- [references/examples.md](references/examples.md)
|
|
41
|
+
|
|
42
|
+
## Scripts
|
|
43
|
+
|
|
44
|
+
- \`scripts/example.py\`: Description of what this script does
|
|
45
|
+
|
|
46
|
+
## Notes
|
|
47
|
+
|
|
48
|
+
- Important note 1
|
|
49
|
+
- Important note 2
|
|
50
|
+
`;
|
|
51
|
+
export const REFERENCE_TEMPLATE = (title) => `# ${title} Reference
|
|
52
|
+
|
|
53
|
+
## Section 1
|
|
54
|
+
|
|
55
|
+
Content here...
|
|
56
|
+
|
|
57
|
+
## Section 2
|
|
58
|
+
|
|
59
|
+
Content here...
|
|
60
|
+
`;
|
|
61
|
+
export const SCRIPT_TEMPLATE = (filename) => `#!/usr/bin/env python3
|
|
62
|
+
"""
|
|
63
|
+
Description of what this script does.
|
|
64
|
+
|
|
65
|
+
Usage:
|
|
66
|
+
python ${filename}
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
def main():
|
|
70
|
+
print("Script executed successfully")
|
|
71
|
+
|
|
72
|
+
if __name__ == "__main__":
|
|
73
|
+
main()
|
|
74
|
+
`;
|
|
75
|
+
export const README_TEMPLATE = (title, description) => `# ${title}
|
|
76
|
+
|
|
77
|
+
${description}
|
|
78
|
+
|
|
79
|
+
## Structure
|
|
80
|
+
|
|
81
|
+
- \`SKILL.md\` - Main skill instructions
|
|
82
|
+
- \`references/\` - Detailed documentation loaded as needed
|
|
83
|
+
- \`scripts/\` - Executable code for deterministic operations
|
|
84
|
+
- \`assets/\` - Templates, images, or other resources
|
|
85
|
+
|
|
86
|
+
## Usage
|
|
87
|
+
|
|
88
|
+
This skill is automatically discovered by Claude when relevant to the task.
|
|
89
|
+
`;
|
|
90
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/core/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAY,EACZ,WAAmB,EACnB,KAAa,EACb,EAAE,CAAC;QACG,IAAI;eACG,WAAW;;;IAGtB,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CR,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,KAAK;;;;;;;;;CAS9D,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC;;;;;aAKxC,QAAQ;;;;;;;;CAQpB,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAa,EACb,WAAmB,EACnB,EAAE,CAAC,KAAK,KAAK;;EAEb,WAAW;;;;;;;;;;;;CAYZ,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { readFileSync, existsSync, statSync, readdirSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
export class SkillValidator {
|
|
4
|
+
skill_path;
|
|
5
|
+
errors = [];
|
|
6
|
+
warnings = [];
|
|
7
|
+
constructor(skill_path) {
|
|
8
|
+
this.skill_path = skill_path;
|
|
9
|
+
}
|
|
10
|
+
error(msg) {
|
|
11
|
+
this.errors.push(`❌ ${msg}`);
|
|
12
|
+
}
|
|
13
|
+
warning(msg) {
|
|
14
|
+
this.warnings.push(`⚠️ ${msg}`);
|
|
15
|
+
}
|
|
16
|
+
validate_directory() {
|
|
17
|
+
if (!existsSync(this.skill_path)) {
|
|
18
|
+
this.error(`Skill directory does not exist: ${this.skill_path}`);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const stats = statSync(this.skill_path);
|
|
22
|
+
if (!stats.isDirectory()) {
|
|
23
|
+
this.error(`Path is not a directory: ${this.skill_path}`);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
validate_skill_md() {
|
|
29
|
+
const skill_md_path = join(this.skill_path, 'SKILL.md');
|
|
30
|
+
if (!existsSync(skill_md_path)) {
|
|
31
|
+
this.error('SKILL.md file not found');
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const content = readFileSync(skill_md_path, 'utf-8');
|
|
35
|
+
// Check for YAML frontmatter
|
|
36
|
+
if (!content.startsWith('---\n')) {
|
|
37
|
+
this.error('SKILL.md must start with YAML frontmatter (---)');
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Extract frontmatter
|
|
41
|
+
const parts = content.split('---\n');
|
|
42
|
+
if (parts.length < 3) {
|
|
43
|
+
this.error('SKILL.md has malformed YAML frontmatter');
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const frontmatter = parts[1];
|
|
47
|
+
const body = parts.slice(2).join('---\n');
|
|
48
|
+
// Validate required fields
|
|
49
|
+
if (!frontmatter.includes('name:')) {
|
|
50
|
+
this.error("SKILL.md frontmatter missing 'name' field");
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (!frontmatter.includes('description:')) {
|
|
54
|
+
this.error("SKILL.md frontmatter missing 'description' field");
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
// Extract name
|
|
58
|
+
const name_match = frontmatter.match(/name:\s*(.+)/);
|
|
59
|
+
if (name_match) {
|
|
60
|
+
const name = name_match[1].trim();
|
|
61
|
+
// Validate name format
|
|
62
|
+
if (!/^[a-z0-9-]+$/.test(name)) {
|
|
63
|
+
this.error(`Skill name must be lowercase kebab-case: '${name}'`);
|
|
64
|
+
}
|
|
65
|
+
// Check name matches directory
|
|
66
|
+
const dir_name = this.skill_path.split('/').pop() || '';
|
|
67
|
+
if (name !== dir_name) {
|
|
68
|
+
this.warning(`Skill name '${name}' doesn't match directory name '${dir_name}'`);
|
|
69
|
+
}
|
|
70
|
+
// Check name length
|
|
71
|
+
if (name.length > 64) {
|
|
72
|
+
this.error(`Skill name too long (max 64 chars): ${name.length}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Extract description
|
|
76
|
+
const desc_match = frontmatter.match(/description:\s*(.+?)(?=\n[a-z]+:|$)/s);
|
|
77
|
+
if (desc_match) {
|
|
78
|
+
const description = desc_match[1].trim();
|
|
79
|
+
// Check description length
|
|
80
|
+
if (description.length > 1024) {
|
|
81
|
+
this.error(`Description too long (max 1024 chars): ${description.length}`);
|
|
82
|
+
}
|
|
83
|
+
if (description.length < 20) {
|
|
84
|
+
this.warning('Description is very short (consider adding more detail)');
|
|
85
|
+
}
|
|
86
|
+
// Check for "when to use" guidance
|
|
87
|
+
const lower_desc = description.toLowerCase();
|
|
88
|
+
if (!lower_desc.includes('when') && !lower_desc.includes('use')) {
|
|
89
|
+
this.warning("Consider adding 'when to use' guidance to description");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Check body content
|
|
93
|
+
if (body.trim().length < 100) {
|
|
94
|
+
this.warning('SKILL.md body is very short');
|
|
95
|
+
}
|
|
96
|
+
// Check for TODO placeholders
|
|
97
|
+
if (body.includes('TODO') ||
|
|
98
|
+
body.includes('[Add your') ||
|
|
99
|
+
body.includes('[Provide')) {
|
|
100
|
+
this.warning('SKILL.md contains TODO placeholders');
|
|
101
|
+
}
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
validate_references() {
|
|
105
|
+
const references_dir = join(this.skill_path, 'references');
|
|
106
|
+
if (existsSync(references_dir)) {
|
|
107
|
+
const files = readdirSync(references_dir);
|
|
108
|
+
const md_files = files.filter((f) => f.endsWith('.md'));
|
|
109
|
+
if (md_files.length === 0) {
|
|
110
|
+
this.warning('references/ directory exists but is empty');
|
|
111
|
+
}
|
|
112
|
+
// Check for references in SKILL.md
|
|
113
|
+
const skill_md_path = join(this.skill_path, 'SKILL.md');
|
|
114
|
+
if (existsSync(skill_md_path)) {
|
|
115
|
+
const skill_content = readFileSync(skill_md_path, 'utf-8');
|
|
116
|
+
for (const md_file of md_files) {
|
|
117
|
+
if (!skill_content.includes(md_file)) {
|
|
118
|
+
this.warning(`Reference file '${md_file}' not mentioned in SKILL.md`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
validate_scripts() {
|
|
126
|
+
const scripts_dir = join(this.skill_path, 'scripts');
|
|
127
|
+
if (existsSync(scripts_dir)) {
|
|
128
|
+
const files = readdirSync(scripts_dir);
|
|
129
|
+
const script_files = files.filter((f) => f.endsWith('.py') || f.endsWith('.sh'));
|
|
130
|
+
if (script_files.length === 0) {
|
|
131
|
+
this.warning('scripts/ directory exists but is empty');
|
|
132
|
+
}
|
|
133
|
+
for (const script_file of script_files) {
|
|
134
|
+
const script_path = join(scripts_dir, script_file);
|
|
135
|
+
const stats = statSync(script_path);
|
|
136
|
+
// Check if executable (0o111 = --x--x--x)
|
|
137
|
+
if ((stats.mode & 0o111) === 0) {
|
|
138
|
+
this.warning(`Script is not executable: ${script_file}`);
|
|
139
|
+
}
|
|
140
|
+
// Check for shebang
|
|
141
|
+
const content = readFileSync(script_path, 'utf-8');
|
|
142
|
+
const first_line = content.split('\n')[0];
|
|
143
|
+
if (!first_line.startsWith('#!')) {
|
|
144
|
+
this.warning(`Script missing shebang: ${script_file}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
validate_assets() {
|
|
151
|
+
const assets_dir = join(this.skill_path, 'assets');
|
|
152
|
+
if (existsSync(assets_dir)) {
|
|
153
|
+
const files = readdirSync(assets_dir);
|
|
154
|
+
if (files.length === 0) {
|
|
155
|
+
this.warning('assets/ directory exists but is empty');
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
validate_all() {
|
|
161
|
+
if (!this.validate_directory()) {
|
|
162
|
+
return {
|
|
163
|
+
errors: this.errors,
|
|
164
|
+
warnings: this.warnings,
|
|
165
|
+
is_valid: false,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
this.validate_skill_md();
|
|
169
|
+
this.validate_references();
|
|
170
|
+
this.validate_scripts();
|
|
171
|
+
this.validate_assets();
|
|
172
|
+
return {
|
|
173
|
+
errors: this.errors,
|
|
174
|
+
warnings: this.warnings,
|
|
175
|
+
is_valid: this.errors.length === 0,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
get_errors() {
|
|
179
|
+
return this.errors;
|
|
180
|
+
}
|
|
181
|
+
get_warnings() {
|
|
182
|
+
return this.warnings;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { init_command } from './commands/init.js';
|
|
3
|
+
import { validate_command } from './commands/validate.js';
|
|
4
|
+
import { package_command } from './commands/package.js';
|
|
5
|
+
const args = process.argv.slice(2);
|
|
6
|
+
const command = args[0];
|
|
7
|
+
function show_help() {
|
|
8
|
+
console.log('claude-skills - CLI toolkit for creating Claude Agent Skills\n');
|
|
9
|
+
console.log('Usage:');
|
|
10
|
+
console.log(' claude-skills <command> [options]\n');
|
|
11
|
+
console.log('Commands:');
|
|
12
|
+
console.log(' init Create a new skill');
|
|
13
|
+
console.log(' validate Validate a skill');
|
|
14
|
+
console.log(' package Package a skill to zip\n');
|
|
15
|
+
console.log('Options:');
|
|
16
|
+
console.log(' --help, -h Show help');
|
|
17
|
+
console.log(' --version, -v Show version\n');
|
|
18
|
+
console.log('Examples:');
|
|
19
|
+
console.log(' claude-skills init --name my-skill --description "Description"');
|
|
20
|
+
console.log(' claude-skills validate .claude/skills/my-skill');
|
|
21
|
+
console.log(' claude-skills package .claude/skills/my-skill');
|
|
22
|
+
}
|
|
23
|
+
function parse_args(args) {
|
|
24
|
+
const parsed = {};
|
|
25
|
+
const positional = [];
|
|
26
|
+
for (let i = 0; i < args.length; i++) {
|
|
27
|
+
const arg = args[i];
|
|
28
|
+
if (arg.startsWith('--')) {
|
|
29
|
+
const key = arg.substring(2);
|
|
30
|
+
const next = args[i + 1];
|
|
31
|
+
if (next && !next.startsWith('--')) {
|
|
32
|
+
parsed[key] = next;
|
|
33
|
+
i++;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
parsed[key] = true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (arg.startsWith('-') && arg.length === 2) {
|
|
40
|
+
const key = arg.substring(1);
|
|
41
|
+
const next = args[i + 1];
|
|
42
|
+
if (next && !next.startsWith('-')) {
|
|
43
|
+
parsed[key] = next;
|
|
44
|
+
i++;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
parsed[key] = true;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
positional.push(arg);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (positional.length > 0) {
|
|
55
|
+
parsed._positional = positional.join(' ');
|
|
56
|
+
}
|
|
57
|
+
return parsed;
|
|
58
|
+
}
|
|
59
|
+
async function main() {
|
|
60
|
+
if (!command || command === '--help' || command === '-h') {
|
|
61
|
+
show_help();
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
if (command === '--version' || command === '-v') {
|
|
65
|
+
console.log('claude-skills v0.0.1');
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
68
|
+
const parsed = parse_args(args.slice(1));
|
|
69
|
+
switch (command) {
|
|
70
|
+
case 'init':
|
|
71
|
+
init_command({
|
|
72
|
+
name: parsed.name,
|
|
73
|
+
description: parsed.description,
|
|
74
|
+
path: parsed.path,
|
|
75
|
+
});
|
|
76
|
+
break;
|
|
77
|
+
case 'validate': {
|
|
78
|
+
const skill_path = parsed._positional;
|
|
79
|
+
if (!skill_path) {
|
|
80
|
+
console.error('Error: skill path required');
|
|
81
|
+
console.log('\nUsage: claude-skills validate <skill_path>');
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
validate_command({
|
|
85
|
+
skill_path,
|
|
86
|
+
strict: parsed.strict === true,
|
|
87
|
+
});
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case 'package': {
|
|
91
|
+
const skill_path = parsed._positional;
|
|
92
|
+
if (!skill_path) {
|
|
93
|
+
console.error('Error: skill path required');
|
|
94
|
+
console.log('\nUsage: claude-skills package <skill_path>');
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
await package_command({
|
|
98
|
+
skill_path,
|
|
99
|
+
output: parsed.output,
|
|
100
|
+
skip_validation: parsed['skip-validation'] === true,
|
|
101
|
+
});
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
default:
|
|
105
|
+
console.error(`Unknown command: ${command}`);
|
|
106
|
+
console.log('');
|
|
107
|
+
show_help();
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
main().catch((err) => {
|
|
112
|
+
console.error('Error:', err.message);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils/fs.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync, chmodSync } from 'fs';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
export function ensure_dir(path) {
|
|
4
|
+
mkdirSync(path, { recursive: true });
|
|
5
|
+
}
|
|
6
|
+
export function write_file(path, content) {
|
|
7
|
+
ensure_dir(dirname(path));
|
|
8
|
+
writeFileSync(path, content, 'utf-8');
|
|
9
|
+
}
|
|
10
|
+
export function make_executable(path) {
|
|
11
|
+
chmodSync(path, 0o755);
|
|
12
|
+
}
|
|
13
|
+
export function to_title_case(kebab_case) {
|
|
14
|
+
return kebab_case
|
|
15
|
+
.split('-')
|
|
16
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
17
|
+
.join(' ');
|
|
18
|
+
}
|
|
19
|
+
export function is_kebab_case(str) {
|
|
20
|
+
return /^[a-z0-9-]+$/.test(str);
|
|
21
|
+
}
|
|
22
|
+
export function is_lowercase(str) {
|
|
23
|
+
return str === str.toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/utils/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAe;IACtD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,UAAU;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const success = (msg) => console.log(`✅ ${msg}`);
|
|
2
|
+
export const error = (msg) => console.log(`❌ ${msg}`);
|
|
3
|
+
export const warning = (msg) => console.log(`⚠️ ${msg}`);
|
|
4
|
+
export const info = (msg) => console.log(`📋 ${msg}`);
|
|
5
|
+
export const step = (msg) => console.log(` ${msg}`);
|
|
6
|
+
export const package_ = (msg) => console.log(`📦 ${msg}`);
|
|
7
|
+
export const upload = (msg) => console.log(`📤 ${msg}`);
|
|
8
|
+
export const search = (msg) => console.log(`🔍 ${msg}`);
|
|
9
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAC9D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAChE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC"}
|