Merge branch 'main' into fix/installer-hidden-prompt-issue-907
This commit is contained in:
commit
14358fcdbd
|
|
@ -100,8 +100,53 @@ jobs:
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Create index.html for GitHub Pages
|
# Generate index.html dynamically based on actual bundles
|
||||||
cat > dist/bundles/index.html << 'EOF'
|
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<a href=\"./$module/agents/$agent_name.xml\">$display_name</a>"
|
||||||
|
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
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
|
@ -132,50 +177,63 @@ jobs:
|
||||||
|
|
||||||
<h2>Available Modules</h2>
|
<h2>Available Modules</h2>
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Add BMM section if agents exist
|
||||||
|
if [ -n "$BMM_LINKS" ]; then
|
||||||
|
cat >> dist/bundles/index.html << EOF
|
||||||
<div class="platform">
|
<div class="platform">
|
||||||
<h3>BMM (BMad Method)</h3>
|
<h3>BMM (BMad Method)</h3>
|
||||||
<div class="module">
|
<div class="module">
|
||||||
<a href="./bmm/agents/pm.xml">PM</a> |
|
$BMM_LINKS<br>
|
||||||
<a href="./bmm/agents/architect.xml">Architect</a> |
|
|
||||||
<a href="./bmm/agents/tea.xml">TEA</a> |
|
|
||||||
<a href="./bmm/agents/dev.xml">Developer</a> |
|
|
||||||
<a href="./bmm/agents/analyst.xml">Analyst</a> |
|
|
||||||
<a href="./bmm/agents/sm.xml">Scrum Master</a> |
|
|
||||||
<a href="./bmm/agents/ux-designer.xml">UX Designer</a> |
|
|
||||||
<a href="./bmm/agents/tech-writer.xml">Tech Writer</a><br>
|
|
||||||
📁 <a href="./bmm/agents/">Browse All</a> | 📦 <a href="./downloads/bmm-agents.zip">Download Zip</a>
|
📁 <a href="./bmm/agents/">Browse All</a> | 📦 <a href="./downloads/bmm-agents.zip">Download Zip</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="platform">
|
EOF
|
||||||
<h3>BMB (BMad Builder)</h3>
|
fi
|
||||||
<div class="module">
|
|
||||||
<a href="./bmb/agents/bmad-builder.xml">Builder Agent</a><br>
|
|
||||||
📁 <a href="./bmb/agents/">Browse All</a> | 📦 <a href="./downloads/bmb-agents.zip">Download Zip</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
# Add CIS section if agents exist
|
||||||
|
if [ -n "$CIS_LINKS" ]; then
|
||||||
|
cat >> dist/bundles/index.html << EOF
|
||||||
<div class="platform">
|
<div class="platform">
|
||||||
<h3>CIS (Creative Intelligence Suite)</h3>
|
<h3>CIS (Creative Intelligence Suite)</h3>
|
||||||
<div class="module">
|
<div class="module">
|
||||||
|
$CIS_LINKS<br>
|
||||||
📁 <a href="./cis/agents/">Browse Agents</a> | 📦 <a href="./downloads/cis-agents.zip">Download Zip</a>
|
📁 <a href="./cis/agents/">Browse Agents</a> | 📦 <a href="./downloads/cis-agents.zip">Download Zip</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add BMGD section if agents exist
|
||||||
|
if [ -n "$BMGD_LINKS" ]; then
|
||||||
|
cat >> dist/bundles/index.html << EOF
|
||||||
<div class="platform">
|
<div class="platform">
|
||||||
<h3>BMGD (Game Development)</h3>
|
<h3>BMGD (Game Development)</h3>
|
||||||
<div class="module">
|
<div class="module">
|
||||||
|
$BMGD_LINKS<br>
|
||||||
📁 <a href="./bmgd/agents/">Browse Agents</a> | 📦 <a href="./downloads/bmgd-agents.zip">Download Zip</a>
|
📁 <a href="./bmgd/agents/">Browse Agents</a> | 📦 <a href="./downloads/bmgd-agents.zip">Download Zip</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add bulk downloads section
|
||||||
|
cat >> dist/bundles/index.html << EOF
|
||||||
<h2>Bulk Downloads</h2>
|
<h2>Bulk Downloads</h2>
|
||||||
<p>Download all agents for a module as a zip archive:</p>
|
<p>Download all agents for a module as a zip archive:</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="./downloads/bmm-agents.zip">📦 BMM Agents (all 8)</a></li>
|
EOF
|
||||||
<li><a href="./downloads/bmb-agents.zip">📦 BMB Agents (all 1)</a></li>
|
|
||||||
<li><a href="./downloads/cis-agents.zip">📦 CIS Agents (all 5)</a></li>
|
[ "$BMM_COUNT" -gt 0 ] && echo " <li><a href=\"./downloads/bmm-agents.zip\">📦 BMM Agents (all $BMM_COUNT)</a></li>" >> dist/bundles/index.html
|
||||||
<li><a href="./downloads/bmgd-agents.zip">📦 BMGD Agents (all 4)</a></li>
|
[ "$CIS_COUNT" -gt 0 ] && echo " <li><a href=\"./downloads/cis-agents.zip\">📦 CIS Agents (all $CIS_COUNT)</a></li>" >> dist/bundles/index.html
|
||||||
|
[ "$BMGD_COUNT" -gt 0 ] && echo " <li><a href=\"./downloads/bmgd-agents.zip\">📦 BMGD Agents (all $BMGD_COUNT)</a></li>" >> dist/bundles/index.html
|
||||||
|
|
||||||
|
# Close HTML
|
||||||
|
cat >> dist/bundles/index.html << 'EOF'
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>Usage</h2>
|
<h2>Usage</h2>
|
||||||
|
|
@ -193,12 +251,6 @@ jobs:
|
||||||
</html>
|
</html>
|
||||||
EOF
|
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
|
- name: Checkout bmad-bundles repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
|
|
@ -67,3 +67,4 @@ z*/
|
||||||
|
|
||||||
.bmad
|
.bmad
|
||||||
.claude
|
.claude
|
||||||
|
.codex
|
||||||
|
|
|
||||||
|
|
@ -321,7 +321,7 @@ The BMad Method Module (BMM) provides a comprehensive team of specialized AI age
|
||||||
**Workflows:**
|
**Workflows:**
|
||||||
|
|
||||||
- `workflow-status` - Check what to do next
|
- `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
|
- Visual exploration and generation
|
||||||
- Collaborative decision-making
|
- Collaborative decision-making
|
||||||
- AI-assisted design tools (v0, Lovable)
|
- 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 |
|
| **Analyst** | 📊 | 1 (Analysis) | brainstorm, brief, research, document-project | Discovery, requirements, brownfield |
|
||||||
| **PM** | 📋 | 2 (Planning) | prd, tech-spec, epics-stories | Planning, requirements docs |
|
| **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 |
|
| **Architect** | 🏗️ | 3 (Solutioning) | architecture, implementation-readiness | Technical design, architecture |
|
||||||
| **SM** | 🏃 | 4 (Implementation) | sprint-planning, create-story, story-context | Story management, sprint coordination |
|
| **SM** | 🏃 | 4 (Implementation) | sprint-planning, create-story, story-context | Story management, sprint coordination |
|
||||||
| **DEV** | 💻 | 4 (Implementation) | develop-story, code-review, story-done | Implementation, coding |
|
| **DEV** | 💻 | 4 (Implementation) | develop-story, code-review, story-done | Implementation, coding |
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ Continuous deployment to production
|
||||||
**UX Designer Workflow:**
|
**UX Designer Workflow:**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bmad ux *create-design
|
bmad ux *create-ux-design
|
||||||
```
|
```
|
||||||
|
|
||||||
**BMad produces:**
|
**BMad produces:**
|
||||||
|
|
|
||||||
|
|
@ -295,7 +295,7 @@ These cheat sheets map TEA workflows to the **BMad Method and Enterprise tracks*
|
||||||
| Workflow Stage | Test Architect | Dev / Team | Outputs |
|
| Workflow Stage | Test Architect | Dev / Team | Outputs |
|
||||||
| -------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
|
| -------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
|
||||||
| **Phase 1**: Discovery | - | Analyst ➕ `*research`, `*product-brief` | Domain research, compliance analysis, product brief |
|
| **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 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**: 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 |
|
| **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 |
|
||||||
|
|
|
||||||
|
|
@ -26,12 +26,12 @@
|
||||||
<check if="status file found">
|
<check if="status file found">
|
||||||
<action>Load the FULL file: {output_folder}/bmm-workflow-status.yaml</action>
|
<action>Load the FULL file: {output_folder}/bmm-workflow-status.yaml</action>
|
||||||
<action>Parse workflow_status section</action>
|
<action>Parse workflow_status section</action>
|
||||||
<action>Check status of "create-design" workflow</action>
|
<action>Check status of "create-ux-design" workflow</action>
|
||||||
<action>Get project_level from YAML metadata</action>
|
<action>Get project_level from YAML metadata</action>
|
||||||
<action>Find first non-completed workflow (next expected workflow)</action>
|
<action>Find first non-completed workflow (next expected workflow)</action>
|
||||||
|
|
||||||
<check if="create-design status is file path (already completed)">
|
<check if="create-ux-design status is file path (already completed)">
|
||||||
<output>⚠️ UX Design already completed: {{create-design status}}</output>
|
<output>⚠️ UX Design already completed: {{create-ux-design status}}</output>
|
||||||
<ask>Re-running will overwrite the existing UX design. Continue? (y/n)</ask>
|
<ask>Re-running will overwrite the existing UX design. Continue? (y/n)</ask>
|
||||||
<check if="n">
|
<check if="n">
|
||||||
<output>Exiting. Use workflow-status to see your next step.</output>
|
<output>Exiting. Use workflow-status to see your next step.</output>
|
||||||
|
|
@ -39,7 +39,7 @@
|
||||||
</check>
|
</check>
|
||||||
</check>
|
</check>
|
||||||
|
|
||||||
<check if="create-design is not the next expected workflow">
|
<check if="create-ux-design is not the next expected workflow">
|
||||||
<output>⚠️ Next expected workflow: {{next_workflow}}. UX Design is out of sequence.</output>
|
<output>⚠️ Next expected workflow: {{next_workflow}}. UX Design is out of sequence.</output>
|
||||||
<ask>Continue with UX Design anyway? (y/n)</ask>
|
<ask>Continue with UX Design anyway? (y/n)</ask>
|
||||||
<check if="n">
|
<check if="n">
|
||||||
|
|
@ -1139,9 +1139,9 @@ Based on your deployment intent: {{recommendation}}
|
||||||
|
|
||||||
<check if="standalone_mode != true">
|
<check if="standalone_mode != true">
|
||||||
<action>Load the FULL file: {output_folder}/bmm-workflow-status.yaml</action>
|
<action>Load the FULL file: {output_folder}/bmm-workflow-status.yaml</action>
|
||||||
<action>Find workflow_status key "create-design"</action>
|
<action>Find workflow_status key "create-ux-design"</action>
|
||||||
<critical>ONLY write the file path as the status value - no other text, notes, or metadata</critical>
|
<critical>ONLY write the file path as the status value - no other text, notes, or metadata</critical>
|
||||||
<action>Update workflow_status["create-design"] = "{default_output_file}"</action>
|
<action>Update workflow_status["create-ux-design"] = "{default_output_file}"</action>
|
||||||
<action>Save file, preserving ALL comments and structure including STATUS DEFINITIONS</action>
|
<action>Save file, preserving ALL comments and structure including STATUS DEFINITIONS</action>
|
||||||
|
|
||||||
<action>Find first non-completed workflow in workflow_status (next workflow to do)</action>
|
<action>Find first non-completed workflow in workflow_status (next workflow to do)</action>
|
||||||
|
|
|
||||||
|
|
@ -652,7 +652,7 @@ Your PRD is complete!"
|
||||||
<action>Check workflow path to determine next expected workflows:
|
<action>Check workflow path to determine next expected workflows:
|
||||||
|
|
||||||
- Look for "create-epics-and-stories" as optional after PRD
|
- 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
|
- Look for "create-epics-and-stories-after-ux" as optional
|
||||||
- Identify the required next phase workflow
|
- Identify the required next phase workflow
|
||||||
</action>
|
</action>
|
||||||
|
|
@ -675,7 +675,7 @@ Based on your {{project_track}} workflow path, you can:
|
||||||
|
|
||||||
<check if="UI_exists">
|
<check if="UI_exists">
|
||||||
**Option B: UX Design First** (Recommended if UI)
|
**Option B: UX Design First** (Recommended if UI)
|
||||||
`workflow create-design`
|
`workflow create-ux-design`
|
||||||
- Design user experience and interactions
|
- Design user experience and interactions
|
||||||
- Epic breakdown can incorporate UX details later
|
- Epic breakdown can incorporate UX details later
|
||||||
</check>
|
</check>
|
||||||
|
|
@ -691,7 +691,7 @@ Based on your {{project_track}} workflow path, you can:
|
||||||
|
|
||||||
<check if="standalone_mode == true">
|
<check if="standalone_mode == true">
|
||||||
**Typical next workflows:**
|
**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
|
2. `workflow create-architecture` - Technical architecture
|
||||||
3. `workflow create-epics-and-stories` - Epic breakdown
|
3. `workflow create-epics-and-stories` - Epic breakdown
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,10 +60,10 @@ phases:
|
||||||
agent: "pm"
|
agent: "pm"
|
||||||
command: "validate-prd"
|
command: "validate-prd"
|
||||||
|
|
||||||
- id: "create-design"
|
- id: "create-ux-design"
|
||||||
recommended: true
|
recommended: true
|
||||||
agent: "ux-designer"
|
agent: "ux-designer"
|
||||||
command: "create-design"
|
command: "create-ux-design"
|
||||||
note: "Recommended - must integrate with existing UX patterns"
|
note: "Recommended - must integrate with existing UX patterns"
|
||||||
|
|
||||||
- phase: 2
|
- phase: 2
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ phases:
|
||||||
agent: "pm"
|
agent: "pm"
|
||||||
command: "validate-prd"
|
command: "validate-prd"
|
||||||
|
|
||||||
- id: "create-design"
|
- id: "create-ux-design"
|
||||||
recommended: true
|
recommended: true
|
||||||
agent: "ux-designer"
|
agent: "ux-designer"
|
||||||
command: "create-design"
|
command: "create-ux-design"
|
||||||
note: "Highly recommended for enterprise - design system and patterns"
|
note: "Highly recommended for enterprise - design system and patterns"
|
||||||
|
|
||||||
- phase: 2
|
- phase: 2
|
||||||
|
|
|
||||||
|
|
@ -59,10 +59,10 @@ phases:
|
||||||
agent: "pm"
|
agent: "pm"
|
||||||
command: "validate-prd"
|
command: "validate-prd"
|
||||||
|
|
||||||
- id: "create-design"
|
- id: "create-ux-design"
|
||||||
conditional: "if_has_ui"
|
conditional: "if_has_ui"
|
||||||
agent: "ux-designer"
|
agent: "ux-designer"
|
||||||
command: "create-design"
|
command: "create-ux-design"
|
||||||
|
|
||||||
- phase: 2
|
- phase: 2
|
||||||
name: "Solutioning"
|
name: "Solutioning"
|
||||||
|
|
|
||||||
|
|
@ -48,10 +48,10 @@ phases:
|
||||||
command: "validate-prd"
|
command: "validate-prd"
|
||||||
note: "Quality check for PRD completeness"
|
note: "Quality check for PRD completeness"
|
||||||
|
|
||||||
- id: "create-design"
|
- id: "create-ux-design"
|
||||||
conditional: "if_has_ui"
|
conditional: "if_has_ui"
|
||||||
agent: "ux-designer"
|
agent: "ux-designer"
|
||||||
command: "create-design"
|
command: "create-ux-design"
|
||||||
note: "Determined after PRD - user/agent decides if needed"
|
note: "Determined after PRD - user/agent decides if needed"
|
||||||
|
|
||||||
- phase: 2
|
- phase: 2
|
||||||
|
|
|
||||||
|
|
@ -359,6 +359,25 @@ class ConfigCollector {
|
||||||
return result;
|
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
|
* Collect configuration for a single module
|
||||||
* @param {string} moduleName - Module name
|
* @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
|
// Determine question type and default value
|
||||||
let questionType = 'input';
|
let questionType = 'input';
|
||||||
let defaultValue = item.default;
|
let defaultValue = item.default;
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ const { getAgentsFromBmad, getAgentsFromDir } = require('./shared/bmad-artifacts
|
||||||
*/
|
*/
|
||||||
class AntigravitySetup extends BaseIdeSetup {
|
class AntigravitySetup extends BaseIdeSetup {
|
||||||
constructor() {
|
constructor() {
|
||||||
super('antigravity', 'Google Antigravity', false);
|
super('antigravity', 'Google Antigravity', true);
|
||||||
this.configDir = '.agent';
|
this.configDir = '.agent';
|
||||||
this.workflowsDir = 'workflows';
|
this.workflowsDir = 'workflows';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -201,7 +201,12 @@ class UI {
|
||||||
|
|
||||||
CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
|
CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
|
||||||
|
|
||||||
const answers = await inquirer.prompt([
|
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',
|
type: 'checkbox',
|
||||||
name: 'ides',
|
name: 'ides',
|
||||||
|
|
@ -211,6 +216,37 @@ class UI {
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// 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 {
|
return {
|
||||||
ides: answers.ides || [],
|
ides: answers.ides || [],
|
||||||
skipIde: !answers.ides || answers.ides.length === 0,
|
skipIde: !answers.ides || answers.ides.length === 0,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue