@zeyue0329/xiaoma-cli 1.0.8 → 1.0.10

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 (326) hide show
  1. package/.github/FORK_GUIDE.md +106 -0
  2. package/.github/FUNDING.yaml +15 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. package/.github/workflows/discord.yaml +26 -0
  6. package/.github/workflows/format-check.yaml +44 -0
  7. package/.github/workflows/manual-release.yaml +174 -0
  8. package/.github/workflows/pr-validation.yaml +55 -0
  9. package/.husky/pre-commit +3 -0
  10. package/.vscode/settings.json +26 -1
  11. package/CHANGELOG.md +686 -0
  12. package/CONTRIBUTING.md +250 -0
  13. package/LICENSE +6 -1
  14. package/common/tasks/create-doc.md +2 -0
  15. package/common/tasks/execute-checklist.md +2 -7
  16. package/common/utils/bmad-doc-template.md +7 -5
  17. package/common/utils/workflow-management.md +2 -0
  18. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +2103 -0
  19. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +1627 -0
  20. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +822 -0
  21. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +8486 -0
  22. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +3210 -0
  23. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +3244 -0
  24. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +317 -0
  25. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +982 -0
  26. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +12854 -0
  27. package/dist/expansion-packs/bmad-creative-writing/agents/beta-reader.txt +921 -0
  28. package/dist/expansion-packs/bmad-creative-writing/agents/book-critic.txt +81 -0
  29. package/dist/expansion-packs/bmad-creative-writing/agents/character-psychologist.txt +886 -0
  30. package/dist/expansion-packs/bmad-creative-writing/agents/cover-designer.txt +85 -0
  31. package/dist/expansion-packs/bmad-creative-writing/agents/dialog-specialist.txt +903 -0
  32. package/dist/expansion-packs/bmad-creative-writing/agents/editor.txt +837 -0
  33. package/dist/expansion-packs/bmad-creative-writing/agents/genre-specialist.txt +989 -0
  34. package/dist/expansion-packs/bmad-creative-writing/agents/narrative-designer.txt +888 -0
  35. package/dist/expansion-packs/bmad-creative-writing/agents/plot-architect.txt +1173 -0
  36. package/dist/expansion-packs/bmad-creative-writing/agents/world-builder.txt +914 -0
  37. package/dist/expansion-packs/bmad-creative-writing/teams/agent-team.txt +6071 -0
  38. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +2079 -0
  39. package/docs/GUIDING-PRINCIPLES.md +91 -0
  40. package/docs/core-architecture.md +219 -0
  41. package/docs/enhanced-ide-development-workflow.md +248 -0
  42. package/docs/expansion-packs.md +200 -0
  43. package/docs/how-to-contribute-with-pull-requests.md +158 -0
  44. package/docs/user-guide.md +530 -0
  45. package/docs/versioning-and-releases.md +155 -0
  46. package/docs/versions.md +48 -0
  47. package/docs/working-in-the-brownfield.md +597 -0
  48. package/eslint.config.mjs +119 -0
  49. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +14 -0
  50. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +73 -0
  51. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +80 -0
  52. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +66 -0
  53. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +203 -0
  54. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +162 -0
  55. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +9 -0
  56. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +252 -0
  57. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +649 -0
  58. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +112 -0
  59. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +218 -0
  60. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +292 -0
  61. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +614 -0
  62. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +357 -0
  63. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +344 -0
  64. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +254 -0
  65. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +485 -0
  66. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +184 -0
  67. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +176 -0
  68. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +15 -0
  69. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +82 -0
  70. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +79 -0
  71. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +80 -0
  72. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +67 -0
  73. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +393 -0
  74. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +205 -0
  75. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +203 -0
  76. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +126 -0
  77. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +7 -0
  78. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +771 -0
  79. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +588 -0
  80. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +112 -0
  81. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +143 -0
  82. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +186 -0
  83. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +292 -0
  84. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +202 -0
  85. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +1031 -0
  86. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +357 -0
  87. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +706 -0
  88. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +257 -0
  89. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +485 -0
  90. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +184 -0
  91. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +176 -0
  92. package/expansion-packs/bmad-creative-writing/README.md +146 -0
  93. package/expansion-packs/bmad-creative-writing/agent-teams/agent-team.yaml +20 -0
  94. package/expansion-packs/bmad-creative-writing/agents/beta-reader.md +94 -0
  95. package/expansion-packs/bmad-creative-writing/agents/book-critic.md +40 -0
  96. package/expansion-packs/bmad-creative-writing/agents/character-psychologist.md +93 -0
  97. package/expansion-packs/bmad-creative-writing/agents/cover-designer.md +46 -0
  98. package/expansion-packs/bmad-creative-writing/agents/dialog-specialist.md +92 -0
  99. package/expansion-packs/bmad-creative-writing/agents/editor.md +93 -0
  100. package/expansion-packs/bmad-creative-writing/agents/genre-specialist.md +95 -0
  101. package/expansion-packs/bmad-creative-writing/agents/narrative-designer.md +93 -0
  102. package/expansion-packs/bmad-creative-writing/agents/plot-architect.md +95 -0
  103. package/expansion-packs/bmad-creative-writing/agents/world-builder.md +94 -0
  104. package/expansion-packs/bmad-creative-writing/checklists/beta-feedback-closure-checklist.md +23 -0
  105. package/expansion-packs/bmad-creative-writing/checklists/character-consistency-checklist.md +23 -0
  106. package/expansion-packs/bmad-creative-writing/checklists/comedic-timing-checklist.md +23 -0
  107. package/expansion-packs/bmad-creative-writing/checklists/cyberpunk-aesthetic-checklist.md +23 -0
  108. package/expansion-packs/bmad-creative-writing/checklists/ebook-formatting-checklist.md +21 -0
  109. package/expansion-packs/bmad-creative-writing/checklists/epic-poetry-meter-checklist.md +23 -0
  110. package/expansion-packs/bmad-creative-writing/checklists/fantasy-magic-system-checklist.md +23 -0
  111. package/expansion-packs/bmad-creative-writing/checklists/foreshadowing-payoff-checklist.md +22 -0
  112. package/expansion-packs/bmad-creative-writing/checklists/genre-tropes-checklist.md +22 -0
  113. package/expansion-packs/bmad-creative-writing/checklists/historical-accuracy-checklist.md +23 -0
  114. package/expansion-packs/bmad-creative-writing/checklists/horror-suspense-checklist.md +23 -0
  115. package/expansion-packs/bmad-creative-writing/checklists/kdp-cover-ready-checklist.md +25 -0
  116. package/expansion-packs/bmad-creative-writing/checklists/line-edit-quality-checklist.md +23 -0
  117. package/expansion-packs/bmad-creative-writing/checklists/marketing-copy-checklist.md +23 -0
  118. package/expansion-packs/bmad-creative-writing/checklists/mystery-clue-trail-checklist.md +23 -0
  119. package/expansion-packs/bmad-creative-writing/checklists/orbital-mechanics-checklist.md +23 -0
  120. package/expansion-packs/bmad-creative-writing/checklists/plot-structure-checklist.md +59 -0
  121. package/expansion-packs/bmad-creative-writing/checklists/publication-readiness-checklist.md +23 -0
  122. package/expansion-packs/bmad-creative-writing/checklists/romance-emotional-beats-checklist.md +23 -0
  123. package/expansion-packs/bmad-creative-writing/checklists/scene-quality-checklist.md +23 -0
  124. package/expansion-packs/bmad-creative-writing/checklists/scifi-technology-plausibility-checklist.md +22 -0
  125. package/expansion-packs/bmad-creative-writing/checklists/sensitivity-representation-checklist.md +23 -0
  126. package/expansion-packs/bmad-creative-writing/checklists/steampunk-gadget-checklist.md +23 -0
  127. package/expansion-packs/bmad-creative-writing/checklists/thriller-pacing-stakes-checklist.md +23 -0
  128. package/expansion-packs/bmad-creative-writing/checklists/timeline-continuity-checklist.md +23 -0
  129. package/expansion-packs/bmad-creative-writing/checklists/world-building-continuity-checklist.md +23 -0
  130. package/expansion-packs/bmad-creative-writing/checklists/ya-appropriateness-checklist.md +23 -0
  131. package/expansion-packs/bmad-creative-writing/config.yaml +12 -0
  132. package/expansion-packs/bmad-creative-writing/data/bmad-kb.md +209 -0
  133. package/expansion-packs/bmad-creative-writing/data/story-structures.md +67 -0
  134. package/expansion-packs/bmad-creative-writing/docs/brief.md +212 -0
  135. package/expansion-packs/bmad-creative-writing/tasks/advanced-elicitation.md +119 -0
  136. package/expansion-packs/bmad-creative-writing/tasks/analyze-reader-feedback.md +23 -0
  137. package/expansion-packs/bmad-creative-writing/tasks/analyze-story-structure.md +67 -0
  138. package/expansion-packs/bmad-creative-writing/tasks/assemble-kdp-package.md +29 -0
  139. package/expansion-packs/bmad-creative-writing/tasks/brainstorm-premise.md +23 -0
  140. package/expansion-packs/bmad-creative-writing/tasks/build-world.md +24 -0
  141. package/expansion-packs/bmad-creative-writing/tasks/character-depth-pass.md +22 -0
  142. package/expansion-packs/bmad-creative-writing/tasks/create-doc.md +103 -0
  143. package/expansion-packs/bmad-creative-writing/tasks/create-draft-section.md +26 -0
  144. package/expansion-packs/bmad-creative-writing/tasks/critical-review.md +26 -0
  145. package/expansion-packs/bmad-creative-writing/tasks/develop-character.md +24 -0
  146. package/expansion-packs/bmad-creative-writing/tasks/execute-checklist.md +88 -0
  147. package/expansion-packs/bmad-creative-writing/tasks/expand-premise.md +23 -0
  148. package/expansion-packs/bmad-creative-writing/tasks/expand-synopsis.md +23 -0
  149. package/expansion-packs/bmad-creative-writing/tasks/final-polish.md +23 -0
  150. package/expansion-packs/bmad-creative-writing/tasks/generate-cover-brief.md +25 -0
  151. package/expansion-packs/bmad-creative-writing/tasks/generate-cover-prompts.md +26 -0
  152. package/expansion-packs/bmad-creative-writing/tasks/generate-scene-list.md +23 -0
  153. package/expansion-packs/bmad-creative-writing/tasks/incorporate-feedback.md +25 -0
  154. package/expansion-packs/bmad-creative-writing/tasks/outline-scenes.md +23 -0
  155. package/expansion-packs/bmad-creative-writing/tasks/provide-feedback.md +24 -0
  156. package/expansion-packs/bmad-creative-writing/tasks/publish-chapter.md +23 -0
  157. package/expansion-packs/bmad-creative-writing/tasks/quick-feedback.md +22 -0
  158. package/expansion-packs/bmad-creative-writing/tasks/select-next-arc.md +23 -0
  159. package/expansion-packs/bmad-creative-writing/tasks/workshop-dialog.md +64 -0
  160. package/expansion-packs/bmad-creative-writing/templates/beta-feedback-form.yaml +97 -0
  161. package/expansion-packs/bmad-creative-writing/templates/chapter-draft-tmpl.yaml +82 -0
  162. package/expansion-packs/bmad-creative-writing/templates/character-profile-tmpl.yaml +92 -0
  163. package/expansion-packs/bmad-creative-writing/templates/cover-design-brief-tmpl.yaml +98 -0
  164. package/expansion-packs/bmad-creative-writing/templates/premise-brief-tmpl.yaml +78 -0
  165. package/expansion-packs/bmad-creative-writing/templates/scene-list-tmpl.yaml +55 -0
  166. package/expansion-packs/bmad-creative-writing/templates/story-outline-tmpl.yaml +96 -0
  167. package/expansion-packs/bmad-creative-writing/templates/world-guide-tmpl.yaml +89 -0
  168. package/expansion-packs/bmad-creative-writing/workflows/book-cover-design-workflow.md +218 -0
  169. package/expansion-packs/bmad-creative-writing/workflows/novel-greenfield-workflow.yaml +56 -0
  170. package/expansion-packs/bmad-creative-writing/workflows/novel-serial-workflow.yaml +50 -0
  171. package/expansion-packs/bmad-creative-writing/workflows/novel-snowflake-workflow.yaml +69 -0
  172. package/expansion-packs/bmad-creative-writing/workflows/novel-writing.yaml +91 -0
  173. package/expansion-packs/bmad-creative-writing/workflows/screenplay-development.yaml +85 -0
  174. package/expansion-packs/bmad-creative-writing/workflows/series-planning.yaml +78 -0
  175. package/expansion-packs/bmad-creative-writing/workflows/short-story-creation.yaml +64 -0
  176. package/expansion-packs/bmad-infrastructure-devops/README.md +147 -0
  177. package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +73 -0
  178. package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +486 -0
  179. package/expansion-packs/bmad-infrastructure-devops/config.yaml +10 -0
  180. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +307 -0
  181. package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +161 -0
  182. package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +155 -0
  183. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +425 -0
  184. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +630 -0
  185. package/implement-fork-friendly-ci.sh +229 -0
  186. package/package.json +75 -45
  187. package/prettier.config.mjs +32 -0
  188. package/test.md +1 -0
  189. package/tools/builders/web-builder.js +143 -149
  190. package/tools/bump-all-versions.js +42 -33
  191. package/tools/bump-expansion-version.js +23 -16
  192. package/tools/cli.js +15 -15
  193. package/tools/flattener/aggregate.js +76 -0
  194. package/tools/flattener/binary.js +80 -0
  195. package/tools/flattener/discovery.js +71 -0
  196. package/tools/flattener/files.js +35 -0
  197. package/tools/flattener/ignoreRules.js +176 -0
  198. package/tools/flattener/main.js +458 -460
  199. package/tools/flattener/projectRoot.js +206 -0
  200. package/tools/flattener/prompts.js +44 -0
  201. package/tools/flattener/stats.helpers.js +395 -0
  202. package/tools/flattener/stats.js +80 -0
  203. package/tools/flattener/test-matrix.js +413 -0
  204. package/tools/flattener/xml.js +88 -0
  205. package/tools/installer/README.md +1 -1
  206. package/tools/installer/bin/xiaoma.js +390 -150
  207. package/tools/installer/config/ide-agent-config.yaml +1 -1
  208. package/tools/installer/config/install.config.yaml +60 -9
  209. package/tools/installer/lib/config-loader.js +55 -51
  210. package/tools/installer/lib/file-manager.js +92 -117
  211. package/tools/installer/lib/ide-base-setup.js +57 -56
  212. package/tools/installer/lib/ide-setup.js +821 -414
  213. package/tools/installer/lib/installer.js +924 -699
  214. package/tools/installer/lib/memory-profiler.js +54 -53
  215. package/tools/installer/lib/module-manager.js +19 -15
  216. package/tools/installer/lib/resource-locator.js +31 -33
  217. package/tools/installer/package.json +24 -23
  218. package/tools/lib/dependency-resolver.js +39 -43
  219. package/tools/lib/yaml-utils.js +7 -7
  220. package/tools/md-assets/web-agent-startup-instructions.md +6 -6
  221. package/tools/preview-release-notes.js +66 -0
  222. package/tools/setup-hooks.sh +37 -0
  223. package/tools/shared/bannerArt.js +105 -0
  224. package/tools/sync-installer-version.js +7 -9
  225. package/tools/sync-version.sh +23 -0
  226. package/tools/update-expansion-version.js +14 -15
  227. package/tools/upgraders/v3-to-v4-upgrader.js +203 -294
  228. package/tools/version-bump.js +41 -26
  229. package/tools/xiaoma-npx-wrapper.js +14 -14
  230. package/tools/yaml-format.js +56 -43
  231. package/xiaoma-core/agent-teams/team-all.yaml +3 -2
  232. package/xiaoma-core/agent-teams/team-fullstack.yaml +2 -1
  233. package/xiaoma-core/agent-teams/team-ide-minimal.yaml +1 -0
  234. package/xiaoma-core/agent-teams/team-no-ui.yaml +2 -1
  235. package/xiaoma-core/agents/analyst.md +20 -17
  236. package/xiaoma-core/agents/architect.md +15 -14
  237. package/xiaoma-core/agents/{xiaoma-master.md → bmad-master.md} +29 -27
  238. package/xiaoma-core/agents/{xiaoma-orchestrator.md → bmad-orchestrator.md} +36 -39
  239. package/xiaoma-core/agents/dev.md +23 -18
  240. package/xiaoma-core/agents/pm.md +18 -15
  241. package/xiaoma-core/agents/po.md +13 -10
  242. package/xiaoma-core/agents/qa.md +46 -24
  243. package/xiaoma-core/agents/sm.md +11 -8
  244. package/xiaoma-core/agents/ux-expert.md +10 -7
  245. package/xiaoma-core/checklists/architect-checklist.md +2 -5
  246. package/xiaoma-core/checklists/change-checklist.md +4 -2
  247. package/xiaoma-core/checklists/pm-checklist.md +2 -5
  248. package/xiaoma-core/checklists/po-master-checklist.md +2 -9
  249. package/xiaoma-core/checklists/story-dod-checklist.md +2 -7
  250. package/xiaoma-core/checklists/story-draft-checklist.md +2 -3
  251. package/xiaoma-core/core-config.yaml +4 -1
  252. package/xiaoma-core/data/{xiaoma-kb.md → bmad-kb.md} +48 -42
  253. package/xiaoma-core/data/brainstorming-techniques.md +2 -0
  254. package/xiaoma-core/data/elicitation-methods.md +22 -0
  255. package/xiaoma-core/data/technical-preferences.md +2 -0
  256. package/xiaoma-core/data/test-levels-framework.md +148 -0
  257. package/xiaoma-core/data/test-priorities-matrix.md +174 -0
  258. package/xiaoma-core/tasks/advanced-elicitation.md +2 -0
  259. package/xiaoma-core/tasks/apply-qa-fixes.md +150 -0
  260. package/xiaoma-core/tasks/brownfield-create-epic.md +2 -0
  261. package/xiaoma-core/tasks/brownfield-create-story.md +2 -0
  262. package/xiaoma-core/tasks/correct-course.md +2 -0
  263. package/xiaoma-core/tasks/create-brownfield-story.md +14 -4
  264. package/xiaoma-core/tasks/create-deep-research-prompt.md +2 -11
  265. package/xiaoma-core/tasks/create-next-story.md +3 -1
  266. package/xiaoma-core/tasks/document-project.md +17 -13
  267. package/xiaoma-core/tasks/facilitate-brainstorming-session.md +5 -3
  268. package/xiaoma-core/tasks/generate-ai-frontend-prompt.md +2 -0
  269. package/xiaoma-core/tasks/index-docs.md +2 -6
  270. package/xiaoma-core/tasks/kb-mode-interaction.md +17 -15
  271. package/xiaoma-core/tasks/nfr-assess.md +345 -0
  272. package/xiaoma-core/tasks/qa-gate.md +163 -0
  273. package/xiaoma-core/tasks/review-story.md +245 -74
  274. package/xiaoma-core/tasks/risk-profile.md +355 -0
  275. package/xiaoma-core/tasks/shard-doc.md +2 -2
  276. package/xiaoma-core/tasks/test-design.md +176 -0
  277. package/xiaoma-core/tasks/trace-requirements.md +266 -0
  278. package/xiaoma-core/tasks/validate-next-story.md +5 -3
  279. package/xiaoma-core/templates/architecture-tmpl.yaml +50 -49
  280. package/xiaoma-core/templates/brainstorming-output-tmpl.yaml +5 -5
  281. package/xiaoma-core/templates/brownfield-architecture-tmpl.yaml +32 -31
  282. package/xiaoma-core/templates/brownfield-prd-tmpl.yaml +14 -13
  283. package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +20 -6
  284. package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +22 -9
  285. package/xiaoma-core/templates/front-end-spec-tmpl.yaml +25 -24
  286. package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +123 -104
  287. package/xiaoma-core/templates/market-research-tmpl.yaml +3 -2
  288. package/xiaoma-core/templates/prd-tmpl.yaml +10 -9
  289. package/xiaoma-core/templates/project-brief-tmpl.yaml +5 -4
  290. package/xiaoma-core/templates/qa-gate-tmpl.yaml +103 -0
  291. package/xiaoma-core/templates/story-tmpl.yaml +13 -12
  292. package/xiaoma-core/workflows/brownfield-fullstack.yaml +13 -12
  293. package/xiaoma-core/workflows/brownfield-service.yaml +5 -4
  294. package/xiaoma-core/workflows/brownfield-ui.yaml +5 -4
  295. package/xiaoma-core/workflows/greenfield-fullstack.yaml +7 -6
  296. package/xiaoma-core/workflows/greenfield-service.yaml +5 -4
  297. package/xiaoma-core/workflows/greenfield-ui.yaml +6 -5
  298. package/.releaserc.json +0 -18
  299. package/README.md +0 -532
  300. package/XiaoMa-Web/345/244/232/346/231/272/350/203/275/344/275/2230-1/351/241/271/347/233/256/345/274/200/345/217/221/345/256/214/346/225/264/346/214/207/345/215/227.md +0 -977
  301. package/XiaoMa-Web/347/216/260/346/234/211/351/241/271/347/233/256/351/234/200/346/261/202/345/274/200/345/217/221/345/256/214/346/225/264/346/214/207/345/215/227.md +0 -873
  302. package/XiaoMa-Web/347/272/257/345/211/215/347/253/257/351/241/271/347/233/256Claude-Code/345/274/200/345/217/221/345/256/214/346/225/264/346/214/207/345/215/227.md +0 -372
  303. package/XiaoMa-Web/351/241/271/347/233/256/346/200/273/347/273/223/346/212/245/345/221/212.md +0 -310
  304. package/dist/agents/analyst.txt +0 -2882
  305. package/dist/agents/architect.txt +0 -3543
  306. package/dist/agents/dev-cn.txt +0 -428
  307. package/dist/agents/dev.txt +0 -428
  308. package/dist/agents/pm.txt +0 -2229
  309. package/dist/agents/po.txt +0 -1364
  310. package/dist/agents/qa.txt +0 -386
  311. package/dist/agents/sm.txt +0 -668
  312. package/dist/agents/ux-expert.txt +0 -701
  313. package/dist/agents/xiaoma-master.txt +0 -8756
  314. package/dist/agents/xiaoma-orchestrator.txt +0 -1490
  315. package/dist/teams/team-all.txt +0 -11062
  316. package/dist/teams/team-fullstack.txt +0 -10392
  317. package/dist/teams/team-ide-minimal.txt +0 -3507
  318. package/dist/teams/team-no-ui.txt +0 -8951
  319. package/docs/quick-start.md +0 -179
  320. package/tools/bmad-npx-wrapper.js +0 -39
  321. package/tools/installer/package-lock.json +0 -704
  322. package/tools/semantic-release-sync-installer.js +0 -30
  323. package/xiaoma-core/bmad-core/user-guide.md +0 -0
  324. package/xiaoma-core/enhanced-ide-development-workflow.md +0 -43
  325. package/xiaoma-core/user-guide.md +0 -251
  326. package/xiaoma-core/working-in-the-brownfield.md +0 -364
@@ -1,31 +1,35 @@
1
- #!/usr/bin/env node
2
-
3
1
  const { program } = require('commander');
4
- const path = require('path');
5
- const fs = require('fs').promises;
2
+ const path = require('node:path');
3
+ const fs = require('node:fs').promises;
6
4
  const yaml = require('js-yaml');
7
- const chalk = require('chalk');
8
- const inquirer = require('inquirer');
5
+ const chalk = require('chalk').default || require('chalk');
6
+ const inquirer = require('inquirer').default || require('inquirer');
7
+ const semver = require('semver');
8
+ const https = require('node:https');
9
9
 
10
10
  // Handle both execution contexts (from root via npx or from installer directory)
11
11
  let version;
12
12
  let installer;
13
+ let packageName;
13
14
  try {
14
15
  // Try installer context first (when run from tools/installer/)
15
16
  version = require('../package.json').version;
17
+ packageName = require('../package.json').name;
16
18
  installer = require('../lib/installer');
17
- } catch (e) {
19
+ } catch (error) {
18
20
  // Fall back to root context (when run via npx from GitHub)
19
- console.log(`Installer context not found (${e.message}), trying root context...`);
21
+ console.log(`Installer context not found (${error.message}), trying root context...`);
20
22
  try {
21
23
  version = require('../../../package.json').version;
22
24
  installer = require('../../../tools/installer/lib/installer');
23
- } catch (e2) {
24
- console.error('Error: Could not load required modules. Please ensure you are running from the correct directory.');
25
+ } catch (error) {
26
+ console.error(
27
+ 'Error: Could not load required modules. Please ensure you are running from the correct directory.',
28
+ );
25
29
  console.error('Debug info:', {
26
30
  __dirname,
27
31
  cwd: process.cwd(),
28
- error: e2.message
32
+ error: error.message,
29
33
  });
30
34
  process.exit(1);
31
35
  }
@@ -33,16 +37,22 @@ try {
33
37
 
34
38
  program
35
39
  .version(version)
36
- .description('XiaoMa CLI installer - Universal AI agent framework for any domain');
40
+ .description('BMad Method installer - Universal AI agent framework for any domain');
37
41
 
38
42
  program
39
43
  .command('install')
40
- .description('Install XiaoMa CLI agents and tools')
41
- .option('-f, --full', 'Install complete XiaoMa CLI')
42
- .option('-x, --expansion-only', 'Install only expansion packs (no xiaoma-core)')
44
+ .description('Install BMad Method agents and tools')
45
+ .option('-f, --full', 'Install complete BMad Method')
46
+ .option('-x, --expansion-only', 'Install only expansion packs (no bmad-core)')
43
47
  .option('-d, --directory <path>', 'Installation directory')
44
- .option('-i, --ide <ide...>', 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, qwen-code, github-copilot, other)')
45
- .option('-e, --expansion-packs <packs...>', 'Install specific expansion packs (can specify multiple)')
48
+ .option(
49
+ '-i, --ide <ide...>',
50
+ 'Configure for specific IDE(s) - can specify multiple (cursor, claude-code, windsurf, trae, roo, kilo, cline, gemini, qwen-code, github-copilot, codex, codex-web, auggie-cli, other)',
51
+ )
52
+ .option(
53
+ '-e, --expansion-packs <packs...>',
54
+ 'Install specific expansion packs (can specify multiple)',
55
+ )
46
56
  .action(async (options) => {
47
57
  try {
48
58
  if (!options.full && !options.expansionOnly) {
@@ -60,12 +70,8 @@ program
60
70
  const config = {
61
71
  installType,
62
72
  directory: options.directory || '.',
63
- ides: (options.ide || []).filter(ide => ide !== 'other'),
73
+ ides: (options.ide || []).filter((ide) => ide !== 'other'),
64
74
  expansionPacks: options.expansionPacks || [],
65
- // Default web bundles configuration
66
- includeWebBundles: true,
67
- webBundleType: 'all',
68
- webBundlesDirectory: `${options.directory || '.'}/web-bundles`
69
75
  };
70
76
  await installer.install(config);
71
77
  process.exit(0);
@@ -78,7 +84,7 @@ program
78
84
 
79
85
  program
80
86
  .command('update')
81
- .description('Update existing XiaoMa CLI installation')
87
+ .description('Update existing BMad installation')
82
88
  .option('--force', 'Force update, overwriting modified files')
83
89
  .option('--dry-run', 'Show what would be updated without making changes')
84
90
  .action(async () => {
@@ -90,6 +96,62 @@ program
90
96
  }
91
97
  });
92
98
 
99
+ // Command to check if updates are available
100
+ program
101
+ .command('update-check')
102
+ .description('Check for BMad Update')
103
+ .action(async () => {
104
+ console.log('Checking for updates...');
105
+
106
+ // Make HTTP request to npm registry for latest version info
107
+ const req = https.get(`https://registry.npmjs.org/${packageName}/latest`, (res) => {
108
+ // Check for HTTP errors (non-200 status codes)
109
+ if (res.statusCode !== 200) {
110
+ console.error(chalk.red(`Update check failed: Received status code ${res.statusCode}`));
111
+ return;
112
+ }
113
+
114
+ // Accumulate response data chunks
115
+ let data = '';
116
+ res.on('data', (chunk) => (data += chunk));
117
+
118
+ // Process complete response
119
+ res.on('end', () => {
120
+ try {
121
+ // Parse npm registry response and extract version
122
+ const latest = JSON.parse(data).version;
123
+
124
+ // Compare versions using semver
125
+ if (semver.gt(latest, version)) {
126
+ console.log(
127
+ chalk.bold.blue(`āš ļø ${packageName} update available: ${version} → ${latest}`),
128
+ );
129
+ console.log(chalk.bold.blue('\nInstall latest by running:'));
130
+ console.log(chalk.bold.magenta(` npm install ${packageName}@latest`));
131
+ console.log(chalk.dim(' or'));
132
+ console.log(chalk.bold.magenta(` npx ${packageName}@latest`));
133
+ } else {
134
+ console.log(chalk.bold.blue(`✨ ${packageName} is up to date`));
135
+ }
136
+ } catch (error) {
137
+ // Handle JSON parsing errors
138
+ console.error(chalk.red('Failed to parse npm registry data:'), error.message);
139
+ }
140
+ });
141
+ });
142
+
143
+ // Handle network/connection errors
144
+ req.on('error', (error) => {
145
+ console.error(chalk.red('Update check failed:'), error.message);
146
+ });
147
+
148
+ // Set 30 second timeout to prevent hanging
149
+ req.setTimeout(30_000, () => {
150
+ req.destroy();
151
+ console.error(chalk.red('Update check timed out'));
152
+ });
153
+ });
154
+
93
155
  program
94
156
  .command('list:expansions')
95
157
  .description('List available expansion packs')
@@ -129,17 +191,18 @@ program
129
191
  });
130
192
 
131
193
  async function promptInstallation() {
132
-
133
194
  // Display ASCII logo
134
- console.log(chalk.bold.cyan(`
135
- ā–ˆā–ˆā•— ā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā•—
136
- ā•šā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•— ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘
137
- ā•šā–ˆā–ˆā–ˆā•”ā• ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā–ˆā–ˆā–ˆā–ˆā•”ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘
138
- ā–ˆā–ˆā•”ā–ˆā–ˆā•— ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ā•šā•ā•ā•ā•ā•ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘
139
- ā–ˆā–ˆā•”ā• ā–ˆā–ˆā•—ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ ā•šā•ā• ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā•šā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•‘
140
- ā•šā•ā• ā•šā•ā•ā•šā•ā•ā•šā•ā• ā•šā•ā• ā•šā•ā•ā•ā•ā•ā• ā•šā•ā• ā•šā•ā•ā•šā•ā• ā•šā•ā• ā•šā•ā•ā•ā•ā•ā•ā•šā•ā•ā•ā•ā•ā•ā•ā•šā•ā•
141
- `));
142
-
195
+ console.log(
196
+ chalk.bold.cyan(`
197
+ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•— ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•—
198
+ ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā•ā•ā•ā•šā•ā•ā–ˆā–ˆā•”ā•ā•ā•ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—
199
+ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā•”ā–ˆā–ˆā–ˆā–ˆā•”ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā•—ā–ˆā–ˆā•”ā–ˆā–ˆā–ˆā–ˆā•”ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•‘ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘
200
+ ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•—ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā•šā•ā•ā•ā•ā•ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•”ā•ā•ā• ā–ˆā–ˆā•‘ ā–ˆā–ˆā•”ā•ā•ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘
201
+ ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā•‘ ā•šā•ā• ā–ˆā–ˆā•‘ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā• ā–ˆā–ˆā•‘ ā•šā•ā• ā–ˆā–ˆā•‘ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•— ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ ā–ˆā–ˆā•‘ā•šā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•ā–ˆā–ˆā–ˆā–ˆā–ˆā–ˆā•”ā•
202
+ ā•šā•ā•ā•ā•ā•ā• ā•šā•ā• ā•šā•ā•ā•šā•ā• ā•šā•ā•ā•šā•ā•ā•ā•ā•ā• ā•šā•ā• ā•šā•ā•ā•šā•ā•ā•ā•ā•ā•ā• ā•šā•ā• ā•šā•ā• ā•šā•ā• ā•šā•ā•ā•ā•ā•ā• ā•šā•ā•ā•ā•ā•ā•
203
+ `),
204
+ );
205
+
143
206
  console.log(chalk.bold.magenta('šŸš€ Universal AI Agent Framework for Any Domain'));
144
207
  console.log(chalk.bold.blue(`✨ Installer v${version}\n`));
145
208
 
@@ -150,78 +213,80 @@ async function promptInstallation() {
150
213
  {
151
214
  type: 'input',
152
215
  name: 'directory',
153
- message: 'Enter the full path to your project directory where XiaoMa CLI should be installed:',
154
- default: process.cwd(),
216
+ message: 'Enter the full path to your project directory where BMad should be installed:',
217
+ default: path.resolve('.'),
155
218
  validate: (input) => {
156
219
  if (!input.trim()) {
157
220
  return 'Please enter a valid project path';
158
221
  }
159
222
  return true;
160
- }
161
- }
223
+ },
224
+ },
162
225
  ]);
163
226
  answers.directory = directory;
164
227
 
165
228
  // Detect existing installations
166
229
  const installDir = path.resolve(directory);
167
230
  const state = await installer.detectInstallationState(installDir);
168
-
231
+
169
232
  // Check for existing expansion packs
170
233
  const existingExpansionPacks = state.expansionPacks || {};
171
-
234
+
172
235
  // Get available expansion packs
173
236
  const availableExpansionPacks = await installer.getAvailableExpansionPacks();
174
-
237
+
175
238
  // Build choices list
176
239
  const choices = [];
177
-
240
+
178
241
  // Load core config to get short-title
179
- const coreConfigPath = path.join(__dirname, '..', '..', '..', 'xiaoma-core', 'core-config.yaml');
242
+ const coreConfigPath = path.join(__dirname, '..', '..', '..', 'bmad-core', 'core-config.yaml');
180
243
  const coreConfig = yaml.load(await fs.readFile(coreConfigPath, 'utf8'));
181
- const coreShortTitle = coreConfig['short-title'] || 'XiaoMa Agile Core System';
182
-
183
- // Add XiaoMa core option
244
+ const coreShortTitle = coreConfig['short-title'] || 'BMad Agile Core System';
245
+
246
+ // Add BMad core option
184
247
  let bmadOptionText;
185
248
  if (state.type === 'v4_existing') {
186
249
  const currentVersion = state.manifest?.version || 'unknown';
187
250
  const newVersion = version; // Always use package.json version
188
- const versionInfo = currentVersion === newVersion
189
- ? `(v${currentVersion} - reinstall)`
190
- : `(v${currentVersion} → v${newVersion})`;
191
- bmadOptionText = `Update ${coreShortTitle} ${versionInfo} .xiaoma-core`;
251
+ const versionInfo =
252
+ currentVersion === newVersion
253
+ ? `(v${currentVersion} - reinstall)`
254
+ : `(v${currentVersion} → v${newVersion})`;
255
+ bmadOptionText = `Update ${coreShortTitle} ${versionInfo} .bmad-core`;
192
256
  } else {
193
- bmadOptionText = `${coreShortTitle} (v${version}) .xiaoma-core`;
257
+ bmadOptionText = `${coreShortTitle} (v${version}) .bmad-core`;
194
258
  }
195
-
259
+
196
260
  choices.push({
197
261
  name: bmadOptionText,
198
- value: 'xiaoma-core',
199
- checked: true
262
+ value: 'bmad-core',
263
+ checked: true,
200
264
  });
201
-
265
+
202
266
  // Add expansion pack options
203
267
  for (const pack of availableExpansionPacks) {
204
268
  const existing = existingExpansionPacks[pack.id];
205
269
  let packOptionText;
206
-
270
+
207
271
  if (existing) {
208
272
  const currentVersion = existing.manifest?.version || 'unknown';
209
273
  const newVersion = pack.version;
210
- const versionInfo = currentVersion === newVersion
211
- ? `(v${currentVersion} - reinstall)`
212
- : `(v${currentVersion} → v${newVersion})`;
274
+ const versionInfo =
275
+ currentVersion === newVersion
276
+ ? `(v${currentVersion} - reinstall)`
277
+ : `(v${currentVersion} → v${newVersion})`;
213
278
  packOptionText = `Update ${pack.shortTitle} ${versionInfo} .${pack.id}`;
214
279
  } else {
215
280
  packOptionText = `${pack.shortTitle} (v${pack.version}) .${pack.id}`;
216
281
  }
217
-
282
+
218
283
  choices.push({
219
284
  name: packOptionText,
220
285
  value: pack.id,
221
- checked: false
286
+ checked: false,
222
287
  });
223
288
  }
224
-
289
+
225
290
  // Ask what to install
226
291
  const { selectedItems } = await inquirer.prompt([
227
292
  {
@@ -234,101 +299,118 @@ async function promptInstallation() {
234
299
  return 'Please select at least one item to install';
235
300
  }
236
301
  return true;
237
- }
238
- }
302
+ },
303
+ },
239
304
  ]);
240
-
305
+
241
306
  // Process selections
242
- answers.installType = selectedItems.includes('xiaoma-core') ? 'full' : 'expansion-only';
243
- answers.expansionPacks = selectedItems.filter(item => item !== 'xiaoma-core');
244
-
245
- // Ask for project type and tech stack if installing XiaoMa core
246
- if (selectedItems.includes('xiaoma-core')) {
247
- console.log(chalk.cyan('\nšŸ—ļø Project Configuration'));
248
-
249
- // Ask for project type (new vs existing)
250
- const { projectType } = await inquirer.prompt([
307
+ answers.installType = selectedItems.includes('bmad-core') ? 'full' : 'expansion-only';
308
+ answers.expansionPacks = selectedItems.filter((item) => item !== 'bmad-core');
309
+
310
+ // Ask sharding questions if installing BMad core
311
+ if (selectedItems.includes('bmad-core')) {
312
+ console.log(chalk.cyan('\nšŸ“‹ Document Organization Settings'));
313
+ console.log(chalk.dim('Configure how your project documentation should be organized.\n'));
314
+
315
+ // Ask about PRD sharding
316
+ const { prdSharded } = await inquirer.prompt([
251
317
  {
252
- type: 'list',
253
- name: 'projectType',
254
- message: 'What type of project are you working on?',
255
- choices: [
256
- {
257
- name: 'New project (Greenfield) - Starting from scratch',
258
- value: 'greenfield'
259
- },
260
- {
261
- name: 'Existing project (Brownfield) - Adding to existing codebase',
262
- value: 'brownfield'
263
- }
264
- ],
265
- default: 'greenfield'
266
- }
318
+ type: 'confirm',
319
+ name: 'prdSharded',
320
+ message: 'Will the PRD (Product Requirements Document) be sharded into multiple files?',
321
+ default: true,
322
+ },
267
323
  ]);
268
-
269
- // Ask for tech stack type
270
- const { techStackType } = await inquirer.prompt([
324
+ answers.prdSharded = prdSharded;
325
+
326
+ // Ask about architecture sharding
327
+ const { architectureSharded } = await inquirer.prompt([
271
328
  {
272
- type: 'list',
273
- name: 'techStackType',
274
- message: 'What type of application are you building?',
275
- choices: [
276
- {
277
- name: 'Full-stack application - Complete web application with frontend and backend',
278
- value: 'fullstack'
279
- },
280
- {
281
- name: 'Frontend-only - Pure frontend application (SPA, static site, etc.)',
282
- value: 'ui'
283
- },
284
- {
285
- name: 'Backend-only - API services, microservices, or backend systems',
286
- value: 'service'
287
- }
288
- ],
289
- default: 'fullstack'
290
- }
329
+ type: 'confirm',
330
+ name: 'architectureSharded',
331
+ message: 'Will the architecture documentation be sharded into multiple files?',
332
+ default: true,
333
+ },
291
334
  ]);
292
-
293
- // Store the project configuration
294
- answers.projectType = projectType;
295
- answers.techStackType = techStackType;
296
- answers.workflowType = `${projectType}-${techStackType}`;
297
-
298
- console.log(chalk.dim(`Selected workflow: ${answers.workflowType}`));
299
-
300
- console.log(chalk.cyan('\nšŸ“‹ Document Organization Settings'));
301
- console.log(chalk.dim('Using recommended defaults: PRD and architecture will be sharded into multiple files.\n'));
302
-
303
- // Use default values without prompting
304
- answers.prdSharded = true;
305
- answers.architectureSharded = true;
335
+ answers.architectureSharded = architectureSharded;
336
+
337
+ // Show warning if architecture sharding is disabled
338
+ if (!architectureSharded) {
339
+ console.log(chalk.yellow.bold('\nāš ļø IMPORTANT: Architecture Sharding Disabled'));
340
+ console.log(
341
+ chalk.yellow(
342
+ 'With architecture sharding disabled, you should still create the files listed',
343
+ ),
344
+ );
345
+ console.log(
346
+ chalk.yellow(
347
+ 'in devLoadAlwaysFiles (like coding-standards.md, tech-stack.md, source-tree.md)',
348
+ ),
349
+ );
350
+ console.log(chalk.yellow('as these are used by the dev agent at runtime.'));
351
+ console.log(
352
+ chalk.yellow(
353
+ '\nAlternatively, you can remove these files from the devLoadAlwaysFiles list',
354
+ ),
355
+ );
356
+ console.log(chalk.yellow('in your core-config.yaml after installation.'));
357
+
358
+ const { acknowledge } = await inquirer.prompt([
359
+ {
360
+ type: 'confirm',
361
+ name: 'acknowledge',
362
+ message: 'Do you acknowledge this requirement and want to proceed?',
363
+ default: false,
364
+ },
365
+ ]);
366
+
367
+ if (!acknowledge) {
368
+ console.log(chalk.red('Installation cancelled.'));
369
+ process.exit(0);
370
+ }
371
+ }
306
372
  }
307
373
 
308
374
  // Ask for IDE configuration
309
375
  let ides = [];
310
376
  let ideSelectionComplete = false;
311
-
377
+
312
378
  while (!ideSelectionComplete) {
313
379
  console.log(chalk.cyan('\nšŸ› ļø IDE Configuration'));
314
- console.log(chalk.bold.yellow.bgRed(' āš ļø IMPORTANT: This is a MULTISELECT! Use SPACEBAR to toggle each IDE! '));
380
+ console.log(
381
+ chalk.bold.yellow.bgRed(
382
+ ' āš ļø IMPORTANT: This is a MULTISELECT! Use SPACEBAR to toggle each IDE! ',
383
+ ),
384
+ );
315
385
  console.log(chalk.bold.magenta('šŸ”ø Use arrow keys to navigate'));
316
386
  console.log(chalk.bold.magenta('šŸ”ø Use SPACEBAR to select/deselect IDEs'));
317
387
  console.log(chalk.bold.magenta('šŸ”ø Press ENTER when finished selecting\n'));
318
-
388
+
319
389
  const ideResponse = await inquirer.prompt([
320
390
  {
321
391
  type: 'checkbox',
322
392
  name: 'ides',
323
- message: 'Which IDE(s) do you want to configure? (Select with SPACEBAR, confirm with ENTER):',
393
+ message:
394
+ 'Which IDE(s) do you want to configure? (Select with SPACEBAR, confirm with ENTER):',
324
395
  choices: [
325
396
  { name: 'Cursor', value: 'cursor' },
326
397
  { name: 'Claude Code', value: 'claude-code' },
327
- { name: 'Trae', value: 'trae' }
328
- ]
329
- }
398
+ { name: 'Windsurf', value: 'windsurf' },
399
+ { name: 'Trae', value: 'trae' }, // { name: 'Trae', value: 'trae'}
400
+ { name: 'Roo Code', value: 'roo' },
401
+ { name: 'Kilo Code', value: 'kilo' },
402
+ { name: 'Cline', value: 'cline' },
403
+ { name: 'Gemini CLI', value: 'gemini' },
404
+ { name: 'Qwen Code', value: 'qwen-code' },
405
+ { name: 'Crush', value: 'crush' },
406
+ { name: 'Github Copilot', value: 'github-copilot' },
407
+ { name: 'Auggie CLI (Augment Code)', value: 'auggie-cli' },
408
+ { name: 'Codex CLI', value: 'codex' },
409
+ { name: 'Codex Web', value: 'codex-web' },
410
+ ],
411
+ },
330
412
  ]);
331
-
413
+
332
414
  ides = ideResponse.ides;
333
415
 
334
416
  // Confirm no IDE selection if none selected
@@ -337,35 +419,193 @@ async function promptInstallation() {
337
419
  {
338
420
  type: 'confirm',
339
421
  name: 'confirmNoIde',
340
- message: chalk.red('āš ļø You have NOT selected any IDEs. This means NO IDE integration will be set up. Is this correct?'),
341
- default: false
342
- }
422
+ message: chalk.red(
423
+ 'āš ļø You have NOT selected any IDEs. This means NO IDE integration will be set up. Is this correct?',
424
+ ),
425
+ default: false,
426
+ },
343
427
  ]);
344
-
428
+
345
429
  if (!confirmNoIde) {
346
- console.log(chalk.bold.red('\nšŸ”„ Returning to IDE selection. Remember to use SPACEBAR to select IDEs!\n'));
430
+ console.log(
431
+ chalk.bold.red(
432
+ '\nšŸ”„ Returning to IDE selection. Remember to use SPACEBAR to select IDEs!\n',
433
+ ),
434
+ );
347
435
  continue; // Go back to IDE selection only
348
436
  }
349
437
  }
350
-
438
+
351
439
  ideSelectionComplete = true;
352
440
  }
353
441
 
354
442
  // Use selected IDEs directly
355
443
  answers.ides = ides;
356
444
 
445
+ // Configure GitHub Copilot immediately if selected
446
+ if (ides.includes('github-copilot')) {
447
+ console.log(chalk.cyan('\nšŸ”§ GitHub Copilot Configuration'));
448
+ console.log(
449
+ chalk.dim('BMad works best with specific VS Code settings for optimal agent experience.\n'),
450
+ );
357
451
 
358
- // Set default web bundles configuration
359
- console.log(chalk.cyan('\nšŸ“¦ Web Bundles Configuration'));
360
- console.log(chalk.dim('Using recommended defaults: Including all available web bundles (agents, teams, expansion packs).\n'));
361
-
362
- const includeWebBundles = true;
363
- const webBundleType = 'all';
364
- answers.webBundleType = webBundleType;
452
+ const { configChoice } = await inquirer.prompt([
453
+ {
454
+ type: 'list',
455
+ name: 'configChoice',
456
+ message: chalk.yellow('How would you like to configure GitHub Copilot settings?'),
457
+ choices: [
458
+ {
459
+ name: 'Use recommended defaults (fastest setup)',
460
+ value: 'defaults',
461
+ },
462
+ {
463
+ name: 'Configure each setting manually (customize to your preferences)',
464
+ value: 'manual',
465
+ },
466
+ {
467
+ name: "Skip settings configuration (I'll configure manually later)",
468
+ value: 'skip',
469
+ },
470
+ ],
471
+ default: 'defaults',
472
+ },
473
+ ]);
474
+
475
+ answers.githubCopilotConfig = { configChoice };
476
+ }
477
+
478
+ // Configure Auggie CLI (Augment Code) immediately if selected
479
+ if (ides.includes('auggie-cli')) {
480
+ console.log(chalk.cyan('\nšŸ“ Auggie CLI Location Configuration'));
481
+ console.log(chalk.dim('Choose where to install BMad agents for Auggie CLI access.\n'));
482
+
483
+ const { selectedLocations } = await inquirer.prompt([
484
+ {
485
+ type: 'checkbox',
486
+ name: 'selectedLocations',
487
+ message: 'Select Auggie CLI command locations:',
488
+ choices: [
489
+ {
490
+ name: 'User Commands (Global): Available across all your projects (user-wide)',
491
+ value: 'user',
492
+ },
493
+ {
494
+ name: 'Workspace Commands (Project): Stored in repository, shared with team',
495
+ value: 'workspace',
496
+ },
497
+ ],
498
+ validate: (selected) => {
499
+ if (selected.length === 0) {
500
+ return 'Please select at least one location';
501
+ }
502
+ return true;
503
+ },
504
+ },
505
+ ]);
506
+
507
+ answers.augmentCodeConfig = { selectedLocations };
508
+ }
509
+
510
+ // Ask for web bundles installation
511
+ const { includeWebBundles } = await inquirer.prompt([
512
+ {
513
+ type: 'confirm',
514
+ name: 'includeWebBundles',
515
+ message:
516
+ 'Would you like to include pre-built web bundles? (standalone files for ChatGPT, Claude, Gemini)',
517
+ default: false,
518
+ },
519
+ ]);
520
+
521
+ if (includeWebBundles) {
522
+ console.log(chalk.cyan('\nšŸ“¦ Web bundles are standalone files perfect for web AI platforms.'));
523
+ console.log(
524
+ chalk.dim(' You can choose different teams/agents than your IDE installation.\n'),
525
+ );
526
+
527
+ const { webBundleType } = await inquirer.prompt([
528
+ {
529
+ type: 'list',
530
+ name: 'webBundleType',
531
+ message: 'What web bundles would you like to include?',
532
+ choices: [
533
+ {
534
+ name: 'All available bundles (agents, teams, expansion packs)',
535
+ value: 'all',
536
+ },
537
+ {
538
+ name: 'Specific teams only',
539
+ value: 'teams',
540
+ },
541
+ {
542
+ name: 'Individual agents only',
543
+ value: 'agents',
544
+ },
545
+ {
546
+ name: 'Custom selection',
547
+ value: 'custom',
548
+ },
549
+ ],
550
+ },
551
+ ]);
552
+
553
+ answers.webBundleType = webBundleType;
554
+
555
+ // If specific teams, let them choose which teams
556
+ if (webBundleType === 'teams' || webBundleType === 'custom') {
557
+ const teams = await installer.getAvailableTeams();
558
+ const { selectedTeams } = await inquirer.prompt([
559
+ {
560
+ type: 'checkbox',
561
+ name: 'selectedTeams',
562
+ message: 'Select team bundles to include:',
563
+ choices: teams.map((t) => ({
564
+ name: `${t.icon || 'šŸ“‹'} ${t.name}: ${t.description}`,
565
+ value: t.id,
566
+ checked: webBundleType === 'teams', // Check all if teams-only mode
567
+ })),
568
+ validate: (answer) => {
569
+ if (answer.length === 0) {
570
+ return 'You must select at least one team.';
571
+ }
572
+ return true;
573
+ },
574
+ },
575
+ ]);
576
+ answers.selectedWebBundleTeams = selectedTeams;
577
+ }
578
+
579
+ // If custom selection, also ask about individual agents
580
+ if (webBundleType === 'custom') {
581
+ const { includeIndividualAgents } = await inquirer.prompt([
582
+ {
583
+ type: 'confirm',
584
+ name: 'includeIndividualAgents',
585
+ message: 'Also include individual agent bundles?',
586
+ default: true,
587
+ },
588
+ ]);
589
+ answers.includeIndividualAgents = includeIndividualAgents;
590
+ }
591
+
592
+ const { webBundlesDirectory } = await inquirer.prompt([
593
+ {
594
+ type: 'input',
595
+ name: 'webBundlesDirectory',
596
+ message: 'Enter directory for web bundles:',
597
+ default: `${answers.directory}/web-bundles`,
598
+ validate: (input) => {
599
+ if (!input.trim()) {
600
+ return 'Please enter a valid directory path';
601
+ }
602
+ return true;
603
+ },
604
+ },
605
+ ]);
606
+ answers.webBundlesDirectory = webBundlesDirectory;
607
+ }
365
608
 
366
- // Use default web bundles directory
367
- const webBundlesDirectory = `${answers.directory}/web-bundles`;
368
- answers.webBundlesDirectory = webBundlesDirectory;
369
609
  answers.includeWebBundles = includeWebBundles;
370
610
 
371
611
  return answers;
@@ -374,6 +614,6 @@ async function promptInstallation() {
374
614
  program.parse(process.argv);
375
615
 
376
616
  // Show help if no command provided
377
- if (!process.argv.slice(2).length) {
617
+ if (process.argv.slice(2).length === 0) {
378
618
  program.outputHelp();
379
- }
619
+ }