From 6717ddbb4bf03761dc83a53ffbb9f5f31c6cab0f Mon Sep 17 00:00:00 2001 From: Alex Verkhovsky Date: Mon, 6 Oct 2025 11:47:47 -0700 Subject: [PATCH] fix(installer): enforce manifest ide selection --- tools/cli/installers/lib/core/installer.js | 4 +++- .../installers/lib/core/manifest-generator.js | 16 ++++++++++++++-- tools/cli/regenerate-manifests.js | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/tools/cli/installers/lib/core/installer.js b/tools/cli/installers/lib/core/installer.js index 90b5f8d0..4df58c6d 100644 --- a/tools/cli/installers/lib/core/installer.js +++ b/tools/cli/installers/lib/core/installer.js @@ -385,7 +385,9 @@ class Installer { // Generate CSV manifests for workflows, agents, tasks AND ALL FILES with hashes BEFORE IDE setup spinner.start('Generating workflow and agent manifests...'); const manifestGen = new ManifestGenerator(); - const manifestStats = await manifestGen.generateManifests(bmadDir, config.modules || [], this.installedFiles); + const manifestStats = await manifestGen.generateManifests(bmadDir, config.modules || [], this.installedFiles, { + ides: config.ides || [], + }); spinner.succeed( `Manifests generated: ${manifestStats.workflows} workflows, ${manifestStats.agents} agents, ${manifestStats.tasks} tasks, ${manifestStats.files} files`, diff --git a/tools/cli/installers/lib/core/manifest-generator.js b/tools/cli/installers/lib/core/manifest-generator.js index 36d2d88c..1cf2b0f6 100644 --- a/tools/cli/installers/lib/core/manifest-generator.js +++ b/tools/cli/installers/lib/core/manifest-generator.js @@ -14,6 +14,7 @@ class ManifestGenerator { this.tasks = []; this.modules = []; this.files = []; + this.selectedIdes = []; } /** @@ -22,7 +23,7 @@ class ManifestGenerator { * @param {Array} selectedModules - Selected modules for installation * @param {Array} installedFiles - All installed files (optional, for hash tracking) */ - async generateManifests(bmadDir, selectedModules, installedFiles = []) { + async generateManifests(bmadDir, selectedModules, installedFiles = [], options = {}) { // Create _cfg directory if it doesn't exist const cfgDir = path.join(bmadDir, '_cfg'); await fs.ensureDir(cfgDir); @@ -32,6 +33,17 @@ class ManifestGenerator { this.bmadDir = bmadDir; this.allInstalledFiles = installedFiles; + if (!Object.prototype.hasOwnProperty.call(options, 'ides')) { + throw new Error('ManifestGenerator requires `options.ides` to be provided – installer should supply the selected IDEs array.'); + } + + const resolvedIdes = options.ides ?? []; + if (!Array.isArray(resolvedIdes)) { + throw new TypeError('ManifestGenerator expected `options.ides` to be an array.'); + } + + this.selectedIdes = resolvedIdes; + // Collect workflow data await this.collectWorkflows(selectedModules); @@ -324,7 +336,7 @@ class ManifestGenerator { lastUpdated: new Date().toISOString(), }, modules: this.modules, - ides: ['claude-code'], + ides: this.selectedIdes, }; const yamlStr = yaml.dump(manifest, { diff --git a/tools/cli/regenerate-manifests.js b/tools/cli/regenerate-manifests.js index 614b9862..c5a0d48b 100644 --- a/tools/cli/regenerate-manifests.js +++ b/tools/cli/regenerate-manifests.js @@ -13,7 +13,7 @@ async function regenerateManifests() { console.log('Target directory:', bmadDir); try { - const result = await generator.generateManifests(bmadDir, selectedModules); + const result = await generator.generateManifests(bmadDir, selectedModules, [], { ides: [] }); console.log('✓ Manifests generated successfully:'); console.log(` - ${result.workflows} workflows`); console.log(` - ${result.agents} agents`);