@pennyfarthing/shared 7.4.0 → 7.5.0
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/package.json +1 -1
- package/dist/generate-skill-docs.d.ts +0 -35
- package/dist/generate-skill-docs.d.ts.map +0 -1
- package/dist/generate-skill-docs.js +0 -442
- package/dist/generate-skill-docs.js.map +0 -1
- package/dist/generate-skill-docs.test.d.ts +0 -13
- package/dist/generate-skill-docs.test.d.ts.map +0 -1
- package/dist/generate-skill-docs.test.js +0 -519
- package/dist/generate-skill-docs.test.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +0 -1
- package/dist/portrait-resolver.d.ts +0 -32
- package/dist/portrait-resolver.d.ts.map +0 -1
- package/dist/portrait-resolver.js +0 -147
- package/dist/portrait-resolver.js.map +0 -1
- package/dist/portrait-resolver.test.d.ts +0 -2
- package/dist/portrait-resolver.test.d.ts.map +0 -1
- package/dist/portrait-resolver.test.js +0 -156
- package/dist/portrait-resolver.test.js.map +0 -1
- package/dist/skill-search.d.ts +0 -36
- package/dist/skill-search.d.ts.map +0 -1
- package/dist/skill-search.js +0 -300
- package/dist/skill-search.js.map +0 -1
- package/dist/skill-search.sh +0 -41
- package/dist/skill-search.test.d.ts +0 -16
- package/dist/skill-search.test.d.ts.map +0 -1
- package/dist/skill-search.test.js +0 -177
- package/dist/skill-search.test.js.map +0 -1
- package/dist/skill-suggest.d.ts +0 -76
- package/dist/skill-suggest.d.ts.map +0 -1
- package/dist/skill-suggest.js +0 -256
- package/dist/skill-suggest.js.map +0 -1
- package/dist/skill-suggest.test.d.ts +0 -12
- package/dist/skill-suggest.test.d.ts.map +0 -1
- package/dist/skill-suggest.test.js +0 -257
- package/dist/skill-suggest.test.js.map +0 -1
- package/dist/theme-loader.d.ts +0 -35
- package/dist/theme-loader.d.ts.map +0 -1
- package/dist/theme-loader.js +0 -170
- package/dist/theme-loader.js.map +0 -1
- package/dist/theme-loader.test.d.ts +0 -2
- package/dist/theme-loader.test.d.ts.map +0 -1
- package/dist/theme-loader.test.js +0 -72
- package/dist/theme-loader.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Documentation Generator - Story 9-4
|
|
3
|
-
*
|
|
4
|
-
* Generates docs/SKILLS.md from pennyfarthing-dist/skills/skill-registry.yaml.
|
|
5
|
-
* Organizes skills by category with table of contents and all metadata.
|
|
6
|
-
*/
|
|
7
|
-
export interface GeneratorOptions {
|
|
8
|
-
/** Path to skill-registry.yaml (defaults to pennyfarthing-dist/skills/skill-registry.yaml) */
|
|
9
|
-
registryPath?: string;
|
|
10
|
-
/** Path to write output (optional - if provided with writeFile=true, writes to disk) */
|
|
11
|
-
outputPath?: string;
|
|
12
|
-
/** Whether to write the file to disk */
|
|
13
|
-
writeFile?: boolean;
|
|
14
|
-
/** Strict mode - error if required fields missing */
|
|
15
|
-
strict?: boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface GeneratorResult {
|
|
18
|
-
/** Whether generation succeeded */
|
|
19
|
-
success: boolean;
|
|
20
|
-
/** Generated markdown content */
|
|
21
|
-
content: string;
|
|
22
|
-
/** Number of skills processed */
|
|
23
|
-
skillCount: number;
|
|
24
|
-
/** Path where file was written (if writeFile=true) */
|
|
25
|
-
writtenTo?: string;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Generate skill documentation from the skill registry.
|
|
29
|
-
*
|
|
30
|
-
* @param options - Generator options
|
|
31
|
-
* @returns Promise resolving to generator result
|
|
32
|
-
* @throws Error if registry not found or invalid
|
|
33
|
-
*/
|
|
34
|
-
export declare function generateSkillDocs(options?: GeneratorOptions): Promise<GeneratorResult>;
|
|
35
|
-
//# sourceMappingURL=generate-skill-docs.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-skill-docs.d.ts","sourceRoot":"","sources":["../src/generate-skill-docs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgWD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6DhG"}
|
|
@@ -1,442 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Documentation Generator - Story 9-4
|
|
3
|
-
*
|
|
4
|
-
* Generates docs/SKILLS.md from pennyfarthing-dist/skills/skill-registry.yaml.
|
|
5
|
-
* Organizes skills by category with table of contents and all metadata.
|
|
6
|
-
*/
|
|
7
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
8
|
-
import { join, dirname } from 'node:path';
|
|
9
|
-
import { resolvePennyfarthingDist } from './portrait-resolver.js';
|
|
10
|
-
// ----- YAML Parser -----
|
|
11
|
-
/**
|
|
12
|
-
* Parse inline YAML array like [tag1, tag2, tag3]
|
|
13
|
-
*/
|
|
14
|
-
function parseInlineArray(value) {
|
|
15
|
-
const match = value.match(/^\[(.*)\]$/);
|
|
16
|
-
if (!match)
|
|
17
|
-
return [];
|
|
18
|
-
return match[1]
|
|
19
|
-
.split(',')
|
|
20
|
-
.map(item => item.trim().replace(/^["']|["']$/g, ''))
|
|
21
|
-
.filter(Boolean);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Simple YAML parser for skill registry.
|
|
25
|
-
* Handles the specific nested structure we need without external dependencies.
|
|
26
|
-
*/
|
|
27
|
-
function parseRegistryYaml(content) {
|
|
28
|
-
// Basic YAML validation - check for obvious syntax errors
|
|
29
|
-
const lines = content.split('\n');
|
|
30
|
-
for (let i = 0; i < lines.length; i++) {
|
|
31
|
-
const line = lines[i];
|
|
32
|
-
const trimmed = line.trim();
|
|
33
|
-
// Skip empty lines and comments
|
|
34
|
-
if (!trimmed || trimmed.startsWith('#'))
|
|
35
|
-
continue;
|
|
36
|
-
// Check for unclosed brackets
|
|
37
|
-
if ((trimmed.includes('[') && !trimmed.includes(']')) ||
|
|
38
|
-
(trimmed.includes('{') && !trimmed.includes('}'))) {
|
|
39
|
-
throw new Error(`Invalid YAML: unclosed bracket at line ${i + 1}`);
|
|
40
|
-
}
|
|
41
|
-
// Check for invalid key format (key without colon in non-array context)
|
|
42
|
-
if (!trimmed.startsWith('-') && trimmed.includes(':')) {
|
|
43
|
-
const colonPos = trimmed.indexOf(':');
|
|
44
|
-
const beforeColon = trimmed.substring(0, colonPos);
|
|
45
|
-
// Check if the part before colon looks like a valid key
|
|
46
|
-
if (beforeColon.includes('[') || beforeColon.includes(']') ||
|
|
47
|
-
beforeColon.includes('{') || beforeColon.includes('}')) {
|
|
48
|
-
throw new Error(`Invalid YAML: malformed key at line ${i + 1}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
const result = { version: '', skills: {} };
|
|
53
|
-
let currentSkillKey = null;
|
|
54
|
-
let currentArrayField = null;
|
|
55
|
-
let insideExamples = false;
|
|
56
|
-
for (const line of lines) {
|
|
57
|
-
const trimmedEnd = line.trimEnd();
|
|
58
|
-
const trimmed = trimmedEnd.trim();
|
|
59
|
-
// Skip empty lines and comments
|
|
60
|
-
if (!trimmed || trimmed.startsWith('#'))
|
|
61
|
-
continue;
|
|
62
|
-
const indent = line.length - line.trimStart().length;
|
|
63
|
-
const colonIndex = trimmed.indexOf(':');
|
|
64
|
-
const key = colonIndex >= 0 ? trimmed.substring(0, colonIndex).trim() : trimmed;
|
|
65
|
-
const value = colonIndex >= 0 ? trimmed.substring(colonIndex + 1).trim() : '';
|
|
66
|
-
// Top-level version
|
|
67
|
-
if (indent === 0 && key === 'version') {
|
|
68
|
-
result.version = value.replace(/^["']|["']$/g, '');
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
// Top-level skills key
|
|
72
|
-
if (indent === 0 && key === 'skills') {
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
// Skill key (indent 2)
|
|
76
|
-
if (indent === 2 && !trimmed.startsWith('-')) {
|
|
77
|
-
currentSkillKey = key;
|
|
78
|
-
result.skills[currentSkillKey] = {
|
|
79
|
-
name: '',
|
|
80
|
-
description: '',
|
|
81
|
-
category: '',
|
|
82
|
-
tags: [],
|
|
83
|
-
version: '',
|
|
84
|
-
prerequisites: [],
|
|
85
|
-
examples: [],
|
|
86
|
-
anti_patterns: [],
|
|
87
|
-
related_skills: [],
|
|
88
|
-
keywords: []
|
|
89
|
-
};
|
|
90
|
-
currentArrayField = null;
|
|
91
|
-
insideExamples = false;
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
94
|
-
// Skill fields (indent 4)
|
|
95
|
-
if (indent === 4 && currentSkillKey) {
|
|
96
|
-
insideExamples = false;
|
|
97
|
-
currentArrayField = null;
|
|
98
|
-
if (key === 'name') {
|
|
99
|
-
result.skills[currentSkillKey].name = value.replace(/^["']|["']$/g, '');
|
|
100
|
-
}
|
|
101
|
-
else if (key === 'description') {
|
|
102
|
-
result.skills[currentSkillKey].description = value.replace(/^["']|["']$/g, '');
|
|
103
|
-
}
|
|
104
|
-
else if (key === 'category') {
|
|
105
|
-
result.skills[currentSkillKey].category = value.replace(/^["']|["']$/g, '');
|
|
106
|
-
}
|
|
107
|
-
else if (key === 'version') {
|
|
108
|
-
result.skills[currentSkillKey].version = value.replace(/^["']|["']$/g, '');
|
|
109
|
-
}
|
|
110
|
-
else if (key === 'tags') {
|
|
111
|
-
if (value.startsWith('[')) {
|
|
112
|
-
result.skills[currentSkillKey].tags = parseInlineArray(value);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
currentArrayField = 'tags';
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
else if (key === 'keywords') {
|
|
119
|
-
if (value.startsWith('[')) {
|
|
120
|
-
result.skills[currentSkillKey].keywords = parseInlineArray(value);
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
currentArrayField = 'keywords';
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
else if (key === 'prerequisites') {
|
|
127
|
-
if (value.startsWith('[')) {
|
|
128
|
-
result.skills[currentSkillKey].prerequisites = parseInlineArray(value);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
currentArrayField = 'prerequisites';
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
else if (key === 'related_skills') {
|
|
135
|
-
if (value.startsWith('[')) {
|
|
136
|
-
result.skills[currentSkillKey].related_skills = parseInlineArray(value);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
currentArrayField = 'related_skills';
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else if (key === 'anti_patterns') {
|
|
143
|
-
currentArrayField = 'anti_patterns';
|
|
144
|
-
}
|
|
145
|
-
else if (key === 'examples') {
|
|
146
|
-
insideExamples = true;
|
|
147
|
-
currentArrayField = null;
|
|
148
|
-
}
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
// Array items (indent 6 starting with -)
|
|
152
|
-
if (indent === 6 && currentSkillKey && trimmed.startsWith('-')) {
|
|
153
|
-
const afterDash = trimmed.substring(1).trim();
|
|
154
|
-
const itemColonIndex = afterDash.indexOf(':');
|
|
155
|
-
const itemKey = itemColonIndex >= 0 ? afterDash.substring(0, itemColonIndex).trim() : '';
|
|
156
|
-
const itemValue = itemColonIndex >= 0 ? afterDash.substring(itemColonIndex + 1).trim().replace(/^["']|["']$/g, '') : afterDash.replace(/^["']|["']$/g, '');
|
|
157
|
-
if (insideExamples) {
|
|
158
|
-
// Start of a new example object - might have inline key:value like "- context: Running project tests"
|
|
159
|
-
const newExample = { context: '', invocation: '' };
|
|
160
|
-
if (itemKey === 'context') {
|
|
161
|
-
newExample.context = itemValue;
|
|
162
|
-
}
|
|
163
|
-
else if (itemKey === 'invocation') {
|
|
164
|
-
newExample.invocation = itemValue;
|
|
165
|
-
}
|
|
166
|
-
result.skills[currentSkillKey].examples.push(newExample);
|
|
167
|
-
}
|
|
168
|
-
else if (currentArrayField && currentArrayField in result.skills[currentSkillKey]) {
|
|
169
|
-
const arr = result.skills[currentSkillKey][currentArrayField];
|
|
170
|
-
if (Array.isArray(arr) && typeof arr[0] !== 'object') {
|
|
171
|
-
arr.push(afterDash.replace(/^["']|["']$/g, ''));
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
continue;
|
|
175
|
-
}
|
|
176
|
-
// Example sub-fields (indent 8) - continuation of example started at indent 6
|
|
177
|
-
if (indent === 8 && currentSkillKey && insideExamples) {
|
|
178
|
-
const examples = result.skills[currentSkillKey].examples;
|
|
179
|
-
if (examples.length > 0) {
|
|
180
|
-
const lastExample = examples[examples.length - 1];
|
|
181
|
-
if (key === 'context') {
|
|
182
|
-
lastExample.context = value.replace(/^["']|["']$/g, '');
|
|
183
|
-
}
|
|
184
|
-
else if (key === 'invocation') {
|
|
185
|
-
lastExample.invocation = value.replace(/^["']|["']$/g, '');
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return result;
|
|
192
|
-
}
|
|
193
|
-
// ----- Markdown Generation -----
|
|
194
|
-
/**
|
|
195
|
-
* Convert category slug to display name
|
|
196
|
-
*/
|
|
197
|
-
function categoryDisplayName(category) {
|
|
198
|
-
const map = {
|
|
199
|
-
'ai-llm': 'AI/LLM',
|
|
200
|
-
'development': 'Development',
|
|
201
|
-
'documentation': 'Documentation',
|
|
202
|
-
'tools': 'Tools',
|
|
203
|
-
'benchmarking': 'Benchmarking',
|
|
204
|
-
'project-management': 'Project Management',
|
|
205
|
-
'theming': 'Theming'
|
|
206
|
-
};
|
|
207
|
-
return map[category] || category.split('-').map(w => w[0].toUpperCase() + w.slice(1)).join(' ');
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Convert text to GitHub-compatible anchor
|
|
211
|
-
*/
|
|
212
|
-
function toAnchor(text) {
|
|
213
|
-
return text.toLowerCase().replace(/[^a-z0-9 -]/g, '').replace(/\s+/g, '-');
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Generate markdown for a single skill
|
|
217
|
-
*/
|
|
218
|
-
function generateSkillMarkdown(skill) {
|
|
219
|
-
const lines = [];
|
|
220
|
-
lines.push(`### ${skill.name}`);
|
|
221
|
-
lines.push('');
|
|
222
|
-
lines.push(skill.description);
|
|
223
|
-
lines.push('');
|
|
224
|
-
// Tags
|
|
225
|
-
if (skill.tags.length > 0) {
|
|
226
|
-
lines.push(`**Tags:** ${skill.tags.join(', ')}`);
|
|
227
|
-
lines.push('');
|
|
228
|
-
}
|
|
229
|
-
// Keywords
|
|
230
|
-
if (skill.keywords.length > 0) {
|
|
231
|
-
lines.push(`**Keywords:** ${skill.keywords.join(', ')}`);
|
|
232
|
-
lines.push('');
|
|
233
|
-
}
|
|
234
|
-
// Examples
|
|
235
|
-
if (skill.examples.length > 0) {
|
|
236
|
-
lines.push('**Examples:**');
|
|
237
|
-
for (const ex of skill.examples) {
|
|
238
|
-
lines.push(`- ${ex.context}: \`${ex.invocation}\``);
|
|
239
|
-
}
|
|
240
|
-
lines.push('');
|
|
241
|
-
}
|
|
242
|
-
// Anti-patterns
|
|
243
|
-
if (skill.anti_patterns.length > 0) {
|
|
244
|
-
lines.push('**Anti-patterns:**');
|
|
245
|
-
for (const ap of skill.anti_patterns) {
|
|
246
|
-
lines.push(`- ${ap}`);
|
|
247
|
-
}
|
|
248
|
-
lines.push('');
|
|
249
|
-
}
|
|
250
|
-
// Related skills
|
|
251
|
-
if (skill.related_skills.length > 0) {
|
|
252
|
-
lines.push(`**Related:** ${skill.related_skills.map(s => `[${s}](#${toAnchor(s)})`).join(', ')}`);
|
|
253
|
-
lines.push('');
|
|
254
|
-
}
|
|
255
|
-
return lines.join('\n');
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Generate full markdown documentation from registry
|
|
259
|
-
*/
|
|
260
|
-
function generateMarkdown(registry) {
|
|
261
|
-
const lines = [];
|
|
262
|
-
// Header
|
|
263
|
-
lines.push('# Pennyfarthing Skills Reference');
|
|
264
|
-
lines.push('');
|
|
265
|
-
lines.push('This document is auto-generated from `skill-registry.yaml`. Do not edit manually.');
|
|
266
|
-
lines.push('');
|
|
267
|
-
// Group skills by category
|
|
268
|
-
const byCategory = {};
|
|
269
|
-
for (const skill of Object.values(registry.skills)) {
|
|
270
|
-
if (!byCategory[skill.category]) {
|
|
271
|
-
byCategory[skill.category] = [];
|
|
272
|
-
}
|
|
273
|
-
byCategory[skill.category].push(skill);
|
|
274
|
-
}
|
|
275
|
-
// Sort categories alphabetically (AI/LLM first as special case)
|
|
276
|
-
const sortedCategories = Object.keys(byCategory).sort((a, b) => {
|
|
277
|
-
if (a === 'ai-llm')
|
|
278
|
-
return -1;
|
|
279
|
-
if (b === 'ai-llm')
|
|
280
|
-
return 1;
|
|
281
|
-
return a.localeCompare(b);
|
|
282
|
-
});
|
|
283
|
-
// Sort skills within each category alphabetically
|
|
284
|
-
for (const cat of sortedCategories) {
|
|
285
|
-
byCategory[cat].sort((a, b) => a.name.localeCompare(b.name));
|
|
286
|
-
}
|
|
287
|
-
// Table of Contents
|
|
288
|
-
lines.push('## Table of Contents');
|
|
289
|
-
lines.push('');
|
|
290
|
-
for (const cat of sortedCategories) {
|
|
291
|
-
const displayName = categoryDisplayName(cat);
|
|
292
|
-
lines.push(`- [${displayName}](#${toAnchor(displayName)})`);
|
|
293
|
-
for (const skill of byCategory[cat]) {
|
|
294
|
-
lines.push(` - [${skill.name}](#${toAnchor(skill.name)})`);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
lines.push('');
|
|
298
|
-
// Categories and skills
|
|
299
|
-
for (const cat of sortedCategories) {
|
|
300
|
-
const displayName = categoryDisplayName(cat);
|
|
301
|
-
lines.push(`## ${displayName}`);
|
|
302
|
-
lines.push('');
|
|
303
|
-
for (const skill of byCategory[cat]) {
|
|
304
|
-
lines.push(generateSkillMarkdown(skill));
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
// Footer
|
|
308
|
-
lines.push('---');
|
|
309
|
-
lines.push('');
|
|
310
|
-
lines.push('*Generated by `generate-skill-docs`*');
|
|
311
|
-
lines.push('');
|
|
312
|
-
return lines.join('\n');
|
|
313
|
-
}
|
|
314
|
-
// ----- Main Export -----
|
|
315
|
-
/**
|
|
316
|
-
* Generate skill documentation from the skill registry.
|
|
317
|
-
*
|
|
318
|
-
* @param options - Generator options
|
|
319
|
-
* @returns Promise resolving to generator result
|
|
320
|
-
* @throws Error if registry not found or invalid
|
|
321
|
-
*/
|
|
322
|
-
export async function generateSkillDocs(options = {}) {
|
|
323
|
-
// Resolve registry path
|
|
324
|
-
let registryPath = options.registryPath;
|
|
325
|
-
if (!registryPath) {
|
|
326
|
-
const distPath = resolvePennyfarthingDist();
|
|
327
|
-
if (!distPath) {
|
|
328
|
-
throw new Error('Registry not found: Cannot resolve pennyfarthing-dist directory');
|
|
329
|
-
}
|
|
330
|
-
registryPath = join(distPath, 'skills', 'skill-registry.yaml');
|
|
331
|
-
}
|
|
332
|
-
// Validate registry exists
|
|
333
|
-
if (!existsSync(registryPath)) {
|
|
334
|
-
throw new Error(`Registry not found: ${registryPath}`);
|
|
335
|
-
}
|
|
336
|
-
// Parse registry
|
|
337
|
-
let content;
|
|
338
|
-
try {
|
|
339
|
-
content = readFileSync(registryPath, 'utf-8');
|
|
340
|
-
}
|
|
341
|
-
catch {
|
|
342
|
-
throw new Error(`Cannot read registry: ${registryPath}`);
|
|
343
|
-
}
|
|
344
|
-
let registry;
|
|
345
|
-
try {
|
|
346
|
-
registry = parseRegistryYaml(content);
|
|
347
|
-
}
|
|
348
|
-
catch (err) {
|
|
349
|
-
throw new Error(`Invalid YAML in registry: ${err.message}`);
|
|
350
|
-
}
|
|
351
|
-
// Strict mode validation
|
|
352
|
-
if (options.strict) {
|
|
353
|
-
for (const [key, skill] of Object.entries(registry.skills)) {
|
|
354
|
-
if (!skill.description) {
|
|
355
|
-
throw new Error(`Missing required field 'description' for skill: ${key}`);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
// Generate markdown
|
|
360
|
-
const markdown = generateMarkdown(registry);
|
|
361
|
-
const skillCount = Object.keys(registry.skills).length;
|
|
362
|
-
// Write file if requested
|
|
363
|
-
let writtenTo;
|
|
364
|
-
if (options.writeFile && options.outputPath) {
|
|
365
|
-
const dir = dirname(options.outputPath);
|
|
366
|
-
if (!existsSync(dir)) {
|
|
367
|
-
mkdirSync(dir, { recursive: true });
|
|
368
|
-
}
|
|
369
|
-
writeFileSync(options.outputPath, markdown, 'utf-8');
|
|
370
|
-
writtenTo = options.outputPath;
|
|
371
|
-
}
|
|
372
|
-
return {
|
|
373
|
-
success: true,
|
|
374
|
-
content: markdown,
|
|
375
|
-
skillCount,
|
|
376
|
-
writtenTo
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
// ----- CLI Entry Point -----
|
|
380
|
-
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
381
|
-
const args = process.argv.slice(2);
|
|
382
|
-
let registryPath;
|
|
383
|
-
let outputPath;
|
|
384
|
-
let dryRun = false;
|
|
385
|
-
// Parse command-line arguments
|
|
386
|
-
for (let i = 0; i < args.length; i++) {
|
|
387
|
-
const arg = args[i];
|
|
388
|
-
if (arg === '--help' || arg === '-h') {
|
|
389
|
-
console.log(`Usage: generate-skill-docs [options]
|
|
390
|
-
|
|
391
|
-
Options:
|
|
392
|
-
--registry <path> Path to skill-registry.yaml
|
|
393
|
-
--output <path> Path to write output (default: docs/SKILLS.md)
|
|
394
|
-
--dry-run Print output instead of writing file
|
|
395
|
-
--help, -h Show this help
|
|
396
|
-
|
|
397
|
-
Examples:
|
|
398
|
-
generate-skill-docs
|
|
399
|
-
generate-skill-docs --dry-run
|
|
400
|
-
generate-skill-docs --registry ./custom-registry.yaml --output ./SKILLS.md
|
|
401
|
-
`);
|
|
402
|
-
process.exit(0);
|
|
403
|
-
}
|
|
404
|
-
else if (arg === '--dry-run') {
|
|
405
|
-
dryRun = true;
|
|
406
|
-
}
|
|
407
|
-
else if (arg === '--registry' && args[i + 1]) {
|
|
408
|
-
registryPath = args[++i];
|
|
409
|
-
}
|
|
410
|
-
else if (arg === '--output' && args[i + 1]) {
|
|
411
|
-
outputPath = args[++i];
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
// Default output path
|
|
415
|
-
if (!outputPath && !dryRun) {
|
|
416
|
-
const distPath = resolvePennyfarthingDist();
|
|
417
|
-
if (distPath) {
|
|
418
|
-
outputPath = join(dirname(dirname(distPath)), 'docs', 'SKILLS.md');
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
generateSkillDocs({
|
|
422
|
-
registryPath,
|
|
423
|
-
outputPath,
|
|
424
|
-
writeFile: !dryRun && !!outputPath
|
|
425
|
-
})
|
|
426
|
-
.then(result => {
|
|
427
|
-
if (dryRun) {
|
|
428
|
-
console.log(result.content);
|
|
429
|
-
}
|
|
430
|
-
else {
|
|
431
|
-
console.log(`Generated documentation for ${result.skillCount} skills`);
|
|
432
|
-
if (result.writtenTo) {
|
|
433
|
-
console.log(`Written to: ${result.writtenTo}`);
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
})
|
|
437
|
-
.catch(err => {
|
|
438
|
-
console.error(`Error: ${err.message}`);
|
|
439
|
-
process.exit(1);
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
//# sourceMappingURL=generate-skill-docs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-skill-docs.js","sourceRoot":"","sources":["../src/generate-skill-docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for Story 9-4: Skill Documentation Generator
|
|
3
|
-
*
|
|
4
|
-
* These tests verify:
|
|
5
|
-
* - AC1: docs/SKILLS.md auto-generated from skill-registry.yaml
|
|
6
|
-
* - AC2: Generated docs include all skill metadata
|
|
7
|
-
* - AC3: Skills organized by category with table of contents
|
|
8
|
-
* - AC4: Build process triggers doc generation
|
|
9
|
-
*
|
|
10
|
-
* Run with: npm test -- packages/shared/src/generate-skill-docs.test.ts
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=generate-skill-docs.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-skill-docs.test.d.ts","sourceRoot":"","sources":["../src/generate-skill-docs.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|