(skillName: string, content: string, meta: SkillMeta, resourceDir?: string)
| 102 | return fs.existsSync(claudeDir); |
| 103 | }, |
| 104 | install(skillName: string, content: string, meta: SkillMeta, resourceDir?: string) { |
| 105 | cleanupLegacyPluginArtifacts(); |
| 106 | const skillDir = path.join(getClaudeSkillsDir(), skillName); |
| 107 | fs.mkdirSync(skillDir, { recursive: true }); |
| 108 | const frontmatter = `---\nname: ${meta.name}\ndescription: ${meta.description}\n---\n\n`; |
| 109 | fs.writeFileSync(path.join(skillDir, 'SKILL.md'), frontmatter + content, 'utf8'); |
| 110 | |
| 111 | if (resourceDir) { |
| 112 | for (const entry of fs.readdirSync(resourceDir, { withFileTypes: true })) { |
| 113 | if (entry.isDirectory()) { |
| 114 | copyDirSync(path.join(resourceDir, entry.name), path.join(skillDir, entry.name)); |
| 115 | } |
| 116 | } |
| 117 | } |
| 118 | }, |
| 119 | remove(skillName: string) { |
| 120 | const skillDir = path.join(getClaudeSkillsDir(), skillName); |
| 121 | if (fs.existsSync(skillDir)) { |
no test coverage detected