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.
Files changed (42) hide show
  1. package/README.md +49 -9
  2. package/dist/commands/doctor.js +128 -0
  3. package/dist/commands/doctor.js.map +1 -0
  4. package/dist/commands/init.js +5 -3
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/install.js +1 -1
  7. package/dist/commands/install.js.map +1 -1
  8. package/dist/commands/stats.js +1 -1
  9. package/dist/commands/stats.js.map +1 -1
  10. package/dist/commands/validate.js +24 -3
  11. package/dist/commands/validate.js.map +1 -1
  12. package/dist/commands/watch.js +82 -0
  13. package/dist/commands/watch.js.map +1 -0
  14. package/dist/core/templates.js +18 -0
  15. package/dist/core/templates.js.map +1 -1
  16. package/dist/core/validator.js +174 -321
  17. package/dist/core/validator.js.map +1 -1
  18. package/dist/index.js +38 -12
  19. package/dist/index.js.map +1 -1
  20. package/dist/skills/skill-creator/SKILL.md +28 -112
  21. package/dist/skills/skill-creator/references/cli-reference.md +152 -38
  22. package/dist/skills/skill-creator/references/development-process.md +208 -0
  23. package/dist/skills/skill-creator/references/skill-examples.md +1 -1
  24. package/dist/validators/alignment-validator.js +54 -0
  25. package/dist/validators/alignment-validator.js.map +1 -0
  26. package/dist/validators/content-validator.js +144 -0
  27. package/dist/validators/content-validator.js.map +1 -0
  28. package/dist/validators/description-validator.js +136 -0
  29. package/dist/validators/description-validator.js.map +1 -0
  30. package/dist/validators/file-structure-validator.js +125 -0
  31. package/dist/validators/file-structure-validator.js.map +1 -0
  32. package/dist/validators/frontmatter-validator.js +165 -0
  33. package/dist/validators/frontmatter-validator.js.map +1 -0
  34. package/dist/validators/references-validator.js +125 -0
  35. package/dist/validators/references-validator.js.map +1 -0
  36. package/dist/validators/text-analysis.js +71 -0
  37. package/dist/validators/text-analysis.js.map +1 -0
  38. package/docs/prompt-that-started-it-all.md +19 -0
  39. package/package.json +3 -3
  40. package/docs/SKILL-DEVELOPMENT.md +0 -460
  41. package/docs/SKILL-EXAMPLES.md +0 -528
  42. package/docs/SKILLS-ARCHITECTURE.md +0 -381
@@ -1,5 +1,12 @@
1
- import { existsSync, readdirSync, readFileSync, statSync, } from 'node:fs';
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
- // Progressive disclosure limits (from Anthropic guidelines)
18
- MAX_WORDS = 5000; // Hard limit
19
- RECOMMENDED_WORDS = 1000; // Sweet spot
20
- IDEAL_WORDS = 500; // Minimal but effective
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
- // Check for YAML frontmatter
208
- if (!content.startsWith('---\n')) {
209
- this.error('SKILL.md must start with YAML frontmatter (---)');
210
- return false;
211
- }
212
- // Extract frontmatter
213
- const parts = content.split('---\n');
214
- if (parts.length < 3) {
215
- this.error('SKILL.md has malformed YAML frontmatter');
216
- return false;
217
- }
218
- const frontmatter = parts[1];
219
- const body = parts.slice(2).join('---\n');
220
- // Validate required fields
221
- if (!frontmatter.includes('name:')) {
222
- this.error("SKILL.md frontmatter missing 'name' field");
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
- if (!frontmatter.includes('description:')) {
226
- this.error("SKILL.md frontmatter missing 'description' field");
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
- // Extract name
230
- const name_match = frontmatter.match(/name:\s*(.+)/);
231
- if (name_match) {
232
- const name = name_match[1].trim();
233
- // Validate name format
234
- if (!/^[a-z0-9-]+$/.test(name)) {
235
- this.error(`Skill name must be lowercase kebab-case: '${name}'`);
236
- }
237
- // Check name matches directory
238
- const dir_name = this.skill_path.split('/').pop() || '';
239
- if (name !== dir_name) {
240
- this.warning(`Skill name '${name}' doesn't match directory name '${dir_name}'`);
241
- }
242
- // Check name length
243
- if (name.length > 64) {
244
- this.error(`Skill name too long (max 64 chars): ${name.length}`);
245
- }
246
- }
247
- // Extract description
248
- const desc_match = frontmatter.match(/description:\s*(.+?)(?=\n[a-z]+:|$)/s);
249
- if (desc_match) {
250
- const description = desc_match[1].trim();
251
- // Hard limit check (Anthropic requirement)
252
- if (description.length > 1024) {
253
- this.error(`Description too long (max 1024 chars per Anthropic): ${description.length}`);
254
- }
255
- // Short description check
256
- if (description.length < 20) {
257
- this.warning('Description is very short (consider adding more detail)');
258
- }
259
- // Comprehensive Level 1 validation
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
+ // 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
- if (!this.validate_directory()) {
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
- this.validate_references();
367
- this.validate_scripts();
368
- this.validate_assets();
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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"}