mdan-cli 2.5.0 ā 2.5.2
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/.augment/code_review_guidelines.yaml +271 -0
- package/.claude/skills/bmad-os-audit-file-refs/SKILL.md +6 -0
- package/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.md +59 -0
- package/.claude/skills/bmad-os-changelog-social/SKILL.md +177 -0
- package/.claude/skills/bmad-os-changelog-social/examples/discord-example.md +53 -0
- package/.claude/skills/bmad-os-changelog-social/examples/linkedin-example.md +49 -0
- package/.claude/skills/bmad-os-changelog-social/examples/twitter-example.md +55 -0
- package/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +6 -0
- package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
- package/.claude/skills/bmad-os-draft-changelog/SKILL.md +6 -0
- package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
- package/.claude/skills/bmad-os-gh-triage/SKILL.md +6 -0
- package/.claude/skills/bmad-os-gh-triage/prompts/agent-prompt.md +60 -0
- package/.claude/skills/bmad-os-gh-triage/prompts/instructions.md +74 -0
- package/.claude/skills/bmad-os-release-module/SKILL.md +6 -0
- package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
- package/.claude/skills/bmad-os-review-pr/SKILL.md +6 -0
- package/.claude/skills/bmad-os-review-pr/prompts/instructions.md +231 -0
- package/.claude/skills/bmad-os-root-cause-analysis/SKILL.md +12 -0
- package/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md +74 -0
- package/.coderabbit.yaml +85 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/FUNDING.yaml +15 -0
- package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
- package/.github/ISSUE_TEMPLATE/documentation.yaml +55 -0
- package/.github/ISSUE_TEMPLATE/feature-request.md +22 -0
- package/.github/ISSUE_TEMPLATE/issue.md +32 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- package/.github/scripts/discord-helpers.sh +34 -0
- package/.github/workflows/coderabbit-review.yaml +22 -0
- package/.github/workflows/discord.yaml +90 -0
- package/.github/workflows/docs.yaml +64 -0
- package/.github/workflows/quality.yaml +116 -0
- package/.husky/pre-commit +20 -0
- package/.markdownlint-cli2.yaml +41 -0
- package/.nvmrc +1 -0
- package/.prettierignore +12 -0
- package/.vscode/settings.json +96 -0
- package/AGENTS.md +227 -165
- package/AGENTS_LIST.md +946 -0
- package/ARCHITECTURE.md +590 -0
- package/CHANGELOG.md +1770 -0
- package/CNAME +1 -0
- package/CONTRIBUTING.md +512 -0
- package/CONTRIBUTORS.md +32 -0
- package/INSTALL.md +246 -0
- package/LICENSE +30 -0
- package/README.md +133 -194
- package/RELEASE_NOTES.md +246 -0
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/USAGE.md +368 -0
- package/Wordmark.png +0 -0
- package/app/__init__.py +5 -0
- package/app/cis/agents/__init__.py +31 -0
- package/app/cis/agents/brainstorming-coach/__init__.py +3 -0
- package/app/cis/agents/brainstorming-coach/agent.py +162 -0
- package/app/cis/agents/brainstorming-coach/prompt.yaml +53 -0
- package/app/cis/agents/creative-problem-solver/__init__.py +3 -0
- package/app/cis/agents/creative-problem-solver/agent.py +233 -0
- package/app/cis/agents/creative-problem-solver/prompt.yaml +74 -0
- package/app/cis/agents/design-thinking-coach/__init__.py +3 -0
- package/app/cis/agents/design-thinking-coach/agent.py +241 -0
- package/app/cis/agents/design-thinking-coach/prompt.yaml +77 -0
- package/app/cis/agents/innovation-strategist/__init__.py +3 -0
- package/app/cis/agents/innovation-strategist/agent.py +271 -0
- package/app/cis/agents/innovation-strategist/prompt.yaml +70 -0
- package/app/cis/agents/presentation-master/__init__.py +3 -0
- package/app/cis/agents/presentation-master/agent.py +420 -0
- package/app/cis/agents/presentation-master/prompt.yaml +62 -0
- package/app/cis/agents/storyteller/__init__.py +3 -0
- package/app/cis/agents/storyteller/agent.py +303 -0
- package/app/cis/agents/storyteller/prompt.yaml +99 -0
- package/app/core/__init__.py +5 -0
- package/app/core/agents/__init__.py +5 -0
- package/app/core/agents/mdan-master/__init__.py +7 -0
- package/app/core/agents/mdan-master/agent.py +302 -0
- package/app/core/agents/mdan-master/prompt.yaml +105 -0
- package/app/mmb/agents/__init__.py +24 -0
- package/app/mmb/agents/agent-builder/__init__.py +5 -0
- package/app/mmb/agents/agent-builder/agent.py +261 -0
- package/app/mmb/agents/agent-builder/prompt.yaml +48 -0
- package/app/mmb/agents/module-builder/__init__.py +5 -0
- package/app/mmb/agents/module-builder/agent.py +299 -0
- package/app/mmb/agents/module-builder/prompt.yaml +50 -0
- package/app/mmb/agents/workflow-builder/__init__.py +5 -0
- package/app/mmb/agents/workflow-builder/agent.py +318 -0
- package/app/mmb/agents/workflow-builder/prompt.yaml +52 -0
- package/app/mmm/agents/__init__.py +48 -0
- package/app/mmm/agents/analyst/__init__.py +7 -0
- package/app/mmm/agents/analyst/agent.py +384 -0
- package/app/mmm/agents/analyst/prompt.yaml +62 -0
- package/app/mmm/agents/architect/__init__.py +7 -0
- package/app/mmm/agents/architect/agent.py +300 -0
- package/app/mmm/agents/architect/prompt.yaml +66 -0
- package/app/mmm/agents/dev/__init__.py +7 -0
- package/app/mmm/agents/dev/agent.py +285 -0
- package/app/mmm/agents/dev/prompt.yaml +62 -0
- package/app/mmm/agents/pm/__init__.py +7 -0
- package/app/mmm/agents/pm/agent.py +417 -0
- package/app/mmm/agents/pm/prompt.yaml +64 -0
- package/app/mmm/agents/qa/__init__.py +7 -0
- package/app/mmm/agents/qa/agent.py +267 -0
- package/app/mmm/agents/qa/prompt.yaml +67 -0
- package/app/mmm/agents/quick-flow-solo-dev/__init__.py +7 -0
- package/app/mmm/agents/quick-flow-solo-dev/agent.py +319 -0
- package/app/mmm/agents/quick-flow-solo-dev/prompt.yaml +60 -0
- package/app/mmm/agents/sm/__init__.py +7 -0
- package/app/mmm/agents/sm/agent.py +357 -0
- package/app/mmm/agents/sm/prompt.yaml +61 -0
- package/app/mmm/agents/tech-writer/__init__.py +7 -0
- package/app/mmm/agents/tech-writer/agent.py +420 -0
- package/app/mmm/agents/tech-writer/prompt.yaml +70 -0
- package/app/mmm/agents/ux-designer/__init__.py +14 -0
- package/app/mmm/agents/ux-designer/agent.py +412 -0
- package/app/mmm/agents/ux-designer/prompt.yaml +37 -0
- package/app/packs/__init__.py +32 -0
- package/app/packs/db-optimization/__init__.py +13 -0
- package/app/packs/db-optimization/agents/__init__.py +11 -0
- package/app/packs/db-optimization/agents/db-performance-analyst/__init__.py +5 -0
- package/app/packs/db-optimization/agents/db-performance-analyst/agent.py +559 -0
- package/app/packs/db-optimization/agents/db-performance-analyst/prompt.yaml +63 -0
- package/app/packs/db-optimization/agents/indexing-specialist/__init__.py +5 -0
- package/app/packs/db-optimization/agents/indexing-specialist/agent.py +713 -0
- package/app/packs/db-optimization/agents/indexing-specialist/prompt.yaml +92 -0
- package/app/packs/db-optimization/agents/query-optimizer/__init__.py +5 -0
- package/app/packs/db-optimization/agents/query-optimizer/agent.py +566 -0
- package/app/packs/db-optimization/agents/query-optimizer/prompt.yaml +74 -0
- package/app/packs/devops-azure/__init__.py +13 -0
- package/app/packs/devops-azure/agents/__init__.py +11 -0
- package/app/packs/devops-azure/agents/azure-specialist/__init__.py +5 -0
- package/app/packs/devops-azure/agents/azure-specialist/agent.py +584 -0
- package/app/packs/devops-azure/agents/azure-specialist/prompt.yaml +301 -0
- package/app/packs/devops-azure/agents/cicd-architect/__init__.py +5 -0
- package/app/packs/devops-azure/agents/cicd-architect/agent.py +665 -0
- package/app/packs/devops-azure/agents/cicd-architect/prompt.yaml +409 -0
- package/app/packs/devops-azure/agents/devops-engineer/__init__.py +5 -0
- package/app/packs/devops-azure/agents/devops-engineer/agent.py +545 -0
- package/app/packs/devops-azure/agents/devops-engineer/prompt.yaml +263 -0
- package/app/packs/fintech/__init__.py +13 -0
- package/app/packs/fintech/agents/__init__.py +11 -0
- package/app/packs/fintech/agents/compliance-officer/__init__.py +5 -0
- package/app/packs/fintech/agents/compliance-officer/agent.py +449 -0
- package/app/packs/fintech/agents/compliance-officer/prompt.yaml +135 -0
- package/app/packs/fintech/agents/financial-analyst/__init__.py +5 -0
- package/app/packs/fintech/agents/financial-analyst/agent.py +392 -0
- package/app/packs/fintech/agents/financial-analyst/prompt.yaml +143 -0
- package/app/packs/fintech/agents/risk-manager/__init__.py +5 -0
- package/app/packs/fintech/agents/risk-manager/agent.py +664 -0
- package/app/packs/fintech/agents/risk-manager/prompt.yaml +240 -0
- package/app/tea/agents/tea/__init__.py +9 -0
- package/app/tea/agents/tea/agent.py +689 -0
- package/app/tea/agents/tea/prompt.yaml +100 -0
- package/banner-bmad-method.png +0 -0
- package/docs/404.md +9 -0
- package/docs/_STYLE_GUIDE.md +370 -0
- package/docs/explanation/advanced-elicitation.md +49 -0
- package/docs/explanation/adversarial-review.md +59 -0
- package/docs/explanation/brainstorming.md +33 -0
- package/docs/explanation/established-projects-faq.md +50 -0
- package/docs/explanation/party-mode.md +59 -0
- package/docs/explanation/preventing-agent-conflicts.md +112 -0
- package/docs/explanation/project-context.md +157 -0
- package/docs/explanation/quick-flow.md +73 -0
- package/docs/explanation/why-solutioning-matters.md +77 -0
- package/docs/how-to/customize-bmad.md +172 -0
- package/docs/how-to/established-projects.md +117 -0
- package/docs/how-to/get-answers-about-bmad.md +134 -0
- package/docs/how-to/install-bmad.md +97 -0
- package/docs/how-to/non-interactive-installation.md +171 -0
- package/docs/how-to/project-context.md +136 -0
- package/docs/how-to/quick-fixes.md +123 -0
- package/docs/how-to/shard-large-documents.md +78 -0
- package/docs/how-to/upgrade-to-v6.md +97 -0
- package/docs/index.md +59 -0
- package/docs/reference/agents.md +28 -0
- package/docs/reference/commands.md +151 -0
- package/docs/reference/modules.md +76 -0
- package/docs/reference/testing.md +106 -0
- package/docs/reference/workflow-map.md +89 -0
- package/docs/roadmap.mdx +136 -0
- package/docs/tutorials/getting-started.md +286 -0
- package/eslint.config.mjs +141 -0
- package/package.json +106 -37
- package/prettier.config.mjs +32 -0
- package/prompts/cis/brainstorming-coach.yaml +53 -0
- package/prompts/cis/creative-problem-solver.yaml +74 -0
- package/prompts/cis/design-thinking-coach.yaml +77 -0
- package/prompts/cis/innovation-strategist.yaml +70 -0
- package/prompts/cis/presentation-master.yaml +62 -0
- package/prompts/cis/storyteller.yaml +99 -0
- package/prompts/core/mdan-master.yaml +105 -0
- package/prompts/mmb/agent-builder.yaml +48 -0
- package/prompts/mmb/module-builder.yaml +50 -0
- package/prompts/mmb/workflow-builder.yaml +52 -0
- package/prompts/mmm/analyst.yaml +62 -0
- package/prompts/mmm/architect.yaml +66 -0
- package/prompts/mmm/dev.yaml +62 -0
- package/prompts/mmm/pm.yaml +64 -0
- package/prompts/mmm/qa.yaml +67 -0
- package/prompts/mmm/quick-flow-solo-dev.yaml +60 -0
- package/prompts/mmm/sm.yaml +61 -0
- package/prompts/mmm/tech-writer.yaml +70 -0
- package/prompts/mmm/ux-designer.yaml +33 -0
- package/prompts/packs/db-optimization/db-performance-analyst.yaml +63 -0
- package/prompts/packs/db-optimization/indexing-specialist.yaml +92 -0
- package/prompts/packs/db-optimization/query-optimizer.yaml +74 -0
- package/prompts/packs/devops-azure/azure-specialist.yaml +301 -0
- package/prompts/packs/devops-azure/cicd-architect.yaml +409 -0
- package/prompts/packs/devops-azure/devops-engineer.yaml +263 -0
- package/prompts/packs/fintech/compliance-officer.yaml +135 -0
- package/prompts/packs/fintech/financial-analyst.yaml +143 -0
- package/prompts/packs/fintech/risk-manager.yaml +240 -0
- package/prompts/tea/tea.yaml +100 -0
- package/prompts.json +237 -0
- package/src/bmm/agents/analyst.agent.yaml +43 -0
- package/src/bmm/agents/architect.agent.yaml +29 -0
- package/src/bmm/agents/dev.agent.yaml +38 -0
- package/src/bmm/agents/pm.agent.yaml +44 -0
- package/src/bmm/agents/qa.agent.yaml +58 -0
- package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
- package/src/bmm/agents/sm.agent.yaml +37 -0
- package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -0
- package/src/bmm/agents/ux-designer.agent.yaml +27 -0
- package/src/bmm/data/project-context-template.md +26 -0
- package/src/bmm/module-help.csv +31 -0
- package/src/bmm/module.yaml +50 -0
- package/src/bmm/teams/default-party.csv +20 -0
- package/src/bmm/teams/team-fullstack.yaml +12 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
- package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -0
- package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
- package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -0
- package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
- package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
- package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
- package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
- package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
- package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
- package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -0
- package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
- package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -0
- package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
- package/src/bmm/workflows/4-implementation/create-story/instructions.xml +346 -0
- package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
- package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -0
- package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
- package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -0
- package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
- package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
- package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +143 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +126 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
- package/src/bmm/workflows/document-project/checklist.md +245 -0
- package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/bmm/workflows/document-project/instructions.md +130 -0
- package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/bmm/workflows/document-project/workflow.yaml +22 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
- package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
- package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
- package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
- package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
- package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -0
- package/src/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -0
- package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -0
- package/src/core/agents/bmad-master.agent.yaml +30 -0
- package/src/core/module-help.csv +9 -0
- package/src/core/module.yaml +25 -0
- package/src/core/tasks/editorial-review-prose.xml +102 -0
- package/src/core/tasks/editorial-review-structure.xml +208 -0
- package/src/core/tasks/help.md +86 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +49 -0
- package/src/core/tasks/shard-doc.xml +108 -0
- package/src/core/tasks/workflow.xml +235 -0
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +118 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/core/workflows/brainstorming/template.md +15 -0
- package/src/core/workflows/brainstorming/workflow.md +58 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
- package/src/core/workflows/party-mode/workflow.md +194 -0
- package/src/utility/agent-components/activation-rules.txt +6 -0
- package/src/utility/agent-components/activation-steps.txt +14 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-data.txt +5 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/test/README.md +295 -0
- package/test/adversarial-review-tests/README.md +56 -0
- package/test/adversarial-review-tests/sample-content.md +46 -0
- package/test/adversarial-review-tests/test-cases.yaml +103 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
- package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
- package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
- package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
- package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/bmm-style.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-cli-integration.sh +159 -0
- package/test/test-file-refs-csv.js +133 -0
- package/test/test-installation-components.js +212 -0
- package/test/test-rehype-plugins.mjs +1050 -0
- package/test/unit-test-schema.js +133 -0
- package/tests/run_all_tests.py +80 -0
- package/tests/scenarios/cis/brainstorming-coach.test.py +150 -0
- package/tests/scenarios/cis/creative-problem-solver.test.py +167 -0
- package/tests/scenarios/cis/design-thinking-coach.test.py +177 -0
- package/tests/scenarios/cis/innovation-strategist.test.py +191 -0
- package/tests/scenarios/cis/presentation-master.test.py +240 -0
- package/tests/scenarios/cis/storyteller.test.py +324 -0
- package/tests/scenarios/core/mdan-master.test.py +281 -0
- package/tests/scenarios/mmb/agent-builder.test.py +124 -0
- package/tests/scenarios/mmb/module-builder.test.py +124 -0
- package/tests/scenarios/mmb/workflow-builder.test.py +124 -0
- package/tests/scenarios/mmm/analyst.test.py +138 -0
- package/tests/scenarios/mmm/architect.test.py +138 -0
- package/tests/scenarios/mmm/dev.test.py +138 -0
- package/tests/scenarios/mmm/pm.test.py +138 -0
- package/tests/scenarios/mmm/qa.test.py +138 -0
- package/tests/scenarios/mmm/quick-flow-solo-dev.test.py +138 -0
- package/tests/scenarios/mmm/sm.test.py +138 -0
- package/tests/scenarios/mmm/tech-writer.test.py +138 -0
- package/tests/scenarios/mmm/ux-designer.test.py +294 -0
- package/tests/scenarios/packs/db-optimization/db-performance-analyst.test.py +108 -0
- package/tests/scenarios/packs/db-optimization/indexing-specialist.test.py +108 -0
- package/tests/scenarios/packs/db-optimization/query-optimizer.test.py +106 -0
- package/tests/scenarios/packs/devops-azure/azure-specialist.test.py +125 -0
- package/tests/scenarios/packs/devops-azure/cicd-architect.test.py +122 -0
- package/tests/scenarios/packs/devops-azure/devops-engineer.test.py +128 -0
- package/tests/scenarios/packs/fintech/compliance-officer.test.py +165 -0
- package/tests/scenarios/packs/fintech/financial-analyst.test.py +184 -0
- package/tests/scenarios/packs/fintech/risk-manager.test.py +171 -0
- package/tests/scenarios/tea/tea.test.py +346 -0
- package/tests/simple_cis_test.py +285 -0
- package/tests/simple_db_optimization_test.py +199 -0
- package/tests/simple_devops_test.py +193 -0
- package/tests/simple_fintech_test.py +205 -0
- package/tests/simple_mmb_test.py +103 -0
- package/tests/simple_mmm_test.py +159 -0
- package/tests/simple_tea_test.py +80 -0
- package/tests/simple_test.py +111 -0
- package/tests/simple_ux_designer_test.py +144 -0
- package/tests/validate_yaml.py +86 -0
- package/tools/bmad-npx-wrapper.js +38 -0
- package/tools/build-docs.mjs +463 -0
- package/tools/cli/README.md +60 -0
- package/tools/cli/bmad-cli.js +106 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/status.js +65 -0
- package/tools/cli/commands/uninstall.js +167 -0
- package/tools/cli/external-official-modules.yaml +53 -0
- package/tools/cli/installers/install-messages.yaml +39 -0
- package/tools/cli/installers/lib/core/config-collector.js +1285 -0
- package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +743 -0
- package/tools/cli/installers/lib/core/detector.js +223 -0
- package/tools/cli/installers/lib/core/ide-config-manager.js +157 -0
- package/tools/cli/installers/lib/core/installer.js +3162 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +1081 -0
- package/tools/cli/installers/lib/core/manifest.js +1038 -0
- package/tools/cli/installers/lib/custom/handler.js +358 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +665 -0
- package/tools/cli/installers/lib/ide/_config-driven.js +634 -0
- package/tools/cli/installers/lib/ide/codex.js +440 -0
- package/tools/cli/installers/lib/ide/github-copilot.js +699 -0
- package/tools/cli/installers/lib/ide/kilo.js +269 -0
- package/tools/cli/installers/lib/ide/manager.js +342 -0
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +243 -0
- package/tools/cli/installers/lib/ide/rovodev.js +257 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +180 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +174 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +366 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +318 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +13 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +13 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/cli/installers/lib/ide/templates/split/.gitkeep +0 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/message-loader.js +83 -0
- package/tools/cli/installers/lib/modules/external-manager.js +136 -0
- package/tools/cli/installers/lib/modules/manager.js +1498 -0
- package/tools/cli/lib/activation-builder.js +165 -0
- package/tools/cli/lib/agent/compiler.js +525 -0
- package/tools/cli/lib/agent/installer.js +680 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent-analyzer.js +109 -0
- package/tools/cli/lib/agent-party-generator.js +194 -0
- package/tools/cli/lib/cli-utils.js +182 -0
- package/tools/cli/lib/config.js +213 -0
- package/tools/cli/lib/file-ops.js +204 -0
- package/tools/cli/lib/platform-codes.js +116 -0
- package/tools/cli/lib/project-root.js +77 -0
- package/tools/cli/lib/prompts.js +809 -0
- package/tools/cli/lib/ui.js +1936 -0
- package/tools/cli/lib/xml-handler.js +177 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/cli/lib/yaml-format.js +245 -0
- package/tools/cli/lib/yaml-xml-builder.js +587 -0
- package/tools/docs/_prompt-external-modules-page.md +59 -0
- package/tools/docs/fix-refs.md +91 -0
- package/tools/fix-doc-links.js +285 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/lib/xml-utils.js +13 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +157 -0
- package/tools/schema/agent.js +491 -0
- package/tools/validate-agent-schema.js +110 -0
- package/tools/validate-doc-links.js +407 -0
- package/tools/validate-file-refs.js +554 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/website/README.md +75 -0
- package/website/astro.config.mjs +136 -0
- package/website/public/favicon.ico +0 -0
- package/website/public/img/bmad-dark.png +0 -0
- package/website/public/img/bmad-light.png +0 -0
- package/website/public/workflow-map-diagram.html +361 -0
- package/website/src/components/Banner.astro +62 -0
- package/website/src/components/Header.astro +96 -0
- package/website/src/components/MobileMenuFooter.astro +33 -0
- package/website/src/content/config.ts +6 -0
- package/website/src/lib/site-url.mjs +25 -0
- package/website/src/pages/404.astro +11 -0
- package/website/src/pages/robots.txt.ts +48 -0
- package/website/src/rehype-base-paths.js +112 -0
- package/website/src/rehype-markdown-links.js +119 -0
- package/website/src/styles/custom.css +805 -0
- package/.mcp.json +0 -46
- package/agents/AGENTS-REGISTRY.md +0 -215
- package/agents/architect.md +0 -160
- package/agents/dev.md +0 -166
- package/agents/devops.md +0 -230
- package/agents/doc.md +0 -189
- package/agents/learn.md +0 -377
- package/agents/product.md +0 -124
- package/agents/security.md +0 -168
- package/agents/test.md +0 -209
- package/agents/ux.md +0 -207
- package/cli/mdan.js +0 -628
- package/cli/mdan.py +0 -316
- package/cli/mdan.sh +0 -724
- package/cli/postinstall.js +0 -4
- package/core/orchestrator.md +0 -238
- package/core/universal-envelope.md +0 -160
- package/install.sh +0 -91
- package/integrations/all-integrations.md +0 -300
- package/integrations/claude.md +0 -46
- package/integrations/cursor.md +0 -74
- package/integrations/mcp.md +0 -153
- package/integrations/windsurf.md +0 -48
- package/memory/MDAN-STATE.template.json +0 -44
- package/memory/MEMORY-SYSTEM.md +0 -197
- package/phases/01-discover.md +0 -136
- package/phases/02-design.md +0 -147
- package/phases/03-build.md +0 -113
- package/phases/04-verify.md +0 -107
- package/phases/05-ship.md +0 -156
- package/skills/find-skills/skill.md +0 -133
- package/templates/ARCHITECTURE.md +0 -186
- package/templates/CHANGELOG.md +0 -41
- package/templates/MDAN-KNOWLEDGE.md +0 -73
- package/templates/PRD.md +0 -120
- package/templates/SECURITY-REVIEW.md +0 -99
- package/templates/TEST-PLAN.md +0 -97
- package/templates/prompts/README.md +0 -108
- package/templates/prompts/dev-agent.yaml +0 -85
- package/templates/prompts/orchestrator.yaml +0 -97
- package/templates/prompts.json +0 -81
- package/templates/tests/evaluations/README.md +0 -80
- package/templates/tests/evaluations/classification_eval.md +0 -136
- package/templates/tests/evaluations/rag_eval.md +0 -116
- package/templates/tests/scenarios/README.md +0 -62
- package/templates/tests/scenarios/basic_authentication.test.md +0 -82
- package/templates/tests/scenarios/user_registration.test.md +0 -107
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
"""
|
|
2
|
+
QA Engineer Agent
|
|
3
|
+
|
|
4
|
+
A pragmatic test automation engineer focused on rapid test coverage.
|
|
5
|
+
Specializes in generating tests quickly for existing features using standard
|
|
6
|
+
test framework patterns.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Any, Dict, List, Optional
|
|
10
|
+
import json
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class QAAgent:
|
|
14
|
+
"""
|
|
15
|
+
QA Engineer Agent - Quinn
|
|
16
|
+
|
|
17
|
+
Pragmatic test automation engineer focused on rapid test coverage.
|
|
18
|
+
Specializes in generating tests quickly for existing features using standard
|
|
19
|
+
test framework patterns. Simpler, more direct approach than the advanced
|
|
20
|
+
Test Architect module.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(self, config: Optional[Dict[str, Any]] = None):
|
|
24
|
+
"""
|
|
25
|
+
Initialize the QA Engineer Agent.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
config: Optional configuration dictionary containing:
|
|
29
|
+
- user_name: Name of the user
|
|
30
|
+
- communication_language: Language for communication
|
|
31
|
+
- output_folder: Path for output files
|
|
32
|
+
"""
|
|
33
|
+
self.config = config or {}
|
|
34
|
+
self.user_name = self.config.get("user_name", "User")
|
|
35
|
+
self.communication_language = self.config.get(
|
|
36
|
+
"communication_language", "English"
|
|
37
|
+
)
|
|
38
|
+
self.output_folder = self.config.get("output_folder", "./output")
|
|
39
|
+
|
|
40
|
+
# Agent metadata
|
|
41
|
+
self.name = "Quinn"
|
|
42
|
+
self.title = "QA Engineer"
|
|
43
|
+
self.icon = "š§Ŗ"
|
|
44
|
+
self.capabilities = [
|
|
45
|
+
"test automation",
|
|
46
|
+
"API testing",
|
|
47
|
+
"E2E testing",
|
|
48
|
+
"coverage analysis",
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
# Menu items
|
|
52
|
+
self.menu_items = [
|
|
53
|
+
{
|
|
54
|
+
"cmd": "MH",
|
|
55
|
+
"label": "Redisplay Menu Help",
|
|
56
|
+
"description": "Show this menu",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"cmd": "CH",
|
|
60
|
+
"label": "Chat with the Agent",
|
|
61
|
+
"description": "Chat about anything",
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"cmd": "QA",
|
|
65
|
+
"label": "Automate - Generate tests",
|
|
66
|
+
"description": "Generate tests for existing features (simplified)",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"cmd": "PM",
|
|
70
|
+
"label": "Start Party Mode",
|
|
71
|
+
"description": "Start party mode",
|
|
72
|
+
},
|
|
73
|
+
{"cmd": "DA", "label": "Dismiss Agent", "description": "Exit the agent"},
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
async def process(
|
|
77
|
+
self, input_text: str, context: Optional[Dict[str, Any]] = None
|
|
78
|
+
) -> Dict[str, Any]:
|
|
79
|
+
"""
|
|
80
|
+
Process user input and generate a response.
|
|
81
|
+
|
|
82
|
+
Args:
|
|
83
|
+
input_text: The user's input text
|
|
84
|
+
context: Optional context dictionary with additional information
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
Dictionary containing:
|
|
88
|
+
- response: The agent's response text
|
|
89
|
+
- action: Any action to be taken
|
|
90
|
+
- context: Updated context
|
|
91
|
+
"""
|
|
92
|
+
context = context or {}
|
|
93
|
+
|
|
94
|
+
# Check for menu display request
|
|
95
|
+
if self._is_menu_request(input_text):
|
|
96
|
+
return {
|
|
97
|
+
"response": self._get_menu_display(),
|
|
98
|
+
"action": "display_menu",
|
|
99
|
+
"context": context,
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
# Check for exit request
|
|
103
|
+
if self._is_exit_request(input_text):
|
|
104
|
+
return {
|
|
105
|
+
"response": f"Goodbye {self.user_name}! Tests passing. Coverage good.",
|
|
106
|
+
"action": "exit",
|
|
107
|
+
"context": context,
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
# Check for chat request
|
|
111
|
+
if self._is_chat_request(input_text):
|
|
112
|
+
return {
|
|
113
|
+
"response": self._process_chat(input_text),
|
|
114
|
+
"action": "chat",
|
|
115
|
+
"context": context,
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
# Check for specific menu item commands
|
|
119
|
+
menu_action = self._parse_menu_command(input_text)
|
|
120
|
+
if menu_action:
|
|
121
|
+
return await self._execute_menu_item(menu_action, input_text, context)
|
|
122
|
+
|
|
123
|
+
# Default: unrecognized command
|
|
124
|
+
return {
|
|
125
|
+
"response": f"Command not recognized. Select menu item or type 'MH'.",
|
|
126
|
+
"action": "unrecognized",
|
|
127
|
+
"context": context,
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
def _is_menu_request(self, input_text: str) -> bool:
|
|
131
|
+
"""Check if input is a menu display request."""
|
|
132
|
+
menu_triggers = ["mh", "menu", "help"]
|
|
133
|
+
return any(trigger in input_text.lower() for trigger in menu_triggers)
|
|
134
|
+
|
|
135
|
+
def _is_exit_request(self, input_text: str) -> bool:
|
|
136
|
+
"""Check if input is an exit request."""
|
|
137
|
+
exit_triggers = ["da", "exit", "leave", "goodbye", "dismiss", "quit"]
|
|
138
|
+
return any(trigger in input_text.lower() for trigger in exit_triggers)
|
|
139
|
+
|
|
140
|
+
def _is_chat_request(self, input_text: str) -> bool:
|
|
141
|
+
"""Check if input is a chat request."""
|
|
142
|
+
chat_triggers = ["ch", "chat"]
|
|
143
|
+
return any(trigger in input_text.lower() for trigger in chat_triggers)
|
|
144
|
+
|
|
145
|
+
def _parse_menu_command(self, input_text: str) -> Optional[str]:
|
|
146
|
+
"""Parse menu command from input text."""
|
|
147
|
+
input_lower = input_text.lower().strip()
|
|
148
|
+
|
|
149
|
+
for item in self.menu_items:
|
|
150
|
+
cmd = item["cmd"].lower()
|
|
151
|
+
label = item["label"].lower()
|
|
152
|
+
|
|
153
|
+
if input_lower == cmd:
|
|
154
|
+
return cmd
|
|
155
|
+
|
|
156
|
+
if cmd in input_lower or any(
|
|
157
|
+
word in label for word in input_lower.split() if len(word) > 2
|
|
158
|
+
):
|
|
159
|
+
return cmd
|
|
160
|
+
|
|
161
|
+
return None
|
|
162
|
+
|
|
163
|
+
async def _execute_menu_item(
|
|
164
|
+
self, command: str, input_text: str, context: Dict[str, Any]
|
|
165
|
+
) -> Dict[str, Any]:
|
|
166
|
+
"""Execute a menu item action."""
|
|
167
|
+
command = command.upper()
|
|
168
|
+
|
|
169
|
+
if command == "QA":
|
|
170
|
+
return {
|
|
171
|
+
"response": self._qa_automate(input_text),
|
|
172
|
+
"action": "qa_automate",
|
|
173
|
+
"context": context,
|
|
174
|
+
}
|
|
175
|
+
elif command == "PM":
|
|
176
|
+
return {
|
|
177
|
+
"response": "š Party Mode! All tests passing. Coverage complete.",
|
|
178
|
+
"action": "party_mode",
|
|
179
|
+
"context": context,
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return {
|
|
183
|
+
"response": f"Command '{command}' not implemented.",
|
|
184
|
+
"action": "not_implemented",
|
|
185
|
+
"context": context,
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
def _get_menu_display(self) -> str:
|
|
189
|
+
"""Generate the menu display."""
|
|
190
|
+
menu = f"š Hi {self.user_name}! I'm {self.name}, your {self.title} {self.icon}\n\n"
|
|
191
|
+
menu += "Here's what I can help you with:\n\n"
|
|
192
|
+
|
|
193
|
+
for i, item in enumerate(self.menu_items, 1):
|
|
194
|
+
menu += f"{i}. [{item['cmd']}] {item['label']}\n"
|
|
195
|
+
menu += f" {item['description']}\n\n"
|
|
196
|
+
|
|
197
|
+
menu += f"\nš” Tip: You can type `/mmm-help` at any time to get advice on what to do next.\n"
|
|
198
|
+
|
|
199
|
+
return menu
|
|
200
|
+
|
|
201
|
+
def _process_chat(self, input_text: str) -> str:
|
|
202
|
+
"""Process a chat request."""
|
|
203
|
+
text = input_text.lower().replace("ch", "").replace("chat", "").strip()
|
|
204
|
+
|
|
205
|
+
if not text:
|
|
206
|
+
return "Ready to generate tests! What would you like me to test?"
|
|
207
|
+
|
|
208
|
+
return (
|
|
209
|
+
f"Input: '{text}'\n\n"
|
|
210
|
+
f"**My Approach:**\n"
|
|
211
|
+
f"- Generate API and E2E tests for existing features\n"
|
|
212
|
+
f"- Use standard test framework patterns (simple and maintainable)\n"
|
|
213
|
+
f"- Focus on happy path + critical edge cases\n"
|
|
214
|
+
f"- Get you covered fast without overthinking\n"
|
|
215
|
+
f"- Generate tests only (use Code Review `CR` for review/validation)\n\n"
|
|
216
|
+
f"**When to use me:**\n"
|
|
217
|
+
f"- Quick test coverage for small-medium projects\n"
|
|
218
|
+
f"- Beginner-friendly test automation\n"
|
|
219
|
+
f"- Standard patterns without advanced utilities\n\n"
|
|
220
|
+
f"**Need more advanced testing?**\n"
|
|
221
|
+
f"For comprehensive test strategy, risk-based planning, quality gates, and enterprise features,\n"
|
|
222
|
+
f"install the Test Architect (TEA) module."
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
def _qa_automate(self, input_text: str) -> str:
|
|
226
|
+
"""Generate tests for existing features."""
|
|
227
|
+
return (
|
|
228
|
+
f"š§Ŗ **Test Generation**\n\n"
|
|
229
|
+
f"I'll generate tests for your existing features using standard test framework patterns.\n\n"
|
|
230
|
+
f"**What I'll Generate:**\n"
|
|
231
|
+
f"- API tests (endpoints, requests, responses)\n"
|
|
232
|
+
f"- E2E tests (user flows, critical paths)\n"
|
|
233
|
+
f"- Unit tests (functions, components)\n"
|
|
234
|
+
f"- Integration tests (component interactions)\n\n"
|
|
235
|
+
f"**My Principles:**\n"
|
|
236
|
+
f"- Never skip running generated tests to verify they pass\n"
|
|
237
|
+
f"- Always use standard test framework APIs (no external utilities)\n"
|
|
238
|
+
f"- Keep tests simple and maintainable\n"
|
|
239
|
+
f"- Focus on realistic user scenarios\n"
|
|
240
|
+
f"- Tests should pass on first run\n\n"
|
|
241
|
+
f"**Test Structure:**\n"
|
|
242
|
+
f"- Arrange-Act-Assert pattern\n"
|
|
243
|
+
f"- Descriptive test names\n"
|
|
244
|
+
f"- Clear setup and teardown\n"
|
|
245
|
+
f"- Proper assertions\n\n"
|
|
246
|
+
f"Provide the code or feature you'd like me to generate tests for!\n\n"
|
|
247
|
+
f"Input: {input_text}"
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
def get_greeting(self) -> str:
|
|
251
|
+
"""Get the agent's greeting message."""
|
|
252
|
+
return self._get_menu_display()
|
|
253
|
+
|
|
254
|
+
def get_capabilities(self) -> List[str]:
|
|
255
|
+
"""Get the agent's capabilities."""
|
|
256
|
+
return self.capabilities
|
|
257
|
+
|
|
258
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
259
|
+
"""Convert agent to dictionary representation."""
|
|
260
|
+
return {
|
|
261
|
+
"name": self.name,
|
|
262
|
+
"title": self.title,
|
|
263
|
+
"icon": self.icon,
|
|
264
|
+
"capabilities": self.capabilities,
|
|
265
|
+
"config": self.config,
|
|
266
|
+
"menu_items": self.menu_items,
|
|
267
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: qa
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: QA Engineer - Pragmatic test automation engineer focused on rapid test coverage
|
|
4
|
+
|
|
5
|
+
prompt: |
|
|
6
|
+
You are Qamar, a QA Engineer.
|
|
7
|
+
|
|
8
|
+
## Role
|
|
9
|
+
Pragmatic test automation engineer focused on rapid test coverage. Specializes in generating tests quickly for existing features using standard test framework patterns. Simpler, more direct approach than the advanced Test Architect module.
|
|
10
|
+
|
|
11
|
+
## Communication Style
|
|
12
|
+
Practical and straightforward. Gets tests written fast without overthinking. 'Ship it and iterate' mentality. Focuses on coverage first, optimization later.
|
|
13
|
+
|
|
14
|
+
## Principles
|
|
15
|
+
- Generate API and E2E tests for implemented code
|
|
16
|
+
- Tests should pass on first run
|
|
17
|
+
- Never skip running the generated tests to verify they pass
|
|
18
|
+
- Always use standard test framework APIs (no external utilities)
|
|
19
|
+
- Keep tests simple and maintainable
|
|
20
|
+
- Focus on realistic user scenarios
|
|
21
|
+
|
|
22
|
+
## Capabilities
|
|
23
|
+
- Test Automation: Generate tests for existing features (simplified)
|
|
24
|
+
- API Testing: Test endpoints, requests, responses
|
|
25
|
+
- E2E Testing: Test user flows and critical paths
|
|
26
|
+
- Coverage Analysis: Ensure comprehensive test coverage
|
|
27
|
+
|
|
28
|
+
## Menu Items
|
|
29
|
+
1. [MH] Redisplay Menu Help - Show this menu
|
|
30
|
+
2. [CH] Chat with the Agent - Chat about anything
|
|
31
|
+
3. [QA] Automate - Generate tests for existing features (simplified)
|
|
32
|
+
4. [PM] Start Party Mode - Start party mode
|
|
33
|
+
5. [DA] Dismiss Agent - Exit the agent
|
|
34
|
+
|
|
35
|
+
## Important Notes
|
|
36
|
+
- Always communicate in the user's preferred language
|
|
37
|
+
- Stay in character until exit is selected
|
|
38
|
+
- Display menu items as dictated and in the order given
|
|
39
|
+
- Load files only when executing a user-chosen workflow or when a command requires it
|
|
40
|
+
- Users can type `/mmm-help` at any time to get advice on what to do next
|
|
41
|
+
|
|
42
|
+
## When Processing User Input
|
|
43
|
+
- Accept number, command trigger, or fuzzy command match
|
|
44
|
+
- Multiple matches ā ask user to clarify
|
|
45
|
+
- No match ā show "Not recognized"
|
|
46
|
+
- Execute menu items based on their type (exec, workflow, data, action)
|
|
47
|
+
|
|
48
|
+
## Test Generation Approach
|
|
49
|
+
- **Standard Patterns**: Use common test framework patterns (Arrange-Act-Assert)
|
|
50
|
+
- **Happy Path**: Test the main success scenarios
|
|
51
|
+
- **Edge Cases**: Test critical edge cases and error conditions
|
|
52
|
+
- **Realistic Scenarios**: Focus on realistic user scenarios
|
|
53
|
+
- **Simple and Maintainable**: Keep tests simple and easy to maintain
|
|
54
|
+
- **No External Utilities**: Use standard test framework APIs only
|
|
55
|
+
|
|
56
|
+
## When to Use This Agent
|
|
57
|
+
- Quick test coverage for small-medium projects
|
|
58
|
+
- Beginner-friendly test automation
|
|
59
|
+
- Standard patterns without advanced utilities
|
|
60
|
+
|
|
61
|
+
## When to Use Test Architect (TEA) Instead
|
|
62
|
+
- Comprehensive test strategy
|
|
63
|
+
- Risk-based planning
|
|
64
|
+
- Quality gates
|
|
65
|
+
- Enterprise features
|
|
66
|
+
|
|
67
|
+
Remember: Generate tests only (use Code Review `CR` for review/validation). Tests should pass on first run.
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Quick Flow Solo Dev Agent
|
|
3
|
+
|
|
4
|
+
An elite full-stack developer who handles Quick Flow - from tech spec creation
|
|
5
|
+
through implementation. Minimum ceremony, lean artifacts, ruthless efficiency.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any, Dict, List, Optional
|
|
9
|
+
import json
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class QuickFlowSoloDevAgent:
|
|
13
|
+
"""
|
|
14
|
+
Quick Flow Solo Dev Agent - Barry
|
|
15
|
+
|
|
16
|
+
Elite full-stack developer who handles Quick Flow - from tech spec creation
|
|
17
|
+
through implementation. Minimum ceremony, lean artifacts, ruthless efficiency.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, config: Optional[Dict[str, Any]] = None):
|
|
21
|
+
"""
|
|
22
|
+
Initialize the Quick Flow Solo Dev Agent.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
config: Optional configuration dictionary containing:
|
|
26
|
+
- user_name: Name of the user
|
|
27
|
+
- communication_language: Language for communication
|
|
28
|
+
- output_folder: Path for output files
|
|
29
|
+
"""
|
|
30
|
+
self.config = config or {}
|
|
31
|
+
self.user_name = self.config.get("user_name", "User")
|
|
32
|
+
self.communication_language = self.config.get(
|
|
33
|
+
"communication_language", "English"
|
|
34
|
+
)
|
|
35
|
+
self.output_folder = self.config.get("output_folder", "./output")
|
|
36
|
+
|
|
37
|
+
# Agent metadata
|
|
38
|
+
self.name = "Barry"
|
|
39
|
+
self.title = "Quick Flow Solo Dev"
|
|
40
|
+
self.icon = "š"
|
|
41
|
+
self.capabilities = [
|
|
42
|
+
"rapid spec creation",
|
|
43
|
+
"lean implementation",
|
|
44
|
+
"minimum ceremony",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
# Menu items
|
|
48
|
+
self.menu_items = [
|
|
49
|
+
{
|
|
50
|
+
"cmd": "MH",
|
|
51
|
+
"label": "Redisplay Menu Help",
|
|
52
|
+
"description": "Show this menu",
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"cmd": "CH",
|
|
56
|
+
"label": "Chat with the Agent",
|
|
57
|
+
"description": "Chat about anything",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"cmd": "QS",
|
|
61
|
+
"label": "Quick Spec",
|
|
62
|
+
"description": "Architect a quick but complete technical spec with implementation-ready stories/specs",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"cmd": "QD",
|
|
66
|
+
"label": "Quick-flow Develop",
|
|
67
|
+
"description": "Implement a story tech spec end-to-end (Core of Quick Flow)",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"cmd": "CR",
|
|
71
|
+
"label": "Code Review",
|
|
72
|
+
"description": "Initiate a comprehensive code review",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"cmd": "PM",
|
|
76
|
+
"label": "Start Party Mode",
|
|
77
|
+
"description": "Start party mode",
|
|
78
|
+
},
|
|
79
|
+
{"cmd": "DA", "label": "Dismiss Agent", "description": "Exit the agent"},
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
async def process(
|
|
83
|
+
self, input_text: str, context: Optional[Dict[str, Any]] = None
|
|
84
|
+
) -> Dict[str, Any]:
|
|
85
|
+
"""
|
|
86
|
+
Process user input and generate a response.
|
|
87
|
+
|
|
88
|
+
Args:
|
|
89
|
+
input_text: The user's input text
|
|
90
|
+
context: Optional context dictionary with additional information
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
Dictionary containing:
|
|
94
|
+
- response: The agent's response text
|
|
95
|
+
- action: Any action to be taken
|
|
96
|
+
- context: Updated context
|
|
97
|
+
"""
|
|
98
|
+
context = context or {}
|
|
99
|
+
|
|
100
|
+
# Check for menu display request
|
|
101
|
+
if self._is_menu_request(input_text):
|
|
102
|
+
return {
|
|
103
|
+
"response": self._get_menu_display(),
|
|
104
|
+
"action": "display_menu",
|
|
105
|
+
"context": context,
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# Check for exit request
|
|
109
|
+
if self._is_exit_request(input_text):
|
|
110
|
+
return {
|
|
111
|
+
"response": f"Later {self.user_name}! Code shipped. Moving on.",
|
|
112
|
+
"action": "exit",
|
|
113
|
+
"context": context,
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
# Check for chat request
|
|
117
|
+
if self._is_chat_request(input_text):
|
|
118
|
+
return {
|
|
119
|
+
"response": self._process_chat(input_text),
|
|
120
|
+
"action": "chat",
|
|
121
|
+
"context": context,
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
# Check for specific menu item commands
|
|
125
|
+
menu_action = self._parse_menu_command(input_text)
|
|
126
|
+
if menu_action:
|
|
127
|
+
return await self._execute_menu_item(menu_action, input_text, context)
|
|
128
|
+
|
|
129
|
+
# Default: unrecognized command
|
|
130
|
+
return {
|
|
131
|
+
"response": f"Command not recognized. Select menu item or type 'MH'.",
|
|
132
|
+
"action": "unrecognized",
|
|
133
|
+
"context": context,
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
def _is_menu_request(self, input_text: str) -> bool:
|
|
137
|
+
"""Check if input is a menu display request."""
|
|
138
|
+
menu_triggers = ["mh", "menu", "help"]
|
|
139
|
+
return any(trigger in input_text.lower() for trigger in menu_triggers)
|
|
140
|
+
|
|
141
|
+
def _is_exit_request(self, input_text: str) -> bool:
|
|
142
|
+
"""Check if input is an exit request."""
|
|
143
|
+
exit_triggers = ["da", "exit", "leave", "goodbye", "dismiss", "quit"]
|
|
144
|
+
return any(trigger in input_text.lower() for trigger in exit_triggers)
|
|
145
|
+
|
|
146
|
+
def _is_chat_request(self, input_text: str) -> bool:
|
|
147
|
+
"""Check if input is a chat request."""
|
|
148
|
+
chat_triggers = ["ch", "chat"]
|
|
149
|
+
return any(trigger in input_text.lower() for trigger in chat_triggers)
|
|
150
|
+
|
|
151
|
+
def _parse_menu_command(self, input_text: str) -> Optional[str]:
|
|
152
|
+
"""Parse menu command from input text."""
|
|
153
|
+
input_lower = input_text.lower().strip()
|
|
154
|
+
|
|
155
|
+
for item in self.menu_items:
|
|
156
|
+
cmd = item["cmd"].lower()
|
|
157
|
+
label = item["label"].lower()
|
|
158
|
+
|
|
159
|
+
if input_lower == cmd:
|
|
160
|
+
return cmd
|
|
161
|
+
|
|
162
|
+
if cmd in input_lower or any(
|
|
163
|
+
word in label for word in input_lower.split() if len(word) > 2
|
|
164
|
+
):
|
|
165
|
+
return cmd
|
|
166
|
+
|
|
167
|
+
return None
|
|
168
|
+
|
|
169
|
+
async def _execute_menu_item(
|
|
170
|
+
self, command: str, input_text: str, context: Dict[str, Any]
|
|
171
|
+
) -> Dict[str, Any]:
|
|
172
|
+
"""Execute a menu item action."""
|
|
173
|
+
command = command.upper()
|
|
174
|
+
|
|
175
|
+
if command == "QS":
|
|
176
|
+
return {
|
|
177
|
+
"response": self._quick_spec(input_text),
|
|
178
|
+
"action": "quick_spec",
|
|
179
|
+
"context": context,
|
|
180
|
+
}
|
|
181
|
+
elif command == "QD":
|
|
182
|
+
return {
|
|
183
|
+
"response": self._quick_dev(input_text),
|
|
184
|
+
"action": "quick_dev",
|
|
185
|
+
"context": context,
|
|
186
|
+
}
|
|
187
|
+
elif command == "CR":
|
|
188
|
+
return {
|
|
189
|
+
"response": self._code_review(input_text),
|
|
190
|
+
"action": "code_review",
|
|
191
|
+
"context": context,
|
|
192
|
+
}
|
|
193
|
+
elif command == "PM":
|
|
194
|
+
return {
|
|
195
|
+
"response": "š Party Mode! Shipped it. Next!",
|
|
196
|
+
"action": "party_mode",
|
|
197
|
+
"context": context,
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return {
|
|
201
|
+
"response": f"Command '{command}' not implemented.",
|
|
202
|
+
"action": "not_implemented",
|
|
203
|
+
"context": context,
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
def _get_menu_display(self) -> str:
|
|
207
|
+
"""Generate the menu display."""
|
|
208
|
+
menu = f"š {self.user_name}. I'm {self.name}, {self.title} {self.icon}\n\n"
|
|
209
|
+
menu += "Menu:\n\n"
|
|
210
|
+
|
|
211
|
+
for i, item in enumerate(self.menu_items, 1):
|
|
212
|
+
menu += f"{i}. [{item['cmd']}] {item['label']}\n"
|
|
213
|
+
menu += f" {item['description']}\n\n"
|
|
214
|
+
|
|
215
|
+
menu += f"\nš” Type `/mmm-help` for advice.\n"
|
|
216
|
+
|
|
217
|
+
return menu
|
|
218
|
+
|
|
219
|
+
def _process_chat(self, input_text: str) -> str:
|
|
220
|
+
"""Process a chat request."""
|
|
221
|
+
text = input_text.lower().replace("ch", "").replace("chat", "").strip()
|
|
222
|
+
|
|
223
|
+
if not text:
|
|
224
|
+
return "Ready to ship. What needs building?"
|
|
225
|
+
|
|
226
|
+
return (
|
|
227
|
+
f"Input: '{text}'\n\n"
|
|
228
|
+
f"**Quick Flow Approach:**\n"
|
|
229
|
+
f"- Planning and execution are two sides of the same coin\n"
|
|
230
|
+
f"- Specs are for building, not bureaucracy\n"
|
|
231
|
+
f"- Code that ships is better than perfect code that doesn't\n"
|
|
232
|
+
f"- Minimum ceremony, lean artifacts, ruthless efficiency\n\n"
|
|
233
|
+
f"**My Process:**\n"
|
|
234
|
+
f"1. Quick Spec: Architect a complete technical spec\n"
|
|
235
|
+
f"2. Quick Dev: Implement end-to-end\n"
|
|
236
|
+
f"3. Ship it\n\n"
|
|
237
|
+
f"Let's get this built. What's the feature?"
|
|
238
|
+
)
|
|
239
|
+
|
|
240
|
+
def _quick_spec(self, input_text: str) -> str:
|
|
241
|
+
"""Create a quick technical spec."""
|
|
242
|
+
return (
|
|
243
|
+
f"š **Quick Spec Creation**\n\n"
|
|
244
|
+
f"I'll architect a quick but complete technical spec with implementation-ready stories/specs.\n\n"
|
|
245
|
+
f"**Spec Structure:**\n"
|
|
246
|
+
f"- Feature Overview\n"
|
|
247
|
+
f"- Technical Approach\n"
|
|
248
|
+
f"- Architecture Decisions\n"
|
|
249
|
+
f"- Implementation Stories\n"
|
|
250
|
+
f"- Acceptance Criteria\n"
|
|
251
|
+
f"- Testing Strategy\n\n"
|
|
252
|
+
f"**My Principles:**\n"
|
|
253
|
+
f"- Planning and execution are two sides of the same coin\n"
|
|
254
|
+
f"- Specs are for building, not bureaucracy\n"
|
|
255
|
+
f"- Code that ships is better than perfect code that doesn't\n"
|
|
256
|
+
f"- Minimum ceremony, lean artifacts, ruthless efficiency\n\n"
|
|
257
|
+
f"Describe the feature, and I'll create a complete spec ready for implementation!\n\n"
|
|
258
|
+
f"Input: {input_text}"
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
def _quick_dev(self, input_text: str) -> str:
|
|
262
|
+
"""Implement a story tech spec end-to-end."""
|
|
263
|
+
return (
|
|
264
|
+
f"š» **Quick Flow Development**\n\n"
|
|
265
|
+
f"I'll implement a story tech spec end-to-end. This is the core of Quick Flow.\n\n"
|
|
266
|
+
f"**Development Process:**\n"
|
|
267
|
+
f"1. Read the story spec\n"
|
|
268
|
+
f"2. Implement the feature\n"
|
|
269
|
+
f"3. Write tests\n"
|
|
270
|
+
f"4. Verify everything works\n"
|
|
271
|
+
f"5. Ship it\n\n"
|
|
272
|
+
f"**My Approach:**\n"
|
|
273
|
+
f"- Direct, confident, implementation-focused\n"
|
|
274
|
+
f"- Uses tech slang (refactor, patch, extract, spike)\n"
|
|
275
|
+
f"- Gets straight to the point\n"
|
|
276
|
+
f"- No fluff, just results\n"
|
|
277
|
+
f"- Stays focused on the task at hand\n\n"
|
|
278
|
+
f"Provide the story spec, and I'll implement it end-to-end!\n\n"
|
|
279
|
+
f"Input: {input_text}"
|
|
280
|
+
)
|
|
281
|
+
|
|
282
|
+
def _code_review(self, input_text: str) -> str:
|
|
283
|
+
"""Perform code review."""
|
|
284
|
+
return (
|
|
285
|
+
f"š **Code Review**\n\n"
|
|
286
|
+
f"I'll initiate a comprehensive code review across multiple quality facets.\n\n"
|
|
287
|
+
f"**Review Facets:**\n"
|
|
288
|
+
f"- Correctness\n"
|
|
289
|
+
f"- Security\n"
|
|
290
|
+
f"- Performance\n"
|
|
291
|
+
f"- Maintainability\n"
|
|
292
|
+
f"- Test coverage\n"
|
|
293
|
+
f"- Code style\n"
|
|
294
|
+
f"- Documentation\n\n"
|
|
295
|
+
f"**Best Results:**\n"
|
|
296
|
+
f"- Use fresh context\n"
|
|
297
|
+
f"- Use different quality LLM if available\n\n"
|
|
298
|
+
f"Provide code paths or PR for review.\n\n"
|
|
299
|
+
f"Input: {input_text}"
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
def get_greeting(self) -> str:
|
|
303
|
+
"""Get the agent's greeting message."""
|
|
304
|
+
return self._get_menu_display()
|
|
305
|
+
|
|
306
|
+
def get_capabilities(self) -> List[str]:
|
|
307
|
+
"""Get the agent's capabilities."""
|
|
308
|
+
return self.capabilities
|
|
309
|
+
|
|
310
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
311
|
+
"""Convert agent to dictionary representation."""
|
|
312
|
+
return {
|
|
313
|
+
"name": self.name,
|
|
314
|
+
"title": self.title,
|
|
315
|
+
"icon": self.icon,
|
|
316
|
+
"capabilities": self.capabilities,
|
|
317
|
+
"config": self.config,
|
|
318
|
+
"menu_items": self.menu_items,
|
|
319
|
+
}
|