modify install now supports adding custom modules even if there were no custom modules originally

This commit is contained in:
Brian Madison 2025-12-16 20:33:10 +08:00
parent e3eb374218
commit e37edf098c

View File

@ -241,7 +241,35 @@ class UI {
} }
// After module selection, ask about custom modules // After module selection, ask about custom modules
const customModuleResult = await this.handleCustomModulesInModifyFlow(confirmedDirectory, selectedModules); console.log('');
const { changeCustomModules } = await inquirer.prompt([
{
type: 'confirm',
name: 'changeCustomModules',
message: 'Modify custom module selection (add, update, or remove custom modules/agents/workflows)?',
default: false,
},
]);
let customModuleResult = { selectedCustomModules: [], customContentConfig: { hasCustomContent: false } };
if (changeCustomModules) {
customModuleResult = await this.handleCustomModulesInModifyFlow(confirmedDirectory, selectedModules);
} else {
// Preserve existing custom modules if user doesn't want to modify them
const { Installer } = require('../installers/lib/core/installer');
const installer = new Installer();
const { bmadDir } = await installer.findBmadDir(confirmedDirectory);
const cacheDir = path.join(bmadDir, '_config', 'custom');
if (await fs.pathExists(cacheDir)) {
const entries = await fs.readdir(cacheDir, { withFileTypes: true });
for (const entry of entries) {
if (entry.isDirectory()) {
customModuleResult.selectedCustomModules.push(entry.name);
}
}
}
}
// Merge any selected custom modules // Merge any selected custom modules
if (customModuleResult.selectedCustomModules.length > 0) { if (customModuleResult.selectedCustomModules.length > 0) {
@ -1322,26 +1350,35 @@ class UI {
customContentConfig: { hasCustomContent: false }, customContentConfig: { hasCustomContent: false },
}; };
if (cachedCustomModules.length === 0) {
return result;
}
// Ask user about custom modules // Ask user about custom modules
console.log(chalk.cyan('\n⚙ Custom Modules')); console.log(chalk.cyan('\n⚙ Custom Modules'));
console.log(chalk.dim('Found custom modules in your installation:')); if (cachedCustomModules.length > 0) {
console.log(chalk.dim('Found custom modules in your installation:'));
} else {
console.log(chalk.dim('No custom modules currently installed.'));
}
// Build choices dynamically based on whether we have existing modules
const choices = [];
if (cachedCustomModules.length > 0) {
choices.push(
{ name: 'Keep all existing custom modules', value: 'keep' },
{ name: 'Select which custom modules to keep', value: 'select' },
{ name: 'Add new custom modules', value: 'add' },
{ name: 'Remove all custom modules', value: 'remove' },
);
} else {
choices.push({ name: 'Add new custom modules', value: 'add' }, { name: 'Cancel (no custom modules)', value: 'cancel' });
}
const { customAction } = await inquirer.prompt([ const { customAction } = await inquirer.prompt([
{ {
type: 'list', type: 'list',
name: 'customAction', name: 'customAction',
message: 'What would you like to do with custom modules?', message:
choices: [ cachedCustomModules.length > 0 ? 'What would you like to do with custom modules?' : 'Would you like to add custom modules?',
{ name: 'Keep all existing custom modules', value: 'keep' }, choices: choices,
{ name: 'Select which custom modules to keep', value: 'select' }, default: cachedCustomModules.length > 0 ? 'keep' : 'add',
{ name: 'Add new custom modules', value: 'add' },
{ name: 'Remove all custom modules', value: 'remove' },
],
default: 'keep',
}, },
]); ]);
@ -1374,19 +1411,9 @@ class UI {
} }
case 'add': { case 'add': {
// First ask to keep existing ones // By default, keep existing modules when adding new ones
const { keepExisting } = await inquirer.prompt([ // User chose "Add new" not "Replace", so we assume they want to keep existing
{ result.selectedCustomModules = cachedCustomModules.map((m) => m.id);
type: 'confirm',
name: 'keepExisting',
message: 'Keep existing custom modules?',
default: true,
},
]);
if (keepExisting) {
result.selectedCustomModules = cachedCustomModules.map((m) => m.id);
}
// Then prompt for new ones (reuse existing method) // Then prompt for new ones (reuse existing method)
const newCustomContent = await this.promptCustomContentSource(); const newCustomContent = await this.promptCustomContentSource();
@ -1402,6 +1429,12 @@ class UI {
console.log(chalk.yellow('All custom modules will be removed from the installation')); console.log(chalk.yellow('All custom modules will be removed from the installation'));
break; break;
} }
case 'cancel': {
// User cancelled - no custom modules
console.log(chalk.dim('No custom modules will be added'));
break;
}
} }
return result; return result;