bmad-method 4.2.0 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/analyst.md +14 -20
- package/.claude/commands/architect.md +15 -20
- package/.claude/commands/bmad-master.md +18 -26
- package/.claude/commands/bmad-orchestrator.md +80 -33
- package/.claude/commands/dev.md +5 -4
- package/.claude/commands/pm.md +11 -16
- package/.claude/commands/sm.md +20 -25
- package/.cursor/rules/analyst.mdc +13 -19
- package/.cursor/rules/architect.mdc +14 -19
- package/.cursor/rules/bmad-master.mdc +18 -26
- package/.cursor/rules/bmad-orchestrator.mdc +80 -33
- package/.cursor/rules/dev.mdc +5 -4
- package/.cursor/rules/pm.mdc +11 -16
- package/.cursor/rules/sm.mdc +19 -24
- package/.releaserc.json +2 -1
- package/.roo/README.md +0 -11
- package/.vscode/settings.json +4 -0
- package/.windsurf/rules/analyst.md +13 -19
- package/.windsurf/rules/architect.md +14 -19
- package/.windsurf/rules/bmad-master.md +18 -26
- package/.windsurf/rules/bmad-orchestrator.md +80 -33
- package/.windsurf/rules/dev.md +5 -4
- package/.windsurf/rules/pm.md +11 -16
- package/.windsurf/rules/sm.md +19 -24
- package/CHANGELOG.md +126 -2
- package/CONTRIBUTING.md +2 -0
- package/README.md +20 -2
- package/{.bmad-core → bmad-core}/agent-teams/team-all.yml +1 -3
- package/bmad-core/agent-teams/team-fullstack.yml +18 -0
- package/{.bmad-core → bmad-core}/agent-teams/team-no-ui.yml +0 -2
- package/{.bmad-core → bmad-core}/agents/analyst.md +14 -20
- package/{.bmad-core → bmad-core}/agents/architect.md +15 -20
- package/{.bmad-core → bmad-core}/agents/bmad-master.md +18 -26
- package/bmad-core/agents/bmad-orchestrator.md +128 -0
- package/{.bmad-core → bmad-core}/agents/dev.md +5 -4
- package/{.bmad-core → bmad-core}/agents/pm.md +11 -16
- package/{.bmad-core → bmad-core}/agents/qa.md +11 -17
- package/bmad-core/agents/sm.md +55 -0
- package/{.bmad-core → bmad-core}/agents/ux-expert.md +14 -20
- package/bmad-core/bmad-core-config.yml +60 -0
- package/bmad-core/data/bmad-kb.md +47 -0
- package/bmad-core/tasks/doc-migration-task.md +143 -0
- package/bmad-core/tasks/document-project.md +389 -0
- package/bmad-core/tasks/generate-ai-frontend-prompt.md +51 -0
- package/{.bmad-core → bmad-core}/tasks/index-docs.md +8 -3
- package/{.bmad-core → bmad-core}/tasks/shard-doc.md +5 -3
- package/{.bmad-core → bmad-core}/templates/architecture-tmpl.md +16 -13
- package/{.bmad-core → bmad-core}/templates/brownfield-architecture-tmpl.md +6 -6
- package/{.bmad-core → bmad-core}/templates/front-end-spec-tmpl.md +6 -6
- package/{.bmad-core → bmad-core}/templates/fullstack-architecture-tmpl.md +85 -103
- package/{.bmad-core → bmad-core}/templates/prd-tmpl.md +1 -1
- package/bmad-core/templates/simple-project-prd-tmpl.md +461 -0
- package/{.bmad-core → bmad-core}/templates/story-tmpl.md +2 -2
- package/{.bmad-core → bmad-core}/utils/agent-switcher.ide.md +6 -6
- package/{.bmad-core → bmad-core}/utils/workflow-management.md +14 -15
- package/{.bmad-core → bmad-core}/web-bundles/agents/analyst.txt +26 -21
- package/{.bmad-core → bmad-core}/web-bundles/agents/architect.txt +608 -236
- package/{.bmad-core → bmad-core}/web-bundles/agents/bmad-master.txt +467 -1049
- package/bmad-core/web-bundles/agents/bmad-orchestrator.txt +647 -0
- package/{.bmad-core → bmad-core}/web-bundles/agents/dev.txt +5 -4
- package/{.bmad-core → bmad-core}/web-bundles/agents/pm.txt +477 -18
- package/{.bmad-core → bmad-core}/web-bundles/agents/po.txt +3 -3
- package/{.bmad-core → bmad-core}/web-bundles/agents/qa.txt +11 -17
- package/{.bmad-core → bmad-core}/web-bundles/agents/sm.txt +22 -27
- package/{.bmad-core → bmad-core}/web-bundles/agents/ux-expert.txt +57 -70
- package/{.bmad-core → bmad-core}/workflows/greenfield-fullstack.yml +3 -3
- package/{.bmad-core → creator-tools}/tasks/create-agent.md +10 -12
- package/{.bmad-core/tasks/create-expansion-pack.md → creator-tools/tasks/generate-expansion-pack.md} +8 -6
- package/docs/bmad-workflow-guide.md +161 -0
- package/docs/claude-code-guide.md +119 -0
- package/docs/core-architecture.md +213 -0
- package/docs/cursor-guide.md +127 -0
- package/docs/how-to-contribute-with-pull-requests.md +141 -0
- package/docs/roo-code-guide.md +140 -0
- package/docs/user-guide.md +1044 -0
- package/docs/versioning-and-releases.md +4 -4
- package/docs/windsurf-guide.md +127 -0
- package/expansion-packs/README.md +1 -111
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/team-game-dev.yml +12 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +58 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +66 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +51 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +201 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +160 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +254 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +631 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/manifest.yml +45 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +111 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +216 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +308 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.md +560 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.md +345 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.md +331 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.md +235 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.md +451 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-designer.txt +1758 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-developer.txt +1444 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-sm.txt +674 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/team-game-dev.txt +4395 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/teams/team-game-dev.txt +4395 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yml +183 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yml +175 -0
- package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/README.md +5 -5
- package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/agents/infra-devops-platform.md +3 -3
- package/expansion-packs/bmad-infrastructure-devops/manifest.yml +23 -0
- package/expansion-packs/bmad-infrastructure-devops/tasks/create-doc.md +74 -0
- package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
- package/expansion-packs/bmad-infrastructure-devops/web-bundles/agents/infra-devops-platform.txt +2021 -0
- package/package.json +20 -14
- package/tools/builders/web-builder.js +207 -17
- package/tools/cli.js +55 -7
- package/tools/installer/README.md +2 -2
- package/tools/installer/bin/bmad.js +107 -28
- package/tools/installer/config/install.config.yml +43 -43
- package/tools/installer/lib/config-loader.js +39 -2
- package/tools/installer/lib/file-manager.js +20 -3
- package/tools/installer/lib/ide-setup.js +11 -1
- package/tools/installer/lib/installer.js +275 -29
- package/tools/installer/package-lock.json +538 -336
- package/tools/installer/package.json +8 -8
- package/tools/lib/dependency-resolver.js +2 -2
- package/tools/semantic-release-sync-installer.js +31 -0
- package/tools/sync-installer-version.js +34 -0
- package/tools/upgraders/v3-to-v4-upgrader.js +18 -13
- package/tools/version-bump.js +33 -26
- package/tools/yaml-format.js +54 -25
- package/.bmad-core/agent-teams/team-fullstack.yml +0 -26
- package/.bmad-core/agents/bmad-orchestrator.md +0 -81
- package/.bmad-core/agents/sm.md +0 -60
- package/.bmad-core/data/bmad-kb.md +0 -36
- package/.bmad-core/schemas/agent-team-schema.yml +0 -153
- package/.bmad-core/tasks/create-team.md +0 -229
- package/.bmad-core/tasks/doc-migration-task.md +0 -198
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -58
- package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +0 -1455
- package/.bmad-core/web-bundles/teams/team-all.txt +0 -10315
- package/.bmad-core/web-bundles/teams/team-fullstack.txt +0 -9663
- package/.bmad-core/web-bundles/teams/team-no-ui.txt +0 -8504
- package/.claude/settings.local.json +0 -22
- package/expansion-packs/infrastructure-devops/manifest.yml +0 -38
- /package/{.bmad-core → bmad-core}/agents/po.md +0 -0
- /package/{.bmad-core → bmad-core}/checklists/architect-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/checklists/change-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/checklists/pm-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/checklists/po-master-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/checklists/story-dod-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/checklists/story-draft-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/data/technical-preferences.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/advanced-elicitation.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/brainstorming-techniques.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/brownfield-create-epic.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/brownfield-create-story.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/core-dump.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/correct-course.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/create-deep-research-prompt.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/create-doc.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/create-next-story.md +0 -0
- /package/{.bmad-core → bmad-core}/tasks/execute-checklist.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/agent-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/brownfield-prd-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/competitor-analysis-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/expansion-pack-plan-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/front-end-architecture-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/market-research-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/project-brief-tmpl.md +0 -0
- /package/{.bmad-core → bmad-core}/templates/web-agent-startup-instructions-template.md +0 -0
- /package/{.bmad-core → bmad-core}/utils/template-format.md +0 -0
- /package/{.bmad-core → bmad-core}/workflows/brownfield-fullstack.yml +0 -0
- /package/{.bmad-core → bmad-core}/workflows/brownfield-service.yml +0 -0
- /package/{.bmad-core → bmad-core}/workflows/brownfield-ui.yml +0 -0
- /package/{.bmad-core → bmad-core}/workflows/greenfield-service.yml +0 -0
- /package/{.bmad-core → bmad-core}/workflows/greenfield-ui.yml +0 -0
- /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/checklists/infrastructure-checklist.md +0 -0
- /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/review-infrastructure.md +0 -0
- /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/validate-infrastructure.md +0 -0
- /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/templates/infrastructure-architecture-tmpl.md +0 -0
|
@@ -1,24 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
const { program } = require('commander');
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
|
|
5
|
+
// Dynamic imports for ES modules
|
|
6
|
+
let chalk, inquirer;
|
|
7
|
+
|
|
8
|
+
// Initialize ES modules
|
|
9
|
+
async function initializeModules() {
|
|
10
|
+
if (!chalk) {
|
|
11
|
+
chalk = (await import('chalk')).default;
|
|
12
|
+
inquirer = (await import('inquirer')).default;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
7
15
|
|
|
8
16
|
// Handle both execution contexts (from root via npx or from installer directory)
|
|
9
|
-
let version
|
|
17
|
+
let version;
|
|
18
|
+
let installer;
|
|
10
19
|
try {
|
|
11
20
|
// Try installer context first (when run from tools/installer/)
|
|
12
21
|
version = require('../package.json').version;
|
|
13
22
|
installer = require('../lib/installer');
|
|
14
23
|
} catch (e) {
|
|
15
24
|
// Fall back to root context (when run via npx from GitHub)
|
|
25
|
+
console.log(`Installer context not found (${e.message}), trying root context...`);
|
|
16
26
|
try {
|
|
17
27
|
version = require('../../../package.json').version;
|
|
18
28
|
installer = require('../../../tools/installer/lib/installer');
|
|
19
29
|
} catch (e2) {
|
|
20
|
-
console.error(
|
|
21
|
-
console.error(
|
|
30
|
+
console.error('Error: Could not load required modules. Please ensure you are running from the correct directory.');
|
|
31
|
+
console.error('Debug info:', {
|
|
22
32
|
__dirname,
|
|
23
33
|
cwd: process.cwd(),
|
|
24
34
|
error: e2.message
|
|
@@ -36,25 +46,29 @@ program
|
|
|
36
46
|
.description('Install BMAD Method agents and tools')
|
|
37
47
|
.option('-f, --full', 'Install complete .bmad-core folder')
|
|
38
48
|
.option('-a, --agent <agent>', 'Install specific agent with dependencies')
|
|
39
|
-
.option('-d, --directory <path>', 'Installation directory (default:
|
|
40
|
-
.option('-i, --ide <ide
|
|
49
|
+
.option('-d, --directory <path>', 'Installation directory (default: .bmad-core)')
|
|
50
|
+
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, roo, other)')
|
|
51
|
+
.option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
|
|
41
52
|
.action(async (options) => {
|
|
42
53
|
try {
|
|
54
|
+
await initializeModules();
|
|
43
55
|
if (!options.full && !options.agent) {
|
|
44
56
|
// Interactive mode
|
|
45
|
-
const answers = await promptInstallation(
|
|
57
|
+
const answers = await promptInstallation();
|
|
46
58
|
await installer.install(answers);
|
|
47
59
|
} else {
|
|
48
60
|
// Direct mode
|
|
49
61
|
const config = {
|
|
50
62
|
installType: options.full ? 'full' : 'single-agent',
|
|
51
63
|
agent: options.agent,
|
|
52
|
-
directory: options.directory || '
|
|
53
|
-
|
|
64
|
+
directory: options.directory || '.bmad-core',
|
|
65
|
+
ides: (options.ide || []).filter(ide => ide !== 'other'),
|
|
66
|
+
expansionPacks: options.expansionPacks || []
|
|
54
67
|
};
|
|
55
68
|
await installer.install(config);
|
|
56
69
|
}
|
|
57
70
|
} catch (error) {
|
|
71
|
+
if (!chalk) await initializeModules();
|
|
58
72
|
console.error(chalk.red('Installation failed:'), error.message);
|
|
59
73
|
process.exit(1);
|
|
60
74
|
}
|
|
@@ -65,10 +79,11 @@ program
|
|
|
65
79
|
.description('Update existing BMAD installation')
|
|
66
80
|
.option('--force', 'Force update, overwriting modified files')
|
|
67
81
|
.option('--dry-run', 'Show what would be updated without making changes')
|
|
68
|
-
.action(async (
|
|
82
|
+
.action(async () => {
|
|
69
83
|
try {
|
|
70
|
-
await installer.update(
|
|
84
|
+
await installer.update();
|
|
71
85
|
} catch (error) {
|
|
86
|
+
if (!chalk) await initializeModules();
|
|
72
87
|
console.error(chalk.red('Update failed:'), error.message);
|
|
73
88
|
process.exit(1);
|
|
74
89
|
}
|
|
@@ -81,6 +96,20 @@ program
|
|
|
81
96
|
try {
|
|
82
97
|
await installer.listAgents();
|
|
83
98
|
} catch (error) {
|
|
99
|
+
if (!chalk) await initializeModules();
|
|
100
|
+
console.error(chalk.red('Error:'), error.message);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
program
|
|
106
|
+
.command('list:expansions')
|
|
107
|
+
.description('List available expansion packs')
|
|
108
|
+
.action(async () => {
|
|
109
|
+
try {
|
|
110
|
+
await installer.listExpansionPacks();
|
|
111
|
+
} catch (error) {
|
|
112
|
+
if (!chalk) await initializeModules();
|
|
84
113
|
console.error(chalk.red('Error:'), error.message);
|
|
85
114
|
process.exit(1);
|
|
86
115
|
}
|
|
@@ -93,27 +122,34 @@ program
|
|
|
93
122
|
try {
|
|
94
123
|
await installer.showStatus();
|
|
95
124
|
} catch (error) {
|
|
125
|
+
if (!chalk) await initializeModules();
|
|
96
126
|
console.error(chalk.red('Error:'), error.message);
|
|
97
127
|
process.exit(1);
|
|
98
128
|
}
|
|
99
129
|
});
|
|
100
130
|
|
|
101
|
-
async function promptInstallation(
|
|
131
|
+
async function promptInstallation() {
|
|
132
|
+
await initializeModules();
|
|
102
133
|
console.log(chalk.bold.blue(`\nWelcome to BMAD Method Installer v${version}\n`));
|
|
103
|
-
|
|
134
|
+
|
|
104
135
|
const answers = {};
|
|
105
|
-
|
|
136
|
+
|
|
106
137
|
// Ask for installation directory
|
|
107
138
|
const { directory } = await inquirer.prompt([
|
|
108
139
|
{
|
|
109
140
|
type: 'input',
|
|
110
141
|
name: 'directory',
|
|
111
|
-
message: '
|
|
112
|
-
|
|
142
|
+
message: 'Enter the full path to your project directory where BMAD should be installed:',
|
|
143
|
+
validate: (input) => {
|
|
144
|
+
if (!input.trim()) {
|
|
145
|
+
return 'Please enter a valid project path';
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
113
149
|
}
|
|
114
150
|
]);
|
|
115
151
|
answers.directory = directory;
|
|
116
|
-
|
|
152
|
+
|
|
117
153
|
// Ask for installation type
|
|
118
154
|
const { installType } = await inquirer.prompt([
|
|
119
155
|
{
|
|
@@ -133,7 +169,7 @@ async function promptInstallation(options) {
|
|
|
133
169
|
}
|
|
134
170
|
]);
|
|
135
171
|
answers.installType = installType;
|
|
136
|
-
|
|
172
|
+
|
|
137
173
|
// If single agent, ask which one
|
|
138
174
|
if (installType === 'single-agent') {
|
|
139
175
|
const agents = await installer.getAvailableAgents();
|
|
@@ -150,24 +186,67 @@ async function promptInstallation(options) {
|
|
|
150
186
|
]);
|
|
151
187
|
answers.agent = agent;
|
|
152
188
|
}
|
|
153
|
-
|
|
189
|
+
|
|
190
|
+
// Ask for expansion pack selection (only for full installation)
|
|
191
|
+
if (installType === 'full') {
|
|
192
|
+
try {
|
|
193
|
+
const availableExpansionPacks = await installer.getAvailableExpansionPacks();
|
|
194
|
+
|
|
195
|
+
if (availableExpansionPacks.length > 0) {
|
|
196
|
+
const { expansionPacks } = await inquirer.prompt([
|
|
197
|
+
{
|
|
198
|
+
type: 'checkbox',
|
|
199
|
+
name: 'expansionPacks',
|
|
200
|
+
message: 'Select expansion packs to install (optional):',
|
|
201
|
+
choices: [
|
|
202
|
+
{ name: 'BMAD Core only (no expansion packs)', value: 'none', checked: true },
|
|
203
|
+
new inquirer.Separator(' --- Expansion Packs ---'),
|
|
204
|
+
...availableExpansionPacks.map(pack => ({
|
|
205
|
+
name: `${pack.name} - ${pack.description}`,
|
|
206
|
+
value: pack.id
|
|
207
|
+
}))
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
]);
|
|
211
|
+
|
|
212
|
+
// Filter out 'none' selection and only include actual expansion packs
|
|
213
|
+
answers.expansionPacks = expansionPacks.filter(pack => pack !== 'none');
|
|
214
|
+
} else {
|
|
215
|
+
answers.expansionPacks = [];
|
|
216
|
+
}
|
|
217
|
+
} catch (error) {
|
|
218
|
+
console.warn(chalk.yellow('Warning: Could not load expansion packs. Continuing without them.'));
|
|
219
|
+
answers.expansionPacks = [];
|
|
220
|
+
}
|
|
221
|
+
} else {
|
|
222
|
+
answers.expansionPacks = [];
|
|
223
|
+
}
|
|
224
|
+
|
|
154
225
|
// Ask for IDE configuration
|
|
155
|
-
const {
|
|
226
|
+
const { ides } = await inquirer.prompt([
|
|
156
227
|
{
|
|
157
|
-
type: '
|
|
158
|
-
name: '
|
|
159
|
-
message: 'Which IDE are you using?',
|
|
228
|
+
type: 'checkbox',
|
|
229
|
+
name: 'ides',
|
|
230
|
+
message: 'Which IDE(s) are you using? (Select all that apply)',
|
|
160
231
|
choices: [
|
|
161
232
|
{ name: 'Cursor', value: 'cursor' },
|
|
162
233
|
{ name: 'Claude Code', value: 'claude-code' },
|
|
163
234
|
{ name: 'Windsurf', value: 'windsurf' },
|
|
164
235
|
{ name: 'Roo Code', value: 'roo' },
|
|
165
|
-
{ name: 'Other
|
|
166
|
-
]
|
|
236
|
+
{ name: 'Other (skip IDE setup)', value: 'other' }
|
|
237
|
+
],
|
|
238
|
+
validate: (answer) => {
|
|
239
|
+
if (answer.length < 1) {
|
|
240
|
+
return 'You must choose at least one IDE option.';
|
|
241
|
+
}
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
167
244
|
}
|
|
168
245
|
]);
|
|
169
|
-
answers.ide = ide;
|
|
170
246
|
|
|
247
|
+
// Filter out 'other' from the list and only include actual IDEs
|
|
248
|
+
answers.ides = ides.filter(ide => ide !== 'other');
|
|
249
|
+
|
|
171
250
|
return answers;
|
|
172
251
|
}
|
|
173
252
|
|
|
@@ -3,55 +3,55 @@ installation-options:
|
|
|
3
3
|
name: Complete BMAD Core
|
|
4
4
|
description: Copy the entire .bmad-core folder with all agents, templates, and tools
|
|
5
5
|
action: copy-folder
|
|
6
|
-
source:
|
|
6
|
+
source: bmad-core
|
|
7
7
|
single-agent:
|
|
8
8
|
name: Single Agent
|
|
9
9
|
description: Select and install a single agent with its dependencies
|
|
10
10
|
action: copy-agent
|
|
11
11
|
agent-dependencies:
|
|
12
12
|
core-files:
|
|
13
|
-
-
|
|
13
|
+
- bmad-core/utils/template-format.md
|
|
14
14
|
dev:
|
|
15
|
-
-
|
|
16
|
-
-
|
|
15
|
+
- bmad-core/templates/story-tmpl.md
|
|
16
|
+
- bmad-core/checklists/story-dod-checklist.md
|
|
17
17
|
pm:
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
18
|
+
- bmad-core/templates/prd-tmpl.md
|
|
19
|
+
- bmad-core/templates/brownfield-prd-tmpl.md
|
|
20
|
+
- bmad-core/checklists/pm-checklist.md
|
|
21
|
+
- bmad-core/checklists/change-checklist.md
|
|
22
|
+
- bmad-core/tasks/advanced-elicitation.md
|
|
23
|
+
- bmad-core/tasks/create-doc.md
|
|
24
|
+
- bmad-core/tasks/correct-course.md
|
|
25
|
+
- bmad-core/tasks/create-deep-research-prompt.md
|
|
26
|
+
- bmad-core/tasks/brownfield-create-epic.md
|
|
27
|
+
- bmad-core/tasks/brownfield-create-story.md
|
|
28
|
+
- bmad-core/tasks/execute-checklist.md
|
|
29
|
+
- bmad-core/tasks/shard-doc.md
|
|
30
30
|
architect:
|
|
31
|
-
-
|
|
32
|
-
-
|
|
31
|
+
- bmad-core/templates/architecture-tmpl.md
|
|
32
|
+
- bmad-core/checklists/architect-checklist.md
|
|
33
33
|
sm:
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
34
|
+
- bmad-core/templates/story-tmpl.md
|
|
35
|
+
- bmad-core/checklists/story-draft-checklist.md
|
|
36
|
+
- bmad-core/workflows/*.yml
|
|
37
37
|
po:
|
|
38
|
-
-
|
|
39
|
-
-
|
|
38
|
+
- bmad-core/checklists/po-master-checklist.md
|
|
39
|
+
- bmad-core/templates/acceptance-criteria-tmpl.md
|
|
40
40
|
analyst:
|
|
41
|
-
-
|
|
42
|
-
-
|
|
41
|
+
- bmad-core/templates/prd-tmpl.md
|
|
42
|
+
- bmad-core/tasks/advanced-elicitation.md
|
|
43
43
|
qa:
|
|
44
|
-
-
|
|
45
|
-
-
|
|
44
|
+
- bmad-core/checklists/story-dod-checklist.md
|
|
45
|
+
- bmad-core/templates/test-plan-tmpl.md
|
|
46
46
|
ux-expert:
|
|
47
|
-
-
|
|
47
|
+
- bmad-core/templates/ux-tmpl.md
|
|
48
48
|
bmad-master:
|
|
49
|
-
-
|
|
50
|
-
-
|
|
51
|
-
-
|
|
49
|
+
- bmad-core/templates/*.md
|
|
50
|
+
- bmad-core/tasks/*.md
|
|
51
|
+
- bmad-core/schemas/*.yml
|
|
52
52
|
bmad-orchestrator:
|
|
53
|
-
-
|
|
54
|
-
-
|
|
53
|
+
- bmad-core/agent-teams/*.yml
|
|
54
|
+
- bmad-core/workflows/*.yml
|
|
55
55
|
ide-configurations:
|
|
56
56
|
cursor:
|
|
57
57
|
name: Cursor
|
|
@@ -99,41 +99,41 @@ ide-configurations:
|
|
|
99
99
|
available-agents:
|
|
100
100
|
- id: analyst
|
|
101
101
|
name: Business Analyst
|
|
102
|
-
file:
|
|
102
|
+
file: bmad-core/agents/analyst.md
|
|
103
103
|
description: Requirements gathering and analysis
|
|
104
104
|
- id: pm
|
|
105
105
|
name: Product Manager
|
|
106
|
-
file:
|
|
106
|
+
file: bmad-core/agents/pm.md
|
|
107
107
|
description: Product strategy and roadmap planning
|
|
108
108
|
- id: architect
|
|
109
109
|
name: Solution Architect
|
|
110
|
-
file:
|
|
110
|
+
file: bmad-core/agents/architect.md
|
|
111
111
|
description: Technical design and architecture
|
|
112
112
|
- id: po
|
|
113
113
|
name: Product Owner
|
|
114
|
-
file:
|
|
114
|
+
file: bmad-core/agents/po.md
|
|
115
115
|
description: Backlog management and prioritization
|
|
116
116
|
- id: sm
|
|
117
117
|
name: Scrum Master
|
|
118
|
-
file:
|
|
118
|
+
file: bmad-core/agents/sm.md
|
|
119
119
|
description: Agile process and story creation
|
|
120
120
|
- id: dev
|
|
121
121
|
name: Developer
|
|
122
|
-
file:
|
|
122
|
+
file: bmad-core/agents/dev.md
|
|
123
123
|
description: Code implementation and testing
|
|
124
124
|
- id: qa
|
|
125
125
|
name: QA Engineer
|
|
126
|
-
file:
|
|
126
|
+
file: bmad-core/agents/qa.md
|
|
127
127
|
description: Quality assurance and testing
|
|
128
128
|
- id: ux-expert
|
|
129
129
|
name: UX Expert
|
|
130
|
-
file:
|
|
130
|
+
file: bmad-core/agents/ux-expert.md
|
|
131
131
|
description: User experience design
|
|
132
132
|
- id: bmad-master
|
|
133
133
|
name: BMAD Master
|
|
134
|
-
file:
|
|
134
|
+
file: bmad-core/agents/bmad-master.md
|
|
135
135
|
description: BMAD framework expert and guide
|
|
136
136
|
- id: bmad-orchestrator
|
|
137
137
|
name: BMAD Orchestrator
|
|
138
|
-
file:
|
|
138
|
+
file: bmad-core/agents/bmad-orchestrator.md
|
|
139
139
|
description: Multi-agent workflow coordinator
|
|
@@ -30,6 +30,43 @@ class ConfigLoader {
|
|
|
30
30
|
return config['available-agents'] || [];
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
async getAvailableExpansionPacks() {
|
|
34
|
+
const expansionPacksDir = path.join(this.getBmadCorePath(), '..', 'expansion-packs');
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
const entries = await fs.readdir(expansionPacksDir, { withFileTypes: true });
|
|
38
|
+
const expansionPacks = [];
|
|
39
|
+
|
|
40
|
+
for (const entry of entries) {
|
|
41
|
+
if (entry.isDirectory()) {
|
|
42
|
+
const manifestPath = path.join(expansionPacksDir, entry.name, 'manifest.yml');
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
const manifestContent = await fs.readFile(manifestPath, 'utf8');
|
|
46
|
+
const manifest = yaml.load(manifestContent);
|
|
47
|
+
|
|
48
|
+
expansionPacks.push({
|
|
49
|
+
id: entry.name,
|
|
50
|
+
name: manifest.name || entry.name,
|
|
51
|
+
description: manifest.description || 'No description available',
|
|
52
|
+
version: manifest.version || '1.0.0',
|
|
53
|
+
author: manifest.author || 'Unknown',
|
|
54
|
+
manifestPath: manifestPath,
|
|
55
|
+
dependencies: manifest.dependencies || []
|
|
56
|
+
});
|
|
57
|
+
} catch (error) {
|
|
58
|
+
console.warn(`Failed to read manifest for expansion pack ${entry.name}: ${error.message}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return expansionPacks;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.warn(`Failed to read expansion packs directory: ${error.message}`);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
33
70
|
async getAgentDependencies(agentId) {
|
|
34
71
|
// Use DependencyResolver to dynamically parse agent dependencies
|
|
35
72
|
const DependencyResolver = require('../../lib/dependency-resolver');
|
|
@@ -77,8 +114,8 @@ class ConfigLoader {
|
|
|
77
114
|
}
|
|
78
115
|
|
|
79
116
|
getBmadCorePath() {
|
|
80
|
-
// Get the path to
|
|
81
|
-
return path.join(__dirname, '..', '..', '..', '
|
|
117
|
+
// Get the path to bmad-core relative to the installer (now under tools)
|
|
118
|
+
return path.join(__dirname, '..', '..', '..', 'bmad-core');
|
|
82
119
|
}
|
|
83
120
|
|
|
84
121
|
getAgentPath(agentId) {
|
|
@@ -2,7 +2,16 @@ const fs = require("fs-extra");
|
|
|
2
2
|
const path = require("path");
|
|
3
3
|
const crypto = require("crypto");
|
|
4
4
|
const glob = require("glob");
|
|
5
|
-
|
|
5
|
+
|
|
6
|
+
// Dynamic import for ES module
|
|
7
|
+
let chalk;
|
|
8
|
+
|
|
9
|
+
// Initialize ES modules
|
|
10
|
+
async function initializeModules() {
|
|
11
|
+
if (!chalk) {
|
|
12
|
+
chalk = (await import("chalk")).default;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
6
15
|
|
|
7
16
|
class FileManager {
|
|
8
17
|
constructor() {
|
|
@@ -16,6 +25,7 @@ class FileManager {
|
|
|
16
25
|
await fs.copy(source, destination);
|
|
17
26
|
return true;
|
|
18
27
|
} catch (error) {
|
|
28
|
+
await initializeModules();
|
|
19
29
|
console.error(chalk.red(`Failed to copy ${source}:`), error.message);
|
|
20
30
|
return false;
|
|
21
31
|
}
|
|
@@ -27,6 +37,7 @@ class FileManager {
|
|
|
27
37
|
await fs.copy(source, destination);
|
|
28
38
|
return true;
|
|
29
39
|
} catch (error) {
|
|
40
|
+
await initializeModules();
|
|
30
41
|
console.error(
|
|
31
42
|
chalk.red(`Failed to copy directory ${source}:`),
|
|
32
43
|
error.message
|
|
@@ -72,11 +83,12 @@ class FileManager {
|
|
|
72
83
|
);
|
|
73
84
|
|
|
74
85
|
const manifest = {
|
|
75
|
-
version: require("
|
|
86
|
+
version: require("../../../package.json").version,
|
|
76
87
|
installed_at: new Date().toISOString(),
|
|
77
88
|
install_type: config.installType,
|
|
78
89
|
agent: config.agent || null,
|
|
79
90
|
ide_setup: config.ide || null,
|
|
91
|
+
ides_setup: config.ides || [],
|
|
80
92
|
files: [],
|
|
81
93
|
};
|
|
82
94
|
|
|
@@ -145,7 +157,12 @@ class FileManager {
|
|
|
145
157
|
}
|
|
146
158
|
|
|
147
159
|
async ensureDirectory(dirPath) {
|
|
148
|
-
|
|
160
|
+
try {
|
|
161
|
+
await fs.ensureDir(dirPath);
|
|
162
|
+
return true;
|
|
163
|
+
} catch (error) {
|
|
164
|
+
throw error;
|
|
165
|
+
}
|
|
149
166
|
}
|
|
150
167
|
|
|
151
168
|
async pathExists(filePath) {
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
const path = require("path");
|
|
2
2
|
const fileManager = require("./file-manager");
|
|
3
3
|
const configLoader = require("./config-loader");
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
// Dynamic import for ES module
|
|
6
|
+
let chalk;
|
|
7
|
+
|
|
8
|
+
// Initialize ES modules
|
|
9
|
+
async function initializeModules() {
|
|
10
|
+
if (!chalk) {
|
|
11
|
+
chalk = (await import("chalk")).default;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
5
14
|
|
|
6
15
|
class IdeSetup {
|
|
7
16
|
async setup(ide, installDir, selectedAgent = null) {
|
|
17
|
+
await initializeModules();
|
|
8
18
|
const ideConfig = await configLoader.getIdeConfiguration(ide);
|
|
9
19
|
|
|
10
20
|
if (!ideConfig) {
|