diff --git a/test/test-installation-components.js b/test/test-installation-components.js index 38da1eba4..f849ceaf6 100644 --- a/test/test-installation-components.js +++ b/test/test-installation-components.js @@ -1040,27 +1040,34 @@ async function runTests() { console.log(''); // ============================================================ - // Suite 22: KiloCoder Suspended + // Suite 22: KiloCoder Native Skills // ============================================================ - console.log(`${colors.yellow}Test Suite 22: KiloCoder Suspended${colors.reset}\n`); + console.log(`${colors.yellow}Test Suite 22: KiloCoder Native Skills${colors.reset}\n`); try { clearCache(); const platformCodes22 = await loadPlatformCodes(); const kiloConfig22 = platformCodes22.platforms.kilo; - assert(typeof kiloConfig22?.suspended === 'string', 'KiloCoder has a suspended message in platform config'); + assert(!kiloConfig22?.suspended, 'KiloCoder is not suspended'); - assert(kiloConfig22?.installer?.target_dir === '.kilocode/skills', 'KiloCoder retains target_dir config for future use'); + assert(kiloConfig22?.installer?.target_dir === '.kilocode/skills', 'KiloCoder target_dir uses native skills path'); + + assert( + Array.isArray(kiloConfig22?.installer?.legacy_targets) && kiloConfig22.installer.legacy_targets.includes('.kilocode/workflows'), + 'KiloCoder installer cleans legacy workflows output', + ); const ideManager22 = new IdeManager(); await ideManager22.ensureInitialized(); - // Should not appear in available IDEs + // Should appear in available IDEs const availableIdes22 = ideManager22.getAvailableIdes(); - assert(!availableIdes22.some((ide) => ide.value === 'kilo'), 'KiloCoder is hidden from IDE selection'); + assert( + availableIdes22.some((ide) => ide.value === 'kilo'), + 'KiloCoder appears in IDE selection', + ); - // Setup should be blocked but legacy files should be cleaned up const tempProjectDir22 = await fs.mkdtemp(path.join(os.tmpdir(), 'bmad-kilo-test-')); const installedBmadDir22 = await createTestBmadFixture(); @@ -1074,25 +1081,29 @@ async function runTests() { selectedModules: ['bmm'], }); - assert(result22.success === false, 'KiloCoder setup is blocked when suspended'); - assert(result22.error === 'suspended', 'KiloCoder setup returns suspended error'); + assert(result22.success === true, 'KiloCoder setup succeeds against temp project'); - // Should not write new skill files - assert( - !(await fs.pathExists(path.join(tempProjectDir22, '.kilocode', 'skills'))), - 'KiloCoder does not create skills directory when suspended', - ); + const skillFile22 = path.join(tempProjectDir22, '.kilocode', 'skills', 'bmad-master', 'SKILL.md'); + assert(await fs.pathExists(skillFile22), 'KiloCoder install writes SKILL.md directory output'); - // Legacy files should be cleaned up - assert( - !(await fs.pathExists(path.join(tempProjectDir22, '.kilocode', 'workflows'))), - 'KiloCoder legacy workflows are cleaned up even when suspended', - ); + const skillContent22 = await fs.readFile(skillFile22, 'utf8'); + const nameMatch22 = skillContent22.match(/^name:\s*(.+)$/m); + assert(nameMatch22 && nameMatch22[1].trim() === 'bmad-master', 'KiloCoder skill name frontmatter matches directory name exactly'); + + assert(!(await fs.pathExists(path.join(tempProjectDir22, '.kilocode', 'workflows'))), 'KiloCoder setup removes legacy workflows dir'); + + const result22b = await ideManager22.setup('kilo', tempProjectDir22, installedBmadDir22, { + silent: true, + selectedModules: ['bmm'], + }); + + assert(result22b.success === true, 'KiloCoder reinstall/upgrade succeeds over existing skills'); + assert(await fs.pathExists(skillFile22), 'KiloCoder reinstall preserves SKILL.md output'); await fs.remove(tempProjectDir22); await fs.remove(path.dirname(installedBmadDir22)); } catch (error) { - assert(false, 'KiloCoder suspended test succeeds', error.message); + assert(false, 'KiloCoder native skills test succeeds', error.message); } console.log(''); diff --git a/tools/docs/native-skills-migration-checklist.md b/tools/docs/native-skills-migration-checklist.md index 2f0f31344..80c6a9296 100644 --- a/tools/docs/native-skills-migration-checklist.md +++ b/tools/docs/native-skills-migration-checklist.md @@ -205,17 +205,14 @@ Support assumption: full Agent Skills support. BMAD currently uses a custom inst - [x] Implement/extend automated tests — 11 assertions in test suite 17 including marker cleanup - [x] Commit -## KiloCoder — SUSPENDED - -**Status: Kilo Code does not support the Agent Skills standard.** The original migration assumed skills support because Kilo forked from Roo Code, but manual IDE verification confirmed Kilo has not merged that feature. BMAD support is paused until Kilo implements skills. +## KiloCoder **Install:** VS Code extension `kilocode.kilo-code` — search "Kilo Code" in Extensions or `code --install-extension kilocode.kilo-code` -- [x] ~~Confirm KiloCoder native skills path~~ — **FALSE**: assumed from Roo Code fork, not verified. Manual testing showed no skills support in the IDE -- [x] Config and installer code retained in platform-codes.yaml with `suspended` flag — hidden from IDE picker, setup blocked with explanation -- [x] Installer fails early (before writing `_bmad/`) if Kilo is the only selected IDE, protecting existing installations -- [x] Legacy cleanup still runs for `.kilocode/workflows` and `.kilocodemodes` when users switch to a different IDE -- [x] Automated tests — 7 assertions in suite 22 (suspended config, hidden from picker, setup blocked, no files written, legacy cleanup) +- [x] Confirm KiloCoder native skills path — `.kilocode/skills` +- [x] Legacy cleanup for `.kilocode/workflows` and `.kilocodemodes` +- [x] Automated tests — suite 22 (config, IDE picker, install, skill output, legacy cleanup, reinstall) +- [x] Commit ## Gemini CLI diff --git a/tools/installer/ide/platform-codes.yaml b/tools/installer/ide/platform-codes.yaml index 3f3e068be..98caaa757 100644 --- a/tools/installer/ide/platform-codes.yaml +++ b/tools/installer/ide/platform-codes.yaml @@ -105,7 +105,6 @@ platforms: kilo: name: "KiloCoder" preferred: false - suspended: "Kilo Code does not yet support the Agent Skills standard. Support is paused until they implement it. See https://github.com/kilocode/kilo-code/issues for updates." installer: legacy_targets: - .kilocode/workflows