diff --git a/.github/workflows/bundle-latest.yaml b/.github/workflows/bundle-latest.yaml index a963cecc..d8a0da0e 100644 --- a/.github/workflows/bundle-latest.yaml +++ b/.github/workflows/bundle-latest.yaml @@ -100,8 +100,53 @@ jobs: fi done - # Create index.html for GitHub Pages - cat > dist/bundles/index.html << 'EOF' + # Generate index.html dynamically based on actual bundles + TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M UTC") + COMMIT_SHA=$(git rev-parse --short HEAD) + + # Function to generate agent links for a module + generate_agent_links() { + local module=$1 + local agent_dir="dist/bundles/$module/agents" + + if [ ! -d "$agent_dir" ]; then + echo "" + return + fi + + local links="" + local count=0 + + # Find all XML files and generate links + for xml_file in "$agent_dir"/*.xml; do + if [ -f "$xml_file" ]; then + local agent_name=$(basename "$xml_file" .xml) + # Convert filename to display name (pm -> PM, tech-writer -> Tech Writer) + local display_name=$(echo "$agent_name" | sed 's/-/ /g' | awk '{for(i=1;i<=NF;i++) {if(length($i)==2) $i=toupper($i); else $i=toupper(substr($i,1,1)) tolower(substr($i,2));}}1') + + if [ $count -gt 0 ]; then + links="$links | " + fi + links="$links$display_name" + count=$((count + 1)) + fi + done + + echo "$links" + } + + # Generate agent links for each module + BMM_LINKS=$(generate_agent_links "bmm") + CIS_LINKS=$(generate_agent_links "cis") + BMGD_LINKS=$(generate_agent_links "bmgd") + + # Count agents for bulk downloads + BMM_COUNT=$(find dist/bundles/bmm/agents -name '*.xml' 2>/dev/null | wc -l | tr -d ' ') + CIS_COUNT=$(find dist/bundles/cis/agents -name '*.xml' 2>/dev/null | wc -l | tr -d ' ') + BMGD_COUNT=$(find dist/bundles/bmgd/agents -name '*.xml' 2>/dev/null | wc -l | tr -d ' ') + + # Create index.html + cat > dist/bundles/index.html << EOF @@ -132,50 +177,63 @@ jobs:

Available Modules

+ EOF + + # Add BMM section if agents exist + if [ -n "$BMM_LINKS" ]; then + cat >> dist/bundles/index.html << EOF

BMM (BMad Method)

- PM | - Architect | - TEA | - Developer | - Analyst | - Scrum Master | - UX Designer | - Tech Writer
+ $BMM_LINKS
📁 Browse All | 📦 Download Zip
-
-

BMB (BMad Builder)

-
- Builder Agent
- 📁 Browse All | 📦 Download Zip -
-
+ EOF + fi + # Add CIS section if agents exist + if [ -n "$CIS_LINKS" ]; then + cat >> dist/bundles/index.html << EOF

CIS (Creative Intelligence Suite)

+ $CIS_LINKS
📁 Browse Agents | 📦 Download Zip
+ EOF + fi + + # Add BMGD section if agents exist + if [ -n "$BMGD_LINKS" ]; then + cat >> dist/bundles/index.html << EOF

BMGD (Game Development)

+ $BMGD_LINKS
📁 Browse Agents | 📦 Download Zip
+ EOF + fi + + # Add bulk downloads section + cat >> dist/bundles/index.html << EOF

Bulk Downloads

Download all agents for a module as a zip archive:

Usage

@@ -193,12 +251,6 @@ jobs: EOF - # Replace placeholders - TIMESTAMP=$(date -u +"%Y-%m-%d %H:%M UTC") - COMMIT_SHA=$(git rev-parse --short HEAD) - sed -i "s/\$TIMESTAMP/$TIMESTAMP/" dist/bundles/index.html - sed -i "s/\$COMMIT_SHA/$COMMIT_SHA/" dist/bundles/index.html - - name: Checkout bmad-bundles repo uses: actions/checkout@v4 with: diff --git a/.gitignore b/.gitignore index aed5f2dc..0c3840de 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,4 @@ z*/ .bmad .claude +.codex diff --git a/src/modules/bmm/docs/agents-guide.md b/src/modules/bmm/docs/agents-guide.md index 52d20775..f6886ede 100644 --- a/src/modules/bmm/docs/agents-guide.md +++ b/src/modules/bmm/docs/agents-guide.md @@ -321,7 +321,7 @@ The BMad Method Module (BMM) provides a comprehensive team of specialized AI age **Workflows:** - `workflow-status` - Check what to do next -- `create-design` - Conduct design thinking workshop to define UX specification with: +- `create-ux-design` - Conduct design thinking workshop to define UX specification with: - Visual exploration and generation - Collaborative decision-making - AI-assisted design tools (v0, Lovable) @@ -944,7 +944,7 @@ Quick reference for agent selection: | ----------------------- | ---- | ------------------ | --------------------------------------------- | ------------------------------------- | | **Analyst** | 📊 | 1 (Analysis) | brainstorm, brief, research, document-project | Discovery, requirements, brownfield | | **PM** | 📋 | 2 (Planning) | prd, tech-spec, epics-stories | Planning, requirements docs | -| **UX Designer** | 🎨 | 2 (Planning) | create-design, validate-design | UX-heavy projects, design | +| **UX Designer** | 🎨 | 2 (Planning) | create-ux-design, validate-design | UX-heavy projects, design | | **Architect** | 🏗️ | 3 (Solutioning) | architecture, implementation-readiness | Technical design, architecture | | **SM** | 🏃 | 4 (Implementation) | sprint-planning, create-story, story-context | Story management, sprint coordination | | **DEV** | 💻 | 4 (Implementation) | develop-story, code-review, story-done | Implementation, coding | diff --git a/src/modules/bmm/docs/enterprise-agentic-development.md b/src/modules/bmm/docs/enterprise-agentic-development.md index fd4c22f5..00738bcc 100644 --- a/src/modules/bmm/docs/enterprise-agentic-development.md +++ b/src/modules/bmm/docs/enterprise-agentic-development.md @@ -240,7 +240,7 @@ Continuous deployment to production **UX Designer Workflow:** ```bash -bmad ux *create-design +bmad ux *create-ux-design ``` **BMad produces:** diff --git a/src/modules/bmm/docs/test-architecture.md b/src/modules/bmm/docs/test-architecture.md index 694f3bb1..1e985a05 100644 --- a/src/modules/bmm/docs/test-architecture.md +++ b/src/modules/bmm/docs/test-architecture.md @@ -295,7 +295,7 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks* | Workflow Stage | Test Architect | Dev / Team | Outputs | | -------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ | | **Phase 1**: Discovery | - | Analyst ➕ `*research`, `*product-brief` | Domain research, compliance analysis, product brief | -| **Phase 2**: Planning | Run ➕ `*nfr-assess` | PM `*prd` (creates PRD with FRs/NFRs), UX `*create-design` | Enterprise PRD with FRs/NFRs, UX design, ➕ NFR documentation | +| **Phase 2**: Planning | Run ➕ `*nfr-assess` | PM `*prd` (creates PRD with FRs/NFRs), UX `*create-ux-design` | Enterprise PRD with FRs/NFRs, UX design, ➕ NFR documentation | | **Phase 3**: Solutioning | Run `*framework`, `*ci` AFTER architecture and epic creation | Architect `*architecture`, `*create-epics-and-stories`, `*implementation-readiness` | Architecture, epics/stories, test framework, CI pipeline | | **Phase 4**: Sprint Start | - | SM `*sprint-planning` | Sprint plan with all epics | | **Phase 4**: Epic Planning | Run `*test-design` for THIS epic 🔄 (compliance focus) | Review epic scope and compliance requirements | `test-design-epic-N.md` with security/performance/compliance focus | diff --git a/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md b/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md index fc5d6458..cc0e2f07 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +++ b/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md @@ -26,12 +26,12 @@ Load the FULL file: {output_folder}/bmm-workflow-status.yaml Parse workflow_status section - Check status of "create-design" workflow + Check status of "create-ux-design" workflow Get project_level from YAML metadata Find first non-completed workflow (next expected workflow) - - ⚠️ UX Design already completed: {{create-design status}} + + ⚠️ UX Design already completed: {{create-ux-design status}} Re-running will overwrite the existing UX design. Continue? (y/n) Exiting. Use workflow-status to see your next step. @@ -39,7 +39,7 @@ - + ⚠️ Next expected workflow: {{next_workflow}}. UX Design is out of sequence. Continue with UX Design anyway? (y/n) @@ -1139,9 +1139,9 @@ Based on your deployment intent: {{recommendation}} Load the FULL file: {output_folder}/bmm-workflow-status.yaml - Find workflow_status key "create-design" + Find workflow_status key "create-ux-design" ONLY write the file path as the status value - no other text, notes, or metadata - Update workflow_status["create-design"] = "{default_output_file}" + Update workflow_status["create-ux-design"] = "{default_output_file}" Save file, preserving ALL comments and structure including STATUS DEFINITIONS Find first non-completed workflow in workflow_status (next workflow to do) diff --git a/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md b/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md index 92e6934e..50041275 100644 --- a/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +++ b/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md @@ -652,7 +652,7 @@ Your PRD is complete!" Check workflow path to determine next expected workflows: - Look for "create-epics-and-stories" as optional after PRD -- Look for "create-design" as conditional (if_has_ui) +- Look for "create-ux-design" as conditional (if_has_ui) - Look for "create-epics-and-stories-after-ux" as optional - Identify the required next phase workflow @@ -675,7 +675,7 @@ Based on your {{project_track}} workflow path, you can: **Option B: UX Design First** (Recommended if UI) - `workflow create-design` + `workflow create-ux-design` - Design user experience and interactions - Epic breakdown can incorporate UX details later @@ -691,7 +691,7 @@ Based on your {{project_track}} workflow path, you can: **Typical next workflows:** -1. `workflow create-design` - UX Design (if UI exists) +1. `workflow create-ux-design` - UX Design (if UI exists) 2. `workflow create-architecture` - Technical architecture 3. `workflow create-epics-and-stories` - Epic breakdown diff --git a/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml index 525c79a7..e95c69d8 100644 --- a/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +++ b/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml @@ -60,10 +60,10 @@ phases: agent: "pm" command: "validate-prd" - - id: "create-design" + - id: "create-ux-design" recommended: true agent: "ux-designer" - command: "create-design" + command: "create-ux-design" note: "Recommended - must integrate with existing UX patterns" - phase: 2 diff --git a/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml index 82b1e721..cc475f4b 100644 --- a/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +++ b/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml @@ -48,10 +48,10 @@ phases: agent: "pm" command: "validate-prd" - - id: "create-design" + - id: "create-ux-design" recommended: true agent: "ux-designer" - command: "create-design" + command: "create-ux-design" note: "Highly recommended for enterprise - design system and patterns" - phase: 2 diff --git a/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml index f207f52f..c8d25ba0 100644 --- a/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +++ b/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml @@ -59,10 +59,10 @@ phases: agent: "pm" command: "validate-prd" - - id: "create-design" + - id: "create-ux-design" conditional: "if_has_ui" agent: "ux-designer" - command: "create-design" + command: "create-ux-design" - phase: 2 name: "Solutioning" diff --git a/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml b/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml index 1d1ced9b..bbad70d9 100644 --- a/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +++ b/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml @@ -48,10 +48,10 @@ phases: command: "validate-prd" note: "Quality check for PRD completeness" - - id: "create-design" + - id: "create-ux-design" conditional: "if_has_ui" agent: "ux-designer" - command: "create-design" + command: "create-ux-design" note: "Determined after PRD - user/agent decides if needed" - phase: 2 diff --git a/tools/cli/installers/lib/core/config-collector.js b/tools/cli/installers/lib/core/config-collector.js index cd3a8aef..17c233bb 100644 --- a/tools/cli/installers/lib/core/config-collector.js +++ b/tools/cli/installers/lib/core/config-collector.js @@ -359,6 +359,25 @@ class ConfigCollector { return result; } + /** + * Get the default username from the system + * @returns {string} Capitalized username\ + */ + getDefaultUsername() { + let result = 'BMad'; + try { + const os = require('node:os'); + const userInfo = os.userInfo(); + if (userInfo && userInfo.username) { + const username = userInfo.username; + result = username.charAt(0).toUpperCase() + username.slice(1); + } + } catch { + // Do nothing, just return 'BMad' + } + return result; + } + /** * Collect configuration for a single module * @param {string} moduleName - Module name @@ -604,6 +623,11 @@ class ConfigCollector { } } + // Special handling for user_name: default to system user + if (moduleName === 'core' && key === 'user_name' && !existingValue) { + item.default = this.getDefaultUsername(); + } + // Determine question type and default value let questionType = 'input'; let defaultValue = item.default; diff --git a/tools/cli/installers/lib/ide/antigravity.js b/tools/cli/installers/lib/ide/antigravity.js index 3bccd911..9f35d0f7 100644 --- a/tools/cli/installers/lib/ide/antigravity.js +++ b/tools/cli/installers/lib/ide/antigravity.js @@ -20,7 +20,7 @@ const { getAgentsFromBmad, getAgentsFromDir } = require('./shared/bmad-artifacts */ class AntigravitySetup extends BaseIdeSetup { constructor() { - super('antigravity', 'Google Antigravity', false); + super('antigravity', 'Google Antigravity', true); this.configDir = '.agent'; this.workflowsDir = 'workflows'; } diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js index 323fdaaf..8de8825e 100644 --- a/tools/cli/lib/ui.js +++ b/tools/cli/lib/ui.js @@ -201,15 +201,51 @@ class UI { CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure'); - const answers = await inquirer.prompt([ - { - type: 'checkbox', - name: 'ides', - message: 'Select tools to configure:', - choices: ideChoices, - pageSize: 15, - }, - ]); + let answers; + let userConfirmedNoTools = false; + + // Loop until user selects at least one tool OR explicitly confirms no tools + while (!userConfirmedNoTools) { + answers = await inquirer.prompt([ + { + type: 'checkbox', + name: 'ides', + message: 'Select tools to configure:', + choices: ideChoices, + pageSize: 15, + }, + ]); + + // If tools were selected, we're done + if (answers.ides && answers.ides.length > 0) { + break; + } + + // Warn that no tools were selected - users often miss the spacebar requirement + console.log(); + console.log(chalk.red.bold('⚠️ WARNING: No tools were selected!')); + console.log(chalk.red(' You must press SPACEBAR to select items, then ENTER to confirm.')); + console.log(chalk.red(' Simply highlighting an item does NOT select it.')); + console.log(); + + const { goBack } = await inquirer.prompt([ + { + type: 'confirm', + name: 'goBack', + message: chalk.yellow('Would you like to go back and select at least one tool?'), + default: true, + }, + ]); + + if (goBack) { + // Re-display the section header before looping back + console.log(); + CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure'); + } else { + // User explicitly chose to proceed without tools + userConfirmedNoTools = true; + } + } return { ides: answers.ides || [],