bmad-method 5.0.0 → 5.1.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.
Files changed (329) hide show
  1. package/.github/FUNDING.yaml +15 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  4. package/.github/workflows/discord.yaml +25 -0
  5. package/.github/workflows/format-check.yaml +42 -0
  6. package/.github/workflows/manual-release.yaml +173 -0
  7. package/.husky/pre-commit +3 -2
  8. package/.vscode/settings.json +67 -74
  9. package/CHANGELOG.md +564 -19
  10. package/CONTRIBUTING.md +168 -5
  11. package/LICENSE +1 -1
  12. package/README.md +146 -218
  13. package/bmad-core/agent-teams/team-all.yaml +14 -0
  14. package/bmad-core/agent-teams/team-fullstack.yaml +18 -0
  15. package/bmad-core/agent-teams/team-ide-minimal.yaml +10 -0
  16. package/bmad-core/agent-teams/team-no-ui.yaml +13 -0
  17. package/bmad-core/agents/analyst.md +81 -0
  18. package/bmad-core/agents/architect.md +83 -0
  19. package/bmad-core/agents/bmad-master.md +107 -0
  20. package/bmad-core/agents/bmad-orchestrator.md +149 -0
  21. package/bmad-core/agents/dev.md +75 -0
  22. package/bmad-core/agents/pm.md +81 -0
  23. package/bmad-core/agents/po.md +76 -0
  24. package/bmad-core/agents/qa.md +88 -0
  25. package/bmad-core/agents/sm.md +62 -0
  26. package/bmad-core/agents/ux-expert.md +66 -0
  27. package/{.bmad-core → bmad-core}/checklists/architect-checklist.md +0 -5
  28. package/{.bmad-core → bmad-core}/checklists/change-checklist.md +2 -2
  29. package/{.bmad-core → bmad-core}/checklists/pm-checklist.md +0 -5
  30. package/{.bmad-core → bmad-core}/checklists/po-master-checklist.md +0 -9
  31. package/{.bmad-core → bmad-core}/checklists/story-dod-checklist.md +0 -7
  32. package/{.bmad-core → bmad-core}/checklists/story-draft-checklist.md +1 -4
  33. package/bmad-core/core-config.yaml +20 -0
  34. package/bmad-core/data/bmad-kb.md +806 -0
  35. package/bmad-core/data/brainstorming-techniques.md +36 -0
  36. package/bmad-core/data/elicitation-methods.md +154 -0
  37. package/bmad-core/data/test-levels-framework.md +146 -0
  38. package/bmad-core/data/test-priorities-matrix.md +172 -0
  39. package/bmad-core/tasks/advanced-elicitation.md +117 -0
  40. package/{.bmad-core → bmad-core}/tasks/correct-course.md +9 -12
  41. package/bmad-core/tasks/create-brownfield-story.md +312 -0
  42. package/{.bmad-core → bmad-core}/tasks/create-deep-research-prompt.md +4 -27
  43. package/bmad-core/tasks/create-next-story.md +112 -0
  44. package/bmad-core/tasks/document-project.md +343 -0
  45. package/bmad-core/tasks/facilitate-brainstorming-session.md +136 -0
  46. package/bmad-core/tasks/generate-ai-frontend-prompt.md +51 -0
  47. package/{.bmad-core → bmad-core}/tasks/index-docs.md +3 -13
  48. package/bmad-core/tasks/kb-mode-interaction.md +75 -0
  49. package/bmad-core/tasks/nfr-assess.md +343 -0
  50. package/bmad-core/tasks/qa-gate.md +159 -0
  51. package/bmad-core/tasks/review-story.md +314 -0
  52. package/bmad-core/tasks/risk-profile.md +353 -0
  53. package/{.bmad-core → bmad-core}/tasks/shard-doc.md +27 -15
  54. package/bmad-core/tasks/test-design.md +174 -0
  55. package/bmad-core/tasks/trace-requirements.md +264 -0
  56. package/bmad-core/tasks/validate-next-story.md +134 -0
  57. package/bmad-core/templates/architecture-tmpl.yaml +650 -0
  58. package/bmad-core/templates/brainstorming-output-tmpl.yaml +156 -0
  59. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +476 -0
  60. package/bmad-core/templates/brownfield-prd-tmpl.yaml +280 -0
  61. package/bmad-core/templates/competitor-analysis-tmpl.yaml +306 -0
  62. package/bmad-core/templates/front-end-architecture-tmpl.yaml +218 -0
  63. package/bmad-core/templates/front-end-spec-tmpl.yaml +349 -0
  64. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +823 -0
  65. package/bmad-core/templates/market-research-tmpl.yaml +252 -0
  66. package/bmad-core/templates/prd-tmpl.yaml +202 -0
  67. package/bmad-core/templates/project-brief-tmpl.yaml +221 -0
  68. package/bmad-core/templates/qa-gate-tmpl.yaml +102 -0
  69. package/bmad-core/templates/story-tmpl.yaml +137 -0
  70. package/bmad-core/workflows/brownfield-fullstack.yaml +297 -0
  71. package/bmad-core/workflows/brownfield-service.yaml +187 -0
  72. package/bmad-core/workflows/brownfield-ui.yaml +197 -0
  73. package/{.bmad-core/workflows/greenfield-fullstack.yml → bmad-core/workflows/greenfield-fullstack.yaml} +140 -77
  74. package/bmad-core/workflows/greenfield-service.yaml +206 -0
  75. package/bmad-core/workflows/greenfield-ui.yaml +235 -0
  76. package/common/tasks/create-doc.md +101 -0
  77. package/{.bmad-core → common}/tasks/execute-checklist.md +2 -13
  78. package/common/utils/bmad-doc-template.md +325 -0
  79. package/common/utils/workflow-management.md +69 -0
  80. package/dist/agents/analyst.txt +2889 -0
  81. package/dist/agents/architect.txt +3552 -0
  82. package/dist/agents/bmad-master.txt +8769 -0
  83. package/dist/agents/bmad-orchestrator.txt +1513 -0
  84. package/dist/agents/dev.txt +414 -0
  85. package/{.bmad-core/web-bundles → dist}/agents/pm.txt +668 -1119
  86. package/{.bmad-core/web-bundles → dist}/agents/po.txt +341 -484
  87. package/dist/agents/qa.txt +1987 -0
  88. package/dist/agents/sm.txt +658 -0
  89. package/dist/agents/ux-expert.txt +694 -0
  90. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +2371 -0
  91. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +1620 -0
  92. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +815 -0
  93. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +10952 -0
  94. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +4012 -0
  95. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +3698 -0
  96. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +450 -0
  97. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +973 -0
  98. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +15376 -0
  99. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +2075 -0
  100. package/dist/teams/team-all.txt +12682 -0
  101. package/dist/teams/team-fullstack.txt +10421 -0
  102. package/dist/teams/team-ide-minimal.txt +5103 -0
  103. package/dist/teams/team-no-ui.txt +8980 -0
  104. package/docs/GUIDING-PRINCIPLES.md +91 -0
  105. package/docs/core-architecture.md +219 -0
  106. package/docs/enhanced-ide-development-workflow.md +248 -0
  107. package/docs/expansion-packs.md +280 -0
  108. package/docs/how-to-contribute-with-pull-requests.md +158 -0
  109. package/docs/user-guide.md +504 -0
  110. package/docs/versioning-and-releases.md +8 -16
  111. package/docs/versions.md +4 -5
  112. package/docs/working-in-the-brownfield.md +597 -0
  113. package/eslint.config.mjs +119 -0
  114. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +102 -0
  115. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +13 -0
  116. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +13 -0
  117. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +25 -0
  118. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +34 -0
  119. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +70 -0
  120. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +26 -0
  121. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +109 -0
  122. package/expansion-packs/README.md +2 -112
  123. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +13 -0
  124. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +71 -0
  125. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +78 -0
  126. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +64 -0
  127. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +201 -0
  128. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +160 -0
  129. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +8 -0
  130. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +250 -0
  131. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +647 -0
  132. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +110 -0
  133. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +216 -0
  134. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +290 -0
  135. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +613 -0
  136. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +356 -0
  137. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +343 -0
  138. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +253 -0
  139. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +484 -0
  140. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +183 -0
  141. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +175 -0
  142. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +14 -0
  143. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +80 -0
  144. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +77 -0
  145. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +78 -0
  146. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +65 -0
  147. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +391 -0
  148. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +203 -0
  149. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +201 -0
  150. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +124 -0
  151. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +6 -0
  152. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +769 -0
  153. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +586 -0
  154. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +110 -0
  155. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +141 -0
  156. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +184 -0
  157. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +290 -0
  158. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +200 -0
  159. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +1030 -0
  160. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +356 -0
  161. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +705 -0
  162. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +256 -0
  163. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +484 -0
  164. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +183 -0
  165. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +175 -0
  166. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/README.md +9 -9
  167. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/agents/infra-devops-platform.md +30 -18
  168. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/checklists/infrastructure-checklist.md +1 -1
  169. package/expansion-packs/bmad-infrastructure-devops/config.yaml +9 -0
  170. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +305 -0
  171. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/review-infrastructure.md +4 -5
  172. package/expansion-packs/{infrastructure-devops → bmad-infrastructure-devops}/tasks/validate-infrastructure.md +4 -5
  173. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +424 -0
  174. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +629 -0
  175. package/package.json +74 -42
  176. package/prettier.config.mjs +32 -0
  177. package/release_notes.md +25 -0
  178. package/tools/bmad-npx-wrapper.js +13 -15
  179. package/tools/builders/web-builder.js +544 -15
  180. package/tools/bump-all-versions.js +115 -0
  181. package/tools/bump-expansion-version.js +90 -0
  182. package/tools/cli.js +65 -32
  183. package/tools/flattener/aggregate.js +76 -0
  184. package/tools/flattener/binary.js +80 -0
  185. package/tools/flattener/discovery.js +71 -0
  186. package/tools/flattener/files.js +35 -0
  187. package/tools/flattener/ignoreRules.js +176 -0
  188. package/tools/flattener/main.js +573 -0
  189. package/tools/flattener/projectRoot.js +206 -0
  190. package/tools/flattener/prompts.js +44 -0
  191. package/tools/flattener/stats.helpers.js +395 -0
  192. package/tools/flattener/stats.js +80 -0
  193. package/tools/flattener/test-matrix.js +413 -0
  194. package/tools/flattener/xml.js +88 -0
  195. package/tools/installer/README.md +3 -53
  196. package/tools/installer/bin/bmad.js +475 -90
  197. package/tools/installer/config/ide-agent-config.yaml +58 -0
  198. package/tools/installer/config/install.config.yaml +123 -0
  199. package/tools/installer/lib/config-loader.js +208 -40
  200. package/tools/installer/lib/file-manager.js +258 -55
  201. package/tools/installer/lib/ide-base-setup.js +228 -0
  202. package/tools/installer/lib/ide-setup.js +1265 -253
  203. package/tools/installer/lib/installer.js +1651 -310
  204. package/tools/installer/lib/memory-profiler.js +225 -0
  205. package/tools/installer/lib/module-manager.js +114 -0
  206. package/tools/installer/lib/resource-locator.js +308 -0
  207. package/tools/installer/package.json +25 -24
  208. package/tools/lib/dependency-resolver.js +44 -48
  209. package/tools/lib/yaml-utils.js +29 -0
  210. package/tools/md-assets/web-agent-startup-instructions.md +39 -0
  211. package/tools/preview-release-notes.js +66 -0
  212. package/tools/shared/bannerArt.js +105 -0
  213. package/tools/sync-installer-version.js +7 -9
  214. package/tools/update-expansion-version.js +53 -0
  215. package/tools/upgraders/v3-to-v4-upgrader.js +221 -320
  216. package/tools/version-bump.js +42 -27
  217. package/tools/yaml-format.js +57 -44
  218. package/.bmad-core/agent-teams/team-all.yml +0 -16
  219. package/.bmad-core/agent-teams/team-fullstack.yml +0 -26
  220. package/.bmad-core/agent-teams/team-no-ui.yml +0 -15
  221. package/.bmad-core/agents/analyst.md +0 -59
  222. package/.bmad-core/agents/architect.md +0 -66
  223. package/.bmad-core/agents/bmad-master.md +0 -104
  224. package/.bmad-core/agents/bmad-orchestrator.md +0 -81
  225. package/.bmad-core/agents/dev.md +0 -70
  226. package/.bmad-core/agents/pm.md +0 -59
  227. package/.bmad-core/agents/po.md +0 -60
  228. package/.bmad-core/agents/qa.md +0 -52
  229. package/.bmad-core/agents/sm.md +0 -55
  230. package/.bmad-core/agents/ux-expert.md +0 -66
  231. package/.bmad-core/data/bmad-kb.md +0 -47
  232. package/.bmad-core/schemas/agent-team-schema.yml +0 -153
  233. package/.bmad-core/tasks/advanced-elicitation.md +0 -92
  234. package/.bmad-core/tasks/brainstorming-techniques.md +0 -238
  235. package/.bmad-core/tasks/core-dump.md +0 -74
  236. package/.bmad-core/tasks/create-agent.md +0 -202
  237. package/.bmad-core/tasks/create-doc.md +0 -74
  238. package/.bmad-core/tasks/create-expansion-pack.md +0 -425
  239. package/.bmad-core/tasks/create-next-story.md +0 -206
  240. package/.bmad-core/tasks/create-team.md +0 -229
  241. package/.bmad-core/tasks/doc-migration-task.md +0 -143
  242. package/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -58
  243. package/.bmad-core/templates/agent-tmpl.md +0 -58
  244. package/.bmad-core/templates/architecture-tmpl.md +0 -771
  245. package/.bmad-core/templates/brownfield-architecture-tmpl.md +0 -542
  246. package/.bmad-core/templates/brownfield-prd-tmpl.md +0 -240
  247. package/.bmad-core/templates/competitor-analysis-tmpl.md +0 -289
  248. package/.bmad-core/templates/expansion-pack-plan-tmpl.md +0 -91
  249. package/.bmad-core/templates/front-end-architecture-tmpl.md +0 -173
  250. package/.bmad-core/templates/front-end-spec-tmpl.md +0 -411
  251. package/.bmad-core/templates/fullstack-architecture-tmpl.md +0 -1016
  252. package/.bmad-core/templates/market-research-tmpl.md +0 -261
  253. package/.bmad-core/templates/prd-tmpl.md +0 -200
  254. package/.bmad-core/templates/project-brief-tmpl.md +0 -228
  255. package/.bmad-core/templates/simple-project-prd-tmpl.md +0 -461
  256. package/.bmad-core/templates/story-tmpl.md +0 -61
  257. package/.bmad-core/templates/web-agent-startup-instructions-template.md +0 -39
  258. package/.bmad-core/utils/agent-switcher.ide.md +0 -112
  259. package/.bmad-core/utils/template-format.md +0 -26
  260. package/.bmad-core/utils/workflow-management.md +0 -224
  261. package/.bmad-core/web-bundles/agents/analyst.txt +0 -1684
  262. package/.bmad-core/web-bundles/agents/architect.txt +0 -3584
  263. package/.bmad-core/web-bundles/agents/bmad-master.txt +0 -9491
  264. package/.bmad-core/web-bundles/agents/bmad-orchestrator.txt +0 -1466
  265. package/.bmad-core/web-bundles/agents/dev.txt +0 -316
  266. package/.bmad-core/web-bundles/agents/qa.txt +0 -129
  267. package/.bmad-core/web-bundles/agents/sm.txt +0 -658
  268. package/.bmad-core/web-bundles/agents/ux-expert.txt +0 -1099
  269. package/.bmad-core/web-bundles/teams/team-all.txt +0 -10757
  270. package/.bmad-core/web-bundles/teams/team-fullstack.txt +0 -10109
  271. package/.bmad-core/web-bundles/teams/team-no-ui.txt +0 -8950
  272. package/.bmad-core/workflows/brownfield-fullstack.yml +0 -116
  273. package/.bmad-core/workflows/brownfield-service.yml +0 -117
  274. package/.bmad-core/workflows/brownfield-ui.yml +0 -127
  275. package/.bmad-core/workflows/greenfield-service.yml +0 -143
  276. package/.bmad-core/workflows/greenfield-ui.yml +0 -172
  277. package/.claude/commands/analyst.md +0 -63
  278. package/.claude/commands/architect.md +0 -70
  279. package/.claude/commands/bmad-master.md +0 -108
  280. package/.claude/commands/bmad-orchestrator.md +0 -85
  281. package/.claude/commands/dev.md +0 -74
  282. package/.claude/commands/pm.md +0 -63
  283. package/.claude/commands/po.md +0 -64
  284. package/.claude/commands/qa.md +0 -56
  285. package/.claude/commands/sm.md +0 -59
  286. package/.claude/commands/ux-expert.md +0 -70
  287. package/.cursor/rules/analyst.mdc +0 -77
  288. package/.cursor/rules/architect.mdc +0 -84
  289. package/.cursor/rules/bmad-master.mdc +0 -122
  290. package/.cursor/rules/bmad-orchestrator.mdc +0 -99
  291. package/.cursor/rules/dev.mdc +0 -88
  292. package/.cursor/rules/pm.mdc +0 -77
  293. package/.cursor/rules/po.mdc +0 -78
  294. package/.cursor/rules/qa.mdc +0 -70
  295. package/.cursor/rules/sm.mdc +0 -73
  296. package/.cursor/rules/ux-expert.mdc +0 -84
  297. package/.github/workflows/release.yml +0 -59
  298. package/.releaserc.json +0 -18
  299. package/.roo/.roomodes +0 -95
  300. package/.roo/README.md +0 -38
  301. package/.vscode/extensions.json +0 -6
  302. package/.windsurf/rules/analyst.md +0 -71
  303. package/.windsurf/rules/architect.md +0 -78
  304. package/.windsurf/rules/bmad-master.md +0 -116
  305. package/.windsurf/rules/bmad-orchestrator.md +0 -93
  306. package/.windsurf/rules/dev.md +0 -82
  307. package/.windsurf/rules/pm.md +0 -71
  308. package/.windsurf/rules/po.md +0 -72
  309. package/.windsurf/rules/qa.md +0 -64
  310. package/.windsurf/rules/sm.md +0 -67
  311. package/.windsurf/rules/ux-expert.md +0 -78
  312. package/docs/bmad-workflow-guide.md +0 -161
  313. package/docs/claude-code-guide.md +0 -119
  314. package/docs/cursor-guide.md +0 -127
  315. package/docs/roo-code-guide.md +0 -140
  316. package/docs/sample-output/simple-fullstack-greenfield/prd.md +0 -42
  317. package/docs/windsurf-guide.md +0 -127
  318. package/expansion-packs/infrastructure-devops/manifest.yml +0 -38
  319. package/expansion-packs/infrastructure-devops/templates/infrastructure-architecture-tmpl.md +0 -415
  320. package/expansion-packs/infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.md +0 -0
  321. package/tools/installer/config/install.config.yml +0 -139
  322. package/tools/installer/package-lock.json +0 -906
  323. package/tools/installer/templates/claude-commands.md +0 -7
  324. package/tools/installer/templates/cursor-rules.md +0 -22
  325. package/tools/installer/templates/windsurf-rules.md +0 -22
  326. package/tools/semantic-release-sync-installer.js +0 -31
  327. /package/{.bmad-core → bmad-core}/data/technical-preferences.md +0 -0
  328. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-epic.md +0 -0
  329. /package/{.bmad-core → bmad-core}/tasks/brownfield-create-story.md +0 -0
@@ -1,37 +1,37 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const { program } = require('commander');
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
- }
4
+ const path = require('node:path');
5
+ const fs = require('node:fs').promises;
6
+ const yaml = require('js-yaml');
7
+ const chalk = require('chalk').default || require('chalk');
8
+ const inquirer = require('inquirer').default || require('inquirer');
9
+ const semver = require('semver');
10
+ const https = require('node:https');
15
11
 
16
12
  // Handle both execution contexts (from root via npx or from installer directory)
17
13
  let version;
18
14
  let installer;
15
+ let packageName;
19
16
  try {
20
17
  // Try installer context first (when run from tools/installer/)
21
18
  version = require('../package.json').version;
19
+ packageName = require('../package.json').name;
22
20
  installer = require('../lib/installer');
23
- } catch (e) {
21
+ } catch (error) {
24
22
  // Fall back to root context (when run via npx from GitHub)
25
- console.log(`Installer context not found (${e.message}), trying root context...`);
23
+ console.log(`Installer context not found (${error.message}), trying root context...`);
26
24
  try {
27
25
  version = require('../../../package.json').version;
28
26
  installer = require('../../../tools/installer/lib/installer');
29
- } catch (e2) {
30
- console.error('Error: Could not load required modules. Please ensure you are running from the correct directory.');
27
+ } catch (error) {
28
+ console.error(
29
+ 'Error: Could not load required modules. Please ensure you are running from the correct directory.',
30
+ );
31
31
  console.error('Debug info:', {
32
32
  __dirname,
33
33
  cwd: process.cwd(),
34
- error: e2.message
34
+ error: error.message,
35
35
  });
36
36
  process.exit(1);
37
37
  }
@@ -39,34 +39,46 @@ try {
39
39
 
40
40
  program
41
41
  .version(version)
42
- .description('BMAD Method installer - AI-powered Agile development framework');
42
+ .description('BMad Method installer - Universal AI agent framework for any domain');
43
43
 
44
44
  program
45
45
  .command('install')
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)')
46
+ .description('Install BMad Method agents and tools')
47
+ .option('-f, --full', 'Install complete BMad Method')
48
+ .option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
49
+ .option('-d, --directory <path>', 'Installation directory')
50
+ .option(
51
+ '-i, --ide <ide...>',
52
+ 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, qwen-code, github-copilot, other)',
53
+ )
54
+ .option(
55
+ '-e, --expansion-packs <packs...>',
56
+ 'Install specific expansion packs (can specify multiple)',
57
+ )
51
58
  .action(async (options) => {
52
59
  try {
53
- await initializeModules();
54
- if (!options.full && !options.agent) {
60
+ if (!options.full && !options.expansionOnly) {
55
61
  // Interactive mode
56
62
  const answers = await promptInstallation();
57
- await installer.install(answers);
63
+ if (!answers._alreadyInstalled) {
64
+ await installer.install(answers);
65
+ process.exit(0);
66
+ }
58
67
  } else {
59
68
  // Direct mode
69
+ let installType = 'full';
70
+ if (options.expansionOnly) installType = 'expansion-only';
71
+
60
72
  const config = {
61
- installType: options.full ? 'full' : 'single-agent',
62
- agent: options.agent,
63
- directory: options.directory || '.bmad-core',
64
- ides: options.ide || []
73
+ installType,
74
+ directory: options.directory || '.',
75
+ ides: (options.ide || []).filter((ide) => ide !== 'other'),
76
+ expansionPacks: options.expansionPacks || [],
65
77
  };
66
78
  await installer.install(config);
79
+ process.exit(0);
67
80
  }
68
81
  } catch (error) {
69
- if (!chalk) await initializeModules();
70
82
  console.error(chalk.red('Installation failed:'), error.message);
71
83
  process.exit(1);
72
84
  }
@@ -74,27 +86,81 @@ program
74
86
 
75
87
  program
76
88
  .command('update')
77
- .description('Update existing BMAD installation')
89
+ .description('Update existing BMad installation')
78
90
  .option('--force', 'Force update, overwriting modified files')
79
91
  .option('--dry-run', 'Show what would be updated without making changes')
80
92
  .action(async () => {
81
93
  try {
82
94
  await installer.update();
83
95
  } catch (error) {
84
- if (!chalk) await initializeModules();
85
96
  console.error(chalk.red('Update failed:'), error.message);
86
97
  process.exit(1);
87
98
  }
88
99
  });
89
100
 
101
+ // Command to check if updates are available
90
102
  program
91
- .command('list')
92
- .description('List available agents')
103
+ .command('update-check')
104
+ .description('Check for BMad Update')
105
+ .action(async () => {
106
+ console.log('Checking for updates...');
107
+
108
+ // Make HTTP request to npm registry for latest version info
109
+ const req = https.get(`https://registry.npmjs.org/${packageName}/latest`, (res) => {
110
+ // Check for HTTP errors (non-200 status codes)
111
+ if (res.statusCode !== 200) {
112
+ console.error(chalk.red(`Update check failed: Received status code ${res.statusCode}`));
113
+ return;
114
+ }
115
+
116
+ // Accumulate response data chunks
117
+ let data = '';
118
+ res.on('data', (chunk) => (data += chunk));
119
+
120
+ // Process complete response
121
+ res.on('end', () => {
122
+ try {
123
+ // Parse npm registry response and extract version
124
+ const latest = JSON.parse(data).version;
125
+
126
+ // Compare versions using semver
127
+ if (semver.gt(latest, version)) {
128
+ console.log(
129
+ chalk.bold.blue(`⚠️ ${packageName} update available: ${version} → ${latest}`),
130
+ );
131
+ console.log(chalk.bold.blue('\nInstall latest by running:'));
132
+ console.log(chalk.bold.magenta(` npm install ${packageName}@latest`));
133
+ console.log(chalk.dim(' or'));
134
+ console.log(chalk.bold.magenta(` npx ${packageName}@latest`));
135
+ } else {
136
+ console.log(chalk.bold.blue(`✨ ${packageName} is up to date`));
137
+ }
138
+ } catch (error) {
139
+ // Handle JSON parsing errors
140
+ console.error(chalk.red('Failed to parse npm registry data:'), error.message);
141
+ }
142
+ });
143
+ });
144
+
145
+ // Handle network/connection errors
146
+ req.on('error', (error) => {
147
+ console.error(chalk.red('Update check failed:'), error.message);
148
+ });
149
+
150
+ // Set 30 second timeout to prevent hanging
151
+ req.setTimeout(30_000, () => {
152
+ req.destroy();
153
+ console.error(chalk.red('Update check timed out'));
154
+ });
155
+ });
156
+
157
+ program
158
+ .command('list:expansions')
159
+ .description('List available expansion packs')
93
160
  .action(async () => {
94
161
  try {
95
- await installer.listAgents();
162
+ await installer.listExpansionPacks();
96
163
  } catch (error) {
97
- if (!chalk) await initializeModules();
98
164
  console.error(chalk.red('Error:'), error.message);
99
165
  process.exit(1);
100
166
  }
@@ -107,87 +173,406 @@ program
107
173
  try {
108
174
  await installer.showStatus();
109
175
  } catch (error) {
110
- if (!chalk) await initializeModules();
111
176
  console.error(chalk.red('Error:'), error.message);
112
177
  process.exit(1);
113
178
  }
114
179
  });
115
180
 
181
+ program
182
+ .command('flatten')
183
+ .description('Flatten codebase to XML format')
184
+ .option('-i, --input <path>', 'Input directory to flatten', process.cwd())
185
+ .option('-o, --output <path>', 'Output file path', 'flattened-codebase.xml')
186
+ .action(async (options) => {
187
+ try {
188
+ await installer.flatten(options);
189
+ } catch (error) {
190
+ console.error(chalk.red('Flatten failed:'), error.message);
191
+ process.exit(1);
192
+ }
193
+ });
194
+
116
195
  async function promptInstallation() {
117
- await initializeModules();
118
- console.log(chalk.bold.blue(`\nWelcome to BMAD Method Installer v${version}\n`));
196
+ // Display ASCII logo
197
+ console.log(
198
+ chalk.bold.cyan(`
199
+ ██████╗ ███╗ ███╗ █████╗ ██████╗ ███╗ ███╗███████╗████████╗██╗ ██╗ ██████╗ ██████╗
200
+ ██╔══██╗████╗ ████║██╔══██╗██╔══██╗ ████╗ ████║██╔════╝╚══██╔══╝██║ ██║██╔═══██╗██╔══██╗
201
+ ██████╔╝██╔████╔██║███████║██║ ██║█████╗██╔████╔██║█████╗ ██║ ███████║██║ ██║██║ ██║
202
+ ██╔══██╗██║╚██╔╝██║██╔══██║██║ ██║╚════╝██║╚██╔╝██║██╔══╝ ██║ ██╔══██║██║ ██║██║ ██║
203
+ ██████╔╝██║ ╚═╝ ██║██║ ██║██████╔╝ ██║ ╚═╝ ██║███████╗ ██║ ██║ ██║╚██████╔╝██████╔╝
204
+ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
205
+ `),
206
+ );
207
+
208
+ console.log(chalk.bold.magenta('🚀 Universal AI Agent Framework for Any Domain'));
209
+ console.log(chalk.bold.blue(`✨ Installer v${version}\n`));
119
210
 
120
211
  const answers = {};
121
212
 
122
- // Ask for installation directory
213
+ // Ask for installation directory first
123
214
  const { directory } = await inquirer.prompt([
124
215
  {
125
216
  type: 'input',
126
217
  name: 'directory',
127
- message: 'Where would you like to install BMAD?',
128
- default: '.bmad-core'
129
- }
218
+ message: 'Enter the full path to your project directory where BMad should be installed:',
219
+ validate: (input) => {
220
+ if (!input.trim()) {
221
+ return 'Please enter a valid project path';
222
+ }
223
+ return true;
224
+ },
225
+ },
130
226
  ]);
131
227
  answers.directory = directory;
132
228
 
133
- // Ask for installation type
134
- const { installType } = await inquirer.prompt([
229
+ // Detect existing installations
230
+ const installDir = path.resolve(directory);
231
+ const state = await installer.detectInstallationState(installDir);
232
+
233
+ // Check for existing expansion packs
234
+ const existingExpansionPacks = state.expansionPacks || {};
235
+
236
+ // Get available expansion packs
237
+ const availableExpansionPacks = await installer.getAvailableExpansionPacks();
238
+
239
+ // Build choices list
240
+ const choices = [];
241
+
242
+ // Load core config to get short-title
243
+ const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
244
+ const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
245
+ const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
246
+
247
+ // Add BMad core option
248
+ let bmadOptionText;
249
+ if (state.type === 'v4_existing') {
250
+ const currentVersion = state.manifest?.version || 'unknown';
251
+ const newVersion = version; // Always use package.json version
252
+ const versionInfo =
253
+ currentVersion === newVersion
254
+ ? `(v${currentVersion} - reinstall)`
255
+ : `(v${currentVersion} → v${newVersion})`;
256
+ bmadOptionText = `Update ${coreShortTitle} ${versionInfo} .bmad-core`;
257
+ } else {
258
+ bmadOptionText = `${coreShortTitle} (v${version}) .bmad-core`;
259
+ }
260
+
261
+ choices.push({
262
+ name: bmadOptionText,
263
+ value: 'bmad-core',
264
+ checked: true,
265
+ });
266
+
267
+ // Add expansion pack options
268
+ for (const pack of availableExpansionPacks) {
269
+ const existing = existingExpansionPacks[pack.id];
270
+ let packOptionText;
271
+
272
+ if (existing) {
273
+ const currentVersion = existing.manifest?.version || 'unknown';
274
+ const newVersion = pack.version;
275
+ const versionInfo =
276
+ currentVersion === newVersion
277
+ ? `(v${currentVersion} - reinstall)`
278
+ : `(v${currentVersion} → v${newVersion})`;
279
+ packOptionText = `Update ${pack.shortTitle} ${versionInfo} .${pack.id}`;
280
+ } else {
281
+ packOptionText = `${pack.shortTitle} (v${pack.version}) .${pack.id}`;
282
+ }
283
+
284
+ choices.push({
285
+ name: packOptionText,
286
+ value: pack.id,
287
+ checked: false,
288
+ });
289
+ }
290
+
291
+ // Ask what to install
292
+ const { selectedItems } = await inquirer.prompt([
135
293
  {
136
- type: 'list',
137
- name: 'installType',
138
- message: 'How would you like to install BMAD?',
139
- choices: [
294
+ type: 'checkbox',
295
+ name: 'selectedItems',
296
+ message: 'Select what to install/update (use space to select, enter to continue):',
297
+ choices: choices,
298
+ validate: (selected) => {
299
+ if (selected.length === 0) {
300
+ return 'Please select at least one item to install';
301
+ }
302
+ return true;
303
+ },
304
+ },
305
+ ]);
306
+
307
+ // Process selections
308
+ answers.installType = selectedItems.includes('bmad-core') ? 'full' : 'expansion-only';
309
+ answers.expansionPacks = selectedItems.filter((item) => item !== 'bmad-core');
310
+
311
+ // Ask sharding questions if installing BMad core
312
+ if (selectedItems.includes('bmad-core')) {
313
+ console.log(chalk.cyan('\n📋 Document Organization Settings'));
314
+ console.log(chalk.dim('Configure how your project documentation should be organized.\n'));
315
+
316
+ // Ask about PRD sharding
317
+ const { prdSharded } = await inquirer.prompt([
318
+ {
319
+ type: 'confirm',
320
+ name: 'prdSharded',
321
+ message: 'Will the PRD (Product Requirements Document) be sharded into multiple files?',
322
+ default: true,
323
+ },
324
+ ]);
325
+ answers.prdSharded = prdSharded;
326
+
327
+ // Ask about architecture sharding
328
+ const { architectureSharded } = await inquirer.prompt([
329
+ {
330
+ type: 'confirm',
331
+ name: 'architectureSharded',
332
+ message: 'Will the architecture documentation be sharded into multiple files?',
333
+ default: true,
334
+ },
335
+ ]);
336
+ answers.architectureSharded = architectureSharded;
337
+
338
+ // Show warning if architecture sharding is disabled
339
+ if (!architectureSharded) {
340
+ console.log(chalk.yellow.bold('\n⚠️ IMPORTANT: Architecture Sharding Disabled'));
341
+ console.log(
342
+ chalk.yellow(
343
+ 'With architecture sharding disabled, you should still create the files listed',
344
+ ),
345
+ );
346
+ console.log(
347
+ chalk.yellow(
348
+ 'in devLoadAlwaysFiles (like coding-standards.md, tech-stack.md, source-tree.md)',
349
+ ),
350
+ );
351
+ console.log(chalk.yellow('as these are used by the dev agent at runtime.'));
352
+ console.log(
353
+ chalk.yellow(
354
+ '\nAlternatively, you can remove these files from the devLoadAlwaysFiles list',
355
+ ),
356
+ );
357
+ console.log(chalk.yellow('in your core-config.yaml after installation.'));
358
+
359
+ const { acknowledge } = await inquirer.prompt([
140
360
  {
141
- name: 'Complete installation (recommended) - All agents and tools',
142
- value: 'full'
361
+ type: 'confirm',
362
+ name: 'acknowledge',
363
+ message: 'Do you acknowledge this requirement and want to proceed?',
364
+ default: false,
143
365
  },
366
+ ]);
367
+
368
+ if (!acknowledge) {
369
+ console.log(chalk.red('Installation cancelled.'));
370
+ process.exit(0);
371
+ }
372
+ }
373
+ }
374
+
375
+ // Ask for IDE configuration
376
+ let ides = [];
377
+ let ideSelectionComplete = false;
378
+
379
+ while (!ideSelectionComplete) {
380
+ console.log(chalk.cyan('\n🛠️ IDE Configuration'));
381
+ console.log(
382
+ chalk.bold.yellow.bgRed(
383
+ ' ⚠️ IMPORTANT: This is a MULTISELECT! Use SPACEBAR to toggle each IDE! ',
384
+ ),
385
+ );
386
+ console.log(chalk.bold.magenta('🔸 Use arrow keys to navigate'));
387
+ console.log(chalk.bold.magenta('🔸 Use SPACEBAR to select/deselect IDEs'));
388
+ console.log(chalk.bold.magenta('🔸 Press ENTER when finished selecting\n'));
389
+
390
+ const ideResponse = await inquirer.prompt([
391
+ {
392
+ type: 'checkbox',
393
+ name: 'ides',
394
+ message:
395
+ 'Which IDE(s) do you want to configure? (Select with SPACEBAR, confirm with ENTER):',
396
+ choices: [
397
+ { name: 'Cursor', value: 'cursor' },
398
+ { name: 'Claude Code', value: 'claude-code' },
399
+ { name: 'Windsurf', value: 'windsurf' },
400
+ { name: 'Trae', value: 'trae' }, // { name: 'Trae', value: 'trae'}
401
+ { name: 'Roo Code', value: 'roo' },
402
+ { name: 'Kilo Code', value: 'kilo' },
403
+ { name: 'Cline', value: 'cline' },
404
+ { name: 'Gemini CLI', value: 'gemini' },
405
+ { name: 'Qwen Code', value: 'qwen-code' },
406
+ { name: 'Crush', value: 'crush' },
407
+ { name: 'Github Copilot', value: 'github-copilot' },
408
+ ],
409
+ },
410
+ ]);
411
+
412
+ ides = ideResponse.ides;
413
+
414
+ // Confirm no IDE selection if none selected
415
+ if (ides.length === 0) {
416
+ const { confirmNoIde } = await inquirer.prompt([
144
417
  {
145
- name: 'Single agent - Choose one agent to install',
146
- value: 'single-agent'
147
- }
148
- ]
418
+ type: 'confirm',
419
+ name: 'confirmNoIde',
420
+ message: chalk.red(
421
+ '⚠️ You have NOT selected any IDEs. This means NO IDE integration will be set up. Is this correct?',
422
+ ),
423
+ default: false,
424
+ },
425
+ ]);
426
+
427
+ if (!confirmNoIde) {
428
+ console.log(
429
+ chalk.bold.red(
430
+ '\n🔄 Returning to IDE selection. Remember to use SPACEBAR to select IDEs!\n',
431
+ ),
432
+ );
433
+ continue; // Go back to IDE selection only
434
+ }
149
435
  }
150
- ]);
151
- answers.installType = installType;
152
436
 
153
- // If single agent, ask which one
154
- if (installType === 'single-agent') {
155
- const agents = await installer.getAvailableAgents();
156
- const { agent } = await inquirer.prompt([
437
+ ideSelectionComplete = true;
438
+ }
439
+
440
+ // Use selected IDEs directly
441
+ answers.ides = ides;
442
+
443
+ // Configure GitHub Copilot immediately if selected
444
+ if (ides.includes('github-copilot')) {
445
+ console.log(chalk.cyan('\n🔧 GitHub Copilot Configuration'));
446
+ console.log(
447
+ chalk.dim('BMad works best with specific VS Code settings for optimal agent experience.\n'),
448
+ );
449
+
450
+ const { configChoice } = await inquirer.prompt([
157
451
  {
158
452
  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
- }))
165
- }
453
+ name: 'configChoice',
454
+ message: chalk.yellow('How would you like to configure GitHub Copilot settings?'),
455
+ choices: [
456
+ {
457
+ name: 'Use recommended defaults (fastest setup)',
458
+ value: 'defaults',
459
+ },
460
+ {
461
+ name: 'Configure each setting manually (customize to your preferences)',
462
+ value: 'manual',
463
+ },
464
+ {
465
+ name: "Skip settings configuration (I'll configure manually later)",
466
+ value: 'skip',
467
+ },
468
+ ],
469
+ default: 'defaults',
470
+ },
166
471
  ]);
167
- answers.agent = agent;
472
+
473
+ answers.githubCopilotConfig = { configChoice };
168
474
  }
169
475
 
170
- // Ask for IDE configuration
171
- const { ides } = await inquirer.prompt([
476
+ // Ask for web bundles installation
477
+ const { includeWebBundles } = await inquirer.prompt([
172
478
  {
173
- type: 'checkbox',
174
- name: 'ides',
175
- message: 'Which IDE(s) are you using? (Select all that apply)',
176
- choices: [
177
- { name: 'Cursor', value: 'cursor' },
178
- { name: 'Claude Code', value: 'claude-code' },
179
- { name: 'Windsurf', value: 'windsurf' },
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;
187
- }
188
- }
479
+ type: 'confirm',
480
+ name: 'includeWebBundles',
481
+ message:
482
+ 'Would you like to include pre-built web bundles? (standalone files for ChatGPT, Claude, Gemini)',
483
+ default: false,
484
+ },
189
485
  ]);
190
- answers.ides = ides;
486
+
487
+ if (includeWebBundles) {
488
+ console.log(chalk.cyan('\n📦 Web bundles are standalone files perfect for web AI platforms.'));
489
+ console.log(
490
+ chalk.dim(' You can choose different teams/agents than your IDE installation.\n'),
491
+ );
492
+
493
+ const { webBundleType } = await inquirer.prompt([
494
+ {
495
+ type: 'list',
496
+ name: 'webBundleType',
497
+ message: 'What web bundles would you like to include?',
498
+ choices: [
499
+ {
500
+ name: 'All available bundles (agents, teams, expansion packs)',
501
+ value: 'all',
502
+ },
503
+ {
504
+ name: 'Specific teams only',
505
+ value: 'teams',
506
+ },
507
+ {
508
+ name: 'Individual agents only',
509
+ value: 'agents',
510
+ },
511
+ {
512
+ name: 'Custom selection',
513
+ value: 'custom',
514
+ },
515
+ ],
516
+ },
517
+ ]);
518
+
519
+ answers.webBundleType = webBundleType;
520
+
521
+ // If specific teams, let them choose which teams
522
+ if (webBundleType === 'teams' || webBundleType === 'custom') {
523
+ const teams = await installer.getAvailableTeams();
524
+ const { selectedTeams } = await inquirer.prompt([
525
+ {
526
+ type: 'checkbox',
527
+ name: 'selectedTeams',
528
+ message: 'Select team bundles to include:',
529
+ choices: teams.map((t) => ({
530
+ name: `${t.icon || '📋'} ${t.name}: ${t.description}`,
531
+ value: t.id,
532
+ checked: webBundleType === 'teams', // Check all if teams-only mode
533
+ })),
534
+ validate: (answer) => {
535
+ if (answer.length === 0) {
536
+ return 'You must select at least one team.';
537
+ }
538
+ return true;
539
+ },
540
+ },
541
+ ]);
542
+ answers.selectedWebBundleTeams = selectedTeams;
543
+ }
544
+
545
+ // If custom selection, also ask about individual agents
546
+ if (webBundleType === 'custom') {
547
+ const { includeIndividualAgents } = await inquirer.prompt([
548
+ {
549
+ type: 'confirm',
550
+ name: 'includeIndividualAgents',
551
+ message: 'Also include individual agent bundles?',
552
+ default: true,
553
+ },
554
+ ]);
555
+ answers.includeIndividualAgents = includeIndividualAgents;
556
+ }
557
+
558
+ const { webBundlesDirectory } = await inquirer.prompt([
559
+ {
560
+ type: 'input',
561
+ name: 'webBundlesDirectory',
562
+ message: 'Enter directory for web bundles:',
563
+ default: `${answers.directory}/web-bundles`,
564
+ validate: (input) => {
565
+ if (!input.trim()) {
566
+ return 'Please enter a valid directory path';
567
+ }
568
+ return true;
569
+ },
570
+ },
571
+ ]);
572
+ answers.webBundlesDirectory = webBundlesDirectory;
573
+ }
574
+
575
+ answers.includeWebBundles = includeWebBundles;
191
576
 
192
577
  return answers;
193
578
  }
@@ -195,6 +580,6 @@ async function promptInstallation() {
195
580
  program.parse(process.argv);
196
581
 
197
582
  // Show help if no command provided
198
- if (!process.argv.slice(2).length) {
583
+ if (process.argv.slice(2).length === 0) {
199
584
  program.outputHelp();
200
- }
585
+ }