claude-skills-cli 0.0.6 → 0.0.7
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 +34 -9
- package/dist/commands/init.js +5 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +1 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/stats.js +1 -1
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/validate.js +24 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/watch.js +82 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/core/validator.js +169 -321
- package/dist/core/validator.js.map +1 -1
- package/dist/index.js +23 -12
- package/dist/index.js.map +1 -1
- package/dist/skills/skill-creator/SKILL.md +26 -108
- package/dist/skills/skill-creator/references/cli-reference.md +35 -35
- package/dist/skills/skill-creator/references/development-process.md +208 -0
- package/dist/skills/skill-creator/references/skill-examples.md +1 -1
- package/dist/validators/alignment-validator.js +54 -0
- package/dist/validators/alignment-validator.js.map +1 -0
- package/dist/validators/content-validator.js +144 -0
- package/dist/validators/content-validator.js.map +1 -0
- package/dist/validators/description-validator.js +136 -0
- package/dist/validators/description-validator.js.map +1 -0
- package/dist/validators/file-structure-validator.js +125 -0
- package/dist/validators/file-structure-validator.js.map +1 -0
- package/dist/validators/frontmatter-validator.js +114 -0
- package/dist/validators/frontmatter-validator.js.map +1 -0
- package/dist/validators/references-validator.js +125 -0
- package/dist/validators/references-validator.js.map +1 -0
- package/dist/validators/text-analysis.js +71 -0
- package/dist/validators/text-analysis.js.map +1 -0
- package/docs/CLI-IMPROVEMENTS.md +960 -0
- package/docs/SKILL-CREATOR-UPDATES.md +1071 -0
- package/docs/SKILL-DEVELOPMENT.md +10 -10
- package/docs/SKILLS-ARCHITECTURE.md +1 -1
- package/docs/SKILLS-ECOSYSTEM-ANALYSIS.md +509 -0
- package/docs/SKILLS-OPPORTUNITIES.md +652 -0
- package/package.json +3 -3
package/dist/core/validator.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import { existsSync,
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
// Import validators
|
|
4
|
+
import { extract_frontmatter, validate_frontmatter_structure, validate_name_format, validate_hard_limits, } from '../validators/frontmatter-validator.js';
|
|
5
|
+
import { validate_description_content, analyze_trigger_phrase, analyze_user_phrasing, } from '../validators/description-validator.js';
|
|
6
|
+
import { validate_content } from '../validators/content-validator.js';
|
|
7
|
+
import { analyze_alignment } from '../validators/alignment-validator.js';
|
|
8
|
+
import { validate_references } from '../validators/references-validator.js';
|
|
9
|
+
import { validate_directory, validate_path_formats, validate_scripts, validate_assets, } from '../validators/file-structure-validator.js';
|
|
3
10
|
export class SkillValidator {
|
|
4
11
|
skill_path;
|
|
5
12
|
errors = [];
|
|
@@ -14,10 +21,64 @@ export class SkillValidator {
|
|
|
14
21
|
sections: 0,
|
|
15
22
|
long_paragraphs: 0,
|
|
16
23
|
};
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
// Structured validation data
|
|
25
|
+
structured_validation = {
|
|
26
|
+
hard_limits: {
|
|
27
|
+
name: { length: 0, limit: 64, valid: true, error: null },
|
|
28
|
+
description: {
|
|
29
|
+
length: 0,
|
|
30
|
+
limit: 1024,
|
|
31
|
+
valid: true,
|
|
32
|
+
error: null,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
name_format: {
|
|
36
|
+
name: '',
|
|
37
|
+
format_valid: true,
|
|
38
|
+
directory_name: '',
|
|
39
|
+
matches_directory: true,
|
|
40
|
+
errors: [],
|
|
41
|
+
},
|
|
42
|
+
yaml_validation: {
|
|
43
|
+
valid: true,
|
|
44
|
+
has_frontmatter: false,
|
|
45
|
+
parse_error: null,
|
|
46
|
+
missing_fields: [],
|
|
47
|
+
},
|
|
48
|
+
path_format: {
|
|
49
|
+
invalid_paths: [],
|
|
50
|
+
},
|
|
51
|
+
triggering: {
|
|
52
|
+
trigger_phrase: {
|
|
53
|
+
has_explicit_trigger: false,
|
|
54
|
+
trigger_phrase: null,
|
|
55
|
+
trigger_type: 'missing',
|
|
56
|
+
},
|
|
57
|
+
user_phrasing: {
|
|
58
|
+
style_checks: {
|
|
59
|
+
is_third_person: true,
|
|
60
|
+
uses_gerund_form: true,
|
|
61
|
+
is_action_oriented: true,
|
|
62
|
+
},
|
|
63
|
+
issues: [],
|
|
64
|
+
},
|
|
65
|
+
keywords: {
|
|
66
|
+
description_keywords: [],
|
|
67
|
+
content_keywords: [],
|
|
68
|
+
overlap: [],
|
|
69
|
+
description_only: [],
|
|
70
|
+
content_only: [],
|
|
71
|
+
},
|
|
72
|
+
alignment: {
|
|
73
|
+
severity: 'good',
|
|
74
|
+
description_focus: [],
|
|
75
|
+
content_focus: [],
|
|
76
|
+
matches: [],
|
|
77
|
+
mismatches: [],
|
|
78
|
+
explanation: '',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
21
82
|
constructor(skill_path) {
|
|
22
83
|
this.skill_path = skill_path;
|
|
23
84
|
}
|
|
@@ -27,176 +88,6 @@ export class SkillValidator {
|
|
|
27
88
|
warning(msg) {
|
|
28
89
|
this.warnings.push(`⚠️ ${msg}`);
|
|
29
90
|
}
|
|
30
|
-
/**
|
|
31
|
-
* Extract body content from SKILL.md (excluding YAML frontmatter)
|
|
32
|
-
*/
|
|
33
|
-
extract_body(content) {
|
|
34
|
-
const parts = content.split('---\n');
|
|
35
|
-
return parts.length >= 3
|
|
36
|
-
? parts.slice(2).join('---\n').trim()
|
|
37
|
-
: content;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Count words in text
|
|
41
|
-
*/
|
|
42
|
-
count_words(text) {
|
|
43
|
-
return text
|
|
44
|
-
.trim()
|
|
45
|
-
.split(/\s+/)
|
|
46
|
-
.filter((w) => w.length > 0).length;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Estimate tokens (rough approximation: 1 word ≈ 1.3 tokens for English)
|
|
50
|
-
*/
|
|
51
|
-
estimate_tokens(word_count) {
|
|
52
|
-
return Math.round(word_count * 1.3);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Estimate tokens for a string by counting words and applying ratio
|
|
56
|
-
*/
|
|
57
|
-
estimate_string_tokens(text) {
|
|
58
|
-
const word_count = this.count_words(text);
|
|
59
|
-
return this.estimate_tokens(word_count);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Validate Level 1 (Description in frontmatter) for progressive disclosure
|
|
63
|
-
*/
|
|
64
|
-
validate_description(description) {
|
|
65
|
-
const desc_length = description.length;
|
|
66
|
-
const desc_tokens = this.estimate_string_tokens(description);
|
|
67
|
-
// Store stats
|
|
68
|
-
this.stats.description_length = desc_length;
|
|
69
|
-
this.stats.description_tokens = desc_tokens;
|
|
70
|
-
// Level 1 progressive disclosure checks
|
|
71
|
-
// Recommended: <200 chars, <30 tokens for optimal Level 1 efficiency
|
|
72
|
-
if (desc_length > 300) {
|
|
73
|
-
this.error(`Description is ${desc_length} characters (MAX: 300 for Level 1)\n` +
|
|
74
|
-
` → Level 1 is always loaded - keep it concise for token efficiency`);
|
|
75
|
-
}
|
|
76
|
-
else if (desc_length > 200) {
|
|
77
|
-
this.warning(`Description is ${desc_length} characters (recommended: <200 for Level 1)\n` +
|
|
78
|
-
` → Estimated ~${desc_tokens} tokens - consider shortening for efficiency`);
|
|
79
|
-
}
|
|
80
|
-
// Check for trigger keywords
|
|
81
|
-
const lower_desc = description.toLowerCase();
|
|
82
|
-
const has_trigger = lower_desc.includes('use when') ||
|
|
83
|
-
lower_desc.includes('use for') ||
|
|
84
|
-
lower_desc.includes('use to');
|
|
85
|
-
if (!has_trigger) {
|
|
86
|
-
this.warning(`Description missing trigger keywords ('Use when...', 'Use for...', 'Use to...')\n` +
|
|
87
|
-
` → Help Claude know when to activate this skill`);
|
|
88
|
-
}
|
|
89
|
-
// Check for list bloat (multiple commas indicating detailed lists)
|
|
90
|
-
// Only warn if BOTH long description AND many commas (allows concise technical lists)
|
|
91
|
-
const comma_count = (description.match(/,/g) || []).length;
|
|
92
|
-
if (desc_length > 150 && comma_count >= 5) {
|
|
93
|
-
this.warning(`Description contains long lists (${comma_count} commas, ${desc_length} chars)\n` +
|
|
94
|
-
` → Move detailed lists to Level 2 (SKILL.md body) or Level 3 (references/)`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Remove HTML comments from content (for line counting)
|
|
99
|
-
*/
|
|
100
|
-
strip_html_comments(text) {
|
|
101
|
-
return text.replace(/<!--[\s\S]*?-->/g, '');
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Analyze content structure and patterns
|
|
105
|
-
*/
|
|
106
|
-
analyze_content(body) {
|
|
107
|
-
// Count code blocks
|
|
108
|
-
const code_block_matches = body.match(/```[\s\S]*?```/g);
|
|
109
|
-
this.stats.code_blocks = code_block_matches
|
|
110
|
-
? code_block_matches.length
|
|
111
|
-
: 0;
|
|
112
|
-
// Count markdown sections (headings)
|
|
113
|
-
const heading_matches = body.match(/^#{1,6}\s/gm);
|
|
114
|
-
this.stats.sections = heading_matches
|
|
115
|
-
? heading_matches.length
|
|
116
|
-
: 0;
|
|
117
|
-
// Count long paragraphs (>100 words)
|
|
118
|
-
const paragraphs = body.split(/\n\n+/);
|
|
119
|
-
this.stats.long_paragraphs = paragraphs.filter((p) => {
|
|
120
|
-
const words = this.count_words(p);
|
|
121
|
-
return words > 100;
|
|
122
|
-
}).length;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Validate progressive disclosure (word count, token budget, and line count)
|
|
126
|
-
*/
|
|
127
|
-
validate_progressive_disclosure(body) {
|
|
128
|
-
const word_count = this.count_words(body);
|
|
129
|
-
const estimated_tokens = this.estimate_tokens(word_count);
|
|
130
|
-
// Strip HTML comments before counting lines (progressive disclosure guidance shouldn't inflate count)
|
|
131
|
-
const body_without_comments = this.strip_html_comments(body);
|
|
132
|
-
const line_count = body_without_comments
|
|
133
|
-
.trim()
|
|
134
|
-
.split('\n').length;
|
|
135
|
-
this.stats.word_count = word_count;
|
|
136
|
-
this.stats.estimated_tokens = estimated_tokens;
|
|
137
|
-
this.stats.line_count = line_count;
|
|
138
|
-
// Hard limit check (error)
|
|
139
|
-
if (word_count > this.MAX_WORDS) {
|
|
140
|
-
this.error(`SKILL.md body has ${word_count} words (MAX: ${this.MAX_WORDS} per Anthropic guidelines)\n` +
|
|
141
|
-
` → Move detailed content to references/ directory for Level 3 loading`);
|
|
142
|
-
}
|
|
143
|
-
// Recommended limit check (warning)
|
|
144
|
-
else if (word_count > this.RECOMMENDED_WORDS) {
|
|
145
|
-
this.warning(`SKILL.md body has ${word_count} words (recommended: <${this.RECOMMENDED_WORDS})\n` +
|
|
146
|
-
` → Consider moving examples/docs to references/ for better token efficiency`);
|
|
147
|
-
}
|
|
148
|
-
// Line count validation (Level 2 progressive disclosure)
|
|
149
|
-
// Target: ~50 lines, Warn: >80, Error: >150
|
|
150
|
-
if (line_count > 150) {
|
|
151
|
-
this.error(`SKILL.md body is ${line_count} lines (MAX: ~150 for Level 2 progressive disclosure)\n` +
|
|
152
|
-
` → Move detailed content to references/ directory\n` +
|
|
153
|
-
` → Target: ~50 lines for optimal scannability`);
|
|
154
|
-
}
|
|
155
|
-
else if (line_count > 80) {
|
|
156
|
-
this.warning(`SKILL.md body is ${line_count} lines (recommended: ~50, max: ~80)\n` +
|
|
157
|
-
` → Consider moving detailed examples to references/ for Level 3 loading`);
|
|
158
|
-
}
|
|
159
|
-
// Content analysis warnings
|
|
160
|
-
// Code blocks: Recommend 1-2, warn at >3
|
|
161
|
-
if (this.stats.code_blocks > 3) {
|
|
162
|
-
this.warning(`SKILL.md contains ${this.stats.code_blocks} code examples (recommended: 1-2)\n` +
|
|
163
|
-
` → Move additional examples to references/examples.md for Level 3 loading`);
|
|
164
|
-
}
|
|
165
|
-
// Long paragraphs
|
|
166
|
-
if (this.stats.long_paragraphs > 3) {
|
|
167
|
-
this.warning(`SKILL.md contains ${this.stats.long_paragraphs} lengthy paragraphs (>100 words)\n` +
|
|
168
|
-
` → Consider moving detailed explanations to references/`);
|
|
169
|
-
}
|
|
170
|
-
// Sections: Recommend 3-5, warn at >8
|
|
171
|
-
if (this.stats.sections > 8) {
|
|
172
|
-
this.warning(`SKILL.md contains ${this.stats.sections} sections (recommended: 3-5)\n` +
|
|
173
|
-
` → Consider splitting into focused reference files`);
|
|
174
|
-
}
|
|
175
|
-
// Check for "Quick Start" section
|
|
176
|
-
if (!body.includes('## Quick Start') &&
|
|
177
|
-
!body.includes('## Quick start')) {
|
|
178
|
-
this.warning(`Missing "## Quick Start" section\n` +
|
|
179
|
-
` → Add one minimal working example to help Claude get started quickly`);
|
|
180
|
-
}
|
|
181
|
-
// Check for references/ links when body is long
|
|
182
|
-
const has_references = body.includes('references/');
|
|
183
|
-
if (!has_references && line_count > 60) {
|
|
184
|
-
this.warning(`No references/ links found but SKILL.md is ${line_count} lines\n` +
|
|
185
|
-
` → Consider splitting detailed content into reference files`);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
validate_directory() {
|
|
189
|
-
if (!existsSync(this.skill_path)) {
|
|
190
|
-
this.error(`Skill directory does not exist: ${this.skill_path}`);
|
|
191
|
-
return false;
|
|
192
|
-
}
|
|
193
|
-
const stats = statSync(this.skill_path);
|
|
194
|
-
if (!stats.isDirectory()) {
|
|
195
|
-
this.error(`Path is not a directory: ${this.skill_path}`);
|
|
196
|
-
return false;
|
|
197
|
-
}
|
|
198
|
-
return true;
|
|
199
|
-
}
|
|
200
91
|
validate_skill_md() {
|
|
201
92
|
const skill_md_path = join(this.skill_path, 'SKILL.md');
|
|
202
93
|
if (!existsSync(skill_md_path)) {
|
|
@@ -204,173 +95,130 @@ export class SkillValidator {
|
|
|
204
95
|
return false;
|
|
205
96
|
}
|
|
206
97
|
const content = readFileSync(skill_md_path, 'utf-8');
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
//
|
|
213
|
-
const
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
98
|
+
// Validate path formats (no Windows backslashes)
|
|
99
|
+
const path_format_result = validate_path_formats(content);
|
|
100
|
+
this.structured_validation.path_format =
|
|
101
|
+
path_format_result.validation;
|
|
102
|
+
path_format_result.errors.forEach((err) => this.error(err.message));
|
|
103
|
+
// Validate frontmatter structure
|
|
104
|
+
const frontmatter_validation = validate_frontmatter_structure(content);
|
|
105
|
+
this.structured_validation.yaml_validation =
|
|
106
|
+
frontmatter_validation;
|
|
107
|
+
if (!frontmatter_validation.valid) {
|
|
108
|
+
if (frontmatter_validation.parse_error) {
|
|
109
|
+
this.error(frontmatter_validation.parse_error);
|
|
110
|
+
}
|
|
111
|
+
frontmatter_validation.missing_fields.forEach((field) => {
|
|
112
|
+
this.error(`SKILL.md frontmatter missing '${field}' field`);
|
|
113
|
+
});
|
|
223
114
|
return false;
|
|
224
115
|
}
|
|
225
|
-
|
|
226
|
-
|
|
116
|
+
// Extract frontmatter data
|
|
117
|
+
const { name, description, body } = extract_frontmatter(content);
|
|
118
|
+
if (!name || !description) {
|
|
119
|
+
this.error('Failed to extract name or description from frontmatter');
|
|
227
120
|
return false;
|
|
228
121
|
}
|
|
229
|
-
//
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
this.validate_description(description);
|
|
261
|
-
}
|
|
262
|
-
// Validate progressive disclosure (word count, token budget)
|
|
263
|
-
this.validate_progressive_disclosure(body);
|
|
264
|
-
// Analyze content structure
|
|
265
|
-
this.analyze_content(body);
|
|
266
|
-
// Check body content
|
|
267
|
-
if (body.trim().length < 100) {
|
|
268
|
-
this.warning('SKILL.md body is very short');
|
|
269
|
-
}
|
|
270
|
-
// Check for TODO placeholders
|
|
271
|
-
if (body.includes('TODO') ||
|
|
272
|
-
body.includes('[Add your') ||
|
|
273
|
-
body.includes('[Provide')) {
|
|
274
|
-
this.warning('SKILL.md contains TODO placeholders');
|
|
275
|
-
}
|
|
276
|
-
return true;
|
|
277
|
-
}
|
|
278
|
-
validate_references() {
|
|
279
|
-
const references_dir = join(this.skill_path, 'references');
|
|
280
|
-
const skill_md_path = join(this.skill_path, 'SKILL.md');
|
|
281
|
-
// Check references directory if it exists
|
|
282
|
-
if (existsSync(references_dir)) {
|
|
283
|
-
const files = readdirSync(references_dir);
|
|
284
|
-
const md_files = files.filter((f) => f.endsWith('.md'));
|
|
285
|
-
if (md_files.length === 0) {
|
|
286
|
-
this.warning('references/ directory exists but is empty');
|
|
287
|
-
}
|
|
288
|
-
// Check for references in SKILL.md
|
|
289
|
-
if (existsSync(skill_md_path)) {
|
|
290
|
-
const skill_content = readFileSync(skill_md_path, 'utf-8');
|
|
291
|
-
for (const md_file of md_files) {
|
|
292
|
-
if (!skill_content.includes(md_file)) {
|
|
293
|
-
this.warning(`Reference file '${md_file}' not mentioned in SKILL.md`);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
// Level 3 validation: Check that all referenced files exist
|
|
299
|
-
if (existsSync(skill_md_path)) {
|
|
300
|
-
const skill_content = readFileSync(skill_md_path, 'utf-8');
|
|
301
|
-
// Extract markdown links to references/ directory
|
|
302
|
-
// Matches: [text](references/file.md) or [text](references/subdir/file.md)
|
|
303
|
-
const reference_link_pattern = /\[([^\]]+)\]\((references\/[^)]+\.md)\)/g;
|
|
304
|
-
const matches = skill_content.matchAll(reference_link_pattern);
|
|
305
|
-
for (const match of matches) {
|
|
306
|
-
const link_text = match[1];
|
|
307
|
-
const file_path = match[2]; // e.g., "references/examples.md"
|
|
308
|
-
const full_path = join(this.skill_path, file_path);
|
|
309
|
-
if (!existsSync(full_path)) {
|
|
310
|
-
this.error(`Referenced file not found: ${file_path}\n` +
|
|
311
|
-
` → Linked from: [${link_text}]\n` +
|
|
312
|
-
` → Create the file or remove the broken link`);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
return true;
|
|
317
|
-
}
|
|
318
|
-
validate_scripts() {
|
|
319
|
-
const scripts_dir = join(this.skill_path, 'scripts');
|
|
320
|
-
if (existsSync(scripts_dir)) {
|
|
321
|
-
const files = readdirSync(scripts_dir);
|
|
322
|
-
const script_files = files.filter((f) => f.endsWith('.js') ||
|
|
323
|
-
f.endsWith('.ts') ||
|
|
324
|
-
f.endsWith('.mjs') ||
|
|
325
|
-
f.endsWith('.sh'));
|
|
326
|
-
if (script_files.length === 0) {
|
|
327
|
-
this.warning('scripts/ directory exists but is empty');
|
|
328
|
-
}
|
|
329
|
-
for (const script_file of script_files) {
|
|
330
|
-
const script_path = join(scripts_dir, script_file);
|
|
331
|
-
const stats = statSync(script_path);
|
|
332
|
-
// Check if executable (0o111 = --x--x--x)
|
|
333
|
-
if ((stats.mode & 0o111) === 0) {
|
|
334
|
-
this.warning(`Script is not executable: ${script_file}`);
|
|
335
|
-
}
|
|
336
|
-
// Check for shebang
|
|
337
|
-
const content = readFileSync(script_path, 'utf-8');
|
|
338
|
-
const first_line = content.split('\n')[0];
|
|
339
|
-
if (!first_line.startsWith('#!')) {
|
|
340
|
-
this.warning(`Script missing shebang: ${script_file}`);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
return true;
|
|
345
|
-
}
|
|
346
|
-
validate_assets() {
|
|
347
|
-
const assets_dir = join(this.skill_path, 'assets');
|
|
348
|
-
if (existsSync(assets_dir)) {
|
|
349
|
-
const files = readdirSync(assets_dir);
|
|
350
|
-
if (files.length === 0) {
|
|
351
|
-
this.warning('assets/ directory exists but is empty');
|
|
352
|
-
}
|
|
122
|
+
// Get directory name
|
|
123
|
+
const dir_name = this.skill_path.split('/').pop() || '';
|
|
124
|
+
// Validate name format
|
|
125
|
+
const name_validation = validate_name_format(name, dir_name);
|
|
126
|
+
this.structured_validation.name_format = name_validation;
|
|
127
|
+
name_validation.errors.forEach((err) => this.error(err));
|
|
128
|
+
// Validate hard limits
|
|
129
|
+
const hard_limits = validate_hard_limits(name, description);
|
|
130
|
+
this.structured_validation.hard_limits = hard_limits;
|
|
131
|
+
if (!hard_limits.name.valid && hard_limits.name.error) {
|
|
132
|
+
this.error(hard_limits.name.error);
|
|
133
|
+
}
|
|
134
|
+
if (!hard_limits.description.valid &&
|
|
135
|
+
hard_limits.description.error) {
|
|
136
|
+
this.error(hard_limits.description.error);
|
|
137
|
+
}
|
|
138
|
+
// Validate description content
|
|
139
|
+
const desc_validation = validate_description_content(description);
|
|
140
|
+
this.stats.description_length =
|
|
141
|
+
desc_validation.stats.description_length;
|
|
142
|
+
this.stats.description_tokens =
|
|
143
|
+
desc_validation.stats.description_tokens;
|
|
144
|
+
desc_validation.errors.forEach((err) => this.error(err.message));
|
|
145
|
+
desc_validation.warnings.forEach((warn) => this.warning(warn.message));
|
|
146
|
+
// Analyze trigger phrase
|
|
147
|
+
const trigger_analysis = analyze_trigger_phrase(description);
|
|
148
|
+
this.structured_validation.triggering.trigger_phrase =
|
|
149
|
+
trigger_analysis;
|
|
150
|
+
if (!trigger_analysis.has_explicit_trigger) {
|
|
151
|
+
this.warning(`Description missing explicit trigger phrase ('Use when...', 'Use for...', 'Use to...')\n` +
|
|
152
|
+
` → Help Claude know when to activate this skill`);
|
|
353
153
|
}
|
|
154
|
+
// Analyze user phrasing
|
|
155
|
+
const { analysis: phrasing_analysis, warnings: phrasing_warnings, } = analyze_user_phrasing(description);
|
|
156
|
+
this.structured_validation.triggering.user_phrasing =
|
|
157
|
+
phrasing_analysis;
|
|
158
|
+
phrasing_warnings.forEach((warn) => this.warning(warn.message));
|
|
159
|
+
// Analyze alignment
|
|
160
|
+
const alignment_result = analyze_alignment(description, body);
|
|
161
|
+
this.structured_validation.triggering.keywords =
|
|
162
|
+
alignment_result.keywords;
|
|
163
|
+
this.structured_validation.triggering.alignment =
|
|
164
|
+
alignment_result.alignment;
|
|
165
|
+
alignment_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
166
|
+
// Validate content (progressive disclosure)
|
|
167
|
+
const content_validation = validate_content(body);
|
|
168
|
+
this.stats.word_count = content_validation.stats.word_count;
|
|
169
|
+
this.stats.estimated_tokens =
|
|
170
|
+
content_validation.stats.estimated_tokens;
|
|
171
|
+
this.stats.line_count = content_validation.stats.line_count;
|
|
172
|
+
this.stats.code_blocks = content_validation.stats.code_blocks;
|
|
173
|
+
this.stats.sections = content_validation.stats.sections;
|
|
174
|
+
this.stats.long_paragraphs =
|
|
175
|
+
content_validation.stats.long_paragraphs;
|
|
176
|
+
content_validation.errors.forEach((err) => this.error(err.message));
|
|
177
|
+
content_validation.warnings.forEach((warn) => this.warning(warn.message));
|
|
354
178
|
return true;
|
|
355
179
|
}
|
|
356
180
|
validate_all() {
|
|
357
|
-
|
|
181
|
+
// Validate directory
|
|
182
|
+
const dir_result = validate_directory(this.skill_path);
|
|
183
|
+
if (!dir_result.valid) {
|
|
184
|
+
dir_result.errors.forEach((err) => this.error(err.message));
|
|
358
185
|
return {
|
|
359
186
|
errors: this.errors,
|
|
360
187
|
warnings: this.warnings,
|
|
361
188
|
is_valid: false,
|
|
362
189
|
stats: this.stats,
|
|
190
|
+
validation: this.structured_validation,
|
|
363
191
|
};
|
|
364
192
|
}
|
|
193
|
+
// Validate SKILL.md
|
|
365
194
|
this.validate_skill_md();
|
|
366
|
-
|
|
367
|
-
this.
|
|
368
|
-
this.
|
|
195
|
+
// Validate references
|
|
196
|
+
const refs_result = validate_references(this.skill_path);
|
|
197
|
+
refs_result.errors.forEach((err) => this.error(err.message));
|
|
198
|
+
refs_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
199
|
+
// Validate scripts
|
|
200
|
+
const scripts_result = validate_scripts(this.skill_path);
|
|
201
|
+
scripts_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
202
|
+
// Validate assets
|
|
203
|
+
const assets_result = validate_assets(this.skill_path);
|
|
204
|
+
assets_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
205
|
+
// Populate progressive disclosure structured validation
|
|
206
|
+
this.structured_validation.progressive_disclosure = {
|
|
207
|
+
skill_md_size: {
|
|
208
|
+
lines: this.stats.line_count,
|
|
209
|
+
words: this.stats.word_count,
|
|
210
|
+
tokens: this.stats.estimated_tokens,
|
|
211
|
+
exceeds_line_limit: this.stats.line_count > 50,
|
|
212
|
+
exceeds_word_limit: this.stats.word_count > 1000,
|
|
213
|
+
},
|
|
214
|
+
references: refs_result.validation,
|
|
215
|
+
};
|
|
369
216
|
return {
|
|
370
217
|
errors: this.errors,
|
|
371
218
|
warnings: this.warnings,
|
|
372
219
|
is_valid: this.errors.length === 0,
|
|
373
220
|
stats: this.stats,
|
|
221
|
+
validation: this.structured_validation,
|
|
374
222
|
};
|
|
375
223
|
}
|
|
376
224
|
get_errors() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,GACR,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,OAAO,cAAc;IAClB,UAAU,CAAS;IACnB,MAAM,GAAa,EAAE,CAAC;IACtB,QAAQ,GAAa,EAAE,CAAC;IACxB,KAAK,GAAoB;QAChC,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QACb,kBAAkB,EAAE,CAAC;QACrB,kBAAkB,EAAE,CAAC;QACrB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,eAAe,EAAE,CAAC;KAClB,CAAC;IAEF,4DAA4D;IAC3C,SAAS,GAAG,IAAI,CAAC,CAAC,aAAa;IAC/B,iBAAiB,GAAG,IAAI,CAAC,CAAC,aAAa;IACvC,WAAW,GAAG,GAAG,CAAC,CAAC,wBAAwB;IAE5D,YAAY,UAAkB;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,GAAW;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEO,OAAO,CAAC,GAAW;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,OAAe;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC;YACvB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,OAAO,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,IAAY;QAC/B,OAAO,IAAI;aACT,IAAI,EAAE;aACN,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,UAAkB;QACzC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,IAAY;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,WAAmB;QAC/C,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;QACvC,MAAM,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAE7D,cAAc;QACd,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,WAAW,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,WAAW,CAAC;QAE5C,wCAAwC;QACxC,qEAAqE;QACrE,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CACT,kBAAkB,WAAW,sCAAsC;gBAClE,qEAAqE,CACtE,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CACX,kBAAkB,WAAW,+CAA+C;gBAC3E,kBAAkB,WAAW,8CAA8C,CAC5E,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,WAAW,GAChB,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC/B,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC9B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CACX,mFAAmF;gBAClF,kDAAkD,CACnD,CAAC;QACH,CAAC;QAED,mEAAmE;QACnE,sFAAsF;QACtF,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC3D,IAAI,WAAW,GAAG,GAAG,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CACX,oCAAoC,WAAW,YAAY,WAAW,WAAW;gBAChF,6EAA6E,CAC9E,CAAC;QACH,CAAC;IACF,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,IAAY;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAY;QACnC,oBAAoB;QACpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,kBAAkB;YAC1C,CAAC,CAAC,kBAAkB,CAAC,MAAM;YAC3B,CAAC,CAAC,CAAC,CAAC;QAEL,qCAAqC;QACrC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,eAAe;YACpC,CAAC,CAAC,eAAe,CAAC,MAAM;YACxB,CAAC,CAAC,CAAC,CAAC;QAEL,qCAAqC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,KAAK,GAAG,GAAG,CAAC;QACpB,CAAC,CAAC,CAAC,MAAM,CAAC;IACX,CAAC;IAED;;OAEG;IACK,+BAA+B,CAAC,IAAY;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAC1D,sGAAsG;QACtG,MAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,qBAAqB;aACtC,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAErB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAEnC,2BAA2B;QAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CACT,qBAAqB,UAAU,gBAAgB,IAAI,CAAC,SAAS,8BAA8B;gBAC1F,wEAAwE,CACzE,CAAC;QACH,CAAC;QACD,oCAAoC;aAC/B,IAAI,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CACX,qBAAqB,UAAU,yBAAyB,IAAI,CAAC,iBAAiB,KAAK;gBAClF,8EAA8E,CAC/E,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,4CAA4C;QAC5C,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CACT,oBAAoB,UAAU,yDAAyD;gBACtF,sDAAsD;gBACtD,gDAAgD,CACjD,CAAC;QACH,CAAC;aAAM,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CACX,oBAAoB,UAAU,uCAAuC;gBACpE,0EAA0E,CAC3E,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,yCAAyC;QACzC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,OAAO,CACX,qBAAqB,IAAI,CAAC,KAAK,CAAC,WAAW,qCAAqC;gBAC/E,4EAA4E,CAC7E,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CACX,qBAAqB,IAAI,CAAC,KAAK,CAAC,eAAe,oCAAoC;gBAClF,0DAA0D,CAC3D,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CACX,qBAAqB,IAAI,CAAC,KAAK,CAAC,QAAQ,gCAAgC;gBACvE,qDAAqD,CACtD,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,IACC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAChC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAC/B,CAAC;YACF,IAAI,CAAC,OAAO,CACX,oCAAoC;gBACnC,wEAAwE,CACzE,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,CACX,8CAA8C,UAAU,UAAU;gBACjE,8DAA8D,CAC/D,CAAC;QACH,CAAC;IACF,CAAC;IAEO,kBAAkB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CACT,mCAAmC,IAAI,CAAC,UAAU,EAAE,CACpD,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1D,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,iBAAiB;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAErD,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACd,CAAC;QAED,sBAAsB;QACtB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACtD,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1C,2BAA2B;QAC3B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YAC/D,OAAO,KAAK,CAAC;QACd,CAAC;QAED,eAAe;QACf,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACrD,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAElC,uBAAuB;YACvB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CACT,6CAA6C,IAAI,GAAG,CACpD,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YACxD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,CACX,eAAe,IAAI,mCAAmC,QAAQ,GAAG,CACjE,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,CACT,uCAAuC,IAAI,CAAC,MAAM,EAAE,CACpD,CAAC;YACH,CAAC;QACF,CAAC;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CACnC,sCAAsC,CACtC,CAAC;QACF,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEzC,2CAA2C;YAC3C,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CACT,wDAAwD,WAAW,CAAC,MAAM,EAAE,CAC5E,CAAC;YACH,CAAC;YAED,0BAA0B;YAC1B,IAAI,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CACX,yDAAyD,CACzD,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC;QAE3C,4BAA4B;QAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAE3B,qBAAqB;QACrB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,8BAA8B;QAC9B,IACC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EACxB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,mBAAmB;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAExD,0CAA0C;QAC1C,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAExD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;YAC3D,CAAC;YAED,mCAAmC;YACnC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/B,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;gBAE3D,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAChC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBACtC,IAAI,CAAC,OAAO,CACX,mBAAmB,OAAO,6BAA6B,CACvD,CAAC;oBACH,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QAED,4DAA4D;QAC5D,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAE3D,kDAAkD;YAClD,2EAA2E;YAC3E,MAAM,sBAAsB,GAC3B,0CAA0C,CAAC;YAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;gBAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAEnD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5B,IAAI,CAAC,KAAK,CACT,8BAA8B,SAAS,IAAI;wBAC1C,qBAAqB,SAAS,KAAK;wBACnC,+CAA+C,CAChD,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,gBAAgB;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAErD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACjB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACjB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAClB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAClB,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;YACxD,CAAC;YAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;gBACxC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAEpC,0CAA0C;gBAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,OAAO,CAAC,6BAA6B,WAAW,EAAE,CAAC,CAAC;gBAC1D,CAAC;gBAED,oBAAoB;gBACpB,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,OAAO,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;gBACxD,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEO,eAAe;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEnD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YAEtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAChC,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;aACjB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;SACjB,CAAC;IACH,CAAC;IAEM,UAAU;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,oBAAoB;AACpB,OAAO,EACN,mBAAmB,EACnB,8BAA8B,EAC9B,oBAAoB,EACpB,oBAAoB,GACpB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACN,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,GACrB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EACN,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GACf,MAAM,2CAA2C,CAAC;AAEnD,MAAM,OAAO,cAAc;IAClB,UAAU,CAAS;IACnB,MAAM,GAAa,EAAE,CAAC;IACtB,QAAQ,GAAa,EAAE,CAAC;IACxB,KAAK,GAAoB;QAChC,UAAU,EAAE,CAAC;QACb,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QACb,kBAAkB,EAAE,CAAC;QACrB,kBAAkB,EAAE,CAAC;QACrB,WAAW,EAAE,CAAC;QACd,QAAQ,EAAE,CAAC;QACX,eAAe,EAAE,CAAC;KAClB,CAAC;IAEF,6BAA6B;IACrB,qBAAqB,GAAyB;QACrD,WAAW,EAAE;YACZ,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACxD,WAAW,EAAE;gBACZ,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,IAAI;aACX;SACD;QACD,WAAW,EAAE;YACZ,IAAI,EAAE,EAAE;YACR,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,EAAE;YAClB,iBAAiB,EAAE,IAAI;YACvB,MAAM,EAAE,EAAE;SACV;QACD,eAAe,EAAE;YAChB,KAAK,EAAE,IAAI;YACX,eAAe,EAAE,KAAK;YACtB,WAAW,EAAE,IAAI;YACjB,cAAc,EAAE,EAAE;SAClB;QACD,WAAW,EAAE;YACZ,aAAa,EAAE,EAAE;SACjB;QACD,UAAU,EAAE;YACX,cAAc,EAAE;gBACf,oBAAoB,EAAE,KAAK;gBAC3B,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,SAAS;aACvB;YACD,aAAa,EAAE;gBACd,YAAY,EAAE;oBACb,eAAe,EAAE,IAAI;oBACrB,gBAAgB,EAAE,IAAI;oBACtB,kBAAkB,EAAE,IAAI;iBACxB;gBACD,MAAM,EAAE,EAAE;aACV;YACD,QAAQ,EAAE;gBACT,oBAAoB,EAAE,EAAE;gBACxB,gBAAgB,EAAE,EAAE;gBACpB,OAAO,EAAE,EAAE;gBACX,gBAAgB,EAAE,EAAE;gBACpB,YAAY,EAAE,EAAE;aAChB;YACD,SAAS,EAAE;gBACV,QAAQ,EAAE,MAAM;gBAChB,iBAAiB,EAAE,EAAE;gBACrB,aAAa,EAAE,EAAE;gBACjB,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,EAAE;gBACd,WAAW,EAAE,EAAE;aACf;SACD;KACD,CAAC;IAEF,YAAY,UAAkB;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,GAAW;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEO,OAAO,CAAC,GAAW;QAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;IAEO,iBAAiB;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAExD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAErD,iDAAiD;QACjD,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,qBAAqB,CAAC,WAAW;YACrC,kBAAkB,CAAC,UAAU,CAAC;QAC/B,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CACvB,CAAC;QAEF,iCAAiC;QACjC,MAAM,sBAAsB,GAC3B,8BAA8B,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,eAAe;YACzC,sBAAsB,CAAC;QAExB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,sBAAsB,CAAC,WAAW,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YAChD,CAAC;YACD,sBAAsB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvD,IAAI,CAAC,KAAK,CAAC,iCAAiC,KAAK,SAAS,CAAC,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,OAAO,KAAK,CAAC;QACd,CAAC;QAED,2BAA2B;QAC3B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CACT,wDAAwD,CACxD,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,qBAAqB;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAExD,uBAAuB;QACvB,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7D,IAAI,CAAC,qBAAqB,CAAC,WAAW,GAAG,eAAe,CAAC;QACzD,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAEzD,uBAAuB;QACvB,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC5D,IAAI,CAAC,qBAAqB,CAAC,WAAW,GAAG,WAAW,CAAC;QAErD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,IACC,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK;YAC9B,WAAW,CAAC,WAAW,CAAC,KAAK,EAC5B,CAAC;YACF,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,+BAA+B;QAC/B,MAAM,eAAe,GAAG,4BAA4B,CAAC,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,kBAAkB;YAC5B,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,kBAAkB;YAC5B,eAAe,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAC1C,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACjE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;QAEF,yBAAyB;QACzB,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,qBAAqB,CAAC,UAAW,CAAC,cAAc;YACpD,gBAAgB,CAAC;QAElB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CACX,0FAA0F;gBACzF,kDAAkD,CACnD,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,EACL,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,GAC3B,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;QACvC,IAAI,CAAC,qBAAqB,CAAC,UAAW,CAAC,aAAa;YACnD,iBAAiB,CAAC;QACnB,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAEhE,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,UAAW,CAAC,QAAQ;YAC9C,gBAAgB,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,UAAW,CAAC,SAAS;YAC/C,gBAAgB,CAAC,SAAS,CAAC;QAC5B,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;QAEF,4CAA4C;QAC5C,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAC1B,kBAAkB,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;QAC5D,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC;QAC9D,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,eAAe;YACzB,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC;QAC1C,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CACvB,CAAC;QACF,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;QAEF,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,YAAY;QAClB,qBAAqB;QACrB,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACvB,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5D,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,qBAAqB;aACtC,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,sBAAsB;QACtB,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7D,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;QAEF,mBAAmB;QACnB,MAAM,cAAc,GAAG,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACxC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;QAEF,kBAAkB;QAClB,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1B,CAAC;QAEF,wDAAwD;QACxD,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,GAAG;YACnD,aAAa,EAAE;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;gBAC5B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;gBACnC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE;gBAC9C,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;aAChD;YACD,UAAU,EAAE,WAAW,CAAC,UAAU;SAClC,CAAC;QAEF,OAAO;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,qBAAqB;SACtC,CAAC;IACH,CAAC;IAEM,UAAU;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEM,YAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
|
package/dist/index.js
CHANGED
|
@@ -7,9 +7,9 @@ import { validate_command } from './commands/validate.js';
|
|
|
7
7
|
const args = process.argv.slice(2);
|
|
8
8
|
const command = args[0];
|
|
9
9
|
function show_help() {
|
|
10
|
-
console.log('claude-skills - CLI toolkit for creating Claude Agent Skills\n');
|
|
10
|
+
console.log('claude-skills-cli - CLI toolkit for creating Claude Agent Skills\n');
|
|
11
11
|
console.log('Usage:');
|
|
12
|
-
console.log(' claude-skills <command> [options]\n');
|
|
12
|
+
console.log(' claude-skills-cli <command> [options]\n');
|
|
13
13
|
console.log('Commands:');
|
|
14
14
|
console.log(' init Create a new skill');
|
|
15
15
|
console.log(' install Install a bundled skill (e.g., skill-creator)');
|
|
@@ -19,14 +19,23 @@ function show_help() {
|
|
|
19
19
|
console.log('Options:');
|
|
20
20
|
console.log(' --help, -h Show help');
|
|
21
21
|
console.log(' --version, -v Show version');
|
|
22
|
-
console.log(' --with-examples Include example files when creating skill
|
|
22
|
+
console.log(' --with-examples Include example files when creating skill');
|
|
23
|
+
console.log(' --format <type> Output format: text (default) or json');
|
|
24
|
+
console.log(' --strict Fail validation if warnings present\n');
|
|
23
25
|
console.log('Examples:');
|
|
24
|
-
console.log(' claude-skills init --name my-skill --description "Description"');
|
|
25
|
-
console.log(' claude-skills init --name my-skill --description "..." --with-examples');
|
|
26
|
-
console.log(' claude-skills install skill-creator');
|
|
27
|
-
console.log(' claude-skills validate .claude/skills/my-skill');
|
|
28
|
-
console.log(' claude-skills
|
|
29
|
-
console.log(' claude-skills
|
|
26
|
+
console.log(' claude-skills-cli init --name my-skill --description "Description"');
|
|
27
|
+
console.log(' claude-skills-cli init --name my-skill --description "..." --with-examples');
|
|
28
|
+
console.log(' claude-skills-cli install skill-creator');
|
|
29
|
+
console.log(' claude-skills-cli validate .claude/skills/my-skill');
|
|
30
|
+
console.log(' claude-skills-cli validate .claude/skills/my-skill --format json');
|
|
31
|
+
console.log(' claude-skills-cli validate .claude/skills/my-skill --strict');
|
|
32
|
+
console.log(' claude-skills-cli package .claude/skills/my-skill');
|
|
33
|
+
console.log(' claude-skills-cli stats .claude/skills');
|
|
34
|
+
console.log('\n⚠️ IMPORTANT FOR LLMs:');
|
|
35
|
+
console.log(' ALWAYS run validate after creating or editing a skill:');
|
|
36
|
+
console.log(' claude-skills-cli validate <skill-path>');
|
|
37
|
+
console.log(' Skills MUST pass validation before use.');
|
|
38
|
+
console.log(' Fix all errors immediately. Address warnings promptly.');
|
|
30
39
|
}
|
|
31
40
|
function parse_args(args) {
|
|
32
41
|
const parsed = {};
|
|
@@ -70,7 +79,7 @@ async function main() {
|
|
|
70
79
|
process.exit(0);
|
|
71
80
|
}
|
|
72
81
|
if (command === '--version' || command === '-v') {
|
|
73
|
-
console.log('claude-skills v0.0.1');
|
|
82
|
+
console.log('claude-skills-cli v0.0.1');
|
|
74
83
|
process.exit(0);
|
|
75
84
|
}
|
|
76
85
|
const parsed = parse_args(args.slice(1));
|
|
@@ -95,12 +104,14 @@ async function main() {
|
|
|
95
104
|
const skill_path = parsed._positional;
|
|
96
105
|
if (!skill_path) {
|
|
97
106
|
console.error('Error: skill path required');
|
|
98
|
-
console.log('\nUsage: claude-skills validate <skill_path>');
|
|
107
|
+
console.log('\nUsage: claude-skills-cli validate <skill_path> [--format json] [--strict]');
|
|
99
108
|
process.exit(1);
|
|
100
109
|
}
|
|
110
|
+
const format = parsed.format;
|
|
101
111
|
validate_command({
|
|
102
112
|
skill_path,
|
|
103
113
|
strict: parsed.strict === true,
|
|
114
|
+
format: format === 'json' ? 'json' : 'text',
|
|
104
115
|
});
|
|
105
116
|
break;
|
|
106
117
|
}
|
|
@@ -108,7 +119,7 @@ async function main() {
|
|
|
108
119
|
const skill_path = parsed._positional;
|
|
109
120
|
if (!skill_path) {
|
|
110
121
|
console.error('Error: skill path required');
|
|
111
|
-
console.log('\nUsage: claude-skills package <skill_path>');
|
|
122
|
+
console.log('\nUsage: claude-skills-cli package <skill_path>');
|
|
112
123
|
process.exit(1);
|
|
113
124
|
}
|
|
114
125
|
await package_command({
|