bmad-method 4.4.1 → 4.5.0
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/.prettierignore +22 -0
- package/.prettierrc +23 -0
- package/CHANGELOG.md +26 -2
- package/README.md +46 -39
- package/bmad-core/agent-teams/team-all.yml +1 -1
- package/bmad-core/agent-teams/team-fullstack.yml +1 -1
- package/bmad-core/agent-teams/team-ide-minimal.yml +10 -0
- package/bmad-core/agent-teams/team-no-ui.yml +1 -1
- package/bmad-core/agents/bmad-orchestrator.md +11 -11
- package/bmad-core/agents/sm.md +1 -1
- package/bmad-core/tasks/shard-doc.md +3 -5
- package/bmad-core/templates/architecture-tmpl.md +2 -2
- package/bmad-core/templates/brownfield-architecture-tmpl.md +4 -4
- package/bmad-core/templates/front-end-spec-tmpl.md +4 -4
- package/bmad-core/templates/fullstack-architecture-tmpl.md +2 -2
- package/bmad-core/utils/workflow-management.md +4 -4
- package/{bmad-core/web-bundles → dist}/agents/bmad-master.txt +0 -176
- package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles/teams/team-game-dev.txt → dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt} +4 -4
- package/dist/expansion-packs/expansion-creator/agents/bmad-the-creator.txt +1561 -0
- package/dist/teams/team-all.txt +10307 -0
- package/dist/teams/team-fullstack.txt +9659 -0
- package/dist/teams/team-ide-minimal.txt +2739 -0
- package/dist/teams/team-no-ui.txt +8519 -0
- package/docs/roo-code-guide.md +2 -2
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yml +12 -0
- package/expansion-packs/expansion-creator/README.md +8 -0
- package/expansion-packs/expansion-creator/agents/bmad-the-creator.md +53 -0
- package/expansion-packs/expansion-creator/common-tasks/create-doc.md +74 -0
- package/expansion-packs/expansion-creator/common-tasks/execute-checklist.md +97 -0
- package/expansion-packs/expansion-creator/manifest.yml +12 -0
- package/{creator-tools → expansion-packs/expansion-creator}/tasks/create-agent.md +4 -4
- package/expansion-packs/expansion-creator/tasks/generate-expansion-pack.md +1026 -0
- package/expansion-packs/expansion-creator/templates/agent-teams-tmpl.md +154 -0
- package/expansion-packs/expansion-creator/templates/agent-tmpl.md +140 -0
- package/expansion-packs/expansion-creator/utils/template-format.md +26 -0
- package/expansion-packs/expansion-creator/utils/workflow-management.md +223 -0
- package/package.json +3 -15
- package/tools/builders/web-builder.js +2 -4
- package/tools/cli.js +0 -15
- package/tools/installer/bin/bmad.js +167 -27
- package/tools/installer/lib/config-loader.js +82 -4
- package/tools/installer/lib/ide-setup.js +4 -4
- package/tools/installer/lib/installer.js +198 -29
- package/tools/installer/package.json +1 -1
- package/.claude/commands/analyst.md +0 -63
- package/.claude/commands/architect.md +0 -65
- package/.claude/commands/bmad-master.md +0 -103
- package/.claude/commands/bmad-orchestrator.md +0 -132
- package/.claude/commands/dev.md +0 -74
- package/.claude/commands/pm.md +0 -63
- package/.claude/commands/po.md +0 -64
- package/.claude/commands/qa.md +0 -56
- package/.claude/commands/sm.md +0 -59
- package/.claude/commands/ux-expert.md +0 -70
- package/.cursor/rules/analyst.mdc +0 -77
- package/.cursor/rules/architect.mdc +0 -79
- package/.cursor/rules/bmad-master.mdc +0 -117
- package/.cursor/rules/bmad-orchestrator.mdc +0 -146
- package/.cursor/rules/dev.mdc +0 -88
- package/.cursor/rules/pm.mdc +0 -77
- package/.cursor/rules/po.mdc +0 -78
- package/.cursor/rules/qa.mdc +0 -70
- package/.cursor/rules/sm.mdc +0 -73
- package/.cursor/rules/ux-expert.mdc +0 -84
- package/.roo/.roomodes +0 -95
- package/.roo/README.md +0 -27
- package/.windsurf/rules/analyst.md +0 -71
- package/.windsurf/rules/architect.md +0 -73
- package/.windsurf/rules/bmad-master.md +0 -111
- package/.windsurf/rules/bmad-orchestrator.md +0 -140
- package/.windsurf/rules/dev.md +0 -82
- package/.windsurf/rules/pm.md +0 -71
- package/.windsurf/rules/po.md +0 -72
- package/.windsurf/rules/qa.md +0 -64
- package/.windsurf/rules/sm.md +0 -67
- package/.windsurf/rules/ux-expert.md +0 -78
- package/bmad-core/bmad-core-config.yml +0 -60
- package/bmad-core/templates/agent-tmpl.md +0 -58
- package/bmad-core/utils/agent-switcher.ide.md +0 -112
- package/creator-tools/tasks/generate-expansion-pack.md +0 -427
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/team-game-dev.yml +0 -12
- package/expansion-packs/bmad-2d-phaser-game-dev/web-bundles/team-game-dev.txt +0 -4395
- /package/{bmad-core/web-bundles → dist}/agents/analyst.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/architect.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/bmad-orchestrator.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/dev.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/pm.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/po.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/qa.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/sm.txt +0 -0
- /package/{bmad-core/web-bundles → dist}/agents/ux-expert.txt +0 -0
- /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-designer.txt +0 -0
- /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-developer.txt +0 -0
- /package/{expansion-packs/bmad-2d-phaser-game-dev/web-bundles → dist/expansion-packs/bmad-2d-phaser-game-dev}/agents/game-sm.txt +0 -0
- /package/{expansion-packs/bmad-infrastructure-devops/web-bundles → dist/expansion-packs/bmad-infrastructure-devops}/agents/infra-devops-platform.txt +0 -0
- /package/{bmad-core → expansion-packs/expansion-creator}/templates/expansion-pack-plan-tmpl.md +0 -0
|
@@ -46,21 +46,29 @@ program
|
|
|
46
46
|
.description('Install BMAD Method agents and tools')
|
|
47
47
|
.option('-f, --full', 'Install complete .bmad-core folder')
|
|
48
48
|
.option('-a, --agent <agent>', 'Install specific agent with dependencies')
|
|
49
|
+
.option('-t, --team <team>', 'Install specific team with required agents and dependencies')
|
|
50
|
+
.option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
|
|
49
51
|
.option('-d, --directory <path>', 'Installation directory (default: .bmad-core)')
|
|
50
52
|
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, roo, other)')
|
|
51
53
|
.option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
|
|
52
54
|
.action(async (options) => {
|
|
53
55
|
try {
|
|
54
56
|
await initializeModules();
|
|
55
|
-
if (!options.full && !options.agent) {
|
|
57
|
+
if (!options.full && !options.agent && !options.team && !options.expansionOnly) {
|
|
56
58
|
// Interactive mode
|
|
57
59
|
const answers = await promptInstallation();
|
|
58
60
|
await installer.install(answers);
|
|
59
61
|
} else {
|
|
60
62
|
// Direct mode
|
|
63
|
+
let installType = 'full';
|
|
64
|
+
if (options.agent) installType = 'single-agent';
|
|
65
|
+
else if (options.team) installType = 'team';
|
|
66
|
+
else if (options.expansionOnly) installType = 'expansion-only';
|
|
67
|
+
|
|
61
68
|
const config = {
|
|
62
|
-
installType
|
|
69
|
+
installType,
|
|
63
70
|
agent: options.agent,
|
|
71
|
+
team: options.team,
|
|
64
72
|
directory: options.directory || '.bmad-core',
|
|
65
73
|
ides: (options.ide || []).filter(ide => ide !== 'other'),
|
|
66
74
|
expansionPacks: options.expansionPacks || []
|
|
@@ -161,9 +169,17 @@ async function promptInstallation() {
|
|
|
161
169
|
name: 'Complete installation (recommended) - All agents and tools',
|
|
162
170
|
value: 'full'
|
|
163
171
|
},
|
|
172
|
+
{
|
|
173
|
+
name: 'Team installation - Install a specific team with required agents',
|
|
174
|
+
value: 'team'
|
|
175
|
+
},
|
|
164
176
|
{
|
|
165
177
|
name: 'Single agent - Choose one agent to install',
|
|
166
178
|
value: 'single-agent'
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: 'Expansion packs only - Install expansion packs without bmad-core',
|
|
182
|
+
value: 'expansion-only'
|
|
167
183
|
}
|
|
168
184
|
]
|
|
169
185
|
}
|
|
@@ -187,30 +203,63 @@ async function promptInstallation() {
|
|
|
187
203
|
answers.agent = agent;
|
|
188
204
|
}
|
|
189
205
|
|
|
190
|
-
//
|
|
191
|
-
if (installType === '
|
|
206
|
+
// If team installation, ask which team
|
|
207
|
+
if (installType === 'team') {
|
|
208
|
+
const teams = await installer.getAvailableTeams();
|
|
209
|
+
const { team } = await inquirer.prompt([
|
|
210
|
+
{
|
|
211
|
+
type: 'list',
|
|
212
|
+
name: 'team',
|
|
213
|
+
message: 'Select a team to install in your IDE project folder:',
|
|
214
|
+
choices: teams.map(t => ({
|
|
215
|
+
name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
|
|
216
|
+
value: t.id
|
|
217
|
+
}))
|
|
218
|
+
}
|
|
219
|
+
]);
|
|
220
|
+
answers.team = team;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Ask for expansion pack selection
|
|
224
|
+
if (installType === 'full' || installType === 'team' || installType === 'expansion-only') {
|
|
192
225
|
try {
|
|
193
226
|
const availableExpansionPacks = await installer.getAvailableExpansionPacks();
|
|
194
227
|
|
|
195
228
|
if (availableExpansionPacks.length > 0) {
|
|
229
|
+
let choices;
|
|
230
|
+
let message;
|
|
231
|
+
|
|
232
|
+
if (installType === 'expansion-only') {
|
|
233
|
+
message = 'Select expansion packs to install (required):'
|
|
234
|
+
choices = availableExpansionPacks.map(pack => ({
|
|
235
|
+
name: `${pack.name} - ${pack.description}`,
|
|
236
|
+
value: pack.id
|
|
237
|
+
}));
|
|
238
|
+
} else {
|
|
239
|
+
message = 'Select expansion packs to install (press Enter to skip, or check any to install):';
|
|
240
|
+
choices = availableExpansionPacks.map(pack => ({
|
|
241
|
+
name: `${pack.name} - ${pack.description}`,
|
|
242
|
+
value: pack.id
|
|
243
|
+
}));
|
|
244
|
+
}
|
|
245
|
+
|
|
196
246
|
const { expansionPacks } = await inquirer.prompt([
|
|
197
247
|
{
|
|
198
248
|
type: 'checkbox',
|
|
199
249
|
name: 'expansionPacks',
|
|
200
|
-
message
|
|
201
|
-
choices
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
]
|
|
250
|
+
message,
|
|
251
|
+
choices,
|
|
252
|
+
validate: installType === 'expansion-only' ? (answer) => {
|
|
253
|
+
if (answer.length < 1) {
|
|
254
|
+
return 'You must select at least one expansion pack for expansion-only installation.';
|
|
255
|
+
}
|
|
256
|
+
return true;
|
|
257
|
+
} : undefined
|
|
209
258
|
}
|
|
210
259
|
]);
|
|
211
260
|
|
|
212
|
-
//
|
|
213
|
-
answers.expansionPacks = expansionPacks
|
|
261
|
+
// Use selected expansion packs directly
|
|
262
|
+
answers.expansionPacks = expansionPacks;
|
|
214
263
|
} else {
|
|
215
264
|
answers.expansionPacks = [];
|
|
216
265
|
}
|
|
@@ -227,25 +276,116 @@ async function promptInstallation() {
|
|
|
227
276
|
{
|
|
228
277
|
type: 'checkbox',
|
|
229
278
|
name: 'ides',
|
|
230
|
-
message: 'Which IDE(s) are you using? (
|
|
279
|
+
message: 'Which IDE(s) are you using? (press Enter to skip IDE setup, or select any to configure):',
|
|
231
280
|
choices: [
|
|
232
281
|
{ name: 'Cursor', value: 'cursor' },
|
|
233
282
|
{ name: 'Claude Code', value: 'claude-code' },
|
|
234
283
|
{ name: 'Windsurf', value: 'windsurf' },
|
|
235
|
-
{ name: 'Roo Code', value: 'roo' }
|
|
236
|
-
|
|
237
|
-
],
|
|
238
|
-
validate: (answer) => {
|
|
239
|
-
if (answer.length < 1) {
|
|
240
|
-
return 'You must choose at least one IDE option.';
|
|
241
|
-
}
|
|
242
|
-
return true;
|
|
243
|
-
}
|
|
284
|
+
{ name: 'Roo Code', value: 'roo' }
|
|
285
|
+
]
|
|
244
286
|
}
|
|
245
287
|
]);
|
|
246
288
|
|
|
247
|
-
//
|
|
248
|
-
answers.ides = ides
|
|
289
|
+
// Use selected IDEs directly
|
|
290
|
+
answers.ides = ides;
|
|
291
|
+
|
|
292
|
+
// Ask for web bundles installation
|
|
293
|
+
const { includeWebBundles } = await inquirer.prompt([
|
|
294
|
+
{
|
|
295
|
+
type: 'confirm',
|
|
296
|
+
name: 'includeWebBundles',
|
|
297
|
+
message: 'Would you like to include pre-built web bundles? (standalone files for ChatGPT, Claude, Gemini)',
|
|
298
|
+
default: true
|
|
299
|
+
}
|
|
300
|
+
]);
|
|
301
|
+
|
|
302
|
+
if (includeWebBundles) {
|
|
303
|
+
console.log(chalk.cyan('\n📦 Web bundles are standalone files perfect for web AI platforms.'));
|
|
304
|
+
console.log(chalk.dim(' You can choose different teams/agents than your IDE installation.\n'));
|
|
305
|
+
|
|
306
|
+
const { webBundleType } = await inquirer.prompt([
|
|
307
|
+
{
|
|
308
|
+
type: 'list',
|
|
309
|
+
name: 'webBundleType',
|
|
310
|
+
message: 'What web bundles would you like to include?',
|
|
311
|
+
choices: [
|
|
312
|
+
{
|
|
313
|
+
name: 'All available bundles (agents, teams, expansion packs)',
|
|
314
|
+
value: 'all'
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: 'Specific teams only',
|
|
318
|
+
value: 'teams'
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: 'Individual agents only',
|
|
322
|
+
value: 'agents'
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
name: 'Custom selection',
|
|
326
|
+
value: 'custom'
|
|
327
|
+
}
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
]);
|
|
331
|
+
|
|
332
|
+
answers.webBundleType = webBundleType;
|
|
333
|
+
|
|
334
|
+
// If specific teams, let them choose which teams
|
|
335
|
+
if (webBundleType === 'teams' || webBundleType === 'custom') {
|
|
336
|
+
const teams = await installer.getAvailableTeams();
|
|
337
|
+
const { selectedTeams } = await inquirer.prompt([
|
|
338
|
+
{
|
|
339
|
+
type: 'checkbox',
|
|
340
|
+
name: 'selectedTeams',
|
|
341
|
+
message: 'Select team bundles to include:',
|
|
342
|
+
choices: teams.map(t => ({
|
|
343
|
+
name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
|
|
344
|
+
value: t.id,
|
|
345
|
+
checked: webBundleType === 'teams' // Check all if teams-only mode
|
|
346
|
+
})),
|
|
347
|
+
validate: (answer) => {
|
|
348
|
+
if (answer.length < 1) {
|
|
349
|
+
return 'You must select at least one team.';
|
|
350
|
+
}
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
]);
|
|
355
|
+
answers.selectedWebBundleTeams = selectedTeams;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// If custom selection, also ask about individual agents
|
|
359
|
+
if (webBundleType === 'custom') {
|
|
360
|
+
const { includeIndividualAgents } = await inquirer.prompt([
|
|
361
|
+
{
|
|
362
|
+
type: 'confirm',
|
|
363
|
+
name: 'includeIndividualAgents',
|
|
364
|
+
message: 'Also include individual agent bundles?',
|
|
365
|
+
default: true
|
|
366
|
+
}
|
|
367
|
+
]);
|
|
368
|
+
answers.includeIndividualAgents = includeIndividualAgents;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
const { webBundlesDirectory } = await inquirer.prompt([
|
|
372
|
+
{
|
|
373
|
+
type: 'input',
|
|
374
|
+
name: 'webBundlesDirectory',
|
|
375
|
+
message: 'Enter directory for web bundles:',
|
|
376
|
+
default: `${directory}/web-bundles`,
|
|
377
|
+
validate: (input) => {
|
|
378
|
+
if (!input.trim()) {
|
|
379
|
+
return 'Please enter a valid directory path';
|
|
380
|
+
}
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
]);
|
|
385
|
+
answers.webBundlesDirectory = webBundlesDirectory;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
answers.includeWebBundles = includeWebBundles;
|
|
249
389
|
|
|
250
390
|
return answers;
|
|
251
391
|
}
|
|
@@ -78,10 +78,7 @@ class ConfigLoader {
|
|
|
78
78
|
// Convert to flat list of file paths
|
|
79
79
|
const depPaths = [];
|
|
80
80
|
|
|
81
|
-
//
|
|
82
|
-
const config = await this.load();
|
|
83
|
-
const coreFiles = config['agent-dependencies']?.['core-files'] || [];
|
|
84
|
-
depPaths.push(...coreFiles);
|
|
81
|
+
// Core files and utilities are included automatically by DependencyResolver
|
|
85
82
|
|
|
86
83
|
// Add agent file itself is already handled by installer
|
|
87
84
|
|
|
@@ -118,9 +115,90 @@ class ConfigLoader {
|
|
|
118
115
|
return path.join(__dirname, '..', '..', '..', 'bmad-core');
|
|
119
116
|
}
|
|
120
117
|
|
|
118
|
+
getDistPath() {
|
|
119
|
+
// Get the path to dist directory relative to the installer
|
|
120
|
+
return path.join(__dirname, '..', '..', '..', 'dist');
|
|
121
|
+
}
|
|
122
|
+
|
|
121
123
|
getAgentPath(agentId) {
|
|
122
124
|
return path.join(this.getBmadCorePath(), 'agents', `${agentId}.md`);
|
|
123
125
|
}
|
|
126
|
+
|
|
127
|
+
async getAvailableTeams() {
|
|
128
|
+
const teamsDir = path.join(this.getBmadCorePath(), 'agent-teams');
|
|
129
|
+
|
|
130
|
+
try {
|
|
131
|
+
const entries = await fs.readdir(teamsDir, { withFileTypes: true });
|
|
132
|
+
const teams = [];
|
|
133
|
+
|
|
134
|
+
for (const entry of entries) {
|
|
135
|
+
if (entry.isFile() && entry.name.endsWith('.yml')) {
|
|
136
|
+
const teamPath = path.join(teamsDir, entry.name);
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
const teamContent = await fs.readFile(teamPath, 'utf8');
|
|
140
|
+
const teamConfig = yaml.load(teamContent);
|
|
141
|
+
|
|
142
|
+
if (teamConfig.bundle) {
|
|
143
|
+
teams.push({
|
|
144
|
+
id: path.basename(entry.name, '.yml'),
|
|
145
|
+
name: teamConfig.bundle.name || entry.name,
|
|
146
|
+
description: teamConfig.bundle.description || 'Team configuration',
|
|
147
|
+
icon: teamConfig.bundle.icon || '📋'
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
} catch (error) {
|
|
151
|
+
console.warn(`Warning: Could not load team config ${entry.name}: ${error.message}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return teams;
|
|
157
|
+
} catch (error) {
|
|
158
|
+
console.warn(`Warning: Could not scan teams directory: ${error.message}`);
|
|
159
|
+
return [];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
getTeamPath(teamId) {
|
|
164
|
+
return path.join(this.getBmadCorePath(), 'agent-teams', `${teamId}.yml`);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
async getTeamDependencies(teamId) {
|
|
168
|
+
// Use DependencyResolver to dynamically parse team dependencies
|
|
169
|
+
const DependencyResolver = require('../../lib/dependency-resolver');
|
|
170
|
+
const resolver = new DependencyResolver(path.join(__dirname, '..', '..', '..'));
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
const teamDeps = await resolver.resolveTeamDependencies(teamId);
|
|
174
|
+
|
|
175
|
+
// Convert to flat list of file paths
|
|
176
|
+
const depPaths = [];
|
|
177
|
+
|
|
178
|
+
// Add team config file
|
|
179
|
+
depPaths.push(`.bmad-core/agent-teams/${teamId}.yml`);
|
|
180
|
+
|
|
181
|
+
// Add all agents
|
|
182
|
+
for (const agent of teamDeps.agents) {
|
|
183
|
+
const filePath = `.bmad-core/agents/${agent.id}.md`;
|
|
184
|
+
if (!depPaths.includes(filePath)) {
|
|
185
|
+
depPaths.push(filePath);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Add all resolved resources
|
|
190
|
+
for (const resource of teamDeps.resources) {
|
|
191
|
+
const filePath = `.bmad-core/${resource.type}/${resource.id}.${resource.type === 'workflows' ? 'yml' : 'md'}`;
|
|
192
|
+
if (!depPaths.includes(filePath)) {
|
|
193
|
+
depPaths.push(filePath);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return depPaths;
|
|
198
|
+
} catch (error) {
|
|
199
|
+
throw new Error(`Failed to resolve team dependencies for ${teamId}: ${error.message}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
124
202
|
}
|
|
125
203
|
|
|
126
204
|
module.exports = new ConfigLoader();
|
|
@@ -241,8 +241,8 @@ class IdeSetup {
|
|
|
241
241
|
const rooDir = path.join(installDir, ".roo");
|
|
242
242
|
await fileManager.ensureDirectory(rooDir);
|
|
243
243
|
|
|
244
|
-
// Check for existing .roomodes file
|
|
245
|
-
const roomodesPath = path.join(
|
|
244
|
+
// Check for existing .roomodes file in project root
|
|
245
|
+
const roomodesPath = path.join(installDir, ".roomodes");
|
|
246
246
|
let existingModes = [];
|
|
247
247
|
let existingContent = "";
|
|
248
248
|
|
|
@@ -349,7 +349,7 @@ class IdeSetup {
|
|
|
349
349
|
newModesContent += ` customInstructions: CRITICAL Read the full YML from .bmad-core/agents/${agentId}.md start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
|
|
350
350
|
newModesContent += ` groups:\n`;
|
|
351
351
|
newModesContent += ` - read\n`;
|
|
352
|
-
|
|
352
|
+
|
|
353
353
|
// Add permissions based on agent type
|
|
354
354
|
const permissions = agentPermissions[agentId];
|
|
355
355
|
if (permissions) {
|
|
@@ -379,7 +379,7 @@ class IdeSetup {
|
|
|
379
379
|
|
|
380
380
|
// Write .roomodes file
|
|
381
381
|
await fileManager.writeFile(roomodesPath, roomodesContent);
|
|
382
|
-
console.log(chalk.green("✓ Created .
|
|
382
|
+
console.log(chalk.green("✓ Created .roomodes file in project root"));
|
|
383
383
|
|
|
384
384
|
// Create README in .roo directory
|
|
385
385
|
const rooReadme = `# Roo Code Custom Modes for BMAD-METHOD
|