diff --git a/.vscode/settings.json b/.vscode/settings.json index b7abf49d..3af293ba 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -41,6 +41,7 @@ "rescope", "roadmaps", "roleplay", + "roomodes", "runbooks", "Serilog", "shadcn", diff --git a/README.md b/README.md index 4d9fee77..4f70ae59 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,7 @@ npm install ## Documentation & Guides ### Workflow Guides + - 📚 [Universal BMAD Workflow Guide](docs/bmad-workflow-guide.md) - Core workflow that applies to all IDEs - 🎯 [Cursor Guide](docs/cursor-guide.md) - Complete workflow for Cursor users - 🤖 [Claude Code Guide](docs/claude-code-guide.md) - Complete workflow for Claude Code users diff --git a/tools/builders/web-builder.js b/tools/builders/web-builder.js index 0116dea9..c4bc941e 100644 --- a/tools/builders/web-builder.js +++ b/tools/builders/web-builder.js @@ -1,5 +1,5 @@ -const fs = require('fs').promises; -const path = require('path'); +const fs = require('node:fs').promises; +const path = require('node:path'); const DependencyResolver = require('../lib/dependency-resolver'); class WebBuilder { @@ -19,6 +19,7 @@ class WebBuilder { await fs.rm(dir, { recursive: true, force: true }); console.log(`Cleaned: ${path.relative(this.rootDir, dir)}`); } catch (error) { + console.debug(`Failed to clean directory ${dir}:`, error.message); // Directory might not exist, that's fine } } @@ -26,11 +27,11 @@ class WebBuilder { async buildAgents() { const agents = await this.resolver.listAgents(); - + for (const agentId of agents) { console.log(` Building agent: ${agentId}`); const bundle = await this.buildAgentBundle(agentId); - + // Write to all output directories for (const outputDir of this.outputDirs) { const outputPath = path.join(outputDir, 'agents'); @@ -45,11 +46,11 @@ class WebBuilder { async buildTeams() { const teams = await this.resolver.listTeams(); - + for (const teamId of teams) { console.log(` Building team: ${teamId}`); const bundle = await this.buildTeamBundle(teamId); - + // Write to all output directories for (const outputDir of this.outputDirs) { const outputPath = path.join(outputDir, 'teams'); @@ -65,39 +66,39 @@ class WebBuilder { async buildAgentBundle(agentId) { const dependencies = await this.resolver.resolveAgentDependencies(agentId); const template = await fs.readFile(this.templatePath, 'utf8'); - + const sections = [template]; - + // Add agent configuration sections.push(this.formatSection(dependencies.agent.path, dependencies.agent.content)); - + // Add all dependencies for (const resource of dependencies.resources) { sections.push(this.formatSection(resource.path, resource.content)); } - + return sections.join('\n'); } async buildTeamBundle(teamId) { const dependencies = await this.resolver.resolveTeamDependencies(teamId); const template = await fs.readFile(this.templatePath, 'utf8'); - + const sections = [template]; - + // Add team configuration sections.push(this.formatSection(dependencies.team.path, dependencies.team.content)); - + // Add all agents for (const agent of dependencies.agents) { sections.push(this.formatSection(agent.path, agent.content)); } - + // Add all deduplicated resources for (const resource of dependencies.resources) { sections.push(this.formatSection(resource.path, resource.content)); } - + return sections.join('\n'); } diff --git a/tools/installer/bin/bmad.js b/tools/installer/bin/bmad.js index b8565a24..3381d4ed 100755 --- a/tools/installer/bin/bmad.js +++ b/tools/installer/bin/bmad.js @@ -3,16 +3,17 @@ const { program } = require('commander'); const inquirer = require('inquirer'); const chalk = require('chalk'); -const path = require('path'); // Handle both execution contexts (from root via npx or from installer directory) -let version, installer; +let version; +let installer; try { // Try installer context first (when run from tools/installer/) version = require('../package.json').version; installer = require('../lib/installer'); } catch (e) { // Fall back to root context (when run via npx from GitHub) + console.log(chalk.yellow(`Installer context not found (${e.message}), trying root context...`)); try { version = require('../../../package.json').version; installer = require('../../../tools/installer/lib/installer'); @@ -42,7 +43,7 @@ program try { if (!options.full && !options.agent) { // Interactive mode - const answers = await promptInstallation(options); + const answers = await promptInstallation(); await installer.install(answers); } else { // Direct mode @@ -98,11 +99,11 @@ program } }); -async function promptInstallation(options) { +async function promptInstallation() { console.log(chalk.bold.blue(`\nWelcome to BMAD Method Installer v${version}\n`)); - + const answers = {}; - + // Ask for installation directory const { directory } = await inquirer.prompt([ { @@ -113,7 +114,7 @@ async function promptInstallation(options) { } ]); answers.directory = directory; - + // Ask for installation type const { installType } = await inquirer.prompt([ { @@ -133,7 +134,7 @@ async function promptInstallation(options) { } ]); answers.installType = installType; - + // If single agent, ask which one if (installType === 'single-agent') { const agents = await installer.getAvailableAgents(); @@ -150,7 +151,7 @@ async function promptInstallation(options) { ]); answers.agent = agent; } - + // Ask for IDE configuration const { ide } = await inquirer.prompt([ { @@ -167,7 +168,7 @@ async function promptInstallation(options) { } ]); answers.ide = ide; - + return answers; }