Merge branch 'main' into bmad-init-remove

This commit is contained in:
Brian 2026-03-28 20:34:20 -05:00 committed by GitHub
commit fc80db31b1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 36 additions and 29 deletions

View File

@ -926,27 +926,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();
@ -960,25 +967,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('');

View File

@ -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

View File

@ -109,7 +109,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