Files
BMAD-METHOD/src/modules/bmm/_module-installer/installer.js

132 lines
5.0 KiB
JavaScript
Raw Normal View History

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 module.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
feat: Add documentation guides, simplify folder structure, and major workflow refactoring Created two comprehensive guides for v6 features: **docs/agent-customization-guide.md** - Complete guide for customizing agent names, personas, memories, and behaviors - Update-safe customization via bmad/_cfg/agents/ configuration files - Real-world examples (TDD setup, multilingual agents, custom workflows) - Troubleshooting and best practices **docs/web-bundles-gemini-gpt-guide.md** - Comprehensive guide for using BMad agents in Gemini Gems and Custom GPTs - Critical setup rules with exact configuration text required - Cost-saving strategy: web planning → local implementation (60-80% savings) - Platform comparison (Gemini Gems strongly recommended over Custom GPTs) - Complete workflow examples showing full planning-to-implementation cycle - Team bundle guidance (Gemini 2.5 Pro+ only) **README.md updates** - Added prominent links in v6 Core Enhancements section - Created new "Customization & Sharing" documentation category - Web Bundles feature highlighted with direct guide link **Unified output folder structure across all modules:** **Before (confusing):** - output_folder: Main docs - game_design_docs: Separate design folder - tech_docs: Separate technical folder - dev_ephemeral_location: Separate ephemeral folder outside docs **After (simplified):** - output_folder: Single location for ALL AI-generated artifacts (default: "docs") - Clearer prompt: "Where should AI Generated Artifacts be saved?" - sprint_artifacts: Phase 4 ephemeral content now WITHIN output_folder - BMM: {output_folder}/stories (stories, context, reports) - BMGD: {output_folder}/sprint-artifacts - No longer in separate {bmad_folder}-ephemeral location **Benefits:** - One clear location for all planning artifacts (PRD, Architecture, UX, etc.) - Phase 4 ephemeral items logically grouped within output folder - Eliminated confusing separate folder proliferation - sprint_artifacts now configurable per module **Files changed:** - src/core/_module-installer/install-config.yaml - src/modules/bmm/_module-installer/install-config.yaml - src/modules/bmgd/_module-installer/install-config.yaml **Also cleaned up BMGD config:** - Renamed: specified_framework → primary_platform (clearer naming) - Removed: unused data_path variable Replaced old "project_level" (0-4) system with new "selected_track" terminology: - **quick-flow**: Bug fixes and small features (replaces Level 0-1) - **bmad-method**: Full planning track (replaces Level 2-3) - **enterprise-bmad-method**: Extended planning (replaces Level 4) **Core workflow updates:** - solutioning-gate-check: Complete rewrite of validation logic for track-based artifacts - architecture: Updated context detection, error handling, and messaging for tracks - workflow-init: Updated artifact detection patterns for track-based paths - All workflow status paths updated (method-greenfield, method-brownfield, enterprise-*) Unified variable naming conventions across all workflows: - {output_folder} → {output-folder} (hyphenated format) - {dev_ephemeral_location} → {sprint_artifacts} (clearer purpose) - Hardcoded status file paths → {workflow_status_file} variable Fixed corrupted variable patterns throughout workflow files: - {output*folder} → {output-folder} - {ephemeral*location} → {sprint_artifacts} - \_prd* → *prd* (escaped underscore artifacts) - **\*\***\_\_\_**\*\*** → proper field placeholders Affected patterns included malformed glob patterns, template variables, and markdown formatting artifacts from previous edits. **Architecture workflow (create-architecture):** - Fixed: "Decision Architecture" → "Create Architecture" (consistent naming) - Improved PRD not found handling with exit/continue options - Better user guidance when running standalone vs. within workflow path - Removed hardcoded Level checks, now track-aware - Enhanced validation checklist formatting (□ → - []) - Typo fixes: "mulitple" → "multiple" **Solutioning gate check:** - Complete validation logic rewrite for track-based system - Removed Level-specific artifact expectations - Simplified document discovery (track determines what exists) - Better analysis prompts and user feedback **Workflow-init:** - Updated artifact detection patterns for new folder structure - Fixed corrupt glob patterns throughout - Better sprint_artifacts location detection - Improved workflow path assignment logic **Various workflows:** - Consistent variable naming across 40+ workflow files - Improved error messages and user guidance - Better markdown formatting (checkboxes, lists) - Removed redundant validation criteria files (now inline) Removed duplicate BMGD 4-production workflows (12 workflows): - code-review, correct-course, create-story, dev-story - epic-tech-context, retrospective, sprint-planning - story-context, story-done, story-ready **Why:** BMGD now uses shared BMM Phase 4 implementation workflows **Benefit:** Single source of truth, no duplication to maintain Also removed: - validation-criteria.yaml (validation now inline in instructions) - architecture-patterns.yaml references (patterns now managed differently) - AUDIT-REPORT.md files (stale audit artifacts) **BMB workflows:** - Updated checklists for workflow and module creation - Improved agent architecture documentation - Minor instruction clarifications **Core brainstorming workflow:** - Updated README with usage examples - Enhanced instructions and template clarity - Better integration with other modules **BMM installer:** - Updated for track-based system - sprint_artifacts configuration **Tech Writer agent:** - Minor configuration update for documentation workflows Removed 200+ files that should not be in repository: - Installed agent markdown files (analyst, architect, dev, pm, sm, tea, etc.) - Complete workflow instruction copies - Documentation duplicates (quick-start, agents-guide, workflows-*) - Test architecture knowledge base (22 files, 14,000+ lines) - Configuration files (config.yaml, team definitions) These are generated during installation and should not be version controlled. Removed 21 pre-generated XML bundles: - BMM agents (analyst, architect, dev, pm, sm, tea, tech-writer, ux-designer) - BMGD agents (game-architect, game-designer, game-dev, game-scrum-master) - CIS agents (brainstorming-coach, creative-problem-solver, etc.) - Team bundles (team-fullstack, team-gamedev, creative-squad) **Why:** Users should generate fresh bundles via `npm run bundle` to get latest changes and customizations. - **2 new documentation files** (comprehensive guides) - **98 source files modified** (299 insertions, 6,567 deletions) - **3 installer config files simplified** (major folder structure improvement) - **200+ .bmad/ artifacts removed** (should not be in repo) - **21 web-bundle files removed** (users regenerate as needed) - **12 duplicate workflows removed** (BMGD consolidation) - **40+ workflows updated** (track system, variable standardization, corruption fixes)
2025-11-11 12:22:31 -06:00
if (config['sprint_artifacts']) {
// Strip {project-root}/ prefix if present
feat: Add documentation guides, simplify folder structure, and major workflow refactoring Created two comprehensive guides for v6 features: **docs/agent-customization-guide.md** - Complete guide for customizing agent names, personas, memories, and behaviors - Update-safe customization via bmad/_cfg/agents/ configuration files - Real-world examples (TDD setup, multilingual agents, custom workflows) - Troubleshooting and best practices **docs/web-bundles-gemini-gpt-guide.md** - Comprehensive guide for using BMad agents in Gemini Gems and Custom GPTs - Critical setup rules with exact configuration text required - Cost-saving strategy: web planning → local implementation (60-80% savings) - Platform comparison (Gemini Gems strongly recommended over Custom GPTs) - Complete workflow examples showing full planning-to-implementation cycle - Team bundle guidance (Gemini 2.5 Pro+ only) **README.md updates** - Added prominent links in v6 Core Enhancements section - Created new "Customization & Sharing" documentation category - Web Bundles feature highlighted with direct guide link **Unified output folder structure across all modules:** **Before (confusing):** - output_folder: Main docs - game_design_docs: Separate design folder - tech_docs: Separate technical folder - dev_ephemeral_location: Separate ephemeral folder outside docs **After (simplified):** - output_folder: Single location for ALL AI-generated artifacts (default: "docs") - Clearer prompt: "Where should AI Generated Artifacts be saved?" - sprint_artifacts: Phase 4 ephemeral content now WITHIN output_folder - BMM: {output_folder}/stories (stories, context, reports) - BMGD: {output_folder}/sprint-artifacts - No longer in separate {bmad_folder}-ephemeral location **Benefits:** - One clear location for all planning artifacts (PRD, Architecture, UX, etc.) - Phase 4 ephemeral items logically grouped within output folder - Eliminated confusing separate folder proliferation - sprint_artifacts now configurable per module **Files changed:** - src/core/_module-installer/install-config.yaml - src/modules/bmm/_module-installer/install-config.yaml - src/modules/bmgd/_module-installer/install-config.yaml **Also cleaned up BMGD config:** - Renamed: specified_framework → primary_platform (clearer naming) - Removed: unused data_path variable Replaced old "project_level" (0-4) system with new "selected_track" terminology: - **quick-flow**: Bug fixes and small features (replaces Level 0-1) - **bmad-method**: Full planning track (replaces Level 2-3) - **enterprise-bmad-method**: Extended planning (replaces Level 4) **Core workflow updates:** - solutioning-gate-check: Complete rewrite of validation logic for track-based artifacts - architecture: Updated context detection, error handling, and messaging for tracks - workflow-init: Updated artifact detection patterns for track-based paths - All workflow status paths updated (method-greenfield, method-brownfield, enterprise-*) Unified variable naming conventions across all workflows: - {output_folder} → {output-folder} (hyphenated format) - {dev_ephemeral_location} → {sprint_artifacts} (clearer purpose) - Hardcoded status file paths → {workflow_status_file} variable Fixed corrupted variable patterns throughout workflow files: - {output*folder} → {output-folder} - {ephemeral*location} → {sprint_artifacts} - \_prd* → *prd* (escaped underscore artifacts) - **\*\***\_\_\_**\*\*** → proper field placeholders Affected patterns included malformed glob patterns, template variables, and markdown formatting artifacts from previous edits. **Architecture workflow (create-architecture):** - Fixed: "Decision Architecture" → "Create Architecture" (consistent naming) - Improved PRD not found handling with exit/continue options - Better user guidance when running standalone vs. within workflow path - Removed hardcoded Level checks, now track-aware - Enhanced validation checklist formatting (□ → - []) - Typo fixes: "mulitple" → "multiple" **Solutioning gate check:** - Complete validation logic rewrite for track-based system - Removed Level-specific artifact expectations - Simplified document discovery (track determines what exists) - Better analysis prompts and user feedback **Workflow-init:** - Updated artifact detection patterns for new folder structure - Fixed corrupt glob patterns throughout - Better sprint_artifacts location detection - Improved workflow path assignment logic **Various workflows:** - Consistent variable naming across 40+ workflow files - Improved error messages and user guidance - Better markdown formatting (checkboxes, lists) - Removed redundant validation criteria files (now inline) Removed duplicate BMGD 4-production workflows (12 workflows): - code-review, correct-course, create-story, dev-story - epic-tech-context, retrospective, sprint-planning - story-context, story-done, story-ready **Why:** BMGD now uses shared BMM Phase 4 implementation workflows **Benefit:** Single source of truth, no duplication to maintain Also removed: - validation-criteria.yaml (validation now inline in instructions) - architecture-patterns.yaml references (patterns now managed differently) - AUDIT-REPORT.md files (stale audit artifacts) **BMB workflows:** - Updated checklists for workflow and module creation - Improved agent architecture documentation - Minor instruction clarifications **Core brainstorming workflow:** - Updated README with usage examples - Enhanced instructions and template clarity - Better integration with other modules **BMM installer:** - Updated for track-based system - sprint_artifacts configuration **Tech Writer agent:** - Minor configuration update for documentation workflows Removed 200+ files that should not be in repository: - Installed agent markdown files (analyst, architect, dev, pm, sm, tea, etc.) - Complete workflow instruction copies - Documentation duplicates (quick-start, agents-guide, workflows-*) - Test architecture knowledge base (22 files, 14,000+ lines) - Configuration files (config.yaml, team definitions) These are generated during installation and should not be version controlled. Removed 21 pre-generated XML bundles: - BMM agents (analyst, architect, dev, pm, sm, tea, tech-writer, ux-designer) - BMGD agents (game-architect, game-designer, game-dev, game-scrum-master) - CIS agents (brainstorming-coach, creative-problem-solver, etc.) - Team bundles (team-fullstack, team-gamedev, creative-squad) **Why:** Users should generate fresh bundles via `npm run bundle` to get latest changes and customizations. - **2 new documentation files** (comprehensive guides) - **98 source files modified** (299 insertions, 6,567 deletions) - **3 installer config files simplified** (major folder structure improvement) - **200+ .bmad/ artifacts removed** (should not be in repo) - **21 web-bundle files removed** (users regenerate as needed) - **12 duplicate workflows removed** (BMGD consolidation) - **40+ workflows updated** (track system, variable standardization, corruption fixes)
2025-11-11 12:22:31 -06:00
const storyConfig = config['sprint_artifacts'].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 };