bmad-method 4.27.5 → 5.0.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/.bmad-core/agent-teams/team-all.yml +16 -0
- package/.bmad-core/agent-teams/team-fullstack.yml +26 -0
- package/.bmad-core/agent-teams/team-no-ui.yml +15 -0
- package/{bmad-core → .bmad-core}/agents/analyst.md +23 -30
- package/.bmad-core/agents/architect.md +66 -0
- package/.bmad-core/agents/bmad-master.md +104 -0
- package/.bmad-core/agents/bmad-orchestrator.md +81 -0
- package/.bmad-core/agents/dev.md +70 -0
- package/{bmad-core → .bmad-core}/agents/pm.md +24 -25
- package/{bmad-core → .bmad-core}/agents/po.md +24 -28
- package/.bmad-core/agents/qa.md +52 -0
- package/.bmad-core/agents/sm.md +55 -0
- package/.bmad-core/agents/ux-expert.md +66 -0
- package/{bmad-core → .bmad-core}/checklists/change-checklist.md +2 -2
- package/{bmad-core → .bmad-core}/checklists/story-draft-checklist.md +1 -1
- package/.bmad-core/data/bmad-kb.md +47 -0
- package/.bmad-core/schemas/agent-team-schema.yml +153 -0
- package/.bmad-core/tasks/advanced-elicitation.md +92 -0
- package/.bmad-core/tasks/brainstorming-techniques.md +238 -0
- package/.bmad-core/tasks/core-dump.md +74 -0
- package/{expansion-packs/bmad-creator-tools → .bmad-core}/tasks/create-agent.md +11 -9
- package/.bmad-core/tasks/create-doc.md +74 -0
- package/.bmad-core/tasks/create-expansion-pack.md +425 -0
- package/.bmad-core/tasks/create-next-story.md +206 -0
- package/.bmad-core/tasks/create-team.md +229 -0
- package/{bmad-core → .bmad-core}/tasks/doc-migration-task.md +9 -9
- package/{common → .bmad-core}/tasks/execute-checklist.md +6 -2
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +58 -0
- package/{bmad-core → .bmad-core}/tasks/index-docs.md +7 -3
- package/{bmad-core → .bmad-core}/tasks/shard-doc.md +7 -25
- package/.bmad-core/templates/agent-tmpl.md +58 -0
- package/.bmad-core/templates/architecture-tmpl.md +771 -0
- package/.bmad-core/templates/brownfield-architecture-tmpl.md +542 -0
- package/.bmad-core/templates/brownfield-prd-tmpl.md +240 -0
- package/.bmad-core/templates/competitor-analysis-tmpl.md +289 -0
- package/.bmad-core/templates/expansion-pack-plan-tmpl.md +91 -0
- package/.bmad-core/templates/front-end-architecture-tmpl.md +173 -0
- package/.bmad-core/templates/front-end-spec-tmpl.md +411 -0
- package/.bmad-core/templates/fullstack-architecture-tmpl.md +1016 -0
- package/.bmad-core/templates/market-research-tmpl.md +261 -0
- package/.bmad-core/templates/prd-tmpl.md +200 -0
- package/.bmad-core/templates/project-brief-tmpl.md +228 -0
- package/.bmad-core/templates/simple-project-prd-tmpl.md +461 -0
- package/.bmad-core/templates/story-tmpl.md +61 -0
- package/.bmad-core/templates/web-agent-startup-instructions-template.md +39 -0
- package/.bmad-core/utils/agent-switcher.ide.md +112 -0
- package/.bmad-core/utils/template-format.md +26 -0
- package/.bmad-core/utils/workflow-management.md +224 -0
- package/.bmad-core/web-bundles/agents/analyst.txt +1684 -0
- package/.bmad-core/web-bundles/agents/architect.txt +3584 -0
- package/.bmad-core/web-bundles/agents/bmad-master.txt +9491 -0
- package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +1466 -0
- package/{dist → .bmad-core/web-bundles}/agents/dev.txt +71 -179
- package/{dist → .bmad-core/web-bundles}/agents/pm.txt +1058 -624
- package/{dist → .bmad-core/web-bundles}/agents/po.txt +138 -337
- package/.bmad-core/web-bundles/agents/qa.txt +129 -0
- package/.bmad-core/web-bundles/agents/sm.txt +658 -0
- package/.bmad-core/web-bundles/agents/ux-expert.txt +1099 -0
- package/.bmad-core/web-bundles/teams/team-all.txt +10757 -0
- package/.bmad-core/web-bundles/teams/team-fullstack.txt +10109 -0
- package/.bmad-core/web-bundles/teams/team-no-ui.txt +8950 -0
- package/.bmad-core/workflows/brownfield-fullstack.yml +116 -0
- package/.bmad-core/workflows/brownfield-service.yml +117 -0
- package/.bmad-core/workflows/brownfield-ui.yml +127 -0
- package/{bmad-core/workflows/greenfield-fullstack.yaml → .bmad-core/workflows/greenfield-fullstack.yml} +77 -140
- package/.bmad-core/workflows/greenfield-service.yml +143 -0
- package/.bmad-core/workflows/greenfield-ui.yml +172 -0
- package/.claude/commands/analyst.md +63 -0
- package/.claude/commands/architect.md +70 -0
- package/.claude/commands/bmad-master.md +108 -0
- package/.claude/commands/bmad-orchestrator.md +85 -0
- package/.claude/commands/dev.md +74 -0
- package/.claude/commands/pm.md +63 -0
- package/.claude/commands/po.md +64 -0
- package/.claude/commands/qa.md +56 -0
- package/.claude/commands/sm.md +59 -0
- package/.claude/commands/ux-expert.md +70 -0
- package/.cursor/rules/analyst.mdc +77 -0
- package/.cursor/rules/architect.mdc +84 -0
- package/.cursor/rules/bmad-master.mdc +122 -0
- package/.cursor/rules/bmad-orchestrator.mdc +99 -0
- package/.cursor/rules/dev.mdc +88 -0
- package/.cursor/rules/pm.mdc +77 -0
- package/.cursor/rules/po.mdc +78 -0
- package/.cursor/rules/qa.mdc +70 -0
- package/.cursor/rules/sm.mdc +73 -0
- package/.cursor/rules/ux-expert.mdc +84 -0
- package/.roo/.roomodes +95 -0
- package/.roo/README.md +38 -0
- package/.vscode/extensions.json +6 -0
- package/.vscode/settings.json +75 -49
- package/.windsurf/rules/analyst.md +71 -0
- package/.windsurf/rules/architect.md +78 -0
- package/.windsurf/rules/bmad-master.md +116 -0
- package/.windsurf/rules/bmad-orchestrator.md +93 -0
- package/.windsurf/rules/dev.md +82 -0
- package/.windsurf/rules/pm.md +71 -0
- package/.windsurf/rules/po.md +72 -0
- package/.windsurf/rules/qa.md +64 -0
- package/.windsurf/rules/sm.md +67 -0
- package/.windsurf/rules/ux-expert.md +78 -0
- package/CHANGELOG.md +16 -452
- package/CONTRIBUTING.md +5 -168
- package/LICENSE +1 -1
- package/README.md +230 -77
- package/docs/bmad-workflow-guide.md +15 -19
- package/docs/claude-code-guide.md +119 -0
- package/docs/cursor-guide.md +127 -0
- package/docs/roo-code-guide.md +140 -0
- package/docs/sample-output/simple-fullstack-greenfield/prd.md +42 -0
- package/docs/versioning-and-releases.md +16 -8
- package/docs/versions.md +5 -4
- package/docs/windsurf-guide.md +127 -0
- package/expansion-packs/README.md +112 -2
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/README.md +9 -9
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/agents/infra-devops-platform.md +15 -15
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/checklists/infrastructure-checklist.md +1 -1
- package/expansion-packs/infrastructure-devops/manifest.yml +38 -0
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/tasks/review-infrastructure.md +4 -4
- package/expansion-packs/{bmad-infrastructure-devops → infrastructure-devops}/tasks/validate-infrastructure.md +4 -4
- package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +415 -0
- package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
- package/package.json +11 -19
- package/tools/bmad-npx-wrapper.js +1 -1
- package/tools/builders/web-builder.js +28 -563
- package/tools/cli.js +22 -55
- package/tools/installer/README.md +53 -3
- package/tools/installer/bin/bmad.js +56 -294
- package/tools/installer/config/install.config.yml +139 -0
- package/tools/installer/lib/config-loader.js +34 -198
- package/tools/installer/lib/file-manager.js +5 -123
- package/tools/installer/lib/ide-setup.js +189 -545
- package/tools/installer/lib/installer.js +55 -1136
- package/tools/installer/package-lock.json +3 -3
- package/tools/installer/package.json +4 -4
- package/tools/installer/templates/claude-commands.md +7 -0
- package/tools/installer/templates/cursor-rules.md +22 -0
- package/tools/installer/templates/windsurf-rules.md +22 -0
- package/tools/lib/dependency-resolver.js +22 -22
- package/tools/upgraders/v3-to-v4-upgrader.js +43 -35
- package/tools/version-bump.js +1 -1
- package/tools/yaml-format.js +2 -2
- package/.github/FUNDING.yaml +0 -15
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -22
- package/.prettierignore +0 -21
- package/.prettierrc +0 -23
- package/bmad-core/agent-teams/team-all.yaml +0 -14
- package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
- package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
- package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
- package/bmad-core/agents/architect.md +0 -63
- package/bmad-core/agents/bmad-master.md +0 -110
- package/bmad-core/agents/bmad-orchestrator.md +0 -140
- package/bmad-core/agents/dev.md +0 -57
- package/bmad-core/agents/qa.md +0 -55
- package/bmad-core/agents/sm.md +0 -46
- package/bmad-core/agents/ux-expert.md +0 -54
- package/bmad-core/core-config.yaml +0 -25
- package/bmad-core/data/bmad-kb.md +0 -803
- package/bmad-core/data/brainstorming-techniques.md +0 -36
- package/bmad-core/data/elicitation-methods.md +0 -134
- package/bmad-core/tasks/advanced-elicitation.md +0 -117
- package/bmad-core/tasks/create-brownfield-story.md +0 -355
- package/bmad-core/tasks/create-next-story.md +0 -114
- package/bmad-core/tasks/create-workflow-plan.md +0 -289
- package/bmad-core/tasks/document-project.md +0 -317
- package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
- package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
- package/bmad-core/tasks/kb-mode-interaction.md +0 -70
- package/bmad-core/tasks/review-story.md +0 -145
- package/bmad-core/tasks/update-workflow-plan.md +0 -248
- package/bmad-core/tasks/validate-next-story.md +0 -134
- package/bmad-core/templates/architecture-tmpl.yaml +0 -650
- package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
- package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
- package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -293
- package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -206
- package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
- package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -805
- package/bmad-core/templates/market-research-tmpl.yaml +0 -252
- package/bmad-core/templates/prd-tmpl.yaml +0 -202
- package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
- package/bmad-core/templates/story-tmpl.yaml +0 -137
- package/bmad-core/utils/plan-management.md +0 -219
- package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
- package/bmad-core/workflows/brownfield-service.yaml +0 -187
- package/bmad-core/workflows/brownfield-ui.yaml +0 -197
- package/bmad-core/workflows/greenfield-service.yaml +0 -206
- package/bmad-core/workflows/greenfield-ui.yaml +0 -235
- package/common/tasks/create-doc.md +0 -79
- package/common/utils/bmad-doc-template.md +0 -325
- package/common/utils/workflow-management.md +0 -69
- package/dist/agents/analyst.txt +0 -2849
- package/dist/agents/architect.txt +0 -3505
- package/dist/agents/bmad-master.txt +0 -9588
- package/dist/agents/bmad-orchestrator.txt +0 -2232
- package/dist/agents/qa.txt +0 -388
- package/dist/agents/sm.txt +0 -673
- package/dist/agents/ux-expert.txt +0 -987
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2401
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1635
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -825
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -11730
- package/dist/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.txt +0 -2023
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2052
- package/dist/teams/team-all.txt +0 -11799
- package/dist/teams/team-fullstack.txt +0 -11129
- package/dist/teams/team-ide-minimal.txt +0 -4573
- package/dist/teams/team-no-ui.txt +0 -9684
- package/docs/GUIDING-PRINCIPLES.md +0 -91
- package/docs/agentic-tools/claude-code-guide.md +0 -19
- package/docs/agentic-tools/cline-guide.md +0 -16
- package/docs/agentic-tools/cursor-guide.md +0 -14
- package/docs/agentic-tools/gemini-cli-guide.md +0 -32
- package/docs/agentic-tools/github-copilot-guide.md +0 -42
- package/docs/agentic-tools/roo-code-guide.md +0 -15
- package/docs/agentic-tools/trae-guide.md +0 -14
- package/docs/agentic-tools/windsurf-guide.md +0 -14
- package/docs/core-architecture.md +0 -219
- package/docs/expansion-packs.md +0 -280
- package/docs/how-to-contribute-with-pull-requests.md +0 -158
- package/docs/template-markup-references.md +0 -86
- package/docs/user-guide.md +0 -1142
- package/docs/working-in-the-brownfield.md +0 -361
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -60
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -68
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -53
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
- package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -7
- package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -254
- package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -651
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -111
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -308
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
- package/expansion-packs/bmad-creator-tools/README.md +0 -8
- package/expansion-packs/bmad-creator-tools/agents/bmad-the-creator.md +0 -55
- package/expansion-packs/bmad-creator-tools/config.yaml +0 -5
- package/expansion-packs/bmad-creator-tools/tasks/generate-expansion-pack.md +0 -1020
- package/expansion-packs/bmad-creator-tools/templates/agent-teams-tmpl.yaml +0 -178
- package/expansion-packs/bmad-creator-tools/templates/agent-tmpl.yaml +0 -154
- package/expansion-packs/bmad-creator-tools/templates/expansion-pack-plan-tmpl.yaml +0 -120
- package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -8
- package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -308
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
- package/tools/bump-all-versions.js +0 -107
- package/tools/bump-core-version.js +0 -57
- package/tools/bump-expansion-version.js +0 -78
- package/tools/installer/config/ide-agent-config.yaml +0 -58
- package/tools/installer/config/install.config.yaml +0 -91
- package/tools/lib/yaml-utils.js +0 -29
- package/tools/md-assets/web-agent-startup-instructions.md +0 -39
- package/tools/update-expansion-version.js +0 -54
- /package/{bmad-core → .bmad-core}/checklists/architect-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}/data/technical-preferences.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/correct-course.md +0 -0
- /package/{bmad-core → .bmad-core}/tasks/create-deep-research-prompt.md +0 -0
- /package/.github/workflows/{release.yaml → release.yml} +0 -0
package/tools/cli.js
CHANGED
|
@@ -10,7 +10,7 @@ const program = new Command();
|
|
|
10
10
|
|
|
11
11
|
program
|
|
12
12
|
.name('bmad-build')
|
|
13
|
-
.description('
|
|
13
|
+
.description('BMAD-METHOD build tool for creating web bundles')
|
|
14
14
|
.version('4.0.0');
|
|
15
15
|
|
|
16
16
|
program
|
|
@@ -18,8 +18,6 @@ program
|
|
|
18
18
|
.description('Build web bundles for agents and teams')
|
|
19
19
|
.option('-a, --agents-only', 'Build only agent bundles')
|
|
20
20
|
.option('-t, --teams-only', 'Build only team bundles')
|
|
21
|
-
.option('-e, --expansions-only', 'Build only expansion pack bundles')
|
|
22
|
-
.option('--no-expansions', 'Skip building expansion packs')
|
|
23
21
|
.option('--no-clean', 'Skip cleaning output directories')
|
|
24
22
|
.action(async (options) => {
|
|
25
23
|
const builder = new WebBuilder({
|
|
@@ -32,23 +30,28 @@ program
|
|
|
32
30
|
await builder.cleanOutputDirs();
|
|
33
31
|
}
|
|
34
32
|
|
|
35
|
-
if (options.
|
|
36
|
-
console.log('Building
|
|
37
|
-
await builder.
|
|
38
|
-
}
|
|
39
|
-
if (!options.teamsOnly) {
|
|
40
|
-
console.log('Building agent bundles...');
|
|
41
|
-
await builder.buildAgents();
|
|
42
|
-
}
|
|
33
|
+
if (!options.teamsOnly) {
|
|
34
|
+
console.log('Building agent bundles...');
|
|
35
|
+
await builder.buildAgents();
|
|
36
|
+
}
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
38
|
+
if (!options.agentsOnly) {
|
|
39
|
+
console.log('Building team bundles...');
|
|
40
|
+
await builder.buildTeams();
|
|
41
|
+
}
|
|
48
42
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
// Generate IDE configuration folders
|
|
44
|
+
console.log('Generating IDE configuration folders...');
|
|
45
|
+
const installDir = process.cwd();
|
|
46
|
+
|
|
47
|
+
// Generate configurations for all supported IDEs
|
|
48
|
+
const ides = ['cursor', 'claude-code', 'windsurf', 'roo'];
|
|
49
|
+
for (const ide of ides) {
|
|
50
|
+
try {
|
|
51
|
+
console.log(`Setting up ${ide} integration...`);
|
|
52
|
+
await IdeSetup.setup(ide, installDir);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.warn(`Warning: Failed to setup ${ide}:`, error.message);
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
|
|
@@ -59,32 +62,6 @@ program
|
|
|
59
62
|
}
|
|
60
63
|
});
|
|
61
64
|
|
|
62
|
-
program
|
|
63
|
-
.command('build:expansions')
|
|
64
|
-
.description('Build web bundles for all expansion packs')
|
|
65
|
-
.option('--expansion <name>', 'Build specific expansion pack only')
|
|
66
|
-
.option('--no-clean', 'Skip cleaning output directories')
|
|
67
|
-
.action(async (options) => {
|
|
68
|
-
const builder = new WebBuilder({
|
|
69
|
-
rootDir: process.cwd()
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
try {
|
|
73
|
-
if (options.expansion) {
|
|
74
|
-
console.log(`Building expansion pack: ${options.expansion}`);
|
|
75
|
-
await builder.buildExpansionPack(options.expansion, { clean: options.clean });
|
|
76
|
-
} else {
|
|
77
|
-
console.log('Building all expansion packs...');
|
|
78
|
-
await builder.buildAllExpansionPacks({ clean: options.clean });
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
console.log('Expansion pack build completed successfully!');
|
|
82
|
-
} catch (error) {
|
|
83
|
-
console.error('Expansion pack build failed:', error.message);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
|
|
88
65
|
program
|
|
89
66
|
.command('list:agents')
|
|
90
67
|
.description('List all available agents')
|
|
@@ -95,16 +72,6 @@ program
|
|
|
95
72
|
agents.forEach(agent => console.log(` - ${agent}`));
|
|
96
73
|
});
|
|
97
74
|
|
|
98
|
-
program
|
|
99
|
-
.command('list:expansions')
|
|
100
|
-
.description('List all available expansion packs')
|
|
101
|
-
.action(async () => {
|
|
102
|
-
const builder = new WebBuilder({ rootDir: process.cwd() });
|
|
103
|
-
const expansions = await builder.listExpansionPacks();
|
|
104
|
-
console.log('Available expansion packs:');
|
|
105
|
-
expansions.forEach(expansion => console.log(` - ${expansion}`));
|
|
106
|
-
});
|
|
107
|
-
|
|
108
75
|
program
|
|
109
76
|
.command('validate')
|
|
110
77
|
.description('Validate agent and team configurations')
|
|
@@ -136,7 +103,7 @@ program
|
|
|
136
103
|
|
|
137
104
|
program
|
|
138
105
|
.command('upgrade')
|
|
139
|
-
.description('Upgrade a
|
|
106
|
+
.description('Upgrade a BMAD-METHOD V3 project to V4')
|
|
140
107
|
.option('-p, --project <path>', 'Path to V3 project (defaults to current directory)')
|
|
141
108
|
.option('--dry-run', 'Show what would be changed without making changes')
|
|
142
109
|
.option('--no-backup', 'Skip creating backup (not recommended)')
|
|
@@ -1,8 +1,58 @@
|
|
|
1
|
-
#
|
|
1
|
+
# BMAD Method Installer
|
|
2
|
+
|
|
3
|
+
This directory contains the BMAD Method installer implementation.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
installer/
|
|
9
|
+
├── bin/ # CLI entry points
|
|
10
|
+
│ └── bmad.js # Main CLI executable
|
|
11
|
+
├── lib/ # Core implementation
|
|
12
|
+
│ ├── installer.js # Main installation logic
|
|
13
|
+
│ ├── updater.js # Update management
|
|
14
|
+
│ ├── config-loader.js # YAML config parsing
|
|
15
|
+
│ ├── file-manager.js # File operations
|
|
16
|
+
│ ├── ide-setup.js # IDE-specific setup
|
|
17
|
+
│ └── prompts.js # Interactive CLI prompts
|
|
18
|
+
├── config/ # Configuration files
|
|
19
|
+
│ └── install.config.yml # Installation profiles
|
|
20
|
+
├── templates/ # IDE template files
|
|
21
|
+
│ ├── cursor-rules.md # Cursor template
|
|
22
|
+
│ ├── claude-commands.md # Claude Code template
|
|
23
|
+
│ └── windsurf-rules.md # Windsurf template
|
|
24
|
+
└── package.json # NPM package configuration
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Installation Profiles
|
|
28
|
+
|
|
29
|
+
- **minimal**: IDE agents only (best for beginners)
|
|
30
|
+
- **core**: IDE + Web agents
|
|
31
|
+
- **teams**: Full team workflows
|
|
32
|
+
- **developer**: Everything including creation tools
|
|
2
33
|
|
|
3
34
|
## Usage
|
|
4
35
|
|
|
5
|
-
|
|
36
|
+
````bash
|
|
6
37
|
# Interactive installation
|
|
7
38
|
npx bmad-method install
|
|
8
|
-
|
|
39
|
+
|
|
40
|
+
# Direct profile installation
|
|
41
|
+
npx bmad-method install --profile=minimal
|
|
42
|
+
|
|
43
|
+
# Update existing installation
|
|
44
|
+
npx bmad-method update
|
|
45
|
+
```text
|
|
46
|
+
|
|
47
|
+
## Development
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Install dependencies
|
|
51
|
+
npm install
|
|
52
|
+
|
|
53
|
+
# Run tests
|
|
54
|
+
npm test
|
|
55
|
+
|
|
56
|
+
# Lint code
|
|
57
|
+
npm run lint
|
|
58
|
+
````
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
const { program } = require('commander');
|
|
4
|
-
const path = require('path');
|
|
5
|
-
const fs = require('fs').promises;
|
|
6
|
-
const yaml = require('js-yaml');
|
|
7
4
|
|
|
8
5
|
// Dynamic imports for ES modules
|
|
9
6
|
let chalk, inquirer;
|
|
@@ -42,35 +39,29 @@ try {
|
|
|
42
39
|
|
|
43
40
|
program
|
|
44
41
|
.version(version)
|
|
45
|
-
.description('
|
|
42
|
+
.description('BMAD Method installer - AI-powered Agile development framework');
|
|
46
43
|
|
|
47
44
|
program
|
|
48
45
|
.command('install')
|
|
49
|
-
.description('Install
|
|
50
|
-
.option('-f, --full', 'Install complete
|
|
51
|
-
.option('-
|
|
52
|
-
.option('-d, --directory <path>', 'Installation directory')
|
|
53
|
-
.option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf,
|
|
54
|
-
.option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
|
|
46
|
+
.description('Install BMAD Method agents and tools')
|
|
47
|
+
.option('-f, --full', 'Install complete .bmad-core folder')
|
|
48
|
+
.option('-a, --agent <agent>', 'Install specific agent with dependencies')
|
|
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)')
|
|
55
51
|
.action(async (options) => {
|
|
56
52
|
try {
|
|
57
53
|
await initializeModules();
|
|
58
|
-
if (!options.full && !options.
|
|
54
|
+
if (!options.full && !options.agent) {
|
|
59
55
|
// Interactive mode
|
|
60
56
|
const answers = await promptInstallation();
|
|
61
|
-
|
|
62
|
-
await installer.install(answers);
|
|
63
|
-
}
|
|
57
|
+
await installer.install(answers);
|
|
64
58
|
} else {
|
|
65
59
|
// Direct mode
|
|
66
|
-
let installType = 'full';
|
|
67
|
-
if (options.expansionOnly) installType = 'expansion-only';
|
|
68
|
-
|
|
69
60
|
const config = {
|
|
70
|
-
installType,
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
61
|
+
installType: options.full ? 'full' : 'single-agent',
|
|
62
|
+
agent: options.agent,
|
|
63
|
+
directory: options.directory || '.bmad-core',
|
|
64
|
+
ides: options.ide || []
|
|
74
65
|
};
|
|
75
66
|
await installer.install(config);
|
|
76
67
|
}
|
|
@@ -83,7 +74,7 @@ program
|
|
|
83
74
|
|
|
84
75
|
program
|
|
85
76
|
.command('update')
|
|
86
|
-
.description('Update existing
|
|
77
|
+
.description('Update existing BMAD installation')
|
|
87
78
|
.option('--force', 'Force update, overwriting modified files')
|
|
88
79
|
.option('--dry-run', 'Show what would be updated without making changes')
|
|
89
80
|
.action(async () => {
|
|
@@ -97,11 +88,11 @@ program
|
|
|
97
88
|
});
|
|
98
89
|
|
|
99
90
|
program
|
|
100
|
-
.command('list
|
|
101
|
-
.description('List available
|
|
91
|
+
.command('list')
|
|
92
|
+
.description('List available agents')
|
|
102
93
|
.action(async () => {
|
|
103
94
|
try {
|
|
104
|
-
await installer.
|
|
95
|
+
await installer.listAgents();
|
|
105
96
|
} catch (error) {
|
|
106
97
|
if (!chalk) await initializeModules();
|
|
107
98
|
console.error(chalk.red('Error:'), error.message);
|
|
@@ -124,156 +115,56 @@ program
|
|
|
124
115
|
|
|
125
116
|
async function promptInstallation() {
|
|
126
117
|
await initializeModules();
|
|
127
|
-
console.log(chalk.bold.blue(`\nWelcome to
|
|
118
|
+
console.log(chalk.bold.blue(`\nWelcome to BMAD Method Installer v${version}\n`));
|
|
128
119
|
|
|
129
120
|
const answers = {};
|
|
130
121
|
|
|
131
|
-
// Ask for installation directory
|
|
122
|
+
// Ask for installation directory
|
|
132
123
|
const { directory } = await inquirer.prompt([
|
|
133
124
|
{
|
|
134
125
|
type: 'input',
|
|
135
126
|
name: 'directory',
|
|
136
|
-
message: '
|
|
137
|
-
|
|
138
|
-
if (!input.trim()) {
|
|
139
|
-
return 'Please enter a valid project path';
|
|
140
|
-
}
|
|
141
|
-
return true;
|
|
142
|
-
}
|
|
127
|
+
message: 'Where would you like to install BMAD?',
|
|
128
|
+
default: '.bmad-core'
|
|
143
129
|
}
|
|
144
130
|
]);
|
|
145
131
|
answers.directory = directory;
|
|
146
132
|
|
|
147
|
-
//
|
|
148
|
-
const
|
|
149
|
-
const state = await installer.detectInstallationState(installDir);
|
|
150
|
-
|
|
151
|
-
// Check for existing expansion packs
|
|
152
|
-
const existingExpansionPacks = state.expansionPacks || {};
|
|
153
|
-
|
|
154
|
-
// Get available expansion packs
|
|
155
|
-
const availableExpansionPacks = await installer.getAvailableExpansionPacks();
|
|
156
|
-
|
|
157
|
-
// Build choices list
|
|
158
|
-
const choices = [];
|
|
159
|
-
|
|
160
|
-
// Load core config to get short-title
|
|
161
|
-
const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
|
|
162
|
-
const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
|
|
163
|
-
const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
|
|
164
|
-
|
|
165
|
-
// Add BMad core option
|
|
166
|
-
let bmadOptionText;
|
|
167
|
-
if (state.type === 'v4_existing') {
|
|
168
|
-
const currentVersion = state.manifest?.version || 'unknown';
|
|
169
|
-
const newVersion = coreConfig.version || 'unknown'; // Use version from core-config.yaml
|
|
170
|
-
const versionInfo = currentVersion === newVersion
|
|
171
|
-
? `(v${currentVersion} - reinstall)`
|
|
172
|
-
: `(v${currentVersion} → v${newVersion})`;
|
|
173
|
-
bmadOptionText = `Update ${coreShortTitle} ${versionInfo} .bmad-core`;
|
|
174
|
-
} else {
|
|
175
|
-
bmadOptionText = `Install ${coreShortTitle} (v${coreConfig.version || version}) .bmad-core`;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
choices.push({
|
|
179
|
-
name: bmadOptionText,
|
|
180
|
-
value: 'bmad-core',
|
|
181
|
-
checked: true
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
// Add expansion pack options
|
|
185
|
-
for (const pack of availableExpansionPacks) {
|
|
186
|
-
const existing = existingExpansionPacks[pack.id];
|
|
187
|
-
let packOptionText;
|
|
188
|
-
|
|
189
|
-
if (existing) {
|
|
190
|
-
const currentVersion = existing.manifest?.version || 'unknown';
|
|
191
|
-
const newVersion = pack.version;
|
|
192
|
-
const versionInfo = currentVersion === newVersion
|
|
193
|
-
? `(v${currentVersion} - reinstall)`
|
|
194
|
-
: `(v${currentVersion} → v${newVersion})`;
|
|
195
|
-
packOptionText = `Update ${pack.description} ${versionInfo} .${pack.id}`;
|
|
196
|
-
} else {
|
|
197
|
-
packOptionText = `Install ${pack.description} (v${pack.version}) .${pack.id}`;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
choices.push({
|
|
201
|
-
name: packOptionText,
|
|
202
|
-
value: pack.id,
|
|
203
|
-
checked: false
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// Ask what to install
|
|
208
|
-
const { selectedItems } = await inquirer.prompt([
|
|
133
|
+
// Ask for installation type
|
|
134
|
+
const { installType } = await inquirer.prompt([
|
|
209
135
|
{
|
|
210
|
-
type: '
|
|
211
|
-
name: '
|
|
212
|
-
message: '
|
|
213
|
-
choices:
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
136
|
+
type: 'list',
|
|
137
|
+
name: 'installType',
|
|
138
|
+
message: 'How would you like to install BMAD?',
|
|
139
|
+
choices: [
|
|
140
|
+
{
|
|
141
|
+
name: 'Complete installation (recommended) - All agents and tools',
|
|
142
|
+
value: 'full'
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
name: 'Single agent - Choose one agent to install',
|
|
146
|
+
value: 'single-agent'
|
|
217
147
|
}
|
|
218
|
-
|
|
219
|
-
}
|
|
148
|
+
]
|
|
220
149
|
}
|
|
221
150
|
]);
|
|
222
|
-
|
|
223
|
-
// Process selections
|
|
224
|
-
answers.installType = selectedItems.includes('bmad-core') ? 'full' : 'expansion-only';
|
|
225
|
-
answers.expansionPacks = selectedItems.filter(item => item !== 'bmad-core');
|
|
151
|
+
answers.installType = installType;
|
|
226
152
|
|
|
227
|
-
//
|
|
228
|
-
if (
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
// Ask about PRD sharding
|
|
233
|
-
const { prdSharded } = await inquirer.prompt([
|
|
234
|
-
{
|
|
235
|
-
type: 'confirm',
|
|
236
|
-
name: 'prdSharded',
|
|
237
|
-
message: 'Will the PRD (Product Requirements Document) be sharded into multiple files?',
|
|
238
|
-
default: true
|
|
239
|
-
}
|
|
240
|
-
]);
|
|
241
|
-
answers.prdSharded = prdSharded;
|
|
242
|
-
|
|
243
|
-
// Ask about architecture sharding
|
|
244
|
-
const { architectureSharded } = await inquirer.prompt([
|
|
153
|
+
// If single agent, ask which one
|
|
154
|
+
if (installType === 'single-agent') {
|
|
155
|
+
const agents = await installer.getAvailableAgents();
|
|
156
|
+
const { agent } = await inquirer.prompt([
|
|
245
157
|
{
|
|
246
|
-
type: '
|
|
247
|
-
name: '
|
|
248
|
-
message: '
|
|
249
|
-
|
|
158
|
+
type: 'list',
|
|
159
|
+
name: 'agent',
|
|
160
|
+
message: 'Select an agent to install:',
|
|
161
|
+
choices: agents.map(a => ({
|
|
162
|
+
name: `${a.id} - ${a.name} (${a.description})`,
|
|
163
|
+
value: a.id
|
|
164
|
+
}))
|
|
250
165
|
}
|
|
251
166
|
]);
|
|
252
|
-
answers.
|
|
253
|
-
|
|
254
|
-
// Show warning if architecture sharding is disabled
|
|
255
|
-
if (!architectureSharded) {
|
|
256
|
-
console.log(chalk.yellow.bold('\n⚠️ IMPORTANT: Architecture Sharding Disabled'));
|
|
257
|
-
console.log(chalk.yellow('With architecture sharding disabled, you should still create the files listed'));
|
|
258
|
-
console.log(chalk.yellow('in devLoadAlwaysFiles (like coding-standards.md, tech-stack.md, source-tree.md)'));
|
|
259
|
-
console.log(chalk.yellow('as these are used by the dev agent at runtime.'));
|
|
260
|
-
console.log(chalk.yellow('\nAlternatively, you can remove these files from the devLoadAlwaysFiles list'));
|
|
261
|
-
console.log(chalk.yellow('in your core-config.yaml after installation.'));
|
|
262
|
-
|
|
263
|
-
const { acknowledge } = await inquirer.prompt([
|
|
264
|
-
{
|
|
265
|
-
type: 'confirm',
|
|
266
|
-
name: 'acknowledge',
|
|
267
|
-
message: 'Do you acknowledge this requirement and want to proceed?',
|
|
268
|
-
default: false
|
|
269
|
-
}
|
|
270
|
-
]);
|
|
271
|
-
|
|
272
|
-
if (!acknowledge) {
|
|
273
|
-
console.log(chalk.red('Installation cancelled.'));
|
|
274
|
-
process.exit(0);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
167
|
+
answers.agent = agent;
|
|
277
168
|
}
|
|
278
169
|
|
|
279
170
|
// Ask for IDE configuration
|
|
@@ -281,151 +172,22 @@ async function promptInstallation() {
|
|
|
281
172
|
{
|
|
282
173
|
type: 'checkbox',
|
|
283
174
|
name: 'ides',
|
|
284
|
-
message: 'Which IDE(s) are you using? (
|
|
175
|
+
message: 'Which IDE(s) are you using? (Select all that apply)',
|
|
285
176
|
choices: [
|
|
286
177
|
{ name: 'Cursor', value: 'cursor' },
|
|
287
178
|
{ name: 'Claude Code', value: 'claude-code' },
|
|
288
179
|
{ name: 'Windsurf', value: 'windsurf' },
|
|
289
|
-
{ name: '
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
]);
|
|
297
|
-
|
|
298
|
-
// Use selected IDEs directly
|
|
299
|
-
answers.ides = ides;
|
|
300
|
-
|
|
301
|
-
// Configure GitHub Copilot immediately if selected
|
|
302
|
-
if (ides.includes('github-copilot')) {
|
|
303
|
-
console.log(chalk.cyan('\n🔧 GitHub Copilot Configuration'));
|
|
304
|
-
console.log(chalk.dim('BMad works best with specific VS Code settings for optimal agent experience.\n'));
|
|
305
|
-
|
|
306
|
-
const { configChoice } = await inquirer.prompt([
|
|
307
|
-
{
|
|
308
|
-
type: 'list',
|
|
309
|
-
name: 'configChoice',
|
|
310
|
-
message: chalk.yellow('How would you like to configure GitHub Copilot settings?'),
|
|
311
|
-
choices: [
|
|
312
|
-
{
|
|
313
|
-
name: 'Use recommended defaults (fastest setup)',
|
|
314
|
-
value: 'defaults'
|
|
315
|
-
},
|
|
316
|
-
{
|
|
317
|
-
name: 'Configure each setting manually (customize to your preferences)',
|
|
318
|
-
value: 'manual'
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
name: 'Skip settings configuration (I\'ll configure manually later)',
|
|
322
|
-
value: 'skip'
|
|
323
|
-
}
|
|
324
|
-
],
|
|
325
|
-
default: 'defaults'
|
|
180
|
+
{ name: 'Roo Code', value: 'roo' }
|
|
181
|
+
],
|
|
182
|
+
validate: (answer) => {
|
|
183
|
+
if (answer.length < 1) {
|
|
184
|
+
return 'You must choose at least one IDE, or press Ctrl+C to skip IDE setup.';
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
326
187
|
}
|
|
327
|
-
]);
|
|
328
|
-
|
|
329
|
-
answers.githubCopilotConfig = { configChoice };
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
// Ask for web bundles installation
|
|
333
|
-
const { includeWebBundles } = await inquirer.prompt([
|
|
334
|
-
{
|
|
335
|
-
type: 'confirm',
|
|
336
|
-
name: 'includeWebBundles',
|
|
337
|
-
message: 'Would you like to include pre-built web bundles? (standalone files for ChatGPT, Claude, Gemini)',
|
|
338
|
-
default: false
|
|
339
188
|
}
|
|
340
189
|
]);
|
|
341
|
-
|
|
342
|
-
if (includeWebBundles) {
|
|
343
|
-
console.log(chalk.cyan('\n📦 Web bundles are standalone files perfect for web AI platforms.'));
|
|
344
|
-
console.log(chalk.dim(' You can choose different teams/agents than your IDE installation.\n'));
|
|
345
|
-
|
|
346
|
-
const { webBundleType } = await inquirer.prompt([
|
|
347
|
-
{
|
|
348
|
-
type: 'list',
|
|
349
|
-
name: 'webBundleType',
|
|
350
|
-
message: 'What web bundles would you like to include?',
|
|
351
|
-
choices: [
|
|
352
|
-
{
|
|
353
|
-
name: 'All available bundles (agents, teams, expansion packs)',
|
|
354
|
-
value: 'all'
|
|
355
|
-
},
|
|
356
|
-
{
|
|
357
|
-
name: 'Specific teams only',
|
|
358
|
-
value: 'teams'
|
|
359
|
-
},
|
|
360
|
-
{
|
|
361
|
-
name: 'Individual agents only',
|
|
362
|
-
value: 'agents'
|
|
363
|
-
},
|
|
364
|
-
{
|
|
365
|
-
name: 'Custom selection',
|
|
366
|
-
value: 'custom'
|
|
367
|
-
}
|
|
368
|
-
]
|
|
369
|
-
}
|
|
370
|
-
]);
|
|
371
|
-
|
|
372
|
-
answers.webBundleType = webBundleType;
|
|
373
|
-
|
|
374
|
-
// If specific teams, let them choose which teams
|
|
375
|
-
if (webBundleType === 'teams' || webBundleType === 'custom') {
|
|
376
|
-
const teams = await installer.getAvailableTeams();
|
|
377
|
-
const { selectedTeams } = await inquirer.prompt([
|
|
378
|
-
{
|
|
379
|
-
type: 'checkbox',
|
|
380
|
-
name: 'selectedTeams',
|
|
381
|
-
message: 'Select team bundles to include:',
|
|
382
|
-
choices: teams.map(t => ({
|
|
383
|
-
name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
|
|
384
|
-
value: t.id,
|
|
385
|
-
checked: webBundleType === 'teams' // Check all if teams-only mode
|
|
386
|
-
})),
|
|
387
|
-
validate: (answer) => {
|
|
388
|
-
if (answer.length < 1) {
|
|
389
|
-
return 'You must select at least one team.';
|
|
390
|
-
}
|
|
391
|
-
return true;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
]);
|
|
395
|
-
answers.selectedWebBundleTeams = selectedTeams;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
// If custom selection, also ask about individual agents
|
|
399
|
-
if (webBundleType === 'custom') {
|
|
400
|
-
const { includeIndividualAgents } = await inquirer.prompt([
|
|
401
|
-
{
|
|
402
|
-
type: 'confirm',
|
|
403
|
-
name: 'includeIndividualAgents',
|
|
404
|
-
message: 'Also include individual agent bundles?',
|
|
405
|
-
default: true
|
|
406
|
-
}
|
|
407
|
-
]);
|
|
408
|
-
answers.includeIndividualAgents = includeIndividualAgents;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
const { webBundlesDirectory } = await inquirer.prompt([
|
|
412
|
-
{
|
|
413
|
-
type: 'input',
|
|
414
|
-
name: 'webBundlesDirectory',
|
|
415
|
-
message: 'Enter directory for web bundles:',
|
|
416
|
-
default: `${answers.directory}/web-bundles`,
|
|
417
|
-
validate: (input) => {
|
|
418
|
-
if (!input.trim()) {
|
|
419
|
-
return 'Please enter a valid directory path';
|
|
420
|
-
}
|
|
421
|
-
return true;
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
]);
|
|
425
|
-
answers.webBundlesDirectory = webBundlesDirectory;
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
answers.includeWebBundles = includeWebBundles;
|
|
190
|
+
answers.ides = ides;
|
|
429
191
|
|
|
430
192
|
return answers;
|
|
431
193
|
}
|