claude-skills-cli 0.0.6 → 0.0.8
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 +49 -9
- package/dist/commands/doctor.js +128 -0
- package/dist/commands/doctor.js.map +1 -0
- 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/templates.js +18 -0
- package/dist/core/templates.js.map +1 -1
- package/dist/core/validator.js +174 -321
- package/dist/core/validator.js.map +1 -1
- package/dist/index.js +38 -12
- package/dist/index.js.map +1 -1
- package/dist/skills/skill-creator/SKILL.md +28 -112
- package/dist/skills/skill-creator/references/cli-reference.md +152 -38
- 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 +165 -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/prompt-that-started-it-all.md +19 -0
- package/package.json +3 -3
- package/docs/SKILL-DEVELOPMENT.md +0 -460
- package/docs/SKILL-EXAMPLES.md +0 -528
- package/docs/SKILLS-ARCHITECTURE.md +0 -381
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 { analyze_alignment } from '../validators/alignment-validator.js';
|
|
5
|
+
import { validate_content } from '../validators/content-validator.js';
|
|
6
|
+
import { analyze_trigger_phrase, analyze_user_phrasing, validate_description_content, } from '../validators/description-validator.js';
|
|
7
|
+
import { validate_assets, validate_directory, validate_path_formats, validate_scripts, } from '../validators/file-structure-validator.js';
|
|
8
|
+
import { extract_frontmatter, validate_frontmatter_structure, validate_hard_limits, validate_name_format, } from '../validators/frontmatter-validator.js';
|
|
9
|
+
import { validate_references } from '../validators/references-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,135 @@ 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, description_is_multiline } = 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
|
-
|
|
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
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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
|
+
// Warn if description spans multiple lines
|
|
123
|
+
if (description_is_multiline) {
|
|
124
|
+
this.warning(`Multi-line description detected. Claude Code cannot recognize skills with multi-line descriptions.\n` +
|
|
125
|
+
` → Run 'claude-skills-cli doctor ${this.skill_path}' to fix automatically`);
|
|
126
|
+
}
|
|
127
|
+
// Get directory name
|
|
128
|
+
const dir_name = this.skill_path.split('/').pop() || '';
|
|
129
|
+
// Validate name format
|
|
130
|
+
const name_validation = validate_name_format(name, dir_name);
|
|
131
|
+
this.structured_validation.name_format = name_validation;
|
|
132
|
+
name_validation.errors.forEach((err) => this.error(err));
|
|
133
|
+
// Validate hard limits
|
|
134
|
+
const hard_limits = validate_hard_limits(name, description);
|
|
135
|
+
this.structured_validation.hard_limits = hard_limits;
|
|
136
|
+
if (!hard_limits.name.valid && hard_limits.name.error) {
|
|
137
|
+
this.error(hard_limits.name.error);
|
|
138
|
+
}
|
|
139
|
+
if (!hard_limits.description.valid &&
|
|
140
|
+
hard_limits.description.error) {
|
|
141
|
+
this.error(hard_limits.description.error);
|
|
142
|
+
}
|
|
143
|
+
// Validate description content
|
|
144
|
+
const desc_validation = validate_description_content(description);
|
|
145
|
+
this.stats.description_length =
|
|
146
|
+
desc_validation.stats.description_length;
|
|
147
|
+
this.stats.description_tokens =
|
|
148
|
+
desc_validation.stats.description_tokens;
|
|
149
|
+
desc_validation.errors.forEach((err) => this.error(err.message));
|
|
150
|
+
desc_validation.warnings.forEach((warn) => this.warning(warn.message));
|
|
151
|
+
// Analyze trigger phrase
|
|
152
|
+
const trigger_analysis = analyze_trigger_phrase(description);
|
|
153
|
+
this.structured_validation.triggering.trigger_phrase =
|
|
154
|
+
trigger_analysis;
|
|
155
|
+
if (!trigger_analysis.has_explicit_trigger) {
|
|
156
|
+
this.warning(`Description missing explicit trigger phrase ('Use when...', 'Use for...', 'Use to...')\n` +
|
|
157
|
+
` → Help Claude know when to activate this skill`);
|
|
353
158
|
}
|
|
159
|
+
// Analyze user phrasing
|
|
160
|
+
const { analysis: phrasing_analysis, warnings: phrasing_warnings, } = analyze_user_phrasing(description);
|
|
161
|
+
this.structured_validation.triggering.user_phrasing =
|
|
162
|
+
phrasing_analysis;
|
|
163
|
+
phrasing_warnings.forEach((warn) => this.warning(warn.message));
|
|
164
|
+
// Analyze alignment
|
|
165
|
+
const alignment_result = analyze_alignment(description, body);
|
|
166
|
+
this.structured_validation.triggering.keywords =
|
|
167
|
+
alignment_result.keywords;
|
|
168
|
+
this.structured_validation.triggering.alignment =
|
|
169
|
+
alignment_result.alignment;
|
|
170
|
+
alignment_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
171
|
+
// Validate content (progressive disclosure)
|
|
172
|
+
const content_validation = validate_content(body);
|
|
173
|
+
this.stats.word_count = content_validation.stats.word_count;
|
|
174
|
+
this.stats.estimated_tokens =
|
|
175
|
+
content_validation.stats.estimated_tokens;
|
|
176
|
+
this.stats.line_count = content_validation.stats.line_count;
|
|
177
|
+
this.stats.code_blocks = content_validation.stats.code_blocks;
|
|
178
|
+
this.stats.sections = content_validation.stats.sections;
|
|
179
|
+
this.stats.long_paragraphs =
|
|
180
|
+
content_validation.stats.long_paragraphs;
|
|
181
|
+
content_validation.errors.forEach((err) => this.error(err.message));
|
|
182
|
+
content_validation.warnings.forEach((warn) => this.warning(warn.message));
|
|
354
183
|
return true;
|
|
355
184
|
}
|
|
356
185
|
validate_all() {
|
|
357
|
-
|
|
186
|
+
// Validate directory
|
|
187
|
+
const dir_result = validate_directory(this.skill_path);
|
|
188
|
+
if (!dir_result.valid) {
|
|
189
|
+
dir_result.errors.forEach((err) => this.error(err.message));
|
|
358
190
|
return {
|
|
359
191
|
errors: this.errors,
|
|
360
192
|
warnings: this.warnings,
|
|
361
193
|
is_valid: false,
|
|
362
194
|
stats: this.stats,
|
|
195
|
+
validation: this.structured_validation,
|
|
363
196
|
};
|
|
364
197
|
}
|
|
198
|
+
// Validate SKILL.md
|
|
365
199
|
this.validate_skill_md();
|
|
366
|
-
|
|
367
|
-
this.
|
|
368
|
-
this.
|
|
200
|
+
// Validate references
|
|
201
|
+
const refs_result = validate_references(this.skill_path);
|
|
202
|
+
refs_result.errors.forEach((err) => this.error(err.message));
|
|
203
|
+
refs_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
204
|
+
// Validate scripts
|
|
205
|
+
const scripts_result = validate_scripts(this.skill_path);
|
|
206
|
+
scripts_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
207
|
+
// Validate assets
|
|
208
|
+
const assets_result = validate_assets(this.skill_path);
|
|
209
|
+
assets_result.warnings.forEach((warn) => this.warning(warn.message));
|
|
210
|
+
// Populate progressive disclosure structured validation
|
|
211
|
+
this.structured_validation.progressive_disclosure = {
|
|
212
|
+
skill_md_size: {
|
|
213
|
+
lines: this.stats.line_count,
|
|
214
|
+
words: this.stats.word_count,
|
|
215
|
+
tokens: this.stats.estimated_tokens,
|
|
216
|
+
exceeds_line_limit: this.stats.line_count > 50,
|
|
217
|
+
exceeds_word_limit: this.stats.word_count > 1000,
|
|
218
|
+
},
|
|
219
|
+
references: refs_result.validation,
|
|
220
|
+
};
|
|
369
221
|
return {
|
|
370
222
|
errors: this.errors,
|
|
371
223
|
warnings: this.warnings,
|
|
372
224
|
is_valid: this.errors.length === 0,
|
|
373
225
|
stats: this.stats,
|
|
226
|
+
validation: this.structured_validation,
|
|
374
227
|
};
|
|
375
228
|
}
|
|
376
229
|
get_errors() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
|