ma-agents 2.22.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.opencode/skills/.ma-agents.json +99 -99
- package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +22 -0
- package/lib/bmad-cache/bmb/.markdownlint-cli2.yaml +1 -0
- package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.pack +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-0de89e0854d5b2b3b3b0c1ee56eee73a739f15e7.rev +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/bmb/package-lock.json +2 -2
- package/lib/bmad-cache/bmb/package.json +7 -4
- package/lib/bmad-cache/bmb/skills/bmad-agent-builder/scripts/generate-html-report.py +534 -0
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-execution-deps.py +4 -35
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-prompt-metrics.py +2 -75
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/prepass-structure-capabilities.py +3 -194
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/scan-path-standards.py +104 -18
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/assets/module-help.csv +6 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/assets/module.yaml +20 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/cleanup-legacy.py +259 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/merge-config.py +408 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/merge-help-csv.py +220 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-cleanup-legacy.py +429 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-merge-config.py +644 -0
- package/lib/bmad-cache/bmb/skills/bmad-builder-setup/scripts/tests/test-merge-help-csv.py +237 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +539 -0
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-execution-deps.py +5 -30
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-workflow-integrity.py +0 -5
- package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/scan-path-standards.py +103 -16
- package/lib/bmad-cache/bmb/skills/module-help.csv +6 -0
- package/lib/bmad-cache/bmb/skills/module.yaml +20 -0
- package/lib/bmad-cache/bmb/tools/validate-doc-links.cjs +407 -0
- package/lib/bmad-cache/bmb/tools/validate-file-refs.mjs +1 -1
- package/lib/bmad-cache/cache-manifest.json +16 -10
- package/lib/bmad-cache/cis/.claude-plugin/marketplace.json +33 -0
- package/lib/bmad-cache/cis/_git_preserved/index +0 -0
- package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.pack → pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.pack} +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-9d60aae6b09bbea0d0c5e79fdbe96e8f66de84e6.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/cis/package-lock.json +17015 -0
- package/lib/bmad-cache/cis/package.json +3 -4
- package/lib/bmad-cache/cis/src/module-help.csv +6 -6
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-brainstorming-coach/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-creative-problem-solver/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-design-thinking-coach/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-innovation-strategist/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-presentation-master/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-cache/cis/src/skills/bmad-cis-agent-storyteller/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +58 -0
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -1
- package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -1
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-8099a88fca0ad946a573316a00887a2921ca1712.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.pack → pack-8099a88fca0ad946a573316a00887a2921ca1712.pack} +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-8099a88fca0ad946a573316a00887a2921ca1712.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/gds/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/gds/package.json +1 -0
- package/lib/bmad-cache/gds/src/module-help.csv +35 -35
- package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +33 -0
- package/lib/bmad-cache/tea/CHANGELOG.md +2 -14
- package/lib/bmad-cache/tea/README.md +31 -18
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-d243f64f83b36190434d68872a69a40870c53030.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.pack → pack-d243f64f83b36190434d68872a69a40870c53030.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-d243f64f83b36190434d68872a69a40870c53030.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.3 +1 -0
- package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +5 -5
- package/lib/bmad-cache/tea/docs/explanation/step-file-architecture.md +2 -2
- package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +3 -3
- package/lib/bmad-cache/tea/docs/glossary/index.md +1 -1
- package/lib/bmad-cache/tea/docs/how-to/customization/extend-tea-with-custom-workflows.md +73 -0
- package/lib/bmad-cache/tea/docs/how-to/workflows/teach-me-testing.md +7 -7
- package/lib/bmad-cache/tea/docs/index.md +2 -1
- package/lib/bmad-cache/tea/docs/reference/commands.md +4 -1
- package/lib/bmad-cache/tea/docs/reference/configuration.md +37 -15
- package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +75 -73
- package/lib/bmad-cache/tea/docs/reference/troubleshooting.md +32 -19
- package/lib/bmad-cache/tea/docs/tutorials/learn-testing-tea-academy.md +3 -3
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +2 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/SKILL.md +70 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/bmad-skill-manifest.yaml +14 -0
- package/lib/bmad-cache/tea/src/module-help.csv +10 -10
- package/lib/bmad-cache/tea/src/module.yaml +8 -8
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/checklist.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/curriculum.yaml +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/session-content-map.yaml +26 -14
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +108 -73
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/instructions.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-03-session-menu.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +14 -6
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-05-completion.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/templates/certificate-template.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/workflow-plan-teach-me-testing.md +8 -8
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/atdd-checklist-template.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-01-preflight-and-context.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-atdd/steps-c/step-04a-subagent-api-failing.md +9 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-01-preflight-and-context.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/steps-c/step-03b-subagent-e2e.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-02-generate-pipeline.md +6 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/steps-c/step-03-configure-quality-gates.md +6 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/steps-c/step-03-scaffold-framework.md +3 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-01-load-context.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/steps-c/step-01-load-context.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/test-review-template.md +11 -11
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/steps-c/step-01-load-context.md +1 -1
- package/lib/bmad-cache/tea/test/test-installation-components.js +85 -21
- package/lib/bmad-cache/tea/test/test-knowledge-base.js +1 -1
- package/lib/bmad-cache/tea/tools/validate-agent-schema.js +105 -5
- package/lib/bmad-cache/wds/.claude-plugin/marketplace.json +35 -0
- package/lib/bmad-cache/wds/.markdownlint-cli2.yaml +38 -0
- package/lib/bmad-cache/wds/.nvmrc +1 -0
- package/lib/bmad-cache/wds/.prettierignore +9 -0
- package/lib/bmad-cache/wds/LICENSE +27 -0
- package/lib/bmad-cache/wds/README.md +126 -0
- package/lib/bmad-cache/wds/_git_preserved/HEAD +1 -0
- package/lib/bmad-cache/wds/_git_preserved/config +13 -0
- package/lib/bmad-cache/wds/_git_preserved/description +1 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/applypatch-msg.sample +15 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +24 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/post-update.sample +8 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-applypatch.sample +14 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-commit.sample +49 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-merge-commit.sample +13 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-push.sample +53 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-rebase.sample +169 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/pre-receive.sample +24 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/push-to-checkout.sample +78 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/sendemail-validate.sample +77 -0
- package/lib/bmad-cache/wds/_git_preserved/hooks/update.sample +128 -0
- package/lib/bmad-cache/wds/_git_preserved/index +0 -0
- package/lib/bmad-cache/wds/_git_preserved/info/exclude +6 -0
- package/lib/bmad-cache/wds/_git_preserved/logs/HEAD +1 -0
- package/lib/bmad-cache/wds/_git_preserved/logs/refs/heads/main +1 -0
- package/lib/bmad-cache/wds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.pack +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-92d32f26e3a97a0786dcea5cb2c24bf90384521c.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/packed-refs +2 -0
- package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -0
- package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +1 -0
- package/lib/bmad-cache/wds/_git_preserved/shallow +1 -0
- package/lib/bmad-cache/wds/eslint.config.mjs +152 -0
- package/lib/bmad-cache/wds/package.json +82 -0
- package/lib/bmad-cache/wds/prettier.config.mjs +32 -0
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +12 -0
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +12 -0
- package/lib/bmad-cache/wds/src/module-help.csv +18 -0
- package/lib/bmad-cache/wds/src/module.yaml +148 -0
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/templates/platform-requirements.template.yaml +69 -0
- package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/design-delivery.template.yaml +104 -0
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/templates/test-scenario.template.yaml +192 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.css +164 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.html +18 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/components/dev-mode.js +430 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/demo-data-template.json +63 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/page-template.html +465 -0
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/templates/work-file-template.yaml +264 -0
- package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/templates/catalog.template.html +363 -0
- package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +1 -0
- package/lib/bmad-customize/bmm-architect.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-bmad-master.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-dev.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-pm.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-qa.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-sm.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-tech-writer.customize.yaml +6 -0
- package/lib/bmad-customize/bmm-ux-designer.customize.yaml +6 -0
- package/lib/bmad-extension/module-help.csv +37 -7
- package/lib/bmad-extension/module.yaml +4 -2
- package/lib/bmad-extension/skills/add-sprint/.gitkeep +0 -0
- package/lib/bmad-extension/skills/add-sprint/SKILL.md +121 -0
- package/lib/bmad-extension/skills/add-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/add-to-sprint/.gitkeep +0 -0
- package/lib/bmad-extension/skills/add-to-sprint/SKILL.md +215 -0
- package/lib/bmad-extension/skills/add-to-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-cyber/.gitkeep +0 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-cyber/SKILL.md +44 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-cyber/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-devops/.gitkeep +0 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-devops/SKILL.md +44 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-devops/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-mil498/.gitkeep +0 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-mil498/SKILL.md +48 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-mil498/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-sre/.gitkeep +0 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-sre/SKILL.md +44 -0
- package/lib/bmad-extension/skills/bmad-ma-agent-sre/bmad-skill-manifest.yaml +11 -0
- package/lib/bmad-extension/skills/create-bug-story/.gitkeep +0 -0
- package/lib/bmad-extension/skills/create-bug-story/SKILL.md +195 -0
- package/lib/bmad-extension/skills/create-bug-story/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-generate-certs/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-generate-certs/SKILL.md +27 -0
- package/lib/bmad-extension/skills/cyber-generate-certs/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-immunity-estimation/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-immunity-estimation/SKILL.md +29 -0
- package/lib/bmad-extension/skills/cyber-immunity-estimation/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-security-audit/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-security-audit/SKILL.md +27 -0
- package/lib/bmad-extension/skills/cyber-security-audit/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-vault-secrets/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-vault-secrets/SKILL.md +28 -0
- package/lib/bmad-extension/skills/cyber-vault-secrets/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-verify-docker-users/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-verify-docker-users/SKILL.md +23 -0
- package/lib/bmad-extension/skills/cyber-verify-docker-users/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-verify-image-signature/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-verify-image-signature/SKILL.md +22 -0
- package/lib/bmad-extension/skills/cyber-verify-image-signature/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/cyber-vulnerability-scan/.gitkeep +0 -0
- package/lib/bmad-extension/skills/cyber-vulnerability-scan/SKILL.md +28 -0
- package/lib/bmad-extension/skills/cyber-vulnerability-scan/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/devops-configure-infrastructure/.gitkeep +0 -0
- package/lib/bmad-extension/skills/devops-configure-infrastructure/SKILL.md +27 -0
- package/lib/bmad-extension/skills/devops-configure-infrastructure/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/devops-disconnected-deployment/.gitkeep +0 -0
- package/lib/bmad-extension/skills/devops-disconnected-deployment/SKILL.md +27 -0
- package/lib/bmad-extension/skills/devops-disconnected-deployment/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/devops-docker-compose-setup/.gitkeep +0 -0
- package/lib/bmad-extension/skills/devops-docker-compose-setup/SKILL.md +26 -0
- package/lib/bmad-extension/skills/devops-docker-compose-setup/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/devops-manage-helm/.gitkeep +0 -0
- package/lib/bmad-extension/skills/devops-manage-helm/SKILL.md +28 -0
- package/lib/bmad-extension/skills/devops-manage-helm/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/devops-sign-docker-image/.gitkeep +0 -0
- package/lib/bmad-extension/skills/devops-sign-docker-image/SKILL.md +24 -0
- package/lib/bmad-extension/skills/devops-sign-docker-image/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/mil498-ocd/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-ocd/SKILL.md +30 -0
- package/lib/bmad-extension/skills/mil498-ocd/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-ocd/prompts/01-discover-project-artifacts.md +26 -0
- package/lib/bmad-extension/skills/mil498-ocd/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-ocd/prompts/03-generate-document.md +90 -0
- package/lib/bmad-extension/skills/mil498-ocd/prompts/04-validate.md +14 -0
- package/lib/bmad-extension/skills/mil498-ocd/prompts/05-review.md +15 -0
- package/lib/bmad-extension/skills/mil498-ocd/prompts/06-save.md +15 -0
- package/lib/bmad-extension/skills/mil498-ocd/template.md +169 -0
- package/lib/bmad-extension/skills/mil498-sdd/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-sdd/SKILL.md +30 -0
- package/lib/bmad-extension/skills/mil498-sdd/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-sdd/prompts/01-discover-project-artifacts.md +50 -0
- package/lib/bmad-extension/skills/mil498-sdd/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-sdd/prompts/03-generate-document.md +98 -0
- package/lib/bmad-extension/skills/mil498-sdd/prompts/04-validate.md +16 -0
- package/lib/bmad-extension/skills/mil498-sdd/prompts/05-review.md +15 -0
- package/lib/bmad-extension/skills/mil498-sdd/prompts/06-save.md +19 -0
- package/lib/bmad-extension/skills/mil498-sdd/template.md +163 -0
- package/lib/bmad-extension/skills/mil498-sdp/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-sdp/SKILL.md +30 -0
- package/lib/bmad-extension/skills/mil498-sdp/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-sdp/prompts/01-discover-project-artifacts.md +32 -0
- package/lib/bmad-extension/skills/mil498-sdp/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-sdp/prompts/03-generate-document.md +187 -0
- package/lib/bmad-extension/skills/mil498-sdp/prompts/04-validate.md +13 -0
- package/lib/bmad-extension/skills/mil498-sdp/prompts/05-review.md +15 -0
- package/lib/bmad-extension/skills/mil498-sdp/prompts/06-save.md +14 -0
- package/lib/bmad-extension/skills/mil498-sdp/template.md +307 -0
- package/lib/bmad-extension/skills/mil498-srs/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-srs/SKILL.md +30 -0
- package/lib/bmad-extension/skills/mil498-srs/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-srs/prompts/01-discover-project-artifacts.md +42 -0
- package/lib/bmad-extension/skills/mil498-srs/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-srs/prompts/03-generate-document.md +100 -0
- package/lib/bmad-extension/skills/mil498-srs/prompts/04-validate.md +16 -0
- package/lib/bmad-extension/skills/mil498-srs/prompts/05-review.md +15 -0
- package/lib/bmad-extension/skills/mil498-srs/prompts/06-save.md +18 -0
- package/lib/bmad-extension/skills/mil498-srs/template.md +219 -0
- package/lib/bmad-extension/skills/mil498-ssdd/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-ssdd/SKILL.md +32 -0
- package/lib/bmad-extension/skills/mil498-ssdd/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/01-discover-project-artifacts.md +32 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/03-csci-discovery-interview.md +43 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/04-generate-document.md +96 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/05-validate.md +14 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/06-review.md +16 -0
- package/lib/bmad-extension/skills/mil498-ssdd/prompts/07-save.md +16 -0
- package/lib/bmad-extension/skills/mil498-ssdd/template.md +154 -0
- package/lib/bmad-extension/skills/mil498-sss/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-sss/SKILL.md +31 -0
- package/lib/bmad-extension/skills/mil498-sss/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-sss/prompts/01-discover-project-artifacts.md +31 -0
- package/lib/bmad-extension/skills/mil498-sss/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-sss/prompts/03-generate-document.md +108 -0
- package/lib/bmad-extension/skills/mil498-sss/prompts/04-validate.md +16 -0
- package/lib/bmad-extension/skills/mil498-sss/prompts/05-review.md +15 -0
- package/lib/bmad-extension/skills/mil498-sss/prompts/06-save.md +15 -0
- package/lib/bmad-extension/skills/mil498-sss/template.md +225 -0
- package/lib/bmad-extension/skills/mil498-std/.gitkeep +0 -0
- package/lib/bmad-extension/skills/mil498-std/SKILL.md +30 -0
- package/lib/bmad-extension/skills/mil498-std/bmad-skill-manifest.yaml +5 -0
- package/lib/bmad-extension/skills/mil498-std/prompts/01-discover-project-artifacts.md +42 -0
- package/lib/bmad-extension/skills/mil498-std/prompts/02-load-template.md +10 -0
- package/lib/bmad-extension/skills/mil498-std/prompts/03-generate-document.md +117 -0
- package/lib/bmad-extension/skills/mil498-std/prompts/04-validate.md +15 -0
- package/lib/bmad-extension/skills/mil498-std/prompts/05-review.md +15 -0
- package/lib/bmad-extension/skills/mil498-std/prompts/06-save.md +15 -0
- package/lib/bmad-extension/skills/mil498-std/template.md +188 -0
- package/lib/bmad-extension/skills/modify-sprint/.gitkeep +0 -0
- package/lib/bmad-extension/skills/modify-sprint/SKILL.md +259 -0
- package/lib/bmad-extension/skills/modify-sprint/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/project-context-expansion/.gitkeep +0 -0
- package/lib/bmad-extension/skills/project-context-expansion/SKILL.md +238 -0
- package/lib/bmad-extension/skills/project-context-expansion/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sprint-status-view/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sprint-status-view/SKILL.md +202 -0
- package/lib/bmad-extension/skills/sprint-status-view/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-check-deployment-status/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-check-deployment-status/SKILL.md +32 -0
- package/lib/bmad-extension/skills/sre-check-deployment-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-check-secrets/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-check-secrets/SKILL.md +23 -0
- package/lib/bmad-extension/skills/sre-check-secrets/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-check-system-status/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-check-system-status/SKILL.md +27 -0
- package/lib/bmad-extension/skills/sre-check-system-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-day-2-ops/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-day-2-ops/SKILL.md +26 -0
- package/lib/bmad-extension/skills/sre-day-2-ops/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-deployment-strategies/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-deployment-strategies/SKILL.md +28 -0
- package/lib/bmad-extension/skills/sre-deployment-strategies/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-fix-deployments/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-fix-deployments/SKILL.md +25 -0
- package/lib/bmad-extension/skills/sre-fix-deployments/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad-extension/skills/sre-gitops-status/.gitkeep +0 -0
- package/lib/bmad-extension/skills/sre-gitops-status/SKILL.md +25 -0
- package/lib/bmad-extension/skills/sre-gitops-status/bmad-skill-manifest.yaml +3 -0
- package/lib/bmad.js +541 -1
- package/package.json +3 -3
- package/test/bmad-extension.test.js +115 -69
- package/test/bmad-version-bump.test.js +313 -0
- package/test/convert-agents-to-skills.test.js +245 -0
- package/test/extension-module-restructure.test.js +359 -0
- package/test/integration-verification.test.js +71 -40
- package/test/migration-validation.test.js +499 -0
- package/test/migration.test.js +832 -0
- package/test/story-15-5-workflow-skills.test.js +311 -0
- package/test/yes-flag.test.js +8 -1
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.pack +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.rev +0 -0
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/bmad-manifest.json +0 -62
- package/lib/bmad-cache/bmb/samples/bmad-excalidraw/bmad-manifest.json +0 -18
- package/lib/bmad-cache/bmb/src/module-help.csv +0 -7
- package/lib/bmad-cache/bmb/src/module.yaml +0 -20
- package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/bmad-manifest.json +0 -24
- package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/bmad-manifest-schema.json +0 -103
- package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/generate-html-report.py +0 -1002
- package/lib/bmad-cache/bmb/src/skills/bmad-agent-builder/scripts/manifest.py +0 -420
- package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/bmad-manifest.json +0 -23
- package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/bmad-manifest-schema.json +0 -103
- package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/generate-html-report.py +0 -1002
- package/lib/bmad-cache/bmb/src/skills/bmad-workflow-builder/scripts/manifest.py +0 -420
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.rev +0 -0
- package/lib/bmad-cache/cis/src/agents/brainstorming-coach.agent.yaml +0 -21
- package/lib/bmad-cache/cis/src/agents/creative-problem-solver.agent.yaml +0 -21
- package/lib/bmad-cache/cis/src/agents/design-thinking-coach.agent.yaml +0 -21
- package/lib/bmad-cache/cis/src/agents/innovation-strategist.agent.yaml +0 -21
- package/lib/bmad-cache/cis/src/agents/presentation-master.agent.yaml +0 -53
- package/lib/bmad-cache/cis/src/agents/storyteller/storyteller.agent.yaml +0 -25
- package/lib/bmad-cache/cis/src/teams/creative-squad.yaml +0 -7
- package/lib/bmad-cache/cis/src/teams/default-party.csv +0 -12
- package/lib/bmad-cache/cis/src/workflows/README.md +0 -175
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/refs/tags/v0.2.2 +0 -1
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.0 +0 -1
- package/lib/bmad-cache/tea/docs/MIGRATION.md +0 -488
- package/lib/bmad-cache/tea/src/agents/tea.agent.yaml +0 -67
- package/lib/bmad-cache/tea/src/teams/default-party.csv +0 -2
- package/lib/bmad-customizations/bmm-cyber.customize.yaml +0 -24
- package/lib/bmad-customizations/bmm-devops.customize.yaml +0 -24
- package/lib/bmad-customizations/bmm-mil498.customize.yaml +0 -36
- package/lib/bmad-customizations/bmm-sre.customize.yaml +0 -24
- package/lib/bmad-customizations/cyber.md +0 -71
- package/lib/bmad-customizations/devops.md +0 -71
- package/lib/bmad-customizations/mil498.md +0 -75
- package/lib/bmad-customizations/sre.md +0 -71
- package/lib/bmad-extension/agents/bmm-architect.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-bmad-master.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-cyber.customize.yaml +0 -30
- package/lib/bmad-extension/agents/bmm-dev.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-devops.customize.yaml +0 -30
- package/lib/bmad-extension/agents/bmm-mil498.customize.yaml +0 -42
- package/lib/bmad-extension/agents/bmm-pm.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-qa.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-sm.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-sre.customize.yaml +0 -30
- package/lib/bmad-extension/agents/bmm-tech-writer.customize.yaml +0 -5
- package/lib/bmad-extension/agents/bmm-ux-designer.customize.yaml +0 -5
- /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-agent-builder/scripts/scan-scripts.py +0 -0
- /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +0 -0
- /package/lib/bmad-cache/bmb/{src/skills → skills}/bmad-workflow-builder/scripts/scan-scripts.py +0 -0
- /package/lib/bmad-cache/{bmb/src/skills/bmad-agent-builder → cis/src/skills/bmad-cis-design-thinking}/bmad-skill-manifest.yaml +0 -0
- /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-design-thinking/design-methods.csv +0 -0
- /package/lib/bmad-cache/{bmb/src/skills/bmad-workflow-builder → cis/src/skills/bmad-cis-innovation-strategy}/bmad-skill-manifest.yaml +0 -0
- /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-innovation-strategy/innovation-frameworks.csv +0 -0
- /package/lib/bmad-cache/cis/src/{workflows/bmad-cis-design-thinking → skills/bmad-cis-problem-solving}/bmad-skill-manifest.yaml +0 -0
- /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-problem-solving/solving-methods.csv +0 -0
- /package/lib/bmad-cache/cis/src/{workflows/bmad-cis-innovation-strategy → skills/bmad-cis-storytelling}/bmad-skill-manifest.yaml +0 -0
- /package/lib/bmad-cache/cis/src/{workflows → skills}/bmad-cis-storytelling/story-types.csv +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/adr-quality-readiness-checklist.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/api-request.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/api-testing-patterns.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/auth-session.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/burn-in.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/ci-burn-in.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/component-tdd.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/contract-testing.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/data-factories.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/email-auth.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/error-handling.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/feature-flags.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/file-utils.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/fixture-architecture.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/fixtures-composition.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/intercept-network-call.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/log.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-error-monitor.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-first.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/network-recorder.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/nfr-criteria.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/overview.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-consumer-di.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-consumer-framework-setup.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pact-mcp.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-consumer-helpers.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-overview.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-provider-verifier.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/pactjs-utils-request-filter.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/playwright-cli.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/playwright-config.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/probability-impact.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/recurse.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/risk-governance.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/selective-testing.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/selector-resilience.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-healing-patterns.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-levels-framework.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-priorities-matrix.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/test-quality.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/timing-debugging.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/knowledge/visual-debugging.md +0 -0
- /package/lib/bmad-cache/tea/src/{testarch → agents/bmad-tea/resources}/tea-index.csv +0 -0
- /package/lib/bmad-cache/{cis/src/workflows/bmad-cis-problem-solving → wds/src/workflows/wds-0-alignment-signoff}/bmad-skill-manifest.yaml +0 -0
- /package/lib/bmad-cache/{cis/src/workflows/bmad-cis-storytelling → wds/src/workflows/wds-0-project-setup}/bmad-skill-manifest.yaml +0 -0
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Tests for
|
|
3
|
+
* Tests for BMAD Extension Module and Built-in Agent Customizations
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Story 8.3: Extension module structure (module.yaml, module-help.csv, workflows)
|
|
6
|
+
* Story 15.6: Built-in agent customizations separated to lib/bmad-customize/
|
|
7
|
+
*
|
|
8
|
+
* Validates extension module files, directory structure, built-in customize.yaml
|
|
9
|
+
* contents, and deployment logic in bmad.js.
|
|
7
10
|
*/
|
|
8
11
|
'use strict';
|
|
9
12
|
|
|
@@ -28,9 +31,9 @@ function test(name, fn) {
|
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
const extDir = path.join(__dirname, '..', 'lib', 'bmad-extension');
|
|
31
|
-
const
|
|
34
|
+
const customizeDir = path.join(__dirname, '..', 'lib', 'bmad-customize');
|
|
32
35
|
|
|
33
|
-
// ─── AC #1: module.yaml, module-help.csv,
|
|
36
|
+
// ─── AC #1: Extension module structure (module.yaml, module-help.csv, workflows) ──
|
|
34
37
|
|
|
35
38
|
console.log('\nAC #1 — Extension module structure');
|
|
36
39
|
|
|
@@ -38,8 +41,15 @@ test('1.1: lib/bmad-extension/ directory exists', () => {
|
|
|
38
41
|
assert.ok(fs.existsSync(extDir), 'lib/bmad-extension/ must exist');
|
|
39
42
|
});
|
|
40
43
|
|
|
41
|
-
test('1.2: lib/bmad-extension/agents/
|
|
42
|
-
|
|
44
|
+
test('1.2: lib/bmad-extension/agents/ has no .customize.yaml files (Story 15.6)', () => {
|
|
45
|
+
const agentsDir = path.join(extDir, 'agents');
|
|
46
|
+
// bmad-method may recreate an empty agents/ dir when processing --custom-content,
|
|
47
|
+
// so we check for absence of customize files, not absence of the directory itself.
|
|
48
|
+
if (fs.existsSync(agentsDir)) {
|
|
49
|
+
const files = fs.readdirSync(agentsDir).filter(f => f.endsWith('.customize.yaml'));
|
|
50
|
+
assert.strictEqual(files.length, 0, `agents/ must have 0 .customize.yaml files, found ${files.length}`);
|
|
51
|
+
}
|
|
52
|
+
// If directory doesn't exist, that's also correct
|
|
43
53
|
});
|
|
44
54
|
|
|
45
55
|
test('1.3: module.yaml exists with extends-module: bmm', () => {
|
|
@@ -47,7 +57,7 @@ test('1.3: module.yaml exists with extends-module: bmm', () => {
|
|
|
47
57
|
assert.ok(fs.existsSync(filePath), 'module.yaml must exist');
|
|
48
58
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
49
59
|
assert.ok(content.includes('extends-module: bmm'), 'module.yaml must declare extends-module: bmm');
|
|
50
|
-
assert.ok(content.includes('name:
|
|
60
|
+
assert.ok(content.includes('name: "MA-Agents Skills & Agents"'), 'module.yaml must have name: "MA-Agents Skills & Agents"');
|
|
51
61
|
});
|
|
52
62
|
|
|
53
63
|
test('1.4: module-help.csv exists', () => {
|
|
@@ -55,81 +65,79 @@ test('1.4: module-help.csv exists', () => {
|
|
|
55
65
|
assert.ok(fs.existsSync(filePath), 'module-help.csv must exist');
|
|
56
66
|
});
|
|
57
67
|
|
|
58
|
-
test('1.5:
|
|
59
|
-
const
|
|
60
|
-
assert.
|
|
68
|
+
test('1.5: workflows/ directory exists in extension module', () => {
|
|
69
|
+
const workflowsDir = path.join(extDir, 'workflows');
|
|
70
|
+
assert.ok(fs.existsSync(workflowsDir), 'lib/bmad-extension/workflows/ must exist');
|
|
61
71
|
});
|
|
62
72
|
|
|
63
|
-
// ─── AC #2:
|
|
64
|
-
|
|
65
|
-
console.log('\nAC #2 — Custom agents: persona + menu + critical_actions');
|
|
66
|
-
|
|
67
|
-
const customAgents = [
|
|
68
|
-
{ id: 'bmm-sre', slug: 'sre' },
|
|
69
|
-
{ id: 'bmm-devops', slug: 'devops' },
|
|
70
|
-
{ id: 'bmm-cyber', slug: 'cyber' },
|
|
71
|
-
{ id: 'bmm-mil498', slug: 'mil498' }
|
|
72
|
-
];
|
|
73
|
+
// ─── AC #2: 8 built-in agents in lib/bmad-customize/ with critical_actions only ──
|
|
73
74
|
|
|
74
|
-
|
|
75
|
-
test(`2.${customAgents.indexOf(agent) + 1}: ${agent.id}.customize.yaml has persona, menu, AND critical_actions`, () => {
|
|
76
|
-
const filePath = path.join(agentsDir, `${agent.id}.customize.yaml`);
|
|
77
|
-
assert.ok(fs.existsSync(filePath), `${agent.id}.customize.yaml must exist`);
|
|
78
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
79
|
-
|
|
80
|
-
assert.ok(content.includes('persona:'), `${agent.id} must have persona section`);
|
|
81
|
-
assert.ok(content.includes('menu:'), `${agent.id} must have menu section`);
|
|
82
|
-
assert.ok(content.includes('critical_actions:'), `${agent.id} must have critical_actions section`);
|
|
83
|
-
assert.ok(content.includes(`skills/${agent.slug}/MANIFEST.yaml`),
|
|
84
|
-
`${agent.id} critical_actions must reference skills/${agent.slug}/MANIFEST.yaml`);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
75
|
+
console.log('\nAC #2 — Built-in agent customizations in lib/bmad-customize/');
|
|
87
76
|
|
|
88
|
-
test('2.
|
|
89
|
-
|
|
90
|
-
const content = fs.readFileSync(path.join(agentsDir, `${agent.id}.customize.yaml`), 'utf-8');
|
|
91
|
-
assert.ok(content.includes('1:'), `${agent.id} must have step 1`);
|
|
92
|
-
assert.ok(content.includes('2:'), `${agent.id} must have step 2`);
|
|
93
|
-
assert.ok(content.includes('3:'), `${agent.id} must have step 3`);
|
|
94
|
-
assert.ok(content.includes('always_load: true'), `${agent.id} step 2 must reference always_load`);
|
|
95
|
-
assert.ok(content.includes('Follow all skill directives'), `${agent.id} step 3 must follow directives`);
|
|
96
|
-
}
|
|
77
|
+
test('2.1: lib/bmad-customize/ directory exists', () => {
|
|
78
|
+
assert.ok(fs.existsSync(customizeDir), 'lib/bmad-customize/ must exist');
|
|
97
79
|
});
|
|
98
80
|
|
|
99
|
-
// ─── AC #3: 7 built-in agents have ONLY critical_actions ────────────────────
|
|
100
|
-
|
|
101
|
-
console.log('\nAC #3 — Built-in agents: critical_actions only');
|
|
102
|
-
|
|
103
81
|
const builtinAgents = [
|
|
104
82
|
'bmm-pm', 'bmm-architect', 'bmm-dev', 'bmm-qa',
|
|
105
|
-
'bmm-sm', 'bmm-tech-writer', 'bmm-ux-designer'
|
|
83
|
+
'bmm-sm', 'bmm-tech-writer', 'bmm-ux-designer', 'bmm-bmad-master'
|
|
106
84
|
];
|
|
107
85
|
|
|
86
|
+
test('2.2: lib/bmad-customize/ contains exactly 8 .customize.yaml files', () => {
|
|
87
|
+
const files = fs.readdirSync(customizeDir).filter(f => f.endsWith('.customize.yaml'));
|
|
88
|
+
assert.strictEqual(files.length, 8, `Expected 8 .customize.yaml files, found ${files.length}`);
|
|
89
|
+
});
|
|
90
|
+
|
|
108
91
|
for (const agentId of builtinAgents) {
|
|
109
|
-
test(`3
|
|
110
|
-
const filePath = path.join(
|
|
92
|
+
test(`2.3-${agentId}: ${agentId}.customize.yaml exists with correct content`, () => {
|
|
93
|
+
const filePath = path.join(customizeDir, `${agentId}.customize.yaml`);
|
|
111
94
|
assert.ok(fs.existsSync(filePath), `${agentId}.customize.yaml must exist`);
|
|
112
95
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
113
96
|
|
|
97
|
+
// Must have critical_actions
|
|
114
98
|
assert.ok(content.includes('critical_actions:'), `${agentId} must have critical_actions`);
|
|
99
|
+
|
|
100
|
+
// Must use 6.2.0 array syntax (- "...") not numbered keys (1: "...")
|
|
101
|
+
assert.ok(content.includes(' - "'), `${agentId} must use array syntax (- "...")`);
|
|
102
|
+
assert.ok(!content.match(/^\s+\d+:/m), `${agentId} must NOT use numbered key syntax`);
|
|
103
|
+
|
|
104
|
+
// Must NOT have persona or menu
|
|
115
105
|
assert.ok(!content.includes('persona:'), `${agentId} must NOT have persona section`);
|
|
116
106
|
assert.ok(!content.includes('menu:'), `${agentId} must NOT have menu section`);
|
|
107
|
+
|
|
108
|
+
// Must reference project-level skills/MANIFEST.yaml
|
|
117
109
|
assert.ok(content.includes('skills/MANIFEST.yaml'), `${agentId} must reference project-level skills/MANIFEST.yaml`);
|
|
110
|
+
|
|
111
|
+
// Must have all 4 critical actions
|
|
112
|
+
assert.ok(content.includes('Read the skills MANIFEST'), `${agentId} must have MANIFEST read action`);
|
|
113
|
+
assert.ok(content.includes('always_load: true'), `${agentId} must reference always_load`);
|
|
114
|
+
assert.ok(content.includes('project-context.md'), `${agentId} must reference project-context.md`);
|
|
115
|
+
assert.ok(content.includes('Follow all skill directives'), `${agentId} must have follow directives action`);
|
|
116
|
+
|
|
117
|
+
// Must have agent-specific comment header
|
|
118
|
+
assert.ok(content.includes(`MA-AGENTS: skill enforcement for ${agentId}`),
|
|
119
|
+
`${agentId} must have agent-specific comment header`);
|
|
118
120
|
});
|
|
119
121
|
}
|
|
120
122
|
|
|
121
|
-
// ─── AC #
|
|
123
|
+
// ─── AC #3: bmad.js has extension and customize deployment stages ─────────
|
|
122
124
|
|
|
123
|
-
console.log('\nAC #
|
|
125
|
+
console.log('\nAC #3 — bmad.js deployment logic');
|
|
124
126
|
|
|
125
|
-
test('
|
|
127
|
+
test('3.1: bmad.js contains extension deployment code', () => {
|
|
126
128
|
const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
|
|
127
129
|
assert.ok(bmadSrc.includes("'bmad-extension'"), 'bmad.js must reference bmad-extension source dir');
|
|
128
130
|
assert.ok(bmadSrc.includes("'extensions'"), 'bmad.js must reference extensions target dir');
|
|
129
131
|
assert.ok(bmadSrc.includes("'ma-agents-skills'"), 'bmad.js must reference ma-agents-skills');
|
|
130
132
|
});
|
|
131
133
|
|
|
132
|
-
test('
|
|
134
|
+
test('3.2: bmad.js contains customize deployment code', () => {
|
|
135
|
+
const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
|
|
136
|
+
assert.ok(bmadSrc.includes("'bmad-customize'"), 'bmad.js must reference bmad-customize source dir');
|
|
137
|
+
assert.ok(bmadSrc.includes('Applied built-in customization'), 'bmad.js must log built-in customization deployment');
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test('3.3: extension deployment uses path.join for all paths', () => {
|
|
133
141
|
const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
|
|
134
142
|
assert.ok(bmadSrc.includes("path.join(__dirname, 'bmad-extension')"),
|
|
135
143
|
'extensionSource must use path.join');
|
|
@@ -137,37 +145,53 @@ test('4.2: extension deployment uses path.join for all paths', () => {
|
|
|
137
145
|
'extensionTarget must use path.join');
|
|
138
146
|
});
|
|
139
147
|
|
|
140
|
-
test('4
|
|
141
|
-
|
|
148
|
+
test('3.4: customize deployment uses path.join for source', () => {
|
|
149
|
+
const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
|
|
150
|
+
assert.ok(bmadSrc.includes("path.join(__dirname, 'bmad-customize')"),
|
|
151
|
+
'customizeSource must use path.join');
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
test('3.5: deployment order is RECOMPILE > EXTENSION > CUSTOMIZE > WORKFLOWS', () => {
|
|
142
155
|
const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
|
|
143
156
|
const recompileIdx = bmadSrc.indexOf('STAGE:RECOMPILE');
|
|
144
157
|
const extensionIdx = bmadSrc.indexOf('STAGE:EXTENSION');
|
|
158
|
+
const customizeIdx = bmadSrc.indexOf('STAGE:CUSTOMIZE');
|
|
145
159
|
const workflowIdx = bmadSrc.indexOf('STAGE:WORKFLOWS');
|
|
146
160
|
|
|
147
161
|
assert.ok(recompileIdx > 0, 'STAGE:RECOMPILE marker must exist');
|
|
148
162
|
assert.ok(extensionIdx > 0, 'STAGE:EXTENSION marker must exist');
|
|
163
|
+
assert.ok(customizeIdx > 0, 'STAGE:CUSTOMIZE marker must exist');
|
|
149
164
|
assert.ok(workflowIdx > 0, 'STAGE:WORKFLOWS marker must exist');
|
|
150
165
|
assert.ok(extensionIdx > recompileIdx, 'extension deployment must come after recompile');
|
|
151
|
-
assert.ok(
|
|
166
|
+
assert.ok(customizeIdx > extensionIdx, 'customize deployment must come after extension');
|
|
167
|
+
assert.ok(customizeIdx < workflowIdx, 'customize deployment must come before workflows');
|
|
152
168
|
});
|
|
153
169
|
|
|
154
|
-
test('
|
|
170
|
+
test('3.6: extension deployment logs with chalk.cyan', () => {
|
|
155
171
|
const bmadSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'bmad.js'), 'utf-8');
|
|
156
172
|
assert.ok(bmadSrc.includes("chalk.cyan(' + Deployed BMAD extension module: ma-agents-skills')"),
|
|
157
173
|
'must log deployment with chalk.cyan');
|
|
158
174
|
});
|
|
159
175
|
|
|
160
|
-
test('
|
|
176
|
+
test('3.7: bmad-customizations retains platform and generic files (agent files removed in Epic 15)', () => {
|
|
161
177
|
const customDir = path.join(__dirname, '..', 'lib', 'bmad-customizations');
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
178
|
+
// Platform-specific and generic files must still exist
|
|
179
|
+
const expectedFiles = ['claude-code', 'cursor', 'cline', 'gemini', 'generic', 'antigravity'];
|
|
180
|
+
for (const name of expectedFiles) {
|
|
181
|
+
const filePath = path.join(customDir, `${name}.customize.yaml`);
|
|
182
|
+
assert.ok(fs.existsSync(filePath), `${name}.customize.yaml must still exist in bmad-customizations/`);
|
|
183
|
+
}
|
|
184
|
+
// Custom agent files (bmm-sre, bmm-devops, etc.) were removed — now in skill folders
|
|
185
|
+
const removedAgents = ['bmm-sre', 'bmm-devops', 'bmm-cyber', 'bmm-mil498'];
|
|
186
|
+
for (const id of removedAgents) {
|
|
187
|
+
const filePath = path.join(customDir, `${id}.customize.yaml`);
|
|
188
|
+
assert.ok(!fs.existsSync(filePath), `${id}.customize.yaml should NOT exist in bmad-customizations/ (moved to skill folders)`);
|
|
165
189
|
}
|
|
166
190
|
});
|
|
167
191
|
|
|
168
|
-
// ───
|
|
192
|
+
// ─── Integration tests — actual fs.copy deployment ───────────────────────
|
|
169
193
|
|
|
170
|
-
console.log('\nIntegration — applyCustomizations()
|
|
194
|
+
console.log('\nIntegration — applyCustomizations() deployment');
|
|
171
195
|
|
|
172
196
|
const fsExtra = require('fs-extra');
|
|
173
197
|
const os = require('os');
|
|
@@ -206,12 +230,34 @@ async function runIntegrationTests() {
|
|
|
206
230
|
const content = fsExtra.readFileSync(deployedModule, 'utf-8');
|
|
207
231
|
assert.ok(content.includes('extends-module: bmm'),
|
|
208
232
|
'deployed module.yaml must contain extends-module: bmm');
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
await asyncTest('INT-2: applyCustomizations deploys built-in customizations to _bmad/_config/agents/', async () => {
|
|
236
|
+
// Verify built-in customizations were deployed to config dir
|
|
237
|
+
const configAgentsDir = path.join(tmpDir, '_bmad', '_config', 'agents');
|
|
238
|
+
|
|
239
|
+
for (const agentId of builtinAgents) {
|
|
240
|
+
const deployedFile = path.join(configAgentsDir, `${agentId}.customize.yaml`);
|
|
241
|
+
assert.ok(fsExtra.existsSync(deployedFile),
|
|
242
|
+
`${agentId}.customize.yaml must be deployed to _bmad/_config/agents/`);
|
|
243
|
+
|
|
244
|
+
const content = fsExtra.readFileSync(deployedFile, 'utf-8');
|
|
245
|
+
assert.ok(content.includes('critical_actions:'),
|
|
246
|
+
`deployed ${agentId}.customize.yaml must contain critical_actions`);
|
|
247
|
+
assert.ok(content.includes('skills/MANIFEST.yaml'),
|
|
248
|
+
`deployed ${agentId}.customize.yaml must reference skills/MANIFEST.yaml`);
|
|
249
|
+
}
|
|
250
|
+
});
|
|
209
251
|
|
|
210
|
-
|
|
211
|
-
const
|
|
212
|
-
|
|
213
|
-
const
|
|
214
|
-
|
|
252
|
+
await asyncTest('INT-3: deployed customizations use array syntax not numbered keys', async () => {
|
|
253
|
+
const configAgentsDir = path.join(tmpDir, '_bmad', '_config', 'agents');
|
|
254
|
+
|
|
255
|
+
for (const agentId of builtinAgents) {
|
|
256
|
+
const deployedFile = path.join(configAgentsDir, `${agentId}.customize.yaml`);
|
|
257
|
+
const content = fsExtra.readFileSync(deployedFile, 'utf-8');
|
|
258
|
+
assert.ok(content.includes(' - "'), `deployed ${agentId} must use array syntax`);
|
|
259
|
+
assert.ok(!content.match(/^\s+\d+:/m), `deployed ${agentId} must NOT use numbered keys`);
|
|
260
|
+
}
|
|
215
261
|
});
|
|
216
262
|
|
|
217
263
|
// Cleanup
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Tests for Story 15.1: Bump bmad-method to 6.2.1 and Update Cache
|
|
4
|
+
*
|
|
5
|
+
* Task 1: Verify package.json dependency updated
|
|
6
|
+
* Task 2: Verify build:bmad-cache compatibility
|
|
7
|
+
* Task 3: Verify bmad.js CLI compatibility
|
|
8
|
+
* Task 4: Verify prePopulateBmadCache compatibility
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
const assert = require('assert');
|
|
13
|
+
const fs = require('fs-extra');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
|
|
16
|
+
let passed = 0;
|
|
17
|
+
let failed = 0;
|
|
18
|
+
const errors = [];
|
|
19
|
+
|
|
20
|
+
function test(name, fn) {
|
|
21
|
+
try {
|
|
22
|
+
fn();
|
|
23
|
+
console.log(` \u2713 ${name}`);
|
|
24
|
+
passed++;
|
|
25
|
+
} catch (err) {
|
|
26
|
+
console.error(` \u2717 ${name}: ${err.message}`);
|
|
27
|
+
failed++;
|
|
28
|
+
errors.push({ name, err });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const projectRoot = path.resolve(__dirname, '..');
|
|
33
|
+
|
|
34
|
+
console.log('\nStory 15.1: Bump bmad-method to 6.2.1 and Update Cache\n');
|
|
35
|
+
|
|
36
|
+
// ---- Task 1: package.json dependency ----
|
|
37
|
+
|
|
38
|
+
console.log('Task 1: package.json dependency');
|
|
39
|
+
|
|
40
|
+
test('package.json pins bmad-method at 6.2.1', () => {
|
|
41
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(projectRoot, 'package.json'), 'utf8'));
|
|
42
|
+
assert.strictEqual(pkg.dependencies['bmad-method'], '6.2.1');
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test('installed bmad-method is version 6.2.1', () => {
|
|
46
|
+
const bmadPkg = JSON.parse(
|
|
47
|
+
fs.readFileSync(path.join(projectRoot, 'node_modules', 'bmad-method', 'package.json'), 'utf8')
|
|
48
|
+
);
|
|
49
|
+
assert.strictEqual(bmadPkg.version, '6.2.1');
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test('require.resolve finds bmad-npx-wrapper.js', () => {
|
|
53
|
+
const resolved = require.resolve('bmad-method/tools/bmad-npx-wrapper.js');
|
|
54
|
+
assert.ok(resolved.includes('bmad-npx-wrapper.js'), `Unexpected path: ${resolved}`);
|
|
55
|
+
assert.ok(fs.existsSync(resolved), `File does not exist: ${resolved}`);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// ---- Task 2: build:bmad-cache compatibility ----
|
|
59
|
+
|
|
60
|
+
console.log('\nTask 2: build:bmad-cache compatibility');
|
|
61
|
+
|
|
62
|
+
test('external-official-modules.yaml exists in 6.2.1', () => {
|
|
63
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
64
|
+
const yamlPath = path.join(bmadDir, 'tools', 'cli', 'external-official-modules.yaml');
|
|
65
|
+
assert.ok(fs.existsSync(yamlPath), `YAML not found at ${yamlPath}`);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('YAML parser extracts 5 modules from 6.2.1', () => {
|
|
69
|
+
// Import the parser from build-bmad-cache.js by reading and evaluating it
|
|
70
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
71
|
+
const yamlPath = path.join(bmadDir, 'tools', 'cli', 'external-official-modules.yaml');
|
|
72
|
+
const content = fs.readFileSync(yamlPath, 'utf8');
|
|
73
|
+
|
|
74
|
+
// Replicate the parser logic
|
|
75
|
+
const modules = [];
|
|
76
|
+
const lines = content.split('\n');
|
|
77
|
+
let inModules = false;
|
|
78
|
+
let currentModule = null;
|
|
79
|
+
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
const trimmed = line.trimEnd();
|
|
82
|
+
if (trimmed === '' || trimmed.match(/^\s*#/)) continue;
|
|
83
|
+
if (trimmed === 'modules:') { inModules = true; continue; }
|
|
84
|
+
if (!inModules) continue;
|
|
85
|
+
|
|
86
|
+
const moduleKeyMatch = trimmed.match(/^\s{1,4}([a-zA-Z0-9_-]+):\s*$/);
|
|
87
|
+
if (moduleKeyMatch) {
|
|
88
|
+
if (currentModule) modules.push(currentModule);
|
|
89
|
+
currentModule = { key: moduleKeyMatch[1] };
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (currentModule) {
|
|
94
|
+
const propMatch = trimmed.match(/^\s{2,8}([a-zA-Z0-9_-]+):\s+"([^"]*)"$/);
|
|
95
|
+
if (propMatch) {
|
|
96
|
+
currentModule[propMatch[1]] = propMatch[2];
|
|
97
|
+
} else {
|
|
98
|
+
const unquotedMatch = trimmed.match(/^\s{2,8}([a-zA-Z0-9_-]+):\s+(.+)$/);
|
|
99
|
+
if (unquotedMatch) {
|
|
100
|
+
currentModule[unquotedMatch[1]] = unquotedMatch[2].trim();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (currentModule) modules.push(currentModule);
|
|
106
|
+
|
|
107
|
+
const parsed = modules.filter(m => m.code && m.url).map(m => ({
|
|
108
|
+
code: m.code,
|
|
109
|
+
url: m.url,
|
|
110
|
+
name: m.name || m.key,
|
|
111
|
+
branch: m.branch || 'main'
|
|
112
|
+
}));
|
|
113
|
+
|
|
114
|
+
assert.strictEqual(parsed.length, 5, `Expected 5 modules, got ${parsed.length}`);
|
|
115
|
+
const codes = parsed.map(m => m.code).sort();
|
|
116
|
+
assert.deepStrictEqual(codes, ['bmb', 'cis', 'gds', 'tea', 'wds']);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test('wds module is present in parsed YAML', () => {
|
|
120
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
121
|
+
const yamlPath = path.join(bmadDir, 'tools', 'cli', 'external-official-modules.yaml');
|
|
122
|
+
const content = fs.readFileSync(yamlPath, 'utf8');
|
|
123
|
+
assert.ok(content.includes('code: wds'), 'wds module code not found in YAML');
|
|
124
|
+
assert.ok(content.includes('bmad-method-wds-expansion'), 'wds repo URL not found in YAML');
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test('cache-manifest.json exists and lists 5 modules', () => {
|
|
128
|
+
const manifestPath = path.join(projectRoot, 'lib', 'bmad-cache', 'cache-manifest.json');
|
|
129
|
+
assert.ok(fs.existsSync(manifestPath), `Manifest not found at ${manifestPath}`);
|
|
130
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
131
|
+
const moduleCodes = Object.keys(manifest.modules);
|
|
132
|
+
assert.strictEqual(moduleCodes.length, 5, `Expected 5 modules in manifest, got ${moduleCodes.length}`);
|
|
133
|
+
assert.deepStrictEqual(moduleCodes.sort(), ['bmb', 'cis', 'gds', 'tea', 'wds']);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test('cache-manifest.json records bmadMethodVersion as 6.2.1', () => {
|
|
137
|
+
const manifestPath = path.join(projectRoot, 'lib', 'bmad-cache', 'cache-manifest.json');
|
|
138
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
139
|
+
assert.strictEqual(manifest.bmadMethodVersion, '6.2.1');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('each cached module has a commit SHA in manifest', () => {
|
|
143
|
+
const manifestPath = path.join(projectRoot, 'lib', 'bmad-cache', 'cache-manifest.json');
|
|
144
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
|
|
145
|
+
for (const [code, info] of Object.entries(manifest.modules)) {
|
|
146
|
+
assert.ok(info.commitSha, `Module ${code} missing commitSha`);
|
|
147
|
+
assert.ok(info.commitSha.match(/^[a-f0-9]+$/), `Module ${code} has invalid SHA: ${info.commitSha}`);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test('lib/bmad-cache/wds/ directory exists with content', () => {
|
|
152
|
+
const wdsDir = path.join(projectRoot, 'lib', 'bmad-cache', 'wds');
|
|
153
|
+
assert.ok(fs.existsSync(wdsDir), `wds cache dir not found at ${wdsDir}`);
|
|
154
|
+
const entries = fs.readdirSync(wdsDir);
|
|
155
|
+
assert.ok(entries.length > 0, 'wds cache directory is empty');
|
|
156
|
+
assert.ok(entries.includes('_git_preserved'), 'wds missing _git_preserved directory');
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
test('all 5 cached modules have _git_preserved directory', () => {
|
|
160
|
+
const cacheDir = path.join(projectRoot, 'lib', 'bmad-cache');
|
|
161
|
+
const expected = ['bmb', 'cis', 'gds', 'tea', 'wds'];
|
|
162
|
+
for (const mod of expected) {
|
|
163
|
+
const preserved = path.join(cacheDir, mod, '_git_preserved');
|
|
164
|
+
assert.ok(fs.existsSync(preserved), `${mod} missing _git_preserved at ${preserved}`);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// ---- Task 3: bmad.js CLI compatibility ----
|
|
169
|
+
|
|
170
|
+
console.log('\nTask 3: bmad.js CLI compatibility');
|
|
171
|
+
|
|
172
|
+
const bmad = require('../lib/bmad');
|
|
173
|
+
|
|
174
|
+
test('getBmadCommand resolves bmad-npx-wrapper.js from 6.2.1', () => {
|
|
175
|
+
const result = bmad.buildBmadArgs({
|
|
176
|
+
projectRoot: '/test',
|
|
177
|
+
modules: ['bmm'],
|
|
178
|
+
tools: [],
|
|
179
|
+
action: 'install',
|
|
180
|
+
});
|
|
181
|
+
assert.ok(result.includes('bmad-npx-wrapper.js'), `Expected wrapper path in: ${result}`);
|
|
182
|
+
assert.ok(result.startsWith('node "'), `Expected node command prefix: ${result}`);
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
test('buildBmadArgs generates valid --action update flag', () => {
|
|
186
|
+
const result = bmad.buildBmadArgs({
|
|
187
|
+
projectRoot: '/test',
|
|
188
|
+
modules: ['bmm', 'bmb'],
|
|
189
|
+
tools: ['claude-code'],
|
|
190
|
+
action: 'update',
|
|
191
|
+
});
|
|
192
|
+
assert.ok(result.includes('--action update'), `Expected --action update in: ${result}`);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
test('6.2.1 CLI accepts --directory flag', () => {
|
|
196
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
197
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
198
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
199
|
+
assert.ok(content.includes('--directory'), '6.2.1 install.js missing --directory flag');
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
test('6.2.1 CLI accepts --modules flag', () => {
|
|
203
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
204
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
205
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
206
|
+
assert.ok(content.includes('--modules'), '6.2.1 install.js missing --modules flag');
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
test('6.2.1 CLI accepts --tools flag', () => {
|
|
210
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
211
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
212
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
213
|
+
assert.ok(content.includes('--tools'), '6.2.1 install.js missing --tools flag');
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test('6.2.1 CLI accepts --custom-content flag', () => {
|
|
217
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
218
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
219
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
220
|
+
assert.ok(content.includes('--custom-content'), '6.2.1 install.js missing --custom-content flag');
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test('6.2.1 CLI accepts --action flag', () => {
|
|
224
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
225
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
226
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
227
|
+
assert.ok(content.includes('--action'), '6.2.1 install.js missing --action flag');
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test('6.2.1 CLI accepts --yes flag', () => {
|
|
231
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
232
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
233
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
234
|
+
assert.ok(content.includes('--yes'), '6.2.1 install.js missing --yes flag');
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
test('6.2.1 CLI accepts --user-name flag', () => {
|
|
238
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
239
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
240
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
241
|
+
assert.ok(content.includes('--user-name'), '6.2.1 install.js missing --user-name flag');
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test('6.2.1 CLI accepts --communication-language flag', () => {
|
|
245
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
246
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
247
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
248
|
+
assert.ok(content.includes('--communication-language'), '6.2.1 install.js missing --communication-language flag');
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
test('6.2.1 CLI accepts --document-output-language flag', () => {
|
|
252
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
253
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
254
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
255
|
+
assert.ok(content.includes('--document-output-language'), '6.2.1 install.js missing --document-output-language flag');
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
test('6.2.1 CLI accepts --output-folder flag', () => {
|
|
259
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
260
|
+
const installCmd = path.join(bmadDir, 'tools', 'cli', 'commands', 'install.js');
|
|
261
|
+
const content = fs.readFileSync(installCmd, 'utf8');
|
|
262
|
+
assert.ok(content.includes('--output-folder'), '6.2.1 install.js missing --output-folder flag');
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test('module.yaml custom-content format is accepted by 6.2.1', () => {
|
|
266
|
+
const bmadDir = path.dirname(require.resolve('bmad-method/package.json'));
|
|
267
|
+
const handlerPath = path.join(bmadDir, 'tools', 'cli', 'installers', 'lib', 'custom', 'handler.js');
|
|
268
|
+
const content = fs.readFileSync(handlerPath, 'utf8');
|
|
269
|
+
// 6.2.1 still looks for module.yaml files
|
|
270
|
+
assert.ok(content.includes('module.yaml'), '6.2.1 handler.js no longer references module.yaml');
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// ---- Task 4: prePopulateBmadCache compatibility ----
|
|
274
|
+
|
|
275
|
+
console.log('\nTask 4: prePopulateBmadCache compatibility');
|
|
276
|
+
|
|
277
|
+
test('prePopulateBmadCache is exported', () => {
|
|
278
|
+
assert.strictEqual(typeof bmad.prePopulateBmadCache, 'function');
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
test('prePopulateBmadCache source handles all cache modules dynamically', () => {
|
|
282
|
+
// The function iterates fs.readdir(cacheSource) and handles any number of modules
|
|
283
|
+
// No hardcoded module list = automatically handles 5 modules including wds
|
|
284
|
+
const bmadSource = fs.readFileSync(path.join(projectRoot, 'lib', 'bmad.js'), 'utf8');
|
|
285
|
+
assert.ok(bmadSource.includes('fs.readdir(cacheSource)'), 'prePopulateBmadCache should iterate cache directory');
|
|
286
|
+
assert.ok(!bmadSource.includes("'bmb'") || !bmadSource.includes("['bmb',"), 'prePopulateBmadCache should not hardcode module list');
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
test('restoreGitDir logic exists in bmad.js', () => {
|
|
290
|
+
const bmadSource = fs.readFileSync(path.join(projectRoot, 'lib', 'bmad.js'), 'utf8');
|
|
291
|
+
assert.ok(bmadSource.includes('restoreGitDir'), 'Missing restoreGitDir function');
|
|
292
|
+
assert.ok(bmadSource.includes('_git_preserved'), 'Missing _git_preserved reference');
|
|
293
|
+
assert.ok(bmadSource.includes('file://'), 'Missing file:// URL for offline fetch');
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
test('wds cache directory has src/ with module content', () => {
|
|
297
|
+
const wdsSrc = path.join(projectRoot, 'lib', 'bmad-cache', 'wds', 'src');
|
|
298
|
+
assert.ok(fs.existsSync(wdsSrc), `wds/src/ not found at ${wdsSrc}`);
|
|
299
|
+
const entries = fs.readdirSync(wdsSrc);
|
|
300
|
+
assert.ok(entries.length > 0, 'wds/src/ is empty');
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
// ---- Summary ----
|
|
304
|
+
|
|
305
|
+
console.log(`\n${passed} passed, ${failed} failed`);
|
|
306
|
+
if (errors.length > 0) {
|
|
307
|
+
console.log('\nFailures:');
|
|
308
|
+
errors.forEach(({ name, err }) => {
|
|
309
|
+
console.log(` ${name}:`);
|
|
310
|
+
console.log(` ${err.message}`);
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
process.exit(failed > 0 ? 1 : 0);
|