feat: enhance install command with directory option and update prompt logic
Added a new CLI option for specifying the target project directory, allowing users to skip the interactive prompt. Updated the installation prompt method to accept options and handle directory validation accordingly.
This commit is contained in:
parent
6eb7c34752
commit
3dd05b0584
|
|
@ -9,7 +9,10 @@ const ui = new UI();
|
|||
module.exports = {
|
||||
command: 'install',
|
||||
description: 'Install BMAD Core agents and tools',
|
||||
options: [['-d, --debug', 'Enable debug output for manifest generation']],
|
||||
options: [
|
||||
['-d, --debug', 'Enable debug output for manifest generation'],
|
||||
['-D, --directory <path>', 'Target project directory (skips interactive prompt)'],
|
||||
],
|
||||
action: async (options) => {
|
||||
try {
|
||||
// Set debug flag as environment variable for all components
|
||||
|
|
@ -18,7 +21,7 @@ module.exports = {
|
|||
console.log(chalk.cyan('Debug mode enabled\n'));
|
||||
}
|
||||
|
||||
const config = await ui.promptInstall();
|
||||
const config = await ui.promptInstall(options);
|
||||
|
||||
// Handle cancel
|
||||
if (config.actionType === 'cancel') {
|
||||
|
|
|
|||
|
|
@ -26,9 +26,10 @@ const choiceUtils = { Separator };
|
|||
class UI {
|
||||
/**
|
||||
* Prompt for installation configuration
|
||||
* @param {Object} options - CLI options object (may contain directory property)
|
||||
* @returns {Object} Installation configuration
|
||||
*/
|
||||
async promptInstall() {
|
||||
async promptInstall(options = {}) {
|
||||
CLIUtils.displayLogo();
|
||||
|
||||
// Display version-specific start message from install-messages.yaml
|
||||
|
|
@ -36,7 +37,7 @@ class UI {
|
|||
const messageLoader = new MessageLoader();
|
||||
messageLoader.displayStartMessage();
|
||||
|
||||
const confirmedDirectory = await this.getConfirmedDirectory();
|
||||
const confirmedDirectory = await this.getConfirmedDirectory(options);
|
||||
|
||||
// Preflight: Check for legacy BMAD v4 footprints immediately after getting directory
|
||||
const { Detector } = require('../installers/lib/core/detector');
|
||||
|
|
@ -506,9 +507,23 @@ class UI {
|
|||
|
||||
/**
|
||||
* Get confirmed directory from user
|
||||
* @param {Object} options - CLI options object (may contain directory property)
|
||||
* @returns {string} Confirmed directory path
|
||||
*/
|
||||
async getConfirmedDirectory() {
|
||||
async getConfirmedDirectory(options = {}) {
|
||||
// If directory provided via CLI, validate and return it
|
||||
if (options.directory) {
|
||||
const expandedPath = this.expandUserPath(options.directory);
|
||||
const validationError = this.validateDirectorySync(expandedPath);
|
||||
if (validationError) {
|
||||
throw new Error(`Invalid directory: ${validationError}`);
|
||||
}
|
||||
await this.displayDirectoryInfo(expandedPath);
|
||||
// Skip confirmation for CLI-provided directories
|
||||
return expandedPath;
|
||||
}
|
||||
|
||||
// Existing interactive prompt logic
|
||||
let confirmedDirectory = null;
|
||||
while (!confirmedDirectory) {
|
||||
const directoryAnswer = await this.promptForDirectory();
|
||||
|
|
|
|||
Loading…
Reference in New Issue