bmalph 2.7.7 → 2.9.0
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/README.md +51 -28
- package/bmad/bmm/agents/analyst.agent.yaml +6 -6
- package/bmad/bmm/agents/architect.agent.yaml +2 -2
- package/bmad/bmm/agents/bmad-skill-manifest.yaml +39 -0
- package/bmad/bmm/agents/dev.agent.yaml +2 -2
- package/bmad/bmm/agents/pm.agent.yaml +6 -6
- package/bmad/bmm/agents/qa.agent.yaml +1 -1
- package/bmad/bmm/agents/quick-flow-solo-dev.agent.yaml +7 -3
- package/bmad/bmm/agents/sm.agent.yaml +4 -4
- package/bmad/bmm/agents/tech-writer/bmad-skill-manifest.yaml +3 -0
- package/bmad/bmm/agents/tech-writer/tech-writer.agent.yaml +1 -1
- package/bmad/bmm/agents/ux-designer.agent.yaml +1 -1
- package/bmad/bmm/module-help.csv +26 -25
- package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/product-brief.template.md +2 -2
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01-init.md +4 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-01b-continue.md +0 -3
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-02-vision.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-03-users.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-04-metrics.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-05-scope.md +5 -11
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/steps/step-06-complete.md +1 -4
- package/bmad/bmm/workflows/1-analysis/{create-product-brief → bmad-create-product-brief}/workflow.md +4 -6
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/SKILL.md +88 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/artifact-analyzer.md +60 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/opportunity-reviewer.md +44 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/skeptic-reviewer.md +44 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/agents/web-researcher.md +49 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-manifest.json +17 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/contextual-discovery.md +57 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/draft-and-review.md +86 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/finalize.md +75 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/prompts/guided-elicitation.md +70 -0
- package/bmad/bmm/workflows/1-analysis/bmad-product-brief-preview/resources/brief-template.md +60 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-06-research-synthesis.md +2 -1
- package/bmad/bmm/workflows/1-analysis/research/bmad-domain-research/research.template.md +29 -0
- package/bmad/bmm/workflows/1-analysis/research/{workflow-domain-research.md → bmad-domain-research/workflow.md} +0 -5
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/research.template.md +29 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +478 -0
- package/bmad/bmm/workflows/1-analysis/research/{workflow-market-research.md → bmad-market-research/workflow.md} +1 -6
- package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/SKILL.md +6 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/1-analysis/research/bmad-technical-research/research.template.md +29 -0
- package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-06-research-synthesis.md +2 -1
- package/bmad/bmm/workflows/1-analysis/research/{workflow-technical-research.md → bmad-technical-research/workflow.md} +0 -4
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +2 -2
- package/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +2 -1
- package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/SKILL.md +6 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01-init.md +2 -2
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-01b-continue.md +1 -1
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-02-discovery.md +2 -2
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-03-core-experience.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-04-emotional-response.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-05-inspiration.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-06-design-system.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-07-defining-experience.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-08-visual-foundation.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-09-design-directions.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-10-user-journeys.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-11-component-strategy.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-12-ux-patterns.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-13-responsive-accessibility.md +5 -4
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/steps/step-14-complete.md +3 -3
- package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/workflow.md +2 -8
- package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/SKILL.md +6 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01-discovery.md +3 -8
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-01b-legacy-conversion.md +1 -5
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-02-review.md +5 -9
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-03-edit.md +3 -6
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd → bmad-edit-prd}/steps-e/step-e-04-complete.md +2 -5
- package/bmad/bmm/workflows/2-plan-workflows/{create-prd/workflow-edit-prd.md → bmad-edit-prd/workflow.md} +2 -4
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/SKILL.md +6 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/domain-complexity.csv +15 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/prd-purpose.md +197 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/data/project-types.csv +11 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +221 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
- package/bmad/bmm/workflows/2-plan-workflows/bmad-validate-prd/workflow.md +62 -0
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +2 -4
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +1 -1
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +3 -3
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +3 -2
- package/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +3 -1
- package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/SKILL.md +6 -0
- package/bmad/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-01-document-discovery.md +3 -8
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -5
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +1 -5
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -5
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -6
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/steps/step-06-final-assessment.md +1 -4
- package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/workflow.md +1 -6
- package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/SKILL.md +6 -0
- package/bmad/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01-init.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-01b-continue.md +11 -2
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-02-context.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-03-starter.md +5 -7
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-04-decisions.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-05-patterns.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-06-structure.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-07-validation.md +4 -4
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/steps/step-08-complete.md +1 -1
- package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/workflow.md +1 -12
- package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/SKILL.md +6 -0
- package/bmad/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-01-validate-prerequisites.md +37 -41
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-02-design-epics.md +7 -28
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-03-create-stories.md +13 -30
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/steps/step-04-final-validation.md +3 -21
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/templates/epics-template.md +4 -0
- package/bmad/bmm/workflows/3-solutioning/{create-epics-and-stories → bmad-create-epics-and-stories}/workflow.md +1 -6
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-01-gather-context.md +61 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +41 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-03-triage.md +50 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +38 -0
- package/bmad/bmm/workflows/4-implementation/bmad-code-review/workflow.md +54 -0
- package/bmad/bmm/workflows/4-implementation/bmad-correct-course/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{correct-course → bmad-correct-course}/checklist.md +1 -1
- package/bmad/bmm/workflows/4-implementation/{correct-course/instructions.md → bmad-correct-course/workflow.md} +74 -14
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/checklist.md +9 -10
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/discover-inputs.md +88 -0
- package/bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md +380 -0
- package/bmad/bmm/workflows/4-implementation/bmad-dev-story/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{dev-story/instructions.xml → bmad-dev-story/workflow.md} +42 -2
- package/bmad/bmm/workflows/4-implementation/bmad-retrospective/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{retrospective/instructions.md → bmad-retrospective/workflow.md} +58 -23
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/sprint-status-template.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{sprint-planning/instructions.md → bmad-sprint-planning/workflow.md} +47 -10
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/SKILL.md +6 -0
- package/bmad/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/4-implementation/{sprint-status/instructions.md → bmad-sprint-status/workflow.md} +39 -8
- package/bmad/bmm/workflows/bmad-document-project/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/{document-project → bmad-document-project}/instructions.md +6 -8
- package/bmad/bmm/workflows/bmad-document-project/workflow.md +27 -0
- package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/deep-dive-instructions.md +3 -2
- package/bmad/bmm/workflows/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
- package/bmad/bmm/workflows/{document-project → bmad-document-project}/workflows/full-scan-instructions.md +5 -4
- package/bmad/bmm/workflows/bmad-document-project/workflows/full-scan-workflow.md +34 -0
- package/bmad/bmm/workflows/bmad-generate-project-context/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-01-discover.md +3 -1
- package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-02-generate.md +7 -4
- package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/workflow.md +2 -8
- package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/{qa/automate/instructions.md → bmad-qa-generate-e2e-tests/workflow.md} +33 -7
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-01-mode-detection.md +9 -14
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-02-context-gathering.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-03-execute.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-04-self-check.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-05-adversarial-review.md +8 -18
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/steps/step-06-resolve-findings.md +0 -2
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-dev → bmad-quick-dev}/workflow.md +1 -13
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-01-clarify-and-route.md +51 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-02-plan.md +35 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-03-implement.md +33 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-04-review.md +50 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/steps/step-05-present.md +17 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md +90 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/workflow.md +79 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +6 -0
- package/bmad/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +1 -0
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-01-understand.md +7 -13
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-02-investigate.md +3 -7
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-03-generate.md +1 -5
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/steps/step-04-review.md +9 -14
- package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/workflow.md +1 -7
- package/bmad/core/module-help.csv +10 -8
- package/bmad/core/module.yaml +1 -1
- package/bmad/core/skills/bmad-advanced-elicitation/SKILL.md +6 -0
- package/bmad/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-advanced-elicitation/workflow.md +135 -0
- package/bmad/core/skills/bmad-brainstorming/SKILL.md +6 -0
- package/bmad/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01-session-setup.md +35 -18
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-01b-continue.md +4 -2
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02a-user-selected.md +5 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02b-ai-recommended.md +3 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02c-random-selection.md +3 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-02d-progressive-flow.md +3 -1
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-03-technique-execution.md +6 -4
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/steps/step-04-idea-organization.md +4 -2
- package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/workflow.md +4 -9
- package/bmad/core/skills/bmad-distillator/SKILL.md +178 -0
- package/bmad/core/skills/bmad-distillator/agents/distillate-compressor.md +116 -0
- package/bmad/core/skills/bmad-distillator/agents/round-trip-reconstructor.md +68 -0
- package/bmad/core/skills/bmad-distillator/bmad-skill-manifest.yaml +15 -0
- package/bmad/core/skills/bmad-distillator/resources/compression-rules.md +51 -0
- package/bmad/core/skills/bmad-distillator/resources/distillate-format-reference.md +227 -0
- package/bmad/core/skills/bmad-distillator/resources/splitting-strategy.md +78 -0
- package/bmad/core/skills/bmad-distillator/scripts/analyze_sources.py +300 -0
- package/bmad/core/skills/bmad-distillator/scripts/tests/test_analyze_sources.py +204 -0
- package/bmad/core/skills/bmad-editorial-review-prose/SKILL.md +6 -0
- package/bmad/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-editorial-review-prose/workflow.md +81 -0
- package/bmad/core/skills/bmad-editorial-review-structure/SKILL.md +6 -0
- package/bmad/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-editorial-review-structure/workflow.md +174 -0
- package/bmad/core/skills/bmad-help/SKILL.md +6 -0
- package/bmad/core/skills/bmad-help/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/{tasks/help.md → skills/bmad-help/workflow.md} +11 -8
- package/bmad/core/skills/bmad-index-docs/SKILL.md +6 -0
- package/bmad/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-index-docs/workflow.md +61 -0
- package/bmad/core/skills/bmad-party-mode/SKILL.md +6 -0
- package/bmad/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-03-graceful-exit.md +0 -1
- package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/workflow.md +0 -4
- package/bmad/core/skills/bmad-review-adversarial-general/SKILL.md +6 -0
- package/bmad/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-review-adversarial-general/workflow.md +32 -0
- package/bmad/core/skills/bmad-review-edge-case-hunter/SKILL.md +6 -0
- package/bmad/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-review-edge-case-hunter/workflow.md +62 -0
- package/bmad/core/skills/bmad-shard-doc/SKILL.md +6 -0
- package/bmad/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/skills/bmad-shard-doc/workflow.md +100 -0
- package/bmad/core/tasks/bmad-create-prd/SKILL.md +6 -0
- package/bmad/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +1 -0
- package/bmad/core/tasks/bmad-create-prd/data/domain-complexity.csv +15 -0
- package/bmad/core/tasks/bmad-create-prd/data/prd-purpose.md +197 -0
- package/bmad/core/tasks/bmad-create-prd/data/project-types.csv +11 -0
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01-init.md +7 -20
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-01b-continue.md +29 -21
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02-discovery.md +7 -23
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02b-vision.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-02c-executive-summary.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-03-success.md +4 -16
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-04-journeys.md +4 -16
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-05-domain.md +7 -20
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-06-innovation.md +8 -23
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-07-project-type.md +6 -21
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-08-scoping.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-09-functional.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-10-nonfunctional.md +5 -17
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-11-polish.md +22 -18
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/steps-c/step-12-complete.md +4 -13
- package/bmad/{bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md → core/tasks/bmad-create-prd/workflow.md} +3 -4
- package/bundled-versions.json +1 -1
- package/dist/cli.js +3 -2
- package/dist/commands/doctor-checks.js +15 -6
- package/dist/commands/doctor-health-checks.js +2 -1
- package/dist/commands/doctor.js +13 -4
- package/dist/commands/init.js +15 -3
- package/dist/commands/reset.js +1 -1
- package/dist/commands/run.js +36 -1
- package/dist/commands/status.js +3 -11
- package/dist/commands/upgrade.js +1 -1
- package/dist/installer/commands.js +33 -15
- package/dist/installer/install.js +1 -1
- package/dist/installer/metadata.js +1 -1
- package/dist/installer/project-files.js +5 -6
- package/dist/installer/ralph-assets.js +8 -0
- package/dist/installer/template-files.js +85 -13
- package/dist/platform/codex.js +6 -1
- package/dist/platform/detect.js +7 -3
- package/dist/platform/doctor-checks.js +2 -2
- package/dist/platform/guidance.js +66 -0
- package/dist/platform/instructions-snippet.js +15 -0
- package/dist/platform/opencode.js +20 -0
- package/dist/platform/registry.js +2 -0
- package/dist/platform/types.js +1 -0
- package/dist/reset.js +4 -5
- package/dist/run/ralph-process.js +59 -10
- package/dist/run/run-dashboard.js +10 -9
- package/dist/transition/artifact-scan.js +16 -10
- package/dist/transition/context.js +1 -1
- package/dist/utils/constants.js +26 -2
- package/dist/utils/github.js +4 -3
- package/dist/utils/ralph-runtime-state.js +3 -13
- package/dist/utils/validate.js +4 -10
- package/dist/watch/dashboard.js +17 -5
- package/dist/watch/renderer.js +31 -6
- package/dist/watch/state-reader.js +20 -1
- package/package.json +8 -2
- package/ralph/drivers/opencode.sh +147 -0
- package/ralph/lib/response_analyzer.sh +227 -78
- package/ralph/lib/wizard_utils.sh +4 -4
- package/ralph/ralph_loop.sh +508 -4
- package/ralph/templates/PROMPT.md +12 -0
- package/ralph/templates/REVIEW_PROMPT.md +60 -0
- package/ralph/templates/ralphrc.template +41 -2
- package/slash-commands/advanced-elicitation.md +1 -1
- package/slash-commands/adversarial-review.md +1 -1
- package/slash-commands/bmad-help.md +1 -1
- package/slash-commands/bmalph.md +1 -1
- package/slash-commands/brainstorm-project.md +1 -1
- package/slash-commands/brainstorming.md +1 -1
- package/slash-commands/correct-course.md +1 -1
- package/slash-commands/create-architecture.md +1 -1
- package/slash-commands/create-brief.md +1 -1
- package/slash-commands/create-epics-stories.md +1 -1
- package/slash-commands/create-prd.md +1 -1
- package/slash-commands/create-story.md +1 -1
- package/slash-commands/create-ux.md +1 -1
- package/slash-commands/distillator.md +1 -0
- package/slash-commands/document-project.md +1 -1
- package/slash-commands/domain-research.md +1 -1
- package/slash-commands/edge-case-hunter.md +1 -0
- package/slash-commands/edit-prd.md +1 -0
- package/slash-commands/editorial-prose.md +1 -1
- package/slash-commands/editorial-structure.md +1 -1
- package/slash-commands/generate-project-context.md +1 -1
- package/slash-commands/implementation-readiness.md +1 -1
- package/slash-commands/index-docs.md +1 -1
- package/slash-commands/market-research.md +1 -1
- package/slash-commands/party-mode.md +1 -1
- package/slash-commands/qa-automate.md +1 -1
- package/slash-commands/quick-dev-new.md +1 -0
- package/slash-commands/quick-dev.md +1 -1
- package/slash-commands/retrospective.md +1 -1
- package/slash-commands/shard-doc.md +1 -1
- package/slash-commands/sprint-planning.md +1 -1
- package/slash-commands/sprint-status.md +1 -1
- package/slash-commands/tech-spec.md +1 -1
- package/slash-commands/technical-research.md +1 -1
- package/slash-commands/validate-architecture.md +1 -1
- package/slash-commands/validate-brief.md +1 -1
- package/slash-commands/validate-epics-stories.md +1 -1
- package/slash-commands/validate-prd.md +1 -1
- package/slash-commands/validate-story.md +1 -1
- package/slash-commands/validate-ux.md +1 -1
- package/bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -23
- package/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +0 -227
- package/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -44
- package/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -54
- package/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +0 -346
- package/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -53
- package/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -21
- package/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -53
- package/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -47
- package/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +0 -25
- package/bmad/bmm/workflows/document-project/workflow.yaml +0 -22
- package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
- package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
- package/bmad/bmm/workflows/qa/automate/workflow.yaml +0 -44
- package/bmad/core/agents/bmad-master.agent.yaml +0 -30
- package/bmad/core/tasks/editorial-review-prose.xml +0 -102
- package/bmad/core/tasks/editorial-review-structure.xml +0 -209
- package/bmad/core/tasks/index-docs.xml +0 -65
- package/bmad/core/tasks/review-adversarial-general.xml +0 -48
- package/bmad/core/tasks/shard-doc.xml +0 -108
- package/bmad/core/tasks/workflow.xml +0 -235
- package/bmad/core/workflows/advanced-elicitation/workflow.xml +0 -117
- package/dist/cli.js.map +0 -1
- package/dist/commands/check-updates.js.map +0 -1
- package/dist/commands/doctor-checks.js.map +0 -1
- package/dist/commands/doctor-health-checks.js.map +0 -1
- package/dist/commands/doctor-runtime-checks.js.map +0 -1
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/implement.js.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/reset.js.map +0 -1
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/upgrade.js.map +0 -1
- package/dist/commands/watch.js.map +0 -1
- package/dist/installer/bmad-assets.js.map +0 -1
- package/dist/installer/commands.js.map +0 -1
- package/dist/installer/install.js.map +0 -1
- package/dist/installer/metadata.js.map +0 -1
- package/dist/installer/project-files.js.map +0 -1
- package/dist/installer/ralph-assets.js.map +0 -1
- package/dist/installer/template-files.js.map +0 -1
- package/dist/installer/types.js.map +0 -1
- package/dist/installer.js.map +0 -1
- package/dist/platform/aider.js.map +0 -1
- package/dist/platform/claude-code.js.map +0 -1
- package/dist/platform/codex.js.map +0 -1
- package/dist/platform/copilot.js.map +0 -1
- package/dist/platform/cursor-runtime-checks.js.map +0 -1
- package/dist/platform/cursor.js.map +0 -1
- package/dist/platform/detect.js.map +0 -1
- package/dist/platform/doctor-checks.js.map +0 -1
- package/dist/platform/instructions-snippet.js.map +0 -1
- package/dist/platform/registry.js.map +0 -1
- package/dist/platform/resolve.js.map +0 -1
- package/dist/platform/types.js.map +0 -1
- package/dist/platform/windsurf.js.map +0 -1
- package/dist/reset.js.map +0 -1
- package/dist/run/ralph-process.js.map +0 -1
- package/dist/run/run-dashboard.js.map +0 -1
- package/dist/run/types.js.map +0 -1
- package/dist/transition/artifact-collection.js.map +0 -1
- package/dist/transition/artifact-loading.js.map +0 -1
- package/dist/transition/artifact-scan.js.map +0 -1
- package/dist/transition/artifacts.js.map +0 -1
- package/dist/transition/context-output.js.map +0 -1
- package/dist/transition/context.js.map +0 -1
- package/dist/transition/fix-plan-sync.js.map +0 -1
- package/dist/transition/fix-plan.js.map +0 -1
- package/dist/transition/index.js.map +0 -1
- package/dist/transition/orchestration.js.map +0 -1
- package/dist/transition/preflight.js.map +0 -1
- package/dist/transition/section-patterns.js.map +0 -1
- package/dist/transition/specs-changelog.js.map +0 -1
- package/dist/transition/specs-index.js.map +0 -1
- package/dist/transition/specs-sync.js.map +0 -1
- package/dist/transition/sprint-status.js.map +0 -1
- package/dist/transition/story-id.js.map +0 -1
- package/dist/transition/story-parsing.js.map +0 -1
- package/dist/transition/tech-stack.js.map +0 -1
- package/dist/transition/types.js.map +0 -1
- package/dist/utils/artifact-definitions.js.map +0 -1
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/constants.js.map +0 -1
- package/dist/utils/dryrun.js.map +0 -1
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/file-system.js.map +0 -1
- package/dist/utils/format-status.js.map +0 -1
- package/dist/utils/github.js.map +0 -1
- package/dist/utils/json.js.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/ralph-runtime-state.js.map +0 -1
- package/dist/utils/state.js.map +0 -1
- package/dist/utils/validate.js.map +0 -1
- package/dist/watch/dashboard.js.map +0 -1
- package/dist/watch/file-watcher.js.map +0 -1
- package/dist/watch/frame-writer.js.map +0 -1
- package/dist/watch/renderer.js.map +0 -1
- package/dist/watch/state-reader.js.map +0 -1
- package/dist/watch/types.js.map +0 -1
- package/slash-commands/execute-workflow.md +0 -1
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-01-init.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-02-domain-analysis.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-03-competitive-landscape.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-04-regulatory-focus.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{domain-steps → bmad-domain-research/domain-steps}/step-05-technical-trends.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-01-init.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-02-technical-overview.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-03-integration-patterns.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-04-architectural-patterns.md +0 -0
- /package/bmad/bmm/workflows/1-analysis/research/{technical-steps → bmad-technical-research/technical-steps}/step-05-implementation-research.md +0 -0
- /package/bmad/bmm/workflows/2-plan-workflows/{create-ux-design → bmad-create-ux-design}/ux-design-template.md +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{check-implementation-readiness → bmad-check-implementation-readiness}/templates/readiness-report-template.md +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/architecture-decision-template.md +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/domain-complexity.csv +0 -0
- /package/bmad/bmm/workflows/3-solutioning/{create-architecture → bmad-create-architecture}/data/project-types.csv +0 -0
- /package/bmad/bmm/workflows/4-implementation/{create-story → bmad-create-story}/template.md +0 -0
- /package/bmad/bmm/workflows/4-implementation/{dev-story → bmad-dev-story}/checklist.md +0 -0
- /package/bmad/bmm/workflows/4-implementation/{sprint-planning → bmad-sprint-planning}/checklist.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/checklist.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/documentation-requirements.csv +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/deep-dive-template.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/index-template.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-overview-template.md +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/project-scan-report-schema.json +0 -0
- /package/bmad/bmm/workflows/{document-project → bmad-document-project}/templates/source-tree-template.md +0 -0
- /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/project-context-template.md +0 -0
- /package/bmad/bmm/workflows/{generate-project-context → bmad-generate-project-context}/steps/step-03-complete.md +0 -0
- /package/bmad/bmm/workflows/{qa/automate → bmad-qa-generate-e2e-tests}/checklist.md +0 -0
- /package/bmad/bmm/workflows/bmad-quick-flow/{quick-spec → bmad-quick-spec}/tech-spec-template.md +0 -0
- /package/bmad/core/{workflows/advanced-elicitation → skills/bmad-advanced-elicitation}/methods.csv +0 -0
- /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/brain-methods.csv +0 -0
- /package/bmad/core/{workflows/brainstorming → skills/bmad-brainstorming}/template.md +0 -0
- /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-01-agent-loading.md +0 -0
- /package/bmad/core/{workflows/party-mode → skills/bmad-party-mode}/steps/step-02-discussion-orchestration.md +0 -0
- /package/bmad/{bmm/workflows/2-plan-workflows/create-prd → core/tasks/bmad-create-prd}/templates/prd-template.md +0 -0
package/dist/commands/init.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import
|
|
2
|
+
import select from "@inquirer/select";
|
|
3
|
+
import input from "@inquirer/input";
|
|
3
4
|
import { writeConfig } from "../utils/config.js";
|
|
4
5
|
import { installProject, mergeInstructionsFile, isInitialized, previewInstall, getBundledVersions, } from "../installer.js";
|
|
5
6
|
import { formatDryRunSummary } from "../utils/dryrun.js";
|
|
@@ -9,6 +10,8 @@ import { exists } from "../utils/file-system.js";
|
|
|
9
10
|
import { join } from "node:path";
|
|
10
11
|
import { isPlatformId, getPlatform, getAllPlatforms } from "../platform/registry.js";
|
|
11
12
|
import { detectPlatform } from "../platform/detect.js";
|
|
13
|
+
import { getPlatformMasterAgentHint } from "../platform/guidance.js";
|
|
14
|
+
import { PLATFORM_IDS } from "../platform/types.js";
|
|
12
15
|
export async function initCommand(options) {
|
|
13
16
|
await withErrorHandling(() => runInit(options));
|
|
14
17
|
}
|
|
@@ -23,8 +26,7 @@ async function resolvePlatform(projectDir, explicit) {
|
|
|
23
26
|
// 1. Explicit flag
|
|
24
27
|
if (explicit) {
|
|
25
28
|
if (!isPlatformId(explicit)) {
|
|
26
|
-
throw new Error(`Unknown platform: "${explicit}". ` +
|
|
27
|
-
`Valid platforms: claude-code, codex, cursor, windsurf, copilot, aider`);
|
|
29
|
+
throw new Error(`Unknown platform: "${explicit}". ` + `Valid platforms: ${PLATFORM_IDS.join(", ")}`);
|
|
28
30
|
}
|
|
29
31
|
return getPlatform(explicit);
|
|
30
32
|
}
|
|
@@ -100,6 +102,7 @@ async function runInit(options) {
|
|
|
100
102
|
const bundledVersions = await getBundledVersions();
|
|
101
103
|
const config = {
|
|
102
104
|
name: validatedName,
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- defensive against future refactors
|
|
103
106
|
description: description ?? "",
|
|
104
107
|
createdAt: new Date().toISOString(),
|
|
105
108
|
platform: platform.id,
|
|
@@ -125,12 +128,21 @@ async function runInit(options) {
|
|
|
125
128
|
if (platform.commandDelivery.kind === "directory") {
|
|
126
129
|
console.log(` ${platform.commandDelivery.dir}/ Slash commands`);
|
|
127
130
|
}
|
|
131
|
+
else if (platform.commandDelivery.kind === "skills") {
|
|
132
|
+
console.log(` ${platform.commandDelivery.dir}/ BMAD skills`);
|
|
133
|
+
}
|
|
128
134
|
console.log(` bmalph/ State management`);
|
|
129
135
|
// Platform-specific next step guidance
|
|
130
136
|
console.log(`\nNext step:`);
|
|
131
137
|
if (platform.id === "claude-code") {
|
|
132
138
|
console.log(` Use ${chalk.cyan("/bmalph")} in Claude Code to see your current phase and commands.`);
|
|
133
139
|
}
|
|
140
|
+
else if (platform.id === "opencode") {
|
|
141
|
+
console.log(` ${getPlatformMasterAgentHint(platform)}.`);
|
|
142
|
+
}
|
|
143
|
+
else if (platform.id === "codex") {
|
|
144
|
+
console.log(` ${getPlatformMasterAgentHint(platform)}.`);
|
|
145
|
+
}
|
|
134
146
|
else if (platform.tier === "full") {
|
|
135
147
|
console.log(` Ask ${platform.displayName} to ${chalk.cyan("run the BMAD master agent")} to navigate phases.`);
|
|
136
148
|
}
|
package/dist/commands/reset.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import
|
|
2
|
+
import confirm from "@inquirer/confirm";
|
|
3
3
|
import { isInitialized } from "../installer.js";
|
|
4
4
|
import { buildResetPlan, executeResetPlan, planToDryRunActions } from "../reset.js";
|
|
5
5
|
import { formatDryRunSummary } from "../utils/dryrun.js";
|
package/dist/commands/run.js
CHANGED
|
@@ -24,6 +24,10 @@ async function executeRun(options) {
|
|
|
24
24
|
if (platform.experimental) {
|
|
25
25
|
console.log(chalk.yellow(`Warning: ${platform.displayName} support is experimental`));
|
|
26
26
|
}
|
|
27
|
+
const reviewEnabled = await resolveReviewMode(options.review, platform);
|
|
28
|
+
if (reviewEnabled) {
|
|
29
|
+
console.log(chalk.cyan("Enhanced mode: code review every 5 implementation loops"));
|
|
30
|
+
}
|
|
27
31
|
const interval = parseInterval(options.interval);
|
|
28
32
|
let useDashboard = dashboard;
|
|
29
33
|
if (useDashboard) {
|
|
@@ -39,9 +43,10 @@ async function executeRun(options) {
|
|
|
39
43
|
}
|
|
40
44
|
const ralph = spawnRalphLoop(projectDir, platform.id, {
|
|
41
45
|
inheritStdio: !useDashboard,
|
|
46
|
+
...(reviewEnabled && { reviewEnabled }),
|
|
42
47
|
});
|
|
43
48
|
if (useDashboard) {
|
|
44
|
-
await startRunDashboard({ projectDir, interval, ralph });
|
|
49
|
+
await startRunDashboard({ projectDir, interval, ralph, reviewEnabled });
|
|
45
50
|
if (ralph.state === "stopped") {
|
|
46
51
|
applyRalphExitCode(ralph.exitCode);
|
|
47
52
|
}
|
|
@@ -65,4 +70,34 @@ function resolvePlatform(driverOverride, configPlatform) {
|
|
|
65
70
|
}
|
|
66
71
|
return getPlatform(id);
|
|
67
72
|
}
|
|
73
|
+
async function resolveReviewMode(reviewFlag, platform) {
|
|
74
|
+
if (reviewFlag === true) {
|
|
75
|
+
if (platform.id !== "claude-code") {
|
|
76
|
+
throw new Error("--review requires Claude Code (other drivers lack read-only enforcement)");
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
if (reviewFlag === false) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
if (platform.id !== "claude-code") {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
if (!process.stdin.isTTY) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
const { default: select } = await import("@inquirer/select");
|
|
90
|
+
const mode = await select({
|
|
91
|
+
message: "Quality mode:",
|
|
92
|
+
choices: [
|
|
93
|
+
{ name: "Standard — current behavior (no extra cost)", value: "standard" },
|
|
94
|
+
{
|
|
95
|
+
name: "Enhanced — periodic code review every 5 loops (~10-14% more tokens)",
|
|
96
|
+
value: "enhanced",
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
default: "standard",
|
|
100
|
+
});
|
|
101
|
+
return mode === "enhanced";
|
|
102
|
+
}
|
|
68
103
|
//# sourceMappingURL=run.js.map
|
package/dist/commands/status.js
CHANGED
|
@@ -6,10 +6,8 @@ import { formatStatus } from "../utils/format-status.js";
|
|
|
6
6
|
import { ARTIFACT_DEFINITIONS } from "../utils/artifact-definitions.js";
|
|
7
7
|
import { resolveProjectPlatform } from "../platform/resolve.js";
|
|
8
8
|
import { getFullTierPlatformNames } from "../platform/registry.js";
|
|
9
|
+
import { getPlatformAnalysisHint, getPlatformPrdHint } from "../platform/guidance.js";
|
|
9
10
|
import { scanProjectArtifacts } from "../transition/artifact-scan.js";
|
|
10
|
-
function getCursorNextAction() {
|
|
11
|
-
return "Read _bmad/COMMANDS.md and ask Cursor to run the BMAD master agent";
|
|
12
|
-
}
|
|
13
11
|
export async function statusCommand(options) {
|
|
14
12
|
await withErrorHandling(() => runStatus(options));
|
|
15
13
|
}
|
|
@@ -150,15 +148,9 @@ function getNextAction(phase, status, ralphStatus, platform) {
|
|
|
150
148
|
}
|
|
151
149
|
switch (phase) {
|
|
152
150
|
case 1:
|
|
153
|
-
|
|
154
|
-
return getCursorNextAction();
|
|
155
|
-
}
|
|
156
|
-
return "Run /analyst to start analysis";
|
|
151
|
+
return getPlatformAnalysisHint(platform);
|
|
157
152
|
case 2:
|
|
158
|
-
|
|
159
|
-
return getCursorNextAction();
|
|
160
|
-
}
|
|
161
|
-
return "Run /pm to create PRD";
|
|
153
|
+
return getPlatformPrdHint(platform);
|
|
162
154
|
case 3:
|
|
163
155
|
return "Run: bmalph implement";
|
|
164
156
|
case 4:
|
package/dist/commands/upgrade.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
-
import
|
|
2
|
+
import confirm from "@inquirer/confirm";
|
|
3
3
|
import { isInitialized, copyBundledAssets, mergeInstructionsFile, previewUpgrade, getBundledVersions, } from "../installer.js";
|
|
4
4
|
import { readConfig, writeConfig } from "../utils/config.js";
|
|
5
5
|
import { formatDryRunSummary } from "../utils/dryrun.js";
|
|
@@ -2,7 +2,7 @@ import { cp, mkdir, readFile, readdir, rm } from "node:fs/promises";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { atomicWriteFile } from "../utils/file-system.js";
|
|
4
4
|
import { isEnoent } from "../utils/errors.js";
|
|
5
|
-
import {
|
|
5
|
+
import { CODEX_SKILLS_DIR, SKILLS_PREFIX } from "../utils/constants.js";
|
|
6
6
|
const AGENT_DESCRIPTIONS = {
|
|
7
7
|
analyst: "Research, briefs, discovery",
|
|
8
8
|
architect: "Technical design, architecture",
|
|
@@ -177,17 +177,27 @@ export async function classifyCommands(projectDir, slashCmdsDir) {
|
|
|
177
177
|
continue;
|
|
178
178
|
}
|
|
179
179
|
// Classify: workflow/task commands (matched via CSV)
|
|
180
|
-
if (workflowRef
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
|
|
180
|
+
if (workflowRef) {
|
|
181
|
+
// Try direct file-path lookup first
|
|
182
|
+
let csv = workflowLookup.get(workflowRef);
|
|
183
|
+
// Fallback: resolve _bmad/.../skill-name/workflow.md → skill:skill-name
|
|
184
|
+
if (!csv) {
|
|
185
|
+
const match = workflowRef.match(/\/([^/]+)\/workflow\.md$/);
|
|
186
|
+
if (match) {
|
|
187
|
+
csv = workflowLookup.get(`skill:${match[1]}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (csv) {
|
|
191
|
+
results.push({
|
|
192
|
+
name,
|
|
193
|
+
description: csv.description,
|
|
194
|
+
invocation: firstLine,
|
|
195
|
+
body,
|
|
196
|
+
kind: "workflow",
|
|
197
|
+
phase: csv.phase,
|
|
198
|
+
});
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
191
201
|
}
|
|
192
202
|
// Classify: pure agent commands
|
|
193
203
|
if (agentRef && !workflowRef) {
|
|
@@ -276,8 +286,15 @@ export async function generateCommandIndex(projectDir, classified) {
|
|
|
276
286
|
* Generate Codex Skills from pre-classified slash commands.
|
|
277
287
|
* Creates .agents/skills/bmad-<name>/SKILL.md for each non-CLI-pointer command.
|
|
278
288
|
*/
|
|
279
|
-
export async function generateSkills(projectDir, classified) {
|
|
280
|
-
const
|
|
289
|
+
export async function generateSkills(projectDir, classified, platform) {
|
|
290
|
+
const delivery = platform?.commandDelivery.kind === "skills"
|
|
291
|
+
? platform.commandDelivery
|
|
292
|
+
: {
|
|
293
|
+
kind: "skills",
|
|
294
|
+
dir: CODEX_SKILLS_DIR,
|
|
295
|
+
frontmatterName: "command",
|
|
296
|
+
};
|
|
297
|
+
const skillsBaseDir = join(projectDir, delivery.dir);
|
|
281
298
|
// Cleanup: remove existing bmad-* skill directories
|
|
282
299
|
try {
|
|
283
300
|
const existingDirs = await readdir(skillsBaseDir);
|
|
@@ -297,8 +314,9 @@ export async function generateSkills(projectDir, classified) {
|
|
|
297
314
|
continue;
|
|
298
315
|
const skillDir = join(skillsBaseDir, `${SKILLS_PREFIX}${cmd.name}`);
|
|
299
316
|
await mkdir(skillDir, { recursive: true });
|
|
317
|
+
const frontmatterName = delivery.frontmatterName === "directory" ? `${SKILLS_PREFIX}${cmd.name}` : cmd.name;
|
|
300
318
|
const skillContent = `---
|
|
301
|
-
name: ${
|
|
319
|
+
name: ${frontmatterName}
|
|
302
320
|
description: >
|
|
303
321
|
${cmd.description}. Use when the user asks about ${cmd.name.replace(/-/g, " ")}.
|
|
304
322
|
metadata:
|
|
@@ -23,7 +23,7 @@ export async function copyBundledAssets(projectDir, platform) {
|
|
|
23
23
|
}
|
|
24
24
|
const classified = await installBmadAssets(projectDir, bmadDir, slashCommandsDir, p);
|
|
25
25
|
if (p.commandDelivery.kind === "skills") {
|
|
26
|
-
await generateSkills(projectDir, classified);
|
|
26
|
+
await generateSkills(projectDir, classified, p);
|
|
27
27
|
}
|
|
28
28
|
const ralphAssets = await installRalphAssets(projectDir, ralphDir, p, await getPackageVersion());
|
|
29
29
|
const commandPaths = await deliverCommands(projectDir, p, slashCommandsDir);
|
|
@@ -22,7 +22,7 @@ export async function getBundledVersions() {
|
|
|
22
22
|
const versionsPath = join(__dirname, "..", "..", "bundled-versions.json");
|
|
23
23
|
try {
|
|
24
24
|
const versions = JSON.parse(await readFile(versionsPath, "utf-8"));
|
|
25
|
-
if (
|
|
25
|
+
if (typeof versions.bmadCommit !== "string") {
|
|
26
26
|
throw new Error("Invalid bundled-versions.json structure: missing bmadCommit");
|
|
27
27
|
}
|
|
28
28
|
return {
|
|
@@ -2,7 +2,7 @@ import { mkdir, readFile } from "node:fs/promises";
|
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { atomicWriteFile, exists, parseGitignoreLines, replaceSection, } from "../utils/file-system.js";
|
|
4
4
|
import { isEnoent } from "../utils/errors.js";
|
|
5
|
-
import { CONFIG_FILE,
|
|
5
|
+
import { CONFIG_FILE, GITIGNORE_ENTRIES, STATE_DIR } from "../utils/constants.js";
|
|
6
6
|
import { getDefaultPlatform } from "./metadata.js";
|
|
7
7
|
import { isTemplateCustomized } from "./template-files.js";
|
|
8
8
|
export async function updateGitignore(projectDir) {
|
|
@@ -16,8 +16,7 @@ export async function updateGitignore(projectDir) {
|
|
|
16
16
|
throw err;
|
|
17
17
|
}
|
|
18
18
|
const existingLines = parseGitignoreLines(existing);
|
|
19
|
-
const
|
|
20
|
-
const newEntries = entries.filter((e) => !existingLines.has(e));
|
|
19
|
+
const newEntries = GITIGNORE_ENTRIES.filter((e) => !existingLines.has(e));
|
|
21
20
|
if (newEntries.length === 0)
|
|
22
21
|
return;
|
|
23
22
|
const suffix = existing.length > 0 && !existing.endsWith("\n")
|
|
@@ -70,13 +69,13 @@ export async function previewInstall(projectDir, platform) {
|
|
|
70
69
|
dirsToCreate.push(`${p.commandDelivery.dir}/`);
|
|
71
70
|
}
|
|
72
71
|
else if (p.commandDelivery.kind === "skills") {
|
|
73
|
-
dirsToCreate.push(`${
|
|
72
|
+
dirsToCreate.push(`${p.commandDelivery.dir}/`);
|
|
74
73
|
}
|
|
75
74
|
for (const dir of dirsToCreate) {
|
|
76
75
|
if (await exists(join(projectDir, dir))) {
|
|
77
76
|
if (dir === "_bmad/" ||
|
|
78
77
|
(p.commandDelivery.kind === "directory" && dir === `${p.commandDelivery.dir}/`) ||
|
|
79
|
-
(p.commandDelivery.kind === "skills" && dir === `${
|
|
78
|
+
(p.commandDelivery.kind === "skills" && dir === `${p.commandDelivery.dir}/`)) {
|
|
80
79
|
wouldModify.push(dir);
|
|
81
80
|
}
|
|
82
81
|
}
|
|
@@ -144,7 +143,7 @@ export async function previewUpgrade(projectDir, platform) {
|
|
|
144
143
|
managedPaths.push({ path: `${p.commandDelivery.dir}/`, isDir: true });
|
|
145
144
|
}
|
|
146
145
|
else if (p.commandDelivery.kind === "skills") {
|
|
147
|
-
managedPaths.push({ path: `${
|
|
146
|
+
managedPaths.push({ path: `${p.commandDelivery.dir}/`, isDir: true });
|
|
148
147
|
}
|
|
149
148
|
const wouldUpdate = [];
|
|
150
149
|
const wouldCreate = [];
|
|
@@ -8,8 +8,10 @@ export async function installRalphAssets(projectDir, ralphDir, platform, package
|
|
|
8
8
|
await mkdir(join(projectDir, ".ralph"), { recursive: true });
|
|
9
9
|
const promptPath = join(projectDir, ".ralph/PROMPT.md");
|
|
10
10
|
const agentPath = join(projectDir, ".ralph/@AGENT.md");
|
|
11
|
+
const reviewPromptPath = join(projectDir, ".ralph/REVIEW_PROMPT.md");
|
|
11
12
|
const promptCustomized = await isTemplateCustomized(promptPath, "PROMPT.md");
|
|
12
13
|
const agentCustomized = await isTemplateCustomized(agentPath, "AGENT.md");
|
|
14
|
+
const reviewPromptCustomized = await isTemplateCustomized(reviewPromptPath, "REVIEW_PROMPT.md");
|
|
13
15
|
if (!promptCustomized) {
|
|
14
16
|
await cp(join(ralphDir, "templates/PROMPT.md"), promptPath, {
|
|
15
17
|
dereference: false,
|
|
@@ -20,6 +22,11 @@ export async function installRalphAssets(projectDir, ralphDir, platform, package
|
|
|
20
22
|
dereference: false,
|
|
21
23
|
});
|
|
22
24
|
}
|
|
25
|
+
if (!reviewPromptCustomized) {
|
|
26
|
+
await cp(join(ralphDir, "templates/REVIEW_PROMPT.md"), reviewPromptPath, {
|
|
27
|
+
dereference: false,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
23
30
|
await cp(join(ralphDir, "RALPH-REFERENCE.md"), join(projectDir, ".ralph/RALPH-REFERENCE.md"), {
|
|
24
31
|
dereference: false,
|
|
25
32
|
});
|
|
@@ -83,6 +90,7 @@ export async function installRalphAssets(projectDir, ralphDir, platform, package
|
|
|
83
90
|
".ralph/lib/",
|
|
84
91
|
...(!promptCustomized ? [".ralph/PROMPT.md"] : []),
|
|
85
92
|
...(!agentCustomized ? [".ralph/@AGENT.md"] : []),
|
|
93
|
+
...(!reviewPromptCustomized ? [".ralph/REVIEW_PROMPT.md"] : []),
|
|
86
94
|
...(!ralphrcCustomized && currentRalphrc !== renderedRalphrc ? [".ralph/.ralphrc"] : []),
|
|
87
95
|
".ralph/RALPH-REFERENCE.md",
|
|
88
96
|
],
|
|
@@ -5,10 +5,15 @@ import { getBundledRalphDir } from "./metadata.js";
|
|
|
5
5
|
const TEMPLATE_PLACEHOLDERS = {
|
|
6
6
|
"PROMPT.md": "[YOUR PROJECT NAME]",
|
|
7
7
|
"AGENT.md": "pip install -r requirements.txt",
|
|
8
|
+
"REVIEW_PROMPT.md": "[YOUR PROJECT NAME]",
|
|
8
9
|
};
|
|
9
10
|
const RALPHRC_TEMPLATE_NAME = "RALPHRC";
|
|
10
11
|
const CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE = 'ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,EnterPlanMode,ExitPlanMode,NotebookEdit,Bash"';
|
|
11
12
|
const PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE = 'ALLOWED_TOOLS="Write,Read,Edit,MultiEdit,Glob,Grep,Task,TodoWrite,WebFetch,WebSearch,NotebookEdit,Bash"';
|
|
13
|
+
const RALPHRC_DRIVER_COMMENT_LINE = "# Platform driver for Ralph loop (claude-code, codex, opencode, copilot, or cursor)";
|
|
14
|
+
const PREVIOUS_RALPHRC_DRIVER_COMMENT_LINE = "# Platform driver for Ralph loop (claude-code, codex, copilot, or cursor)";
|
|
15
|
+
const RALPHRC_IGNORED_DRIVERS_COMMENT_LINE = "# Ignored by the codex, opencode, cursor, and copilot drivers.";
|
|
16
|
+
const PREVIOUS_RALPHRC_IGNORED_DRIVERS_COMMENT_LINE = "# Ignored by the codex, cursor, and copilot drivers.";
|
|
12
17
|
const CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK = `# Permission mode for Claude Code CLI (default: bypassPermissions)
|
|
13
18
|
# Options: auto, acceptEdits, bypassPermissions, default, dontAsk, plan
|
|
14
19
|
CLAUDE_PERMISSION_MODE="bypassPermissions"
|
|
@@ -18,6 +23,47 @@ const PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK = `# Permission mode for Cl
|
|
|
18
23
|
# Options: auto, acceptEdits, bypassPermissions, default, dontAsk, plan
|
|
19
24
|
CLAUDE_PERMISSION_MODE="auto"
|
|
20
25
|
|
|
26
|
+
`;
|
|
27
|
+
const QUALITY_GATES_TEMPLATE_BLOCK = `# =============================================================================
|
|
28
|
+
# QUALITY GATES
|
|
29
|
+
# =============================================================================
|
|
30
|
+
|
|
31
|
+
# Test command to verify TESTS_STATUS claims (e.g. "npm test", "pytest")
|
|
32
|
+
# When set, runs after each loop to confirm the agent's test status report.
|
|
33
|
+
# Leave empty to trust the agent's TESTS_STATUS without verification.
|
|
34
|
+
TEST_COMMAND="\${TEST_COMMAND:-}"
|
|
35
|
+
|
|
36
|
+
# Semicolon-separated quality gate commands (e.g. "npm run lint;npm run type-check")
|
|
37
|
+
# Each command runs after the loop iteration completes.
|
|
38
|
+
# Commands must not contain literal semicolons; use wrapper scripts if needed.
|
|
39
|
+
QUALITY_GATES="\${QUALITY_GATES:-}"
|
|
40
|
+
|
|
41
|
+
# Failure mode: warn | block | circuit-breaker
|
|
42
|
+
# warn - log failures, continue normally (default)
|
|
43
|
+
# block - suppress exit signal so the loop keeps running
|
|
44
|
+
# circuit-breaker - feed no-progress to circuit breaker
|
|
45
|
+
QUALITY_GATE_MODE="\${QUALITY_GATE_MODE:-warn}"
|
|
46
|
+
|
|
47
|
+
# Timeout in seconds for each gate command
|
|
48
|
+
QUALITY_GATE_TIMEOUT="\${QUALITY_GATE_TIMEOUT:-120}"
|
|
49
|
+
|
|
50
|
+
# Only run gates when the agent signals completion (EXIT_SIGNAL=true)
|
|
51
|
+
QUALITY_GATE_ON_COMPLETION_ONLY="\${QUALITY_GATE_ON_COMPLETION_ONLY:-false}"
|
|
52
|
+
|
|
53
|
+
`;
|
|
54
|
+
const REVIEW_TEMPLATE_BLOCK = `# =============================================================================
|
|
55
|
+
# PERIODIC CODE REVIEW
|
|
56
|
+
# =============================================================================
|
|
57
|
+
|
|
58
|
+
# Enable periodic code review loops (set via 'bmalph run --review' or manually)
|
|
59
|
+
# When enabled, Ralph runs a read-only review session every REVIEW_INTERVAL loops.
|
|
60
|
+
# The review agent analyzes git diffs and outputs findings for the next implementation loop.
|
|
61
|
+
# Currently supported on Claude Code only.
|
|
62
|
+
REVIEW_ENABLED="\${REVIEW_ENABLED:-false}"
|
|
63
|
+
|
|
64
|
+
# Number of implementation loops between review sessions (default: 5)
|
|
65
|
+
REVIEW_INTERVAL="\${REVIEW_INTERVAL:-5}"
|
|
66
|
+
|
|
21
67
|
`;
|
|
22
68
|
const LEGACY_RALPHRC_TEMPLATE = `# .ralphrc - Ralph project configuration
|
|
23
69
|
# Generated by: ralph enable
|
|
@@ -132,6 +178,11 @@ RALPH_VERBOSE=false
|
|
|
132
178
|
function renderLegacyRalphrcTemplate(platformId) {
|
|
133
179
|
return LEGACY_RALPHRC_TEMPLATE.replace("__PLATFORM_DRIVER__", platformId);
|
|
134
180
|
}
|
|
181
|
+
function normalizeManagedRalphrcContent(content) {
|
|
182
|
+
return content
|
|
183
|
+
.replace(PREVIOUS_RALPHRC_DRIVER_COMMENT_LINE, RALPHRC_DRIVER_COMMENT_LINE)
|
|
184
|
+
.replace(PREVIOUS_RALPHRC_IGNORED_DRIVERS_COMMENT_LINE, RALPHRC_IGNORED_DRIVERS_COMMENT_LINE);
|
|
185
|
+
}
|
|
135
186
|
function renderCurrentRalphrcTemplate(templateContent, platformId) {
|
|
136
187
|
return templateContent.replace(/PLATFORM_DRIVER="\$\{PLATFORM_DRIVER:-[^"]*\}"/, `PLATFORM_DRIVER="\${PLATFORM_DRIVER:-${platformId}}"`);
|
|
137
188
|
}
|
|
@@ -140,29 +191,50 @@ export async function renderRalphrcTemplate(platformId) {
|
|
|
140
191
|
const templateContent = await readFile(join(ralphDir, "templates/ralphrc.template"), "utf-8");
|
|
141
192
|
return renderCurrentRalphrcTemplate(templateContent, platformId);
|
|
142
193
|
}
|
|
194
|
+
function matchesManagedPermissionVariants(content, template) {
|
|
195
|
+
if (content === template) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
if (content ===
|
|
199
|
+
template
|
|
200
|
+
.replace(CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE, PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE)
|
|
201
|
+
.replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, "")) {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
if (content ===
|
|
205
|
+
template
|
|
206
|
+
.replace(CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE, PREVIOUS_CLAUDE_ALLOWED_TOOLS_TEMPLATE_LINE)
|
|
207
|
+
.replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK)) {
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
if (content ===
|
|
211
|
+
template.replace(CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK, PREVIOUS_CLAUDE_PERMISSION_MODE_TEMPLATE_BLOCK)) {
|
|
212
|
+
return true;
|
|
213
|
+
}
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
143
216
|
async function isRalphrcCustomized(filePath, platformId) {
|
|
144
|
-
const content = await readFile(filePath, "utf-8");
|
|
217
|
+
const content = normalizeManagedRalphrcContent(await readFile(filePath, "utf-8"));
|
|
145
218
|
const currentTemplate = await renderRalphrcTemplate(platformId);
|
|
146
|
-
if (content
|
|
219
|
+
if (matchesManagedPermissionVariants(content, currentTemplate)) {
|
|
147
220
|
return false;
|
|
148
221
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (content === previousManagedWithoutPermissionModeTemplate) {
|
|
222
|
+
// Check variants without quality gates block (pre-quality-gates installs)
|
|
223
|
+
const templateWithoutQG = currentTemplate.replace(QUALITY_GATES_TEMPLATE_BLOCK, "");
|
|
224
|
+
if (matchesManagedPermissionVariants(content, templateWithoutQG)) {
|
|
153
225
|
return false;
|
|
154
226
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if (content === previousDefaultModeTemplate) {
|
|
227
|
+
// Check variants without review block (pre-review installs)
|
|
228
|
+
const templateWithoutReview = currentTemplate.replace(REVIEW_TEMPLATE_BLOCK, "");
|
|
229
|
+
if (matchesManagedPermissionVariants(content, templateWithoutReview)) {
|
|
159
230
|
return false;
|
|
160
231
|
}
|
|
161
|
-
|
|
162
|
-
|
|
232
|
+
// Check variants without both quality gates and review blocks
|
|
233
|
+
const templateWithoutQGAndReview = templateWithoutQG.replace(REVIEW_TEMPLATE_BLOCK, "");
|
|
234
|
+
if (matchesManagedPermissionVariants(content, templateWithoutQGAndReview)) {
|
|
163
235
|
return false;
|
|
164
236
|
}
|
|
165
|
-
const legacyTemplate = renderLegacyRalphrcTemplate(platformId);
|
|
237
|
+
const legacyTemplate = normalizeManagedRalphrcContent(renderLegacyRalphrcTemplate(platformId));
|
|
166
238
|
return content !== legacyTemplate;
|
|
167
239
|
}
|
|
168
240
|
export async function isTemplateCustomized(filePath, templateName, options) {
|
package/dist/platform/codex.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { buildPlatformDoctorChecks } from "./doctor-checks.js";
|
|
2
2
|
import { generateSkillsTierSnippet } from "./instructions-snippet.js";
|
|
3
|
+
import { CODEX_SKILLS_DIR } from "../utils/constants.js";
|
|
3
4
|
export const codexPlatform = {
|
|
4
5
|
id: "codex",
|
|
5
6
|
displayName: "OpenAI Codex",
|
|
6
7
|
tier: "full",
|
|
7
8
|
instructionsFile: "AGENTS.md",
|
|
8
|
-
commandDelivery: {
|
|
9
|
+
commandDelivery: {
|
|
10
|
+
kind: "skills",
|
|
11
|
+
dir: CODEX_SKILLS_DIR,
|
|
12
|
+
frontmatterName: "command",
|
|
13
|
+
},
|
|
9
14
|
instructionsSectionMarker: "## BMAD-METHOD Integration",
|
|
10
15
|
generateInstructionsSnippet: () => generateSkillsTierSnippet(),
|
|
11
16
|
getDoctorChecks() {
|
package/dist/platform/detect.js
CHANGED
|
@@ -2,13 +2,14 @@ import { exists } from "../utils/file-system.js";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
const STRONG_DETECTION_MARKERS = [
|
|
4
4
|
{ platform: "claude-code", markers: [".claude"] },
|
|
5
|
+
{ platform: "opencode", markers: [".opencode"] },
|
|
5
6
|
{ platform: "cursor", markers: [".cursor"] },
|
|
6
7
|
{ platform: "windsurf", markers: [".windsurf"] },
|
|
7
8
|
{ platform: "copilot", markers: [".github/copilot-instructions.md"] },
|
|
8
9
|
{ platform: "aider", markers: [".aider.conf.yml"] },
|
|
9
10
|
];
|
|
10
11
|
const ROOT_INSTRUCTION_MARKERS = [
|
|
11
|
-
{ marker: "AGENTS.md", candidates: ["codex", "cursor"] },
|
|
12
|
+
{ marker: "AGENTS.md", candidates: ["codex", "opencode", "cursor"] },
|
|
12
13
|
{ marker: "CLAUDE.md", candidates: ["claude-code", "cursor"] },
|
|
13
14
|
];
|
|
14
15
|
export async function detectPlatform(projectDir) {
|
|
@@ -22,8 +23,11 @@ export async function detectPlatform(projectDir) {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
const strongExclusivePlatforms = ["cursor", "opencode"];
|
|
27
|
+
for (const platform of strongExclusivePlatforms) {
|
|
28
|
+
if (strongCandidates.includes(platform) && strongCandidates.length === 1) {
|
|
29
|
+
return { detected: platform, candidates: [platform] };
|
|
30
|
+
}
|
|
27
31
|
}
|
|
28
32
|
for (const { marker, candidates: inferred } of ROOT_INSTRUCTION_MARKERS) {
|
|
29
33
|
if (!(await exists(join(projectDir, marker)))) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { exists } from "../utils/file-system.js";
|
|
4
|
-
import {
|
|
4
|
+
import { SKILLS_PREFIX } from "../utils/constants.js";
|
|
5
5
|
import { isEnoent, formatError } from "../utils/errors.js";
|
|
6
6
|
/**
|
|
7
7
|
* Creates the standard instructions-file doctor check for a platform.
|
|
@@ -61,7 +61,7 @@ export function buildPlatformDoctorChecks(platform) {
|
|
|
61
61
|
checks.push(createFileExistsCheck("command-index", "_bmad/COMMANDS.md", "Run: bmalph upgrade"));
|
|
62
62
|
}
|
|
63
63
|
if (platform.commandDelivery.kind === "skills") {
|
|
64
|
-
checks.push(createFileExistsCheck("skills", `${
|
|
64
|
+
checks.push(createFileExistsCheck("skills", `${platform.commandDelivery.dir}/${SKILLS_PREFIX}analyst/SKILL.md`, "Run: bmalph upgrade"));
|
|
65
65
|
}
|
|
66
66
|
checks.push(createFileExistsCheck("lite-workflow", "_bmad/lite/create-prd.md", "Run: bmalph upgrade"));
|
|
67
67
|
checks.push(createInstructionsFileCheck(platform));
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
function getCommandIndexHint(platform) {
|
|
2
|
+
return `Read _bmad/COMMANDS.md and ask ${platform.displayName} to run the BMAD master agent`;
|
|
3
|
+
}
|
|
4
|
+
function getSkillHint(platform, skillName, skillsDir) {
|
|
5
|
+
if (platform.id === "codex") {
|
|
6
|
+
return `Use the \`$${skillName}\` Codex Skill`;
|
|
7
|
+
}
|
|
8
|
+
return `Ask ${platform.displayName} to load the \`bmad-${skillName}\` skill from \`${skillsDir}\``;
|
|
9
|
+
}
|
|
10
|
+
export function getPlatformAnalysisHint(platform) {
|
|
11
|
+
if (platform.commandDelivery.kind === "directory") {
|
|
12
|
+
return "Run /analyst to start analysis";
|
|
13
|
+
}
|
|
14
|
+
if (platform.commandDelivery.kind === "skills") {
|
|
15
|
+
return getSkillHint(platform, "analyst", platform.commandDelivery.dir);
|
|
16
|
+
}
|
|
17
|
+
return getCommandIndexHint(platform);
|
|
18
|
+
}
|
|
19
|
+
export function getPlatformPrdHint(platform) {
|
|
20
|
+
if (platform.commandDelivery.kind === "directory") {
|
|
21
|
+
return "Run /pm to create PRD";
|
|
22
|
+
}
|
|
23
|
+
if (platform.commandDelivery.kind === "skills") {
|
|
24
|
+
return getSkillHint(platform, "create-prd", platform.commandDelivery.dir);
|
|
25
|
+
}
|
|
26
|
+
return getCommandIndexHint(platform);
|
|
27
|
+
}
|
|
28
|
+
export function getPlatformArchitectureHint(platform) {
|
|
29
|
+
if (platform.commandDelivery.kind === "directory") {
|
|
30
|
+
return "Run /architect to create architecture";
|
|
31
|
+
}
|
|
32
|
+
if (platform.commandDelivery.kind === "skills") {
|
|
33
|
+
return getSkillHint(platform, "architect", platform.commandDelivery.dir);
|
|
34
|
+
}
|
|
35
|
+
return getCommandIndexHint(platform);
|
|
36
|
+
}
|
|
37
|
+
export function getPlatformEpicsStoriesHint(platform) {
|
|
38
|
+
if (platform.commandDelivery.kind === "directory") {
|
|
39
|
+
return "Run /create-epics-stories to define epics and stories";
|
|
40
|
+
}
|
|
41
|
+
if (platform.commandDelivery.kind === "skills") {
|
|
42
|
+
return getSkillHint(platform, "create-epics-stories", platform.commandDelivery.dir);
|
|
43
|
+
}
|
|
44
|
+
return getCommandIndexHint(platform);
|
|
45
|
+
}
|
|
46
|
+
export function getPlatformReadinessHint(platform) {
|
|
47
|
+
if (platform.commandDelivery.kind === "directory") {
|
|
48
|
+
return "Run /architect to generate readiness report";
|
|
49
|
+
}
|
|
50
|
+
if (platform.commandDelivery.kind === "skills") {
|
|
51
|
+
return getSkillHint(platform, "architect", platform.commandDelivery.dir);
|
|
52
|
+
}
|
|
53
|
+
return getCommandIndexHint(platform);
|
|
54
|
+
}
|
|
55
|
+
export function getPlatformMasterAgentHint(platform) {
|
|
56
|
+
if (platform.commandDelivery.kind === "directory") {
|
|
57
|
+
return "Run /bmalph to navigate phases";
|
|
58
|
+
}
|
|
59
|
+
if (platform.commandDelivery.kind === "skills") {
|
|
60
|
+
return platform.id === "codex"
|
|
61
|
+
? "Use the `$bmalph` Codex Skill to navigate phases"
|
|
62
|
+
: `Ask ${platform.displayName} to load the \`bmad-bmalph\` skill from \`${platform.commandDelivery.dir}\``;
|
|
63
|
+
}
|
|
64
|
+
return getCommandIndexHint(platform);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=guidance.js.map
|
|
@@ -59,6 +59,21 @@ export function generateSkillsTierSnippet() {
|
|
|
59
59
|
BMAD commands are available as Codex Skills. Use \`$command-name\` to invoke them
|
|
60
60
|
(e.g., \`$create-prd\`, \`$analyst\`). See \`_bmad/COMMANDS.md\` for a full reference.
|
|
61
61
|
|
|
62
|
+
${FULL_TIER_PHASES}
|
|
63
|
+
`;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Instructions snippet for OpenCode's native skills layout.
|
|
67
|
+
*/
|
|
68
|
+
export function generateOpencodeSkillsTierSnippet() {
|
|
69
|
+
return `
|
|
70
|
+
## BMAD-METHOD Integration
|
|
71
|
+
|
|
72
|
+
BMAD commands are available as native OpenCode skills in \`.opencode/skills/\`.
|
|
73
|
+
Load the matching skill name (for example \`bmad-analyst\` or \`bmad-create-prd\`)
|
|
74
|
+
when the user asks for a BMAD workflow or agent. Use the OpenCode question tool (\`question\`)
|
|
75
|
+
when a BMAD workflow needs interactive answers. See \`_bmad/COMMANDS.md\` for a full reference.
|
|
76
|
+
|
|
62
77
|
${FULL_TIER_PHASES}
|
|
63
78
|
`;
|
|
64
79
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { buildPlatformDoctorChecks } from "./doctor-checks.js";
|
|
2
|
+
import { generateOpencodeSkillsTierSnippet } from "./instructions-snippet.js";
|
|
3
|
+
import { OPENCODE_SKILLS_DIR } from "../utils/constants.js";
|
|
4
|
+
export const opencodePlatform = {
|
|
5
|
+
id: "opencode",
|
|
6
|
+
displayName: "OpenCode",
|
|
7
|
+
tier: "full",
|
|
8
|
+
instructionsFile: "AGENTS.md",
|
|
9
|
+
commandDelivery: {
|
|
10
|
+
kind: "skills",
|
|
11
|
+
dir: OPENCODE_SKILLS_DIR,
|
|
12
|
+
frontmatterName: "directory",
|
|
13
|
+
},
|
|
14
|
+
instructionsSectionMarker: "## BMAD-METHOD Integration",
|
|
15
|
+
generateInstructionsSnippet: () => generateOpencodeSkillsTierSnippet(),
|
|
16
|
+
getDoctorChecks() {
|
|
17
|
+
return buildPlatformDoctorChecks(this);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=opencode.js.map
|