* Generate a single skill.
(skillConfig, wellKnownRoot)
| 993 | * Generate a single skill. |
| 994 | */ |
| 995 | function generateSkill(skillConfig, wellKnownRoot) { |
| 996 | const skillDir = path.join(wellKnownRoot, skillConfig.name); |
| 997 | |
| 998 | // Create skill directory |
| 999 | fs.mkdirSync(skillDir, {recursive: true}); |
| 1000 | |
| 1001 | if (skillConfig.kind === 'migration') { |
| 1002 | const skillMdContent = generateMigrationSkillMd(skillConfig); |
| 1003 | fs.writeFileSync(path.join(skillDir, 'SKILL.md'), skillMdContent); |
| 1004 | console.log(`Generated ${path.relative(REPO_ROOT, path.join(skillDir, 'SKILL.md'))}`); |
| 1005 | |
| 1006 | writeMigrationReferences(skillDir, skillConfig.sourceDir); |
| 1007 | console.log( |
| 1008 | `Copied migration references to ${path.relative(REPO_ROOT, path.join(skillDir, 'references'))}` |
| 1009 | ); |
| 1010 | |
| 1011 | return skillDir; |
| 1012 | } |
| 1013 | |
| 1014 | if (skillConfig.kind === 'audit') { |
| 1015 | fs.writeFileSync(path.join(skillDir, 'SKILL.md'), generateAuditSkillMd(skillConfig)); |
| 1016 | console.log(`Generated ${path.relative(REPO_ROOT, path.join(skillDir, 'SKILL.md'))}`); |
| 1017 | |
| 1018 | writeAuditReferences(skillDir); |
| 1019 | console.log( |
| 1020 | `Copied audit references to ${path.relative(REPO_ROOT, path.join(skillDir, 'references'))}` |
| 1021 | ); |
| 1022 | |
| 1023 | return skillDir; |
| 1024 | } |
| 1025 | |
| 1026 | const isS2 = skillConfig.name === 'react-spectrum-s2'; |
| 1027 | |
| 1028 | // Parse documentation entries |
| 1029 | const llmsTxtPath = path.join(MARKDOWN_DOCS_DIST, skillConfig.sourceDir, 'llms.txt'); |
| 1030 | if (!fs.existsSync(llmsTxtPath)) { |
| 1031 | console.error(`llms.txt not found at ${llmsTxtPath}`); |
| 1032 | return; |
| 1033 | } |
| 1034 | |
| 1035 | const entries = parseLlmsTxt(llmsTxtPath); |
| 1036 | const categories = categorizeEntries(entries, skillConfig.sourceDir); |
| 1037 | |
| 1038 | // Generate SKILL.md |
| 1039 | const skillMdContent = generateDocsSkillMd(skillConfig, categories, isS2); |
| 1040 | fs.writeFileSync(path.join(skillDir, 'SKILL.md'), skillMdContent); |
| 1041 | console.log(`Generated ${path.relative(REPO_ROOT, path.join(skillDir, 'SKILL.md'))}`); |
| 1042 | |
| 1043 | // Copy documentation to references |
| 1044 | copyDocsDocumentation(skillConfig, categories, skillDir); |
| 1045 | console.log( |
| 1046 | `Copied documentation to ${path.relative(REPO_ROOT, path.join(skillDir, 'references'))}` |
| 1047 | ); |
| 1048 | copyAdditionalReferenceLibraries(skillConfig, skillDir); |
| 1049 | |
| 1050 | return skillDir; |
| 1051 | } |
| 1052 |
no test coverage detected