wizz-method 1.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/.claude-plugin/marketplace.json +80 -0
- package/AGENTS.md +12 -0
- package/LICENSE +30 -0
- package/README.md +72 -0
- package/bmad-modules.yaml +77 -0
- package/build/artifacts/llms-full.txt +4049 -0
- package/build/artifacts/llms.txt +28 -0
- package/build/site/404.html +55 -0
- package/build/site/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js +1 -0
- package/build/site/_astro/Search.astro_astro_type_script_index_0_lang.cjYDvRdi.js +1 -0
- package/build/site/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js +1 -0
- package/build/site/_astro/ec.0vx5m.js +3 -0
- package/build/site/_astro/ec.v4551.css +1 -0
- package/build/site/_astro/index.DdjI3lF_.css +1 -0
- package/build/site/_astro/page.B1D-nYk3.js +1 -0
- package/build/site/_astro/print.DNXP8c50.css +1 -0
- package/build/site/_astro/ui-core.D_Lfcn_I.js +2 -0
- package/build/site/cs/404/index.html +42 -0
- package/build/site/cs/explanation/advanced-elicitation/index.html +105 -0
- package/build/site/cs/explanation/adversarial-review/index.html +109 -0
- package/build/site/cs/explanation/analysis-phase/index.html +129 -0
- package/build/site/cs/explanation/brainstorming/index.html +92 -0
- package/build/site/cs/explanation/checkpoint-preview/index.html +121 -0
- package/build/site/cs/explanation/established-projects-faq/index.html +107 -0
- package/build/site/cs/explanation/forensic-investigation/index.html +167 -0
- package/build/site/cs/explanation/named-agents/index.html +187 -0
- package/build/site/cs/explanation/party-mode/index.html +101 -0
- package/build/site/cs/explanation/preventing-agent-conflicts/index.html +185 -0
- package/build/site/cs/explanation/project-context/index.html +198 -0
- package/build/site/cs/explanation/quick-dev/index.html +113 -0
- package/build/site/cs/explanation/web-bundles/index.html +178 -0
- package/build/site/cs/explanation/why-solutioning-matters/index.html +168 -0
- package/build/site/cs/how-to/customize-bmad/index.html +197 -0
- package/build/site/cs/how-to/established-projects/index.html +165 -0
- package/build/site/cs/how-to/expand-bmad-for-your-org/index.html +245 -0
- package/build/site/cs/how-to/get-answers-about-bmad/index.html +179 -0
- package/build/site/cs/how-to/install-bmad/index.html +124 -0
- package/build/site/cs/how-to/install-custom-modules/index.html +197 -0
- package/build/site/cs/how-to/non-interactive-installation/index.html +255 -0
- package/build/site/cs/how-to/project-context/index.html +138 -0
- package/build/site/cs/how-to/quick-fixes/index.html +122 -0
- package/build/site/cs/how-to/shard-large-documents/index.html +103 -0
- package/build/site/cs/how-to/upgrade-to-v6/index.html +185 -0
- package/build/site/cs/how-to/use-web-bundles/index.html +99 -0
- package/build/site/cs/index.html +129 -0
- package/build/site/cs/reference/agents/index.html +173 -0
- package/build/site/cs/reference/commands/index.html +250 -0
- package/build/site/cs/reference/core-tools/index.html +337 -0
- package/build/site/cs/reference/modules/index.html +132 -0
- package/build/site/cs/reference/testing/index.html +218 -0
- package/build/site/cs/reference/workflow-map/index.html +240 -0
- package/build/site/cs/roadmap/index.html +77 -0
- package/build/site/cs/tutorials/getting-started/index.html +382 -0
- package/build/site/diagrams/checkpoint-preview-diagram-fr.webp +0 -0
- package/build/site/diagrams/checkpoint-preview-diagram.png +0 -0
- package/build/site/diagrams/quick-dev-diagram-fr.webp +0 -0
- package/build/site/diagrams/quick-dev-diagram.png +0 -0
- package/build/site/explanation/advanced-elicitation/index.html +105 -0
- package/build/site/explanation/adversarial-review/index.html +109 -0
- package/build/site/explanation/analysis-phase/index.html +129 -0
- package/build/site/explanation/brainstorming/index.html +92 -0
- package/build/site/explanation/checkpoint-preview/index.html +121 -0
- package/build/site/explanation/established-projects-faq/index.html +107 -0
- package/build/site/explanation/forensic-investigation/index.html +167 -0
- package/build/site/explanation/named-agents/index.html +187 -0
- package/build/site/explanation/party-mode/index.html +256 -0
- package/build/site/explanation/preventing-agent-conflicts/index.html +185 -0
- package/build/site/explanation/project-context/index.html +198 -0
- package/build/site/explanation/quick-dev/index.html +113 -0
- package/build/site/explanation/web-bundles/index.html +178 -0
- package/build/site/explanation/why-solutioning-matters/index.html +168 -0
- package/build/site/fr/404/index.html +42 -0
- package/build/site/fr/explanation/advanced-elicitation/index.html +105 -0
- package/build/site/fr/explanation/adversarial-review/index.html +126 -0
- package/build/site/fr/explanation/analysis-phase/index.html +137 -0
- package/build/site/fr/explanation/brainstorming/index.html +92 -0
- package/build/site/fr/explanation/checkpoint-preview/index.html +121 -0
- package/build/site/fr/explanation/established-projects-faq/index.html +107 -0
- package/build/site/fr/explanation/forensic-investigation/index.html +194 -0
- package/build/site/fr/explanation/named-agents/index.html +187 -0
- package/build/site/fr/explanation/party-mode/index.html +112 -0
- package/build/site/fr/explanation/preventing-agent-conflicts/index.html +196 -0
- package/build/site/fr/explanation/project-context/index.html +198 -0
- package/build/site/fr/explanation/quick-dev/index.html +127 -0
- package/build/site/fr/explanation/web-bundles/index.html +198 -0
- package/build/site/fr/explanation/why-solutioning-matters/index.html +191 -0
- package/build/site/fr/how-to/customize-bmad/index.html +277 -0
- package/build/site/fr/how-to/established-projects/index.html +176 -0
- package/build/site/fr/how-to/expand-bmad-for-your-org/index.html +245 -0
- package/build/site/fr/how-to/get-answers-about-bmad/index.html +129 -0
- package/build/site/fr/how-to/install-bmad/index.html +330 -0
- package/build/site/fr/how-to/install-custom-modules/index.html +197 -0
- package/build/site/fr/how-to/non-interactive-installation/index.html +73 -0
- package/build/site/fr/how-to/project-context/index.html +138 -0
- package/build/site/fr/how-to/quick-fixes/index.html +130 -0
- package/build/site/fr/how-to/shard-large-documents/index.html +103 -0
- package/build/site/fr/how-to/upgrade-to-v6/index.html +202 -0
- package/build/site/fr/how-to/use-web-bundles/index.html +99 -0
- package/build/site/fr/index.html +144 -0
- package/build/site/fr/reference/agents/index.html +179 -0
- package/build/site/fr/reference/commands/index.html +264 -0
- package/build/site/fr/reference/core-tools/index.html +392 -0
- package/build/site/fr/reference/modules/index.html +146 -0
- package/build/site/fr/reference/testing/index.html +229 -0
- package/build/site/fr/reference/workflow-map/index.html +282 -0
- package/build/site/fr/roadmap/index.html +77 -0
- package/build/site/fr/tutorials/getting-started/index.html +406 -0
- package/build/site/how-to/customize-bmad/index.html +277 -0
- package/build/site/how-to/established-projects/index.html +165 -0
- package/build/site/how-to/expand-bmad-for-your-org/index.html +245 -0
- package/build/site/how-to/get-answers-about-bmad/index.html +129 -0
- package/build/site/how-to/install-bmad/index.html +330 -0
- package/build/site/how-to/install-custom-modules/index.html +197 -0
- package/build/site/how-to/non-interactive-installation/index.html +73 -0
- package/build/site/how-to/project-context/index.html +141 -0
- package/build/site/how-to/quick-fixes/index.html +122 -0
- package/build/site/how-to/shard-large-documents/index.html +103 -0
- package/build/site/how-to/upgrade-to-v6/index.html +185 -0
- package/build/site/how-to/use-web-bundles/index.html +99 -0
- package/build/site/img/bmad-dark.png +0 -0
- package/build/site/img/bmad-light.png +0 -0
- package/build/site/index.html +128 -0
- package/build/site/llms-full.txt +4049 -0
- package/build/site/llms.txt +28 -0
- package/build/site/pagefind/fragment/cs-cz_178b946.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_19e1744.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_1b81518.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_24fd94a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_25c5ff1.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_2a7d8c4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_2b14d1f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_34d3775.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_366f93d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_4761b65.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_4d1a40a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_57dfabb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_5c68f33.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_5efaba9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_5f63a83.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_73bbdce.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_7b6af37.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_7d51fe5.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_7db5922.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_83e7116.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_83fec4e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_84972ee.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_94e9289.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_a0a122c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_a3e7fad.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_af43e66.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_b4f4e0a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_b51b8b3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_ba705d5.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_c315625.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_cf5138a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_df8bdfe.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_e1b56f8.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_e3e33bb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/cs-cz_f9d07b3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_026af96.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_132ea1f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_15ee460.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_171773c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_1a7ec42.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_1bb5ebb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_229434b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_22b33a0.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_38efcf3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_3d17cef.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_426a8fd.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_446b27a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_582ecad.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_5d6b1f1.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_6465dfb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_66f3f7a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_68872f8.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_6e9deef.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_70a6a7e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_73f0b1e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_768fd99.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_7e52baa.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8068cdc.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_9385c94.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_95b9c04.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_9a95e82.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_a66c4ef.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ac6318c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bba8f66.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_d9f7193.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_e0e52b1.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ece4cbe.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ed6969c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f12187d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f643df1.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_10fdc25.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_132e2e0.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_1529d31.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_1531e2c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_1d51fb7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_27d0aaf.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_583aea8.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_5c4f14f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_654bb96.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_65e37ae.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_6898afa.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_68d0a0b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_6ce4bc1.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_7ddd126.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_7f50a2e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_8d2df1b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_9b8d33d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_9c7f851.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_9cf6892.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_a512e53.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_a7ad3f6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_afeac81.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_b364826.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_bdb3e1e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_c4884c3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_c54c827.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_ca664c2.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_ce3562d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_d086476.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_d0b4e62.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_df4c57f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_e1c2fa8.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_eaa1363.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_f456c69.pf_fragment +0 -0
- package/build/site/pagefind/fragment/fr-fr_fe8d783.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_1e5b1da.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_3268948.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_37f0bf6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_485232c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_4d3bd13.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_4e578d2.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_4ed2533.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_533743c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_5ffd258.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_6bfed03.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_6f2ed6d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_71aa305.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_7577c2c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_7883435.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_7f2e496.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_7fce614.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_86274a6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_8c4fd62.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_a06c773.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_a2e535b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_a4b9dbc.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_b2d8e01.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_b631cf6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_c970ebb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_d229f2a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_d685e88.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_dab2c52.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_df5a829.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_dfcf280.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_e8ec8cf.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_e9f3439.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_f0bfe83.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_f5462f7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_fcc9bb7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_fd55264.pf_fragment +0 -0
- package/build/site/pagefind/fragment/vi-vn_ffd39df.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_119c5bb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_198e8ce.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_19b87a8.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_1edc3a5.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_36ae67a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_37ab313.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_3b56778.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_5735cd4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_6110769.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_6d66d9e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_731b3f5.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_82885ff.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_8be7aac.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_8c3fa9e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_8f452f7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_96ccc61.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_9f29932.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_a24d786.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_a598178.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_a603f17.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_a9cffcf.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_c1bebbd.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_c38cf84.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_c42a851.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_ce57c6e.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_d4b5cd5.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_da40e6b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_da777ec.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_de145f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_e376bf7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_e663978.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_e97a13b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_f13873d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_f25fad4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/zh-cn_f7edf48.pf_fragment +0 -0
- package/build/site/pagefind/index/cs-cz_24147b6.pf_index +0 -0
- package/build/site/pagefind/index/cs-cz_82fc657.pf_index +0 -0
- package/build/site/pagefind/index/cs-cz_8f6a83c.pf_index +0 -0
- package/build/site/pagefind/index/en_432f933.pf_index +0 -0
- package/build/site/pagefind/index/en_70c744a.pf_index +0 -0
- package/build/site/pagefind/index/en_fd84991.pf_index +0 -0
- package/build/site/pagefind/index/fr-fr_7275484.pf_index +0 -0
- package/build/site/pagefind/index/fr-fr_8096dd3.pf_index +0 -0
- package/build/site/pagefind/index/fr-fr_b34df12.pf_index +0 -0
- package/build/site/pagefind/index/fr-fr_e6ad665.pf_index +0 -0
- package/build/site/pagefind/index/vi-vn_129cf7e.pf_index +0 -0
- package/build/site/pagefind/index/vi-vn_7f54472.pf_index +0 -0
- package/build/site/pagefind/index/vi-vn_c1f31ce.pf_index +0 -0
- package/build/site/pagefind/index/vi-vn_c56f634.pf_index +0 -0
- package/build/site/pagefind/index/zh-cn_5ed0486.pf_index +0 -0
- package/build/site/pagefind/index/zh-cn_ad4d724.pf_index +0 -0
- package/build/site/pagefind/index/zh-cn_bc9f7b6.pf_index +0 -0
- package/build/site/pagefind/pagefind-entry.json +1 -0
- package/build/site/pagefind/pagefind-highlight.js +1064 -0
- package/build/site/pagefind/pagefind-modular-ui.css +214 -0
- package/build/site/pagefind/pagefind-modular-ui.js +8 -0
- package/build/site/pagefind/pagefind-ui.css +1 -0
- package/build/site/pagefind/pagefind-ui.js +2 -0
- package/build/site/pagefind/pagefind.cs-cz_cd39a8505eabf.pf_meta +0 -0
- package/build/site/pagefind/pagefind.en_8ae84a1b9c.pf_meta +0 -0
- package/build/site/pagefind/pagefind.fr-fr_20fca6f342d9a.pf_meta +0 -0
- package/build/site/pagefind/pagefind.js +6 -0
- package/build/site/pagefind/pagefind.vi-vn_6a45d08c2bbc8.pf_meta +0 -0
- package/build/site/pagefind/pagefind.zh-cn_ae911ac338eae.pf_meta +0 -0
- package/build/site/pagefind/wasm.en.pagefind +0 -0
- package/build/site/pagefind/wasm.fr-fr.pagefind +0 -0
- package/build/site/pagefind/wasm.unknown.pagefind +0 -0
- package/build/site/reference/agents/index.html +168 -0
- package/build/site/reference/commands/index.html +254 -0
- package/build/site/reference/core-tools/index.html +384 -0
- package/build/site/reference/modules/index.html +132 -0
- package/build/site/reference/testing/index.html +218 -0
- package/build/site/reference/workflow-map/index.html +266 -0
- package/build/site/roadmap/index.html +77 -0
- package/build/site/robots.txt +37 -0
- package/build/site/sitemap-0.xml +1 -0
- package/build/site/sitemap-index.xml +1 -0
- package/build/site/tutorials/getting-started/index.html +386 -0
- package/build/site/vi-vn/404/index.html +42 -0
- package/build/site/vi-vn/bmad-developer-guide/index.html +794 -0
- package/build/site/vi-vn/explanation/advanced-elicitation/index.html +105 -0
- package/build/site/vi-vn/explanation/adversarial-review/index.html +109 -0
- package/build/site/vi-vn/explanation/analysis-phase/index.html +129 -0
- package/build/site/vi-vn/explanation/brainstorming/index.html +92 -0
- package/build/site/vi-vn/explanation/checkpoint-preview/index.html +121 -0
- package/build/site/vi-vn/explanation/established-projects-faq/index.html +107 -0
- package/build/site/vi-vn/explanation/forensic-investigation/index.html +167 -0
- package/build/site/vi-vn/explanation/named-agents/index.html +187 -0
- package/build/site/vi-vn/explanation/party-mode/index.html +101 -0
- package/build/site/vi-vn/explanation/preventing-agent-conflicts/index.html +185 -0
- package/build/site/vi-vn/explanation/project-context/index.html +198 -0
- package/build/site/vi-vn/explanation/quick-dev/index.html +113 -0
- package/build/site/vi-vn/explanation/web-bundles/index.html +178 -0
- package/build/site/vi-vn/explanation/why-solutioning-matters/index.html +168 -0
- package/build/site/vi-vn/how-to/customize-bmad/index.html +277 -0
- package/build/site/vi-vn/how-to/established-projects/index.html +165 -0
- package/build/site/vi-vn/how-to/expand-bmad-for-your-org/index.html +228 -0
- package/build/site/vi-vn/how-to/get-answers-about-bmad/index.html +129 -0
- package/build/site/vi-vn/how-to/install-bmad/index.html +124 -0
- package/build/site/vi-vn/how-to/install-custom-modules/index.html +197 -0
- package/build/site/vi-vn/how-to/non-interactive-installation/index.html +300 -0
- package/build/site/vi-vn/how-to/project-context/index.html +138 -0
- package/build/site/vi-vn/how-to/quick-fixes/index.html +122 -0
- package/build/site/vi-vn/how-to/shard-large-documents/index.html +103 -0
- package/build/site/vi-vn/how-to/upgrade-to-v6/index.html +185 -0
- package/build/site/vi-vn/how-to/use-web-bundles/index.html +99 -0
- package/build/site/vi-vn/index.html +129 -0
- package/build/site/vi-vn/reference/agents/index.html +173 -0
- package/build/site/vi-vn/reference/commands/index.html +250 -0
- package/build/site/vi-vn/reference/core-tools/index.html +337 -0
- package/build/site/vi-vn/reference/modules/index.html +132 -0
- package/build/site/vi-vn/reference/testing/index.html +218 -0
- package/build/site/vi-vn/reference/workflow-map/index.html +240 -0
- package/build/site/vi-vn/roadmap/index.html +77 -0
- package/build/site/vi-vn/tutorials/getting-started/index.html +382 -0
- package/build/site/wizz-icon-orange.svg +7 -0
- package/build/site/workflow-map-diagram-fr.html +375 -0
- package/build/site/workflow-map-diagram.html +375 -0
- package/build/site/zh-cn/404/index.html +42 -0
- package/build/site/zh-cn/explanation/advanced-elicitation/index.html +142 -0
- package/build/site/zh-cn/explanation/adversarial-review/index.html +132 -0
- package/build/site/zh-cn/explanation/analysis-phase/index.html +129 -0
- package/build/site/zh-cn/explanation/brainstorming/index.html +147 -0
- package/build/site/zh-cn/explanation/checkpoint-preview/index.html +121 -0
- package/build/site/zh-cn/explanation/established-projects-faq/index.html +122 -0
- package/build/site/zh-cn/explanation/forensic-investigation/index.html +167 -0
- package/build/site/zh-cn/explanation/named-agents/index.html +187 -0
- package/build/site/zh-cn/explanation/party-mode/index.html +144 -0
- package/build/site/zh-cn/explanation/preventing-agent-conflicts/index.html +191 -0
- package/build/site/zh-cn/explanation/project-context/index.html +153 -0
- package/build/site/zh-cn/explanation/quick-dev/index.html +139 -0
- package/build/site/zh-cn/explanation/web-bundles/index.html +178 -0
- package/build/site/zh-cn/explanation/why-solutioning-matters/index.html +175 -0
- package/build/site/zh-cn/how-to/customize-bmad/index.html +202 -0
- package/build/site/zh-cn/how-to/established-projects/index.html +166 -0
- package/build/site/zh-cn/how-to/expand-bmad-for-your-org/index.html +223 -0
- package/build/site/zh-cn/how-to/get-answers-about-bmad/index.html +198 -0
- package/build/site/zh-cn/how-to/install-bmad/index.html +126 -0
- package/build/site/zh-cn/how-to/install-custom-modules/index.html +197 -0
- package/build/site/zh-cn/how-to/non-interactive-installation/index.html +254 -0
- package/build/site/zh-cn/how-to/project-context/index.html +143 -0
- package/build/site/zh-cn/how-to/quick-fixes/index.html +122 -0
- package/build/site/zh-cn/how-to/shard-large-documents/index.html +110 -0
- package/build/site/zh-cn/how-to/upgrade-to-v6/index.html +198 -0
- package/build/site/zh-cn/how-to/use-web-bundles/index.html +99 -0
- package/build/site/zh-cn/index.html +129 -0
- package/build/site/zh-cn/reference/agents/index.html +178 -0
- package/build/site/zh-cn/reference/commands/index.html +245 -0
- package/build/site/zh-cn/reference/core-tools/index.html +313 -0
- package/build/site/zh-cn/reference/modules/index.html +181 -0
- package/build/site/zh-cn/reference/testing/index.html +226 -0
- package/build/site/zh-cn/reference/workflow-map/index.html +238 -0
- package/build/site/zh-cn/roadmap/index.html +77 -0
- package/build/site/zh-cn/tutorials/getting-started/index.html +381 -0
- package/evals/bmm-skills/bmad-product-brief/evals.json +237 -0
- package/evals/bmm-skills/bmad-product-brief/files/branfield-memo.md +46 -0
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/addendum.md +40 -0
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md +56 -0
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md +27 -0
- package/evals/bmm-skills/bmad-product-brief/files/meridian-mobility-report.md +116 -0
- package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/addendum.md +41 -0
- package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md +57 -0
- package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/decision-log.md +29 -0
- package/evals/bmm-skills/bmad-product-brief/files/pantry-bridge-interviews.md +90 -0
- package/evals/bmm-skills/bmad-product-brief/files/q2-brainstorm.md +101 -0
- package/evals/bmm-skills/bmad-product-brief/triggers.json +18 -0
- package/package.json +114 -0
- package/removals.txt +62 -0
- package/src/bmm-skills/1-analysis/bmad-agent-analyst/SKILL.md +76 -0
- package/src/bmm-skills/1-analysis/bmad-agent-analyst/customize.toml +90 -0
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +76 -0
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.toml +81 -0
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/explain-concept.md +20 -0
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/mermaid-gen.md +20 -0
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/validate-doc.md +19 -0
- package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/write-document.md +20 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/SKILL.md +62 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/checklist.md +245 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/customize.toml +41 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/documentation-requirements.csv +12 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/instructions.md +128 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/deep-dive-template.md +345 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/index-template.md +169 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-overview-template.md +103 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-scan-report-schema.json +160 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/templates/source-tree-template.md +135 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-instructions.md +300 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-instructions.md +1108 -0
- package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-workflow.md +34 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +135 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/agents/artifact-analyzer.md +60 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/agents/web-researcher.md +49 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/assets/prfaq-template.md +62 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/bmad-manifest.json +16 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/customize.toml +41 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/references/customer-faq.md +55 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/references/internal-faq.md +51 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/references/press-release.md +60 -0
- package/src/bmm-skills/1-analysis/bmad-prfaq/references/verdict.md +83 -0
- package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +91 -0
- package/src/bmm-skills/1-analysis/bmad-product-brief/assets/brief-template.md +41 -0
- package/src/bmm-skills/1-analysis/bmad-product-brief/customize.toml +99 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/SKILL.md +96 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/customize.toml +41 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +137 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +450 -0
- package/src/bmm-skills/1-analysis/research/bmad-domain-research/research.template.md +29 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/SKILL.md +96 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/customize.toml +41 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/research.template.md +29 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
- package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +484 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/SKILL.md +96 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/customize.toml +41 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/research.template.md +29 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +137 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +233 -0
- package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +493 -0
- package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/SKILL.md +76 -0
- package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/customize.toml +75 -0
- package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/SKILL.md +76 -0
- package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +60 -0
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/SKILL.md +30 -0
- package/src/bmm-skills/2-plan-workflows/bmad-create-prd/customize.toml +41 -0
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/SKILL.md +30 -0
- package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/customize.toml +42 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +92 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +76 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +165 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +135 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/validation-report-template.html +325 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +147 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +39 -0
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/validate.md +97 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +90 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +9 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +9 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +158 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +93 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +109 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +19 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +112 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +133 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +84 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +29 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +319 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +100 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +19 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +50 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +37 -0
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +115 -0
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/SKILL.md +30 -0
- package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/customize.toml +42 -0
- package/src/bmm-skills/3-solutioning/bmad-agent-architect/SKILL.md +76 -0
- package/src/bmm-skills/3-solutioning/bmad-agent-architect/customize.toml +65 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/SKILL.md +85 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/assets/spine-template.md +79 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/customize.toml +100 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/references/headless.md +26 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/references/reviewer-gate.md +13 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/scripts/lint_spine.py +257 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/scripts/tests/test_lint_spine.py +270 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/SKILL.md +91 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/customize.toml +41 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +132 -0
- package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/SKILL.md +30 -0
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/customize.toml +41 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/SKILL.md +93 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/customize.toml +41 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +263 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +242 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +143 -0
- package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md +61 -0
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/SKILL.md +81 -0
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/customize.toml +41 -0
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/project-context-template.md +21 -0
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-01-discover.md +186 -0
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-02-generate.md +321 -0
- package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-03-complete.md +284 -0
- package/src/bmm-skills/4-implementation/bmad-agent-dev/SKILL.md +76 -0
- package/src/bmm-skills/4-implementation/bmad-agent-dev/customize.toml +95 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/SKILL.md +68 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/generate-trail.md +38 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-01-orientation.md +105 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-02-walkthrough.md +89 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-03-detail-pass.md +106 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-04-testing.md +74 -0
- package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-05-wrapup.md +30 -0
- package/src/bmm-skills/4-implementation/bmad-code-review/SKILL.md +93 -0
- package/src/bmm-skills/4-implementation/bmad-code-review/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md +85 -0
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-02-review.md +35 -0
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-03-triage.md +49 -0
- package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md +132 -0
- package/src/bmm-skills/4-implementation/bmad-correct-course/SKILL.md +301 -0
- package/src/bmm-skills/4-implementation/bmad-correct-course/checklist.md +288 -0
- package/src/bmm-skills/4-implementation/bmad-correct-course/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-create-story/SKILL.md +432 -0
- package/src/bmm-skills/4-implementation/bmad-create-story/checklist.md +357 -0
- package/src/bmm-skills/4-implementation/bmad-create-story/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-create-story/discover-inputs.md +88 -0
- package/src/bmm-skills/4-implementation/bmad-create-story/template.md +49 -0
- package/src/bmm-skills/4-implementation/bmad-dev-story/SKILL.md +500 -0
- package/src/bmm-skills/4-implementation/bmad-dev-story/checklist.md +80 -0
- package/src/bmm-skills/4-implementation/bmad-dev-story/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-investigate/SKILL.md +196 -0
- package/src/bmm-skills/4-implementation/bmad-investigate/customize.toml +62 -0
- package/src/bmm-skills/4-implementation/bmad-investigate/references/case-file-template.md +127 -0
- package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/SKILL.md +176 -0
- package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/checklist.md +33 -0
- package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/SKILL.md +114 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/compile-epic-context.md +62 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/spec-template.md +88 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-01-clarify-and-route.md +100 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-02-plan.md +47 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-03-implement.md +41 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-04-review.md +50 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-05-present.md +78 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/step-oneshot.md +71 -0
- package/src/bmm-skills/4-implementation/bmad-quick-dev/sync-sprint-status.md +19 -0
- package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +1527 -0
- package/src/bmm-skills/4-implementation/bmad-retrospective/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +319 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md +34 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/customize.toml +41 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +69 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +311 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-status/customize.toml +41 -0
- package/src/bmm-skills/module-help.csv +32 -0
- package/src/bmm-skills/module.yaml +95 -0
- package/src/core-skills/bmad-advanced-elicitation/SKILL.md +142 -0
- package/src/core-skills/bmad-advanced-elicitation/methods.csv +70 -0
- package/src/core-skills/bmad-brainstorming/SKILL.md +82 -0
- package/src/core-skills/bmad-brainstorming/analysis/catalog-analysis.md +239 -0
- package/src/core-skills/bmad-brainstorming/analysis/method-matrix.csv +109 -0
- package/src/core-skills/bmad-brainstorming/assets/brain-icons.json +166 -0
- package/src/core-skills/bmad-brainstorming/assets/brain-methods.csv +109 -0
- package/src/core-skills/bmad-brainstorming/assets/brain-selector.html +326 -0
- package/src/core-skills/bmad-brainstorming/customize.toml +84 -0
- package/src/core-skills/bmad-brainstorming/references/converge.md +24 -0
- package/src/core-skills/bmad-brainstorming/references/finalize.md +26 -0
- package/src/core-skills/bmad-brainstorming/references/headless.md +54 -0
- package/src/core-skills/bmad-brainstorming/references/in-chat-techniques.md +18 -0
- package/src/core-skills/bmad-brainstorming/references/mode-autonomous.md +10 -0
- package/src/core-skills/bmad-brainstorming/references/mode-facilitator.md +11 -0
- package/src/core-skills/bmad-brainstorming/references/mode-partner.md +16 -0
- package/src/core-skills/bmad-brainstorming/references/resume.md +5 -0
- package/src/core-skills/bmad-brainstorming/scripts/brain.py +740 -0
- package/src/core-skills/bmad-brainstorming/scripts/memlog.py +202 -0
- package/src/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +217 -0
- package/src/core-skills/bmad-brainstorming/scripts/tests/test_memlog.py +265 -0
- package/src/core-skills/bmad-customize/SKILL.md +111 -0
- package/src/core-skills/bmad-customize/scripts/list_customizable_skills.py +231 -0
- package/src/core-skills/bmad-customize/scripts/tests/test_list_customizable_skills.py +249 -0
- package/src/core-skills/bmad-editorial-review-prose/SKILL.md +86 -0
- package/src/core-skills/bmad-editorial-review-structure/SKILL.md +179 -0
- package/src/core-skills/bmad-help/SKILL.md +75 -0
- package/src/core-skills/bmad-index-docs/SKILL.md +66 -0
- package/src/core-skills/bmad-party-mode/SKILL.md +77 -0
- package/src/core-skills/bmad-party-mode/customize.toml +150 -0
- package/src/core-skills/bmad-party-mode/references/create-party.md +65 -0
- package/src/core-skills/bmad-party-mode/references/mode-agent-team.md +11 -0
- package/src/core-skills/bmad-party-mode/references/mode-auto.md +13 -0
- package/src/core-skills/bmad-party-mode/references/mode-subagent.md +19 -0
- package/src/core-skills/bmad-party-mode/scripts/resolve_party.py +267 -0
- package/src/core-skills/bmad-party-mode/scripts/tests/test-resolve_party.py +138 -0
- package/src/core-skills/bmad-review-adversarial-general/SKILL.md +37 -0
- package/src/core-skills/bmad-review-edge-case-hunter/SKILL.md +67 -0
- package/src/core-skills/bmad-shard-doc/SKILL.md +105 -0
- package/src/core-skills/bmad-spec/SKILL.md +145 -0
- package/src/core-skills/bmad-spec/assets/headless-schemas.md +33 -0
- package/src/core-skills/bmad-spec/assets/spec-template.md +49 -0
- package/src/core-skills/bmad-spec/customize.toml +53 -0
- package/src/core-skills/module-help.csv +13 -0
- package/src/core-skills/module.yaml +33 -0
- package/src/modules/wizz/README.md +39 -0
- package/src/modules/wizz/_shared/cerebro.md +24 -0
- package/src/modules/wizz/_shared/encerramento.md +36 -0
- package/src/modules/wizz/_shared/token-economy.md +28 -0
- package/src/modules/wizz/agents/wizz-ads/SKILL.md +30 -0
- package/src/modules/wizz/agents/wizz-ads/customize.toml +53 -0
- package/src/modules/wizz/agents/wizz-copy/SKILL.md +30 -0
- package/src/modules/wizz/agents/wizz-copy/customize.toml +53 -0
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +38 -0
- package/src/modules/wizz/agents/wizz-designer/customize.toml +60 -0
- package/src/modules/wizz/agents/wizz-growth/SKILL.md +31 -0
- package/src/modules/wizz/agents/wizz-growth/customize.toml +58 -0
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +77 -0
- package/src/modules/wizz/agents/wizz-maestro/customize.toml +78 -0
- package/src/modules/wizz/agents/wizz-memoria/SKILL.md +31 -0
- package/src/modules/wizz/agents/wizz-memoria/customize.toml +57 -0
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +31 -0
- package/src/modules/wizz/agents/wizz-qa/customize.toml +63 -0
- package/src/modules/wizz/agents/wizz-seo/SKILL.md +31 -0
- package/src/modules/wizz/agents/wizz-seo/customize.toml +58 -0
- package/src/modules/wizz/module.yaml +117 -0
- package/src/modules/wizz/overrides/bmad-agent-analyst.toml +35 -0
- package/src/modules/wizz/overrides/bmad-agent-architect.toml +39 -0
- package/src/modules/wizz/overrides/bmad-agent-dev.toml +40 -0
- package/src/modules/wizz/overrides/bmad-agent-pm.toml +23 -0
- package/src/modules/wizz/overrides/bmad-agent-tech-writer.toml +30 -0
- package/src/modules/wizz/overrides/bmad-agent-ux-designer.toml +26 -0
- package/src/modules/wizz/scripts/wizz-init.mjs +163 -0
- package/src/scripts/memlog.py +224 -0
- package/src/scripts/resolve_config.py +176 -0
- package/src/scripts/resolve_customization.py +238 -0
- package/src/scripts/tests/test_memlog.py +306 -0
- package/src/scripts/tests/test_resolve_customization.py +50 -0
- package/tools/bundle-web-bundles.js +117 -0
- package/tools/format-workflow-md.js +263 -0
- package/tools/installer/README.md +60 -0
- package/tools/installer/bmad-cli.js +105 -0
- package/tools/installer/cli-utils.js +53 -0
- package/tools/installer/commands/install.js +149 -0
- package/tools/installer/commands/status.js +65 -0
- package/tools/installer/commands/uninstall.js +167 -0
- package/tools/installer/core/config.js +73 -0
- package/tools/installer/core/existing-install.js +121 -0
- package/tools/installer/core/install-paths.js +132 -0
- package/tools/installer/core/installer.js +1653 -0
- package/tools/installer/core/legacy-warnings.js +151 -0
- package/tools/installer/core/manifest-generator.js +859 -0
- package/tools/installer/core/manifest.js +433 -0
- package/tools/installer/core/python-check.js +199 -0
- package/tools/installer/core/wsl-node-check.js +109 -0
- package/tools/installer/file-ops.js +204 -0
- package/tools/installer/fs-native.js +116 -0
- package/tools/installer/ide/_config-driven.js +972 -0
- package/tools/installer/ide/manager.js +324 -0
- package/tools/installer/ide/platform-codes.js +80 -0
- package/tools/installer/ide/platform-codes.yaml +329 -0
- package/tools/installer/ide/shared/installed-skills.js +50 -0
- package/tools/installer/ide/shared/path-utils.js +219 -0
- package/tools/installer/ide/shared/skill-manifest.js +57 -0
- package/tools/installer/install-messages.yaml +32 -0
- package/tools/installer/list-options.js +210 -0
- package/tools/installer/message-loader.js +83 -0
- package/tools/installer/modules/channel-plan.js +203 -0
- package/tools/installer/modules/channel-resolver.js +241 -0
- package/tools/installer/modules/custom-module-manager.js +912 -0
- package/tools/installer/modules/external-manager.js +527 -0
- package/tools/installer/modules/module-help-schema.js +13 -0
- package/tools/installer/modules/official-modules.js +2217 -0
- package/tools/installer/modules/plugin-resolver.js +398 -0
- package/tools/installer/modules/version-resolver.js +336 -0
- package/tools/installer/project-root.js +224 -0
- package/tools/installer/prompts.js +852 -0
- package/tools/installer/set-overrides.js +330 -0
- package/tools/installer/ui.js +2077 -0
- package/tools/installer/yaml-format.js +245 -0
- package/tools/javascript-conventions.md +5 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/skill-validator.md +368 -0
- package/tools/validate-sidebar-order.js +388 -0
- package/tools/validate-skills.js +698 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/web-bundles/README.md +46 -0
- package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/brainstorming-coach/SKILL.md +83 -0
- package/web-bundles/brainstorming-coach/brain-methods.csv +62 -0
- package/web-bundles/bundles.json +139 -0
- package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +88 -0
- package/web-bundles/market-and-industry-research/SKILL.md +59 -0
- package/web-bundles/prd-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/prd-coach/SKILL.md +101 -0
- package/web-bundles/prd-coach/prd-template.md +165 -0
- package/web-bundles/prd-coach/prd-validation-checklist.md +135 -0
- package/web-bundles/prfaq-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/prfaq-coach/SKILL.md +139 -0
- package/web-bundles/product-brief-coach/INSTRUCTIONS.md +86 -0
- package/web-bundles/product-brief-coach/SKILL.md +113 -0
- package/web-bundles/ux-coach/INSTRUCTIONS.md +92 -0
- package/web-bundles/ux-coach/SKILL.md +187 -0
- package/web-bundles/ux-coach/ux-validation.md +100 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Auto Mode
|
|
2
|
+
|
|
3
|
+
Active when `{workflow.party_mode}` resolves to `auto` (or a `--mode auto` override). The blend: voice the room inline by default — fast and conversational — and spawn real independent agents only for the rounds where independence changes the answer. When you do spawn, follow `references/mode-subagent.md` for the mechanics. If your harness can't spawn agents, auto is just `session`.
|
|
4
|
+
|
|
5
|
+
## When to spawn vs. voice
|
|
6
|
+
|
|
7
|
+
Spawn independent agents when divergent, uncolored thinking is the value of the round:
|
|
8
|
+
|
|
9
|
+
- A genuine evaluation, review, or critique — the kind that fails if one mind voices every side and they drift into agreement (code review, red-team, a hard look at a plan).
|
|
10
|
+
- The personas would plausibly reach *different* conclusions, and that divergence is the point.
|
|
11
|
+
- The user asked someone to dig in, analyze, or research — depth earned by a direct ask.
|
|
12
|
+
|
|
13
|
+
Voice inline for everything else: banter, reactions, quick takes, the connective back-and-forth that is most of a conversation. When in doubt, voice — spawning is the exception you reach for, not the default.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Subagent Mode
|
|
2
|
+
|
|
3
|
+
Active when `{workflow.party_mode}` resolves to `subagent` (or a `--mode subagent` override). Spawn a real agent for every substantive round, the opening banter included, so each persona thinks independently — not one mind voicing them all. A standing directive: don't relitigate it round to round, and don't fall back to voicing because a moment felt light. If your harness can't spawn agents, fall back to `session`.
|
|
4
|
+
|
|
5
|
+
## Spawning
|
|
6
|
+
|
|
7
|
+
Give each agent the objective, their persona, the context, and what the others said if they're reacting. For a custom member, hand them their `persona` as their character and fold their `capabilities` note into the brief; spawn them with their `model` if one is set (a session `--model` pin wins for everyone). Always carry two things into the brief: the group's `scene` and any behavioral instructions in the persona are binding direction, and anything that could be stale since the model's training cutoff should be checked with web search rather than guessed.
|
|
8
|
+
|
|
9
|
+
Trust their *thinking*: let them decide what to read and how to reach a view; don't script their substance with do-and-don't checklists — that's what produces lifeless blobs. But hold the *form*: a length cap (usually a sentence or three) and the instruction to react to what was just said rather than file a report. Constraining length and stance protects the conversation; constraining their reasoning kills it. Stay in character throughout; a persona goes long only when the user asked it to dig in.
|
|
10
|
+
|
|
11
|
+
Spawn in parallel for independent first-takes; spawn sequentially when you want them reacting to each other's actual words. Keep it to a few voices a round — more reads as a crowd, not a conversation.
|
|
12
|
+
|
|
13
|
+
## Weave the replies into one conversation
|
|
14
|
+
|
|
15
|
+
Each agent saw only the user's message and the context you handed it, so left raw they reply in parallel and never to one another. Reorder turns so a rebuttal lands right after what it rebuts, add the connective phrasing real talk has ("Hold on, Winston, that's backwards", "Sally's right about the API, but she's missing the cost"), and let one persona pick up a thread another dropped. Never change what an agent argued — weave delivery, preserve substance.
|
|
16
|
+
|
|
17
|
+
## Model choice
|
|
18
|
+
|
|
19
|
+
Match the model to the round: something quick for banter, something stronger for deep work. A per-member `model` is used when set; a session `--model <name>` pin overrides it for everyone.
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.11"
|
|
4
|
+
# ///
|
|
5
|
+
"""Resolve the party-mode roster, lazily.
|
|
6
|
+
|
|
7
|
+
Merges the installed BMAD agents with the user's custom `party_members`
|
|
8
|
+
into one collective, then projects only what the moment needs:
|
|
9
|
+
|
|
10
|
+
* default (no flag) — the active roster to load on entry: the
|
|
11
|
+
`default_party` group if one is configured, else the whole collective.
|
|
12
|
+
Other groups come back as names only, so nothing you aren't using is
|
|
13
|
+
loaded into the party.
|
|
14
|
+
* --list-groups — just id + name + size for every configured group. The
|
|
15
|
+
cheap menu for "which room?", with no member detail.
|
|
16
|
+
* --party <id> — full member detail for one chosen group, on demand
|
|
17
|
+
(e.g. when the user switches rooms). Unknown id returns the available
|
|
18
|
+
names instead of an error wall.
|
|
19
|
+
|
|
20
|
+
The merge is deterministic (a keyed union; a custom member whose code
|
|
21
|
+
matches an installed agent overrides it), so the orchestrator consumes a
|
|
22
|
+
resolved roster instead of re-deriving it every session.
|
|
23
|
+
|
|
24
|
+
Stdlib only (Python 3.11+ for tomllib). Shells out to the project's
|
|
25
|
+
resolve_config.py and resolve_customization.py; falls back to reading
|
|
26
|
+
customize.toml directly if the customization resolver is unavailable.
|
|
27
|
+
|
|
28
|
+
resolve_party.py --project-root P --skill S
|
|
29
|
+
resolve_party.py --project-root P --skill S --list-groups
|
|
30
|
+
resolve_party.py --project-root P --skill S --party writers-room
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
import argparse
|
|
34
|
+
import json
|
|
35
|
+
import subprocess
|
|
36
|
+
import sys
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
import tomllib
|
|
41
|
+
except ImportError: # pragma: no cover - guarded for <3.11
|
|
42
|
+
sys.stderr.write("error: Python 3.11+ is required (stdlib `tomllib`).\n")
|
|
43
|
+
sys.exit(3)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _run_json(cmd):
|
|
47
|
+
"""Run a resolver script and parse its JSON stdout. None on any failure."""
|
|
48
|
+
try:
|
|
49
|
+
out = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
|
|
50
|
+
except (OSError, subprocess.SubprocessError):
|
|
51
|
+
return None
|
|
52
|
+
if out.returncode != 0 or not out.stdout.strip():
|
|
53
|
+
return None
|
|
54
|
+
try:
|
|
55
|
+
return json.loads(out.stdout)
|
|
56
|
+
except json.JSONDecodeError:
|
|
57
|
+
return None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def load_agents(project_root: Path):
|
|
61
|
+
"""Installed agents as {code: entry}. Empty dict (with a flag) on failure."""
|
|
62
|
+
script = project_root / "_bmad" / "scripts" / "resolve_config.py"
|
|
63
|
+
data = _run_json([sys.executable, str(script), "--project-root", str(project_root), "--key", "agents"])
|
|
64
|
+
if data is None:
|
|
65
|
+
return {}, False
|
|
66
|
+
return data.get("agents", {}) or {}, True
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def load_workflow(project_root: Path, skill_root: Path):
|
|
70
|
+
"""Merged [workflow] table. Falls back to the skill's base customize.toml."""
|
|
71
|
+
script = project_root / "_bmad" / "scripts" / "resolve_customization.py"
|
|
72
|
+
data = _run_json([sys.executable, str(script), "--skill", str(skill_root), "--key", "workflow"])
|
|
73
|
+
if data is not None and "workflow" in data:
|
|
74
|
+
return data["workflow"]
|
|
75
|
+
# Fallback: read the skill's base customize.toml directly (no override merge).
|
|
76
|
+
toml_path = skill_root / "customize.toml"
|
|
77
|
+
if toml_path.exists():
|
|
78
|
+
try:
|
|
79
|
+
with toml_path.open("rb") as f:
|
|
80
|
+
return tomllib.load(f).get("workflow", {})
|
|
81
|
+
except (OSError, tomllib.TOMLDecodeError):
|
|
82
|
+
pass
|
|
83
|
+
return {}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _alias(code: str) -> str:
|
|
87
|
+
"""Short alias for an installed agent code: bmad-agent-analyst -> analyst."""
|
|
88
|
+
for prefix in ("bmad-agent-", "bmad-"):
|
|
89
|
+
if code.startswith(prefix):
|
|
90
|
+
return code[len(prefix):]
|
|
91
|
+
return code
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def build_collective(agents: dict, party_members: list):
|
|
95
|
+
"""One pool keyed by code. Custom members override matching installed agents.
|
|
96
|
+
|
|
97
|
+
Returns (collective, index, installed_codes):
|
|
98
|
+
* collective — every member (installed + custom), the pool groups draw
|
|
99
|
+
from and the orchestrator can summon by name.
|
|
100
|
+
* index — maps every resolvable token (code, prefix-stripped alias,
|
|
101
|
+
lower-cased name) to a canonical code.
|
|
102
|
+
* installed_codes — the codes occupying an installed-agent slot, in
|
|
103
|
+
order. This is the DEFAULT room: installed agents (with any custom
|
|
104
|
+
override applied in place), and NOT the pure-custom additions. So
|
|
105
|
+
shipping or defining custom members grows the pool without crowding
|
|
106
|
+
the default party.
|
|
107
|
+
"""
|
|
108
|
+
collective = {}
|
|
109
|
+
index = {}
|
|
110
|
+
installed_codes = []
|
|
111
|
+
|
|
112
|
+
def register(code, entry):
|
|
113
|
+
collective[code] = entry
|
|
114
|
+
index[code] = code
|
|
115
|
+
index[code.lower()] = code
|
|
116
|
+
index[_alias(code).lower()] = code
|
|
117
|
+
name = entry.get("name")
|
|
118
|
+
if name:
|
|
119
|
+
index[name.lower()] = code
|
|
120
|
+
|
|
121
|
+
for code, info in agents.items():
|
|
122
|
+
register(code, {
|
|
123
|
+
"code": code,
|
|
124
|
+
"name": info.get("name", code),
|
|
125
|
+
"icon": info.get("icon", ""),
|
|
126
|
+
"title": info.get("title", ""),
|
|
127
|
+
"description": info.get("description", ""),
|
|
128
|
+
"module": info.get("module", ""),
|
|
129
|
+
"team": info.get("team", ""),
|
|
130
|
+
"source": "installed",
|
|
131
|
+
})
|
|
132
|
+
installed_codes.append(code)
|
|
133
|
+
|
|
134
|
+
for m in party_members or []:
|
|
135
|
+
code = m.get("code")
|
|
136
|
+
if not code:
|
|
137
|
+
continue
|
|
138
|
+
# A custom member overrides an installed agent it matches by code/alias/name.
|
|
139
|
+
canonical = index.get(code) or index.get(code.lower()) or code
|
|
140
|
+
entry = {"code": canonical, "source": "custom"}
|
|
141
|
+
for field in ("name", "icon", "title", "persona", "capabilities", "model"):
|
|
142
|
+
if m.get(field) is not None:
|
|
143
|
+
entry[field] = m[field]
|
|
144
|
+
entry.setdefault("name", canonical)
|
|
145
|
+
register(canonical, entry)
|
|
146
|
+
# An override keeps the installed slot; a brand-new custom does not join it.
|
|
147
|
+
|
|
148
|
+
return collective, index, installed_codes
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def resolve_members(member_tokens, collective, index):
|
|
152
|
+
"""(resolved entries in listed order, unresolved tokens)."""
|
|
153
|
+
resolved, unresolved = [], []
|
|
154
|
+
for token in member_tokens or []:
|
|
155
|
+
code = index.get(token) or index.get(str(token).lower())
|
|
156
|
+
if code and code in collective:
|
|
157
|
+
resolved.append(collective[code])
|
|
158
|
+
else:
|
|
159
|
+
unresolved.append(token)
|
|
160
|
+
return resolved, unresolved
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def group_menu(groups):
|
|
164
|
+
"""Names only — the cheap menu. Open-cast groups (no roster) are flagged."""
|
|
165
|
+
out = []
|
|
166
|
+
for g in groups or []:
|
|
167
|
+
if not isinstance(g, dict) or not g.get("id"):
|
|
168
|
+
continue
|
|
169
|
+
members = g.get("members", []) or []
|
|
170
|
+
entry = {"id": g["id"], "name": g.get("name", g["id"]),
|
|
171
|
+
"member_count": len(members)}
|
|
172
|
+
if not members:
|
|
173
|
+
entry["open_cast"] = True
|
|
174
|
+
out.append(entry)
|
|
175
|
+
return out
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def find_group(groups, group_id):
|
|
179
|
+
for g in groups or []:
|
|
180
|
+
if isinstance(g, dict) and g.get("id") == group_id:
|
|
181
|
+
return g
|
|
182
|
+
return None
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def group_detail(g, collective, index):
|
|
186
|
+
"""Full detail for one group: resolved members + the optional scene.
|
|
187
|
+
|
|
188
|
+
`scene` is a freeform line the orchestrator plays — setting, what's
|
|
189
|
+
happening, room dynamics, in-the-moment character notes. Surfaced only
|
|
190
|
+
here (when a group is the active/chosen roster), never in the menu.
|
|
191
|
+
|
|
192
|
+
`members` is optional. With none, the group is open-cast: `open_cast`
|
|
193
|
+
is flagged and the scene describes the pool the orchestrator casts from
|
|
194
|
+
on the fly (e.g. "figures from the Star Wars Rebels universe"). A few
|
|
195
|
+
listed members anchor the room; the scene can still invite more.
|
|
196
|
+
"""
|
|
197
|
+
raw_members = g.get("members", []) or []
|
|
198
|
+
members, unresolved = resolve_members(raw_members, collective, index)
|
|
199
|
+
detail = {"active": g["id"], "name": g.get("name", g["id"]),
|
|
200
|
+
"members": members, "unresolved": unresolved}
|
|
201
|
+
if g.get("scene"):
|
|
202
|
+
detail["scene"] = g["scene"]
|
|
203
|
+
if not raw_members:
|
|
204
|
+
detail["open_cast"] = True
|
|
205
|
+
return detail
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def main():
|
|
209
|
+
ap = argparse.ArgumentParser(description="Resolve the party-mode roster, lazily.")
|
|
210
|
+
ap.add_argument("--project-root", required=True)
|
|
211
|
+
ap.add_argument("--skill", required=True, help="Path to the bmad-party-mode skill dir")
|
|
212
|
+
ap.add_argument("--party", help="Resolve full detail for this group id")
|
|
213
|
+
ap.add_argument("--list-groups", action="store_true", help="Group names only")
|
|
214
|
+
args = ap.parse_args()
|
|
215
|
+
|
|
216
|
+
project_root = Path(args.project_root).resolve()
|
|
217
|
+
skill_root = Path(args.skill).resolve()
|
|
218
|
+
|
|
219
|
+
workflow = load_workflow(project_root, skill_root)
|
|
220
|
+
groups = workflow.get("party_groups", []) or []
|
|
221
|
+
default_party = workflow.get("default_party", "") or ""
|
|
222
|
+
party_mode = workflow.get("party_mode", "session") or "session"
|
|
223
|
+
|
|
224
|
+
# Group menu never needs the (more expensive) installed-agent resolve.
|
|
225
|
+
if args.list_groups:
|
|
226
|
+
_emit({
|
|
227
|
+
"party_mode": party_mode,
|
|
228
|
+
"default_party": default_party,
|
|
229
|
+
"groups": group_menu(groups),
|
|
230
|
+
})
|
|
231
|
+
return
|
|
232
|
+
|
|
233
|
+
agents, agents_ok = load_agents(project_root)
|
|
234
|
+
collective, index, installed_codes = build_collective(agents, workflow.get("party_members", []))
|
|
235
|
+
|
|
236
|
+
if args.party:
|
|
237
|
+
g = find_group(groups, args.party)
|
|
238
|
+
if g is None:
|
|
239
|
+
_emit({"error": "unknown_group", "requested": args.party,
|
|
240
|
+
"available": group_menu(groups)})
|
|
241
|
+
return
|
|
242
|
+
_emit({**group_detail(g, collective, index), "party_mode": party_mode})
|
|
243
|
+
return
|
|
244
|
+
|
|
245
|
+
# Default: the active roster to load on entry.
|
|
246
|
+
result = {"party_mode": party_mode, "groups": group_menu(groups),
|
|
247
|
+
"installed_agents_resolved": agents_ok}
|
|
248
|
+
g = find_group(groups, default_party) if default_party else None
|
|
249
|
+
if g is not None:
|
|
250
|
+
result.update(group_detail(g, collective, index))
|
|
251
|
+
else:
|
|
252
|
+
# No default group: the installed agents (custom additions stay in the
|
|
253
|
+
# pool but don't crowd the default room), exactly like a plain install.
|
|
254
|
+
result.update({"active": "installed",
|
|
255
|
+
"members": [collective[c] for c in installed_codes]})
|
|
256
|
+
_emit(result)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
def _emit(obj):
|
|
260
|
+
reconfigure = getattr(sys.stdout, "reconfigure", None)
|
|
261
|
+
if reconfigure is not None:
|
|
262
|
+
reconfigure(encoding="utf-8")
|
|
263
|
+
sys.stdout.write(json.dumps(obj, indent=2, ensure_ascii=False) + "\n")
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
if __name__ == "__main__":
|
|
267
|
+
main()
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# /// script
|
|
3
|
+
# requires-python = ">=3.11"
|
|
4
|
+
# ///
|
|
5
|
+
"""Unit tests for resolve_party.py — merge, alias, override, group resolution."""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
import unittest
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
|
|
11
|
+
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
12
|
+
import resolve_party as rp # noqa: E402
|
|
13
|
+
|
|
14
|
+
AGENTS = {
|
|
15
|
+
"bmad-agent-analyst": {"name": "Mary", "icon": "📊", "title": "Analyst"},
|
|
16
|
+
"bmad-agent-pm": {"name": "John", "icon": "📋", "title": "PM"},
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class TestAlias(unittest.TestCase):
|
|
21
|
+
def test_strips_known_prefixes(self):
|
|
22
|
+
self.assertEqual(rp._alias("bmad-agent-analyst"), "analyst")
|
|
23
|
+
self.assertEqual(rp._alias("bmad-foo"), "foo")
|
|
24
|
+
|
|
25
|
+
def test_passes_through_unprefixed(self):
|
|
26
|
+
self.assertEqual(rp._alias("morpheus"), "morpheus")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class TestBuildCollective(unittest.TestCase):
|
|
30
|
+
def test_installed_agents_indexed_by_code_alias_and_name(self):
|
|
31
|
+
col, idx, _ = rp.build_collective(AGENTS, [])
|
|
32
|
+
self.assertEqual(set(col), {"bmad-agent-analyst", "bmad-agent-pm"})
|
|
33
|
+
self.assertEqual(idx["analyst"], "bmad-agent-analyst") # alias
|
|
34
|
+
self.assertEqual(idx["mary"], "bmad-agent-analyst") # name (ci)
|
|
35
|
+
self.assertEqual(idx["bmad-agent-pm"], "bmad-agent-pm") # full code
|
|
36
|
+
self.assertEqual(col["bmad-agent-analyst"]["source"], "installed")
|
|
37
|
+
|
|
38
|
+
def test_custom_member_appends(self):
|
|
39
|
+
col, _, _ = rp.build_collective(AGENTS, [{"code": "morpheus", "name": "Morpheus", "persona": "riddles"}])
|
|
40
|
+
self.assertIn("morpheus", col)
|
|
41
|
+
self.assertEqual(col["morpheus"]["source"], "custom")
|
|
42
|
+
self.assertEqual(col["morpheus"]["persona"], "riddles")
|
|
43
|
+
|
|
44
|
+
def test_custom_overrides_installed_by_alias(self):
|
|
45
|
+
col, _, _ = rp.build_collective(AGENTS, [{"code": "analyst", "name": "Mary-Custom", "persona": "p"}])
|
|
46
|
+
# Override lands on the canonical installed code, not a new "analyst" entry.
|
|
47
|
+
self.assertNotIn("analyst", col)
|
|
48
|
+
self.assertEqual(col["bmad-agent-analyst"]["source"], "custom")
|
|
49
|
+
self.assertEqual(col["bmad-agent-analyst"]["name"], "Mary-Custom")
|
|
50
|
+
|
|
51
|
+
def test_member_without_code_skipped(self):
|
|
52
|
+
col, _, _ = rp.build_collective(AGENTS, [{"name": "Nameless"}])
|
|
53
|
+
self.assertEqual(set(col), {"bmad-agent-analyst", "bmad-agent-pm"})
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class TestResolveMembers(unittest.TestCase):
|
|
57
|
+
def setUp(self):
|
|
58
|
+
self.col, self.idx, _ = rp.build_collective(AGENTS, [{"code": "morpheus", "name": "Morpheus"}])
|
|
59
|
+
|
|
60
|
+
def test_resolves_in_listed_order_and_flags_unknowns(self):
|
|
61
|
+
resolved, unresolved = rp.resolve_members(["morpheus", "analyst", "ghost"], self.col, self.idx)
|
|
62
|
+
self.assertEqual([m["code"] for m in resolved], ["morpheus", "bmad-agent-analyst"])
|
|
63
|
+
self.assertEqual(unresolved, ["ghost"])
|
|
64
|
+
|
|
65
|
+
def test_empty(self):
|
|
66
|
+
self.assertEqual(rp.resolve_members([], self.col, self.idx), ([], []))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class TestGroups(unittest.TestCase):
|
|
70
|
+
GROUPS = [
|
|
71
|
+
{"id": "wr", "name": "Writers", "members": ["analyst", "morpheus"]},
|
|
72
|
+
{"id": "bad"}, # no name -> falls back to id; no members -> count 0
|
|
73
|
+
{"name": "no-id"}, # dropped from menu
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
def test_menu_is_names_only_with_counts_and_open_cast_flag(self):
|
|
77
|
+
menu = rp.group_menu(self.GROUPS)
|
|
78
|
+
self.assertEqual(menu, [
|
|
79
|
+
{"id": "wr", "name": "Writers", "member_count": 2},
|
|
80
|
+
{"id": "bad", "name": "bad", "member_count": 0, "open_cast": True},
|
|
81
|
+
])
|
|
82
|
+
|
|
83
|
+
def test_find_group(self):
|
|
84
|
+
self.assertEqual(rp.find_group(self.GROUPS, "wr")["name"], "Writers")
|
|
85
|
+
self.assertIsNone(rp.find_group(self.GROUPS, "missing"))
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class TestGroupDetail(unittest.TestCase):
|
|
89
|
+
def setUp(self):
|
|
90
|
+
self.col, self.idx, _ = rp.build_collective(AGENTS, [{"code": "morpheus", "name": "Morpheus"}])
|
|
91
|
+
|
|
92
|
+
def test_scene_passes_through_when_present(self):
|
|
93
|
+
g = {"id": "tos-10-forward", "name": "Ten Forward", "members": ["morpheus"],
|
|
94
|
+
"scene": "Late evening, a few rounds in."}
|
|
95
|
+
d = rp.group_detail(g, self.col, self.idx)
|
|
96
|
+
self.assertEqual(d["scene"], "Late evening, a few rounds in.")
|
|
97
|
+
self.assertEqual([m["code"] for m in d["members"]], ["morpheus"])
|
|
98
|
+
|
|
99
|
+
def test_scene_omitted_when_absent_or_empty(self):
|
|
100
|
+
for g in ({"id": "g", "members": ["morpheus"]},
|
|
101
|
+
{"id": "g", "members": ["morpheus"], "scene": ""}):
|
|
102
|
+
self.assertNotIn("scene", rp.group_detail(g, self.col, self.idx))
|
|
103
|
+
|
|
104
|
+
def test_anchored_group_is_not_open_cast(self):
|
|
105
|
+
g = {"id": "g", "members": ["morpheus"]}
|
|
106
|
+
self.assertNotIn("open_cast", rp.group_detail(g, self.col, self.idx))
|
|
107
|
+
|
|
108
|
+
def test_open_cast_group_flagged_with_empty_members(self):
|
|
109
|
+
g = {"id": "rebels", "name": "Star Wars Rebels",
|
|
110
|
+
"scene": "Figures from the Rebels universe drop in as the topic calls for them."}
|
|
111
|
+
d = rp.group_detail(g, self.col, self.idx)
|
|
112
|
+
self.assertTrue(d["open_cast"])
|
|
113
|
+
self.assertEqual(d["members"], [])
|
|
114
|
+
self.assertEqual(d["scene"][:7], "Figures")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class TestInstalledCodesIsDefaultRoom(unittest.TestCase):
|
|
118
|
+
"""The default room is installed agents only; pure customs stay in the pool."""
|
|
119
|
+
|
|
120
|
+
def test_pure_custom_excluded_override_kept_in_default_room(self):
|
|
121
|
+
col, _, installed = rp.build_collective(AGENTS, [
|
|
122
|
+
{"code": "morpheus", "name": "Morpheus"}, # pure custom
|
|
123
|
+
{"code": "analyst", "name": "Mary-Custom", "persona": "p"}, # override
|
|
124
|
+
{"code": "sec-hawk", "name": "Vex"}, # shipped crew member
|
|
125
|
+
])
|
|
126
|
+
# Pure customs are in the pool...
|
|
127
|
+
self.assertIn("morpheus", col)
|
|
128
|
+
self.assertIn("sec-hawk", col)
|
|
129
|
+
# ...but NOT in the default room.
|
|
130
|
+
self.assertEqual(installed, ["bmad-agent-analyst", "bmad-agent-pm"])
|
|
131
|
+
default_room = [col[c]["code"] for c in installed]
|
|
132
|
+
self.assertEqual(default_room, ["bmad-agent-analyst", "bmad-agent-pm"])
|
|
133
|
+
# An override keeps its installed slot (and its custom content).
|
|
134
|
+
self.assertEqual(col["bmad-agent-analyst"]["name"], "Mary-Custom")
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
if __name__ == "__main__":
|
|
138
|
+
unittest.main()
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-review-adversarial-general
|
|
3
|
+
description: 'Perform a Cynical Review and produce a findings report. Use when the user requests a critical review of something'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Adversarial Review (General)
|
|
7
|
+
|
|
8
|
+
**Goal:** Cynically review content and produce findings.
|
|
9
|
+
|
|
10
|
+
**Your Role:** You are a cynical, jaded reviewer with zero patience for sloppy work. The content was submitted by a clueless weasel and you expect to find problems. Be skeptical of everything. Look for what's missing, not just what's wrong. Use a precise, professional tone — no profanity or personal attacks.
|
|
11
|
+
|
|
12
|
+
**Inputs:**
|
|
13
|
+
- **content** — Content to review: diff, spec, story, doc, or any artifact
|
|
14
|
+
- **also_consider** (optional) — Areas to keep in mind during review alongside normal adversarial analysis
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## EXECUTION
|
|
18
|
+
|
|
19
|
+
### Step 1: Receive Content
|
|
20
|
+
|
|
21
|
+
- Load the content to review from provided input or context
|
|
22
|
+
- If content to review is empty, ask for clarification and abort
|
|
23
|
+
- Identify content type (diff, branch, uncommitted changes, document, etc.)
|
|
24
|
+
|
|
25
|
+
### Step 2: Adversarial Analysis
|
|
26
|
+
|
|
27
|
+
Review with extreme skepticism — assume problems exist. Find at least ten issues to fix or improve in the provided content.
|
|
28
|
+
|
|
29
|
+
### Step 3: Present Findings
|
|
30
|
+
|
|
31
|
+
Output findings as a Markdown list (descriptions only).
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## HALT CONDITIONS
|
|
35
|
+
|
|
36
|
+
- HALT if zero findings — this is suspicious, re-analyze or ask for guidance
|
|
37
|
+
- HALT if content is empty or unreadable
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-review-edge-case-hunter
|
|
3
|
+
description: 'Walk every branching path and boundary condition in content, report only unhandled edge cases. Orthogonal to adversarial review - method-driven not attitude-driven. Use when you need exhaustive edge-case analysis of code, specs, or diffs.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Edge Case Hunter Review
|
|
7
|
+
|
|
8
|
+
**Goal:** You are a pure path tracer. Never comment on whether code is good or bad; only list missing handling.
|
|
9
|
+
When a diff is provided, scan only the diff hunks and list boundaries that are directly reachable from the changed lines and lack an explicit guard in the diff.
|
|
10
|
+
When no diff is provided (full file or function), treat the entire provided content as the scope.
|
|
11
|
+
Ignore the rest of the codebase unless the provided content explicitly references external functions.
|
|
12
|
+
|
|
13
|
+
**Inputs:**
|
|
14
|
+
- **content** — Content to review: diff, full file, or function
|
|
15
|
+
- **also_consider** (optional) — Areas to keep in mind during review alongside normal edge-case analysis
|
|
16
|
+
|
|
17
|
+
**MANDATORY: Execute steps in the Execution section IN EXACT ORDER. DO NOT skip steps or change the sequence. When a halt condition triggers, follow its specific instruction exactly. Each action within a step is a REQUIRED action to complete that step.**
|
|
18
|
+
|
|
19
|
+
**Your method is exhaustive path enumeration — mechanically walk every branch, not hunt by intuition. Report ONLY paths and conditions that lack handling — discard handled ones silently. Do NOT editorialize or add filler — findings only.**
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## EXECUTION
|
|
23
|
+
|
|
24
|
+
### Step 1: Receive Content
|
|
25
|
+
|
|
26
|
+
- Load the content to review strictly from provided input
|
|
27
|
+
- If content is empty, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
28
|
+
- Identify content type (diff, full file, or function) to determine scope rules
|
|
29
|
+
|
|
30
|
+
### Step 2: Exhaustive Path Analysis
|
|
31
|
+
|
|
32
|
+
**Walk every branching path and boundary condition within scope — report only unhandled ones.**
|
|
33
|
+
|
|
34
|
+
- If `also_consider` input was provided, incorporate those areas into the analysis
|
|
35
|
+
- Walk all branching paths: control flow (conditionals, loops, error handlers, early returns) and domain boundaries (where values, states, or conditions transition). Derive the relevant edge classes from the content itself — don't rely on a fixed checklist. Examples: missing else/default, unguarded inputs, off-by-one loops, arithmetic overflow, implicit type coercion, race conditions, timeout gaps
|
|
36
|
+
- For each path: determine whether the content handles it
|
|
37
|
+
- Collect only the unhandled paths as findings — discard handled ones silently
|
|
38
|
+
|
|
39
|
+
### Step 3: Validate Completeness
|
|
40
|
+
|
|
41
|
+
- Revisit every edge class from Step 2 — e.g., missing else/default, null/empty inputs, off-by-one loops, arithmetic overflow, implicit type coercion, race conditions, timeout gaps
|
|
42
|
+
- Add any newly found unhandled paths to findings; discard confirmed-handled ones
|
|
43
|
+
|
|
44
|
+
### Step 4: Present Findings
|
|
45
|
+
|
|
46
|
+
Output findings as a JSON array following the Output Format specification exactly.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## OUTPUT FORMAT
|
|
50
|
+
|
|
51
|
+
Return ONLY a valid JSON array of objects. Each object must contain exactly these four fields and nothing else:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
[{
|
|
55
|
+
"location": "file:start-end (or file:line when single line, or file:hunk when exact line unavailable)",
|
|
56
|
+
"trigger_condition": "one-line description (max 15 words)",
|
|
57
|
+
"guard_snippet": "minimal code sketch that closes the gap (single-line escaped string, no raw newlines or unescaped quotes)",
|
|
58
|
+
"potential_consequence": "what could actually go wrong (max 15 words)"
|
|
59
|
+
}]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when no unhandled paths are found.
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## HALT CONDITIONS
|
|
66
|
+
|
|
67
|
+
- If content is empty or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bmad-shard-doc
|
|
3
|
+
description: 'Splits large markdown documents into smaller, organized files based on level 2 (default) sections. Use if the user says perform shard document'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Shard Document
|
|
7
|
+
|
|
8
|
+
**Goal:** Split large markdown documents into smaller, organized files based on level 2 sections using `npx @kayvan/markdown-tree-parser`.
|
|
9
|
+
|
|
10
|
+
## CRITICAL RULES
|
|
11
|
+
|
|
12
|
+
- MANDATORY: Execute ALL steps in the EXECUTION section IN EXACT ORDER
|
|
13
|
+
- DO NOT skip steps or change the sequence
|
|
14
|
+
- HALT immediately when halt-conditions are met
|
|
15
|
+
- Each action within a step is a REQUIRED action to complete that step
|
|
16
|
+
|
|
17
|
+
## EXECUTION
|
|
18
|
+
|
|
19
|
+
### Step 1: Get Source Document
|
|
20
|
+
|
|
21
|
+
- Ask user for the source document path if not provided already
|
|
22
|
+
- Verify file exists and is accessible
|
|
23
|
+
- Verify file is markdown format (.md extension)
|
|
24
|
+
- If file not found or not markdown: HALT with error message
|
|
25
|
+
|
|
26
|
+
### Step 2: Get Destination Folder
|
|
27
|
+
|
|
28
|
+
- Determine default destination: same location as source file, folder named after source file without .md extension
|
|
29
|
+
- Example: `/path/to/architecture.md` --> `/path/to/architecture/`
|
|
30
|
+
- Ask user for the destination folder path (`[y]` to confirm use of default: `[suggested-path]`, else enter a new path)
|
|
31
|
+
- If user accepts default: use the suggested destination path
|
|
32
|
+
- If user provides custom path: use the custom destination path
|
|
33
|
+
- Verify destination folder exists or can be created
|
|
34
|
+
- Check write permissions for destination
|
|
35
|
+
- If permission denied: HALT with error message
|
|
36
|
+
|
|
37
|
+
### Step 3: Execute Sharding
|
|
38
|
+
|
|
39
|
+
- Inform user that sharding is beginning
|
|
40
|
+
- Execute command: `npx @kayvan/markdown-tree-parser explode [source-document] [destination-folder]`
|
|
41
|
+
- Capture command output and any errors
|
|
42
|
+
- If command fails: HALT and display error to user
|
|
43
|
+
|
|
44
|
+
### Step 4: Verify Output
|
|
45
|
+
|
|
46
|
+
- Check that destination folder contains sharded files
|
|
47
|
+
- Verify index.md was created in destination folder
|
|
48
|
+
- Count the number of files created
|
|
49
|
+
- If no files created: HALT with error message
|
|
50
|
+
|
|
51
|
+
### Step 5: Report Completion
|
|
52
|
+
|
|
53
|
+
- Display completion report to user including:
|
|
54
|
+
- Source document path and name
|
|
55
|
+
- Destination folder path
|
|
56
|
+
- Number of section files created
|
|
57
|
+
- Confirmation that index.md was created
|
|
58
|
+
- Any tool output or warnings
|
|
59
|
+
- Inform user that sharding completed successfully
|
|
60
|
+
|
|
61
|
+
### Step 6: Handle Original Document
|
|
62
|
+
|
|
63
|
+
> **Critical:** Keeping both the original and sharded versions defeats the purpose of sharding and can cause confusion.
|
|
64
|
+
|
|
65
|
+
Present user with options for the original document:
|
|
66
|
+
|
|
67
|
+
> What would you like to do with the original document `[source-document-name]`?
|
|
68
|
+
>
|
|
69
|
+
> Options:
|
|
70
|
+
> - `[d]` Delete - Remove the original (recommended - shards can always be recombined)
|
|
71
|
+
> - `[m]` Move to archive - Move original to a backup/archive location
|
|
72
|
+
> - `[k]` Keep - Leave original in place (NOT recommended - defeats sharding purpose)
|
|
73
|
+
>
|
|
74
|
+
> Your choice (d/m/k):
|
|
75
|
+
|
|
76
|
+
#### If user selects `d` (delete)
|
|
77
|
+
|
|
78
|
+
- Delete the original source document file
|
|
79
|
+
- Confirm deletion to user: "Original document deleted: [source-document-path]"
|
|
80
|
+
- Note: The document can be reconstructed from shards by concatenating all section files in order
|
|
81
|
+
|
|
82
|
+
#### If user selects `m` (move)
|
|
83
|
+
|
|
84
|
+
- Determine default archive location: same directory as source, in an `archive` subfolder
|
|
85
|
+
- Example: `/path/to/architecture.md` --> `/path/to/archive/architecture.md`
|
|
86
|
+
- Ask: Archive location (`[y]` to use default: `[default-archive-path]`, or provide custom path)
|
|
87
|
+
- If user accepts default: use default archive path
|
|
88
|
+
- If user provides custom path: use custom archive path
|
|
89
|
+
- Create archive directory if it does not exist
|
|
90
|
+
- Move original document to archive location
|
|
91
|
+
- Confirm move to user: "Original document moved to: [archive-path]"
|
|
92
|
+
|
|
93
|
+
#### If user selects `k` (keep)
|
|
94
|
+
|
|
95
|
+
- Display warning to user:
|
|
96
|
+
- Keeping both original and sharded versions is NOT recommended
|
|
97
|
+
- The discover_inputs protocol may load the wrong version
|
|
98
|
+
- Updates to one will not reflect in the other
|
|
99
|
+
- Duplicate content taking up space
|
|
100
|
+
- Consider deleting or archiving the original document
|
|
101
|
+
- Confirm user choice: "Original document kept at: [source-document-path]"
|
|
102
|
+
|
|
103
|
+
## HALT CONDITIONS
|
|
104
|
+
|
|
105
|
+
- HALT if npx command fails or produces no output files
|