bmad-method 6.0.0-alpha.9 → 6.0.1
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-changelog-social/SKILL.md +178 -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 +7 -0
- package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
- package/.claude/skills/bmad-os-draft-changelog/SKILL.md +7 -0
- package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
- package/.claude/skills/bmad-os-gh-triage/README.md +14 -0
- package/.claude/skills/bmad-os-gh-triage/SKILL.md +12 -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/README.md +24 -0
- package/.claude/skills/bmad-os-release-module/SKILL.md +7 -0
- package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
- package/.coderabbit.yaml +85 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
- package/.github/ISSUE_TEMPLATE/config.yaml +5 -2
- 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 +82 -8
- package/.github/workflows/docs.yaml +64 -0
- package/.github/workflows/quality.yaml +40 -2
- package/.husky/pre-commit +13 -0
- package/.markdownlint-cli2.yaml +41 -0
- package/.prettierignore +7 -0
- package/.vscode/settings.json +4 -3
- package/CHANGELOG.md +1074 -674
- package/CNAME +1 -0
- package/CONTRIBUTING.md +97 -189
- package/CONTRIBUTORS.md +32 -0
- package/LICENSE +7 -3
- package/README.md +51 -396
- package/SECURITY.md +85 -0
- package/TRADEMARK.md +55 -0
- package/Wordmark.png +0 -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 +105 -0
- package/docs/how-to/get-answers-about-bmad.md +103 -0
- package/docs/how-to/install-bmad.md +88 -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 +33 -206
- package/docs/reference/agents.md +28 -0
- package/docs/reference/commands.md +131 -0
- package/docs/reference/modules.md +76 -0
- package/docs/reference/testing.md +106 -0
- package/docs/reference/workflow-map.md +122 -0
- package/docs/tutorials/getting-started.md +219 -0
- package/eslint.config.mjs +26 -16
- package/package.json +35 -28
- 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/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 +443 -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 +475 -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 +486 -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 +153 -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 +164 -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 +331 -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 +44 -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 +54 -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 +53 -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 +21 -0
- package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
- package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +53 -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 +191 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
- package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +127 -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/instructions.md +130 -0
- package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -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/automate/checklist.md +33 -0
- package/src/bmm/workflows/qa/automate/instructions.md +110 -0
- package/src/bmm/workflows/qa/automate/workflow.yaml +44 -0
- package/src/core/agents/bmad-master.agent.yaml +12 -21
- 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 +209 -0
- package/src/core/tasks/help.md +85 -0
- package/src/core/tasks/index-docs.xml +2 -2
- package/src/core/tasks/review-adversarial-general.xml +48 -0
- package/src/core/tasks/shard-doc.xml +108 -0
- package/src/core/tasks/workflow.xml +39 -74
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
- 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 +13 -104
- 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-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 +4 -4
- 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 +1 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +1 -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 +1 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +1 -1
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +1 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +2 -3
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -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 +2 -1
- 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 +1 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +2 -1
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +2 -1
- 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 +1 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +1 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +1 -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 +4 -4
- package/test/test-file-refs-csv.js +133 -0
- package/test/test-installation-components.js +10 -12
- package/test/test-rehype-plugins.mjs +1050 -0
- package/test/unit-test-schema.js +2 -2
- package/tools/build-docs.mjs +463 -0
- package/tools/cli/README.md +41 -589
- package/tools/cli/bmad-cli.js +67 -1
- package/tools/cli/commands/install.js +42 -34
- package/tools/cli/commands/status.js +44 -26
- package/tools/cli/commands/uninstall.js +146 -23
- 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 +589 -95
- package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +57 -39
- package/tools/cli/installers/lib/core/detector.js +19 -125
- package/tools/cli/installers/lib/core/ide-config-manager.js +12 -9
- package/tools/cli/installers/lib/core/installer.js +2075 -1161
- package/tools/cli/installers/lib/core/manifest-generator.js +494 -103
- package/tools/cli/installers/lib/core/manifest.js +544 -46
- package/tools/cli/installers/lib/custom/handler.js +358 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +83 -44
- package/tools/cli/installers/lib/ide/_config-driven.js +560 -0
- package/tools/cli/installers/lib/ide/codex.js +277 -54
- package/tools/cli/installers/lib/ide/github-copilot.js +607 -209
- package/tools/cli/installers/lib/ide/kilo.js +169 -75
- package/tools/cli/installers/lib/ide/manager.js +179 -48
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +227 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +95 -5
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +51 -20
- package/tools/cli/installers/lib/ide/shared/module-injections.js +6 -3
- package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +262 -14
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +108 -27
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +2 -1
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +16 -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 +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +7 -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 +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +17 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +17 -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/workflow-command-template.md +2 -1
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +6 -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 +931 -207
- package/tools/cli/lib/activation-builder.js +13 -16
- 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 +48 -20
- package/tools/cli/lib/agent-party-generator.js +5 -17
- package/tools/cli/lib/cli-utils.js +76 -104
- package/tools/cli/lib/config.js +4 -3
- package/tools/cli/lib/platform-codes.js +2 -2
- package/tools/cli/lib/project-root.js +6 -0
- package/tools/cli/lib/prompts.js +809 -0
- package/tools/cli/lib/ui.js +1600 -272
- package/tools/cli/lib/xml-handler.js +4 -55
- package/tools/cli/lib/yaml-format.js +4 -6
- package/tools/cli/lib/yaml-xml-builder.js +183 -61
- 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/lib/xml-utils.js +13 -0
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +24 -0
- package/tools/schema/agent.js +306 -53
- package/tools/validate-agent-schema.js +3 -3
- package/tools/validate-doc-links.js +393 -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 +135 -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 +111 -0
- package/website/src/styles/custom.css +509 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
- package/.github/ISSUE_TEMPLATE/idea_submission.md +0 -109
- package/.github/workflows/bundle-latest.yaml +0 -277
- package/.github/workflows/manual-release.yaml +0 -212
- package/docs/BUNDLE_DISTRIBUTION_SETUP.md +0 -95
- package/docs/agent-customization-guide.md +0 -208
- package/docs/document-sharding-guide.md +0 -447
- package/docs/ide-info/auggie.md +0 -31
- package/docs/ide-info/claude-code.md +0 -25
- package/docs/ide-info/cline.md +0 -31
- package/docs/ide-info/codex.md +0 -21
- package/docs/ide-info/crush.md +0 -30
- package/docs/ide-info/cursor.md +0 -25
- package/docs/ide-info/gemini.md +0 -25
- package/docs/ide-info/github-copilot.md +0 -26
- package/docs/ide-info/iflow.md +0 -33
- package/docs/ide-info/kilo.md +0 -24
- package/docs/ide-info/opencode.md +0 -24
- package/docs/ide-info/qwen.md +0 -25
- package/docs/ide-info/roo.md +0 -27
- package/docs/ide-info/trae.md +0 -25
- package/docs/ide-info/windsurf.md +0 -22
- package/docs/installers-bundlers/ide-injections.md +0 -186
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +0 -388
- package/docs/installers-bundlers/web-bundler-usage.md +0 -54
- package/docs/v4-to-v6-upgrade.md +0 -227
- package/docs/web-bundles-gemini-gpt-guide.md +0 -473
- package/src/core/_module-installer/install-config.yaml +0 -35
- package/src/core/_module-installer/installer.js +0 -60
- package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
- package/src/core/tasks/adv-elicit-methods.csv +0 -39
- package/src/core/tasks/advanced-elicitation.xml +0 -106
- package/src/core/tasks/validate-workflow.xml +0 -89
- package/src/core/tools/shard-doc.xml +0 -109
- 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 -43
- package/src/core/workflows/party-mode/instructions.md +0 -183
- package/src/core/workflows/party-mode/workflow.yaml +0 -27
- package/src/modules/bmb/README.md +0 -194
- package/src/modules/bmb/_module-installer/install-config.yaml +0 -31
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -59
- 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 -34
- package/src/modules/bmb/workflows/create-agent/README.md +0 -203
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +0 -415
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
- package/src/modules/bmb/workflows/create-agent/agent-types.md +0 -292
- package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +0 -174
- package/src/modules/bmb/workflows/create-agent/checklist.md +0 -62
- package/src/modules/bmb/workflows/create-agent/communication-styles.md +0 -202
- package/src/modules/bmb/workflows/create-agent/instructions.md +0 -456
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -49
- 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 -576
- package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
- package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -44
- 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 -724
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1306
- 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 -13
- 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 -65
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -42
- package/src/modules/bmb/workflows/edit-agent/README.md +0 -112
- package/src/modules/bmb/workflows/edit-agent/checklist.md +0 -112
- package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -290
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -35
- package/src/modules/bmb/workflows/edit-module/README.md +0 -187
- package/src/modules/bmb/workflows/edit-module/checklist.md +0 -165
- package/src/modules/bmb/workflows/edit-module/instructions.md +0 -339
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +0 -36
- 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 -29
- package/src/modules/bmb/workflows/module-brief/README.md +0 -264
- package/src/modules/bmb/workflows/module-brief/checklist.md +0 -116
- package/src/modules/bmb/workflows/module-brief/instructions.md +0 -267
- package/src/modules/bmb/workflows/module-brief/template.md +0 -275
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +0 -31
- package/src/modules/bmb/workflows/redoc/README.md +0 -87
- package/src/modules/bmb/workflows/redoc/checklist.md +0 -99
- package/src/modules/bmb/workflows/redoc/instructions.md +0 -265
- package/src/modules/bmb/workflows/redoc/workflow.yaml +0 -34
- package/src/modules/bmgd/README.md +0 -208
- package/src/modules/bmgd/_module-installer/install-config.yaml +0 -54
- package/src/modules/bmgd/agents/game-architect.agent.yaml +0 -33
- package/src/modules/bmgd/agents/game-designer.agent.yaml +0 -40
- package/src/modules/bmgd/agents/game-dev.agent.yaml +0 -40
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +0 -75
- package/src/modules/bmgd/teams/default-party.csv +0 -10
- package/src/modules/bmgd/teams/team-gamedev.yaml +0 -18
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-brain-methods.csv +0 -26
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-context.md +0 -115
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +0 -128
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +0 -41
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/checklist.md +0 -128
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +0 -371
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/template.md +0 -205
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +0 -44
- package/src/modules/bmgd/workflows/2-design/gdd/checklist.md +0 -148
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/action-platformer.md +0 -45
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/adventure.md +0 -84
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/card-game.md +0 -76
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/fighting.md +0 -89
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/horror.md +0 -86
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/idle-incremental.md +0 -78
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/metroidvania.md +0 -87
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/moba.md +0 -74
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/party-game.md +0 -79
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/puzzle.md +0 -58
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/racing.md +0 -88
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/rhythm.md +0 -79
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/roguelike.md +0 -69
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/rpg.md +0 -70
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/sandbox.md +0 -79
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/shooter.md +0 -62
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/simulation.md +0 -73
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/sports.md +0 -75
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/strategy.md +0 -71
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/survival.md +0 -79
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/text-based.md +0 -91
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/tower-defense.md +0 -79
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/turn-based-tactics.md +0 -88
- package/src/modules/bmgd/workflows/2-design/gdd/game-types/visual-novel.md +0 -89
- package/src/modules/bmgd/workflows/2-design/gdd/game-types.csv +0 -25
- package/src/modules/bmgd/workflows/2-design/gdd/gdd-template.md +0 -153
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -501
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +0 -81
- package/src/modules/bmgd/workflows/2-design/narrative/checklist.md +0 -139
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +0 -603
- package/src/modules/bmgd/workflows/2-design/narrative/narrative-template.md +0 -195
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +0 -38
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -321
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-template.md +0 -103
- package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +0 -240
- package/src/modules/bmgd/workflows/3-technical/game-architecture/decision-catalog.yaml +0 -222
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +0 -699
- package/src/modules/bmgd/workflows/3-technical/game-architecture/pattern-categories.csv +0 -13
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +0 -67
- package/src/modules/bmgd/workflows/4-production/code-review/backlog_template.md +0 -12
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +0 -57
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +0 -279
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +0 -206
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +0 -52
- package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +0 -240
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
- package/src/modules/bmgd/workflows/4-production/create-story/template.md +0 -51
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +0 -68
- package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +0 -38
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +0 -53
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -52
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +0 -1442
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +0 -52
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +0 -234
- package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +0 -55
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +0 -50
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -57
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
- package/src/modules/bmm/README.md +0 -128
- 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/_module-installer/install-config.yaml +0 -60
- package/src/modules/bmm/_module-installer/installer.js +0 -131
- package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +0 -35
- package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +0 -32
- package/src/modules/bmm/agents/analyst.agent.yaml +0 -48
- package/src/modules/bmm/agents/architect.agent.yaml +0 -42
- package/src/modules/bmm/agents/dev.agent.yaml +0 -40
- package/src/modules/bmm/agents/pm.agent.yaml +0 -61
- package/src/modules/bmm/agents/sm.agent.yaml +0 -72
- package/src/modules/bmm/agents/tea.agent.yaml +0 -65
- package/src/modules/bmm/agents/tech-writer.agent.yaml +0 -73
- package/src/modules/bmm/agents/ux-designer.agent.yaml +0 -38
- package/src/modules/bmm/docs/README.md +0 -235
- package/src/modules/bmm/docs/agents-guide.md +0 -1056
- package/src/modules/bmm/docs/brownfield-guide.md +0 -754
- package/src/modules/bmm/docs/enterprise-agentic-development.md +0 -680
- package/src/modules/bmm/docs/faq.md +0 -587
- package/src/modules/bmm/docs/glossary.md +0 -320
- package/src/modules/bmm/docs/party-mode.md +0 -224
- package/src/modules/bmm/docs/quick-spec-flow.md +0 -652
- package/src/modules/bmm/docs/quick-start.md +0 -366
- package/src/modules/bmm/docs/scale-adaptive-system.md +0 -599
- package/src/modules/bmm/docs/test-architecture.md +0 -394
- package/src/modules/bmm/docs/workflow-architecture-reference.md +0 -371
- package/src/modules/bmm/docs/workflow-document-project-reference.md +0 -487
- package/src/modules/bmm/docs/workflows-analysis.md +0 -370
- package/src/modules/bmm/docs/workflows-implementation.md +0 -284
- package/src/modules/bmm/docs/workflows-planning.md +0 -601
- package/src/modules/bmm/docs/workflows-solutioning.md +0 -501
- package/src/modules/bmm/teams/default-party.csv +0 -19
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +0 -675
- package/src/modules/bmm/testarch/knowledge/component-tdd.md +0 -486
- package/src/modules/bmm/testarch/knowledge/contract-testing.md +0 -957
- package/src/modules/bmm/testarch/knowledge/data-factories.md +0 -500
- package/src/modules/bmm/testarch/knowledge/email-auth.md +0 -721
- package/src/modules/bmm/testarch/knowledge/error-handling.md +0 -725
- package/src/modules/bmm/testarch/knowledge/feature-flags.md +0 -750
- package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +0 -401
- package/src/modules/bmm/testarch/knowledge/network-first.md +0 -486
- package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +0 -670
- package/src/modules/bmm/testarch/knowledge/playwright-config.md +0 -730
- package/src/modules/bmm/testarch/knowledge/probability-impact.md +0 -601
- package/src/modules/bmm/testarch/knowledge/risk-governance.md +0 -615
- package/src/modules/bmm/testarch/knowledge/selective-testing.md +0 -732
- package/src/modules/bmm/testarch/knowledge/selector-resilience.md +0 -527
- package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
- package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +0 -473
- package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
- package/src/modules/bmm/testarch/knowledge/test-quality.md +0 -664
- package/src/modules/bmm/testarch/knowledge/timing-debugging.md +0 -372
- package/src/modules/bmm/testarch/knowledge/visual-debugging.md +0 -524
- package/src/modules/bmm/testarch/tea-index.csv +0 -22
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
- 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 -423
- 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 -522
- 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 -65
- 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 -437
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -674
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -533
- 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 -1306
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -99
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -80
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -292
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -53
- package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -525
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
- package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -76
- 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 -434
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -978
- 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 -57
- 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 -696
- package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -96
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -169
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -302
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -66
- package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
- package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -57
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -52
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +0 -51
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -68
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -53
- 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 -52
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1442
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -52
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -50
- 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 -57
- 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/document-project/checklist.md +0 -245
- package/src/modules/bmm/workflows/document-project/instructions.md +0 -222
- package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
- package/src/modules/bmm/workflows/document-project/workflow.yaml +0 -36
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
- package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
- package/src/modules/bmm/workflows/techdoc/documentation-standards.md +0 -262
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
- package/src/modules/bmm/workflows/testarch/atdd/checklist.md +0 -373
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +0 -785
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +0 -54
- package/src/modules/bmm/workflows/testarch/automate/checklist.md +0 -580
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +0 -1303
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +0 -246
- package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
- package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +0 -517
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +0 -55
- package/src/modules/bmm/workflows/testarch/framework/checklist.md +0 -321
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +0 -455
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +0 -55
- package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
- package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -58
- package/src/modules/bmm/workflows/testarch/test-design/checklist.md +0 -234
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +0 -782
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +0 -58
- package/src/modules/bmm/workflows/testarch/test-review/checklist.md +0 -470
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +0 -608
- package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +0 -55
- package/src/modules/bmm/workflows/testarch/trace/checklist.md +0 -654
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +0 -1045
- package/src/modules/bmm/workflows/testarch/trace/trace-template.md +0 -673
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +0 -68
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +0 -823
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +0 -29
- package/src/modules/bmm/workflows/workflow-status/instructions.md +0 -387
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
- package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -104
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -95
- 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/src/modules/bmm/workflows/workflow-status/project-levels.yaml +0 -59
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +0 -30
- package/src/modules/cis/README.md +0 -153
- package/src/modules/cis/_module-installer/install-config.yaml +0 -16
- package/src/modules/cis/_module-installer/installer.js +0 -92
- package/src/modules/cis/agents/README.md +0 -104
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +0 -28
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +0 -28
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +0 -28
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +0 -28
- package/src/modules/cis/agents/storyteller.agent.yaml +0 -28
- package/src/modules/cis/teams/creative-squad.yaml +0 -7
- package/src/modules/cis/teams/default-party.csv +0 -11
- package/src/modules/cis/workflows/README.md +0 -139
- package/src/modules/cis/workflows/design-thinking/README.md +0 -56
- package/src/modules/cis/workflows/design-thinking/design-methods.csv +0 -31
- package/src/modules/cis/workflows/design-thinking/instructions.md +0 -200
- package/src/modules/cis/workflows/design-thinking/template.md +0 -111
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +0 -43
- package/src/modules/cis/workflows/innovation-strategy/README.md +0 -56
- package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +0 -31
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +0 -274
- package/src/modules/cis/workflows/innovation-strategy/template.md +0 -189
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +0 -43
- package/src/modules/cis/workflows/problem-solving/README.md +0 -56
- package/src/modules/cis/workflows/problem-solving/instructions.md +0 -250
- package/src/modules/cis/workflows/problem-solving/solving-methods.csv +0 -31
- package/src/modules/cis/workflows/problem-solving/template.md +0 -165
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +0 -43
- package/src/modules/cis/workflows/storytelling/README.md +0 -58
- package/src/modules/cis/workflows/storytelling/instructions.md +0 -291
- package/src/modules/cis/workflows/storytelling/story-types.csv +0 -26
- package/src/modules/cis/workflows/storytelling/template.md +0 -113
- package/src/modules/cis/workflows/storytelling/workflow.yaml +0 -43
- package/src/utility/models/agent-activation-ide.xml +0 -51
- package/src/utility/models/agent-activation-web.xml +0 -60
- package/src/utility/models/agent-command-header.md +0 -1
- package/src/utility/models/agent-config-template.md +0 -23
- package/src/utility/models/agent-in-team-activation.xml +0 -3
- package/src/utility/models/fragments/activation-rules.xml +0 -8
- package/src/utility/models/fragments/activation-steps.xml +0 -16
- package/src/utility/models/fragments/handler-action.xml +0 -4
- package/src/utility/models/fragments/handler-exec.xml +0 -5
- package/src/utility/models/fragments/handler-tmpl.xml +0 -5
- package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
- package/src/utility/models/fragments/handler-workflow.xml +0 -9
- package/src/utility/models/fragments/menu-handlers.xml +0 -6
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
- package/src/utility/templates/agent.customize.template.yaml +0 -42
- package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +0 -26
- package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
- package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
- package/tools/cli/bundlers/bundle-web.js +0 -179
- package/tools/cli/bundlers/test-analyst.js +0 -28
- package/tools/cli/bundlers/test-bundler.js +0 -118
- package/tools/cli/bundlers/web-bundler.js +0 -1667
- package/tools/cli/commands/build.js +0 -458
- package/tools/cli/commands/list.js +0 -28
- package/tools/cli/commands/update.js +0 -28
- package/tools/cli/installers/lib/ide/auggie.js +0 -179
- package/tools/cli/installers/lib/ide/claude-code.js +0 -471
- package/tools/cli/installers/lib/ide/cline.js +0 -220
- package/tools/cli/installers/lib/ide/crush.js +0 -240
- package/tools/cli/installers/lib/ide/cursor.js +0 -352
- package/tools/cli/installers/lib/ide/gemini.js +0 -206
- package/tools/cli/installers/lib/ide/iflow.js +0 -125
- package/tools/cli/installers/lib/ide/opencode.js +0 -212
- package/tools/cli/installers/lib/ide/qwen.js +0 -318
- package/tools/cli/installers/lib/ide/roo.js +0 -253
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +0 -14
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +0 -12
- package/tools/cli/installers/lib/ide/trae.js +0 -266
- package/tools/cli/installers/lib/ide/windsurf.js +0 -211
- package/tools/cli/lib/replace-project-root.js +0 -239
- package/tools/cli/regenerate-manifests.js +0 -28
- package/tools/cli/test-yaml-builder.js +0 -43
- package/tools/flattener/aggregate.js +0 -76
- package/tools/flattener/binary.js +0 -80
- package/tools/flattener/discovery.js +0 -71
- package/tools/flattener/files.js +0 -35
- package/tools/flattener/ignoreRules.js +0 -172
- package/tools/flattener/main.js +0 -483
- package/tools/flattener/projectRoot.js +0 -201
- package/tools/flattener/prompts.js +0 -44
- package/tools/flattener/stats.helpers.js +0 -368
- package/tools/flattener/stats.js +0 -75
- package/tools/flattener/test-matrix.js +0 -409
- package/tools/flattener/xml.js +0 -88
- package/tools/validate-bundles.js +0 -87
- package/v6-open-items.md +0 -17
- /package/src/{modules/bmm → bmm}/teams/team-fullstack.yaml +0 -0
- /package/src/{modules/bmgd/workflows/4-production → bmm/workflows/4-implementation}/sprint-planning/checklist.md +0 -0
- /package/src/{modules/bmm → bmm}/workflows/document-project/documentation-requirements.csv +0 -0
- /package/src/{modules/bmm → bmm}/workflows/document-project/templates/deep-dive-template.md +0 -0
- /package/src/{modules/bmm → bmm}/workflows/document-project/templates/index-template.md +0 -0
- /package/src/{modules/bmm → bmm}/workflows/document-project/templates/project-overview-template.md +0 -0
- /package/src/{modules/bmm → bmm}/workflows/document-project/templates/source-tree-template.md +0 -0
- /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
- /package/{src/utility/models/action-command-header.md → tools/cli/installers/lib/ide/templates/split/.gitkeep} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
|
-
const yaml = require('
|
|
3
|
+
const yaml = require('yaml');
|
|
4
4
|
const crypto = require('node:crypto');
|
|
5
|
+
const csv = require('csv-parse/sync');
|
|
5
6
|
const { getSourcePath, getModulePath } = require('../../../lib/project-root');
|
|
7
|
+
const prompts = require('../../../lib/prompts');
|
|
6
8
|
|
|
7
9
|
// Load package.json for version info
|
|
8
10
|
const packageJson = require('../../../../../package.json');
|
|
@@ -21,25 +23,49 @@ class ManifestGenerator {
|
|
|
21
23
|
this.selectedIdes = [];
|
|
22
24
|
}
|
|
23
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Clean text for CSV output by normalizing whitespace and escaping quotes
|
|
28
|
+
* @param {string} text - Text to clean
|
|
29
|
+
* @returns {string} Cleaned text safe for CSV
|
|
30
|
+
*/
|
|
31
|
+
cleanForCSV(text) {
|
|
32
|
+
if (!text) return '';
|
|
33
|
+
return text
|
|
34
|
+
.trim()
|
|
35
|
+
.replaceAll(/\s+/g, ' ') // Normalize all whitespace (including newlines) to single space
|
|
36
|
+
.replaceAll('"', '""'); // Escape quotes for CSV
|
|
37
|
+
}
|
|
38
|
+
|
|
24
39
|
/**
|
|
25
40
|
* Generate all manifests for the installation
|
|
26
|
-
* @param {string} bmadDir -
|
|
41
|
+
* @param {string} bmadDir - _bmad
|
|
27
42
|
* @param {Array} selectedModules - Selected modules for installation
|
|
28
43
|
* @param {Array} installedFiles - All installed files (optional, for hash tracking)
|
|
29
44
|
*/
|
|
30
45
|
async generateManifests(bmadDir, selectedModules, installedFiles = [], options = {}) {
|
|
31
|
-
// Create
|
|
32
|
-
const cfgDir = path.join(bmadDir, '
|
|
46
|
+
// Create _config directory if it doesn't exist
|
|
47
|
+
const cfgDir = path.join(bmadDir, '_config');
|
|
33
48
|
await fs.ensureDir(cfgDir);
|
|
34
49
|
|
|
35
50
|
// Store modules list (all modules including preserved ones)
|
|
36
51
|
const preservedModules = options.preservedModules || [];
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
52
|
+
|
|
53
|
+
// Scan the bmad directory to find all actually installed modules
|
|
54
|
+
const installedModules = await this.scanInstalledModules(bmadDir);
|
|
55
|
+
|
|
56
|
+
// Since custom modules are now installed the same way as regular modules,
|
|
57
|
+
// we don't need to exclude them from manifest generation
|
|
58
|
+
const allModules = [...new Set(['core', ...selectedModules, ...preservedModules, ...installedModules])];
|
|
59
|
+
|
|
60
|
+
this.modules = allModules;
|
|
61
|
+
this.updatedModules = allModules; // Include ALL modules (including custom) for scanning
|
|
62
|
+
|
|
63
|
+
// For CSV manifests, we need to include ALL modules that are installed
|
|
64
|
+
// preservedModules controls which modules stay as-is in the CSV (don't get rescanned)
|
|
65
|
+
// But all modules should be included in the final manifest
|
|
66
|
+
this.preservedModules = allModules; // Include ALL modules (including custom)
|
|
41
67
|
this.bmadDir = bmadDir;
|
|
42
|
-
this.bmadFolderName = path.basename(bmadDir); // Get the actual folder name (e.g., '
|
|
68
|
+
this.bmadFolderName = path.basename(bmadDir); // Get the actual folder name (e.g., '_bmad' or 'bmad')
|
|
43
69
|
this.allInstalledFiles = installedFiles;
|
|
44
70
|
|
|
45
71
|
if (!Object.prototype.hasOwnProperty.call(options, 'ides')) {
|
|
@@ -57,14 +83,14 @@ class ManifestGenerator {
|
|
|
57
83
|
// Collect workflow data
|
|
58
84
|
await this.collectWorkflows(selectedModules);
|
|
59
85
|
|
|
60
|
-
// Collect agent data
|
|
61
|
-
await this.collectAgents(
|
|
86
|
+
// Collect agent data - use updatedModules which includes all installed modules
|
|
87
|
+
await this.collectAgents(this.updatedModules);
|
|
62
88
|
|
|
63
89
|
// Collect task data
|
|
64
|
-
await this.collectTasks(
|
|
90
|
+
await this.collectTasks(this.updatedModules);
|
|
65
91
|
|
|
66
92
|
// Collect tool data
|
|
67
|
-
await this.collectTools(
|
|
93
|
+
await this.collectTools(this.updatedModules);
|
|
68
94
|
|
|
69
95
|
// Write manifest files and collect their paths
|
|
70
96
|
const manifestFiles = [
|
|
@@ -105,13 +131,21 @@ class ManifestGenerator {
|
|
|
105
131
|
}
|
|
106
132
|
|
|
107
133
|
/**
|
|
108
|
-
* Recursively find and parse workflow.yaml files
|
|
134
|
+
* Recursively find and parse workflow.yaml and workflow.md files
|
|
109
135
|
*/
|
|
110
136
|
async getWorkflowsFromPath(basePath, moduleName) {
|
|
111
137
|
const workflows = [];
|
|
112
138
|
const workflowsPath = path.join(basePath, 'workflows');
|
|
139
|
+
const debug = process.env.BMAD_DEBUG_MANIFEST === 'true';
|
|
140
|
+
|
|
141
|
+
if (debug) {
|
|
142
|
+
console.log(`[DEBUG] Scanning workflows in: ${workflowsPath}`);
|
|
143
|
+
}
|
|
113
144
|
|
|
114
145
|
if (!(await fs.pathExists(workflowsPath))) {
|
|
146
|
+
if (debug) {
|
|
147
|
+
console.log(`[DEBUG] Workflows path does not exist: ${workflowsPath}`);
|
|
148
|
+
}
|
|
115
149
|
return workflows;
|
|
116
150
|
}
|
|
117
151
|
|
|
@@ -126,14 +160,53 @@ class ManifestGenerator {
|
|
|
126
160
|
// Recurse into subdirectories
|
|
127
161
|
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
128
162
|
await findWorkflows(fullPath, newRelativePath);
|
|
129
|
-
} else if (
|
|
130
|
-
|
|
163
|
+
} else if (
|
|
164
|
+
entry.name === 'workflow.yaml' ||
|
|
165
|
+
entry.name === 'workflow.md' ||
|
|
166
|
+
(entry.name.startsWith('workflow-') && entry.name.endsWith('.md'))
|
|
167
|
+
) {
|
|
168
|
+
// Parse workflow file (both YAML and MD formats)
|
|
169
|
+
if (debug) {
|
|
170
|
+
console.log(`[DEBUG] Found workflow file: ${fullPath}`);
|
|
171
|
+
}
|
|
131
172
|
try {
|
|
132
|
-
|
|
133
|
-
const
|
|
173
|
+
// Read and normalize line endings (fix Windows CRLF issues)
|
|
174
|
+
const rawContent = await fs.readFile(fullPath, 'utf8');
|
|
175
|
+
const content = rawContent.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
|
|
176
|
+
|
|
177
|
+
let workflow;
|
|
178
|
+
if (entry.name === 'workflow.yaml') {
|
|
179
|
+
// Parse YAML workflow
|
|
180
|
+
workflow = yaml.parse(content);
|
|
181
|
+
} else {
|
|
182
|
+
// Parse MD workflow with YAML frontmatter
|
|
183
|
+
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
184
|
+
if (!frontmatterMatch) {
|
|
185
|
+
if (debug) {
|
|
186
|
+
console.log(`[DEBUG] Skipped (no frontmatter): ${fullPath}`);
|
|
187
|
+
}
|
|
188
|
+
continue; // Skip MD files without frontmatter
|
|
189
|
+
}
|
|
190
|
+
workflow = yaml.parse(frontmatterMatch[1]);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (debug) {
|
|
194
|
+
console.log(`[DEBUG] Parsed: name="${workflow.name}", description=${workflow.description ? 'OK' : 'MISSING'}`);
|
|
195
|
+
}
|
|
134
196
|
|
|
135
197
|
// Skip template workflows (those with placeholder values)
|
|
136
198
|
if (workflow.name && workflow.name.includes('{') && workflow.name.includes('}')) {
|
|
199
|
+
if (debug) {
|
|
200
|
+
console.log(`[DEBUG] Skipped (template placeholder): ${workflow.name}`);
|
|
201
|
+
}
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// Skip workflows marked as non-standalone (reference/example workflows)
|
|
206
|
+
if (workflow.standalone === false) {
|
|
207
|
+
if (debug) {
|
|
208
|
+
console.log(`[DEBUG] Skipped (standalone=false): ${workflow.name}`);
|
|
209
|
+
}
|
|
137
210
|
continue;
|
|
138
211
|
}
|
|
139
212
|
|
|
@@ -141,18 +214,15 @@ class ManifestGenerator {
|
|
|
141
214
|
// Build relative path for installation
|
|
142
215
|
const installPath =
|
|
143
216
|
moduleName === 'core'
|
|
144
|
-
? `${this.bmadFolderName}/core/workflows/${relativePath}
|
|
145
|
-
: `${this.bmadFolderName}/${moduleName}/workflows/${relativePath}
|
|
146
|
-
|
|
147
|
-
// Check for standalone property (default: false)
|
|
148
|
-
const standalone = workflow.standalone === true;
|
|
217
|
+
? `${this.bmadFolderName}/core/workflows/${relativePath}/${entry.name}`
|
|
218
|
+
: `${this.bmadFolderName}/${moduleName}/workflows/${relativePath}/${entry.name}`;
|
|
149
219
|
|
|
220
|
+
// Workflows with standalone: false are filtered out above
|
|
150
221
|
workflows.push({
|
|
151
222
|
name: workflow.name,
|
|
152
|
-
description: workflow.description
|
|
223
|
+
description: this.cleanForCSV(workflow.description),
|
|
153
224
|
module: moduleName,
|
|
154
225
|
path: installPath,
|
|
155
|
-
standalone: standalone,
|
|
156
226
|
});
|
|
157
227
|
|
|
158
228
|
// Add to files list
|
|
@@ -162,15 +232,28 @@ class ManifestGenerator {
|
|
|
162
232
|
module: moduleName,
|
|
163
233
|
path: installPath,
|
|
164
234
|
});
|
|
235
|
+
|
|
236
|
+
if (debug) {
|
|
237
|
+
console.log(`[DEBUG] ✓ Added workflow: ${workflow.name} (${moduleName})`);
|
|
238
|
+
}
|
|
239
|
+
} else {
|
|
240
|
+
if (debug) {
|
|
241
|
+
console.log(`[DEBUG] Skipped (missing name or description): ${fullPath}`);
|
|
242
|
+
}
|
|
165
243
|
}
|
|
166
244
|
} catch (error) {
|
|
167
|
-
|
|
245
|
+
await prompts.log.warn(`Failed to parse workflow at ${fullPath}: ${error.message}`);
|
|
168
246
|
}
|
|
169
247
|
}
|
|
170
248
|
}
|
|
171
249
|
};
|
|
172
250
|
|
|
173
251
|
await findWorkflows(workflowsPath);
|
|
252
|
+
|
|
253
|
+
if (debug) {
|
|
254
|
+
console.log(`[DEBUG] Total workflows found in ${moduleName}: ${workflows.length}`);
|
|
255
|
+
}
|
|
256
|
+
|
|
174
257
|
return workflows;
|
|
175
258
|
}
|
|
176
259
|
|
|
@@ -207,18 +290,23 @@ class ManifestGenerator {
|
|
|
207
290
|
}
|
|
208
291
|
|
|
209
292
|
/**
|
|
210
|
-
* Get agents from a directory
|
|
293
|
+
* Get agents from a directory recursively
|
|
211
294
|
* Only includes compiled .md files (not .agent.yaml source files)
|
|
212
295
|
*/
|
|
213
|
-
async getAgentsFromDir(dirPath, moduleName) {
|
|
296
|
+
async getAgentsFromDir(dirPath, moduleName, relativePath = '') {
|
|
214
297
|
const agents = [];
|
|
215
|
-
const
|
|
298
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
216
299
|
|
|
217
|
-
for (const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
300
|
+
for (const entry of entries) {
|
|
301
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
302
|
+
|
|
303
|
+
if (entry.isDirectory()) {
|
|
304
|
+
// Recurse into subdirectories
|
|
305
|
+
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
306
|
+
const subDirAgents = await this.getAgentsFromDir(fullPath, moduleName, newRelativePath);
|
|
307
|
+
agents.push(...subDirAgents);
|
|
308
|
+
} else if (entry.name.endsWith('.md') && !entry.name.endsWith('.agent.yaml') && entry.name.toLowerCase() !== 'readme.md') {
|
|
309
|
+
const content = await fs.readFile(fullPath, 'utf8');
|
|
222
310
|
|
|
223
311
|
// Skip files that don't contain <agent> tag (e.g., README files)
|
|
224
312
|
if (!content.includes('<agent')) {
|
|
@@ -234,6 +322,7 @@ class ManifestGenerator {
|
|
|
234
322
|
const nameMatch = content.match(/name="([^"]+)"/);
|
|
235
323
|
const titleMatch = content.match(/title="([^"]+)"/);
|
|
236
324
|
const iconMatch = content.match(/icon="([^"]+)"/);
|
|
325
|
+
const capabilitiesMatch = content.match(/capabilities="([^"]+)"/);
|
|
237
326
|
|
|
238
327
|
// Extract persona fields
|
|
239
328
|
const roleMatch = content.match(/<role>([^<]+)<\/role>/);
|
|
@@ -242,29 +331,24 @@ class ManifestGenerator {
|
|
|
242
331
|
const principlesMatch = content.match(/<principles>([\s\S]*?)<\/principles>/);
|
|
243
332
|
|
|
244
333
|
// Build relative path for installation
|
|
334
|
+
const fileRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
245
335
|
const installPath =
|
|
246
|
-
moduleName === 'core'
|
|
336
|
+
moduleName === 'core'
|
|
337
|
+
? `${this.bmadFolderName}/core/agents/${fileRelativePath}`
|
|
338
|
+
: `${this.bmadFolderName}/${moduleName}/agents/${fileRelativePath}`;
|
|
247
339
|
|
|
248
|
-
const agentName =
|
|
249
|
-
|
|
250
|
-
// Helper function to clean and escape CSV content
|
|
251
|
-
const cleanForCSV = (text) => {
|
|
252
|
-
if (!text) return '';
|
|
253
|
-
return text
|
|
254
|
-
.trim()
|
|
255
|
-
.replaceAll(/\s+/g, ' ') // Normalize whitespace
|
|
256
|
-
.replaceAll('"', '""'); // Escape quotes for CSV
|
|
257
|
-
};
|
|
340
|
+
const agentName = entry.name.replace('.md', '');
|
|
258
341
|
|
|
259
342
|
agents.push({
|
|
260
343
|
name: agentName,
|
|
261
344
|
displayName: nameMatch ? nameMatch[1] : agentName,
|
|
262
345
|
title: titleMatch ? titleMatch[1] : '',
|
|
263
346
|
icon: iconMatch ? iconMatch[1] : '',
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
347
|
+
capabilities: capabilitiesMatch ? this.cleanForCSV(capabilitiesMatch[1]) : '',
|
|
348
|
+
role: roleMatch ? this.cleanForCSV(roleMatch[1]) : '',
|
|
349
|
+
identity: identityMatch ? this.cleanForCSV(identityMatch[1]) : '',
|
|
350
|
+
communicationStyle: styleMatch ? this.cleanForCSV(styleMatch[1]) : '',
|
|
351
|
+
principles: principlesMatch ? this.cleanForCSV(principlesMatch[1]) : '',
|
|
268
352
|
module: moduleName,
|
|
269
353
|
path: installPath,
|
|
270
354
|
});
|
|
@@ -313,27 +397,55 @@ class ManifestGenerator {
|
|
|
313
397
|
const filePath = path.join(dirPath, file);
|
|
314
398
|
const content = await fs.readFile(filePath, 'utf8');
|
|
315
399
|
|
|
316
|
-
//
|
|
317
|
-
|
|
400
|
+
// Skip internal/engine files (not user-facing tasks)
|
|
401
|
+
if (content.includes('internal="true"')) {
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
let name = file.replace(/\.(xml|md)$/, '');
|
|
406
|
+
let displayName = name;
|
|
407
|
+
let description = '';
|
|
408
|
+
let standalone = false;
|
|
409
|
+
|
|
410
|
+
if (file.endsWith('.md')) {
|
|
411
|
+
// Parse YAML frontmatter for .md tasks
|
|
412
|
+
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
413
|
+
if (frontmatterMatch) {
|
|
414
|
+
try {
|
|
415
|
+
const frontmatter = yaml.parse(frontmatterMatch[1]);
|
|
416
|
+
name = frontmatter.name || name;
|
|
417
|
+
displayName = frontmatter.displayName || frontmatter.name || name;
|
|
418
|
+
description = this.cleanForCSV(frontmatter.description || '');
|
|
419
|
+
// Tasks are standalone by default unless explicitly false (internal=true is already filtered above)
|
|
420
|
+
standalone = frontmatter.standalone !== false && frontmatter.standalone !== 'false';
|
|
421
|
+
} catch {
|
|
422
|
+
// If YAML parsing fails, use defaults
|
|
423
|
+
standalone = true; // Default to standalone
|
|
424
|
+
}
|
|
425
|
+
} else {
|
|
426
|
+
standalone = true; // No frontmatter means standalone
|
|
427
|
+
}
|
|
428
|
+
} else {
|
|
429
|
+
// For .xml tasks, extract from tag attributes
|
|
430
|
+
const nameMatch = content.match(/name="([^"]+)"/);
|
|
431
|
+
displayName = nameMatch ? nameMatch[1] : name;
|
|
318
432
|
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
const description = descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '';
|
|
433
|
+
const descMatch = content.match(/description="([^"]+)"/);
|
|
434
|
+
const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
|
|
435
|
+
description = this.cleanForCSV(descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '');
|
|
323
436
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
437
|
+
const standaloneFalseMatch = content.match(/<task[^>]+standalone="false"/);
|
|
438
|
+
standalone = !standaloneFalseMatch;
|
|
439
|
+
}
|
|
327
440
|
|
|
328
441
|
// Build relative path for installation
|
|
329
442
|
const installPath =
|
|
330
443
|
moduleName === 'core' ? `${this.bmadFolderName}/core/tasks/${file}` : `${this.bmadFolderName}/${moduleName}/tasks/${file}`;
|
|
331
444
|
|
|
332
|
-
const taskName = file.replace(/\.(xml|md)$/, '');
|
|
333
445
|
tasks.push({
|
|
334
|
-
name:
|
|
335
|
-
displayName:
|
|
336
|
-
description: description
|
|
446
|
+
name: name,
|
|
447
|
+
displayName: displayName,
|
|
448
|
+
description: description,
|
|
337
449
|
module: moduleName,
|
|
338
450
|
path: installPath,
|
|
339
451
|
standalone: standalone,
|
|
@@ -342,7 +454,7 @@ class ManifestGenerator {
|
|
|
342
454
|
// Add to files list
|
|
343
455
|
this.files.push({
|
|
344
456
|
type: 'task',
|
|
345
|
-
name:
|
|
457
|
+
name: name,
|
|
346
458
|
module: moduleName,
|
|
347
459
|
path: installPath,
|
|
348
460
|
});
|
|
@@ -383,27 +495,55 @@ class ManifestGenerator {
|
|
|
383
495
|
const filePath = path.join(dirPath, file);
|
|
384
496
|
const content = await fs.readFile(filePath, 'utf8');
|
|
385
497
|
|
|
386
|
-
//
|
|
387
|
-
|
|
498
|
+
// Skip internal tools (same as tasks)
|
|
499
|
+
if (content.includes('internal="true"')) {
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
let name = file.replace(/\.(xml|md)$/, '');
|
|
504
|
+
let displayName = name;
|
|
505
|
+
let description = '';
|
|
506
|
+
let standalone = false;
|
|
507
|
+
|
|
508
|
+
if (file.endsWith('.md')) {
|
|
509
|
+
// Parse YAML frontmatter for .md tools
|
|
510
|
+
const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
511
|
+
if (frontmatterMatch) {
|
|
512
|
+
try {
|
|
513
|
+
const frontmatter = yaml.parse(frontmatterMatch[1]);
|
|
514
|
+
name = frontmatter.name || name;
|
|
515
|
+
displayName = frontmatter.displayName || frontmatter.name || name;
|
|
516
|
+
description = this.cleanForCSV(frontmatter.description || '');
|
|
517
|
+
// Tools are standalone by default unless explicitly false (internal=true is already filtered above)
|
|
518
|
+
standalone = frontmatter.standalone !== false && frontmatter.standalone !== 'false';
|
|
519
|
+
} catch {
|
|
520
|
+
// If YAML parsing fails, use defaults
|
|
521
|
+
standalone = true; // Default to standalone
|
|
522
|
+
}
|
|
523
|
+
} else {
|
|
524
|
+
standalone = true; // No frontmatter means standalone
|
|
525
|
+
}
|
|
526
|
+
} else {
|
|
527
|
+
// For .xml tools, extract from tag attributes
|
|
528
|
+
const nameMatch = content.match(/name="([^"]+)"/);
|
|
529
|
+
displayName = nameMatch ? nameMatch[1] : name;
|
|
388
530
|
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
const description = descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '';
|
|
531
|
+
const descMatch = content.match(/description="([^"]+)"/);
|
|
532
|
+
const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
|
|
533
|
+
description = this.cleanForCSV(descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '');
|
|
393
534
|
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
535
|
+
const standaloneFalseMatch = content.match(/<tool[^>]+standalone="false"/);
|
|
536
|
+
standalone = !standaloneFalseMatch;
|
|
537
|
+
}
|
|
397
538
|
|
|
398
539
|
// Build relative path for installation
|
|
399
540
|
const installPath =
|
|
400
541
|
moduleName === 'core' ? `${this.bmadFolderName}/core/tools/${file}` : `${this.bmadFolderName}/${moduleName}/tools/${file}`;
|
|
401
542
|
|
|
402
|
-
const toolName = file.replace(/\.(xml|md)$/, '');
|
|
403
543
|
tools.push({
|
|
404
|
-
name:
|
|
405
|
-
displayName:
|
|
406
|
-
description: description
|
|
544
|
+
name: name,
|
|
545
|
+
displayName: displayName,
|
|
546
|
+
description: description,
|
|
407
547
|
module: moduleName,
|
|
408
548
|
path: installPath,
|
|
409
549
|
standalone: standalone,
|
|
@@ -412,7 +552,7 @@ class ManifestGenerator {
|
|
|
412
552
|
// Add to files list
|
|
413
553
|
this.files.push({
|
|
414
554
|
type: 'tool',
|
|
415
|
-
name:
|
|
555
|
+
name: name,
|
|
416
556
|
module: moduleName,
|
|
417
557
|
path: installPath,
|
|
418
558
|
});
|
|
@@ -424,25 +564,80 @@ class ManifestGenerator {
|
|
|
424
564
|
|
|
425
565
|
/**
|
|
426
566
|
* Write main manifest as YAML with installation info only
|
|
567
|
+
* Fetches fresh version info for all modules
|
|
427
568
|
* @returns {string} Path to the manifest file
|
|
428
569
|
*/
|
|
429
570
|
async writeMainManifest(cfgDir) {
|
|
430
571
|
const manifestPath = path.join(cfgDir, 'manifest.yaml');
|
|
431
572
|
|
|
573
|
+
// Read existing manifest to preserve install date
|
|
574
|
+
let existingInstallDate = null;
|
|
575
|
+
const existingModulesMap = new Map();
|
|
576
|
+
|
|
577
|
+
if (await fs.pathExists(manifestPath)) {
|
|
578
|
+
try {
|
|
579
|
+
const existingContent = await fs.readFile(manifestPath, 'utf8');
|
|
580
|
+
const existingManifest = yaml.parse(existingContent);
|
|
581
|
+
|
|
582
|
+
// Preserve original install date
|
|
583
|
+
if (existingManifest.installation?.installDate) {
|
|
584
|
+
existingInstallDate = existingManifest.installation.installDate;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
// Build map of existing modules for quick lookup
|
|
588
|
+
if (existingManifest.modules && Array.isArray(existingManifest.modules)) {
|
|
589
|
+
for (const m of existingManifest.modules) {
|
|
590
|
+
if (typeof m === 'object' && m.name) {
|
|
591
|
+
existingModulesMap.set(m.name, m);
|
|
592
|
+
} else if (typeof m === 'string') {
|
|
593
|
+
existingModulesMap.set(m, { installDate: existingInstallDate });
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
} catch {
|
|
598
|
+
// If we can't read existing manifest, continue with defaults
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
// Fetch fresh version info for all modules
|
|
603
|
+
const { Manifest } = require('./manifest');
|
|
604
|
+
const manifestObj = new Manifest();
|
|
605
|
+
const updatedModules = [];
|
|
606
|
+
|
|
607
|
+
for (const moduleName of this.modules) {
|
|
608
|
+
// Get fresh version info from source
|
|
609
|
+
const versionInfo = await manifestObj.getModuleVersionInfo(moduleName, this.bmadDir);
|
|
610
|
+
|
|
611
|
+
// Get existing install date if available
|
|
612
|
+
const existing = existingModulesMap.get(moduleName);
|
|
613
|
+
|
|
614
|
+
updatedModules.push({
|
|
615
|
+
name: moduleName,
|
|
616
|
+
version: versionInfo.version,
|
|
617
|
+
installDate: existing?.installDate || new Date().toISOString(),
|
|
618
|
+
lastUpdated: new Date().toISOString(),
|
|
619
|
+
source: versionInfo.source,
|
|
620
|
+
npmPackage: versionInfo.npmPackage,
|
|
621
|
+
repoUrl: versionInfo.repoUrl,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
|
|
432
625
|
const manifest = {
|
|
433
626
|
installation: {
|
|
434
627
|
version: packageJson.version,
|
|
435
|
-
installDate: new Date().toISOString(),
|
|
628
|
+
installDate: existingInstallDate || new Date().toISOString(),
|
|
436
629
|
lastUpdated: new Date().toISOString(),
|
|
437
630
|
},
|
|
438
|
-
modules:
|
|
631
|
+
modules: updatedModules,
|
|
439
632
|
ides: this.selectedIdes,
|
|
440
633
|
};
|
|
441
634
|
|
|
442
|
-
|
|
635
|
+
// Clean the manifest to remove any non-serializable values
|
|
636
|
+
const cleanManifest = structuredClone(manifest);
|
|
637
|
+
|
|
638
|
+
const yamlStr = yaml.stringify(cleanManifest, {
|
|
443
639
|
indent: 2,
|
|
444
|
-
lineWidth:
|
|
445
|
-
noRefs: true,
|
|
640
|
+
lineWidth: 0,
|
|
446
641
|
sortKeys: false,
|
|
447
642
|
});
|
|
448
643
|
|
|
@@ -499,7 +694,7 @@ class ManifestGenerator {
|
|
|
499
694
|
|
|
500
695
|
return preservedRows;
|
|
501
696
|
} catch (error) {
|
|
502
|
-
|
|
697
|
+
await prompts.log.warn(`Failed to read existing CSV ${csvPath}: ${error.message}`);
|
|
503
698
|
return [];
|
|
504
699
|
}
|
|
505
700
|
}
|
|
@@ -540,13 +735,30 @@ class ManifestGenerator {
|
|
|
540
735
|
*/
|
|
541
736
|
async writeWorkflowManifest(cfgDir) {
|
|
542
737
|
const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
|
|
738
|
+
const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
|
|
543
739
|
|
|
544
|
-
// Create CSV header
|
|
545
|
-
let csv = 'name,description,module,path
|
|
740
|
+
// Create CSV header - standalone column removed, everything is canonicalized to 4 columns
|
|
741
|
+
let csv = 'name,description,module,path\n';
|
|
742
|
+
|
|
743
|
+
// Build workflows map from discovered workflows only
|
|
744
|
+
// Old entries are NOT preserved - the manifest reflects what actually exists on disk
|
|
745
|
+
const allWorkflows = new Map();
|
|
546
746
|
|
|
547
|
-
//
|
|
747
|
+
// Only add workflows that were actually discovered in this scan
|
|
548
748
|
for (const workflow of this.workflows) {
|
|
549
|
-
|
|
749
|
+
const key = `${workflow.module}:${workflow.name}`;
|
|
750
|
+
allWorkflows.set(key, {
|
|
751
|
+
name: workflow.name,
|
|
752
|
+
description: workflow.description,
|
|
753
|
+
module: workflow.module,
|
|
754
|
+
path: workflow.path,
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
// Write all workflows
|
|
759
|
+
for (const [, value] of allWorkflows) {
|
|
760
|
+
const row = [escapeCsv(value.name), escapeCsv(value.description), escapeCsv(value.module), escapeCsv(value.path)].join(',');
|
|
761
|
+
csv += row + '\n';
|
|
550
762
|
}
|
|
551
763
|
|
|
552
764
|
await fs.writeFile(csvPath, csv);
|
|
@@ -559,16 +771,69 @@ class ManifestGenerator {
|
|
|
559
771
|
*/
|
|
560
772
|
async writeAgentManifest(cfgDir) {
|
|
561
773
|
const csvPath = path.join(cfgDir, 'agent-manifest.csv');
|
|
774
|
+
const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
|
|
775
|
+
|
|
776
|
+
// Read existing manifest to preserve entries
|
|
777
|
+
const existingEntries = new Map();
|
|
778
|
+
if (await fs.pathExists(csvPath)) {
|
|
779
|
+
const content = await fs.readFile(csvPath, 'utf8');
|
|
780
|
+
const records = csv.parse(content, {
|
|
781
|
+
columns: true,
|
|
782
|
+
skip_empty_lines: true,
|
|
783
|
+
});
|
|
784
|
+
for (const record of records) {
|
|
785
|
+
existingEntries.set(`${record.module}:${record.name}`, record);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
562
788
|
|
|
563
789
|
// Create CSV header with persona fields
|
|
564
|
-
let
|
|
790
|
+
let csvContent = 'name,displayName,title,icon,capabilities,role,identity,communicationStyle,principles,module,path\n';
|
|
791
|
+
|
|
792
|
+
// Combine existing and new agents, preferring new data for duplicates
|
|
793
|
+
const allAgents = new Map();
|
|
794
|
+
|
|
795
|
+
// Add existing entries
|
|
796
|
+
for (const [key, value] of existingEntries) {
|
|
797
|
+
allAgents.set(key, value);
|
|
798
|
+
}
|
|
565
799
|
|
|
566
|
-
// Add
|
|
800
|
+
// Add/update new agents
|
|
567
801
|
for (const agent of this.agents) {
|
|
568
|
-
|
|
802
|
+
const key = `${agent.module}:${agent.name}`;
|
|
803
|
+
allAgents.set(key, {
|
|
804
|
+
name: agent.name,
|
|
805
|
+
displayName: agent.displayName,
|
|
806
|
+
title: agent.title,
|
|
807
|
+
icon: agent.icon,
|
|
808
|
+
capabilities: agent.capabilities,
|
|
809
|
+
role: agent.role,
|
|
810
|
+
identity: agent.identity,
|
|
811
|
+
communicationStyle: agent.communicationStyle,
|
|
812
|
+
principles: agent.principles,
|
|
813
|
+
module: agent.module,
|
|
814
|
+
path: agent.path,
|
|
815
|
+
});
|
|
569
816
|
}
|
|
570
817
|
|
|
571
|
-
|
|
818
|
+
// Write all agents
|
|
819
|
+
for (const [, record] of allAgents) {
|
|
820
|
+
const row = [
|
|
821
|
+
escapeCsv(record.name),
|
|
822
|
+
escapeCsv(record.displayName),
|
|
823
|
+
escapeCsv(record.title),
|
|
824
|
+
escapeCsv(record.icon),
|
|
825
|
+
escapeCsv(record.capabilities),
|
|
826
|
+
escapeCsv(record.role),
|
|
827
|
+
escapeCsv(record.identity),
|
|
828
|
+
escapeCsv(record.communicationStyle),
|
|
829
|
+
escapeCsv(record.principles),
|
|
830
|
+
escapeCsv(record.module),
|
|
831
|
+
escapeCsv(record.path),
|
|
832
|
+
].join(',');
|
|
833
|
+
csvContent += row + '\n';
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
await fs.writeFile(csvPath, csvContent);
|
|
572
837
|
return csvPath;
|
|
573
838
|
}
|
|
574
839
|
|
|
@@ -578,16 +843,59 @@ class ManifestGenerator {
|
|
|
578
843
|
*/
|
|
579
844
|
async writeTaskManifest(cfgDir) {
|
|
580
845
|
const csvPath = path.join(cfgDir, 'task-manifest.csv');
|
|
846
|
+
const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
|
|
847
|
+
|
|
848
|
+
// Read existing manifest to preserve entries
|
|
849
|
+
const existingEntries = new Map();
|
|
850
|
+
if (await fs.pathExists(csvPath)) {
|
|
851
|
+
const content = await fs.readFile(csvPath, 'utf8');
|
|
852
|
+
const records = csv.parse(content, {
|
|
853
|
+
columns: true,
|
|
854
|
+
skip_empty_lines: true,
|
|
855
|
+
});
|
|
856
|
+
for (const record of records) {
|
|
857
|
+
existingEntries.set(`${record.module}:${record.name}`, record);
|
|
858
|
+
}
|
|
859
|
+
}
|
|
581
860
|
|
|
582
861
|
// Create CSV header with standalone column
|
|
583
|
-
let
|
|
862
|
+
let csvContent = 'name,displayName,description,module,path,standalone\n';
|
|
863
|
+
|
|
864
|
+
// Combine existing and new tasks
|
|
865
|
+
const allTasks = new Map();
|
|
866
|
+
|
|
867
|
+
// Add existing entries
|
|
868
|
+
for (const [key, value] of existingEntries) {
|
|
869
|
+
allTasks.set(key, value);
|
|
870
|
+
}
|
|
584
871
|
|
|
585
|
-
// Add
|
|
872
|
+
// Add/update new tasks
|
|
586
873
|
for (const task of this.tasks) {
|
|
587
|
-
|
|
874
|
+
const key = `${task.module}:${task.name}`;
|
|
875
|
+
allTasks.set(key, {
|
|
876
|
+
name: task.name,
|
|
877
|
+
displayName: task.displayName,
|
|
878
|
+
description: task.description,
|
|
879
|
+
module: task.module,
|
|
880
|
+
path: task.path,
|
|
881
|
+
standalone: task.standalone,
|
|
882
|
+
});
|
|
588
883
|
}
|
|
589
884
|
|
|
590
|
-
|
|
885
|
+
// Write all tasks
|
|
886
|
+
for (const [, record] of allTasks) {
|
|
887
|
+
const row = [
|
|
888
|
+
escapeCsv(record.name),
|
|
889
|
+
escapeCsv(record.displayName),
|
|
890
|
+
escapeCsv(record.description),
|
|
891
|
+
escapeCsv(record.module),
|
|
892
|
+
escapeCsv(record.path),
|
|
893
|
+
escapeCsv(record.standalone),
|
|
894
|
+
].join(',');
|
|
895
|
+
csvContent += row + '\n';
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
await fs.writeFile(csvPath, csvContent);
|
|
591
899
|
return csvPath;
|
|
592
900
|
}
|
|
593
901
|
|
|
@@ -597,16 +905,59 @@ class ManifestGenerator {
|
|
|
597
905
|
*/
|
|
598
906
|
async writeToolManifest(cfgDir) {
|
|
599
907
|
const csvPath = path.join(cfgDir, 'tool-manifest.csv');
|
|
908
|
+
const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
|
|
909
|
+
|
|
910
|
+
// Read existing manifest to preserve entries
|
|
911
|
+
const existingEntries = new Map();
|
|
912
|
+
if (await fs.pathExists(csvPath)) {
|
|
913
|
+
const content = await fs.readFile(csvPath, 'utf8');
|
|
914
|
+
const records = csv.parse(content, {
|
|
915
|
+
columns: true,
|
|
916
|
+
skip_empty_lines: true,
|
|
917
|
+
});
|
|
918
|
+
for (const record of records) {
|
|
919
|
+
existingEntries.set(`${record.module}:${record.name}`, record);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
600
922
|
|
|
601
923
|
// Create CSV header with standalone column
|
|
602
|
-
let
|
|
924
|
+
let csvContent = 'name,displayName,description,module,path,standalone\n';
|
|
925
|
+
|
|
926
|
+
// Combine existing and new tools
|
|
927
|
+
const allTools = new Map();
|
|
928
|
+
|
|
929
|
+
// Add existing entries
|
|
930
|
+
for (const [key, value] of existingEntries) {
|
|
931
|
+
allTools.set(key, value);
|
|
932
|
+
}
|
|
603
933
|
|
|
604
|
-
// Add
|
|
934
|
+
// Add/update new tools
|
|
605
935
|
for (const tool of this.tools) {
|
|
606
|
-
|
|
936
|
+
const key = `${tool.module}:${tool.name}`;
|
|
937
|
+
allTools.set(key, {
|
|
938
|
+
name: tool.name,
|
|
939
|
+
displayName: tool.displayName,
|
|
940
|
+
description: tool.description,
|
|
941
|
+
module: tool.module,
|
|
942
|
+
path: tool.path,
|
|
943
|
+
standalone: tool.standalone,
|
|
944
|
+
});
|
|
607
945
|
}
|
|
608
946
|
|
|
609
|
-
|
|
947
|
+
// Write all tools
|
|
948
|
+
for (const [, record] of allTools) {
|
|
949
|
+
const row = [
|
|
950
|
+
escapeCsv(record.name),
|
|
951
|
+
escapeCsv(record.displayName),
|
|
952
|
+
escapeCsv(record.description),
|
|
953
|
+
escapeCsv(record.module),
|
|
954
|
+
escapeCsv(record.path),
|
|
955
|
+
escapeCsv(record.standalone),
|
|
956
|
+
].join(',');
|
|
957
|
+
csvContent += row + '\n';
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
await fs.writeFile(csvPath, csvContent);
|
|
610
961
|
return csvPath;
|
|
611
962
|
}
|
|
612
963
|
|
|
@@ -641,13 +992,14 @@ class ManifestGenerator {
|
|
|
641
992
|
if (this.allInstalledFiles && this.allInstalledFiles.length > 0) {
|
|
642
993
|
// Process all installed files
|
|
643
994
|
for (const filePath of this.allInstalledFiles) {
|
|
644
|
-
|
|
995
|
+
// Store paths relative to bmadDir (no folder prefix)
|
|
996
|
+
const relativePath = filePath.replace(this.bmadDir, '').replaceAll('\\', '/').replace(/^\//, '');
|
|
645
997
|
const ext = path.extname(filePath).toLowerCase();
|
|
646
998
|
const fileName = path.basename(filePath, ext);
|
|
647
999
|
|
|
648
|
-
// Determine module from path
|
|
1000
|
+
// Determine module from path (first directory component)
|
|
649
1001
|
const pathParts = relativePath.split('/');
|
|
650
|
-
const module = pathParts.length >
|
|
1002
|
+
const module = pathParts.length > 0 ? pathParts[0] : 'unknown';
|
|
651
1003
|
|
|
652
1004
|
// Calculate hash
|
|
653
1005
|
const hash = await this.calculateFileHash(filePath);
|
|
@@ -663,10 +1015,13 @@ class ManifestGenerator {
|
|
|
663
1015
|
} else {
|
|
664
1016
|
// Fallback: use the collected workflows/agents/tasks
|
|
665
1017
|
for (const file of this.files) {
|
|
666
|
-
|
|
1018
|
+
// Strip the folder prefix if present (for consistency)
|
|
1019
|
+
const relPath = file.path.replace(this.bmadFolderName + '/', '');
|
|
1020
|
+
const filePath = path.join(this.bmadDir, relPath);
|
|
667
1021
|
const hash = await this.calculateFileHash(filePath);
|
|
668
1022
|
allFiles.push({
|
|
669
1023
|
...file,
|
|
1024
|
+
path: relPath,
|
|
670
1025
|
hash: hash,
|
|
671
1026
|
});
|
|
672
1027
|
}
|
|
@@ -687,6 +1042,42 @@ class ManifestGenerator {
|
|
|
687
1042
|
await fs.writeFile(csvPath, csv);
|
|
688
1043
|
return csvPath;
|
|
689
1044
|
}
|
|
1045
|
+
|
|
1046
|
+
/**
|
|
1047
|
+
* Scan the bmad directory to find all installed modules
|
|
1048
|
+
* @param {string} bmadDir - Path to bmad directory
|
|
1049
|
+
* @returns {Array} List of module names
|
|
1050
|
+
*/
|
|
1051
|
+
async scanInstalledModules(bmadDir) {
|
|
1052
|
+
const modules = [];
|
|
1053
|
+
|
|
1054
|
+
try {
|
|
1055
|
+
const entries = await fs.readdir(bmadDir, { withFileTypes: true });
|
|
1056
|
+
|
|
1057
|
+
for (const entry of entries) {
|
|
1058
|
+
// Skip if not a directory or is a special directory
|
|
1059
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === '_config') {
|
|
1060
|
+
continue;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// Check if this looks like a module (has agents, workflows, or tasks directory)
|
|
1064
|
+
const modulePath = path.join(bmadDir, entry.name);
|
|
1065
|
+
const hasAgents = await fs.pathExists(path.join(modulePath, 'agents'));
|
|
1066
|
+
const hasWorkflows = await fs.pathExists(path.join(modulePath, 'workflows'));
|
|
1067
|
+
const hasTasks = await fs.pathExists(path.join(modulePath, 'tasks'));
|
|
1068
|
+
const hasTools = await fs.pathExists(path.join(modulePath, 'tools'));
|
|
1069
|
+
|
|
1070
|
+
// If it has any of these directories, it's likely a module
|
|
1071
|
+
if (hasAgents || hasWorkflows || hasTasks || hasTools) {
|
|
1072
|
+
modules.push(entry.name);
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
} catch (error) {
|
|
1076
|
+
await prompts.log.warn(`Could not scan for installed modules: ${error.message}`);
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
return modules;
|
|
1080
|
+
}
|
|
690
1081
|
}
|
|
691
1082
|
|
|
692
1083
|
module.exports = { ManifestGenerator };
|