@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.
- package/.github/FORK_GUIDE.md +106 -0
- package/.github/FUNDING.yaml +15 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- package/.github/workflows/discord.yaml +26 -0
- package/.github/workflows/format-check.yaml +44 -0
- package/.github/workflows/manual-release.yaml +174 -0
- package/.github/workflows/pr-validation.yaml +55 -0
- package/.husky/pre-commit +3 -0
- package/.vscode/settings.json +26 -1
- package/CHANGELOG.md +686 -0
- package/CONTRIBUTING.md +250 -0
- package/LICENSE +6 -1
- package/common/tasks/create-doc.md +2 -0
- package/common/tasks/execute-checklist.md +2 -7
- package/common/utils/bmad-doc-template.md +7 -5
- package/common/utils/workflow-management.md +2 -0
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +2103 -0
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +1627 -0
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +822 -0
- package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +8486 -0
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +3210 -0
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +3244 -0
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +317 -0
- package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +982 -0
- package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +12854 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/beta-reader.txt +921 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/book-critic.txt +81 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/character-psychologist.txt +886 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/cover-designer.txt +85 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/dialog-specialist.txt +903 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/editor.txt +837 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/genre-specialist.txt +989 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/narrative-designer.txt +888 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/plot-architect.txt +1173 -0
- package/dist/expansion-packs/bmad-creative-writing/agents/world-builder.txt +914 -0
- package/dist/expansion-packs/bmad-creative-writing/teams/agent-team.txt +6071 -0
- package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +2079 -0
- package/docs/GUIDING-PRINCIPLES.md +91 -0
- package/docs/core-architecture.md +219 -0
- package/docs/enhanced-ide-development-workflow.md +248 -0
- package/docs/expansion-packs.md +200 -0
- package/docs/how-to-contribute-with-pull-requests.md +158 -0
- package/docs/user-guide.md +530 -0
- package/docs/versioning-and-releases.md +155 -0
- package/docs/versions.md +48 -0
- package/docs/working-in-the-brownfield.md +597 -0
- package/eslint.config.mjs +119 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +14 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +73 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +80 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +66 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +203 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +162 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +9 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +252 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +649 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +112 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +218 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +292 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +614 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +357 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +344 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +254 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +485 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +184 -0
- package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +176 -0
- package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +15 -0
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +82 -0
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +79 -0
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +80 -0
- package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +67 -0
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +393 -0
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +205 -0
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +203 -0
- package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +126 -0
- package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +7 -0
- package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +771 -0
- package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +588 -0
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +112 -0
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +143 -0
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +186 -0
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +292 -0
- package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +202 -0
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +1031 -0
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +357 -0
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +706 -0
- package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +257 -0
- package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +485 -0
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +184 -0
- package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +176 -0
- package/expansion-packs/bmad-creative-writing/README.md +146 -0
- package/expansion-packs/bmad-creative-writing/agent-teams/agent-team.yaml +20 -0
- package/expansion-packs/bmad-creative-writing/agents/beta-reader.md +94 -0
- package/expansion-packs/bmad-creative-writing/agents/book-critic.md +40 -0
- package/expansion-packs/bmad-creative-writing/agents/character-psychologist.md +93 -0
- package/expansion-packs/bmad-creative-writing/agents/cover-designer.md +46 -0
- package/expansion-packs/bmad-creative-writing/agents/dialog-specialist.md +92 -0
- package/expansion-packs/bmad-creative-writing/agents/editor.md +93 -0
- package/expansion-packs/bmad-creative-writing/agents/genre-specialist.md +95 -0
- package/expansion-packs/bmad-creative-writing/agents/narrative-designer.md +93 -0
- package/expansion-packs/bmad-creative-writing/agents/plot-architect.md +95 -0
- package/expansion-packs/bmad-creative-writing/agents/world-builder.md +94 -0
- package/expansion-packs/bmad-creative-writing/checklists/beta-feedback-closure-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/character-consistency-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/comedic-timing-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/cyberpunk-aesthetic-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/ebook-formatting-checklist.md +21 -0
- package/expansion-packs/bmad-creative-writing/checklists/epic-poetry-meter-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/fantasy-magic-system-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/foreshadowing-payoff-checklist.md +22 -0
- package/expansion-packs/bmad-creative-writing/checklists/genre-tropes-checklist.md +22 -0
- package/expansion-packs/bmad-creative-writing/checklists/historical-accuracy-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/horror-suspense-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/kdp-cover-ready-checklist.md +25 -0
- package/expansion-packs/bmad-creative-writing/checklists/line-edit-quality-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/marketing-copy-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/mystery-clue-trail-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/orbital-mechanics-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/plot-structure-checklist.md +59 -0
- package/expansion-packs/bmad-creative-writing/checklists/publication-readiness-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/romance-emotional-beats-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/scene-quality-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/scifi-technology-plausibility-checklist.md +22 -0
- package/expansion-packs/bmad-creative-writing/checklists/sensitivity-representation-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/steampunk-gadget-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/thriller-pacing-stakes-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/timeline-continuity-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/world-building-continuity-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/checklists/ya-appropriateness-checklist.md +23 -0
- package/expansion-packs/bmad-creative-writing/config.yaml +12 -0
- package/expansion-packs/bmad-creative-writing/data/bmad-kb.md +209 -0
- package/expansion-packs/bmad-creative-writing/data/story-structures.md +67 -0
- package/expansion-packs/bmad-creative-writing/docs/brief.md +212 -0
- package/expansion-packs/bmad-creative-writing/tasks/advanced-elicitation.md +119 -0
- package/expansion-packs/bmad-creative-writing/tasks/analyze-reader-feedback.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/analyze-story-structure.md +67 -0
- package/expansion-packs/bmad-creative-writing/tasks/assemble-kdp-package.md +29 -0
- package/expansion-packs/bmad-creative-writing/tasks/brainstorm-premise.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/build-world.md +24 -0
- package/expansion-packs/bmad-creative-writing/tasks/character-depth-pass.md +22 -0
- package/expansion-packs/bmad-creative-writing/tasks/create-doc.md +103 -0
- package/expansion-packs/bmad-creative-writing/tasks/create-draft-section.md +26 -0
- package/expansion-packs/bmad-creative-writing/tasks/critical-review.md +26 -0
- package/expansion-packs/bmad-creative-writing/tasks/develop-character.md +24 -0
- package/expansion-packs/bmad-creative-writing/tasks/execute-checklist.md +88 -0
- package/expansion-packs/bmad-creative-writing/tasks/expand-premise.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/expand-synopsis.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/final-polish.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/generate-cover-brief.md +25 -0
- package/expansion-packs/bmad-creative-writing/tasks/generate-cover-prompts.md +26 -0
- package/expansion-packs/bmad-creative-writing/tasks/generate-scene-list.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/incorporate-feedback.md +25 -0
- package/expansion-packs/bmad-creative-writing/tasks/outline-scenes.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/provide-feedback.md +24 -0
- package/expansion-packs/bmad-creative-writing/tasks/publish-chapter.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/quick-feedback.md +22 -0
- package/expansion-packs/bmad-creative-writing/tasks/select-next-arc.md +23 -0
- package/expansion-packs/bmad-creative-writing/tasks/workshop-dialog.md +64 -0
- package/expansion-packs/bmad-creative-writing/templates/beta-feedback-form.yaml +97 -0
- package/expansion-packs/bmad-creative-writing/templates/chapter-draft-tmpl.yaml +82 -0
- package/expansion-packs/bmad-creative-writing/templates/character-profile-tmpl.yaml +92 -0
- package/expansion-packs/bmad-creative-writing/templates/cover-design-brief-tmpl.yaml +98 -0
- package/expansion-packs/bmad-creative-writing/templates/premise-brief-tmpl.yaml +78 -0
- package/expansion-packs/bmad-creative-writing/templates/scene-list-tmpl.yaml +55 -0
- package/expansion-packs/bmad-creative-writing/templates/story-outline-tmpl.yaml +96 -0
- package/expansion-packs/bmad-creative-writing/templates/world-guide-tmpl.yaml +89 -0
- package/expansion-packs/bmad-creative-writing/workflows/book-cover-design-workflow.md +218 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-greenfield-workflow.yaml +56 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-serial-workflow.yaml +50 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-snowflake-workflow.yaml +69 -0
- package/expansion-packs/bmad-creative-writing/workflows/novel-writing.yaml +91 -0
- package/expansion-packs/bmad-creative-writing/workflows/screenplay-development.yaml +85 -0
- package/expansion-packs/bmad-creative-writing/workflows/series-planning.yaml +78 -0
- package/expansion-packs/bmad-creative-writing/workflows/short-story-creation.yaml +64 -0
- package/expansion-packs/bmad-infrastructure-devops/README.md +147 -0
- package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +73 -0
- package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +486 -0
- package/expansion-packs/bmad-infrastructure-devops/config.yaml +10 -0
- package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +307 -0
- package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +161 -0
- package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +155 -0
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +425 -0
- package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +630 -0
- package/implement-fork-friendly-ci.sh +229 -0
- package/package.json +75 -45
- package/prettier.config.mjs +32 -0
- package/test.md +1 -0
- package/tools/builders/web-builder.js +143 -149
- package/tools/bump-all-versions.js +42 -33
- package/tools/bump-expansion-version.js +23 -16
- package/tools/cli.js +15 -15
- package/tools/flattener/aggregate.js +76 -0
- package/tools/flattener/binary.js +80 -0
- package/tools/flattener/discovery.js +71 -0
- package/tools/flattener/files.js +35 -0
- package/tools/flattener/ignoreRules.js +176 -0
- package/tools/flattener/main.js +458 -460
- package/tools/flattener/projectRoot.js +206 -0
- package/tools/flattener/prompts.js +44 -0
- package/tools/flattener/stats.helpers.js +395 -0
- package/tools/flattener/stats.js +80 -0
- package/tools/flattener/test-matrix.js +413 -0
- package/tools/flattener/xml.js +88 -0
- package/tools/installer/README.md +1 -1
- package/tools/installer/bin/xiaoma.js +390 -150
- package/tools/installer/config/ide-agent-config.yaml +1 -1
- package/tools/installer/config/install.config.yaml +60 -9
- package/tools/installer/lib/config-loader.js +55 -51
- package/tools/installer/lib/file-manager.js +92 -117
- package/tools/installer/lib/ide-base-setup.js +57 -56
- package/tools/installer/lib/ide-setup.js +821 -414
- package/tools/installer/lib/installer.js +924 -699
- package/tools/installer/lib/memory-profiler.js +54 -53
- package/tools/installer/lib/module-manager.js +19 -15
- package/tools/installer/lib/resource-locator.js +31 -33
- package/tools/installer/package.json +24 -23
- package/tools/lib/dependency-resolver.js +39 -43
- package/tools/lib/yaml-utils.js +7 -7
- package/tools/md-assets/web-agent-startup-instructions.md +6 -6
- package/tools/preview-release-notes.js +66 -0
- package/tools/setup-hooks.sh +37 -0
- package/tools/shared/bannerArt.js +105 -0
- package/tools/sync-installer-version.js +7 -9
- package/tools/sync-version.sh +23 -0
- package/tools/update-expansion-version.js +14 -15
- package/tools/upgraders/v3-to-v4-upgrader.js +203 -294
- package/tools/version-bump.js +41 -26
- package/tools/xiaoma-npx-wrapper.js +14 -14
- package/tools/yaml-format.js +56 -43
- package/xiaoma-core/agent-teams/team-all.yaml +3 -2
- package/xiaoma-core/agent-teams/team-fullstack.yaml +2 -1
- package/xiaoma-core/agent-teams/team-ide-minimal.yaml +1 -0
- package/xiaoma-core/agent-teams/team-no-ui.yaml +2 -1
- package/xiaoma-core/agents/analyst.md +20 -17
- package/xiaoma-core/agents/architect.md +15 -14
- package/xiaoma-core/agents/{xiaoma-master.md ā bmad-master.md} +29 -27
- package/xiaoma-core/agents/{xiaoma-orchestrator.md ā bmad-orchestrator.md} +36 -39
- package/xiaoma-core/agents/dev.md +23 -18
- package/xiaoma-core/agents/pm.md +18 -15
- package/xiaoma-core/agents/po.md +13 -10
- package/xiaoma-core/agents/qa.md +46 -24
- package/xiaoma-core/agents/sm.md +11 -8
- package/xiaoma-core/agents/ux-expert.md +10 -7
- package/xiaoma-core/checklists/architect-checklist.md +2 -5
- package/xiaoma-core/checklists/change-checklist.md +4 -2
- package/xiaoma-core/checklists/pm-checklist.md +2 -5
- package/xiaoma-core/checklists/po-master-checklist.md +2 -9
- package/xiaoma-core/checklists/story-dod-checklist.md +2 -7
- package/xiaoma-core/checklists/story-draft-checklist.md +2 -3
- package/xiaoma-core/core-config.yaml +4 -1
- package/xiaoma-core/data/{xiaoma-kb.md ā bmad-kb.md} +48 -42
- package/xiaoma-core/data/brainstorming-techniques.md +2 -0
- package/xiaoma-core/data/elicitation-methods.md +22 -0
- package/xiaoma-core/data/technical-preferences.md +2 -0
- package/xiaoma-core/data/test-levels-framework.md +148 -0
- package/xiaoma-core/data/test-priorities-matrix.md +174 -0
- package/xiaoma-core/tasks/advanced-elicitation.md +2 -0
- package/xiaoma-core/tasks/apply-qa-fixes.md +150 -0
- package/xiaoma-core/tasks/brownfield-create-epic.md +2 -0
- package/xiaoma-core/tasks/brownfield-create-story.md +2 -0
- package/xiaoma-core/tasks/correct-course.md +2 -0
- package/xiaoma-core/tasks/create-brownfield-story.md +14 -4
- package/xiaoma-core/tasks/create-deep-research-prompt.md +2 -11
- package/xiaoma-core/tasks/create-next-story.md +3 -1
- package/xiaoma-core/tasks/document-project.md +17 -13
- package/xiaoma-core/tasks/facilitate-brainstorming-session.md +5 -3
- package/xiaoma-core/tasks/generate-ai-frontend-prompt.md +2 -0
- package/xiaoma-core/tasks/index-docs.md +2 -6
- package/xiaoma-core/tasks/kb-mode-interaction.md +17 -15
- package/xiaoma-core/tasks/nfr-assess.md +345 -0
- package/xiaoma-core/tasks/qa-gate.md +163 -0
- package/xiaoma-core/tasks/review-story.md +245 -74
- package/xiaoma-core/tasks/risk-profile.md +355 -0
- package/xiaoma-core/tasks/shard-doc.md +2 -2
- package/xiaoma-core/tasks/test-design.md +176 -0
- package/xiaoma-core/tasks/trace-requirements.md +266 -0
- package/xiaoma-core/tasks/validate-next-story.md +5 -3
- package/xiaoma-core/templates/architecture-tmpl.yaml +50 -49
- package/xiaoma-core/templates/brainstorming-output-tmpl.yaml +5 -5
- package/xiaoma-core/templates/brownfield-architecture-tmpl.yaml +32 -31
- package/xiaoma-core/templates/brownfield-prd-tmpl.yaml +14 -13
- package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +20 -6
- package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +22 -9
- package/xiaoma-core/templates/front-end-spec-tmpl.yaml +25 -24
- package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +123 -104
- package/xiaoma-core/templates/market-research-tmpl.yaml +3 -2
- package/xiaoma-core/templates/prd-tmpl.yaml +10 -9
- package/xiaoma-core/templates/project-brief-tmpl.yaml +5 -4
- package/xiaoma-core/templates/qa-gate-tmpl.yaml +103 -0
- package/xiaoma-core/templates/story-tmpl.yaml +13 -12
- package/xiaoma-core/workflows/brownfield-fullstack.yaml +13 -12
- package/xiaoma-core/workflows/brownfield-service.yaml +5 -4
- package/xiaoma-core/workflows/brownfield-ui.yaml +5 -4
- package/xiaoma-core/workflows/greenfield-fullstack.yaml +7 -6
- package/xiaoma-core/workflows/greenfield-service.yaml +5 -4
- package/xiaoma-core/workflows/greenfield-ui.yaml +6 -5
- package/.releaserc.json +0 -18
- package/README.md +0 -532
- 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
- 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
- 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
- package/XiaoMa-Web/351/241/271/347/233/256/346/200/273/347/273/223/346/212/245/345/221/212.md +0 -310
- package/dist/agents/analyst.txt +0 -2882
- package/dist/agents/architect.txt +0 -3543
- package/dist/agents/dev-cn.txt +0 -428
- package/dist/agents/dev.txt +0 -428
- package/dist/agents/pm.txt +0 -2229
- package/dist/agents/po.txt +0 -1364
- package/dist/agents/qa.txt +0 -386
- package/dist/agents/sm.txt +0 -668
- package/dist/agents/ux-expert.txt +0 -701
- package/dist/agents/xiaoma-master.txt +0 -8756
- package/dist/agents/xiaoma-orchestrator.txt +0 -1490
- package/dist/teams/team-all.txt +0 -11062
- package/dist/teams/team-fullstack.txt +0 -10392
- package/dist/teams/team-ide-minimal.txt +0 -3507
- package/dist/teams/team-no-ui.txt +0 -8951
- package/docs/quick-start.md +0 -179
- package/tools/bmad-npx-wrapper.js +0 -39
- package/tools/installer/package-lock.json +0 -704
- package/tools/semantic-release-sync-installer.js +0 -30
- package/xiaoma-core/bmad-core/user-guide.md +0 -0
- package/xiaoma-core/enhanced-ide-development-workflow.md +0 -43
- package/xiaoma-core/user-guide.md +0 -251
- 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 (
|
|
19
|
+
} catch (error) {
|
|
18
20
|
// Fall back to root context (when run via npx from GitHub)
|
|
19
|
-
console.log(`Installer context not found (${
|
|
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 (
|
|
24
|
-
console.error(
|
|
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:
|
|
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('
|
|
40
|
+
.description('BMad Method installer - Universal AI agent framework for any domain');
|
|
37
41
|
|
|
38
42
|
program
|
|
39
43
|
.command('install')
|
|
40
|
-
.description('Install
|
|
41
|
-
.option('-f, --full', 'Install complete
|
|
42
|
-
.option('-x, --expansion-only', 'Install only expansion packs (no
|
|
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(
|
|
45
|
-
|
|
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
|
|
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(
|
|
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
|
|
154
|
-
default:
|
|
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, '..', '..', '..', '
|
|
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'] || '
|
|
182
|
-
|
|
183
|
-
// Add
|
|
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 =
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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}) .
|
|
257
|
+
bmadOptionText = `${coreShortTitle} (v${version}) .bmad-core`;
|
|
194
258
|
}
|
|
195
|
-
|
|
259
|
+
|
|
196
260
|
choices.push({
|
|
197
261
|
name: bmadOptionText,
|
|
198
|
-
value: '
|
|
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 =
|
|
211
|
-
|
|
212
|
-
|
|
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('
|
|
243
|
-
answers.expansionPacks = selectedItems.filter(item => item !== '
|
|
244
|
-
|
|
245
|
-
// Ask
|
|
246
|
-
if (selectedItems.includes('
|
|
247
|
-
console.log(chalk.cyan('\n
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
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: '
|
|
253
|
-
name: '
|
|
254
|
-
message: '
|
|
255
|
-
|
|
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
|
-
|
|
270
|
-
|
|
324
|
+
answers.prdSharded = prdSharded;
|
|
325
|
+
|
|
326
|
+
// Ask about architecture sharding
|
|
327
|
+
const { architectureSharded } = await inquirer.prompt([
|
|
271
328
|
{
|
|
272
|
-
type: '
|
|
273
|
-
name: '
|
|
274
|
-
message: '
|
|
275
|
-
|
|
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
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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(
|
|
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:
|
|
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: '
|
|
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(
|
|
341
|
-
|
|
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(
|
|
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
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
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 (
|
|
617
|
+
if (process.argv.slice(2).length === 0) {
|
|
378
618
|
program.outputHelp();
|
|
379
|
-
}
|
|
619
|
+
}
|