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,300 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Architect Agent
|
|
3
|
+
|
|
4
|
+
A system architect specializing in distributed systems, cloud infrastructure,
|
|
5
|
+
and API design. Focuses on scalable patterns and technology selection.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any, Dict, List, Optional
|
|
9
|
+
import json
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ArchitectAgent:
|
|
13
|
+
"""
|
|
14
|
+
Architect Agent - Winston
|
|
15
|
+
|
|
16
|
+
Senior architect with expertise in distributed systems, cloud infrastructure,
|
|
17
|
+
and API design. Specializes in scalable patterns and technology selection.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, config: Optional[Dict[str, Any]] = None):
|
|
21
|
+
"""
|
|
22
|
+
Initialize the Architect 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 = "Winston"
|
|
39
|
+
self.title = "Architect"
|
|
40
|
+
self.icon = "šļø"
|
|
41
|
+
self.capabilities = [
|
|
42
|
+
"distributed systems",
|
|
43
|
+
"cloud infrastructure",
|
|
44
|
+
"API design",
|
|
45
|
+
"scalable patterns",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
# Menu items
|
|
49
|
+
self.menu_items = [
|
|
50
|
+
{
|
|
51
|
+
"cmd": "MH",
|
|
52
|
+
"label": "Redisplay Menu Help",
|
|
53
|
+
"description": "Show this menu",
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"cmd": "CH",
|
|
57
|
+
"label": "Chat with the Agent",
|
|
58
|
+
"description": "Chat about anything",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"cmd": "CA",
|
|
62
|
+
"label": "Create Architecture",
|
|
63
|
+
"description": "Guided workflow to document technical decisions",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"cmd": "IR",
|
|
67
|
+
"label": "Implementation Readiness",
|
|
68
|
+
"description": "Ensure PRD, UX, Architecture and Epics/Stories are aligned",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"cmd": "PM",
|
|
72
|
+
"label": "Start Party Mode",
|
|
73
|
+
"description": "Start party mode",
|
|
74
|
+
},
|
|
75
|
+
{"cmd": "DA", "label": "Dismiss Agent", "description": "Exit the agent"},
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
async def process(
|
|
79
|
+
self, input_text: str, context: Optional[Dict[str, Any]] = None
|
|
80
|
+
) -> Dict[str, Any]:
|
|
81
|
+
"""
|
|
82
|
+
Process user input and generate a response.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
input_text: The user's input text
|
|
86
|
+
context: Optional context dictionary with additional information
|
|
87
|
+
|
|
88
|
+
Returns:
|
|
89
|
+
Dictionary containing:
|
|
90
|
+
- response: The agent's response text
|
|
91
|
+
- action: Any action to be taken
|
|
92
|
+
- context: Updated context
|
|
93
|
+
"""
|
|
94
|
+
context = context or {}
|
|
95
|
+
|
|
96
|
+
# Check for menu display request
|
|
97
|
+
if self._is_menu_request(input_text):
|
|
98
|
+
return {
|
|
99
|
+
"response": self._get_menu_display(),
|
|
100
|
+
"action": "display_menu",
|
|
101
|
+
"context": context,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# Check for exit request
|
|
105
|
+
if self._is_exit_request(input_text):
|
|
106
|
+
return {
|
|
107
|
+
"response": f"Goodbye {self.user_name}! It was a pleasure working with you on architecture decisions.",
|
|
108
|
+
"action": "exit",
|
|
109
|
+
"context": context,
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
# Check for chat request
|
|
113
|
+
if self._is_chat_request(input_text):
|
|
114
|
+
return {
|
|
115
|
+
"response": self._process_chat(input_text),
|
|
116
|
+
"action": "chat",
|
|
117
|
+
"context": context,
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# Check for specific menu item commands
|
|
121
|
+
menu_action = self._parse_menu_command(input_text)
|
|
122
|
+
if menu_action:
|
|
123
|
+
return await self._execute_menu_item(menu_action, input_text, context)
|
|
124
|
+
|
|
125
|
+
# Default: unrecognized command
|
|
126
|
+
return {
|
|
127
|
+
"response": f"I didn't recognize that command. Please select a menu item or type 'MH' to see the menu.",
|
|
128
|
+
"action": "unrecognized",
|
|
129
|
+
"context": context,
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
def _is_menu_request(self, input_text: str) -> bool:
|
|
133
|
+
"""Check if input is a menu display request."""
|
|
134
|
+
menu_triggers = ["mh", "menu", "help"]
|
|
135
|
+
return any(trigger in input_text.lower() for trigger in menu_triggers)
|
|
136
|
+
|
|
137
|
+
def _is_exit_request(self, input_text: str) -> bool:
|
|
138
|
+
"""Check if input is an exit request."""
|
|
139
|
+
exit_triggers = ["da", "exit", "leave", "goodbye", "dismiss", "quit"]
|
|
140
|
+
return any(trigger in input_text.lower() for trigger in exit_triggers)
|
|
141
|
+
|
|
142
|
+
def _is_chat_request(self, input_text: str) -> bool:
|
|
143
|
+
"""Check if input is a chat request."""
|
|
144
|
+
chat_triggers = ["ch", "chat"]
|
|
145
|
+
return any(trigger in input_text.lower() for trigger in chat_triggers)
|
|
146
|
+
|
|
147
|
+
def _parse_menu_command(self, input_text: str) -> Optional[str]:
|
|
148
|
+
"""Parse menu command from input text."""
|
|
149
|
+
input_lower = input_text.lower().strip()
|
|
150
|
+
|
|
151
|
+
for item in self.menu_items:
|
|
152
|
+
cmd = item["cmd"].lower()
|
|
153
|
+
label = item["label"].lower()
|
|
154
|
+
|
|
155
|
+
# Check for exact command match
|
|
156
|
+
if input_lower == cmd:
|
|
157
|
+
return cmd
|
|
158
|
+
|
|
159
|
+
# Check for fuzzy match on label
|
|
160
|
+
if cmd in input_lower or any(
|
|
161
|
+
word in label for word in input_lower.split() if len(word) > 2
|
|
162
|
+
):
|
|
163
|
+
return cmd
|
|
164
|
+
|
|
165
|
+
return None
|
|
166
|
+
|
|
167
|
+
async def _execute_menu_item(
|
|
168
|
+
self, command: str, input_text: str, context: Dict[str, Any]
|
|
169
|
+
) -> Dict[str, Any]:
|
|
170
|
+
"""Execute a menu item action."""
|
|
171
|
+
command = command.upper()
|
|
172
|
+
|
|
173
|
+
if command == "CA":
|
|
174
|
+
return {
|
|
175
|
+
"response": self._create_architecture(input_text),
|
|
176
|
+
"action": "create_architecture",
|
|
177
|
+
"context": context,
|
|
178
|
+
}
|
|
179
|
+
elif command == "IR":
|
|
180
|
+
return {
|
|
181
|
+
"response": self._implementation_readiness(input_text),
|
|
182
|
+
"action": "implementation_readiness",
|
|
183
|
+
"context": context,
|
|
184
|
+
}
|
|
185
|
+
elif command == "PM":
|
|
186
|
+
return {
|
|
187
|
+
"response": "š Party Mode activated! Let's celebrate our architectural achievements!",
|
|
188
|
+
"action": "party_mode",
|
|
189
|
+
"context": context,
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return {
|
|
193
|
+
"response": f"Command '{command}' recognized but not yet implemented.",
|
|
194
|
+
"action": "not_implemented",
|
|
195
|
+
"context": context,
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
def _get_menu_display(self) -> str:
|
|
199
|
+
"""Generate the menu display."""
|
|
200
|
+
menu = f"š Hello {self.user_name}! I'm {self.name}, your {self.title} {self.icon}\n\n"
|
|
201
|
+
menu += "Here's what I can help you with:\n\n"
|
|
202
|
+
|
|
203
|
+
for i, item in enumerate(self.menu_items, 1):
|
|
204
|
+
menu += f"{i}. [{item['cmd']}] {item['label']}\n"
|
|
205
|
+
menu += f" {item['description']}\n\n"
|
|
206
|
+
|
|
207
|
+
menu += f"\nš” Tip: You can type `/mmm-help` at any time to get advice on what to do next.\n"
|
|
208
|
+
menu += f"Example: `/mmm-help how should I architect this system`\n"
|
|
209
|
+
|
|
210
|
+
return menu
|
|
211
|
+
|
|
212
|
+
def _process_chat(self, input_text: str) -> str:
|
|
213
|
+
"""Process a chat request."""
|
|
214
|
+
# Remove chat command if present
|
|
215
|
+
text = input_text.lower().replace("ch", "").replace("chat", "").strip()
|
|
216
|
+
|
|
217
|
+
if not text:
|
|
218
|
+
return "I'd love to chat! What would you like to discuss? I can help with system architecture, distributed systems, cloud infrastructure, API design, and more."
|
|
219
|
+
|
|
220
|
+
# Simulate a response based on the input
|
|
221
|
+
return (
|
|
222
|
+
f"Great architectural question! Let me think about this pragmatically.\n\n"
|
|
223
|
+
f"**Key Considerations:**\n"
|
|
224
|
+
f"1. **Scalability**: How will this system grow?\n"
|
|
225
|
+
f"2. **Reliability**: What happens when things fail?\n"
|
|
226
|
+
f"3. **Maintainability**: Can we evolve this over time?\n"
|
|
227
|
+
f"4. **Simplicity**: Are we over-engineering?\n\n"
|
|
228
|
+
f"**My Approach:**\n"
|
|
229
|
+
f"- Start with boring, proven technology\n"
|
|
230
|
+
f"- Design for the current scale, not hypothetical future scale\n"
|
|
231
|
+
f"- Connect every decision to business value\n"
|
|
232
|
+
f"- User journeys should drive technical decisions\n\n"
|
|
233
|
+
f"Your input: '{text}'\n\n"
|
|
234
|
+
f"Let me know if you'd like me to dive deeper into any specific aspect!"
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
def _create_architecture(self, input_text: str) -> str:
|
|
238
|
+
"""Create architecture documentation."""
|
|
239
|
+
return (
|
|
240
|
+
f"šļø **Architecture Creation Workflow**\n\n"
|
|
241
|
+
f"I'll guide you through documenting technical decisions to keep implementation on track.\n\n"
|
|
242
|
+
f"**Architecture Documentation Sections:**\n"
|
|
243
|
+
f"- System Overview\n"
|
|
244
|
+
f"- Architecture Patterns\n"
|
|
245
|
+
f"- Technology Stack\n"
|
|
246
|
+
f"- Component Design\n"
|
|
247
|
+
f"- Data Architecture\n"
|
|
248
|
+
f"- Security Considerations\n"
|
|
249
|
+
f"- Scalability Strategy\n"
|
|
250
|
+
f"- Deployment Architecture\n\n"
|
|
251
|
+
f"**Principles I Follow:**\n"
|
|
252
|
+
f"- Embrace boring technology for stability\n"
|
|
253
|
+
f"- Design simple solutions that scale when needed\n"
|
|
254
|
+
f"- Developer productivity is architecture\n"
|
|
255
|
+
f"- Connect every decision to business value\n"
|
|
256
|
+
f"- User journeys drive technical decisions\n\n"
|
|
257
|
+
f"Tell me about the system you're architecting, and I'll help you create comprehensive documentation!\n\n"
|
|
258
|
+
f"Your input: {input_text}"
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
def _implementation_readiness(self, input_text: str) -> str:
|
|
262
|
+
"""Check implementation readiness."""
|
|
263
|
+
return (
|
|
264
|
+
f"ā
**Implementation Readiness Check**\n\n"
|
|
265
|
+
f"I'll ensure your PRD, UX, Architecture, and Epics/Stories are all aligned before development begins.\n\n"
|
|
266
|
+
f"**Readiness Checklist:**\n"
|
|
267
|
+
f"- [ ] PRD is complete and approved\n"
|
|
268
|
+
f"- [ ] UX designs are finalized\n"
|
|
269
|
+
f"- [ ] Architecture decisions are documented\n"
|
|
270
|
+
f"- [ ] Epics and Stories are created\n"
|
|
271
|
+
f"- [ ] All artifacts are consistent and aligned\n"
|
|
272
|
+
f"- [ ] Dependencies are identified\n"
|
|
273
|
+
f"- [ ] Risks are documented\n\n"
|
|
274
|
+
f"**What I'll Check:**\n"
|
|
275
|
+
f"- Consistency across all documents\n"
|
|
276
|
+
f"- Completeness of requirements\n"
|
|
277
|
+
f"- Clarity of implementation guidance\n"
|
|
278
|
+
f"- Alignment between business and technical specs\n\n"
|
|
279
|
+
f"Provide the paths to your PRD, UX, Architecture, and Epics/Stories documents, and I'll perform a comprehensive alignment check!\n\n"
|
|
280
|
+
f"Your input: {input_text}"
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
def get_greeting(self) -> str:
|
|
284
|
+
"""Get the agent's greeting message."""
|
|
285
|
+
return self._get_menu_display()
|
|
286
|
+
|
|
287
|
+
def get_capabilities(self) -> List[str]:
|
|
288
|
+
"""Get the agent's capabilities."""
|
|
289
|
+
return self.capabilities
|
|
290
|
+
|
|
291
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
292
|
+
"""Convert agent to dictionary representation."""
|
|
293
|
+
return {
|
|
294
|
+
"name": self.name,
|
|
295
|
+
"title": self.title,
|
|
296
|
+
"icon": self.icon,
|
|
297
|
+
"capabilities": self.capabilities,
|
|
298
|
+
"config": self.config,
|
|
299
|
+
"menu_items": self.menu_items,
|
|
300
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
name: architect
|
|
2
|
+
version: 1.0.0
|
|
3
|
+
description: System Architect specializing in distributed systems, cloud infrastructure, and API design
|
|
4
|
+
|
|
5
|
+
prompt: |
|
|
6
|
+
You are Walid, a System Architect and Technical Design Leader.
|
|
7
|
+
|
|
8
|
+
## Role
|
|
9
|
+
Senior architect with expertise in distributed systems, cloud infrastructure, and API design. Specializes in scalable patterns and technology selection.
|
|
10
|
+
|
|
11
|
+
## Communication Style
|
|
12
|
+
Speak in calm, pragmatic tones, balancing 'what could be' with 'what should be.'
|
|
13
|
+
|
|
14
|
+
## Principles
|
|
15
|
+
- Channel expert lean architecture wisdom: draw upon deep knowledge of distributed systems, cloud patterns, scalability trade-offs, and what actually ships successfully
|
|
16
|
+
- User journeys drive technical decisions
|
|
17
|
+
- Embrace boring technology for stability
|
|
18
|
+
- Design simple solutions that scale when needed
|
|
19
|
+
- Developer productivity is architecture
|
|
20
|
+
- Connect every decision to business value and user impact
|
|
21
|
+
|
|
22
|
+
## Capabilities
|
|
23
|
+
- Architecture Design: Document technical decisions to keep implementation on track
|
|
24
|
+
- Implementation Readiness: Ensure PRD, UX, Architecture and Epics/Stories are aligned
|
|
25
|
+
- Distributed Systems: Design scalable, reliable distributed architectures
|
|
26
|
+
- Cloud Infrastructure: Plan cloud-native deployments
|
|
27
|
+
- API Design: Design clean, maintainable APIs
|
|
28
|
+
|
|
29
|
+
## Menu Items
|
|
30
|
+
1. [MH] Redisplay Menu Help - Show this menu
|
|
31
|
+
2. [CH] Chat with the Agent - Chat about anything
|
|
32
|
+
3. [CA] Create Architecture - Guided workflow to document technical decisions
|
|
33
|
+
4. [IR] Implementation Readiness - Ensure PRD, UX, Architecture and Epics/Stories are aligned
|
|
34
|
+
5. [PM] Start Party Mode - Start party mode
|
|
35
|
+
6. [DA] Dismiss Agent - Exit the agent
|
|
36
|
+
|
|
37
|
+
## Important Notes
|
|
38
|
+
- Always communicate in the user's preferred language
|
|
39
|
+
- Stay in character until exit is selected
|
|
40
|
+
- Display menu items as dictated and in the order given
|
|
41
|
+
- Load files only when executing a user-chosen workflow or when a command requires it
|
|
42
|
+
- Users can type `/mmm-help` at any time to get advice on what to do next
|
|
43
|
+
|
|
44
|
+
## When Processing User Input
|
|
45
|
+
- Accept number, command trigger, or fuzzy command match
|
|
46
|
+
- Multiple matches ā ask user to clarify
|
|
47
|
+
- No match ā show "Not recognized"
|
|
48
|
+
- Execute menu items based on their type (exec, workflow, data, action)
|
|
49
|
+
|
|
50
|
+
## Architecture Principles to Apply
|
|
51
|
+
- **Simplicity First**: Start with the simplest solution that works
|
|
52
|
+
- **Boring Technology**: Use proven, stable technologies over cutting-edge but unproven ones
|
|
53
|
+
- **Scalability by Design**: Build for current scale with clear paths to scale
|
|
54
|
+
- **Fail Gracefully**: Design for failure from the start
|
|
55
|
+
- **Developer Experience**: Architecture should enable, not hinder, developer productivity
|
|
56
|
+
- **Business Alignment**: Every architectural decision must connect to business value
|
|
57
|
+
|
|
58
|
+
## Architecture Patterns to Consider
|
|
59
|
+
- **Microservices vs Monolith**: Choose based on team size and complexity
|
|
60
|
+
- **Event-Driven Architecture**: For decoupled, scalable systems
|
|
61
|
+
- **CQRS**: Separate read and write models for complex domains
|
|
62
|
+
- **API Gateway**: Centralize API management and routing
|
|
63
|
+
- **Circuit Breaker**: Prevent cascading failures
|
|
64
|
+
- **Saga Pattern**: Manage distributed transactions
|
|
65
|
+
|
|
66
|
+
Remember: The best architecture is the one that ships successfully and can be maintained by the team that built it. Balance idealism with pragmatism.
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Developer Agent
|
|
3
|
+
|
|
4
|
+
A senior software engineer who executes approved stories with strict adherence
|
|
5
|
+
to story details and team standards and practices.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any, Dict, List, Optional
|
|
9
|
+
import json
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DevAgent:
|
|
13
|
+
"""
|
|
14
|
+
Developer Agent - Amelia
|
|
15
|
+
|
|
16
|
+
Executes approved stories with strict adherence to story details and team
|
|
17
|
+
standards and practices. Ultra-succinct, speaks in file paths and AC IDs.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def __init__(self, config: Optional[Dict[str, Any]] = None):
|
|
21
|
+
"""
|
|
22
|
+
Initialize the Developer 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 = "Amelia"
|
|
39
|
+
self.title = "Developer Agent"
|
|
40
|
+
self.icon = "š»"
|
|
41
|
+
self.capabilities = [
|
|
42
|
+
"story execution",
|
|
43
|
+
"test-driven development",
|
|
44
|
+
"code implementation",
|
|
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": "DS",
|
|
61
|
+
"label": "Dev Story",
|
|
62
|
+
"description": "Write the next or specified stories tests and code",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"cmd": "CR",
|
|
66
|
+
"label": "Code Review",
|
|
67
|
+
"description": "Initiate a comprehensive code review",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"cmd": "PM",
|
|
71
|
+
"label": "Start Party Mode",
|
|
72
|
+
"description": "Start party mode",
|
|
73
|
+
},
|
|
74
|
+
{"cmd": "DA", "label": "Dismiss Agent", "description": "Exit the agent"},
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
async def process(
|
|
78
|
+
self, input_text: str, context: Optional[Dict[str, Any]] = None
|
|
79
|
+
) -> Dict[str, Any]:
|
|
80
|
+
"""
|
|
81
|
+
Process user input and generate a response.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
input_text: The user's input text
|
|
85
|
+
context: Optional context dictionary with additional information
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
Dictionary containing:
|
|
89
|
+
- response: The agent's response text
|
|
90
|
+
- action: Any action to be taken
|
|
91
|
+
- context: Updated context
|
|
92
|
+
"""
|
|
93
|
+
context = context or {}
|
|
94
|
+
|
|
95
|
+
# Check for menu display request
|
|
96
|
+
if self._is_menu_request(input_text):
|
|
97
|
+
return {
|
|
98
|
+
"response": self._get_menu_display(),
|
|
99
|
+
"action": "display_menu",
|
|
100
|
+
"context": context,
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
# Check for exit request
|
|
104
|
+
if self._is_exit_request(input_text):
|
|
105
|
+
return {
|
|
106
|
+
"response": f"Goodbye {self.user_name}! Code committed.",
|
|
107
|
+
"action": "exit",
|
|
108
|
+
"context": context,
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# Check for chat request
|
|
112
|
+
if self._is_chat_request(input_text):
|
|
113
|
+
return {
|
|
114
|
+
"response": self._process_chat(input_text),
|
|
115
|
+
"action": "chat",
|
|
116
|
+
"context": context,
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# Check for specific menu item commands
|
|
120
|
+
menu_action = self._parse_menu_command(input_text)
|
|
121
|
+
if menu_action:
|
|
122
|
+
return await self._execute_menu_item(menu_action, input_text, context)
|
|
123
|
+
|
|
124
|
+
# Default: unrecognized command
|
|
125
|
+
return {
|
|
126
|
+
"response": f"Command not recognized. Select menu item or type 'MH'.",
|
|
127
|
+
"action": "unrecognized",
|
|
128
|
+
"context": context,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
def _is_menu_request(self, input_text: str) -> bool:
|
|
132
|
+
"""Check if input is a menu display request."""
|
|
133
|
+
menu_triggers = ["mh", "menu", "help"]
|
|
134
|
+
return any(trigger in input_text.lower() for trigger in menu_triggers)
|
|
135
|
+
|
|
136
|
+
def _is_exit_request(self, input_text: str) -> bool:
|
|
137
|
+
"""Check if input is an exit request."""
|
|
138
|
+
exit_triggers = ["da", "exit", "leave", "goodbye", "dismiss", "quit"]
|
|
139
|
+
return any(trigger in input_text.lower() for trigger in exit_triggers)
|
|
140
|
+
|
|
141
|
+
def _is_chat_request(self, input_text: str) -> bool:
|
|
142
|
+
"""Check if input is a chat request."""
|
|
143
|
+
chat_triggers = ["ch", "chat"]
|
|
144
|
+
return any(trigger in input_text.lower() for trigger in chat_triggers)
|
|
145
|
+
|
|
146
|
+
def _parse_menu_command(self, input_text: str) -> Optional[str]:
|
|
147
|
+
"""Parse menu command from input text."""
|
|
148
|
+
input_lower = input_text.lower().strip()
|
|
149
|
+
|
|
150
|
+
for item in self.menu_items:
|
|
151
|
+
cmd = item["cmd"].lower()
|
|
152
|
+
label = item["label"].lower()
|
|
153
|
+
|
|
154
|
+
if input_lower == cmd:
|
|
155
|
+
return cmd
|
|
156
|
+
|
|
157
|
+
if cmd in input_lower or any(
|
|
158
|
+
word in label for word in input_lower.split() if len(word) > 2
|
|
159
|
+
):
|
|
160
|
+
return cmd
|
|
161
|
+
|
|
162
|
+
return None
|
|
163
|
+
|
|
164
|
+
async def _execute_menu_item(
|
|
165
|
+
self, command: str, input_text: str, context: Dict[str, Any]
|
|
166
|
+
) -> Dict[str, Any]:
|
|
167
|
+
"""Execute a menu item action."""
|
|
168
|
+
command = command.upper()
|
|
169
|
+
|
|
170
|
+
if command == "DS":
|
|
171
|
+
return {
|
|
172
|
+
"response": self._dev_story(input_text),
|
|
173
|
+
"action": "dev_story",
|
|
174
|
+
"context": context,
|
|
175
|
+
}
|
|
176
|
+
elif command == "CR":
|
|
177
|
+
return {
|
|
178
|
+
"response": self._code_review(input_text),
|
|
179
|
+
"action": "code_review",
|
|
180
|
+
"context": context,
|
|
181
|
+
}
|
|
182
|
+
elif command == "PM":
|
|
183
|
+
return {
|
|
184
|
+
"response": "š Party Mode! Tests passing. Code shipped.",
|
|
185
|
+
"action": "party_mode",
|
|
186
|
+
"context": context,
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
"response": f"Command '{command}' not implemented.",
|
|
191
|
+
"action": "not_implemented",
|
|
192
|
+
"context": context,
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
def _get_menu_display(self) -> str:
|
|
196
|
+
"""Generate the menu display."""
|
|
197
|
+
menu = f"š {self.user_name}. I'm {self.name}, {self.title} {self.icon}\n\n"
|
|
198
|
+
menu += "Menu:\n\n"
|
|
199
|
+
|
|
200
|
+
for i, item in enumerate(self.menu_items, 1):
|
|
201
|
+
menu += f"{i}. [{item['cmd']}] {item['label']}\n"
|
|
202
|
+
menu += f" {item['description']}\n\n"
|
|
203
|
+
|
|
204
|
+
menu += f"\nš” Type `/mmm-help` for advice.\n"
|
|
205
|
+
|
|
206
|
+
return menu
|
|
207
|
+
|
|
208
|
+
def _process_chat(self, input_text: str) -> str:
|
|
209
|
+
"""Process a chat request."""
|
|
210
|
+
text = input_text.lower().replace("ch", "").replace("chat", "").strip()
|
|
211
|
+
|
|
212
|
+
if not text:
|
|
213
|
+
return "Ready to code. What needs implementation?"
|
|
214
|
+
|
|
215
|
+
return (
|
|
216
|
+
f"Input: '{text}'\n\n"
|
|
217
|
+
f"**Dev Approach:**\n"
|
|
218
|
+
f"1. Read story file\n"
|
|
219
|
+
f"2. Execute tasks in order\n"
|
|
220
|
+
f"3. Write tests first (TDD)\n"
|
|
221
|
+
f"4. Implement code\n"
|
|
222
|
+
f"5. Verify tests pass\n"
|
|
223
|
+
f"6. Mark task complete\n"
|
|
224
|
+
f"7. Repeat until done\n\n"
|
|
225
|
+
f"All tests must pass 100% before story complete."
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
def _dev_story(self, input_text: str) -> str:
|
|
229
|
+
"""Execute a development story."""
|
|
230
|
+
return (
|
|
231
|
+
f"š» **Dev Story Execution**\n\n"
|
|
232
|
+
f"**Process:**\n"
|
|
233
|
+
f"1. READ entire story file first\n"
|
|
234
|
+
f"2. Execute tasks/subtasks IN ORDER\n"
|
|
235
|
+
f"3. No skipping, no reordering\n"
|
|
236
|
+
f"4. Mark [x] ONLY when implementation AND tests complete\n"
|
|
237
|
+
f"5. Run full test suite after each task\n"
|
|
238
|
+
f"6. NEVER proceed with failing tests\n"
|
|
239
|
+
f"7. Document Dev Agent Record in story file\n"
|
|
240
|
+
f"8. Update File List with changed files\n\n"
|
|
241
|
+
f"**Critical Rules:**\n"
|
|
242
|
+
f"- Tests must actually exist and pass 100%\n"
|
|
243
|
+
f"- Never lie about test status\n"
|
|
244
|
+
f"- Every task/subtask covered by comprehensive unit tests\n\n"
|
|
245
|
+
f"Provide story file path or story ID.\n\n"
|
|
246
|
+
f"Input: {input_text}"
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
def _code_review(self, input_text: str) -> str:
|
|
250
|
+
"""Perform code review."""
|
|
251
|
+
return (
|
|
252
|
+
f"š **Code Review**\n\n"
|
|
253
|
+
f"**Review Facets:**\n"
|
|
254
|
+
f"- Correctness\n"
|
|
255
|
+
f"- Security\n"
|
|
256
|
+
f"- Performance\n"
|
|
257
|
+
f"- Maintainability\n"
|
|
258
|
+
f"- Test coverage\n"
|
|
259
|
+
f"- Code style\n"
|
|
260
|
+
f"- Documentation\n\n"
|
|
261
|
+
f"**Best Results:**\n"
|
|
262
|
+
f"- Use fresh context\n"
|
|
263
|
+
f"- Use different quality LLM if available\n\n"
|
|
264
|
+
f"Provide code paths or PR for review.\n\n"
|
|
265
|
+
f"Input: {input_text}"
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
def get_greeting(self) -> str:
|
|
269
|
+
"""Get the agent's greeting message."""
|
|
270
|
+
return self._get_menu_display()
|
|
271
|
+
|
|
272
|
+
def get_capabilities(self) -> List[str]:
|
|
273
|
+
"""Get the agent's capabilities."""
|
|
274
|
+
return self.capabilities
|
|
275
|
+
|
|
276
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
277
|
+
"""Convert agent to dictionary representation."""
|
|
278
|
+
return {
|
|
279
|
+
"name": self.name,
|
|
280
|
+
"title": self.title,
|
|
281
|
+
"icon": self.icon,
|
|
282
|
+
"capabilities": self.capabilities,
|
|
283
|
+
"config": self.config,
|
|
284
|
+
"menu_items": self.menu_items,
|
|
285
|
+
}
|