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.
Files changed (176) hide show
  1. package/.claude/commands/analyst.md +14 -20
  2. package/.claude/commands/architect.md +15 -20
  3. package/.claude/commands/bmad-master.md +18 -26
  4. package/.claude/commands/bmad-orchestrator.md +80 -33
  5. package/.claude/commands/dev.md +5 -4
  6. package/.claude/commands/pm.md +11 -16
  7. package/.claude/commands/sm.md +20 -25
  8. package/.cursor/rules/analyst.mdc +13 -19
  9. package/.cursor/rules/architect.mdc +14 -19
  10. package/.cursor/rules/bmad-master.mdc +18 -26
  11. package/.cursor/rules/bmad-orchestrator.mdc +80 -33
  12. package/.cursor/rules/dev.mdc +5 -4
  13. package/.cursor/rules/pm.mdc +11 -16
  14. package/.cursor/rules/sm.mdc +19 -24
  15. package/.releaserc.json +2 -1
  16. package/.roo/README.md +0 -11
  17. package/.vscode/settings.json +4 -0
  18. package/.windsurf/rules/analyst.md +13 -19
  19. package/.windsurf/rules/architect.md +14 -19
  20. package/.windsurf/rules/bmad-master.md +18 -26
  21. package/.windsurf/rules/bmad-orchestrator.md +80 -33
  22. package/.windsurf/rules/dev.md +5 -4
  23. package/.windsurf/rules/pm.md +11 -16
  24. package/.windsurf/rules/sm.md +19 -24
  25. package/CHANGELOG.md +126 -2
  26. package/CONTRIBUTING.md +2 -0
  27. package/README.md +20 -2
  28. package/{.bmad-core → bmad-core}/agent-teams/team-all.yml +1 -3
  29. package/bmad-core/agent-teams/team-fullstack.yml +18 -0
  30. package/{.bmad-core → bmad-core}/agent-teams/team-no-ui.yml +0 -2
  31. package/{.bmad-core → bmad-core}/agents/analyst.md +14 -20
  32. package/{.bmad-core → bmad-core}/agents/architect.md +15 -20
  33. package/{.bmad-core → bmad-core}/agents/bmad-master.md +18 -26
  34. package/bmad-core/agents/bmad-orchestrator.md +128 -0
  35. package/{.bmad-core → bmad-core}/agents/dev.md +5 -4
  36. package/{.bmad-core → bmad-core}/agents/pm.md +11 -16
  37. package/{.bmad-core → bmad-core}/agents/qa.md +11 -17
  38. package/bmad-core/agents/sm.md +55 -0
  39. package/{.bmad-core → bmad-core}/agents/ux-expert.md +14 -20
  40. package/bmad-core/bmad-core-config.yml +60 -0
  41. package/bmad-core/data/bmad-kb.md +47 -0
  42. package/bmad-core/tasks/doc-migration-task.md +143 -0
  43. package/bmad-core/tasks/document-project.md +389 -0
  44. package/bmad-core/tasks/generate-ai-frontend-prompt.md +51 -0
  45. package/{.bmad-core → bmad-core}/tasks/index-docs.md +8 -3
  46. package/{.bmad-core → bmad-core}/tasks/shard-doc.md +5 -3
  47. package/{.bmad-core → bmad-core}/templates/architecture-tmpl.md +16 -13
  48. package/{.bmad-core → bmad-core}/templates/brownfield-architecture-tmpl.md +6 -6
  49. package/{.bmad-core → bmad-core}/templates/front-end-spec-tmpl.md +6 -6
  50. package/{.bmad-core → bmad-core}/templates/fullstack-architecture-tmpl.md +85 -103
  51. package/{.bmad-core → bmad-core}/templates/prd-tmpl.md +1 -1
  52. package/bmad-core/templates/simple-project-prd-tmpl.md +461 -0
  53. package/{.bmad-core → bmad-core}/templates/story-tmpl.md +2 -2
  54. package/{.bmad-core → bmad-core}/utils/agent-switcher.ide.md +6 -6
  55. package/{.bmad-core → bmad-core}/utils/workflow-management.md +14 -15
  56. package/{.bmad-core → bmad-core}/web-bundles/agents/analyst.txt +26 -21
  57. package/{.bmad-core → bmad-core}/web-bundles/agents/architect.txt +608 -236
  58. package/{.bmad-core → bmad-core}/web-bundles/agents/bmad-master.txt +467 -1049
  59. package/bmad-core/web-bundles/agents/bmad-orchestrator.txt +647 -0
  60. package/{.bmad-core → bmad-core}/web-bundles/agents/dev.txt +5 -4
  61. package/{.bmad-core → bmad-core}/web-bundles/agents/pm.txt +477 -18
  62. package/{.bmad-core → bmad-core}/web-bundles/agents/po.txt +3 -3
  63. package/{.bmad-core → bmad-core}/web-bundles/agents/qa.txt +11 -17
  64. package/{.bmad-core → bmad-core}/web-bundles/agents/sm.txt +22 -27
  65. package/{.bmad-core → bmad-core}/web-bundles/agents/ux-expert.txt +57 -70
  66. package/{.bmad-core → bmad-core}/workflows/greenfield-fullstack.yml +3 -3
  67. package/{.bmad-core → creator-tools}/tasks/create-agent.md +10 -12
  68. package/{.bmad-core/tasks/create-expansion-pack.md → creator-tools/tasks/generate-expansion-pack.md} +8 -6
  69. package/docs/bmad-workflow-guide.md +161 -0
  70. package/docs/claude-code-guide.md +119 -0
  71. package/docs/core-architecture.md +213 -0
  72. package/docs/cursor-guide.md +127 -0
  73. package/docs/how-to-contribute-with-pull-requests.md +141 -0
  74. package/docs/roo-code-guide.md +140 -0
  75. package/docs/user-guide.md +1044 -0
  76. package/docs/versioning-and-releases.md +4 -4
  77. package/docs/windsurf-guide.md +127 -0
  78. package/expansion-packs/README.md +1 -111
  79. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/team-game-dev.yml +12 -0
  80. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +58 -0
  81. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +66 -0
  82. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +51 -0
  83. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +201 -0
  84. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +160 -0
  85. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +254 -0
  86. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +631 -0
  87. package/expansion-packs/bmad-2d-phaser-game-dev/manifest.yml +45 -0
  88. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +111 -0
  89. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +216 -0
  90. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +308 -0
  91. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.md +560 -0
  92. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.md +345 -0
  93. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.md +331 -0
  94. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.md +235 -0
  95. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.md +451 -0
  96. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-designer.txt +1758 -0
  97. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-developer.txt +1444 -0
  98. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/agents/game-sm.txt +674 -0
  99. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/team-game-dev.txt +4395 -0
  100. package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/teams/team-game-dev.txt +4395 -0
  101. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yml +183 -0
  102. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yml +175 -0
  103. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/README.md +5 -5
  104. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/agents/infra-devops-platform.md +3 -3
  105. package/expansion-packs/bmad-infrastructure-devops/manifest.yml +23 -0
  106. package/expansion-packs/bmad-infrastructure-devops/tasks/create-doc.md +74 -0
  107. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  108. package/expansion-packs/bmad-infrastructure-devops/web-bundles/agents/infra-devops-platform.txt +2021 -0
  109. package/package.json +20 -14
  110. package/tools/builders/web-builder.js +207 -17
  111. package/tools/cli.js +55 -7
  112. package/tools/installer/README.md +2 -2
  113. package/tools/installer/bin/bmad.js +107 -28
  114. package/tools/installer/config/install.config.yml +43 -43
  115. package/tools/installer/lib/config-loader.js +39 -2
  116. package/tools/installer/lib/file-manager.js +20 -3
  117. package/tools/installer/lib/ide-setup.js +11 -1
  118. package/tools/installer/lib/installer.js +275 -29
  119. package/tools/installer/package-lock.json +538 -336
  120. package/tools/installer/package.json +8 -8
  121. package/tools/lib/dependency-resolver.js +2 -2
  122. package/tools/semantic-release-sync-installer.js +31 -0
  123. package/tools/sync-installer-version.js +34 -0
  124. package/tools/upgraders/v3-to-v4-upgrader.js +18 -13
  125. package/tools/version-bump.js +33 -26
  126. package/tools/yaml-format.js +54 -25
  127. package/.bmad-core/agent-teams/team-fullstack.yml +0 -26
  128. package/.bmad-core/agents/bmad-orchestrator.md +0 -81
  129. package/.bmad-core/agents/sm.md +0 -60
  130. package/.bmad-core/data/bmad-kb.md +0 -36
  131. package/.bmad-core/schemas/agent-team-schema.yml +0 -153
  132. package/.bmad-core/tasks/create-team.md +0 -229
  133. package/.bmad-core/tasks/doc-migration-task.md +0 -198
  134. package/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -58
  135. package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +0 -1455
  136. package/.bmad-core/web-bundles/teams/team-all.txt +0 -10315
  137. package/.bmad-core/web-bundles/teams/team-fullstack.txt +0 -9663
  138. package/.bmad-core/web-bundles/teams/team-no-ui.txt +0 -8504
  139. package/.claude/settings.local.json +0 -22
  140. package/expansion-packs/infrastructure-devops/manifest.yml +0 -38
  141. /package/{.bmad-core → bmad-core}/agents/po.md +0 -0
  142. /package/{.bmad-core → bmad-core}/checklists/architect-checklist.md +0 -0
  143. /package/{.bmad-core → bmad-core}/checklists/change-checklist.md +0 -0
  144. /package/{.bmad-core → bmad-core}/checklists/pm-checklist.md +0 -0
  145. /package/{.bmad-core → bmad-core}/checklists/po-master-checklist.md +0 -0
  146. /package/{.bmad-core → bmad-core}/checklists/story-dod-checklist.md +0 -0
  147. /package/{.bmad-core → bmad-core}/checklists/story-draft-checklist.md +0 -0
  148. /package/{.bmad-core → bmad-core}/data/technical-preferences.md +0 -0
  149. /package/{.bmad-core → bmad-core}/tasks/advanced-elicitation.md +0 -0
  150. /package/{.bmad-core → bmad-core}/tasks/brainstorming-techniques.md +0 -0
  151. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-epic.md +0 -0
  152. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-story.md +0 -0
  153. /package/{.bmad-core → bmad-core}/tasks/core-dump.md +0 -0
  154. /package/{.bmad-core → bmad-core}/tasks/correct-course.md +0 -0
  155. /package/{.bmad-core → bmad-core}/tasks/create-deep-research-prompt.md +0 -0
  156. /package/{.bmad-core → bmad-core}/tasks/create-doc.md +0 -0
  157. /package/{.bmad-core → bmad-core}/tasks/create-next-story.md +0 -0
  158. /package/{.bmad-core → bmad-core}/tasks/execute-checklist.md +0 -0
  159. /package/{.bmad-core → bmad-core}/templates/agent-tmpl.md +0 -0
  160. /package/{.bmad-core → bmad-core}/templates/brownfield-prd-tmpl.md +0 -0
  161. /package/{.bmad-core → bmad-core}/templates/competitor-analysis-tmpl.md +0 -0
  162. /package/{.bmad-core → bmad-core}/templates/expansion-pack-plan-tmpl.md +0 -0
  163. /package/{.bmad-core → bmad-core}/templates/front-end-architecture-tmpl.md +0 -0
  164. /package/{.bmad-core → bmad-core}/templates/market-research-tmpl.md +0 -0
  165. /package/{.bmad-core → bmad-core}/templates/project-brief-tmpl.md +0 -0
  166. /package/{.bmad-core → bmad-core}/templates/web-agent-startup-instructions-template.md +0 -0
  167. /package/{.bmad-core → bmad-core}/utils/template-format.md +0 -0
  168. /package/{.bmad-core → bmad-core}/workflows/brownfield-fullstack.yml +0 -0
  169. /package/{.bmad-core → bmad-core}/workflows/brownfield-service.yml +0 -0
  170. /package/{.bmad-core → bmad-core}/workflows/brownfield-ui.yml +0 -0
  171. /package/{.bmad-core → bmad-core}/workflows/greenfield-service.yml +0 -0
  172. /package/{.bmad-core → bmad-core}/workflows/greenfield-ui.yml +0 -0
  173. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/checklists/infrastructure-checklist.md +0 -0
  174. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/review-infrastructure.md +0 -0
  175. /package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/validate-infrastructure.md +0 -0
  176. /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
- const inquirer = require('inquirer');
5
- const chalk = require('chalk');
6
- const path = require('path');
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, installer;
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(chalk.red('Error: Could not load required modules. Please ensure you are running from the correct directory.'));
21
- console.error(chalk.yellow('Debug info:'), {
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: ./bmad-core)')
40
- .option('-i, --ide <ide>', 'Configure for specific IDE (cursor, claude-code, windsurf, roo)')
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(options);
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 || './.bmad-core',
53
- ide: options.ide
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 (options) => {
82
+ .action(async () => {
69
83
  try {
70
- await installer.update(options);
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(options) {
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: 'Where would you like to install BMAD?',
112
- default: './.bmad-core'
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 { ide } = await inquirer.prompt([
226
+ const { ides } = await inquirer.prompt([
156
227
  {
157
- type: 'list',
158
- name: 'ide',
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/Manual setup', value: null }
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: .bmad-core
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
- - .bmad-core/utils/template-format.md
13
+ - bmad-core/utils/template-format.md
14
14
  dev:
15
- - .bmad-core/templates/story-tmpl.md
16
- - .bmad-core/checklists/story-dod-checklist.md
15
+ - bmad-core/templates/story-tmpl.md
16
+ - bmad-core/checklists/story-dod-checklist.md
17
17
  pm:
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
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
- - .bmad-core/templates/architecture-tmpl.md
32
- - .bmad-core/checklists/architect-checklist.md
31
+ - bmad-core/templates/architecture-tmpl.md
32
+ - bmad-core/checklists/architect-checklist.md
33
33
  sm:
34
- - .bmad-core/templates/story-tmpl.md
35
- - .bmad-core/checklists/story-draft-checklist.md
36
- - .bmad-core/workflows/*.yml
34
+ - bmad-core/templates/story-tmpl.md
35
+ - bmad-core/checklists/story-draft-checklist.md
36
+ - bmad-core/workflows/*.yml
37
37
  po:
38
- - .bmad-core/checklists/po-master-checklist.md
39
- - .bmad-core/templates/acceptance-criteria-tmpl.md
38
+ - bmad-core/checklists/po-master-checklist.md
39
+ - bmad-core/templates/acceptance-criteria-tmpl.md
40
40
  analyst:
41
- - .bmad-core/templates/prd-tmpl.md
42
- - .bmad-core/tasks/advanced-elicitation.md
41
+ - bmad-core/templates/prd-tmpl.md
42
+ - bmad-core/tasks/advanced-elicitation.md
43
43
  qa:
44
- - .bmad-core/checklists/story-dod-checklist.md
45
- - .bmad-core/templates/test-plan-tmpl.md
44
+ - bmad-core/checklists/story-dod-checklist.md
45
+ - bmad-core/templates/test-plan-tmpl.md
46
46
  ux-expert:
47
- - .bmad-core/templates/ux-tmpl.md
47
+ - bmad-core/templates/ux-tmpl.md
48
48
  bmad-master:
49
- - .bmad-core/templates/*.md
50
- - .bmad-core/tasks/*.md
51
- - .bmad-core/schemas/*.yml
49
+ - bmad-core/templates/*.md
50
+ - bmad-core/tasks/*.md
51
+ - bmad-core/schemas/*.yml
52
52
  bmad-orchestrator:
53
- - .bmad-core/agent-teams/*.yml
54
- - .bmad-core/workflows/*.yml
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: .bmad-core/agents/analyst.md
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: .bmad-core/agents/pm.md
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: .bmad-core/agents/architect.md
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: .bmad-core/agents/po.md
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: .bmad-core/agents/sm.md
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: .bmad-core/agents/dev.md
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: .bmad-core/agents/qa.md
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: .bmad-core/agents/ux-expert.md
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: .bmad-core/agents/bmad-master.md
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: .bmad-core/agents/bmad-orchestrator.md
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 .bmad-core relative to the installer (now under tools)
81
- return path.join(__dirname, '..', '..', '..', '.bmad-core');
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
- const chalk = require("chalk");
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("../package.json").version,
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
- await fs.ensureDir(dirPath);
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
- const chalk = require("chalk");
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) {