Compare commits
7 Commits
e3c3616a0d
...
165ddc0524
| Author | SHA1 | Date |
|---|---|---|
|
|
165ddc0524 | |
|
|
903710be1b | |
|
|
6caca55e43 | |
|
|
2c3285f47e | |
|
|
c46453259f | |
|
|
83ed3a978d | |
|
|
3dd05b0584 |
|
|
@ -8,7 +8,7 @@ validationStatus: COMPLETE - PRODUCTION READY
|
|||
|
||||
# PRD Workflow Validation Report
|
||||
|
||||
**Workflow Being Validated:** /Users/brianmadison/dev/BMAD-METHOD/src/bmm/workflows/2-plan-workflows/create-prd
|
||||
**Workflow Being Validated:** _bmad/bmm/workflows/2-plan-workflows/create-prd
|
||||
**Validation Date:** 2026-01-08
|
||||
**Validator:** BMAD Workflow Validation System
|
||||
|
||||
|
|
|
|||
|
|
@ -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') {
|
||||
|
|
|
|||
|
|
@ -121,9 +121,10 @@ class ActivationBuilder {
|
|||
|
||||
// Calculate final step numbers
|
||||
const menuStep = currentStepNum;
|
||||
const haltStep = currentStepNum + 1;
|
||||
const inputStep = currentStepNum + 2;
|
||||
const executeStep = currentStepNum + 3;
|
||||
const helpStep = currentStepNum + 1;
|
||||
const haltStep = currentStepNum + 2;
|
||||
const inputStep = currentStepNum + 3;
|
||||
const executeStep = currentStepNum + 4;
|
||||
|
||||
// Replace placeholders
|
||||
const processed = stepsTemplate
|
||||
|
|
@ -131,6 +132,7 @@ class ActivationBuilder {
|
|||
.replace('{{module}}', metadata.module || 'core') // Fixed to use {{module}}
|
||||
.replace('{AGENT_SPECIFIC_STEPS}', agentStepsXml)
|
||||
.replace('{MENU_STEP}', menuStep.toString())
|
||||
.replace('{HELP_STEP}', helpStep.toString())
|
||||
.replace('{HALT_STEP}', haltStep.toString())
|
||||
.replace('{INPUT_STEP}', inputStep.toString())
|
||||
.replace('{EXECUTE_STEP}', executeStep.toString());
|
||||
|
|
|
|||
|
|
@ -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