mirror of
https://github.com/bmadcode/BMAD-METHOD.git
synced 2025-12-17 17:55:34 +00:00
minor code cleanup
This commit is contained in:
parent
c24821b6ed
commit
59e4cc7b82
@ -50,7 +50,6 @@ class Installer {
|
|||||||
return { bmadDir: path.join(projectDir, '_bmad'), hasLegacyCfg: false };
|
return { bmadDir: path.join(projectDir, '_bmad'), hasLegacyCfg: false };
|
||||||
}
|
}
|
||||||
|
|
||||||
// V6+ strategy: Look for ANY directory with _config/manifest.yaml or legacy _cfg/manifest.yaml
|
|
||||||
let bmadDir = null;
|
let bmadDir = null;
|
||||||
let hasLegacyCfg = false;
|
let hasLegacyCfg = false;
|
||||||
|
|
||||||
@ -76,7 +75,7 @@ class Installer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch {
|
} catch {
|
||||||
// Ignore errors, fall through to default
|
console.log(chalk.red('Error reading project directory for BMAD installation detection'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we found a bmad directory (with or without legacy _cfg)
|
// If we found a bmad directory (with or without legacy _cfg)
|
||||||
@ -321,6 +320,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
|
|
||||||
for (const ide of newlySelectedIdes) {
|
for (const ide of newlySelectedIdes) {
|
||||||
// List of IDEs that have interactive prompts
|
// List of IDEs that have interactive prompts
|
||||||
|
//TODO: Why is this here, hardcoding this list here is bad, fix me!
|
||||||
const needsPrompts = ['claude-code', 'github-copilot', 'roo', 'cline', 'auggie', 'codex', 'qwen', 'gemini', 'rovo-dev'].includes(
|
const needsPrompts = ['claude-code', 'github-copilot', 'roo', 'cline', 'auggie', 'codex', 'qwen', 'gemini', 'rovo-dev'].includes(
|
||||||
ide,
|
ide,
|
||||||
);
|
);
|
||||||
@ -344,7 +344,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
} else if (ideModule.default) {
|
} else if (ideModule.default) {
|
||||||
SetupClass = ideModule.default;
|
SetupClass = ideModule.default;
|
||||||
} else {
|
} else {
|
||||||
// Skip if no setup class found
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,10 +397,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
const hasCoreConfig = config.coreConfig && Object.keys(config.coreConfig).length > 0;
|
const hasCoreConfig = config.coreConfig && Object.keys(config.coreConfig).length > 0;
|
||||||
|
|
||||||
// Only display logo if core config wasn't already collected (meaning we're not continuing from UI)
|
// Only display logo if core config wasn't already collected (meaning we're not continuing from UI)
|
||||||
if (hasCoreConfig) {
|
if (!hasCoreConfig) {
|
||||||
// Core config was already collected in UI, show smooth continuation
|
|
||||||
// Don't clear screen, just continue flow
|
|
||||||
} else {
|
|
||||||
// Display BMAD logo
|
// Display BMAD logo
|
||||||
CLIUtils.displayLogo();
|
CLIUtils.displayLogo();
|
||||||
|
|
||||||
@ -797,7 +793,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
config.skipIde = toolSelection.skipIde;
|
config.skipIde = toolSelection.skipIde;
|
||||||
const ideConfigurations = toolSelection.configurations;
|
const ideConfigurations = toolSelection.configurations;
|
||||||
|
|
||||||
// Check if spinner is already running (e.g., from folder name change scenario)
|
|
||||||
if (spinner.isSpinning) {
|
if (spinner.isSpinning) {
|
||||||
spinner.text = 'Continuing installation...';
|
spinner.text = 'Continuing installation...';
|
||||||
} else {
|
} else {
|
||||||
@ -828,7 +823,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
spinner.succeed('Custom modules cached');
|
spinner.succeed('Custom modules cached');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get project root
|
|
||||||
const projectRoot = getProjectRoot();
|
const projectRoot = getProjectRoot();
|
||||||
|
|
||||||
// Step 1: Install core module first (if requested)
|
// Step 1: Install core module first (if requested)
|
||||||
@ -985,7 +979,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
this.moduleManager.setCustomModulePaths(customModulePaths);
|
this.moduleManager.setCustomModulePaths(customModulePaths);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get collected config for this custom module (from module.yaml prompts)
|
|
||||||
const collectedModuleConfig = moduleConfigs[moduleName] || {};
|
const collectedModuleConfig = moduleConfigs[moduleName] || {};
|
||||||
|
|
||||||
// Use ModuleManager to install the custom module
|
// Use ModuleManager to install the custom module
|
||||||
@ -1002,8 +995,6 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// ModuleManager installs directly to the target directory, no need to move files
|
|
||||||
|
|
||||||
// Create module config (include collected config from module.yaml prompts)
|
// Create module config (include collected config from module.yaml prompts)
|
||||||
await this.generateModuleConfigs(bmadDir, {
|
await this.generateModuleConfigs(bmadDir, {
|
||||||
[moduleName]: { ...config.coreConfig, ...customInfo.config, ...collectedModuleConfig },
|
[moduleName]: { ...config.coreConfig, ...customInfo.config, ...collectedModuleConfig },
|
||||||
@ -1558,14 +1549,7 @@ If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|||||||
async installCoreWithDependencies(bmadDir, coreFiles) {
|
async installCoreWithDependencies(bmadDir, coreFiles) {
|
||||||
const sourcePath = getModulePath('core');
|
const sourcePath = getModulePath('core');
|
||||||
const targetPath = path.join(bmadDir, 'core');
|
const targetPath = path.join(bmadDir, 'core');
|
||||||
|
|
||||||
// Install full core
|
|
||||||
await this.installCore(bmadDir);
|
await this.installCore(bmadDir);
|
||||||
|
|
||||||
// If there are specific dependency files, ensure they're included
|
|
||||||
if (coreFiles) {
|
|
||||||
// Already handled by installCore for core module
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -10,8 +10,6 @@ const { CustomHandler } = require('../installers/lib/custom/handler');
|
|||||||
* UI utilities for the installer
|
* UI utilities for the installer
|
||||||
*/
|
*/
|
||||||
class UI {
|
class UI {
|
||||||
constructor() {}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt for installation configuration
|
* Prompt for installation configuration
|
||||||
* @returns {Object} Installation configuration
|
* @returns {Object} Installation configuration
|
||||||
@ -161,14 +159,8 @@ class UI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Always ask for custom content, but we'll handle it differently for new installs
|
|
||||||
let customContentConfig = { hasCustomContent: false };
|
let customContentConfig = { hasCustomContent: false };
|
||||||
if (hasExistingInstall) {
|
if (!hasExistingInstall) {
|
||||||
// Existing installation - prompt to add/update custom content
|
|
||||||
customContentConfig = await this.promptCustomContentForExisting();
|
|
||||||
} else {
|
|
||||||
// New installation - we'll prompt after creating the directory structure
|
|
||||||
// For now, set a flag to indicate we should ask later
|
|
||||||
customContentConfig._shouldAsk = true;
|
customContentConfig._shouldAsk = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1140,146 +1132,6 @@ class UI {
|
|||||||
return existingInstall.ides || [];
|
return existingInstall.ides || [];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Prompt for custom content for existing installations
|
|
||||||
* @returns {Object} Custom content configuration
|
|
||||||
*/
|
|
||||||
async promptCustomContentForExisting() {
|
|
||||||
try {
|
|
||||||
// Skip custom content installation - always return false
|
|
||||||
return { hasCustomContent: false };
|
|
||||||
|
|
||||||
// TODO: Custom content installation temporarily disabled
|
|
||||||
// CLIUtils.displaySection('Custom Content', 'Add new custom agents, workflows, or modules to your installation');
|
|
||||||
|
|
||||||
// const { hasCustomContent } = await inquirer.prompt([
|
|
||||||
// {
|
|
||||||
// type: 'list',
|
|
||||||
// name: 'hasCustomContent',
|
|
||||||
// message: 'Do you want to add or update custom content?',
|
|
||||||
// choices: [
|
|
||||||
// {
|
|
||||||
// name: 'No, continue with current installation only',
|
|
||||||
// value: false,
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'Yes, I have custom content to add or update',
|
|
||||||
// value: true,
|
|
||||||
// },
|
|
||||||
// ],
|
|
||||||
// default: false,
|
|
||||||
// },
|
|
||||||
// ]);
|
|
||||||
|
|
||||||
// if (!hasCustomContent) {
|
|
||||||
// return { hasCustomContent: false };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TODO: Custom content installation temporarily disabled
|
|
||||||
// // Get directory path
|
|
||||||
// const { customPath } = await inquirer.prompt([
|
|
||||||
// {
|
|
||||||
// type: 'input',
|
|
||||||
// name: 'customPath',
|
|
||||||
// message: 'Enter directory to search for custom content (will scan subfolders):',
|
|
||||||
// default: process.cwd(),
|
|
||||||
// validate: async (input) => {
|
|
||||||
// if (!input || input.trim() === '') {
|
|
||||||
// return 'Please enter a directory path';
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Normalize and check if path exists
|
|
||||||
// const expandedPath = CLIUtils.expandPath(input.trim());
|
|
||||||
// const pathExists = await fs.pathExists(expandedPath);
|
|
||||||
// if (!pathExists) {
|
|
||||||
// return 'Directory does not exist';
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Check if it's actually a directory
|
|
||||||
// const stats = await fs.stat(expandedPath);
|
|
||||||
// if (!stats.isDirectory()) {
|
|
||||||
// return 'Path must be a directory';
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return true;
|
|
||||||
// },
|
|
||||||
// transformer: (input) => {
|
|
||||||
// return CLIUtils.expandPath(input);
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// ]);
|
|
||||||
|
|
||||||
// const resolvedPath = CLIUtils.expandPath(customPath);
|
|
||||||
|
|
||||||
// // Find custom content
|
|
||||||
// const customHandler = new CustomHandler();
|
|
||||||
// const customFiles = await customHandler.findCustomContent(resolvedPath);
|
|
||||||
|
|
||||||
// if (customFiles.length === 0) {
|
|
||||||
// console.log(chalk.yellow(`\nNo custom content found in ${resolvedPath}`));
|
|
||||||
|
|
||||||
// const { tryDifferent } = await inquirer.prompt([
|
|
||||||
// {
|
|
||||||
// type: 'confirm',
|
|
||||||
// name: 'tryDifferent',
|
|
||||||
// message: 'Try a different directory?',
|
|
||||||
// default: true,
|
|
||||||
// },
|
|
||||||
// ]);
|
|
||||||
|
|
||||||
// if (tryDifferent) {
|
|
||||||
// return await this.promptCustomContentForExisting();
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return { hasCustomContent: false };
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Display found items
|
|
||||||
// console.log(chalk.cyan(`\nFound ${customFiles.length} custom content file(s):`));
|
|
||||||
// const customContentItems = [];
|
|
||||||
|
|
||||||
// for (const customFile of customFiles) {
|
|
||||||
// const customInfo = await customHandler.getCustomInfo(customFile);
|
|
||||||
// if (customInfo) {
|
|
||||||
// customContentItems.push({
|
|
||||||
// name: `${chalk.cyan('✓')} ${customInfo.name} ${chalk.gray(`(${customInfo.relativePath})`)}`,
|
|
||||||
// value: `__CUSTOM_CONTENT__${customFile}`,
|
|
||||||
// checked: true,
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Add option to keep existing custom content
|
|
||||||
// console.log(chalk.yellow('\nExisting custom modules will be preserved unless you remove them'));
|
|
||||||
|
|
||||||
// const { selectedFiles } = await inquirer.prompt([
|
|
||||||
// {
|
|
||||||
// type: 'checkbox',
|
|
||||||
// name: 'selectedFiles',
|
|
||||||
// message: 'Select custom content to add:',
|
|
||||||
// choices: customContentItems,
|
|
||||||
// pageSize: 15,
|
|
||||||
// validate: (answer) => {
|
|
||||||
// if (answer.length === 0) {
|
|
||||||
// return 'You must select at least one item';
|
|
||||||
// }
|
|
||||||
// return true;
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// ]);
|
|
||||||
|
|
||||||
// return {
|
|
||||||
// hasCustomContent: true,
|
|
||||||
// customPath: resolvedPath,
|
|
||||||
// selected: true,
|
|
||||||
// selectedFiles: selectedFiles,
|
|
||||||
// };
|
|
||||||
} catch (error) {
|
|
||||||
console.error(chalk.red('Error configuring custom content:'), error);
|
|
||||||
return { hasCustomContent: false };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt user for custom content source location
|
* Prompt user for custom content source location
|
||||||
* @returns {Object} Custom content configuration
|
* @returns {Object} Custom content configuration
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user