bmad-method 6.5.1-next.0 → 6.5.1-next.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/package.json +1 -1
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-07-validation.md +23 -21
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +34 -4
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +6 -0
- package/src/bmm-skills/module-help.csv +21 -21
- package/src/bmm-skills/module.yaml +1 -5
- package/src/core-skills/module-help.csv +11 -11
- package/src/core-skills/module.yaml +5 -0
- package/tools/installer/commands/install.js +9 -2
- package/tools/installer/core/installer.js +30 -99
- package/tools/installer/core/manifest-generator.js +9 -2
- package/tools/installer/ide/platform-codes.js +43 -0
- package/tools/installer/modules/community-manager.js +220 -0
- package/tools/installer/modules/custom-module-manager.js +8 -7
- package/tools/installer/modules/official-modules.js +88 -12
- package/tools/installer/project-root.js +106 -13
- package/tools/installer/ui.js +93 -33
package/package.json
CHANGED
|
@@ -227,37 +227,39 @@ Prepare the content to append to the document:
|
|
|
227
227
|
|
|
228
228
|
### Architecture Completeness Checklist
|
|
229
229
|
|
|
230
|
-
|
|
230
|
+
Mark each item `[x]` only if validation confirms it; leave `[ ]` if it is missing, partial, or unverified. Any unchecked item must be reflected in the Gap Analysis above and in the Overall Status below.
|
|
231
231
|
|
|
232
|
-
|
|
233
|
-
- [x] Scale and complexity assessed
|
|
234
|
-
- [x] Technical constraints identified
|
|
235
|
-
- [x] Cross-cutting concerns mapped
|
|
232
|
+
**Requirements Analysis**
|
|
236
233
|
|
|
237
|
-
|
|
234
|
+
- [ ] Project context thoroughly analyzed
|
|
235
|
+
- [ ] Scale and complexity assessed
|
|
236
|
+
- [ ] Technical constraints identified
|
|
237
|
+
- [ ] Cross-cutting concerns mapped
|
|
238
238
|
|
|
239
|
-
|
|
240
|
-
- [x] Technology stack fully specified
|
|
241
|
-
- [x] Integration patterns defined
|
|
242
|
-
- [x] Performance considerations addressed
|
|
239
|
+
**Architectural Decisions**
|
|
243
240
|
|
|
244
|
-
|
|
241
|
+
- [ ] Critical decisions documented with versions
|
|
242
|
+
- [ ] Technology stack fully specified
|
|
243
|
+
- [ ] Integration patterns defined
|
|
244
|
+
- [ ] Performance considerations addressed
|
|
245
245
|
|
|
246
|
-
|
|
247
|
-
- [x] Structure patterns defined
|
|
248
|
-
- [x] Communication patterns specified
|
|
249
|
-
- [x] Process patterns documented
|
|
246
|
+
**Implementation Patterns**
|
|
250
247
|
|
|
251
|
-
|
|
248
|
+
- [ ] Naming conventions established
|
|
249
|
+
- [ ] Structure patterns defined
|
|
250
|
+
- [ ] Communication patterns specified
|
|
251
|
+
- [ ] Process patterns documented
|
|
252
252
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
- [
|
|
256
|
-
- [
|
|
253
|
+
**Project Structure**
|
|
254
|
+
|
|
255
|
+
- [ ] Complete directory structure defined
|
|
256
|
+
- [ ] Component boundaries established
|
|
257
|
+
- [ ] Integration points mapped
|
|
258
|
+
- [ ] Requirements to structure mapping complete
|
|
257
259
|
|
|
258
260
|
### Architecture Readiness Assessment
|
|
259
261
|
|
|
260
|
-
**Overall Status:** READY FOR IMPLEMENTATION
|
|
262
|
+
**Overall Status:** {{READY FOR IMPLEMENTATION | READY WITH MINOR GAPS | NOT READY}} (choose READY FOR IMPLEMENTATION only when all 16 checklist items are `[x]` and no Critical Gaps remain; choose NOT READY when any Critical Gap is open or any Requirements Analysis or Architectural Decisions item is unchecked; otherwise READY WITH MINOR GAPS)
|
|
261
263
|
|
|
262
264
|
**Confidence Level:** {{high/medium/low}} based on validation results
|
|
263
265
|
|
package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md
CHANGED
|
@@ -55,7 +55,8 @@ Load {planning_artifacts}/epics.md and review:
|
|
|
55
55
|
2. **Requirements Grouping**: Group related FRs that deliver cohesive user outcomes
|
|
56
56
|
3. **Incremental Delivery**: Each epic should deliver value independently
|
|
57
57
|
4. **Logical Flow**: Natural progression from user's perspective
|
|
58
|
-
5.
|
|
58
|
+
5. **Dependency-Free Within Epic**: Stories within an epic must NOT depend on future stories
|
|
59
|
+
6. **Implementation Efficiency**: Consider consolidating epics that all modify the same core files into fewer epics
|
|
59
60
|
|
|
60
61
|
**⚠️ CRITICAL PRINCIPLE:**
|
|
61
62
|
Organize by USER VALUE, not technical layers:
|
|
@@ -74,6 +75,18 @@ Organize by USER VALUE, not technical layers:
|
|
|
74
75
|
- Epic 3: Frontend Components (creates reusable components) - **No user value**
|
|
75
76
|
- Epic 4: Deployment Pipeline (CI/CD setup) - **No user value**
|
|
76
77
|
|
|
78
|
+
**❌ WRONG Epic Examples (File Churn on Same Component):**
|
|
79
|
+
|
|
80
|
+
- Epic 1: File Upload (modifies model, controller, web form, web API)
|
|
81
|
+
- Epic 2: File Status (modifies model, controller, web form, web API)
|
|
82
|
+
- Epic 3: File Access permissions (modifies model, controller, web form, web API)
|
|
83
|
+
- All three epics touch the same files — consolidate into one epic with ordered stories
|
|
84
|
+
|
|
85
|
+
**✅ CORRECT Alternative:**
|
|
86
|
+
|
|
87
|
+
- Epic 1: File Management Enhancement (upload, status, permissions as stories within one epic)
|
|
88
|
+
- Rationale: Single component, fully pre-designed, no feedback loop between epics
|
|
89
|
+
|
|
77
90
|
**🔗 DEPENDENCY RULES:**
|
|
78
91
|
|
|
79
92
|
- Each epic must deliver COMPLETE functionality for its domain
|
|
@@ -82,21 +95,38 @@ Organize by USER VALUE, not technical layers:
|
|
|
82
95
|
|
|
83
96
|
### 3. Design Epic Structure Collaboratively
|
|
84
97
|
|
|
85
|
-
**Step A:
|
|
98
|
+
**Step A: Assess Context and Identify Themes**
|
|
99
|
+
|
|
100
|
+
First, assess how much of the solution design is already validated (Architecture, UX, Test Design).
|
|
101
|
+
When the outcome is certain and direction changes between epics are unlikely, prefer fewer but larger epics.
|
|
102
|
+
Split into multiple epics when there is a genuine risk boundary or when early feedback could change direction
|
|
103
|
+
of following epics.
|
|
104
|
+
|
|
105
|
+
Then, identify user value themes:
|
|
86
106
|
|
|
87
107
|
- Look for natural groupings in the FRs
|
|
88
108
|
- Identify user journeys or workflows
|
|
89
109
|
- Consider user types and their goals
|
|
90
110
|
|
|
91
111
|
**Step B: Propose Epic Structure**
|
|
92
|
-
|
|
112
|
+
|
|
113
|
+
For each proposed epic (considering whether epics share the same core files):
|
|
93
114
|
|
|
94
115
|
1. **Epic Title**: User-centric, value-focused
|
|
95
116
|
2. **User Outcome**: What users can accomplish after this epic
|
|
96
117
|
3. **FR Coverage**: Which FR numbers this epic addresses
|
|
97
118
|
4. **Implementation Notes**: Any technical or UX considerations
|
|
98
119
|
|
|
99
|
-
**Step C:
|
|
120
|
+
**Step C: Review for File Overlap**
|
|
121
|
+
|
|
122
|
+
Assess whether multiple proposed epics repeatedly target the same core files. If overlap is significant:
|
|
123
|
+
|
|
124
|
+
- Distinguish meaningful overlap (same component end-to-end) from incidental sharing
|
|
125
|
+
- Ask whether to consolidate into one epic with ordered stories
|
|
126
|
+
- If confirmed, merge the epic FRs into a single epic, preserving dependency flow: each story must still fit within
|
|
127
|
+
a single dev agent's context
|
|
128
|
+
|
|
129
|
+
**Step D: Create the epics_list**
|
|
100
130
|
|
|
101
131
|
Format the epics_list as:
|
|
102
132
|
|
package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md
CHANGED
|
@@ -90,6 +90,12 @@ Review the complete epic and story breakdown to ensure EVERY FR is covered:
|
|
|
90
90
|
- Dependencies flow naturally
|
|
91
91
|
- Foundation stories only setup what's needed
|
|
92
92
|
- No big upfront technical work
|
|
93
|
+
- **File Churn Check:** Do multiple epics repeatedly modify the same core files?
|
|
94
|
+
- Assess whether the overlap pattern suggests unnecessary churn or is incidental
|
|
95
|
+
- If overlap is significant: Validate that splitting provides genuine value (risk mitigation, feedback loops, context size limits)
|
|
96
|
+
- If no justification for the split: Recommend consolidation into fewer epics
|
|
97
|
+
- ❌ WRONG: Multiple epics each modify the same core files with no feedback loop between them
|
|
98
|
+
- ✅ RIGHT: Epics target distinct files/components, OR consolidation was explicitly considered and rejected with rationale
|
|
93
99
|
|
|
94
100
|
### 5. Dependency Validation (CRITICAL)
|
|
95
101
|
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
|
|
2
2
|
BMad Method,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
|
|
3
|
-
BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation
|
|
4
|
-
BMad Method,bmad-generate-project-context,Generate Project Context,GPC,Scan existing codebase to generate a lean LLM-optimized project-context.md. Essential for brownfield projects
|
|
5
|
-
BMad Method,bmad-quick-dev,Quick Dev,QQ,Unified intent-in code-out workflow: clarify plan implement review and present
|
|
6
|
-
BMad Method,bmad-correct-course,Correct Course,CC,Navigate significant changes. May recommend start over update PRD redo architecture sprint planning or correct epics and stories
|
|
3
|
+
BMad Method,bmad-document-project,Document Project,DP,Analyze an existing project to produce useful documentation.,,,anytime,,,false,project-knowledge,*
|
|
4
|
+
BMad Method,bmad-generate-project-context,Generate Project Context,GPC,Scan existing codebase to generate a lean LLM-optimized project-context.md. Essential for brownfield projects.,,,anytime,,,false,output_folder,project context
|
|
5
|
+
BMad Method,bmad-quick-dev,Quick Dev,QQ,Unified intent-in code-out workflow: clarify plan implement review and present.,,,anytime,,,false,implementation_artifacts,spec and project implementation
|
|
6
|
+
BMad Method,bmad-correct-course,Correct Course,CC,Navigate significant changes. May recommend start over update PRD redo architecture sprint planning or correct epics and stories.,,,anytime,,,false,planning_artifacts,change proposal
|
|
7
7
|
BMad Method,bmad-agent-tech-writer,Write Document,WD,"Describe in detail what you want, and the agent will follow documentation best practices. Multi-turn conversation with subprocess for research/review.",write,,anytime,,,false,project-knowledge,document
|
|
8
8
|
BMad Method,bmad-agent-tech-writer,Update Standards,US,Update agent memory documentation-standards.md with your specific preferences if you discover missing document conventions.,update-standards,,anytime,,,false,_bmad/_memory/tech-writer-sidecar,standards
|
|
9
9
|
BMad Method,bmad-agent-tech-writer,Mermaid Generate,MG,Create a Mermaid diagram based on user description. Will suggest diagram types if not specified.,mermaid,,anytime,,,false,planning_artifacts,mermaid diagram
|
|
10
10
|
BMad Method,bmad-agent-tech-writer,Validate Document,VD,Review the specified document against documentation standards and best practices. Returns specific actionable improvement suggestions organized by priority.,validate,[path],anytime,,,false,planning_artifacts,validation report
|
|
11
11
|
BMad Method,bmad-agent-tech-writer,Explain Concept,EC,Create clear technical explanations with examples and diagrams for complex concepts.,explain,[topic],anytime,,,false,project_knowledge,explanation
|
|
12
|
-
BMad Method,bmad-brainstorming,Brainstorm Project,BP,Expert guided facilitation through a single or multiple techniques
|
|
13
|
-
BMad Method,bmad-market-research,Market Research,MR,
|
|
14
|
-
BMad Method,bmad-domain-research,Domain Research,DR,Industry domain deep dive subject matter expertise and terminology
|
|
15
|
-
BMad Method,bmad-technical-research,Technical Research,TR,Technical feasibility architecture options and implementation approaches
|
|
12
|
+
BMad Method,bmad-brainstorming,Brainstorm Project,BP,Expert guided facilitation through a single or multiple techniques.,,,1-analysis,,,false,planning_artifacts,brainstorming session
|
|
13
|
+
BMad Method,bmad-market-research,Market Research,MR,Market analysis competitive landscape customer needs and trends.,,,1-analysis,,,false,planning_artifacts|project-knowledge,research documents
|
|
14
|
+
BMad Method,bmad-domain-research,Domain Research,DR,Industry domain deep dive subject matter expertise and terminology.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents
|
|
15
|
+
BMad Method,bmad-technical-research,Technical Research,TR,Technical feasibility architecture options and implementation approaches.,,,1-analysis,,,false,planning_artifacts|project_knowledge,research documents
|
|
16
16
|
BMad Method,bmad-product-brief,Create Brief,CB,An expert guided experience to nail down your product idea in a brief. a gentler approach than PRFAQ when you are already sure of your concept and nothing will sway you.,,-A,1-analysis,,,false,planning_artifacts,product brief
|
|
17
17
|
BMad Method,bmad-prfaq,PRFAQ Challenge,WB,Working Backwards guided experience to forge and stress-test your product concept to ensure you have a great product that users will love and need through the PRFAQ gauntlet to determine feasibility and alignment with user needs. alternative to product brief.,,-H,1-analysis,,,false,planning_artifacts,prfaq document
|
|
18
|
-
BMad Method,bmad-create-prd,Create PRD,CP,Expert led facilitation to produce your Product Requirements Document
|
|
18
|
+
BMad Method,bmad-create-prd,Create PRD,CP,Expert led facilitation to produce your Product Requirements Document.,,,2-planning,,,true,planning_artifacts,prd
|
|
19
19
|
BMad Method,bmad-validate-prd,Validate PRD,VP,,,[path],2-planning,bmad-create-prd,,false,planning_artifacts,prd validation report
|
|
20
20
|
BMad Method,bmad-edit-prd,Edit PRD,EP,,,[path],2-planning,bmad-validate-prd,,false,planning_artifacts,updated prd
|
|
21
|
-
BMad Method,bmad-create-ux-design,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project."
|
|
22
|
-
BMad Method,bmad-create-architecture,Create Architecture,CA,Guided workflow to document technical decisions
|
|
23
|
-
BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE
|
|
24
|
-
BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned
|
|
25
|
-
BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story
|
|
26
|
-
BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow
|
|
27
|
-
BMad Method,bmad-create-story,Create Story,CS,
|
|
21
|
+
BMad Method,bmad-create-ux-design,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,,2-planning,bmad-create-prd,,false,planning_artifacts,ux design
|
|
22
|
+
BMad Method,bmad-create-architecture,Create Architecture,CA,Guided workflow to document technical decisions.,,,3-solutioning,,,true,planning_artifacts,architecture
|
|
23
|
+
BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,3-solutioning,bmad-create-architecture,,true,planning_artifacts,epics and stories
|
|
24
|
+
BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned.,,,3-solutioning,bmad-create-epics-and-stories,,true,planning_artifacts,readiness report
|
|
25
|
+
BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story.,,,4-implementation,,,true,implementation_artifacts,sprint status
|
|
26
|
+
BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,,4-implementation,bmad-sprint-planning,,false,,
|
|
27
|
+
BMad Method,bmad-create-story,Create Story,CS,Story cycle start: Prepare first found story in the sprint plan that is next or a specific epic/story designation.,create,,4-implementation,bmad-sprint-planning,bmad-create-story:validate,true,implementation_artifacts,story
|
|
28
28
|
BMad Method,bmad-create-story,Validate Story,VS,Validates story readiness and completeness before development work begins.,validate,,4-implementation,bmad-create-story:create,bmad-dev-story,false,implementation_artifacts,story validation report
|
|
29
|
-
BMad Method,bmad-dev-story,Dev Story,DS,Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed
|
|
30
|
-
BMad Method,bmad-code-review,Code Review,CR,Story cycle: If issues back to DS if approved then next CS or ER if epic complete
|
|
31
|
-
BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs
|
|
32
|
-
BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that
|
|
33
|
-
BMad Method,bmad-retrospective,Retrospective,ER,Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC
|
|
29
|
+
BMad Method,bmad-dev-story,Dev Story,DS,Story cycle: Execute story implementation tasks and tests then CR then back to DS if fixes needed.,,,4-implementation,bmad-create-story:validate,,true,,
|
|
30
|
+
BMad Method,bmad-code-review,Code Review,CR,Story cycle: If issues back to DS if approved then next CS or ER if epic complete.,,,4-implementation,bmad-dev-story,,false,,
|
|
31
|
+
BMad Method,bmad-checkpoint-preview,Checkpoint,CK,Guided walkthrough of a change from purpose and context into details. Use for human review of commits branches or PRs.,,,4-implementation,,,false,,
|
|
32
|
+
BMad Method,bmad-qa-generate-e2e-tests,QA Automation Test,QA,Generate automated API and E2E tests for implemented code. NOT for code review or story validation — use CR for that.,,,4-implementation,bmad-dev-story,,false,implementation_artifacts,test suite
|
|
33
|
+
BMad Method,bmad-retrospective,Retrospective,ER,Optional at epic end: Review completed work lessons learned and next epic or if major issues consider CC.,,,4-implementation,bmad-code-review,,false,implementation_artifacts,retrospective
|
|
@@ -5,15 +5,11 @@ default_selected: true # This module will be selected by default for new install
|
|
|
5
5
|
|
|
6
6
|
# Variables from Core Config inserted:
|
|
7
7
|
## user_name
|
|
8
|
+
## project_name
|
|
8
9
|
## communication_language
|
|
9
10
|
## document_output_language
|
|
10
11
|
## output_folder
|
|
11
12
|
|
|
12
|
-
project_name:
|
|
13
|
-
prompt: "What is your project called?"
|
|
14
|
-
default: "{directory_name}"
|
|
15
|
-
result: "{value}"
|
|
16
|
-
|
|
17
13
|
user_skill_level:
|
|
18
14
|
prompt:
|
|
19
15
|
- "What is your development experience level?"
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs
|
|
2
2
|
Core,_meta,,,,,,,,,false,https://docs.bmad-method.org/llms.txt,
|
|
3
|
-
Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas
|
|
4
|
-
Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate
|
|
5
|
-
Core,bmad-help,BMad Help,BH
|
|
6
|
-
Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything
|
|
7
|
-
Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively
|
|
8
|
-
Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content
|
|
9
|
-
Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement
|
|
10
|
-
Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews."
|
|
11
|
-
Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven
|
|
12
|
-
Core,bmad-distillator,Distillator,DG,Use when you need token-efficient distillates that preserve all information for downstream LLM consumption
|
|
13
|
-
Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required."
|
|
3
|
+
Core,bmad-brainstorming,Brainstorming,BSP,Use early in ideation or when stuck generating ideas.,,,anytime,,,false,{output_folder}/brainstorming,brainstorming session
|
|
4
|
+
Core,bmad-party-mode,Party Mode,PM,Orchestrate multi-agent discussions when you need multiple perspectives or want agents to collaborate.,,,anytime,,,false,,
|
|
5
|
+
Core,bmad-help,BMad Help,BH,,,,anytime,,,false,,
|
|
6
|
+
Core,bmad-index-docs,Index Docs,ID,Use when LLM needs to understand available docs without loading everything.,,,anytime,,,false,,
|
|
7
|
+
Core,bmad-shard-doc,Shard Document,SD,Use when doc becomes too large (>500 lines) to manage effectively.,,[path],anytime,,,false,,
|
|
8
|
+
Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting to polish written content.,,[path],anytime,,,false,report located with target document,three-column markdown table with suggested fixes
|
|
9
|
+
Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,,[path],anytime,,,false,report located with target document,
|
|
10
|
+
Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",,[path],anytime,,,false,,
|
|
11
|
+
Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,,[path],anytime,,,false,,
|
|
12
|
+
Core,bmad-distillator,Distillator,DG,Use when you need token-efficient distillates that preserve all information for downstream LLM consumption.,,[path],anytime,,,false,adjacent to source document or specified output_path,distillate markdown file(s)
|
|
13
|
+
Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,,anytime,,,false,{project-root}/_bmad/custom,TOML override files
|
|
@@ -11,6 +11,11 @@ user_name:
|
|
|
11
11
|
default: "BMad"
|
|
12
12
|
result: "{value}"
|
|
13
13
|
|
|
14
|
+
project_name:
|
|
15
|
+
prompt: "What is your project called?"
|
|
16
|
+
default: "{directory_name}"
|
|
17
|
+
result: "{value}"
|
|
18
|
+
|
|
14
19
|
communication_language:
|
|
15
20
|
prompt: "What language should agents use when chatting with you?"
|
|
16
21
|
scope: user
|
|
@@ -15,8 +15,9 @@ module.exports = {
|
|
|
15
15
|
['--modules <modules>', 'Comma-separated list of module IDs to install (e.g., "bmm,bmb")'],
|
|
16
16
|
[
|
|
17
17
|
'--tools <tools>',
|
|
18
|
-
'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor").
|
|
18
|
+
'Comma-separated list of tool/IDE IDs to configure (e.g., "claude-code,cursor"). Required for fresh non-interactive (--yes) installs. Run with --list-tools to see all valid IDs.',
|
|
19
19
|
],
|
|
20
|
+
['--list-tools', 'Print all supported tool/IDE IDs (with target directories) and exit.'],
|
|
20
21
|
['--action <type>', 'Action type for existing installations: install, update, or quick-update'],
|
|
21
22
|
['--user-name <name>', 'Name for agents to use (default: system username)'],
|
|
22
23
|
['--communication-language <lang>', 'Language for agent communication (default: English)'],
|
|
@@ -40,6 +41,12 @@ module.exports = {
|
|
|
40
41
|
],
|
|
41
42
|
action: async (options) => {
|
|
42
43
|
try {
|
|
44
|
+
if (options.listTools) {
|
|
45
|
+
const { formatPlatformList } = require('../ide/platform-codes');
|
|
46
|
+
process.stdout.write((await formatPlatformList()) + '\n');
|
|
47
|
+
process.exit(0);
|
|
48
|
+
}
|
|
49
|
+
|
|
43
50
|
// Set debug flag as environment variable for all components
|
|
44
51
|
if (options.debug) {
|
|
45
52
|
process.env.BMAD_DEBUG_MANIFEST = 'true';
|
|
@@ -81,7 +88,7 @@ module.exports = {
|
|
|
81
88
|
} else {
|
|
82
89
|
await prompts.log.error(`Installation failed: ${error.message}`);
|
|
83
90
|
}
|
|
84
|
-
if (error.stack) {
|
|
91
|
+
if (error.stack && !error.expected) {
|
|
85
92
|
await prompts.log.message(error.stack);
|
|
86
93
|
}
|
|
87
94
|
} catch {
|
|
@@ -923,29 +923,15 @@ class Installer {
|
|
|
923
923
|
/**
|
|
924
924
|
* Merge all module-help.csv files into a single bmad-help.csv.
|
|
925
925
|
* Scans all installed modules for module-help.csv and merges them.
|
|
926
|
-
*
|
|
927
|
-
* Output is written to _bmad/_config/bmad-help.csv.
|
|
926
|
+
* Output preserves the source schema verbatim — see schema below.
|
|
928
927
|
* @param {string} bmadDir - BMAD installation directory
|
|
929
|
-
* @param {Array<Object>}
|
|
928
|
+
* @param {Array<Object>} _agentEntries - Unused; retained for call-site compatibility
|
|
930
929
|
*/
|
|
931
|
-
async mergeModuleHelpCatalogs(bmadDir,
|
|
930
|
+
async mergeModuleHelpCatalogs(bmadDir, _agentEntries = []) {
|
|
932
931
|
const allRows = [];
|
|
933
|
-
const headerRow =
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
// Build agent lookup from the in-memory list (agent code → command + display fields).
|
|
937
|
-
const agentInfo = new Map();
|
|
938
|
-
for (const agent of agentEntries) {
|
|
939
|
-
if (!agent || !agent.code) continue;
|
|
940
|
-
const agentCommand = agent.module ? `bmad:${agent.module}:agent:${agent.code}` : `bmad:agent:${agent.code}`;
|
|
941
|
-
const displayName = agent.name || agent.code;
|
|
942
|
-
const titleCombined = agent.icon && agent.title ? `${agent.icon} ${agent.title}` : agent.title || agent.code;
|
|
943
|
-
agentInfo.set(agent.code, {
|
|
944
|
-
command: agentCommand,
|
|
945
|
-
displayName,
|
|
946
|
-
title: titleCombined,
|
|
947
|
-
});
|
|
948
|
-
}
|
|
932
|
+
const headerRow = 'module,skill,display-name,menu-code,description,action,args,phase,after,before,required,output-location,outputs';
|
|
933
|
+
const COLUMN_COUNT = 13;
|
|
934
|
+
const PHASE_INDEX = 7;
|
|
949
935
|
|
|
950
936
|
// Get all installed module directories
|
|
951
937
|
const entries = await fs.readdir(bmadDir, { withFileTypes: true });
|
|
@@ -984,64 +970,19 @@ class Installer {
|
|
|
984
970
|
|
|
985
971
|
// Parse the line - handle quoted fields with commas
|
|
986
972
|
const columns = this.parseCSVLine(line);
|
|
987
|
-
if (columns.length
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
const [
|
|
993
|
-
module,
|
|
994
|
-
phase,
|
|
995
|
-
name,
|
|
996
|
-
code,
|
|
997
|
-
sequence,
|
|
998
|
-
workflowFile,
|
|
999
|
-
command,
|
|
1000
|
-
required,
|
|
1001
|
-
agentName,
|
|
1002
|
-
options,
|
|
1003
|
-
description,
|
|
1004
|
-
outputLocation,
|
|
1005
|
-
outputs,
|
|
1006
|
-
] = columns;
|
|
1007
|
-
|
|
1008
|
-
// Pass through _meta rows as-is (module metadata, not a skill)
|
|
1009
|
-
if (phase === '_meta') {
|
|
1010
|
-
const finalModule = (!module || module.trim() === '') && moduleName !== 'core' ? moduleName : module || '';
|
|
1011
|
-
const metaRow = [finalModule, '_meta', '', '', '', '', '', 'false', '', '', '', '', '', '', outputLocation || '', ''];
|
|
1012
|
-
allRows.push(metaRow.map((c) => this.escapeCSVField(c)).join(','));
|
|
1013
|
-
continue;
|
|
1014
|
-
}
|
|
973
|
+
if (columns.length < COLUMN_COUNT - 1) continue;
|
|
974
|
+
|
|
975
|
+
// Pad short rows; truncate over-long rows
|
|
976
|
+
const padded = columns.slice(0, COLUMN_COUNT);
|
|
977
|
+
while (padded.length < COLUMN_COUNT) padded.push('');
|
|
1015
978
|
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
const cleanAgentName = agentName ? agentName.trim() : '';
|
|
1021
|
-
const agentData = agentInfo.get(cleanAgentName) || { command: '', displayName: '', title: '' };
|
|
1022
|
-
|
|
1023
|
-
// Build new row with agent info
|
|
1024
|
-
const newRow = [
|
|
1025
|
-
finalModule,
|
|
1026
|
-
phase || '',
|
|
1027
|
-
name || '',
|
|
1028
|
-
code || '',
|
|
1029
|
-
sequence || '',
|
|
1030
|
-
workflowFile || '',
|
|
1031
|
-
command || '',
|
|
1032
|
-
required || 'false',
|
|
1033
|
-
cleanAgentName,
|
|
1034
|
-
agentData.command,
|
|
1035
|
-
agentData.displayName,
|
|
1036
|
-
agentData.title,
|
|
1037
|
-
options || '',
|
|
1038
|
-
description || '',
|
|
1039
|
-
outputLocation || '',
|
|
1040
|
-
outputs || '',
|
|
1041
|
-
];
|
|
1042
|
-
|
|
1043
|
-
allRows.push(newRow.map((c) => this.escapeCSVField(c)).join(','));
|
|
979
|
+
// If module column is empty, fill with this module's name
|
|
980
|
+
// (core stays empty so its rows render as universal tools)
|
|
981
|
+
if ((!padded[0] || padded[0].trim() === '') && moduleName !== 'core') {
|
|
982
|
+
padded[0] = moduleName;
|
|
1044
983
|
}
|
|
984
|
+
|
|
985
|
+
allRows.push(padded.map((c) => this.escapeCSVField(c)).join(','));
|
|
1045
986
|
}
|
|
1046
987
|
|
|
1047
988
|
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
@@ -1053,44 +994,34 @@ class Installer {
|
|
|
1053
994
|
}
|
|
1054
995
|
}
|
|
1055
996
|
|
|
1056
|
-
// Sort by module, then phase
|
|
1057
|
-
allRows.
|
|
1058
|
-
|
|
1059
|
-
const
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
const moduleA = (colsA[0] || '').toLowerCase();
|
|
1063
|
-
const moduleB = (colsB[0] || '').toLowerCase();
|
|
1064
|
-
if (moduleA !== moduleB) {
|
|
1065
|
-
return moduleA.localeCompare(moduleB);
|
|
1066
|
-
}
|
|
997
|
+
// Sort by module, then phase. Stable sort preserves authored order within a phase.
|
|
998
|
+
const decorated = allRows.map((row, index) => ({ row, index, cols: this.parseCSVLine(row) }));
|
|
999
|
+
decorated.sort((a, b) => {
|
|
1000
|
+
const moduleA = (a.cols[0] || '').toLowerCase();
|
|
1001
|
+
const moduleB = (b.cols[0] || '').toLowerCase();
|
|
1002
|
+
if (moduleA !== moduleB) return moduleA.localeCompare(moduleB);
|
|
1067
1003
|
|
|
1068
|
-
|
|
1069
|
-
const
|
|
1070
|
-
|
|
1071
|
-
if (phaseA !== phaseB) {
|
|
1072
|
-
return phaseA.localeCompare(phaseB);
|
|
1073
|
-
}
|
|
1004
|
+
const phaseA = a.cols[PHASE_INDEX] || '';
|
|
1005
|
+
const phaseB = b.cols[PHASE_INDEX] || '';
|
|
1006
|
+
if (phaseA !== phaseB) return phaseA.localeCompare(phaseB);
|
|
1074
1007
|
|
|
1075
|
-
|
|
1076
|
-
const seqA = parseInt(colsA[4] || '0', 10);
|
|
1077
|
-
const seqB = parseInt(colsB[4] || '0', 10);
|
|
1078
|
-
return seqA - seqB;
|
|
1008
|
+
return a.index - b.index;
|
|
1079
1009
|
});
|
|
1010
|
+
const sortedRows = decorated.map((d) => d.row);
|
|
1080
1011
|
|
|
1081
1012
|
// Write merged catalog
|
|
1082
1013
|
const outputDir = path.join(bmadDir, '_config');
|
|
1083
1014
|
await fs.ensureDir(outputDir);
|
|
1084
1015
|
const outputPath = path.join(outputDir, 'bmad-help.csv');
|
|
1085
1016
|
|
|
1086
|
-
const mergedContent = [headerRow, ...
|
|
1017
|
+
const mergedContent = [headerRow, ...sortedRows].join('\n');
|
|
1087
1018
|
await fs.writeFile(outputPath, mergedContent, 'utf8');
|
|
1088
1019
|
|
|
1089
1020
|
// Track the installed file
|
|
1090
1021
|
this.installedFiles.add(outputPath);
|
|
1091
1022
|
|
|
1092
1023
|
if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
|
|
1093
|
-
await prompts.log.message(` Generated bmad-help.csv: ${
|
|
1024
|
+
await prompts.log.message(` Generated bmad-help.csv: ${sortedRows.length} workflows`);
|
|
1094
1025
|
}
|
|
1095
1026
|
}
|
|
1096
1027
|
|
|
@@ -435,6 +435,9 @@ class ManifestGenerator {
|
|
|
435
435
|
// this means user-scoped keys (e.g. user_name) could mis-file into the
|
|
436
436
|
// team config, so the operator should notice.
|
|
437
437
|
const scopeByModuleKey = {};
|
|
438
|
+
// Maps installer moduleName (may be full display name) → module code field
|
|
439
|
+
// from module.yaml, so TOML sections use [modules.<code>] not [modules.<name>].
|
|
440
|
+
const codeByModuleName = {};
|
|
438
441
|
for (const moduleName of this.updatedModules) {
|
|
439
442
|
const moduleYamlPath = await resolveInstalledModuleYaml(moduleName);
|
|
440
443
|
if (!moduleYamlPath) {
|
|
@@ -447,6 +450,7 @@ class ManifestGenerator {
|
|
|
447
450
|
try {
|
|
448
451
|
const parsed = yaml.parse(await fs.readFile(moduleYamlPath, 'utf8'));
|
|
449
452
|
if (!parsed || typeof parsed !== 'object') continue;
|
|
453
|
+
if (parsed.code) codeByModuleName[moduleName] = parsed.code;
|
|
450
454
|
scopeByModuleKey[moduleName] = {};
|
|
451
455
|
for (const [key, value] of Object.entries(parsed)) {
|
|
452
456
|
if (value && typeof value === 'object' && 'prompt' in value) {
|
|
@@ -545,6 +549,9 @@ class ManifestGenerator {
|
|
|
545
549
|
if (moduleName === 'core') continue;
|
|
546
550
|
const cfg = moduleConfigs[moduleName];
|
|
547
551
|
if (!cfg || Object.keys(cfg).length === 0) continue;
|
|
552
|
+
// Use the module's code field from module.yaml as the TOML key so the
|
|
553
|
+
// section is [modules.mdo] not [modules.MDO: Maxio DevOps Operations].
|
|
554
|
+
const sectionKey = codeByModuleName[moduleName] || moduleName;
|
|
548
555
|
// Only filter out spread-from-core pollution when we actually know
|
|
549
556
|
// this module's prompt schema. For external/marketplace modules whose
|
|
550
557
|
// module.yaml isn't in the src tree, fall through as all-team so we
|
|
@@ -552,14 +559,14 @@ class ManifestGenerator {
|
|
|
552
559
|
const haveSchema = Object.keys(scopeByModuleKey[moduleName] || {}).length > 0;
|
|
553
560
|
const { team: modTeam, user: modUser } = partition(moduleName, cfg, haveSchema);
|
|
554
561
|
if (Object.keys(modTeam).length > 0) {
|
|
555
|
-
teamLines.push(`[modules.${
|
|
562
|
+
teamLines.push(`[modules.${sectionKey}]`);
|
|
556
563
|
for (const [key, value] of Object.entries(modTeam)) {
|
|
557
564
|
teamLines.push(`${key} = ${formatTomlValue(value)}`);
|
|
558
565
|
}
|
|
559
566
|
teamLines.push('');
|
|
560
567
|
}
|
|
561
568
|
if (Object.keys(modUser).length > 0) {
|
|
562
|
-
userLines.push(`[modules.${
|
|
569
|
+
userLines.push(`[modules.${sectionKey}]`);
|
|
563
570
|
for (const [key, value] of Object.entries(modUser)) {
|
|
564
571
|
userLines.push(`${key} = ${formatTomlValue(value)}`);
|
|
565
572
|
}
|
|
@@ -31,7 +31,50 @@ function clearCache() {
|
|
|
31
31
|
_cachedPlatformCodes = null;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Format the installable platform list for human-readable output (used by --list-tools).
|
|
36
|
+
* Sourced from IdeManager so this view matches what --tools accepts at install time
|
|
37
|
+
* (suspended platforms excluded).
|
|
38
|
+
* @returns {Promise<string>} Formatted multi-line string with id, name, target_dir, preferred flag.
|
|
39
|
+
*/
|
|
40
|
+
async function formatPlatformList() {
|
|
41
|
+
const { IdeManager } = require('./manager');
|
|
42
|
+
const ideManager = new IdeManager();
|
|
43
|
+
await ideManager.ensureInitialized();
|
|
44
|
+
|
|
45
|
+
const entries = ideManager.getAvailableIdes().map((ide) => {
|
|
46
|
+
const handler = ideManager.handlers.get(ide.value);
|
|
47
|
+
return {
|
|
48
|
+
id: ide.value,
|
|
49
|
+
name: ide.name,
|
|
50
|
+
targetDir: handler?.installerConfig?.target_dir || '',
|
|
51
|
+
preferred: ide.preferred,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
const idWidth = Math.max(...entries.map((e) => e.id.length), 'ID'.length);
|
|
56
|
+
const nameWidth = Math.max(...entries.map((e) => e.name.length), 'Name'.length);
|
|
57
|
+
|
|
58
|
+
const pad = (s, w) => s + ' '.repeat(Math.max(0, w - s.length));
|
|
59
|
+
const lines = [
|
|
60
|
+
`Supported tool IDs (pass via --tools <id>[,<id>...]):`,
|
|
61
|
+
'',
|
|
62
|
+
` ${pad('ID', idWidth)} ${pad('Name', nameWidth)} Target dir`,
|
|
63
|
+
` ${pad('-'.repeat(idWidth), idWidth)} ${pad('-'.repeat(nameWidth), nameWidth)} ${'-'.repeat(10)}`,
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
for (const e of entries) {
|
|
67
|
+
const star = e.preferred ? ' *' : ' ';
|
|
68
|
+
lines.push(`${star}${pad(e.id, idWidth)} ${pad(e.name, nameWidth)} ${e.targetDir}`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
lines.push('', '* = recommended / preferred', '', 'Example: bmad-method install --modules bmm --tools claude-code');
|
|
72
|
+
|
|
73
|
+
return lines.join('\n');
|
|
74
|
+
}
|
|
75
|
+
|
|
34
76
|
module.exports = {
|
|
35
77
|
loadPlatformCodes,
|
|
36
78
|
clearCache,
|
|
79
|
+
formatPlatformList,
|
|
37
80
|
};
|