ma-agents 3.12.3 → 3.13.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/bin/cli.js +67 -13
- package/docs/architecture.md +18 -0
- package/lib/bmad-cache/bmb/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/bmb/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/bmb/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.pack +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-8f8b045fef5af6911495cf3b2a89f1ed75e120f7.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 +1 -1
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/samples/bmad-agent-dream-weaver/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/samples/sample-module-setup/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/cleanup-legacy.py +28 -0
- package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/samples/sample-module-setup/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/cleanup-legacy.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/skills/bmad-bmb-setup/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/assets/Dockerfile +29 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/docker_setup.py +115 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/generate_report.py +184 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/pty_runner.py +171 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_evals.py +492 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/run_triggers.py +366 -0
- package/lib/bmad-cache/bmb/skills/bmad-eval-runner/scripts/utils.py +260 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/assets/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/cleanup-legacy.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/setup-skill-template/scripts/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-config.py +33 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/assets/standalone-module-template/merge-help-csv.py +28 -0
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/tests/test-validate-module.py +74 -1
- package/lib/bmad-cache/bmb/skills/bmad-module-builder/scripts/validate-module.py +24 -13
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/assets/sample-customize-product-brief.toml +48 -33
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/extract-report-json.py +287 -0
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-html-report.py +57 -8
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/prepass-prompt-metrics.py +7 -7
- package/lib/bmad-cache/bmb/skills/module-help.csv +1 -1
- package/lib/bmad-cache/bmb/website/public/img/eval-test-types.png +0 -0
- package/lib/bmad-cache/cache-manifest.json +17 -18
- package/lib/bmad-cache/cis/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/cis/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/cis/_git_preserved/index +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/{pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.pack → pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.pack} +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-18c8290560a98bcb7bf0676e6cc9b2ac5ca2823e.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/refs/tags/v0.2.1 +1 -0
- package/lib/bmad-cache/cis/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/cis/package-lock.json +2 -2
- package/lib/bmad-cache/cis/package.json +1 -1
- package/lib/bmad-cache/cis/src/module-help.csv +1 -1
- package/lib/bmad-cache/gds/.claude-plugin/marketplace.json +4 -7
- package/lib/bmad-cache/gds/README.md +3 -1
- package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/gds/_git_preserved/index +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/{pack-9427a146a90c00bb542cba038874bf9671ba4dc0.pack → pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.pack} +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-dcb7c556d9bb6b6b70d2301e094eaac6d7300552.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 -1
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/customize.toml +5 -5
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/customize.toml +5 -5
- package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/customize.toml +0 -5
- package/lib/bmad-cache/gds/src/module-help.csv +6 -12
- package/lib/bmad-cache/gds/src/module.yaml +1 -1
- package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/customize.toml +97 -22
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/assets/validation-report-template.html +190 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/customize.toml +99 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-gdd/scripts/render-validation-html.py +290 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/assets/validation-report-template.html +190 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-prd/customize.toml +84 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/assets/validation-report-template.html +319 -0
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-ux/customize.toml +101 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/architecture-patterns.yaml +1 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/decision-catalog.yaml +88 -0
- package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/engine-mcps.yaml +124 -2
- package/lib/bmad-cache/gds/src/workflows/4-production/gds-investigate/customize.toml +62 -0
- package/lib/bmad-cache/tea/.claude-plugin/marketplace.json +1 -1
- package/lib/bmad-cache/tea/.github/workflows/docs.yaml +3 -3
- package/lib/bmad-cache/tea/.github/workflows/quality.yaml +10 -10
- package/lib/bmad-cache/tea/AGENTS.md +31 -0
- package/lib/bmad-cache/tea/CHANGELOG.md +42 -1
- package/lib/bmad-cache/tea/README.md +8 -5
- package/lib/bmad-cache/tea/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/tea/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/tea/_git_preserved/index +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/{pack-f0df537f2649464ff6c5aee241165eb9c8664227.pack → pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.pack} +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-9e4197e37df7763dd7a05c2965ee921dfd2eb617.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.19.0 +1 -0
- package/lib/bmad-cache/tea/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/tea/docs/explanation/engagement-models.md +15 -16
- package/lib/bmad-cache/tea/docs/explanation/knowledge-base-system.md +2 -0
- package/lib/bmad-cache/tea/docs/explanation/risk-based-testing.md +1 -1
- package/lib/bmad-cache/tea/docs/explanation/tea-overview.md +88 -52
- package/lib/bmad-cache/tea/docs/explanation/testing-as-engineering.md +13 -12
- package/lib/bmad-cache/tea/docs/glossary/index.md +2 -2
- package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-for-enterprise.md +19 -18
- package/lib/bmad-cache/tea/docs/how-to/brownfield/use-tea-with-existing-tests.md +1 -1
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-nfr-assess.md +32 -26
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-test-design.md +20 -14
- package/lib/bmad-cache/tea/docs/how-to/workflows/run-trace.md +3 -3
- package/lib/bmad-cache/tea/docs/index.md +13 -11
- package/lib/bmad-cache/tea/docs/reference/commands.md +37 -13
- package/lib/bmad-cache/tea/docs/reference/knowledge-base.md +2 -2
- package/lib/bmad-cache/tea/package-lock.json +2 -2
- package/lib/bmad-cache/tea/package.json +1 -1
- package/lib/bmad-cache/tea/src/agents/bmad-tea/customize.toml +20 -15
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/confidence-gate.md +73 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/knowledge/test-quality.md +1 -0
- package/lib/bmad-cache/tea/src/agents/bmad-tea/resources/tea-index.csv +2 -1
- package/lib/bmad-cache/tea/src/module-help.csv +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/README.md +5 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/role-paths.yaml +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/data/tea-resources-index.yaml +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-01.md +2 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-teach-me-testing/steps-c/step-04-session-07.md +1 -1
- 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-testarch-atdd/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-automate/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-ci/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-framework/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/SKILL.md +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/checklist.md +11 -11
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/instructions.md +4 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/nfr-report-template.md +5 -5
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/resources/tea-index.csv +1 -1
- 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-nfr/steps-c/step-01b-resume.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-02-define-thresholds.md +14 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04-evaluate-and-score.md +7 -7
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04a-subagent-security.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04b-subagent-performance.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04c-subagent-reliability.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04d-subagent-scalability.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-04e-aggregate-nfr.md +4 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/steps-c/step-05-generate-report.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow-plan.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-nfr/workflow.yaml +3 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/checklist.md +23 -3
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-02-load-context.md +7 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-03-risk-and-testability.md +16 -2
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-04-coverage-plan.md +20 -4
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/steps-c/step-05-generate-output.md +2 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-architecture-template.md +17 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-qa-template.md +15 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-design/test-design-template.md +16 -0
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-test-review/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/checklist.md +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/resources/tea-index.csv +1 -1
- package/lib/bmad-cache/tea/src/workflows/testarch/bmad-testarch-trace/trace-template.md +1 -1
- package/lib/bmad-cache/tea/test/test-installation-components.js +49 -0
- package/lib/bmad-cache/tea/website/astro.config.mjs +2 -2
- package/lib/bmad-cache/wds/README.md +1 -1
- package/lib/bmad-cache/wds/_git_preserved/hooks/commit-msg.sample +52 -2
- package/lib/bmad-cache/wds/_git_preserved/hooks/fsmonitor-watchman.sample +2 -8
- package/lib/bmad-cache/wds/_git_preserved/index +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/{pack-96877c1c09123cccb1f91c1412184b11d2b492ad.pack → pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.pack} +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-656c3d8d5426e73043b6a7f45eedaab74e3c419e.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/packed-refs +1 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/heads/main +1 -1
- package/lib/bmad-cache/wds/_git_preserved/refs/tags/v0.4.3 +1 -0
- package/lib/bmad-cache/wds/_git_preserved/shallow +1 -1
- package/lib/bmad-cache/wds/eslint.config.mjs +1 -1
- package/lib/bmad-cache/wds/package.json +1 -1
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/customize.toml +80 -0
- package/lib/bmad-cache/wds/src/agents/wds-agent-mimir-builder/customize.toml +52 -0
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/customize.toml +70 -0
- package/lib/bmad-cache/wds/src/module-help.csv +19 -19
- package/lib/bmad-cache/wds/src/module.yaml +28 -0
- package/lib/bmad-cache/wds/src/scripts/README.md +155 -0
- package/lib/bmad-cache/wds/src/scripts/wds-add-object.js +202 -0
- package/lib/bmad-cache/wds/src/scripts/wds-add-spacing.js +158 -0
- package/lib/bmad-cache/wds/src/scripts/wds-init-page.js +229 -0
- package/lib/bmad-cache/wds/src/scripts/wds-init-scenario.js +120 -0
- package/lib/bmad-cache/wds/src/scripts/wds-nav.js +201 -0
- package/lib/bmad-cache/wds/src/scripts/wds-validate.js +301 -0
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/workflow.xml +450 -0
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/workflow-specify.xml +387 -0
- package/lib/bmad-extension/.claude-plugin/marketplace.json.template +1 -1
- package/lib/bmad-extension-plugin/.claude-plugin/marketplace.json +2 -2
- package/lib/bmad.js +361 -18
- package/lib/installer.js +296 -26
- package/lib/mil498-templates/OCD.md +169 -169
- package/lib/mil498-templates/README.md +4 -4
- package/lib/mil498-templates/SDD.md +163 -163
- package/lib/mil498-templates/SDP.md +307 -307
- package/lib/mil498-templates/SRS.md +219 -219
- package/lib/mil498-templates/SSDD.md +154 -154
- package/lib/mil498-templates/SSS.md +225 -225
- package/lib/mil498-templates/STD.md +188 -188
- package/lib/profile.js +96 -5
- package/lib/templates/instruction-block-git.template.md +25 -0
- package/lib/templates/instruction-block-onprem.template.md +86 -86
- package/lib/templates/instruction-block-universal.template.md +29 -29
- package/package.json +5 -4
- package/scripts/build-bmad-cache.js +143 -42
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.idx +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.pack +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-6ecd9fc6445b1281449c5ec49a6c5794708e662e.rev +0 -0
- package/lib/bmad-cache/bmb/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/bmb/_git_preserved/refs/tags/v1.7.0 +0 -1
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/generate-convert-report.py +0 -406
- package/lib/bmad-cache/bmb/skills/bmad-workflow-builder/scripts/tests/test_generate_convert_report.py +0 -243
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.idx +0 -0
- package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-42ffc048f54e58ce94c6331bc6be97ebbb7936f2.rev +0 -0
- package/lib/bmad-cache/cis/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.idx +0 -0
- package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-9427a146a90c00bb542cba038874bf9671ba4dc0.rev +0 -0
- package/lib/bmad-cache/gds/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/domain-complexity.csv +0 -15
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-prd/data/project-types.csv +0 -11
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-ux-design/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-gdd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-edit-prd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-gdd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/customize.toml +0 -41
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/domain-complexity.csv +0 -15
- package/lib/bmad-cache/gds/src/workflows/2-design/gds-validate-prd/data/project-types.csv +0 -11
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.idx +0 -0
- package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-f0df537f2649464ff6c5aee241165eb9c8664227.rev +0 -0
- package/lib/bmad-cache/tea/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.idx +0 -0
- package/lib/bmad-cache/wds/_git_preserved/objects/pack/pack-96877c1c09123cccb1f91c1412184b11d2b492ad.rev +0 -0
- package/lib/bmad-cache/wds/_git_preserved/refs/remotes/origin/HEAD +0 -1
- package/lib/bmad-cache/wds/src/agents/wds-agent-freya-ux/bmad-skill-manifest.yaml +0 -12
- package/lib/bmad-cache/wds/src/agents/wds-agent-saga-analyst/bmad-skill-manifest.yaml +0 -12
- package/lib/bmad-cache/wds/src/workflows/wds-0-alignment-signoff/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-0-project-setup/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-1-project-brief/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-2-trigger-mapping/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-3-scenarios/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-4-ux-design/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-5-agentic-development/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-6-asset-generation/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-7-design-system/bmad-skill-manifest.yaml +0 -1
- package/lib/bmad-cache/wds/src/workflows/wds-8-product-evolution/bmad-skill-manifest.yaml +0 -1
- /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-create-gdd → gds-gdd/assets}/game-types.csv +0 -0
- /package/lib/bmad-cache/gds/src/workflows/2-design/{gds-validate-gdd/data → gds-gdd/assets}/genre-complexity.csv +0 -0
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
## On-Prem / Local-LLM Guardrails
|
|
2
|
-
|
|
3
|
-
These rules apply ONLY when this project is installed with `profile: on-prem`.
|
|
4
|
-
They are appended to the universal block by the composer in `lib/installer.js`.
|
|
5
|
-
Local LLMs (Nemotron, Qwen, DeepSeek, Llama-3, etc. served via vLLM, Ollama, or
|
|
6
|
-
TGI) fail in patterns cloud LLMs rarely exhibit — the rules below pin those
|
|
7
|
-
failure modes down explicitly. Keep these rules verbatim in every response
|
|
8
|
-
context where tool use is possible.
|
|
9
|
-
|
|
10
|
-
### Reasoning mode: `/no_think` on planning-phase prompts
|
|
11
|
-
|
|
12
|
-
Local reasoning-capable models (Nemotron-variants and similar) default to
|
|
13
|
-
chain-of-thought reasoning that bloats planning-phase prompts with internal
|
|
14
|
-
deliberation the operator does not need to read. Prepend the literal token
|
|
15
|
-
`/no_think` as the first line of any planning-phase system prompt or user turn
|
|
16
|
-
you compose. The token is consumed by the serving layer and suppresses the
|
|
17
|
-
model's reasoning trace on that turn.
|
|
18
|
-
|
|
19
|
-
- Planning-phase turns (PM, Architect, Tech Lead): begin the turn with
|
|
20
|
-
`/no_think` on its own line. Reasoning-mode OFF.
|
|
21
|
-
- Implementation-phase turns (Dev): omit `/no_think`. Reasoning-mode ON is
|
|
22
|
-
desirable for stepwise code synthesis and debugging.
|
|
23
|
-
- Review / QA turns: omit `/no_think` when the review benefits from explicit
|
|
24
|
-
reasoning (root-cause analysis). Include `/no_think` for mechanical checks
|
|
25
|
-
(lint, style, formatting).
|
|
26
|
-
|
|
27
|
-
If the downstream serving layer does not recognize `/no_think`, it is a no-op
|
|
28
|
-
text token — safe to include unconditionally on planning turns.
|
|
29
|
-
|
|
30
|
-
### No writes to `~/.claude/` or any user home directory
|
|
31
|
-
|
|
32
|
-
Local LLMs frequently hallucinate paths under `~/.claude/`, `~/.cache/`,
|
|
33
|
-
`~/Library/`, or `%APPDATA%` — imitating patterns learned from Claude Code and
|
|
34
|
-
Cursor training data. These paths are OUTSIDE the project and cross-contaminate
|
|
35
|
-
other projects on the same machine.
|
|
36
|
-
|
|
37
|
-
- NEVER create, write, or modify files under `~/.claude/`, `~/.cache/`,
|
|
38
|
-
`~/Library/`, `~/AppData/`, `%APPDATA%`, or any path that resolves outside
|
|
39
|
-
the current project directory.
|
|
40
|
-
- All project artifacts — code, configuration, logs, scratch notes, and agent
|
|
41
|
-
state — MUST land under the current working directory (the project root) or
|
|
42
|
-
an explicitly-named subdirectory thereof.
|
|
43
|
-
- When a tool call appears to target a home-directory path, refuse the write
|
|
44
|
-
and respond in text explaining the violation. Ask the user for an explicit
|
|
45
|
-
in-project path before proceeding.
|
|
46
|
-
|
|
47
|
-
### No `str_replace_editor` or Claude Code-specific tools
|
|
48
|
-
|
|
49
|
-
Local LLMs hallucinate Anthropic-proprietary tools — most commonly
|
|
50
|
-
`str_replace_editor`, `text_editor_20241022`, and `computer_use_preview` — that
|
|
51
|
-
do NOT exist outside the Anthropic API. Calling them against a local-LLM
|
|
52
|
-
serving layer produces a tool-not-found error or, worse, a silent no-op.
|
|
53
|
-
|
|
54
|
-
- Do NOT emit tool calls named `str_replace_editor`, `text_editor_*`,
|
|
55
|
-
`computer_use_*`, or any other tool whose name includes `str_replace_editor`
|
|
56
|
-
or matches Anthropic-specific tool schemas.
|
|
57
|
-
- Use only tools enumerated in the active tool manifest (`MANIFEST.yaml`) or
|
|
58
|
-
the IDE's native tool surface (Roo Code, Cline, OpenCode native tools).
|
|
59
|
-
- When you want to edit a file, use the native file-write tool of the active
|
|
60
|
-
agent — not `str_replace_editor`. If unsure what tool is available, list
|
|
61
|
-
available tools or ask the user before emitting a tool call.
|
|
62
|
-
|
|
63
|
-
### Per-phase reasoning and sampling guidance
|
|
64
|
-
|
|
65
|
-
Local LLMs require tighter sampling control than cloud LLMs. Use these defaults
|
|
66
|
-
unless the serving layer overrides them.
|
|
67
|
-
|
|
68
|
-
- **Planning phase (PM, Architect, Tech Lead):**
|
|
69
|
-
- Reasoning: OFF (`/no_think` prepended).
|
|
70
|
-
- Temperature: low (0.0 – 0.3). Planning artifacts should be deterministic
|
|
71
|
-
and reproducible.
|
|
72
|
-
- Top-p: 0.9 or unset. Top-k: unset.
|
|
73
|
-
- Max tokens: generous (8k+) — planning documents are long.
|
|
74
|
-
- **Implementation phase (Dev):**
|
|
75
|
-
- Reasoning: ON (omit `/no_think`).
|
|
76
|
-
- Temperature: moderate (0.3 – 0.6). Code synthesis benefits from controlled
|
|
77
|
-
exploration but not creative rewriting.
|
|
78
|
-
- Top-p: 0.95 or unset. Top-k: unset.
|
|
79
|
-
- Max tokens: generous (8k+) — full-file rewrites are common.
|
|
80
|
-
- **Review / QA phase:**
|
|
81
|
-
- Reasoning: ON for root-cause analysis; OFF for mechanical checks.
|
|
82
|
-
- Temperature: low (0.0 – 0.2). Reviews should be deterministic.
|
|
83
|
-
|
|
84
|
-
If the serving layer applies its own sampler defaults, the per-phase guidance
|
|
85
|
-
above is advisory — but the phase boundary and `/no_think` placement are
|
|
86
|
-
load-bearing and MUST be honored on every turn.
|
|
1
|
+
## On-Prem / Local-LLM Guardrails
|
|
2
|
+
|
|
3
|
+
These rules apply ONLY when this project is installed with `profile: on-prem`.
|
|
4
|
+
They are appended to the universal block by the composer in `lib/installer.js`.
|
|
5
|
+
Local LLMs (Nemotron, Qwen, DeepSeek, Llama-3, etc. served via vLLM, Ollama, or
|
|
6
|
+
TGI) fail in patterns cloud LLMs rarely exhibit — the rules below pin those
|
|
7
|
+
failure modes down explicitly. Keep these rules verbatim in every response
|
|
8
|
+
context where tool use is possible.
|
|
9
|
+
|
|
10
|
+
### Reasoning mode: `/no_think` on planning-phase prompts
|
|
11
|
+
|
|
12
|
+
Local reasoning-capable models (Nemotron-variants and similar) default to
|
|
13
|
+
chain-of-thought reasoning that bloats planning-phase prompts with internal
|
|
14
|
+
deliberation the operator does not need to read. Prepend the literal token
|
|
15
|
+
`/no_think` as the first line of any planning-phase system prompt or user turn
|
|
16
|
+
you compose. The token is consumed by the serving layer and suppresses the
|
|
17
|
+
model's reasoning trace on that turn.
|
|
18
|
+
|
|
19
|
+
- Planning-phase turns (PM, Architect, Tech Lead): begin the turn with
|
|
20
|
+
`/no_think` on its own line. Reasoning-mode OFF.
|
|
21
|
+
- Implementation-phase turns (Dev): omit `/no_think`. Reasoning-mode ON is
|
|
22
|
+
desirable for stepwise code synthesis and debugging.
|
|
23
|
+
- Review / QA turns: omit `/no_think` when the review benefits from explicit
|
|
24
|
+
reasoning (root-cause analysis). Include `/no_think` for mechanical checks
|
|
25
|
+
(lint, style, formatting).
|
|
26
|
+
|
|
27
|
+
If the downstream serving layer does not recognize `/no_think`, it is a no-op
|
|
28
|
+
text token — safe to include unconditionally on planning turns.
|
|
29
|
+
|
|
30
|
+
### No writes to `~/.claude/` or any user home directory
|
|
31
|
+
|
|
32
|
+
Local LLMs frequently hallucinate paths under `~/.claude/`, `~/.cache/`,
|
|
33
|
+
`~/Library/`, or `%APPDATA%` — imitating patterns learned from Claude Code and
|
|
34
|
+
Cursor training data. These paths are OUTSIDE the project and cross-contaminate
|
|
35
|
+
other projects on the same machine.
|
|
36
|
+
|
|
37
|
+
- NEVER create, write, or modify files under `~/.claude/`, `~/.cache/`,
|
|
38
|
+
`~/Library/`, `~/AppData/`, `%APPDATA%`, or any path that resolves outside
|
|
39
|
+
the current project directory.
|
|
40
|
+
- All project artifacts — code, configuration, logs, scratch notes, and agent
|
|
41
|
+
state — MUST land under the current working directory (the project root) or
|
|
42
|
+
an explicitly-named subdirectory thereof.
|
|
43
|
+
- When a tool call appears to target a home-directory path, refuse the write
|
|
44
|
+
and respond in text explaining the violation. Ask the user for an explicit
|
|
45
|
+
in-project path before proceeding.
|
|
46
|
+
|
|
47
|
+
### No `str_replace_editor` or Claude Code-specific tools
|
|
48
|
+
|
|
49
|
+
Local LLMs hallucinate Anthropic-proprietary tools — most commonly
|
|
50
|
+
`str_replace_editor`, `text_editor_20241022`, and `computer_use_preview` — that
|
|
51
|
+
do NOT exist outside the Anthropic API. Calling them against a local-LLM
|
|
52
|
+
serving layer produces a tool-not-found error or, worse, a silent no-op.
|
|
53
|
+
|
|
54
|
+
- Do NOT emit tool calls named `str_replace_editor`, `text_editor_*`,
|
|
55
|
+
`computer_use_*`, or any other tool whose name includes `str_replace_editor`
|
|
56
|
+
or matches Anthropic-specific tool schemas.
|
|
57
|
+
- Use only tools enumerated in the active tool manifest (`MANIFEST.yaml`) or
|
|
58
|
+
the IDE's native tool surface (Roo Code, Cline, OpenCode native tools).
|
|
59
|
+
- When you want to edit a file, use the native file-write tool of the active
|
|
60
|
+
agent — not `str_replace_editor`. If unsure what tool is available, list
|
|
61
|
+
available tools or ask the user before emitting a tool call.
|
|
62
|
+
|
|
63
|
+
### Per-phase reasoning and sampling guidance
|
|
64
|
+
|
|
65
|
+
Local LLMs require tighter sampling control than cloud LLMs. Use these defaults
|
|
66
|
+
unless the serving layer overrides them.
|
|
67
|
+
|
|
68
|
+
- **Planning phase (PM, Architect, Tech Lead):**
|
|
69
|
+
- Reasoning: OFF (`/no_think` prepended).
|
|
70
|
+
- Temperature: low (0.0 – 0.3). Planning artifacts should be deterministic
|
|
71
|
+
and reproducible.
|
|
72
|
+
- Top-p: 0.9 or unset. Top-k: unset.
|
|
73
|
+
- Max tokens: generous (8k+) — planning documents are long.
|
|
74
|
+
- **Implementation phase (Dev):**
|
|
75
|
+
- Reasoning: ON (omit `/no_think`).
|
|
76
|
+
- Temperature: moderate (0.3 – 0.6). Code synthesis benefits from controlled
|
|
77
|
+
exploration but not creative rewriting.
|
|
78
|
+
- Top-p: 0.95 or unset. Top-k: unset.
|
|
79
|
+
- Max tokens: generous (8k+) — full-file rewrites are common.
|
|
80
|
+
- **Review / QA phase:**
|
|
81
|
+
- Reasoning: ON for root-cause analysis; OFF for mechanical checks.
|
|
82
|
+
- Temperature: low (0.0 – 0.2). Reviews should be deterministic.
|
|
83
|
+
|
|
84
|
+
If the serving layer applies its own sampler defaults, the per-phase guidance
|
|
85
|
+
above is advisory — but the phase boundary and `/no_think` placement are
|
|
86
|
+
load-bearing and MUST be honored on every turn.
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
# AI Agent Skills - Planning Instruction
|
|
2
|
-
|
|
3
|
-
You have access to a library of skills in your skills directory. Before starting any task:
|
|
4
|
-
|
|
5
|
-
1. Read the skill manifest at {{MANIFEST_PATH}}
|
|
6
|
-
2. Based on the task description, select which skills are relevant
|
|
7
|
-
3. Read only the selected skill files
|
|
8
|
-
4. Then proceed with the task
|
|
9
|
-
|
|
10
|
-
Always load skills marked with always_load: true.
|
|
11
|
-
Do not load skills that are not relevant to the current task.
|
|
12
|
-
|
|
13
|
-
## Respond in TEXT vs. create FILES
|
|
14
|
-
|
|
15
|
-
Choose your response medium deliberately. Defaulting to file creation when the user asked a question is a common failure mode — especially for coding agents running in web UIs.
|
|
16
|
-
|
|
17
|
-
- **Create or modify FILES when the user's request contains file-action keywords:** `create`, `write`, `generate`, `build`, `implement` (and obvious synonyms such as `add`, `produce`, `refactor`, `fix`, `update <file>`). These signal a concrete artifact is expected.
|
|
18
|
-
- **Respond in TEXT when the request contains text-response keywords:** `what do you think`, `how should we`, `discuss`, `opinion` (and obvious synonyms such as `explain`, `why`, `should I`, `compare`, `recommend`). These signal that a conversation is expected, not a deliverable.
|
|
19
|
-
- **If unsure, respond in TEXT.** A text answer can always be followed by file creation on confirmation; an unwanted file cannot be cleanly undone.
|
|
20
|
-
- **Never create `response.md`, `output.md`, or any similarly named scratch file as a reply.** A reply belongs in the chat transcript, not on disk.
|
|
21
|
-
- **Confirm file paths before writing.** When you are about to create or modify a file whose path the user has not explicitly named, state the intended path in text and wait for confirmation, unless the path is unambiguous from the task context.
|
|
22
|
-
|
|
23
|
-
## BMAD phase discipline
|
|
24
|
-
|
|
25
|
-
BMAD-METHOD organizes work into declared phases (analysis, planning, architecture, story-creation, implementation, review). Respect the currently declared phase.
|
|
26
|
-
|
|
27
|
-
- **Do not skip ahead to implementation during planning.** If the project is in a planning phase — or the user has asked for requirements, architecture, or a story — produce planning artifacts, not code.
|
|
28
|
-
- **Do not retroactively plan after you have already coded.** If implementation has already started, flag the gap instead of fabricating back-dated planning documents.
|
|
29
|
-
- The declared phase is established by the active skill, the story status, or an explicit statement from the user. When none of these is available, ask before assuming.
|
|
1
|
+
# AI Agent Skills - Planning Instruction
|
|
2
|
+
|
|
3
|
+
You have access to a library of skills in your skills directory. Before starting any task:
|
|
4
|
+
|
|
5
|
+
1. Read the skill manifest at {{MANIFEST_PATH}}
|
|
6
|
+
2. Based on the task description, select which skills are relevant
|
|
7
|
+
3. Read only the selected skill files
|
|
8
|
+
4. Then proceed with the task
|
|
9
|
+
|
|
10
|
+
Always load skills marked with always_load: true.
|
|
11
|
+
Do not load skills that are not relevant to the current task.
|
|
12
|
+
|
|
13
|
+
## Respond in TEXT vs. create FILES
|
|
14
|
+
|
|
15
|
+
Choose your response medium deliberately. Defaulting to file creation when the user asked a question is a common failure mode — especially for coding agents running in web UIs.
|
|
16
|
+
|
|
17
|
+
- **Create or modify FILES when the user's request contains file-action keywords:** `create`, `write`, `generate`, `build`, `implement` (and obvious synonyms such as `add`, `produce`, `refactor`, `fix`, `update <file>`). These signal a concrete artifact is expected.
|
|
18
|
+
- **Respond in TEXT when the request contains text-response keywords:** `what do you think`, `how should we`, `discuss`, `opinion` (and obvious synonyms such as `explain`, `why`, `should I`, `compare`, `recommend`). These signal that a conversation is expected, not a deliverable.
|
|
19
|
+
- **If unsure, respond in TEXT.** A text answer can always be followed by file creation on confirmation; an unwanted file cannot be cleanly undone.
|
|
20
|
+
- **Never create `response.md`, `output.md`, or any similarly named scratch file as a reply.** A reply belongs in the chat transcript, not on disk.
|
|
21
|
+
- **Confirm file paths before writing.** When you are about to create or modify a file whose path the user has not explicitly named, state the intended path in text and wait for confirmation, unless the path is unambiguous from the task context.
|
|
22
|
+
|
|
23
|
+
## BMAD phase discipline
|
|
24
|
+
|
|
25
|
+
BMAD-METHOD organizes work into declared phases (analysis, planning, architecture, story-creation, implementation, review). Respect the currently declared phase.
|
|
26
|
+
|
|
27
|
+
- **Do not skip ahead to implementation during planning.** If the project is in a planning phase — or the user has asked for requirements, architecture, or a story — produce planning artifacts, not code.
|
|
28
|
+
- **Do not retroactively plan after you have already coded.** If implementation has already started, flag the gap instead of fabricating back-dated planning documents.
|
|
29
|
+
- The declared phase is established by the active skill, the story status, or an explicit statement from the user. When none of these is available, ask before assuming.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ma-agents",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.13.1",
|
|
4
4
|
"description": "NPX tool to install skills for AI coding agents (Claude Code, Gemini, Copilot, Kilocode, Cline, Cursor, Roo Code)",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -8,10 +8,11 @@
|
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
10
|
"start": "node bin/cli.js",
|
|
11
|
-
"test": "node test/yes-flag.test.js && node test/skill-authoring.test.js && node test/skill-validation.test.js && node test/skill-mandatory.test.js && node test/skill-customize-agent.test.js && node test/create-agent.test.js && node test/generate-project-context.test.js && node test/build-bmad-args.test.js && node test/bmad-version-bump.test.js && node test/extension-module-restructure.test.js && node test/convert-agents-to-skills.test.js && node test/migration.test.js && node test/migration-validation.test.js && node test/story-15-5-workflow-skills.test.js && node test/repo-layout.test.js && node test/config-storage.test.js && node test/cross-repo-validation.test.js && node test/config-lost-on-update.test.js && node test/portable-paths.test.js && node test/cicd-remote-mode.test.js && node test/config-layout.test.js && node test/roo-code-agent.test.js && node test/roo-code-injection.test.js && node test/profile.test.js && node test/instruction-block.test.js && node test/instruction-injection.test.js && node test/agents-md.test.js && node test/onprem-injection.test.js && node test/onprem-layer.test.js && node test/roomodes.test.js && node test/clinerules.test.js && node test/reconfigure.test.js && node test/experimental-warning.test.js && node test/bmad-persona-phase-prefix.test.js && node test/f1a-on-prem-prefix-post-install.test.js && node test/retired-skills-migration.test.js && node test/rename-migration.test.js && node test/uninstall.test.js && node test/offline-recompile.test.js && node test/plugin-manifests.test.js && node test/build-plugin.test.js && node test/config-path-migration.test.js && node test/gitignore-plugin-stage.test.js && node test/customizations-translation.test.js && node test/routing-parity.test.js && node test/bmad-extension.test.js && node test/integration-verification.test.js && node test/agent-scope.test.js && node test/obsolete-tool-dirs.test.js && node test/bmad-empty-tools-guard.test.js",
|
|
11
|
+
"test": "node test/yes-flag.test.js && node test/skill-authoring.test.js && node test/skill-validation.test.js && node test/skill-mandatory.test.js && node test/skill-customize-agent.test.js && node test/create-agent.test.js && node test/generate-project-context.test.js && node test/build-bmad-args.test.js && node test/build-bmad-cache-reader.test.js && node test/bmad-version-bump.test.js && node test/extension-module-restructure.test.js && node test/convert-agents-to-skills.test.js && node test/migration.test.js && node test/migration-validation.test.js && node test/story-15-5-workflow-skills.test.js && node test/repo-layout.test.js && node test/config-storage.test.js && node test/cross-repo-validation.test.js && node test/config-lost-on-update.test.js && node test/portable-paths.test.js && node test/cicd-remote-mode.test.js && node test/config-layout.test.js && node test/roo-code-agent.test.js && node test/roo-code-injection.test.js && node test/profile.test.js && node test/instruction-block.test.js && node test/instruction-injection.test.js && node test/agents-md.test.js && node test/instruction-block-git.test.js && node test/onprem-injection.test.js && node test/onprem-layer.test.js && node test/roomodes.test.js && node test/clinerules.test.js && node test/cline-workflow-reconciliation.test.js && node test/reconfigure.test.js && node test/experimental-warning.test.js && node test/bmad-persona-phase-prefix.test.js && node test/f1a-on-prem-prefix-post-install.test.js && node test/retired-skills-migration.test.js && node test/rename-migration.test.js && node test/uninstall.test.js && node test/offline-recompile.test.js && node test/plugin-manifests.test.js && node test/build-plugin.test.js && node test/config-path-migration.test.js && node test/gitignore-plugin-stage.test.js && node test/customizations-translation.test.js && node test/routing-parity.test.js && node test/bmad-extension.test.js && node test/integration-verification.test.js && node test/agent-scope.test.js && node test/obsolete-tool-dirs.test.js && node test/bmad-empty-tools-guard.test.js && node test/v68-pluginresolver-enumeration-passthrough.test.js",
|
|
12
12
|
"build:bmad-cache": "node scripts/build-bmad-cache.js",
|
|
13
13
|
"build:plugin": "node scripts/build-plugin.js",
|
|
14
|
-
"prepare": "node scripts/build-plugin.js"
|
|
14
|
+
"prepare": "node scripts/build-plugin.js",
|
|
15
|
+
"version": "node scripts/build-plugin.js && git add lib/bmad-extension-plugin"
|
|
15
16
|
},
|
|
16
17
|
"keywords": [
|
|
17
18
|
"ai",
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
"author": "",
|
|
30
31
|
"license": "MIT",
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"bmad-method": "6.
|
|
33
|
+
"bmad-method": "6.8.0",
|
|
33
34
|
"chalk": "^4.1.2",
|
|
34
35
|
"fs-extra": "^11.1.1",
|
|
35
36
|
"js-yaml": "^4.1.1",
|
|
@@ -9,22 +9,56 @@ const CACHE_DIR = path.join(__dirname, '..', 'lib', 'bmad-cache');
|
|
|
9
9
|
const MANIFEST_PATH = path.join(CACHE_DIR, 'cache-manifest.json');
|
|
10
10
|
const force = process.argv.includes('--force');
|
|
11
11
|
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
//
|
|
12
|
+
// The bundled module registry has stayed YAML throughout bmad-method's
|
|
13
|
+
// history, but its PATH has moved across versions (see Decision P5-5 in
|
|
14
|
+
// architecture.md):
|
|
15
|
+
//
|
|
16
|
+
// ≤6.2.x tools/cli/external-official-modules.yaml
|
|
17
|
+
// 6.3.0 tools/installer/modules/registry-fallback.yaml (retired in 6.7.0)
|
|
18
|
+
// 6.8.0 bmad-modules.yaml (package root)
|
|
19
|
+
//
|
|
20
|
+
// We read the bundled registry because (a) it is deterministic across offline
|
|
21
|
+
// builds and (b) it matches what bmad-method itself loads when the network
|
|
22
|
+
// registry is unreachable. The 6.8.0 file is a `modules:` map whose entries
|
|
23
|
+
// carry `code`/`url`/`name`/`type` — the same shape the parser already reads.
|
|
24
|
+
// Crucially the new schema carries no `branch` field (default to `main`) and
|
|
25
|
+
// it expresses the bundle decision via a `type` field rather than the old
|
|
26
|
+
// `built_in` flag: `type: bmad-org` modules (tea, bmb, cis, gds, wds) are
|
|
27
|
+
// cloned; `type: experimental` (automator) is excluded; `bmm`/`core` are
|
|
28
|
+
// built into the npm package itself and are absent from the registry entirely.
|
|
29
|
+
//
|
|
30
|
+
// Candidates are tried in order; the first that exists on disk wins. The
|
|
31
|
+
// package-root path is listed first because it is the live 6.8.0+ location.
|
|
32
|
+
//
|
|
33
|
+
// The two older paths are retained only as diagnostics: they carry the
|
|
34
|
+
// pre-6.8.0 `built_in` schema, which the `type: bmad-org` filter below does
|
|
35
|
+
// NOT understand, so they resolve zero bundled modules. If one of them is the
|
|
36
|
+
// only file present (i.e. someone downgraded bmad-method below 6.8.0), the
|
|
37
|
+
// thin-cache guard in main() aborts with an actionable message rather than
|
|
38
|
+
// silently shipping an empty cache. They are kept so `locateRegistry` reports
|
|
39
|
+
// "found <old path>" instead of a bare "nothing found", which points the
|
|
40
|
+
// maintainer at the version mismatch.
|
|
21
41
|
const REGISTRY_CANDIDATES = [
|
|
22
|
-
// v6.
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
['tools', '
|
|
42
|
+
// v6.8.0+ — relocated to the package root (the supported, filterable schema)
|
|
43
|
+
{ parts: ['bmad-modules.yaml'], schema: 'package-root-v68' },
|
|
44
|
+
// v6.3.0–6.6.x bundled fallback (diagnostic only — pre-`type` schema)
|
|
45
|
+
{ parts: ['tools', 'installer', 'modules', 'registry-fallback.yaml'], schema: 'registry-fallback' },
|
|
46
|
+
// legacy v6.2.x fallback (diagnostic only — pre-`type` schema)
|
|
47
|
+
{ parts: ['tools', 'cli', 'external-official-modules.yaml'], schema: 'legacy' },
|
|
26
48
|
];
|
|
27
49
|
|
|
50
|
+
// The set of modules ma-agents bundles for offline installs. At v6.8.0 these
|
|
51
|
+
// are exactly the `type: bmad-org` registry entries. The fail-loud guard
|
|
52
|
+
// (NFR56) treats a resolved set SMALLER than this as a thin-cache failure —
|
|
53
|
+
// the registry path has moved twice, so silent degradation is a recurring
|
|
54
|
+
// risk that must abort the build rather than ship an incomplete cache.
|
|
55
|
+
const KNOWN_BUNDLED_MODULES = ['tea', 'bmb', 'cis', 'gds', 'wds'];
|
|
56
|
+
|
|
57
|
+
// Registry `type` values that mark a module for bundling. `bmad-org` modules
|
|
58
|
+
// are first-party expansions ma-agents clones; `experimental` (e.g. automator)
|
|
59
|
+
// is deliberately excluded from the offline bundle.
|
|
60
|
+
const BUNDLED_MODULE_TYPE = 'bmad-org';
|
|
61
|
+
|
|
28
62
|
/**
|
|
29
63
|
* Locate the bmad-method package on disk. Abort cleanly if missing so the
|
|
30
64
|
* caller gets an actionable "run npm install" message instead of a MODULE_NOT_FOUND
|
|
@@ -41,36 +75,54 @@ function locateBmadMethodDir() {
|
|
|
41
75
|
|
|
42
76
|
/**
|
|
43
77
|
* Locate the first registry YAML that exists on disk.
|
|
44
|
-
*
|
|
45
|
-
*
|
|
78
|
+
*
|
|
79
|
+
* @param {string} bmadMethodDir Absolute path to the bmad-method package dir.
|
|
80
|
+
* @returns {{ yamlPath: string, schema: string }} The resolved registry path
|
|
81
|
+
* and its schema tag (`package-root-v68` for the relocated 6.8.0 YAML,
|
|
82
|
+
* `registry-fallback` for 6.3.0–6.6.x, or `legacy` for ≤6.2.x).
|
|
83
|
+
*
|
|
84
|
+
* Resolution is fail-loud: if no candidate exists, prints an actionable error
|
|
85
|
+
* and exits non-zero (NFR56) rather than returning a falsy result that a
|
|
86
|
+
* caller might silently treat as "zero modules".
|
|
46
87
|
*/
|
|
47
88
|
function locateRegistry(bmadMethodDir) {
|
|
48
|
-
for (
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return { yamlPath: candidate, schema: i === 0 ? 'v63' : 'legacy' };
|
|
89
|
+
for (const candidate of REGISTRY_CANDIDATES) {
|
|
90
|
+
const candidatePath = path.join(bmadMethodDir, ...candidate.parts);
|
|
91
|
+
if (fs.existsSync(candidatePath)) {
|
|
92
|
+
return { yamlPath: candidatePath, schema: candidate.schema };
|
|
53
93
|
}
|
|
54
94
|
}
|
|
55
95
|
console.error('Error: no module registry YAML found in bmad-method.');
|
|
56
|
-
console.error(` Searched: ${REGISTRY_CANDIDATES.map(
|
|
96
|
+
console.error(` Searched: ${REGISTRY_CANDIDATES.map(c => c.parts.join('/')).join(', ')}`);
|
|
97
|
+
console.error(' Expected the relocated package-root "bmad-modules.yaml" at bmad-method >= 6.8.0.');
|
|
57
98
|
process.exit(1);
|
|
58
99
|
}
|
|
59
100
|
|
|
60
101
|
/**
|
|
61
102
|
* Parse the bundled module registry YAML.
|
|
62
103
|
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
104
|
+
* Every registry version (legacy `external-official-modules.yaml`, the
|
|
105
|
+
* `registry-fallback.yaml`, and the relocated package-root `bmad-modules.yaml`
|
|
106
|
+
* at 6.8.0) uses the same `modules:` map shape, so a single parser serves all:
|
|
65
107
|
*
|
|
66
108
|
* modules:
|
|
67
109
|
* <module-key>:
|
|
68
110
|
* url: "..."
|
|
69
111
|
* code: "..."
|
|
70
112
|
* name: "..."
|
|
71
|
-
*
|
|
72
|
-
* [
|
|
73
|
-
* [
|
|
113
|
+
* type: "..." # v6.8.0 — drives the bundle filter
|
|
114
|
+
* [branch: "..."] # legacy only (absent at 6.8.0 → main)
|
|
115
|
+
* [built_in: true] # 6.3.0–6.6.x only (superseded by `type`)
|
|
116
|
+
* [module-definition: "..."] # informational, ignored
|
|
117
|
+
*
|
|
118
|
+
* The parser already captures arbitrary scalar properties (including `type`),
|
|
119
|
+
* so the 6.8.0 relocation needed no parser change — only the docblock and the
|
|
120
|
+
* downstream filter were updated.
|
|
121
|
+
*
|
|
122
|
+
* @param {string} content Raw UTF-8 YAML text.
|
|
123
|
+
* @returns {Array<Object>} One object per module entry; keys mirror the YAML
|
|
124
|
+
* property names plus a synthetic `key` (the map key). No filtering is done
|
|
125
|
+
* here — that is normalizeModules()'s job.
|
|
74
126
|
*
|
|
75
127
|
* We keep a minimal line-by-line parser (no js-yaml dep) since the file is
|
|
76
128
|
* flat and well-formed.
|
|
@@ -128,19 +180,20 @@ function parseModulesYaml(content) {
|
|
|
128
180
|
* { code, url, name, branch }
|
|
129
181
|
*
|
|
130
182
|
* - Requires both `code` and `url`.
|
|
131
|
-
* -
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
183
|
+
* - Keeps ONLY `type: bmad-org` modules (tea, bmb, cis, gds, wds) and drops
|
|
184
|
+
* everything else. This replaces the pre-6.8.0 `built_in` exclusion: the
|
|
185
|
+
* relocated registry no longer carries a `built_in` flag and instead tags
|
|
186
|
+
* each module with a `type`. `type: experimental` (e.g. `automator`) is
|
|
187
|
+
* excluded from the offline bundle; `bmm`/`core` are first-party modules
|
|
188
|
+
* that ship inside the npm package and are absent from the registry, so they
|
|
189
|
+
* are dropped here too (no `bmad-org` type → filtered out). There is NO
|
|
190
|
+
* `wds`-retired/skip path — `wds` is an active `bmad-org` clone at 6.8.0.
|
|
191
|
+
* - Defaults `branch` to `main` when absent (the 6.8.0 schema omits it).
|
|
137
192
|
* - Passes the URL through verbatim (git accepts both `repo` and `repo.git`).
|
|
193
|
+
*
|
|
194
|
+
* @param {Array<Object>} raw Entries from parseModulesYaml().
|
|
195
|
+
* @returns {Array<{code: string, url: string, name: string, branch: string}>}
|
|
138
196
|
*/
|
|
139
|
-
// Values that YAML may use to express a truthy boolean. bmad-method uses
|
|
140
|
-
// canonical `true`, but be generous so a future registry that emits `yes`/
|
|
141
|
-
// `on`/`1` cannot accidentally cache a built-in module as an external clone.
|
|
142
|
-
const TRUTHY_STRINGS = new Set(['true', 'yes', 'on', '1', 'y']);
|
|
143
|
-
|
|
144
197
|
// Module `code` values are used as directory names under lib/bmad-cache.
|
|
145
198
|
// Reject anything that could escape the cache dir or inject shell characters;
|
|
146
199
|
// registry data is trusted today, but this is cheap defense-in-depth.
|
|
@@ -150,8 +203,10 @@ function normalizeModules(raw) {
|
|
|
150
203
|
return raw
|
|
151
204
|
.filter(m => m.code && m.url)
|
|
152
205
|
.filter(m => {
|
|
153
|
-
|
|
154
|
-
|
|
206
|
+
// Bundle only `type: bmad-org`. Compare case-insensitively and trim so
|
|
207
|
+
// minor upstream whitespace/casing drift cannot silently drop a module.
|
|
208
|
+
const type = String(m.type || '').trim().toLowerCase();
|
|
209
|
+
return type === BUNDLED_MODULE_TYPE;
|
|
155
210
|
})
|
|
156
211
|
.filter(m => {
|
|
157
212
|
if (MODULE_CODE_PATTERN.test(m.code)) return true;
|
|
@@ -315,8 +370,40 @@ function main() {
|
|
|
315
370
|
console.log('='.repeat(40));
|
|
316
371
|
|
|
317
372
|
const { modules, schema } = loadModuleDefinitions();
|
|
318
|
-
|
|
319
|
-
|
|
373
|
+
|
|
374
|
+
// Thin-cache fail-loud guard (NFR56). The registry path has moved twice;
|
|
375
|
+
// the real risk is no longer "zero modules" but the path moving again and
|
|
376
|
+
// the reader silently resolving FEWER than the known bundled set. Treat a
|
|
377
|
+
// deficient set as a hard error and abort BEFORE writing any manifest — a
|
|
378
|
+
// partial/empty cache-manifest.json would otherwise ship a broken offline
|
|
379
|
+
// bundle that "looks" successful.
|
|
380
|
+
const resolvedCodes = new Set(modules.map(m => m.code));
|
|
381
|
+
|
|
382
|
+
// Duplicate-code guard. Two registry entries sharing a `code` would clone
|
|
383
|
+
// into the same cache directory and silently overwrite each other's manifest
|
|
384
|
+
// entry (last-write-wins), and the Set above would mask the collision from
|
|
385
|
+
// the thin-cache check below. Fail loud instead.
|
|
386
|
+
if (modules.length !== resolvedCodes.size) {
|
|
387
|
+
const seen = new Set();
|
|
388
|
+
const dupes = new Set();
|
|
389
|
+
for (const m of modules) {
|
|
390
|
+
if (seen.has(m.code)) dupes.add(m.code);
|
|
391
|
+
seen.add(m.code);
|
|
392
|
+
}
|
|
393
|
+
console.error('Error: registry contains duplicate module codes — refusing to build an ambiguous cache.');
|
|
394
|
+
console.error(` Duplicated: ${[...dupes].join(', ')}`);
|
|
395
|
+
process.exit(1);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
const missing = KNOWN_BUNDLED_MODULES.filter(code => !resolvedCodes.has(code));
|
|
399
|
+
if (missing.length > 0) {
|
|
400
|
+
console.error('Error: registry resolved a thin module set — refusing to build a partial cache.');
|
|
401
|
+
console.error(` Expected at least: ${KNOWN_BUNDLED_MODULES.join(', ')}`);
|
|
402
|
+
console.error(` Resolved (type: ${BUNDLED_MODULE_TYPE}): ${[...resolvedCodes].join(', ') || '(none)'}`);
|
|
403
|
+
console.error(` Missing: ${missing.join(', ')}`);
|
|
404
|
+
console.error(' Likely cause: bmad-method was downgraded below 6.8.0, the registry layout moved');
|
|
405
|
+
console.error(' again, or a bundled module was renamed/retired upstream. Update REGISTRY_CANDIDATES,');
|
|
406
|
+
console.error(' the type filter, or KNOWN_BUNDLED_MODULES in scripts/build-bmad-cache.js to match.');
|
|
320
407
|
process.exit(1);
|
|
321
408
|
}
|
|
322
409
|
console.log(`Found ${modules.length} modules: ${modules.map(m => m.code).join(', ')}`);
|
|
@@ -491,4 +578,18 @@ function main() {
|
|
|
491
578
|
}
|
|
492
579
|
}
|
|
493
580
|
|
|
494
|
-
|
|
581
|
+
// Run the build only when executed directly (`node scripts/build-bmad-cache.js`).
|
|
582
|
+
// When required as a module (by unit tests), export the pure reader functions
|
|
583
|
+
// instead so they can be exercised against fixtures without cloning anything.
|
|
584
|
+
if (require.main === module) {
|
|
585
|
+
main();
|
|
586
|
+
} else {
|
|
587
|
+
module.exports = {
|
|
588
|
+
parseModulesYaml,
|
|
589
|
+
normalizeModules,
|
|
590
|
+
locateRegistry,
|
|
591
|
+
KNOWN_BUNDLED_MODULES,
|
|
592
|
+
BUNDLED_MODULE_TYPE,
|
|
593
|
+
REGISTRY_CANDIDATES,
|
|
594
|
+
};
|
|
595
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ref: refs/remotes/origin/main
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
6c66cf215b5ec6701d70cf2d9df968fa09433cfe
|