diff --git a/tools/installer/list-options.js b/tools/installer/list-options.js index d06be8b06..d79e1cded 100644 --- a/tools/installer/list-options.js +++ b/tools/installer/list-options.js @@ -54,7 +54,7 @@ async function discoverOfficialModuleYamls() { }; // Built-ins. - for (const code of ['core', 'bmm']) { + for (const code of ['core', 'bmm', 'bmo']) { const yamlPath = path.join(getModulePath(code), 'module.yaml'); if (await fs.pathExists(yamlPath)) { // Built-ins use their well-known short codes regardless of what the diff --git a/tools/installer/modules/official-modules.js b/tools/installer/modules/official-modules.js index 615daba86..53a70adc5 100644 --- a/tools/installer/modules/official-modules.js +++ b/tools/installer/modules/official-modules.js @@ -128,6 +128,15 @@ class OfficialModules { } } + // Add built-in bmo module (directly under src/orchestrator-skills) + const bmoPath = getSourcePath('orchestrator-skills'); + if (await fs.pathExists(bmoPath)) { + const bmoInfo = await this.getModuleInfo(bmoPath, 'bmo', 'src/orchestrator-skills'); + if (bmoInfo) { + modules.push(bmoInfo); + } + } + return { modules }; } @@ -225,6 +234,14 @@ class OfficialModules { } } + // Check for built-in bmo module (directly under src/orchestrator-skills) + if (moduleCode === 'bmo') { + const bmoPath = getSourcePath('orchestrator-skills'); + if (await fs.pathExists(bmoPath)) { + return bmoPath; + } + } + // Check external official modules (pass channelOptions so channel plan applies) const externalSource = await this.externalModuleManager.findExternalModuleSource(moduleCode, options); if (externalSource) { diff --git a/tools/installer/project-root.js b/tools/installer/project-root.js index 84ecde5b0..373aa1e46 100644 --- a/tools/installer/project-root.js +++ b/tools/installer/project-root.js @@ -68,6 +68,9 @@ function getModulePath(moduleName, ...segments) { if (moduleName === 'bmm') { return getSourcePath('bmm-skills', ...segments); } + if (moduleName === 'bmo') { + return getSourcePath('orchestrator-skills', ...segments); + } return getSourcePath('modules', moduleName, ...segments); }