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:
@@ -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
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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');
|
||||||
}
|
}
|
||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user