From 397b2a5c876d443d298aa44dab582520dbf094c8 Mon Sep 17 00:00:00 2001 From: Aristo Rinjuang Date: Tue, 9 Jun 2026 10:29:35 +0700 Subject: [PATCH] feat: add CodeWhale as supported installer platform (#2459) CodeWhale uses .codewhale/skills/ (project) and ~/.codewhale/skills/ (global) for skill directories, matching the existing config-driven installer pattern. - platform-codes.yaml: codewhale entry after codex - test: Test 12b validates install target and setup --- test/test-installation-components.js | 35 +++++++++++++++++++++++++ tools/installer/ide/platform-codes.yaml | 7 +++++ 2 files changed, 42 insertions(+) diff --git a/test/test-installation-components.js b/test/test-installation-components.js index 808ee6faa..d5d1a6e62 100644 --- a/test/test-installation-components.js +++ b/test/test-installation-components.js @@ -446,6 +446,41 @@ async function runTests() { // Test 12: Removed — ancestor conflict check no longer applies (no IDE inherits skills from parent dirs) + // ============================================================ + // Test 12b: CodeWhale Native Skills Install + // ============================================================ + console.log(`${colors.yellow}Test Suite 12b: CodeWhale Native Skills${colors.reset}\n`); + + try { + clearCache(); + const platformCodes12b = await loadPlatformCodes(); + const codewhaleInstaller = platformCodes12b.platforms.codewhale?.installer; + + assert(codewhaleInstaller?.target_dir === '.codewhale/skills', 'CodeWhale target_dir uses native skills path'); + + const tempProjectDir12b = await fs.mkdtemp(path.join(os.tmpdir(), 'bmad-codewhale-test-')); + const installedBmadDir12b = await createTestBmadFixture(); + + const ideManager12b = new IdeManager(); + await ideManager12b.ensureInitialized(); + const result12b = await ideManager12b.setup('codewhale', tempProjectDir12b, installedBmadDir12b, { + silent: true, + selectedModules: ['bmm'], + }); + + assert(result12b.success === true, 'CodeWhale setup succeeds against temp project'); + + const skillFile12b = path.join(tempProjectDir12b, '.codewhale', 'skills', 'bmad-master', 'SKILL.md'); + assert(await fs.pathExists(skillFile12b), 'CodeWhale install writes SKILL.md directory output'); + + await fs.remove(tempProjectDir12b); + await fs.remove(path.dirname(installedBmadDir12b)); + } catch (error) { + assert(false, 'CodeWhale native skills migration test succeeds', error.message); + } + + console.log(''); + // ============================================================ // Test 13: Cursor Native Skills Install // ============================================================ diff --git a/tools/installer/ide/platform-codes.yaml b/tools/installer/ide/platform-codes.yaml index b8f18436d..2bde8b245 100644 --- a/tools/installer/ide/platform-codes.yaml +++ b/tools/installer/ide/platform-codes.yaml @@ -70,6 +70,13 @@ platforms: target_dir: .agents/skills global_target_dir: ~/.codex/skills + codewhale: + name: "CodeWhale" + preferred: false + installer: + target_dir: .codewhale/skills + global_target_dir: ~/.codewhale/skills + codebuddy: name: "CodeBuddy" preferred: false