bmad-method 4.4.0 → 4.4.2

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.
Files changed (128) hide show
  1. package/.claude/commands/bmad-orchestrator.md +65 -6
  2. package/.cursor/rules/bmad-orchestrator.mdc +65 -6
  3. package/.roo/README.md +0 -11
  4. package/.windsurf/rules/bmad-orchestrator.md +65 -6
  5. package/CHANGELOG.md +15 -3
  6. package/README.md +6 -26
  7. package/{.bmad-core → bmad-core}/agent-teams/team-all.yml +2 -4
  8. package/bmad-core/agent-teams/team-fullstack.yml +18 -0
  9. package/bmad-core/agent-teams/team-ide-minimal.yml +10 -0
  10. package/{.bmad-core → bmad-core}/agent-teams/team-no-ui.yml +1 -3
  11. package/bmad-core/agents/bmad-orchestrator.md +128 -0
  12. package/{.bmad-core → bmad-core}/agents/qa.md +11 -17
  13. package/{.bmad-core → bmad-core}/agents/ux-expert.md +14 -20
  14. package/{.bmad-core → bmad-core}/tasks/shard-doc.md +5 -3
  15. package/{.bmad-core → bmad-core}/templates/architecture-tmpl.md +2 -2
  16. package/{.bmad-core → bmad-core}/templates/brownfield-architecture-tmpl.md +6 -6
  17. package/{.bmad-core → bmad-core}/templates/front-end-spec-tmpl.md +6 -6
  18. package/{.bmad-core → bmad-core}/utils/agent-switcher.ide.md +6 -6
  19. package/{.bmad-core → bmad-core}/utils/workflow-management.md +4 -4
  20. package/{.bmad-core → bmad-core}/web-bundles/agents/architect.txt +3 -3
  21. package/{.bmad-core → bmad-core}/web-bundles/agents/bmad-master.txt +10 -10
  22. package/{.bmad-core → bmad-core}/web-bundles/agents/bmad-orchestrator.txt +67 -8
  23. package/{.bmad-core → bmad-core}/web-bundles/agents/pm.txt +1 -1
  24. package/{.bmad-core → bmad-core}/web-bundles/agents/po.txt +1 -1
  25. package/{.bmad-core → bmad-core}/web-bundles/agents/qa.txt +11 -17
  26. package/{.bmad-core → bmad-core}/web-bundles/agents/ux-expert.txt +16 -22
  27. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/team-game-dev.yml +12 -0
  28. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +58 -0
  29. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +66 -0
  30. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +51 -0
  31. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +201 -0
  32. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +160 -0
  33. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +254 -0
  34. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +631 -0
  35. package/expansion-packs/bmad-2d-phaser-game-dev/manifest.yml +45 -0
  36. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +111 -0
  37. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +216 -0
  38. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +308 -0
  39. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.md +560 -0
  40. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.md +345 -0
  41. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.md +331 -0
  42. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.md +235 -0
  43. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.md +451 -0
  44. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-designer.txt +1758 -0
  45. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-developer.txt +1444 -0
  46. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-sm.txt +674 -0
  47. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/team-game-dev.txt +4395 -0
  48. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/teams/team-game-dev.txt +4395 -0
  49. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yml +183 -0
  50. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yml +175 -0
  51. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/README.md +5 -5
  52. package/expansion-packs/bmad-infrastructure-devops/manifest.yml +23 -0
  53. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  54. package/expansion-packs/bmad-infrastructure-devops/web-bundles/agents/infra-devops-platform.txt +2021 -0
  55. package/package.json +3 -3
  56. package/tools/builders/web-builder.js +191 -2
  57. package/tools/cli.js +55 -7
  58. package/tools/installer/bin/bmad.js +120 -9
  59. package/tools/installer/config/install.config.yml +43 -43
  60. package/tools/installer/lib/config-loader.js +116 -6
  61. package/tools/installer/lib/installer.js +194 -5
  62. package/tools/installer/package-lock.json +3 -3
  63. package/tools/installer/package.json +2 -2
  64. package/tools/lib/dependency-resolver.js +1 -1
  65. package/.bmad-core/agent-teams/team-fullstack.yml +0 -26
  66. package/.bmad-core/agents/bmad-orchestrator.md +0 -69
  67. package/.bmad-core/web-bundles/teams/team-all.txt +0 -10262
  68. package/.bmad-core/web-bundles/teams/team-fullstack.txt +0 -9614
  69. package/.bmad-core/web-bundles/teams/team-no-ui.txt +0 -8462
  70. package/expansion-packs/infrastructure-devops/manifest.yml +0 -38
  71. /package/{.bmad-core → bmad-core}/agents/analyst.md +0 -0
  72. /package/{.bmad-core → bmad-core}/agents/architect.md +0 -0
  73. /package/{.bmad-core → bmad-core}/agents/bmad-master.md +0 -0
  74. /package/{.bmad-core → bmad-core}/agents/dev.md +0 -0
  75. /package/{.bmad-core → bmad-core}/agents/pm.md +0 -0
  76. /package/{.bmad-core → bmad-core}/agents/po.md +0 -0
  77. /package/{.bmad-core → bmad-core}/agents/sm.md +0 -0
  78. /package/{.bmad-core → bmad-core}/bmad-core-config.yml +0 -0
  79. /package/{.bmad-core → bmad-core}/checklists/architect-checklist.md +0 -0
  80. /package/{.bmad-core → bmad-core}/checklists/change-checklist.md +0 -0
  81. /package/{.bmad-core → bmad-core}/checklists/pm-checklist.md +0 -0
  82. /package/{.bmad-core → bmad-core}/checklists/po-master-checklist.md +0 -0
  83. /package/{.bmad-core → bmad-core}/checklists/story-dod-checklist.md +0 -0
  84. /package/{.bmad-core → bmad-core}/checklists/story-draft-checklist.md +0 -0
  85. /package/{.bmad-core → bmad-core}/data/bmad-kb.md +0 -0
  86. /package/{.bmad-core → bmad-core}/data/technical-preferences.md +0 -0
  87. /package/{.bmad-core → bmad-core}/tasks/advanced-elicitation.md +0 -0
  88. /package/{.bmad-core → bmad-core}/tasks/brainstorming-techniques.md +0 -0
  89. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-epic.md +0 -0
  90. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-story.md +0 -0
  91. /package/{.bmad-core → bmad-core}/tasks/core-dump.md +0 -0
  92. /package/{.bmad-core → bmad-core}/tasks/correct-course.md +0 -0
  93. /package/{.bmad-core → bmad-core}/tasks/create-deep-research-prompt.md +0 -0
  94. /package/{.bmad-core → bmad-core}/tasks/create-doc.md +0 -0
  95. /package/{.bmad-core → bmad-core}/tasks/create-next-story.md +0 -0
  96. /package/{.bmad-core → bmad-core}/tasks/doc-migration-task.md +0 -0
  97. /package/{.bmad-core → bmad-core}/tasks/document-project.md +0 -0
  98. /package/{.bmad-core → bmad-core}/tasks/execute-checklist.md +0 -0
  99. /package/{.bmad-core → bmad-core}/tasks/generate-ai-frontend-prompt.md +0 -0
  100. /package/{.bmad-core → bmad-core}/tasks/index-docs.md +0 -0
  101. /package/{.bmad-core → bmad-core}/templates/agent-tmpl.md +0 -0
  102. /package/{.bmad-core → bmad-core}/templates/brownfield-prd-tmpl.md +0 -0
  103. /package/{.bmad-core → bmad-core}/templates/competitor-analysis-tmpl.md +0 -0
  104. /package/{.bmad-core → bmad-core}/templates/expansion-pack-plan-tmpl.md +0 -0
  105. /package/{.bmad-core → bmad-core}/templates/front-end-architecture-tmpl.md +0 -0
  106. /package/{.bmad-core → bmad-core}/templates/fullstack-architecture-tmpl.md +0 -0
  107. /package/{.bmad-core → bmad-core}/templates/market-research-tmpl.md +0 -0
  108. /package/{.bmad-core → bmad-core}/templates/prd-tmpl.md +0 -0
  109. /package/{.bmad-core → bmad-core}/templates/project-brief-tmpl.md +0 -0
  110. /package/{.bmad-core → bmad-core}/templates/simple-project-prd-tmpl.md +0 -0
  111. /package/{.bmad-core → bmad-core}/templates/story-tmpl.md +0 -0
  112. /package/{.bmad-core → bmad-core}/templates/web-agent-startup-instructions-template.md +0 -0
  113. /package/{.bmad-core → bmad-core}/utils/template-format.md +0 -0
  114. /package/{.bmad-core → bmad-core}/web-bundles/agents/analyst.txt +0 -0
  115. /package/{.bmad-core → bmad-core}/web-bundles/agents/dev.txt +0 -0
  116. /package/{.bmad-core → bmad-core}/web-bundles/agents/sm.txt +0 -0
  117. /package/{.bmad-core → bmad-core}/workflows/brownfield-fullstack.yml +0 -0
  118. /package/{.bmad-core → bmad-core}/workflows/brownfield-service.yml +0 -0
  119. /package/{.bmad-core → bmad-core}/workflows/brownfield-ui.yml +0 -0
  120. /package/{.bmad-core → bmad-core}/workflows/greenfield-fullstack.yml +0 -0
  121. /package/{.bmad-core → bmad-core}/workflows/greenfield-service.yml +0 -0
  122. /package/{.bmad-core → bmad-core}/workflows/greenfield-ui.yml +0 -0
  123. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/agents/infra-devops-platform.md +0 -0
  124. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/checklists/infrastructure-checklist.md +0 -0
  125. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/create-doc.md +0 -0
  126. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/review-infrastructure.md +0 -0
  127. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/validate-infrastructure.md +0 -0
  128. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/templates/infrastructure-architecture-tmpl.md +0 -0
@@ -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');
@@ -41,10 +78,7 @@ class ConfigLoader {
41
78
  // Convert to flat list of file paths
42
79
  const depPaths = [];
43
80
 
44
- // Add core files
45
- const config = await this.load();
46
- const coreFiles = config['agent-dependencies']?.['core-files'] || [];
47
- depPaths.push(...coreFiles);
81
+ // Core files and utilities are included automatically by DependencyResolver
48
82
 
49
83
  // Add agent file itself is already handled by installer
50
84
 
@@ -77,13 +111,89 @@ class ConfigLoader {
77
111
  }
78
112
 
79
113
  getBmadCorePath() {
80
- // Get the path to .bmad-core relative to the installer (now under tools)
81
- return path.join(__dirname, '..', '..', '..', '.bmad-core');
114
+ // Get the path to bmad-core relative to the installer (now under tools)
115
+ return path.join(__dirname, '..', '..', '..', 'bmad-core');
82
116
  }
83
117
 
84
118
  getAgentPath(agentId) {
85
119
  return path.join(this.getBmadCorePath(), 'agents', `${agentId}.md`);
86
120
  }
121
+
122
+ async getAvailableTeams() {
123
+ const teamsDir = path.join(this.getBmadCorePath(), 'agent-teams');
124
+
125
+ try {
126
+ const entries = await fs.readdir(teamsDir, { withFileTypes: true });
127
+ const teams = [];
128
+
129
+ for (const entry of entries) {
130
+ if (entry.isFile() && entry.name.endsWith('.yml')) {
131
+ const teamPath = path.join(teamsDir, entry.name);
132
+
133
+ try {
134
+ const teamContent = await fs.readFile(teamPath, 'utf8');
135
+ const teamConfig = yaml.load(teamContent);
136
+
137
+ if (teamConfig.bundle) {
138
+ teams.push({
139
+ id: path.basename(entry.name, '.yml'),
140
+ name: teamConfig.bundle.name || entry.name,
141
+ description: teamConfig.bundle.description || 'Team configuration',
142
+ icon: teamConfig.bundle.icon || '📋'
143
+ });
144
+ }
145
+ } catch (error) {
146
+ console.warn(`Warning: Could not load team config ${entry.name}: ${error.message}`);
147
+ }
148
+ }
149
+ }
150
+
151
+ return teams;
152
+ } catch (error) {
153
+ console.warn(`Warning: Could not scan teams directory: ${error.message}`);
154
+ return [];
155
+ }
156
+ }
157
+
158
+ getTeamPath(teamId) {
159
+ return path.join(this.getBmadCorePath(), 'agent-teams', `${teamId}.yml`);
160
+ }
161
+
162
+ async getTeamDependencies(teamId) {
163
+ // Use DependencyResolver to dynamically parse team dependencies
164
+ const DependencyResolver = require('../../lib/dependency-resolver');
165
+ const resolver = new DependencyResolver(path.join(__dirname, '..', '..', '..'));
166
+
167
+ try {
168
+ const teamDeps = await resolver.resolveTeamDependencies(teamId);
169
+
170
+ // Convert to flat list of file paths
171
+ const depPaths = [];
172
+
173
+ // Add team config file
174
+ depPaths.push(`.bmad-core/agent-teams/${teamId}.yml`);
175
+
176
+ // Add all agents
177
+ for (const agent of teamDeps.agents) {
178
+ const filePath = `.bmad-core/agents/${agent.id}.md`;
179
+ if (!depPaths.includes(filePath)) {
180
+ depPaths.push(filePath);
181
+ }
182
+ }
183
+
184
+ // Add all resolved resources
185
+ for (const resource of teamDeps.resources) {
186
+ const filePath = `.bmad-core/${resource.type}/${resource.id}.${resource.type === 'workflows' ? 'yml' : 'md'}`;
187
+ if (!depPaths.includes(filePath)) {
188
+ depPaths.push(filePath);
189
+ }
190
+ }
191
+
192
+ return depPaths;
193
+ } catch (error) {
194
+ throw new Error(`Failed to resolve team dependencies for ${teamId}: ${error.message}`);
195
+ }
196
+ }
87
197
  }
88
198
 
89
199
  module.exports = new ConfigLoader();
@@ -220,11 +220,12 @@ class Installer {
220
220
  const agentPath = configLoader.getAgentPath(config.agent);
221
221
  const destAgentPath = path.join(
222
222
  installDir,
223
+ ".bmad-core",
223
224
  "agents",
224
225
  `${config.agent}.md`
225
226
  );
226
227
  await fileManager.copyFile(agentPath, destAgentPath);
227
- files.push(`agents/${config.agent}.md`);
228
+ files.push(`.bmad-core/agents/${config.agent}.md`);
228
229
 
229
230
  // Copy dependencies
230
231
  const dependencies = await configLoader.getAgentDependencies(
@@ -240,9 +241,9 @@ class Installer {
240
241
  const copiedFiles = await fileManager.copyGlobPattern(
241
242
  dep.replace(".bmad-core/", ""),
242
243
  sourceBase,
243
- installDir
244
+ path.join(installDir, ".bmad-core")
244
245
  );
245
- files.push(...copiedFiles);
246
+ files.push(...copiedFiles.map(f => `.bmad-core/${f}`));
246
247
  } else {
247
248
  // Handle single files
248
249
  const sourcePath = path.join(
@@ -251,16 +252,78 @@ class Installer {
251
252
  );
252
253
  const destPath = path.join(
253
254
  installDir,
254
- dep.replace(".bmad-core/", "")
255
+ dep
255
256
  );
256
257
 
257
258
  if (await fileManager.copyFile(sourcePath, destPath)) {
258
- files.push(dep.replace(".bmad-core/", ""));
259
+ files.push(dep);
260
+ }
261
+ }
262
+ }
263
+ } else if (config.installType === "team") {
264
+ // Team installation
265
+ spinner.text = `Installing ${config.team} team...`;
266
+
267
+ // Get team dependencies
268
+ const teamDependencies = await configLoader.getTeamDependencies(config.team);
269
+ const sourceBase = configLoader.getBmadCorePath();
270
+
271
+ // Install all team dependencies
272
+ for (const dep of teamDependencies) {
273
+ spinner.text = `Copying team dependency: ${dep}`;
274
+
275
+ if (dep.includes("*")) {
276
+ // Handle glob patterns
277
+ const copiedFiles = await fileManager.copyGlobPattern(
278
+ dep.replace(".bmad-core/", ""),
279
+ sourceBase,
280
+ path.join(installDir, ".bmad-core")
281
+ );
282
+ files.push(...copiedFiles.map(f => `.bmad-core/${f}`));
283
+ } else {
284
+ // Handle single files
285
+ const sourcePath = path.join(sourceBase, dep.replace(".bmad-core/", ""));
286
+ const destPath = path.join(installDir, dep);
287
+
288
+ if (await fileManager.copyFile(sourcePath, destPath)) {
289
+ files.push(dep);
259
290
  }
260
291
  }
261
292
  }
293
+ } else if (config.installType === "expansion-only") {
294
+ // Expansion-only installation - create minimal .bmad-core structure
295
+ spinner.text = "Creating minimal .bmad-core structure for expansion packs...";
296
+
297
+ const bmadCoreDestDir = path.join(installDir, ".bmad-core");
298
+ await fileManager.ensureDirectory(bmadCoreDestDir);
299
+
300
+ // Create basic directory structure
301
+ const dirs = ['agents', 'agent-teams', 'templates', 'tasks', 'checklists', 'workflows', 'data', 'utils', 'schemas'];
302
+ for (const dir of dirs) {
303
+ await fileManager.ensureDirectory(path.join(bmadCoreDestDir, dir));
304
+ }
305
+
306
+ // Copy minimal required files (schemas, utils, etc.)
307
+ const sourceBase = configLoader.getBmadCorePath();
308
+ const essentialFiles = [
309
+ 'schemas/**/*',
310
+ 'utils/**/*'
311
+ ];
312
+
313
+ for (const pattern of essentialFiles) {
314
+ const copiedFiles = await fileManager.copyGlobPattern(
315
+ pattern,
316
+ sourceBase,
317
+ bmadCoreDestDir
318
+ );
319
+ files.push(...copiedFiles.map(f => `.bmad-core/${f}`));
320
+ }
262
321
  }
263
322
 
323
+ // Install expansion packs if requested
324
+ const expansionFiles = await this.installExpansionPacks(installDir, config.expansionPacks, spinner);
325
+ files.push(...expansionFiles);
326
+
264
327
  // Set up IDE integration if requested
265
328
  const ides = config.ides || (config.ide ? [config.ide] : []);
266
329
  if (ides.length > 0) {
@@ -505,6 +568,11 @@ class Installer {
505
568
  console.log(chalk.bold("\n🎯 Installation Summary:"));
506
569
  console.log(chalk.green("✓ .bmad-core framework installed with all agents and workflows"));
507
570
 
571
+ if (config.expansionPacks && config.expansionPacks.length > 0) {
572
+ const packNames = config.expansionPacks.join(", ");
573
+ console.log(chalk.green(`✓ Expansion packs installed: ${packNames}`));
574
+ }
575
+
508
576
  if (ides.length > 0) {
509
577
  const ideNames = ides.map(ide => {
510
578
  const ideConfig = configLoader.getIdeConfiguration(ide);
@@ -569,6 +637,33 @@ class Installer {
569
637
  );
570
638
  }
571
639
 
640
+ async listExpansionPacks() {
641
+ // Initialize ES modules
642
+ await initializeModules();
643
+ const expansionPacks = await this.getAvailableExpansionPacks();
644
+
645
+ console.log(chalk.bold("\nAvailable BMAD Expansion Packs:\n"));
646
+
647
+ if (expansionPacks.length === 0) {
648
+ console.log(chalk.yellow("No expansion packs found."));
649
+ return;
650
+ }
651
+
652
+ for (const pack of expansionPacks) {
653
+ console.log(chalk.cyan(` ${pack.id.padEnd(20)}`),
654
+ `${pack.name} v${pack.version}`);
655
+ console.log(chalk.dim(` ${' '.repeat(22)}${pack.description}`));
656
+ if (pack.author && pack.author !== 'Unknown') {
657
+ console.log(chalk.dim(` ${' '.repeat(22)}by ${pack.author}`));
658
+ }
659
+ console.log();
660
+ }
661
+
662
+ console.log(
663
+ chalk.dim("Install with: npx bmad-method install --full --expansion-packs <id>\n")
664
+ );
665
+ }
666
+
572
667
  async showStatus() {
573
668
  // Initialize ES modules
574
669
  await initializeModules();
@@ -624,6 +719,100 @@ class Installer {
624
719
  return configLoader.getAvailableAgents();
625
720
  }
626
721
 
722
+ async getAvailableExpansionPacks() {
723
+ return configLoader.getAvailableExpansionPacks();
724
+ }
725
+
726
+ async getAvailableTeams() {
727
+ return configLoader.getAvailableTeams();
728
+ }
729
+
730
+ async installExpansionPacks(installDir, selectedPacks, spinner) {
731
+ if (!selectedPacks || selectedPacks.length === 0) {
732
+ return [];
733
+ }
734
+
735
+ const installedFiles = [];
736
+ const glob = require('glob');
737
+
738
+ for (const packId of selectedPacks) {
739
+ spinner.text = `Installing expansion pack: ${packId}...`;
740
+
741
+ try {
742
+ const expansionPacks = await this.getAvailableExpansionPacks();
743
+ const pack = expansionPacks.find(p => p.id === packId);
744
+
745
+ if (!pack) {
746
+ console.warn(`Expansion pack ${packId} not found, skipping...`);
747
+ continue;
748
+ }
749
+
750
+ const expansionPackDir = path.dirname(pack.manifestPath);
751
+
752
+ // Define the folders to copy from expansion packs to .bmad-core
753
+ const foldersToSync = [
754
+ 'agents',
755
+ 'agent-teams',
756
+ 'templates',
757
+ 'tasks',
758
+ 'checklists',
759
+ 'workflows',
760
+ 'data',
761
+ 'utils',
762
+ 'schemas'
763
+ ];
764
+
765
+ // Copy each folder if it exists
766
+ for (const folder of foldersToSync) {
767
+ const sourceFolder = path.join(expansionPackDir, folder);
768
+
769
+ // Check if folder exists in expansion pack
770
+ if (await fileManager.pathExists(sourceFolder)) {
771
+ // Get all files in this folder
772
+ const files = glob.sync('**/*', {
773
+ cwd: sourceFolder,
774
+ nodir: true
775
+ });
776
+
777
+ // Copy each file to the destination
778
+ for (const file of files) {
779
+ const sourcePath = path.join(sourceFolder, file);
780
+ const destPath = path.join(installDir, '.bmad-core', folder, file);
781
+
782
+ if (await fileManager.copyFile(sourcePath, destPath)) {
783
+ installedFiles.push(path.join('.bmad-core', folder, file));
784
+ }
785
+ }
786
+ }
787
+ }
788
+
789
+ // Also copy web-bundles if they exist (to a different location)
790
+ const webBundlesSource = path.join(expansionPackDir, 'web-bundles');
791
+ if (await fileManager.pathExists(webBundlesSource)) {
792
+ const files = glob.sync('**/*', {
793
+ cwd: webBundlesSource,
794
+ nodir: true
795
+ });
796
+
797
+ for (const file of files) {
798
+ const sourcePath = path.join(webBundlesSource, file);
799
+ const destPath = path.join(installDir, '.bmad-core', 'web-bundles', 'expansion-packs', packId, file);
800
+
801
+ if (await fileManager.copyFile(sourcePath, destPath)) {
802
+ installedFiles.push(path.join('.bmad-core', 'web-bundles', 'expansion-packs', packId, file));
803
+ }
804
+ }
805
+ }
806
+
807
+ console.log(chalk.green(`✓ Installed expansion pack: ${pack.name}`));
808
+ } catch (error) {
809
+ console.error(chalk.red(`Failed to install expansion pack ${packId}: ${error.message}`));
810
+ }
811
+ }
812
+
813
+ return installedFiles;
814
+ }
815
+
627
816
  async findInstallation() {
628
817
  // Look for .bmad-core in current directory or parent directories
629
818
  let currentDir = process.cwd();
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.0.1",
3
+ "version": "4.3.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "bmad-method",
9
- "version": "4.0.1",
9
+ "version": "4.3.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "chalk": "^5.4.1",
@@ -21,7 +21,7 @@
21
21
  "bmad-method": "bin/bmad.js"
22
22
  },
23
23
  "engines": {
24
- "node": ">=14.0.0"
24
+ "node": ">=20.0.0"
25
25
  }
26
26
  },
27
27
  "node_modules/@inquirer/checkbox": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-method",
3
- "version": "4.4.0",
3
+ "version": "4.4.2",
4
4
  "description": "BMAD Method installer - AI-powered Agile development framework",
5
5
  "main": "lib/installer.js",
6
6
  "bin": {
@@ -30,7 +30,7 @@
30
30
  "ora": "^8.2.0"
31
31
  },
32
32
  "engines": {
33
- "node": ">=14.0.0"
33
+ "node": ">=20.0.0"
34
34
  },
35
35
  "repository": {
36
36
  "type": "git",
@@ -5,7 +5,7 @@ const yaml = require('js-yaml');
5
5
  class DependencyResolver {
6
6
  constructor(rootDir) {
7
7
  this.rootDir = rootDir;
8
- this.bmadCore = path.join(rootDir, '.bmad-core');
8
+ this.bmadCore = path.join(rootDir, 'bmad-core');
9
9
  this.cache = new Map();
10
10
  }
11
11
 
@@ -1,26 +0,0 @@
1
- bundle:
2
- name: Team Fullstack
3
- icon: 🚀
4
- description: >-
5
- Comprehensive full-stack development team capable of handling both greenfield
6
- application development and brownfield enhancement projects. This team combines
7
- strategic planning, user experience design, and holistic system architecture
8
- to deliver complete solutions from concept to deployment. Specializes in
9
- full-stack applications, SaaS platforms, enterprise apps, feature additions,
10
- refactoring, and system modernization.
11
-
12
- agents:
13
- - bmad-orchestrator
14
- - analyst
15
- - pm
16
- - ux-expert
17
- - architect
18
- - po
19
-
20
- workflows:
21
- - brownfield-fullstack
22
- - brownfield-service
23
- - brownfield-ui
24
- - greenfield-fullstack
25
- - greenfield-service
26
- - greenfield-ui
@@ -1,69 +0,0 @@
1
- # bmad
2
-
3
- CRITICAL: Read the full YML to understand your operating params, start activation to alter your state of being, follow startup instructions, stay in this being until told to exit this mode:
4
-
5
- ```yaml
6
- agent:
7
- name: BMad Orchestrator
8
- id: bmad-orchestrator
9
- title: BMAD Master Orchestrator
10
- icon: 🎭
11
- whenToUse: Use for workflow coordination, multi-agent tasks, role switching guidance, and when unsure which specialist to consult
12
- persona:
13
- role: Master Orchestrator & BMAD Method Expert
14
- style: Knowledgeable, guiding, adaptable, efficient, encouraging, technically brilliant yet approachable. Helps customize and use BMAD Method while orchestrating agents
15
- identity: Unified interface to all BMAD-METHOD capabilities, dynamically transforms into any specialized agent
16
- focus: Orchestrating the right agent/capability for each need, loading resources only when needed
17
- core_principles:
18
- - Become any agent on demand, loading files only when needed
19
- - Never pre-load resources - discover and load at runtime
20
- - Assess needs and recommend best approach/agent/workflow
21
- - Track current state and guide to next logical steps
22
- - When embodied, specialized persona's principles take precedence
23
- - Be explicit about active persona and current task
24
- - Always use numbered lists for choices
25
- - Process (*) commands immediately
26
- startup:
27
- - Announce: Hey! I'm BMad, your BMAD-METHOD orchestrator. I can become any specialized agent, suggest workflows, explain setup, or help with any BMAD task. Type *help for options.
28
- - Assess user goal, suggest agent transformation if match, offer numbered options if generic
29
- - Load resources only when needed
30
- commands:
31
- - '*help" - Show commands/workflows/agents'
32
- - '*chat-mode" - Conversational mode with advanced-elicitation'
33
- - '*kb-mode" - Load knowledge base for full BMAD help'
34
- - '*status" - Show current context/agent/progress'
35
- - '*agent {name}" - Transform into agent (list if unspecified)'
36
- - '*exit" - Return to BMad or exit (confirm if exiting BMad)'
37
- - '*task {name}" - Run task (list if unspecified)'
38
- - '*workflow {type}" - Start/list workflows'
39
- - '*checklist {name}" - Execute checklist (list if unspecified)'
40
- - '*yolo" - Toggle skip confirmations'
41
- - '*party-mode" - Group chat with all agents'
42
- - '*doc-out" - Output full document'
43
- fuzzy-matching:
44
- - 85% confidence threshold
45
- - Show numbered list if unsure
46
- transformation:
47
- - Match name/role to agents
48
- - Announce transformation
49
- - Operate until exit
50
- loading:
51
- - KB: Only for *kb-mode or BMAD questions
52
- - Agents: Only when transforming
53
- - "Templates/Tasks: Only when executing"
54
- - Always indicate loading
55
- workflow:
56
- - Ask project type (greenfield/brownfield)
57
- - Ask scope (UI/service/fullstack/other)
58
- - Recommend workflow, guide through stages
59
- - Explain web context management if needed
60
- dependencies:
61
- tasks:
62
- - advanced-elicitation
63
- - create-doc
64
- data:
65
- - bmad-kb
66
- utils:
67
- - workflow-management
68
- - template-format
69
- ```