moved bmad-core to dot folder so when adding to project it is clear its not part of the project it is added to

This commit is contained in:
Brian Madison
2025-06-13 19:11:17 -05:00
parent 03241a73d6
commit 7c71e1f815
86 changed files with 87 additions and 28247 deletions

View File

@@ -37,15 +37,15 @@ BMAD-METHOD (Breakthrough Method of AgileAI Driven Development) transforms softw
### Option 1: Web Bundles (No Installation) ### Option 1: Web Bundles (No Installation)
1. Download pre-built bundles from `bmad-core/web-bundles/` 1. Download pre-built bundles from `.bmad-core/web-bundles/`
2. Upload to ChatGPT or Gemini 2. Upload to ChatGPT or Gemini
3. Set instructions: "Your critical operating instructions are attached, you ARE the BMad Agent..." 3. Set instructions: "Your critical operating instructions are attached, you ARE the BMad Agent..."
4. Start with `/help` command if unsure what to do! 4. Start with `/help` command if unsure what to do!
### Option 2: IDE Integration ### Option 2: IDE Integration
1. Copy `bmad-core/` to project root 1. Copy `.bmad-core/` to project root
2. Use agents from `bmad-core/agents/` 2. Use agents from `.bmad-core/agents/`
3. Configure IDE slash commands 3. Configure IDE slash commands
### Option 3: Build Custom Bundles ### Option 3: Build Custom Bundles
@@ -71,7 +71,7 @@ npm run validate # Validate configurations
## Project Structure ## Project Structure
``` ```
bmad-core/ .bmad-core/
├── agents/ # Individual agent definitions ├── agents/ # Individual agent definitions
├── agent-teams/ # Team configurations ├── agent-teams/ # Team configurations
├── workflows/ # Development workflows ├── workflows/ # Development workflows

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -76,7 +76,7 @@ node tools/install-expansion-pack.js infrastructure
This will: This will:
1. Copy all files to their appropriate locations in `bmad-core/` 1. Copy all files to their appropriate locations in `.bmad-core/`
2. Update any necessary configurations 2. Update any necessary configurations
3. Make the DevOps agent available in teams 3. Make the DevOps agent available in teams

View File

@@ -7,33 +7,33 @@ author: BMAD Team
files: files:
# Agent configuration # Agent configuration
- source: agents/infra-devops-platform.yml - source: agents/infra-devops-platform.yml
destination: bmad-core/agents/infra-devops-platform.yml destination: .bmad-core/agents/infra-devops-platform.yml
# Persona definition # Persona definition
- source: personas/infra-devops-platform.md - source: personas/infra-devops-platform.md
destination: bmad-core/personas/infra-devops-platform.md destination: .bmad-core/personas/infra-devops-platform.md
# IDE agent configuration # IDE agent configuration
- source: ide-agents/infra-devops-platform.ide.md - source: ide-agents/infra-devops-platform.ide.md
destination: bmad-core/ide-agents/infra-devops-platform.ide.md destination: .bmad-core/ide-agents/infra-devops-platform.ide.md
# Templates # Templates
- source: templates/infrastructure-architecture-tmpl.md - source: templates/infrastructure-architecture-tmpl.md
destination: bmad-core/templates/infrastructure-architecture-tmpl.md destination: .bmad-core/templates/infrastructure-architecture-tmpl.md
- source: templates/infrastructure-platform-from-arch-tmpl.md - source: templates/infrastructure-platform-from-arch-tmpl.md
destination: bmad-core/templates/infrastructure-platform-from-arch-tmpl.md destination: .bmad-core/templates/infrastructure-platform-from-arch-tmpl.md
# Tasks # Tasks
- source: tasks/validate-infrastructure.md - source: tasks/validate-infrastructure.md
destination: bmad-core/tasks/validate-infrastructure.md destination: .bmad-core/tasks/validate-infrastructure.md
- source: tasks/review-infrastructure.md - source: tasks/review-infrastructure.md
destination: bmad-core/tasks/review-infrastructure.md destination: .bmad-core/tasks/review-infrastructure.md
# Checklists # Checklists
- source: checklists/infrastructure-checklist.md - source: checklists/infrastructure-checklist.md
destination: bmad-core/checklists/infrastructure-checklist.md destination: .bmad-core/checklists/infrastructure-checklist.md
# Team configurations to update (add devops agent) # Team configurations to update (add devops agent)
team_updates: team_updates:

View File

@@ -4,8 +4,8 @@
"description": "Breakthrough Method of Agile AI-driven Development", "description": "Breakthrough Method of Agile AI-driven Development",
"main": "tools/cli.js", "main": "tools/cli.js",
"bin": { "bin": {
"bmad": "./bmad.js", "bmad": "./tools/bmad-npx-wrapper.js",
"bmad-method": "./bmad.js" "bmad-method": "./tools/bmad-npx-wrapper.js"
}, },
"scripts": { "scripts": {
"build": "node tools/cli.js build", "build": "node tools/cli.js build",

View File

@@ -14,8 +14,8 @@ const isNpxExecution = __dirname.includes('_npx') || __dirname.includes('.npm');
// If running via npx, we need to handle things differently // If running via npx, we need to handle things differently
if (isNpxExecution) { if (isNpxExecution) {
// The actual bmad.js is in tools/installer/bin/ // The actual bmad.js is in installer/bin/ (relative to tools directory)
const bmadScriptPath = path.join(__dirname, 'tools', 'installer', 'bin', 'bmad.js'); const bmadScriptPath = path.join(__dirname, 'installer', 'bin', 'bmad.js');
// Verify the file exists // Verify the file exists
if (!fs.existsSync(bmadScriptPath)) { if (!fs.existsSync(bmadScriptPath)) {
@@ -28,7 +28,7 @@ if (isNpxExecution) {
try { try {
execSync(`node "${bmadScriptPath}" ${process.argv.slice(2).join(' ')}`, { execSync(`node "${bmadScriptPath}" ${process.argv.slice(2).join(' ')}`, {
stdio: 'inherit', stdio: 'inherit',
cwd: __dirname cwd: path.dirname(__dirname)
}); });
} catch (error) { } catch (error) {
// execSync will throw if the command exits with non-zero // execSync will throw if the command exits with non-zero
@@ -37,5 +37,5 @@ if (isNpxExecution) {
} }
} else { } else {
// Local execution - just require the installer directly // Local execution - just require the installer directly
require('./tools/installer/bin/bmad.js'); require('./installer/bin/bmad.js');
} }

View File

@@ -7,10 +7,10 @@ class WebBuilder {
this.rootDir = options.rootDir || process.cwd(); this.rootDir = options.rootDir || process.cwd();
this.outputDirs = options.outputDirs || [ this.outputDirs = options.outputDirs || [
path.join(this.rootDir, 'dist'), path.join(this.rootDir, 'dist'),
path.join(this.rootDir, 'bmad-core', 'web-bundles') path.join(this.rootDir, '.bmad-core', 'web-bundles')
]; ];
this.resolver = new DependencyResolver(this.rootDir); this.resolver = new DependencyResolver(this.rootDir);
this.templatePath = path.join(this.rootDir, 'bmad-core', 'templates', 'web-agent-startup-instructions-template.md'); this.templatePath = path.join(this.rootDir, '.bmad-core', 'templates', 'web-agent-startup-instructions-template.md');
} }
async cleanOutputDirs() { async cleanOutputDirs() {

View File

@@ -34,7 +34,7 @@ program
program program
.command('install') .command('install')
.description('Install BMAD Method agents and tools') .description('Install BMAD Method agents and tools')
.option('-f, --full', 'Install complete bmad-core folder') .option('-f, --full', 'Install complete .bmad-core folder')
.option('-a, --agent <agent>', 'Install specific agent with dependencies') .option('-a, --agent <agent>', 'Install specific agent with dependencies')
.option('-d, --directory <path>', 'Installation directory (default: ./bmad-core)') .option('-d, --directory <path>', 'Installation directory (default: ./bmad-core)')
.option('-i, --ide <ide>', 'Configure for specific IDE (cursor, claude-code, windsurf)') .option('-i, --ide <ide>', 'Configure for specific IDE (cursor, claude-code, windsurf)')
@@ -49,7 +49,7 @@ program
const config = { const config = {
installType: options.full ? 'full' : 'single-agent', installType: options.full ? 'full' : 'single-agent',
agent: options.agent, agent: options.agent,
directory: options.directory || './bmad-core', directory: options.directory || './.bmad-core',
ide: options.ide ide: options.ide
}; };
await installer.install(config); await installer.install(config);
@@ -109,7 +109,7 @@ async function promptInstallation(options) {
type: 'input', type: 'input',
name: 'directory', name: 'directory',
message: 'Where would you like to install BMAD?', message: 'Where would you like to install BMAD?',
default: './bmad-core' default: './.bmad-core'
} }
]); ]);
answers.directory = directory; answers.directory = directory;

View File

@@ -4,9 +4,9 @@
installation-options: installation-options:
full: full:
name: "Complete BMAD Core" name: "Complete BMAD Core"
description: "Copy the entire bmad-core folder with all agents, templates, and tools" description: "Copy the entire .bmad-core folder with all agents, templates, and tools"
action: "copy-folder" action: "copy-folder"
source: "bmad-core" source: ".bmad-core"
single-agent: single-agent:
name: "Single Agent" name: "Single Agent"
@@ -17,53 +17,53 @@ installation-options:
# These are the core files that should be included with any single agent installation # These are the core files that should be included with any single agent installation
agent-dependencies: agent-dependencies:
core-files: core-files:
- "bmad-core/data/bmad-kb.md" - ".bmad-core/data/bmad-kb.md"
- "bmad-core/data/technical-preferences.md" - ".bmad-core/data/technical-preferences.md"
- "bmad-core/utils/template-format.md" - ".bmad-core/utils/template-format.md"
# Agent-specific dependencies (parsed from agent files or explicitly defined) # Agent-specific dependencies (parsed from agent files or explicitly defined)
dev: dev:
- "bmad-core/templates/story-tmpl.md" - ".bmad-core/templates/story-tmpl.md"
- "bmad-core/checklists/story-dod-checklist.md" - ".bmad-core/checklists/story-dod-checklist.md"
pm: pm:
- "bmad-core/templates/prd-tmpl.md" - ".bmad-core/templates/prd-tmpl.md"
- "bmad-core/checklists/pm-checklist.md" - ".bmad-core/checklists/pm-checklist.md"
- "bmad-core/tasks/advanced-elicitation.md" - ".bmad-core/tasks/advanced-elicitation.md"
architect: architect:
- "bmad-core/templates/architecture-tmpl.md" - ".bmad-core/templates/architecture-tmpl.md"
- "bmad-core/checklists/architect-checklist.md" - ".bmad-core/checklists/architect-checklist.md"
sm: sm:
- "bmad-core/templates/story-tmpl.md" - ".bmad-core/templates/story-tmpl.md"
- "bmad-core/checklists/story-draft-checklist.md" - ".bmad-core/checklists/story-draft-checklist.md"
- "bmad-core/workflows/*.yml" - ".bmad-core/workflows/*.yml"
po: po:
- "bmad-core/checklists/po-master-checklist.md" - ".bmad-core/checklists/po-master-checklist.md"
- "bmad-core/templates/acceptance-criteria-tmpl.md" - ".bmad-core/templates/acceptance-criteria-tmpl.md"
analyst: analyst:
- "bmad-core/templates/prd-tmpl.md" - ".bmad-core/templates/prd-tmpl.md"
- "bmad-core/tasks/advanced-elicitation.md" - ".bmad-core/tasks/advanced-elicitation.md"
qa: qa:
- "bmad-core/checklists/story-dod-checklist.md" - ".bmad-core/checklists/story-dod-checklist.md"
- "bmad-core/templates/test-plan-tmpl.md" - ".bmad-core/templates/test-plan-tmpl.md"
ux-expert: ux-expert:
- "bmad-core/templates/ux-tmpl.md" - ".bmad-core/templates/ux-tmpl.md"
# Meta agents typically need access to more resources # Meta agents typically need access to more resources
bmad-master: bmad-master:
- "bmad-core/templates/*.md" - ".bmad-core/templates/*.md"
- "bmad-core/tasks/*.md" - ".bmad-core/tasks/*.md"
- "bmad-core/schemas/*.yml" - ".bmad-core/schemas/*.yml"
bmad-orchestrator: bmad-orchestrator:
- "bmad-core/agent-teams/*.yml" - ".bmad-core/agent-teams/*.yml"
- "bmad-core/workflows/*.yml" - ".bmad-core/workflows/*.yml"
# IDE-specific configuration for generating rules/commands # IDE-specific configuration for generating rules/commands
ide-configurations: ide-configurations:
@@ -118,50 +118,50 @@ ide-configurations:
available-agents: available-agents:
- id: "analyst" - id: "analyst"
name: "Business Analyst" name: "Business Analyst"
file: "bmad-core/agents/analyst.md" file: ".bmad-core/agents/analyst.md"
description: "Requirements gathering and analysis" description: "Requirements gathering and analysis"
- id: "pm" - id: "pm"
name: "Product Manager" name: "Product Manager"
file: "bmad-core/agents/pm.md" file: ".bmad-core/agents/pm.md"
description: "Product strategy and roadmap planning" description: "Product strategy and roadmap planning"
- id: "architect" - id: "architect"
name: "Solution Architect" name: "Solution Architect"
file: "bmad-core/agents/architect.md" file: ".bmad-core/agents/architect.md"
description: "Technical design and architecture" description: "Technical design and architecture"
- id: "po" - id: "po"
name: "Product Owner" name: "Product Owner"
file: "bmad-core/agents/po.md" file: ".bmad-core/agents/po.md"
description: "Backlog management and prioritization" description: "Backlog management and prioritization"
- id: "sm" - id: "sm"
name: "Scrum Master" name: "Scrum Master"
file: "bmad-core/agents/sm.md" file: ".bmad-core/agents/sm.md"
description: "Agile process and story creation" description: "Agile process and story creation"
- id: "dev" - id: "dev"
name: "Developer" name: "Developer"
file: "bmad-core/agents/dev.md" file: ".bmad-core/agents/dev.md"
description: "Code implementation and testing" description: "Code implementation and testing"
- id: "qa" - id: "qa"
name: "QA Engineer" name: "QA Engineer"
file: "bmad-core/agents/qa.md" file: ".bmad-core/agents/qa.md"
description: "Quality assurance and testing" description: "Quality assurance and testing"
- id: "ux-expert" - id: "ux-expert"
name: "UX Expert" name: "UX Expert"
file: "bmad-core/agents/ux-expert.md" file: ".bmad-core/agents/ux-expert.md"
description: "User experience design" description: "User experience design"
- id: "bmad-master" - id: "bmad-master"
name: "BMAD Master" name: "BMAD Master"
file: "bmad-core/agents/bmad-master.md" file: ".bmad-core/agents/bmad-master.md"
description: "BMAD framework expert and guide" description: "BMAD framework expert and guide"
- id: "bmad-orchestrator" - id: "bmad-orchestrator"
name: "BMAD Orchestrator" name: "BMAD Orchestrator"
file: "bmad-core/agents/bmad-orchestrator.md" file: ".bmad-core/agents/bmad-orchestrator.md"
description: "Multi-agent workflow coordinator" description: "Multi-agent workflow coordinator"

View File

@@ -50,8 +50,8 @@ class ConfigLoader {
} }
getBmadCorePath() { getBmadCorePath() {
// Get the path to bmad-core relative to the installer (now under tools) // Get the path to .bmad-core relative to the installer (now under tools)
return path.join(__dirname, '..', '..', '..', 'bmad-core'); return path.join(__dirname, '..', '..', '..', '.bmad-core');
} }
getAgentPath(agentId) { getAgentPath(agentId) {

View File

@@ -32,8 +32,8 @@ class IdeSetup {
await fileManager.ensureDirectory(cursorRulesDir); await fileManager.ensureDirectory(cursorRulesDir);
for (const agentId of agents) { for (const agentId of agents) {
// Check if bmad-core is a subdirectory (full install) or if agents are in root (single agent install) // Check if .bmad-core is a subdirectory (full install) or if agents are in root (single agent install)
let agentPath = path.join(installDir, 'bmad-core', 'agents', `${agentId}.md`); let agentPath = path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`);
if (!await fileManager.pathExists(agentPath)) { if (!await fileManager.pathExists(agentPath)) {
agentPath = path.join(installDir, 'agents', `${agentId}.md`); agentPath = path.join(installDir, 'agents', `${agentId}.md`);
} }
@@ -63,7 +63,7 @@ class IdeSetup {
} }
mdcContent += '\n```\n\n'; mdcContent += '\n```\n\n';
mdcContent += '## File Reference\n\n'; mdcContent += '## File Reference\n\n';
mdcContent += `The complete agent definition is available in [bmad-core/agents/${agentId}.md](mdc:bmad-core/agents/${agentId}.md).\n\n`; mdcContent += `The complete agent definition is available in [.bmad-core/agents/${agentId}.md](mdc:.bmad-core/agents/${agentId}.md).\n\n`;
mdcContent += '## Usage\n\n'; mdcContent += '## Usage\n\n';
mdcContent += `When the user types \`@${agentId}\`, activate this ${this.getAgentTitle(agentId)} persona and follow all instructions defined in the YML configuration above.\n`; mdcContent += `When the user types \`@${agentId}\`, activate this ${this.getAgentTitle(agentId)} persona and follow all instructions defined in the YML configuration above.\n`;
@@ -84,8 +84,8 @@ class IdeSetup {
await fileManager.ensureDirectory(commandsDir); await fileManager.ensureDirectory(commandsDir);
for (const agentId of agents) { for (const agentId of agents) {
// Check if bmad-core is a subdirectory (full install) or if agents are in root (single agent install) // Check if .bmad-core is a subdirectory (full install) or if agents are in root (single agent install)
let agentPath = path.join(installDir, 'bmad-core', 'agents', `${agentId}.md`); let agentPath = path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`);
if (!await fileManager.pathExists(agentPath)) { if (!await fileManager.pathExists(agentPath)) {
agentPath = path.join(installDir, 'agents', `${agentId}.md`); agentPath = path.join(installDir, 'agents', `${agentId}.md`);
} }
@@ -117,8 +117,8 @@ class IdeSetup {
await fileManager.ensureDirectory(windsurfRulesDir); await fileManager.ensureDirectory(windsurfRulesDir);
for (const agentId of agents) { for (const agentId of agents) {
// Check if bmad-core is a subdirectory (full install) or if agents are in root (single agent install) // Check if .bmad-core is a subdirectory (full install) or if agents are in root (single agent install)
let agentPath = path.join(installDir, 'bmad-core', 'agents', `${agentId}.md`); let agentPath = path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`);
if (!await fileManager.pathExists(agentPath)) { if (!await fileManager.pathExists(agentPath)) {
agentPath = path.join(installDir, 'agents', `${agentId}.md`); agentPath = path.join(installDir, 'agents', `${agentId}.md`);
} }
@@ -143,7 +143,7 @@ class IdeSetup {
} }
mdContent += '\n```\n\n'; mdContent += '\n```\n\n';
mdContent += '## File Reference\n\n'; mdContent += '## File Reference\n\n';
mdContent += `The complete agent definition is available in [bmad-core/agents/${agentId}.md](bmad-core/agents/${agentId}.md).\n\n`; mdContent += `The complete agent definition is available in [.bmad-core/agents/${agentId}.md](.bmad-core/agents/${agentId}.md).\n\n`;
mdContent += '## Usage\n\n'; mdContent += '## Usage\n\n';
mdContent += `When the user types \`@${agentId}\`, activate this ${this.getAgentTitle(agentId)} persona and follow all instructions defined in the YML configuration above.\n`; mdContent += `When the user types \`@${agentId}\`, activate this ${this.getAgentTitle(agentId)} persona and follow all instructions defined in the YML configuration above.\n`;
@@ -158,8 +158,8 @@ class IdeSetup {
} }
async getAllAgentIds(installDir) { async getAllAgentIds(installDir) {
// Check if bmad-core is a subdirectory (full install) or if agents are in root (single agent install) // Check if .bmad-core is a subdirectory (full install) or if agents are in root (single agent install)
let agentsDir = path.join(installDir, 'bmad-core', 'agents'); let agentsDir = path.join(installDir, '.bmad-core', 'agents');
if (!await fileManager.pathExists(agentsDir)) { if (!await fileManager.pathExists(agentsDir)) {
agentsDir = path.join(installDir, 'agents'); agentsDir = path.join(installDir, 'agents');
} }

View File

@@ -26,10 +26,10 @@ class Installer {
let files = []; let files = [];
if (config.installType === 'full') { if (config.installType === 'full') {
// Full installation - copy entire bmad-core folder as a subdirectory // Full installation - copy entire .bmad-core folder as a subdirectory
spinner.text = 'Copying complete bmad-core folder...'; spinner.text = 'Copying complete .bmad-core folder...';
const sourceDir = configLoader.getBmadCorePath(); const sourceDir = configLoader.getBmadCorePath();
const bmadCoreDestDir = path.join(installDir, 'bmad-core'); const bmadCoreDestDir = path.join(installDir, '.bmad-core');
await fileManager.copyDirectory(sourceDir, bmadCoreDestDir); await fileManager.copyDirectory(sourceDir, bmadCoreDestDir);
// Get list of all files for manifest // Get list of all files for manifest
@@ -38,7 +38,7 @@ class Installer {
cwd: bmadCoreDestDir, cwd: bmadCoreDestDir,
nodir: true, nodir: true,
ignore: ['**/.git/**', '**/node_modules/**'] ignore: ['**/.git/**', '**/node_modules/**']
}).map(file => path.join('bmad-core', file)); }).map(file => path.join('.bmad-core', file));
} else if (config.installType === 'single-agent') { } else if (config.installType === 'single-agent') {
// Single agent installation // Single agent installation
@@ -60,18 +60,18 @@ class Installer {
if (dep.includes('*')) { if (dep.includes('*')) {
// Handle glob patterns // Handle glob patterns
const copiedFiles = await fileManager.copyGlobPattern( const copiedFiles = await fileManager.copyGlobPattern(
dep.replace('bmad-core/', ''), dep.replace('.bmad-core/', ''),
sourceBase, sourceBase,
installDir installDir
); );
files.push(...copiedFiles); files.push(...copiedFiles);
} else { } else {
// Handle single files // Handle single files
const sourcePath = path.join(sourceBase, dep.replace('bmad-core/', '')); const sourcePath = path.join(sourceBase, dep.replace('.bmad-core/', ''));
const destPath = path.join(installDir, dep.replace('bmad-core/', '')); const destPath = path.join(installDir, dep.replace('.bmad-core/', ''));
if (await fileManager.copyFile(sourcePath, destPath)) { if (await fileManager.copyFile(sourcePath, destPath)) {
files.push(dep.replace('bmad-core/', '')); files.push(dep.replace('.bmad-core/', ''));
} }
} }
} }
@@ -80,7 +80,7 @@ class Installer {
// Set up IDE integration if requested // Set up IDE integration if requested
if (config.ide) { if (config.ide) {
spinner.text = `Setting up ${config.ide} integration...`; spinner.text = `Setting up ${config.ide} integration...`;
// For full installations, IDE rules should be in the root install dir, not bmad-core // For full installations, IDE rules should be in the root install dir, not .bmad-core
await ideSetup.setup(config.ide, installDir, config.agent); await ideSetup.setup(config.ide, installDir, config.agent);
} }
@@ -240,11 +240,11 @@ class Installer {
} }
async findInstallation() { async findInstallation() {
// Look for bmad-core in current directory or parent directories // Look for .bmad-core in current directory or parent directories
let currentDir = process.cwd(); let currentDir = process.cwd();
while (currentDir !== path.dirname(currentDir)) { while (currentDir !== path.dirname(currentDir)) {
const bmadDir = path.join(currentDir, 'bmad-core'); const bmadDir = path.join(currentDir, '.bmad-core');
const manifestPath = path.join(bmadDir, '.bmad', 'install-manifest.yml'); const manifestPath = path.join(bmadDir, '.bmad', 'install-manifest.yml');
if (await fileManager.pathExists(manifestPath)) { if (await fileManager.pathExists(manifestPath)) {
@@ -254,8 +254,8 @@ class Installer {
currentDir = path.dirname(currentDir); currentDir = path.dirname(currentDir);
} }
// Also check if we're inside a bmad-core directory // Also check if we're inside a .bmad-core directory
if (path.basename(process.cwd()) === 'bmad-core') { if (path.basename(process.cwd()) === '.bmad-core') {
const manifestPath = path.join(process.cwd(), '.bmad', 'install-manifest.yml'); const manifestPath = path.join(process.cwd(), '.bmad', 'install-manifest.yml');
if (await fileManager.pathExists(manifestPath)) { if (await fileManager.pathExists(manifestPath)) {
return process.cwd(); return process.cwd();

View File

@@ -5,7 +5,7 @@ const yaml = require('js-yaml');
class DependencyResolver { class DependencyResolver {
constructor(rootDir) { constructor(rootDir) {
this.rootDir = rootDir; this.rootDir = rootDir;
this.bmadCore = path.join(rootDir, 'bmad-core'); this.bmadCore = path.join(rootDir, '.bmad-core');
this.cache = new Map(); this.cache = new Map();
} }