diff --git a/plugin.json b/plugin.json index bf6e8ec..ed44da6 100644 --- a/plugin.json +++ b/plugin.json @@ -22,5 +22,15 @@ "copilot" ], "category": "Productivity", - "skills": "skills/" + "skills": [ + "./skills/bug-investigator", + "./skills/build-executor", + "./skills/code-reviewer", + "./skills/contract-builder", + "./skills/need-explorer", + "./skills/release-archivist", + "./skills/spec-merger", + "./skills/spec-writer", + "./skills/workflow-start" + ] } diff --git a/tests/lib/codebuddy-manifest.test.mjs b/tests/lib/codebuddy-manifest.test.mjs new file mode 100644 index 0000000..fd06aa6 --- /dev/null +++ b/tests/lib/codebuddy-manifest.test.mjs @@ -0,0 +1,30 @@ +// tests/lib/codebuddy-manifest.test.mjs +// Root marketplace manifests must enumerate skills for CodeBuddy discovery. +import { describe, it } from 'node:test'; +import assert from 'node:assert/strict'; +import { existsSync, readFileSync } from 'node:fs'; +import { join } from 'node:path'; + +const ROOT = process.cwd(); +const EXPECTED_SKILLS = [ + 'bug-investigator', + 'build-executor', + 'code-reviewer', + 'contract-builder', + 'need-explorer', + 'release-archivist', + 'spec-merger', + 'spec-writer', + 'workflow-start', +]; + +describe('CodeBuddy marketplace manifest', () => { + it('enumerates every skill as a discoverable plugin path', () => { + const manifest = JSON.parse(readFileSync(join(ROOT, 'plugin.json'), 'utf8')); + + assert.deepEqual(manifest.skills, EXPECTED_SKILLS.map(name => `./skills/${name}`)); + for (const skillPath of manifest.skills) { + assert.ok(existsSync(join(ROOT, skillPath, 'SKILL.md')), `${skillPath} must contain SKILL.md`); + } + }); +});