feat: v6.0.0-alpha.0 - the future is now

This commit is contained in:
Brian Madison
2025-09-28 23:17:07 -05:00
parent 52f6889089
commit 0a6a3f3015
747 changed files with 52759 additions and 235199 deletions

View File

@@ -0,0 +1 @@
# BMad Method Master Knowledge Base Index

View File

@@ -0,0 +1,30 @@
# Technical Decisions Log
_Auto-updated during discovery and planning sessions - you can also add information here yourself_
## Purpose
This document captures technical decisions, preferences, and constraints discovered during project discussions. It serves as input for architecture.md and solution design documents.
## Confirmed Decisions
<!-- Technical choices explicitly confirmed by the team/user -->
## Preferences
<!-- Non-binding preferences mentioned during discussions -->
## Constraints
<!-- Hard requirements from infrastructure, compliance, or integration needs -->
## To Investigate
<!-- Technical questions that need research or architect input -->
## Notes
- This file is automatically updated when technical information is mentioned
- Decisions here are inputs, not final architecture
- Final technical decisions belong in architecture.md
- Implementation details belong in solutions/\*.md and story context or dev notes.

View File

@@ -0,0 +1,49 @@
# BMAD™ Method Core Configuration
code: bmm
name: "BMM: BMad Method Agile-AI Driven-Development"
default_selected: true # This module will be selected by default for new installations
prompt:
- "Thank you for choosing the BMAD™ Method, your gateway to dreaming, planning"
- "and building with real world proven techniques."
- "All paths are relative to project root, with no leading slash."
# Variables from Core Config inserted:
## user_name
## communication_language
## output_folder
project_name:
prompt: "What is the title of your project you will be working on?"
default: "My Project"
result: "{value}"
tech_docs:
prompt: "Where is Technical Documentation located within the project?"
default: "docs"
result: "{project-root}/{value}"
dev_story_location:
prompt: "Where should development stories be stored?"
default: "docs/stories"
result: "{project-root}/{value}"
kb_location:
prompt: "Where should bmad knowledge base articles be stored?"
default: "~/bmad/bmm/kb.md"
result: "{value}"
desired_mcp_tools:
prompt:
- "Which MCP Tools will you be using? (Select all that apply)"
- "Note: You will need to install these separately. Bindings will come post ALPHA along with other choices."
result: "{value}"
multi-select:
- "Chrome Official MCP"
- "Playwright"
- "Context 7"
- "Tavily"
- "Perplexity"
- "Jira"
- "Trello"

View File

@@ -0,0 +1,131 @@
const fs = require('fs-extra');
const path = require('node:path');
const chalk = require('chalk');
const platformCodes = require(path.join(__dirname, '../../../../tools/cli/lib/platform-codes'));
/**
* BMM Module Installer
* Standard module installer function that executes after IDE installations
*
* @param {Object} options - Installation options
* @param {string} options.projectRoot - The root directory of the target project
* @param {Object} options.config - Module configuration from install-menu-config.yaml
* @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
* @param {Object} options.logger - Logger instance for output
* @returns {Promise<boolean>} - Success status
*/
async function install(options) {
const { projectRoot, config, installedIDEs, logger } = options;
try {
logger.log(chalk.blue('🚀 Installing BMM Module...'));
// Check and create tech_docs directory if configured
if (config['tech_docs']) {
// Strip {project-root}/ prefix if present
const techDocsConfig = config['tech_docs'].replace('{project-root}/', '');
const techDocsPath = path.join(projectRoot, techDocsConfig);
if (await fs.pathExists(techDocsPath)) {
// Check if template exists, add if missing
const templateDest = path.join(techDocsPath, 'technical-decisions-template.md');
if (!(await fs.pathExists(templateDest))) {
const templateSource = path.join(__dirname, 'assets', 'technical-decisions-template.md');
if (await fs.pathExists(templateSource)) {
await fs.copy(templateSource, templateDest);
logger.log(chalk.green('✓ Added technical decisions template to existing directory'));
}
}
} else {
logger.log(chalk.yellow(`Creating technical documentation directory: ${techDocsConfig}`));
await fs.ensureDir(techDocsPath);
// Copy technical decisions template
const templateSource = path.join(__dirname, 'assets', 'technical-decisions-template.md');
const templateDest = path.join(techDocsPath, 'technical-decisions-template.md');
if (await fs.pathExists(templateSource)) {
await fs.copy(templateSource, templateDest, { overwrite: false });
logger.log(chalk.green('✓ Added technical decisions template'));
}
}
}
// Create output directory if configured
if (config['output_folder']) {
// Strip {project-root}/ prefix if present
const outputConfig = config['output_folder'].replace('{project-root}/', '');
const outputPath = path.join(projectRoot, outputConfig);
if (!(await fs.pathExists(outputPath))) {
logger.log(chalk.yellow(`Creating output directory: ${outputConfig}`));
await fs.ensureDir(outputPath);
}
}
// Create dev story location if configured
if (config['dev_story_location']) {
// Strip {project-root}/ prefix if present
const storyConfig = config['dev_story_location'].replace('{project-root}/', '');
const storyPath = path.join(projectRoot, storyConfig);
if (!(await fs.pathExists(storyPath))) {
logger.log(chalk.yellow(`Creating story directory: ${storyConfig}`));
await fs.ensureDir(storyPath);
}
}
// Handle IDE-specific configurations if needed
if (installedIDEs && installedIDEs.length > 0) {
logger.log(chalk.cyan(`Configuring BMM for IDEs: ${installedIDEs.join(', ')}`));
// Add any IDE-specific BMM configurations here
for (const ide of installedIDEs) {
await configureForIDE(ide, projectRoot, config, logger);
}
}
logger.log(chalk.green('✓ BMM Module installation complete'));
return true;
} catch (error) {
logger.error(chalk.red(`Error installing BMM module: ${error.message}`));
return false;
}
}
/**
* Configure BMM module for specific platform/IDE
* @private
*/
async function configureForIDE(ide, projectRoot, config, logger) {
// Validate platform code
if (!platformCodes.isValidPlatform(ide)) {
logger.warn(chalk.yellow(` Warning: Unknown platform code '${ide}'. Skipping BMM configuration.`));
return;
}
const platformName = platformCodes.getDisplayName(ide);
// Try to load platform-specific handler
const platformSpecificPath = path.join(__dirname, 'platform-specifics', `${ide}.js`);
try {
if (await fs.pathExists(platformSpecificPath)) {
const platformHandler = require(platformSpecificPath);
if (typeof platformHandler.install === 'function') {
await platformHandler.install({
projectRoot,
config,
logger,
platformInfo: platformCodes.getPlatform(ide), // Pass platform metadata
});
}
} else {
// No platform-specific handler for this IDE
logger.log(chalk.dim(` No BMM-specific configuration for ${platformName}`));
}
} catch (error) {
logger.warn(chalk.yellow(` Warning: Could not load BMM platform-specific handler for ${platformName}: ${error.message}`));
}
}
module.exports = { install };

View File

@@ -0,0 +1,35 @@
const chalk = require('chalk');
/**
* BMM Platform-specific installer for Claude Code
*
* @param {Object} options - Installation options
* @param {string} options.projectRoot - The root directory of the target project
* @param {Object} options.config - Module configuration from install-menu-config.yaml
* @param {Object} options.logger - Logger instance for output
* @param {Object} options.platformInfo - Platform metadata from global config
* @returns {Promise<boolean>} - Success status
*/
async function install(options) {
const { logger, platformInfo } = options;
// projectRoot and config available for future use
try {
const platformName = platformInfo ? platformInfo.name : 'Claude Code';
logger.log(chalk.cyan(` BMM-${platformName} Specifics installed`));
// Add Claude Code specific BMM configurations here
// For example:
// - Custom command configurations
// - Agent party configurations
// - Workflow integrations
// - Template mappings
return true;
} catch (error) {
logger.error(chalk.red(`Error installing BMM Claude Code specifics: ${error.message}`));
return false;
}
}
module.exports = { install };

View File

@@ -0,0 +1,32 @@
const chalk = require('chalk');
/**
* BMM Platform-specific installer for Windsurf
*
* @param {Object} options - Installation options
* @param {string} options.projectRoot - The root directory of the target project
* @param {Object} options.config - Module configuration from install-menu-config.yaml
* @param {Object} options.logger - Logger instance for output
* @returns {Promise<boolean>} - Success status
*/
async function install(options) {
const { logger } = options;
// projectRoot and config available for future use
try {
logger.log(chalk.cyan(' BMM-Windsurf Specifics installed'));
// Add Windsurf specific BMM configurations here
// For example:
// - Custom cascades
// - Workflow adaptations
// - Template configurations
return true;
} catch (error) {
logger.error(chalk.red(`Error installing BMM Windsurf specifics: ${error.message}`));
return false;
}
}
module.exports = { install };