bmad-method 6.0.0-alpha.12 → 6.0.0-alpha.14
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/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
- package/.github/scripts/discord-helpers.sh +15 -0
- package/.github/workflows/bundle-latest.yaml +79 -27
- package/.github/workflows/discord.yaml +278 -8
- package/.github/workflows/quality.yaml +19 -0
- package/.markdownlint-cli2.yaml +42 -0
- package/.prettierignore +3 -0
- package/CHANGELOG.md +254 -1
- package/CODE_OF_CONDUCT.md +128 -0
- package/README.md +3 -1
- package/bmad-method-6.0.0-alpha.14.tgz +0 -0
- package/docs/agent-customization-guide.md +2 -2
- package/docs/custom-agent-installation.md +58 -90
- package/docs/document-sharding-guide.md +1 -1
- package/docs/ide-info/rovo-dev.md +388 -0
- package/docs/index.md +6 -81
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +1 -1
- package/eslint.config.mjs +14 -0
- package/example-custom-content/README.md +4 -0
- package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +109 -0
- package/example-custom-content/custom.yaml +3 -0
- package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
- package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
- package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
- package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
- package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
- package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +269 -0
- package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
- package/example-custom-content/workflows/wassup/workflow.md +26 -0
- package/example-custom-module/mwm/README.md +4 -0
- package/example-custom-module/mwm/_module-installer/install-config.yaml +27 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +150 -0
- package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +137 -0
- package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +137 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +124 -0
- package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
- package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
- package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
- package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
- package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
- package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
- package/package.json +9 -4
- package/src/core/_module-installer/install-config.yaml +5 -1
- package/src/core/agents/bmad-master.agent.yaml +1 -1
- package/src/core/agents/bmad-web-orchestrator.agent.xml +1 -1
- package/src/core/resources/excalidraw/library-loader.md +2 -2
- package/src/core/tasks/advanced-elicitation-methods.csv +51 -21
- package/src/core/tasks/advanced-elicitation.xml +18 -8
- package/src/core/tasks/workflow.xml +36 -71
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +196 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +121 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +224 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +236 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +208 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +263 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +339 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +302 -0
- package/src/core/workflows/brainstorming/template.md +13 -104
- package/src/core/workflows/brainstorming/workflow.md +51 -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 +203 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +158 -0
- package/src/core/workflows/party-mode/workflow.md +206 -0
- package/src/modules/bmb/README.md +153 -86
- package/src/modules/bmb/_module-installer/install-config.yaml +4 -9
- package/src/modules/bmb/_module-installer/installer.js +76 -0
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +75 -38
- package/src/modules/bmb/docs/{agent-menu-patterns.md → agents/agent-menu-patterns.md} +6 -6
- package/src/modules/bmb/docs/{expert-agent-architecture.md → agents/expert-agent-architecture.md} +20 -20
- package/src/modules/bmb/docs/agents/kb.csv +0 -0
- package/src/modules/bmb/docs/{module-agent-architecture.md → agents/module-agent-architecture.md} +46 -46
- package/src/modules/bmb/docs/{simple-agent-architecture.md → agents/simple-agent-architecture.md} +7 -3
- package/src/modules/bmb/docs/workflows/architecture.md +220 -0
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +19 -0
- package/src/modules/bmb/docs/workflows/csv-data-file-standards.md +206 -0
- package/src/modules/bmb/docs/workflows/index.md +45 -0
- package/src/modules/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -0
- package/src/modules/bmb/docs/workflows/kb.csv +0 -0
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
- package/src/modules/bmb/docs/workflows/templates/step-file.md +139 -0
- package/src/modules/bmb/docs/workflows/templates/step-template.md +290 -0
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
- package/src/modules/bmb/docs/workflows/templates/workflow.md +58 -0
- package/src/modules/bmb/docs/workflows/terms.md +97 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
- package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +176 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +120 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +153 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/README.md +3 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +242 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +50 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +223 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +305 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +145 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +210 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +260 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +237 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +231 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +224 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +234 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +179 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +197 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +180 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +222 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +21 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +25 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +23 -0
- package/src/modules/bmb/workflows/create-agent/workflow.md +91 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +308 -0
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +336 -0
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
- package/src/modules/bmb/workflows/create-module/templates/install-config.template.yaml +53 -0
- package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
- package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
- package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
- package/src/modules/bmb/workflows/create-module/validation.md +126 -0
- package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +157 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +211 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +271 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +308 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +284 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +134 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +202 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +157 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +253 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +193 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +245 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/completion-summary.md +75 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-goals.md +68 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-log.md +40 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/validation-results.md +51 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -0
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +152 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +243 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +274 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +295 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +264 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +360 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +258 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +301 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +58 -0
- package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/checklist.md +0 -1
- package/src/modules/bmgd/agents/game-architect.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-designer.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-dev.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
- package/src/modules/bmm/_module-installer/install-config.yaml +10 -16
- package/src/modules/bmm/agents/analyst.agent.yaml +25 -22
- package/src/modules/bmm/agents/architect.agent.yaml +12 -14
- package/src/modules/bmm/agents/dev.agent.yaml +20 -16
- package/src/modules/bmm/agents/pm.agent.yaml +14 -32
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +36 -0
- package/src/modules/bmm/agents/sm.agent.yaml +13 -31
- package/src/modules/bmm/agents/tea.agent.yaml +10 -7
- package/src/modules/bmm/agents/tech-writer.agent.yaml +7 -20
- package/src/modules/bmm/agents/ux-designer.agent.yaml +12 -10
- package/src/modules/bmm/data/README.md +29 -0
- package/src/modules/bmm/data/project-context-template.md +40 -0
- package/src/modules/bmm/docs/README.md +44 -10
- package/src/modules/bmm/docs/agents-guide.md +80 -53
- package/src/modules/bmm/docs/bmad-quick-flow.md +528 -0
- package/src/modules/bmm/docs/brownfield-guide.md +25 -39
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +6 -39
- package/src/modules/bmm/docs/glossary.md +12 -25
- package/src/modules/bmm/docs/images/README.md +37 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +960 -1845
- package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +4 -2
- package/src/modules/bmm/docs/quick-flow-solo-dev.md +337 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +5 -5
- package/src/modules/bmm/docs/quick-start.md +9 -25
- package/src/modules/bmm/docs/scale-adaptive-system.md +5 -5
- package/src/modules/bmm/docs/test-architecture.md +90 -24
- package/src/modules/bmm/docs/troubleshooting.md +680 -0
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-analysis.md +36 -140
- package/src/modules/bmm/docs/workflows-implementation.md +175 -160
- package/src/modules/bmm/docs/workflows-planning.md +51 -212
- package/src/modules/bmm/docs/workflows-solutioning.md +26 -71
- package/src/modules/bmm/tasks/daily-standup.xml +85 -0
- package/src/modules/bmm/teams/default-party.csv +15 -14
- package/src/modules/bmm/teams/team-fullstack.yaml +0 -1
- package/src/modules/bmm/testarch/knowledge/api-request.md +303 -0
- package/src/modules/bmm/testarch/knowledge/auth-session.md +356 -0
- package/src/modules/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
- package/src/modules/bmm/testarch/knowledge/file-utils.md +260 -0
- package/src/modules/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/modules/bmm/testarch/knowledge/intercept-network-call.md +280 -0
- package/src/modules/bmm/testarch/knowledge/log.md +294 -0
- package/src/modules/bmm/testarch/knowledge/network-error-monitor.md +272 -0
- package/src/modules/bmm/testarch/knowledge/network-recorder.md +265 -0
- package/src/modules/bmm/testarch/knowledge/overview.md +284 -0
- package/src/modules/bmm/testarch/knowledge/recurse.md +296 -0
- package/src/modules/bmm/testarch/tea-index.csv +11 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/product-brief.template.md +8 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +192 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +167 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +203 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +206 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +209 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +223 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +58 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +228 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +237 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +205 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +233 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +442 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +181 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +236 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +248 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +258 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +176 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +474 -0
- package/src/modules/bmm/workflows/1-analysis/research/research.template.md +15 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +247 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +201 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +485 -0
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +204 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +159 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +126 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +209 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +215 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +218 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +233 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +251 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +253 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +240 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +247 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +236 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +263 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +226 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +6 -138
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +59 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +12 -200
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +243 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +165 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +420 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +289 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +290 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +270 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +261 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +257 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +298 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +269 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +293 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +61 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-decision-template.md +13 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/data/domain-complexity.csv +11 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/data/project-types.csv +7 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md +194 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01b-continue.md +163 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +223 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +330 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +317 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +378 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +351 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +49 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +2 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +224 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +4 -11
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +332 -214
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +354 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +21 -34
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +65 -23
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +406 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +6 -37
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +11 -10
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/instructions.md +115 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +26 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/checklist.md +25 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +202 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +33 -0
- package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/project-context-template.md +20 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +193 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +317 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +277 -0
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +48 -0
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +23 -3
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +23 -2
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
- package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
- package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +20 -3
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +27 -1
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +8 -2
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +29 -9
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +66 -54
- package/src/modules/bmm/workflows/workflow-status/instructions.md +11 -4
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +4 -9
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +3 -2
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +2 -1
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +2 -1
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +2 -1
- package/src/modules/cis/agents/presentation-master.agent.yaml +3 -2
- package/src/modules/cis/agents/storyteller.agent.yaml +2 -1
- package/src/modules/cis/teams/default-party.csv +6 -5
- package/src/utility/models/agent-activation-ide.xml +4 -4
- package/src/utility/models/agent-activation-web.xml +1 -11
- package/src/utility/models/fragments/activation-rules.xml +5 -6
- package/src/utility/models/fragments/handler-exec.xml +6 -5
- package/src/utility/models/fragments/handler-multi.xml +14 -0
- package/test/README.md +1 -1
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -3
- package/tools/cli/README.md +4 -3
- package/tools/cli/bundlers/web-bundler.js +3 -14
- package/tools/cli/commands/build.js +9 -184
- package/tools/cli/commands/install.js +42 -2
- package/tools/cli/installers/lib/core/config-collector.js +94 -10
- package/tools/cli/installers/lib/core/installer.js +389 -55
- package/tools/cli/installers/lib/core/manifest-generator.js +91 -30
- package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
- package/tools/cli/installers/lib/custom/handler.js +266 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
- package/tools/cli/installers/lib/ide/antigravity.js +51 -7
- package/tools/cli/installers/lib/ide/auggie.js +72 -7
- package/tools/cli/installers/lib/ide/claude-code.js +1 -6
- package/tools/cli/installers/lib/ide/cline.js +49 -0
- package/tools/cli/installers/lib/ide/codex.js +2 -2
- package/tools/cli/installers/lib/ide/crush.js +66 -6
- package/tools/cli/installers/lib/ide/cursor.js +29 -13
- package/tools/cli/installers/lib/ide/gemini.js +96 -1
- package/tools/cli/installers/lib/ide/github-copilot.js +59 -48
- package/tools/cli/installers/lib/ide/iflow.js +67 -1
- package/tools/cli/installers/lib/ide/kilo.js +74 -0
- package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
- package/tools/cli/installers/lib/ide/opencode.js +3 -3
- package/tools/cli/installers/lib/ide/qwen.js +54 -0
- package/tools/cli/installers/lib/ide/roo.js +145 -138
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/ide/trae.js +47 -0
- package/tools/cli/installers/lib/modules/manager.js +486 -53
- package/tools/cli/lib/agent/compiler.js +210 -27
- package/tools/cli/lib/agent/installer.js +140 -30
- package/tools/cli/lib/agent-analyzer.js +46 -18
- package/tools/cli/lib/config.js +2 -1
- package/tools/cli/lib/ui.js +269 -13
- package/tools/cli/lib/yaml-xml-builder.js +123 -39
- package/tools/platform-codes.yaml +12 -0
- package/tools/schema/agent.js +229 -20
- package/tools/validate-svg-changes.sh +356 -0
- package/src/core/tasks/adv-elicit-methods.csv +0 -39
- package/src/core/workflows/brainstorming/README.md +0 -261
- package/src/core/workflows/brainstorming/instructions.md +0 -315
- package/src/core/workflows/brainstorming/workflow.yaml +0 -38
- package/src/core/workflows/party-mode/instructions.md +0 -183
- package/src/core/workflows/party-mode/workflow.yaml +0 -28
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
- package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
- package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -30
- package/src/modules/bmb/workflows/create-agent/instructions.md +0 -519
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -55
- package/src/modules/bmb/workflows/create-module/README.md +0 -229
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
- package/src/modules/bmb/workflows/create-module/checklist.md +0 -235
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
- package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
- package/src/modules/bmb/workflows/create-module/instructions.md +0 -577
- package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
- package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -52
- package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
- package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
- package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
- package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -725
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1327
- package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -15
- package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -61
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -41
- package/src/modules/bmb/workflows/edit-agent/README.md +0 -239
- package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -654
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -49
- package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
- package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -27
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
- package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
- package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
- package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -61
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
- package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -93
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -78
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
- package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
- package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -100
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -616
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
- package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -58
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
- package/tools/cli/commands/agent-install.js +0 -409
- /package/src/modules/bmb/docs/{agent-compilation.md → agents/agent-compilation.md} +0 -0
- /package/src/modules/bmb/docs/{index.md → agents/index.md} +0 -0
- /package/src/modules/bmb/docs/{understanding-agent-types.md → agents/understanding-agent-types.md} +0 -0
- /package/src/modules/bmb/reference/{readme.md → README.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{agent-validation-checklist.md → data/agent-validation-checklist.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{brainstorm-context.md → data/brainstorm-context.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{communication-presets.csv → data/communication-presets.csv} +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/README.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/instructions.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/workflow.yaml +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/README.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/checklist.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/instructions.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/template.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/workflow.yaml +0 -0
- /package/src/modules/bmm/{workflows/techdoc → data}/documentation-standards.md +0 -0
package/tools/schema/agent.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const assert = require('node:assert');
|
|
3
3
|
const { z } = require('zod');
|
|
4
4
|
|
|
5
|
-
const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data'
|
|
5
|
+
const COMMAND_TARGET_KEYS = ['workflow', 'validate-workflow', 'exec', 'action', 'tmpl', 'data'];
|
|
6
6
|
const TRIGGER_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
7
7
|
|
|
8
8
|
// Public API ---------------------------------------------------------------
|
|
@@ -49,30 +49,84 @@ function agentSchema(options = {}) {
|
|
|
49
49
|
|
|
50
50
|
let index = 0;
|
|
51
51
|
for (const item of value.agent.menu) {
|
|
52
|
-
|
|
52
|
+
// Handle legacy format with trigger field
|
|
53
|
+
if (item.trigger) {
|
|
54
|
+
const triggerValue = item.trigger;
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
if (!TRIGGER_PATTERN.test(triggerValue)) {
|
|
57
|
+
ctx.addIssue({
|
|
58
|
+
code: 'custom',
|
|
59
|
+
path: ['agent', 'menu', index, 'trigger'],
|
|
60
|
+
message: 'agent.menu[].trigger must be kebab-case (lowercase words separated by hyphen)',
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (seenTriggers.has(triggerValue)) {
|
|
66
|
+
ctx.addIssue({
|
|
67
|
+
code: 'custom',
|
|
68
|
+
path: ['agent', 'menu', index, 'trigger'],
|
|
69
|
+
message: `agent.menu[].trigger duplicates "${triggerValue}" within the same agent`,
|
|
70
|
+
});
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
seenTriggers.add(triggerValue);
|
|
61
75
|
}
|
|
76
|
+
// Handle multi format with triggers array (new format)
|
|
77
|
+
else if (item.triggers && Array.isArray(item.triggers)) {
|
|
78
|
+
for (const [triggerIndex, triggerItem] of item.triggers.entries()) {
|
|
79
|
+
let triggerName = null;
|
|
62
80
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
81
|
+
// Extract trigger name from all three formats
|
|
82
|
+
if (triggerItem.trigger) {
|
|
83
|
+
// Format 1: Simple flat format with trigger field
|
|
84
|
+
triggerName = triggerItem.trigger;
|
|
85
|
+
} else {
|
|
86
|
+
// Format 2a or 2b: Object-key format
|
|
87
|
+
const keys = Object.keys(triggerItem);
|
|
88
|
+
if (keys.length === 1 && keys[0] !== 'trigger') {
|
|
89
|
+
triggerName = keys[0];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (triggerName) {
|
|
94
|
+
if (!TRIGGER_PATTERN.test(triggerName)) {
|
|
95
|
+
ctx.addIssue({
|
|
96
|
+
code: 'custom',
|
|
97
|
+
path: ['agent', 'menu', index, 'triggers', triggerIndex],
|
|
98
|
+
message: `agent.menu[].triggers[] must be kebab-case (lowercase words separated by hyphen) - got "${triggerName}"`,
|
|
99
|
+
});
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (seenTriggers.has(triggerName)) {
|
|
104
|
+
ctx.addIssue({
|
|
105
|
+
code: 'custom',
|
|
106
|
+
path: ['agent', 'menu', index, 'triggers', triggerIndex],
|
|
107
|
+
message: `agent.menu[].triggers[] duplicates "${triggerName}" within the same agent`,
|
|
108
|
+
});
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
seenTriggers.add(triggerName);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
70
115
|
}
|
|
71
116
|
|
|
72
|
-
seenTriggers.add(triggerValue);
|
|
73
117
|
index += 1;
|
|
74
118
|
}
|
|
75
119
|
})
|
|
120
|
+
// Refinement: suggest conversational_knowledge when discussion is true
|
|
121
|
+
.superRefine((value, ctx) => {
|
|
122
|
+
if (value.agent.discussion === true && !value.agent.conversational_knowledge) {
|
|
123
|
+
ctx.addIssue({
|
|
124
|
+
code: 'custom',
|
|
125
|
+
path: ['agent', 'conversational_knowledge'],
|
|
126
|
+
message: 'It is recommended to include conversational_knowledge when discussion is true',
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
})
|
|
76
130
|
);
|
|
77
131
|
}
|
|
78
132
|
|
|
@@ -89,6 +143,8 @@ function buildAgentSchema(expectedModule) {
|
|
|
89
143
|
menu: z.array(buildMenuItemSchema()).min(1, { message: 'agent.menu must include at least one entry' }),
|
|
90
144
|
prompts: z.array(buildPromptSchema()).optional(),
|
|
91
145
|
webskip: z.boolean().optional(),
|
|
146
|
+
discussion: z.boolean().optional(),
|
|
147
|
+
conversational_knowledge: z.array(z.object({}).passthrough()).min(1).optional(),
|
|
92
148
|
})
|
|
93
149
|
.strict();
|
|
94
150
|
}
|
|
@@ -167,9 +223,11 @@ function buildPromptSchema() {
|
|
|
167
223
|
|
|
168
224
|
/**
|
|
169
225
|
* Schema for individual menu entries ensuring they are actionable.
|
|
226
|
+
* Supports both legacy format and new multi format.
|
|
170
227
|
*/
|
|
171
228
|
function buildMenuItemSchema() {
|
|
172
|
-
|
|
229
|
+
// Legacy menu item format
|
|
230
|
+
const legacyMenuItemSchema = z
|
|
173
231
|
.object({
|
|
174
232
|
trigger: createNonEmptyString('agent.menu[].trigger'),
|
|
175
233
|
description: createNonEmptyString('agent.menu[].description'),
|
|
@@ -179,12 +237,12 @@ function buildMenuItemSchema() {
|
|
|
179
237
|
exec: createNonEmptyString('agent.menu[].exec').optional(),
|
|
180
238
|
action: createNonEmptyString('agent.menu[].action').optional(),
|
|
181
239
|
tmpl: createNonEmptyString('agent.menu[].tmpl').optional(),
|
|
182
|
-
data:
|
|
183
|
-
'run-workflow': createNonEmptyString('agent.menu[].run-workflow').optional(),
|
|
240
|
+
data: z.string().optional(),
|
|
184
241
|
checklist: createNonEmptyString('agent.menu[].checklist').optional(),
|
|
185
242
|
document: createNonEmptyString('agent.menu[].document').optional(),
|
|
186
243
|
'ide-only': z.boolean().optional(),
|
|
187
244
|
'web-only': z.boolean().optional(),
|
|
245
|
+
discussion: z.boolean().optional(),
|
|
188
246
|
})
|
|
189
247
|
.strict()
|
|
190
248
|
.superRefine((value, ctx) => {
|
|
@@ -200,6 +258,157 @@ function buildMenuItemSchema() {
|
|
|
200
258
|
});
|
|
201
259
|
}
|
|
202
260
|
});
|
|
261
|
+
|
|
262
|
+
// Multi menu item format
|
|
263
|
+
const multiMenuItemSchema = z
|
|
264
|
+
.object({
|
|
265
|
+
multi: createNonEmptyString('agent.menu[].multi'),
|
|
266
|
+
triggers: z
|
|
267
|
+
.array(
|
|
268
|
+
z.union([
|
|
269
|
+
// Format 1: Simple flat format (has trigger field)
|
|
270
|
+
z
|
|
271
|
+
.object({
|
|
272
|
+
trigger: z.string(),
|
|
273
|
+
input: createNonEmptyString('agent.menu[].triggers[].input'),
|
|
274
|
+
route: createNonEmptyString('agent.menu[].triggers[].route').optional(),
|
|
275
|
+
action: createNonEmptyString('agent.menu[].triggers[].action').optional(),
|
|
276
|
+
data: z.string().optional(),
|
|
277
|
+
type: z.enum(['exec', 'action', 'workflow']).optional(),
|
|
278
|
+
})
|
|
279
|
+
.strict()
|
|
280
|
+
.refine((data) => data.trigger, { message: 'Must have trigger field' })
|
|
281
|
+
.superRefine((value, ctx) => {
|
|
282
|
+
// Must have either route or action (or both)
|
|
283
|
+
if (!value.route && !value.action) {
|
|
284
|
+
ctx.addIssue({
|
|
285
|
+
code: 'custom',
|
|
286
|
+
message: 'agent.menu[].triggers[] must have either route or action (or both)',
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}),
|
|
290
|
+
// Format 2a: Object with array format (like bmad-builder.agent.yaml)
|
|
291
|
+
z
|
|
292
|
+
.object({})
|
|
293
|
+
.passthrough()
|
|
294
|
+
.refine(
|
|
295
|
+
(value) => {
|
|
296
|
+
const keys = Object.keys(value);
|
|
297
|
+
if (keys.length !== 1) return false;
|
|
298
|
+
const triggerItems = value[keys[0]];
|
|
299
|
+
return Array.isArray(triggerItems);
|
|
300
|
+
},
|
|
301
|
+
{ message: 'Must be object with single key pointing to array' },
|
|
302
|
+
)
|
|
303
|
+
.superRefine((value, ctx) => {
|
|
304
|
+
const triggerName = Object.keys(value)[0];
|
|
305
|
+
const triggerItems = value[triggerName];
|
|
306
|
+
|
|
307
|
+
if (!Array.isArray(triggerItems)) {
|
|
308
|
+
ctx.addIssue({
|
|
309
|
+
code: 'custom',
|
|
310
|
+
message: `Trigger "${triggerName}" must be an array of items`,
|
|
311
|
+
});
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Check required fields in the array
|
|
316
|
+
const hasInput = triggerItems.some((item) => 'input' in item);
|
|
317
|
+
const hasRouteOrAction = triggerItems.some((item) => 'route' in item || 'action' in item);
|
|
318
|
+
|
|
319
|
+
if (!hasInput) {
|
|
320
|
+
ctx.addIssue({
|
|
321
|
+
code: 'custom',
|
|
322
|
+
message: `Trigger "${triggerName}" must have an input field`,
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (!hasRouteOrAction) {
|
|
327
|
+
ctx.addIssue({
|
|
328
|
+
code: 'custom',
|
|
329
|
+
message: `Trigger "${triggerName}" must have a route or action field`,
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}),
|
|
333
|
+
// Format 2b: Object with direct fields (like analyst.agent.yaml)
|
|
334
|
+
z
|
|
335
|
+
.object({})
|
|
336
|
+
.passthrough()
|
|
337
|
+
.refine(
|
|
338
|
+
(value) => {
|
|
339
|
+
const keys = Object.keys(value);
|
|
340
|
+
if (keys.length !== 1) return false;
|
|
341
|
+
const triggerFields = value[keys[0]];
|
|
342
|
+
return !Array.isArray(triggerFields) && typeof triggerFields === 'object';
|
|
343
|
+
},
|
|
344
|
+
{ message: 'Must be object with single key pointing to object' },
|
|
345
|
+
)
|
|
346
|
+
.superRefine((value, ctx) => {
|
|
347
|
+
const triggerName = Object.keys(value)[0];
|
|
348
|
+
const triggerFields = value[triggerName];
|
|
349
|
+
|
|
350
|
+
// Check required fields
|
|
351
|
+
if (!triggerFields.input || typeof triggerFields.input !== 'string') {
|
|
352
|
+
ctx.addIssue({
|
|
353
|
+
code: 'custom',
|
|
354
|
+
message: `Trigger "${triggerName}" must have an input field`,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
if (!triggerFields.route && !triggerFields.action) {
|
|
359
|
+
ctx.addIssue({
|
|
360
|
+
code: 'custom',
|
|
361
|
+
message: `Trigger "${triggerName}" must have a route or action field`,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
}),
|
|
365
|
+
]),
|
|
366
|
+
)
|
|
367
|
+
.min(1, { message: 'agent.menu[].triggers must have at least one trigger' }),
|
|
368
|
+
discussion: z.boolean().optional(),
|
|
369
|
+
})
|
|
370
|
+
.strict()
|
|
371
|
+
.superRefine((value, ctx) => {
|
|
372
|
+
// Check for duplicate trigger names
|
|
373
|
+
const seenTriggers = new Set();
|
|
374
|
+
for (const [index, triggerItem] of value.triggers.entries()) {
|
|
375
|
+
let triggerName = null;
|
|
376
|
+
|
|
377
|
+
// Extract trigger name from either format
|
|
378
|
+
if (triggerItem.trigger) {
|
|
379
|
+
// Format 1
|
|
380
|
+
triggerName = triggerItem.trigger;
|
|
381
|
+
} else {
|
|
382
|
+
// Format 2
|
|
383
|
+
const keys = Object.keys(triggerItem);
|
|
384
|
+
if (keys.length === 1) {
|
|
385
|
+
triggerName = keys[0];
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (triggerName) {
|
|
390
|
+
if (seenTriggers.has(triggerName)) {
|
|
391
|
+
ctx.addIssue({
|
|
392
|
+
code: 'custom',
|
|
393
|
+
path: ['agent', 'menu', 'triggers', index],
|
|
394
|
+
message: `Trigger name "${triggerName}" is duplicated`,
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
seenTriggers.add(triggerName);
|
|
398
|
+
|
|
399
|
+
// Validate trigger name format
|
|
400
|
+
if (!TRIGGER_PATTERN.test(triggerName)) {
|
|
401
|
+
ctx.addIssue({
|
|
402
|
+
code: 'custom',
|
|
403
|
+
path: ['agent', 'menu', 'triggers', index],
|
|
404
|
+
message: `Trigger name "${triggerName}" must be kebab-case (lowercase words separated by hyphen)`,
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
return z.union([legacyMenuItemSchema, multiMenuItemSchema]);
|
|
203
412
|
}
|
|
204
413
|
|
|
205
414
|
/**
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Visual SVG Validation Script
|
|
4
|
+
#
|
|
5
|
+
# Compares old vs new SVG files using browser-accurate rendering (Playwright)
|
|
6
|
+
# and pixel-level comparison (ImageMagick), then generates a prompt for AI analysis.
|
|
7
|
+
#
|
|
8
|
+
# Usage: ./tools/validate-svg-changes.sh <path-to-svg>
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
set -e
|
|
12
|
+
|
|
13
|
+
SVG_FILE="${1:-src/modules/bmm/docs/images/workflow-method-greenfield.svg}"
|
|
14
|
+
TMP_DIR="/tmp/svg-validation-$$"
|
|
15
|
+
|
|
16
|
+
echo "🎨 Visual SVG Validation"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# Check if file exists
|
|
20
|
+
if [ ! -f "$SVG_FILE" ]; then
|
|
21
|
+
echo "❌ Error: SVG file not found: $SVG_FILE"
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
# Check for ImageMagick
|
|
26
|
+
if ! command -v magick &> /dev/null; then
|
|
27
|
+
echo "❌ ImageMagick not found"
|
|
28
|
+
echo ""
|
|
29
|
+
echo "Install with:"
|
|
30
|
+
echo " brew install imagemagick"
|
|
31
|
+
echo ""
|
|
32
|
+
exit 1
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
echo "✓ ImageMagick found"
|
|
36
|
+
|
|
37
|
+
# Check for Node.js
|
|
38
|
+
if ! command -v node &> /dev/null; then
|
|
39
|
+
echo "❌ Node.js not found"
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
echo "✓ Node.js found ($(node -v))"
|
|
44
|
+
|
|
45
|
+
# Check for Playwright (local install)
|
|
46
|
+
if [ ! -d "node_modules/playwright" ]; then
|
|
47
|
+
echo ""
|
|
48
|
+
echo "📦 Playwright not found locally"
|
|
49
|
+
echo "Installing Playwright (local to this project, no package.json changes)..."
|
|
50
|
+
echo ""
|
|
51
|
+
npm install --no-save playwright
|
|
52
|
+
echo ""
|
|
53
|
+
echo "✓ Playwright installed"
|
|
54
|
+
else
|
|
55
|
+
echo "✓ Playwright found"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
echo ""
|
|
59
|
+
echo "🔄 Rendering SVGs to PNG..."
|
|
60
|
+
echo ""
|
|
61
|
+
|
|
62
|
+
# Create temp directory
|
|
63
|
+
mkdir -p "$TMP_DIR"
|
|
64
|
+
|
|
65
|
+
# Extract old SVG from git
|
|
66
|
+
git show HEAD:"$SVG_FILE" > "$TMP_DIR/old.svg" 2>/dev/null || {
|
|
67
|
+
echo "❌ Could not extract old SVG from git HEAD"
|
|
68
|
+
echo " Make sure you have uncommitted changes to compare"
|
|
69
|
+
exit 1
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
# Copy new SVG
|
|
73
|
+
cp "$SVG_FILE" "$TMP_DIR/new.svg"
|
|
74
|
+
|
|
75
|
+
# Create Node.js renderer script in project directory (so it can find node_modules)
|
|
76
|
+
cat > "tools/render-svg-temp.js" << 'EOJS'
|
|
77
|
+
const { chromium } = require('playwright');
|
|
78
|
+
const fs = require('fs');
|
|
79
|
+
|
|
80
|
+
async function renderSVG(svgPath, pngPath) {
|
|
81
|
+
const browser = await chromium.launch({ headless: true });
|
|
82
|
+
const page = await browser.newPage();
|
|
83
|
+
|
|
84
|
+
const svgContent = fs.readFileSync(svgPath, 'utf8');
|
|
85
|
+
const widthMatch = svgContent.match(/width="([^"]+)"/);
|
|
86
|
+
const heightMatch = svgContent.match(/height="([^"]+)"/);
|
|
87
|
+
const width = Math.ceil(parseFloat(widthMatch[1]));
|
|
88
|
+
const height = Math.ceil(parseFloat(heightMatch[1]));
|
|
89
|
+
|
|
90
|
+
const html = `
|
|
91
|
+
<!DOCTYPE html>
|
|
92
|
+
<html>
|
|
93
|
+
<head>
|
|
94
|
+
<style>
|
|
95
|
+
body { margin: 0; padding: 0; background: white; }
|
|
96
|
+
svg { display: block; }
|
|
97
|
+
</style>
|
|
98
|
+
</head>
|
|
99
|
+
<body>${svgContent}</body>
|
|
100
|
+
</html>
|
|
101
|
+
`;
|
|
102
|
+
|
|
103
|
+
await page.setContent(html);
|
|
104
|
+
await page.setViewportSize({ width, height });
|
|
105
|
+
await page.waitForTimeout(1000);
|
|
106
|
+
await page.screenshot({ path: pngPath, fullPage: true });
|
|
107
|
+
await browser.close();
|
|
108
|
+
|
|
109
|
+
console.log(`✓ Rendered ${pngPath}`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
(async () => {
|
|
113
|
+
await renderSVG(process.argv[2], process.argv[3]);
|
|
114
|
+
await renderSVG(process.argv[4], process.argv[5]);
|
|
115
|
+
})();
|
|
116
|
+
EOJS
|
|
117
|
+
|
|
118
|
+
# Render both SVGs (run from project dir so node_modules is accessible)
|
|
119
|
+
node tools/render-svg-temp.js \
|
|
120
|
+
"$TMP_DIR/old.svg" "$TMP_DIR/old.png" \
|
|
121
|
+
"$TMP_DIR/new.svg" "$TMP_DIR/new.png"
|
|
122
|
+
|
|
123
|
+
# Clean up temp script
|
|
124
|
+
rm tools/render-svg-temp.js
|
|
125
|
+
|
|
126
|
+
echo ""
|
|
127
|
+
echo "🔍 Comparing pixels..."
|
|
128
|
+
echo ""
|
|
129
|
+
|
|
130
|
+
# Compare using ImageMagick
|
|
131
|
+
DIFF_OUTPUT=$(magick compare -metric AE "$TMP_DIR/old.png" "$TMP_DIR/new.png" "$TMP_DIR/diff.png" 2>&1 || true)
|
|
132
|
+
DIFF_PIXELS=$(echo "$DIFF_OUTPUT" | awk '{print $1}')
|
|
133
|
+
|
|
134
|
+
# Get image dimensions
|
|
135
|
+
DIMENSIONS=$(magick identify -format "%wx%h" "$TMP_DIR/old.png")
|
|
136
|
+
WIDTH=$(echo "$DIMENSIONS" | cut -d'x' -f1)
|
|
137
|
+
HEIGHT=$(echo "$DIMENSIONS" | cut -d'x' -f2)
|
|
138
|
+
TOTAL_PIXELS=$((WIDTH * HEIGHT))
|
|
139
|
+
|
|
140
|
+
# Calculate percentage
|
|
141
|
+
DIFF_PERCENT=$(echo "scale=4; $DIFF_PIXELS / $TOTAL_PIXELS * 100" | bc)
|
|
142
|
+
|
|
143
|
+
echo "📊 Results:"
|
|
144
|
+
echo " Dimensions: ${WIDTH} × ${HEIGHT}"
|
|
145
|
+
echo " Total pixels: $(printf "%'d" $TOTAL_PIXELS)"
|
|
146
|
+
echo " Different pixels: $(printf "%'d" $DIFF_PIXELS)"
|
|
147
|
+
echo " Difference: ${DIFF_PERCENT}%"
|
|
148
|
+
echo ""
|
|
149
|
+
|
|
150
|
+
if (( $(echo "$DIFF_PERCENT < 0.01" | bc -l) )); then
|
|
151
|
+
echo "✅ ESSENTIALLY IDENTICAL (< 0.01% difference)"
|
|
152
|
+
VERDICT="essentially identical"
|
|
153
|
+
elif (( $(echo "$DIFF_PERCENT < 0.1" | bc -l) )); then
|
|
154
|
+
echo "⚠️ MINOR DIFFERENCES (< 0.1%)"
|
|
155
|
+
VERDICT="minor differences detected"
|
|
156
|
+
else
|
|
157
|
+
echo "❌ SIGNIFICANT DIFFERENCES (≥ 0.1%)"
|
|
158
|
+
VERDICT="significant differences detected"
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
echo ""
|
|
162
|
+
echo "📁 Output files:"
|
|
163
|
+
echo " Old render: $TMP_DIR/old.png"
|
|
164
|
+
echo " New render: $TMP_DIR/new.png"
|
|
165
|
+
echo " Diff image: $TMP_DIR/diff.png"
|
|
166
|
+
echo ""
|
|
167
|
+
|
|
168
|
+
# Generate HTML comparison page
|
|
169
|
+
cat > "$TMP_DIR/comparison.html" << 'EOHTML'
|
|
170
|
+
<!DOCTYPE html>
|
|
171
|
+
<html>
|
|
172
|
+
<head>
|
|
173
|
+
<title>SVG Comparison</title>
|
|
174
|
+
<style>
|
|
175
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
176
|
+
body {
|
|
177
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
|
178
|
+
background: #f5f5f5;
|
|
179
|
+
padding: 20px;
|
|
180
|
+
}
|
|
181
|
+
.header {
|
|
182
|
+
background: white;
|
|
183
|
+
padding: 20px;
|
|
184
|
+
border-radius: 8px;
|
|
185
|
+
margin-bottom: 20px;
|
|
186
|
+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
187
|
+
}
|
|
188
|
+
h1 { margin-bottom: 10px; color: #333; }
|
|
189
|
+
.stats {
|
|
190
|
+
display: grid;
|
|
191
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
192
|
+
gap: 10px;
|
|
193
|
+
margin-top: 15px;
|
|
194
|
+
}
|
|
195
|
+
.stat {
|
|
196
|
+
background: #f8f9fa;
|
|
197
|
+
padding: 10px;
|
|
198
|
+
border-radius: 4px;
|
|
199
|
+
}
|
|
200
|
+
.stat-label { font-size: 12px; color: #666; text-transform: uppercase; }
|
|
201
|
+
.stat-value { font-size: 18px; font-weight: 600; color: #333; margin-top: 4px; }
|
|
202
|
+
.container {
|
|
203
|
+
display: grid;
|
|
204
|
+
grid-template-columns: 1fr 1fr 1fr;
|
|
205
|
+
gap: 20px;
|
|
206
|
+
margin-bottom: 20px;
|
|
207
|
+
}
|
|
208
|
+
.panel {
|
|
209
|
+
background: white;
|
|
210
|
+
padding: 20px;
|
|
211
|
+
border-radius: 8px;
|
|
212
|
+
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
213
|
+
}
|
|
214
|
+
h2 {
|
|
215
|
+
margin: 0 0 15px 0;
|
|
216
|
+
color: #333;
|
|
217
|
+
font-size: 18px;
|
|
218
|
+
border-bottom: 2px solid #e0e0e0;
|
|
219
|
+
padding-bottom: 10px;
|
|
220
|
+
}
|
|
221
|
+
.image-container {
|
|
222
|
+
border: 1px solid #ddd;
|
|
223
|
+
background: white;
|
|
224
|
+
overflow: auto;
|
|
225
|
+
max-height: 600px;
|
|
226
|
+
}
|
|
227
|
+
img {
|
|
228
|
+
display: block;
|
|
229
|
+
max-width: 100%;
|
|
230
|
+
height: auto;
|
|
231
|
+
}
|
|
232
|
+
.verdict {
|
|
233
|
+
display: inline-block;
|
|
234
|
+
padding: 4px 12px;
|
|
235
|
+
border-radius: 12px;
|
|
236
|
+
font-size: 14px;
|
|
237
|
+
font-weight: 600;
|
|
238
|
+
}
|
|
239
|
+
.verdict.good { background: #d4edda; color: #155724; }
|
|
240
|
+
.verdict.warning { background: #fff3cd; color: #856404; }
|
|
241
|
+
.verdict.bad { background: #f8d7da; color: #721c24; }
|
|
242
|
+
</style>
|
|
243
|
+
</head>
|
|
244
|
+
<body>
|
|
245
|
+
<div class="header">
|
|
246
|
+
<h1>🎨 SVG Visual Comparison</h1>
|
|
247
|
+
<p><strong>File:</strong> FILENAME_PLACEHOLDER</p>
|
|
248
|
+
<div class="stats">
|
|
249
|
+
<div class="stat">
|
|
250
|
+
<div class="stat-label">Dimensions</div>
|
|
251
|
+
<div class="stat-value">DIMENSIONS_PLACEHOLDER</div>
|
|
252
|
+
</div>
|
|
253
|
+
<div class="stat">
|
|
254
|
+
<div class="stat-label">Different Pixels</div>
|
|
255
|
+
<div class="stat-value">DIFF_PIXELS_PLACEHOLDER</div>
|
|
256
|
+
</div>
|
|
257
|
+
<div class="stat">
|
|
258
|
+
<div class="stat-label">Difference</div>
|
|
259
|
+
<div class="stat-value">DIFF_PERCENT_PLACEHOLDER%</div>
|
|
260
|
+
</div>
|
|
261
|
+
<div class="stat">
|
|
262
|
+
<div class="stat-label">Verdict</div>
|
|
263
|
+
<div class="stat-value"><span class="verdict VERDICT_CLASS_PLACEHOLDER">VERDICT_PLACEHOLDER</span></div>
|
|
264
|
+
</div>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div class="container">
|
|
269
|
+
<div class="panel">
|
|
270
|
+
<h2>📄 Old (HEAD)</h2>
|
|
271
|
+
<div class="image-container">
|
|
272
|
+
<img src="old.png" alt="Old SVG">
|
|
273
|
+
</div>
|
|
274
|
+
</div>
|
|
275
|
+
|
|
276
|
+
<div class="panel">
|
|
277
|
+
<h2>📝 New (Working)</h2>
|
|
278
|
+
<div class="image-container">
|
|
279
|
+
<img src="new.png" alt="New SVG">
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<div class="panel">
|
|
284
|
+
<h2>🔍 Diff (Red = Changes)</h2>
|
|
285
|
+
<div class="image-container">
|
|
286
|
+
<img src="diff.png" alt="Diff">
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
</body>
|
|
291
|
+
</html>
|
|
292
|
+
EOHTML
|
|
293
|
+
|
|
294
|
+
# Determine verdict class for styling
|
|
295
|
+
if (( $(echo "$DIFF_PERCENT < 0.01" | bc -l) )); then
|
|
296
|
+
VERDICT_CLASS="good"
|
|
297
|
+
elif (( $(echo "$DIFF_PERCENT < 0.1" | bc -l) )); then
|
|
298
|
+
VERDICT_CLASS="warning"
|
|
299
|
+
else
|
|
300
|
+
VERDICT_CLASS="bad"
|
|
301
|
+
fi
|
|
302
|
+
|
|
303
|
+
# Replace placeholders in HTML
|
|
304
|
+
sed -i '' "s|FILENAME_PLACEHOLDER|$SVG_FILE|g" "$TMP_DIR/comparison.html"
|
|
305
|
+
sed -i '' "s|DIMENSIONS_PLACEHOLDER|${WIDTH} × ${HEIGHT}|g" "$TMP_DIR/comparison.html"
|
|
306
|
+
sed -i '' "s|DIFF_PIXELS_PLACEHOLDER|$(printf "%'d" $DIFF_PIXELS) / $(printf "%'d" $TOTAL_PIXELS)|g" "$TMP_DIR/comparison.html"
|
|
307
|
+
sed -i '' "s|DIFF_PERCENT_PLACEHOLDER|$DIFF_PERCENT|g" "$TMP_DIR/comparison.html"
|
|
308
|
+
sed -i '' "s|VERDICT_PLACEHOLDER|$VERDICT|g" "$TMP_DIR/comparison.html"
|
|
309
|
+
sed -i '' "s|VERDICT_CLASS_PLACEHOLDER|$VERDICT_CLASS|g" "$TMP_DIR/comparison.html"
|
|
310
|
+
|
|
311
|
+
echo "✓ Generated comparison page: $TMP_DIR/comparison.html"
|
|
312
|
+
echo ""
|
|
313
|
+
echo "🌐 Opening comparison in browser..."
|
|
314
|
+
open "$TMP_DIR/comparison.html"
|
|
315
|
+
echo ""
|
|
316
|
+
|
|
317
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
318
|
+
echo ""
|
|
319
|
+
echo "🤖 AI VISUAL ANALYSIS PROMPT"
|
|
320
|
+
echo ""
|
|
321
|
+
echo "Copy and paste this into Gemini/Claude with the diff image attached:"
|
|
322
|
+
echo ""
|
|
323
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
324
|
+
cat << PROMPT
|
|
325
|
+
|
|
326
|
+
I've made changes to an Excalidraw diagram SVG file. Please analyze the visual differences between the old and new versions.
|
|
327
|
+
|
|
328
|
+
**Automated Analysis:**
|
|
329
|
+
- Dimensions: ${WIDTH} × ${HEIGHT} pixels
|
|
330
|
+
- Different pixels: $(printf "%'d" $DIFF_PIXELS) out of $(printf "%'d" $TOTAL_PIXELS)
|
|
331
|
+
- Difference: ${DIFF_PERCENT}%
|
|
332
|
+
- Verdict: ${VERDICT}
|
|
333
|
+
|
|
334
|
+
**Attached Image:**
|
|
335
|
+
The attached image shows the pixel-level diff (red = differences).
|
|
336
|
+
|
|
337
|
+
**Questions:**
|
|
338
|
+
1. Are the differences purely anti-aliasing/rendering artifacts, or are there actual content changes?
|
|
339
|
+
2. If there are content changes, what specifically changed?
|
|
340
|
+
3. Do the changes align with the intent to remove zombie Excalidraw elements (elements marked as deleted but left in the JSON)?
|
|
341
|
+
4. Is this safe to commit?
|
|
342
|
+
|
|
343
|
+
**Context:**
|
|
344
|
+
- File: $SVG_FILE
|
|
345
|
+
- Changes: Removed 191 lines of zombie JSON from Excalidraw source
|
|
346
|
+
- Expected: Visual output should be identical (zombie elements were already marked as deleted)
|
|
347
|
+
|
|
348
|
+
PROMPT
|
|
349
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
350
|
+
echo ""
|
|
351
|
+
echo "📎 Attach this file to your AI prompt:"
|
|
352
|
+
echo " $TMP_DIR/diff.png"
|
|
353
|
+
echo ""
|
|
354
|
+
echo "💡 To open the diff image:"
|
|
355
|
+
echo " open $TMP_DIR/diff.png"
|
|
356
|
+
echo ""
|