From 3bdbb380a78981c272bc6faca4bf77843017bb70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davor=20Raci=C4=87?= Date: Sun, 8 Feb 2026 10:27:25 +0100 Subject: [PATCH] fix: address code review findings from PR #1590 - Filter 'core' from CLI --modules in update path for consistency - Update selectAllModules() JSDoc to reflect core exclusion - Fix ESM default-export unwrap to handle function/class exports Co-Authored-By: Claude Opus 4.6 --- tools/cli/installers/lib/modules/manager.js | 4 ++-- tools/cli/lib/ui.js | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/cli/installers/lib/modules/manager.js b/tools/cli/installers/lib/modules/manager.js index 831b6e6f4..e079c831b 100644 --- a/tools/cli/installers/lib/modules/manager.js +++ b/tools/cli/installers/lib/modules/manager.js @@ -1299,8 +1299,8 @@ class ModuleManager { } else { const { pathToFileURL } = require('node:url'); const imported = await import(pathToFileURL(installerPath).href); - // CJS module.exports lands on .default, ESM named exports are top-level - moduleInstaller = imported.default && typeof imported.default === 'object' ? imported.default : imported; + // CJS module.exports lands on .default; ESM default can be object, function, or class + moduleInstaller = imported.default == null ? imported : imported.default; } if (typeof moduleInstaller.install === 'function') { diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js index 4beaf41ab..622f5a1e6 100644 --- a/tools/cli/lib/ui.js +++ b/tools/cli/lib/ui.js @@ -361,6 +361,9 @@ class UI { selectedModules.push(...customModuleResult.selectedCustomModules); } + // Filter out core - it's always installed via installCore flag + selectedModules = selectedModules.filter((m) => m !== 'core'); + // Get tool selection const toolSelection = await this.promptToolSelection(confirmedDirectory, options); @@ -898,9 +901,10 @@ class UI { } /** - * Select all modules (core + official + community) using grouped multiselect + * Select all modules (official + community) using grouped multiselect. + * Core is shown as locked but filtered from the result since it's always installed separately. * @param {Set} installedModuleIds - Currently installed module IDs - * @returns {Array} Selected module codes + * @returns {Array} Selected module codes (excluding core) */ async selectAllModules(installedModuleIds = new Set()) { const { ModuleManager } = require('../installers/lib/modules/manager');