bmad-method 6.2.1-next.9 → 6.2.2

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.
Files changed (400) hide show
  1. package/AGENTS.md +1 -0
  2. package/README_CN.md +23 -36
  3. package/package.json +4 -6
  4. package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-analyst/bmad-skill-manifest.yaml +1 -2
  5. package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/bmad-skill-manifest.yaml +1 -2
  6. package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/SKILL.md +2 -3
  7. package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/SKILL.md +1 -1
  8. package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/SKILL.md +1 -1
  9. package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/SKILL.md +1 -1
  10. package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-pm/bmad-skill-manifest.yaml +1 -2
  11. package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-ux-designer/bmad-skill-manifest.yaml +1 -2
  12. package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01-discovery.md +1 -1
  13. package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-01b-legacy-conversion.md +1 -1
  14. package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-02-review.md +1 -1
  15. package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-03-edit.md +1 -1
  16. package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/steps-e/step-e-04-complete.md +1 -1
  17. package/src/{bmm/agents → bmm-skills/3-solutioning}/bmad-agent-architect/bmad-skill-manifest.yaml +1 -2
  18. package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-dev/bmad-skill-manifest.yaml +1 -2
  19. package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-qa/bmad-skill-manifest.yaml +1 -2
  20. package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-quick-flow-solo-dev/SKILL.md +1 -3
  21. package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-quick-flow-solo-dev/bmad-skill-manifest.yaml +1 -2
  22. package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-sm/bmad-skill-manifest.yaml +1 -2
  23. package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/steps/step-01-gather-context.md +3 -2
  24. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-02-review.md +34 -0
  25. package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/steps/step-03-triage.md +7 -8
  26. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md +129 -0
  27. package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/workflow.md +1 -0
  28. package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/workflow.md +4 -4
  29. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/SKILL.md +1 -1
  30. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/tech-spec-template.md → bmm-skills/4-implementation/bmad-quick-dev/spec-template.md} +0 -2
  31. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-01-clarify-and-route.md +22 -8
  32. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-02-plan.md +3 -3
  33. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-03-implement.md +6 -0
  34. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-05-present.md +8 -6
  35. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-oneshot.md +2 -2
  36. package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/workflow.md +3 -3
  37. package/src/bmm-skills/module-help.csv +30 -0
  38. package/src/{core/skills/bmad-advanced-elicitation/workflow.md → core-skills/bmad-advanced-elicitation/SKILL.md} +3 -1
  39. package/src/{core/skills/bmad-editorial-review-prose/workflow.md → core-skills/bmad-editorial-review-prose/SKILL.md} +5 -0
  40. package/src/{core/skills/bmad-editorial-review-structure/workflow.md → core-skills/bmad-editorial-review-structure/SKILL.md} +5 -0
  41. package/src/core-skills/bmad-help/SKILL.md +73 -0
  42. package/src/{core/skills/bmad-index-docs/workflow.md → core-skills/bmad-index-docs/SKILL.md} +5 -0
  43. package/src/{core/skills/bmad-review-adversarial-general/workflow.md → core-skills/bmad-review-adversarial-general/SKILL.md} +5 -0
  44. package/src/{core/skills/bmad-review-edge-case-hunter/workflow.md → core-skills/bmad-review-edge-case-hunter/SKILL.md} +5 -0
  45. package/src/{core/skills/bmad-shard-doc/workflow.md → core-skills/bmad-shard-doc/SKILL.md} +5 -0
  46. package/src/core-skills/module-help.csv +11 -0
  47. package/tools/bmad-npx-wrapper.js +2 -2
  48. package/tools/cli/commands/install.js +1 -8
  49. package/tools/cli/external-official-modules.yaml +1 -1
  50. package/tools/cli/installers/lib/core/config-collector.js +110 -23
  51. package/tools/cli/installers/lib/core/dependency-resolver.js +11 -11
  52. package/tools/cli/installers/lib/core/installer.js +4 -214
  53. package/tools/cli/installers/lib/core/manifest-generator.js +122 -833
  54. package/tools/cli/installers/lib/core/manifest.js +2 -2
  55. package/tools/cli/installers/lib/custom/handler.js +1 -247
  56. package/tools/cli/installers/lib/ide/_base-ide.js +0 -16
  57. package/tools/cli/installers/lib/ide/_config-driven.js +13 -168
  58. package/tools/cli/installers/lib/ide/manager.js +2 -7
  59. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +0 -1
  60. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +27 -0
  61. package/tools/cli/installers/lib/ide/shared/skill-manifest.js +1 -19
  62. package/tools/cli/installers/lib/modules/manager.js +12 -459
  63. package/tools/cli/lib/project-root.js +5 -5
  64. package/tools/cli/lib/ui.js +0 -19
  65. package/tools/skill-validator.md +52 -22
  66. package/tools/validate-skills.js +736 -0
  67. package/src/bmm/data/project-context-template.md +0 -26
  68. package/src/bmm/module-help.csv +0 -32
  69. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/SKILL.md +0 -6
  70. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/bmad-skill-manifest.yaml +0 -1
  71. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/product-brief.template.md +0 -10
  72. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01-init.md +0 -170
  73. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-01b-continue.md +0 -158
  74. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-02-vision.md +0 -193
  75. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-03-users.md +0 -196
  76. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-04-metrics.md +0 -199
  77. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-05-scope.md +0 -213
  78. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/steps/step-06-complete.md +0 -159
  79. package/src/bmm/workflows/1-analysis/bmad-create-product-brief/workflow.md +0 -55
  80. package/src/bmm/workflows/1-analysis/bmad-product-brief-preview/bmad-skill-manifest.yaml +0 -1
  81. package/src/bmm/workflows/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml +0 -1
  82. package/src/bmm/workflows/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml +0 -1
  83. package/src/bmm/workflows/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml +0 -1
  84. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +0 -182
  85. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +0 -237
  86. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +0 -249
  87. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +0 -259
  88. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +0 -177
  89. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +0 -476
  90. package/src/bmm/workflows/1-analysis/research/research.template.md +0 -29
  91. package/src/bmm/workflows/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml +0 -1
  92. package/src/bmm/workflows/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml +0 -1
  93. package/src/bmm/workflows/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml +0 -1
  94. package/src/bmm/workflows/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml +0 -1
  95. package/src/bmm/workflows/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml +0 -1
  96. package/src/bmm/workflows/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml +0 -1
  97. package/src/bmm/workflows/4-implementation/bmad-code-review/bmad-skill-manifest.yaml +0 -1
  98. package/src/bmm/workflows/4-implementation/bmad-code-review/steps/step-02-review.md +0 -41
  99. package/src/bmm/workflows/4-implementation/bmad-code-review/steps/step-04-present.md +0 -38
  100. package/src/bmm/workflows/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml +0 -1
  101. package/src/bmm/workflows/4-implementation/bmad-create-story/bmad-skill-manifest.yaml +0 -1
  102. package/src/bmm/workflows/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml +0 -1
  103. package/src/bmm/workflows/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml +0 -1
  104. package/src/bmm/workflows/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml +0 -1
  105. package/src/bmm/workflows/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml +0 -1
  106. package/src/bmm/workflows/bmad-document-project/bmad-skill-manifest.yaml +0 -1
  107. package/src/bmm/workflows/bmad-generate-project-context/bmad-skill-manifest.yaml +0 -1
  108. package/src/bmm/workflows/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml +0 -1
  109. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/SKILL.md +0 -6
  110. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/bmad-skill-manifest.yaml +0 -1
  111. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-01-mode-detection.md +0 -169
  112. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-02-context-gathering.md +0 -114
  113. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-03-execute.md +0 -107
  114. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-04-self-check.md +0 -107
  115. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-05-adversarial-review.md +0 -94
  116. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/steps/step-06-resolve-findings.md +0 -144
  117. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev/workflow.md +0 -38
  118. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview/bmad-skill-manifest.yaml +0 -1
  119. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/SKILL.md +0 -6
  120. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/bmad-skill-manifest.yaml +0 -1
  121. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-01-understand.md +0 -185
  122. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-02-investigate.md +0 -140
  123. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-03-generate.md +0 -123
  124. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/steps/step-04-review.md +0 -195
  125. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/tech-spec-template.md +0 -74
  126. package/src/bmm/workflows/bmad-quick-flow/bmad-quick-spec/workflow.md +0 -73
  127. package/src/core/module-help.csv +0 -11
  128. package/src/core/skills/bmad-advanced-elicitation/SKILL.md +0 -6
  129. package/src/core/skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml +0 -1
  130. package/src/core/skills/bmad-brainstorming/bmad-skill-manifest.yaml +0 -1
  131. package/src/core/skills/bmad-distillator/bmad-skill-manifest.yaml +0 -15
  132. package/src/core/skills/bmad-editorial-review-prose/SKILL.md +0 -6
  133. package/src/core/skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml +0 -1
  134. package/src/core/skills/bmad-editorial-review-structure/SKILL.md +0 -6
  135. package/src/core/skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml +0 -1
  136. package/src/core/skills/bmad-help/SKILL.md +0 -6
  137. package/src/core/skills/bmad-help/bmad-skill-manifest.yaml +0 -1
  138. package/src/core/skills/bmad-help/workflow.md +0 -88
  139. package/src/core/skills/bmad-index-docs/SKILL.md +0 -6
  140. package/src/core/skills/bmad-index-docs/bmad-skill-manifest.yaml +0 -1
  141. package/src/core/skills/bmad-init/bmad-skill-manifest.yaml +0 -1
  142. package/src/core/skills/bmad-party-mode/bmad-skill-manifest.yaml +0 -1
  143. package/src/core/skills/bmad-review-adversarial-general/SKILL.md +0 -6
  144. package/src/core/skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml +0 -1
  145. package/src/core/skills/bmad-review-edge-case-hunter/SKILL.md +0 -6
  146. package/src/core/skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml +0 -1
  147. package/src/core/skills/bmad-shard-doc/SKILL.md +0 -6
  148. package/src/core/skills/bmad-shard-doc/bmad-skill-manifest.yaml +0 -1
  149. package/src/core/tasks/bmad-create-prd/bmad-skill-manifest.yaml +0 -1
  150. package/src/utility/agent-components/activation-rules.txt +0 -6
  151. package/src/utility/agent-components/activation-steps.txt +0 -14
  152. package/src/utility/agent-components/agent-command-header.md +0 -1
  153. package/src/utility/agent-components/agent.customize.template.yaml +0 -41
  154. package/src/utility/agent-components/handler-action.txt +0 -4
  155. package/src/utility/agent-components/handler-data.txt +0 -5
  156. package/src/utility/agent-components/handler-exec.txt +0 -6
  157. package/src/utility/agent-components/handler-multi.txt +0 -13
  158. package/src/utility/agent-components/handler-tmpl.txt +0 -5
  159. package/src/utility/agent-components/menu-handlers.txt +0 -6
  160. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +0 -368
  161. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +0 -179
  162. package/tools/cli/lib/activation-builder.js +0 -165
  163. package/tools/cli/lib/agent/compiler.js +0 -516
  164. package/tools/cli/lib/agent/installer.js +0 -680
  165. package/tools/cli/lib/agent/template-engine.js +0 -152
  166. package/tools/cli/lib/agent-analyzer.js +0 -97
  167. package/tools/cli/lib/agent-party-generator.js +0 -194
  168. package/tools/cli/lib/xml-handler.js +0 -177
  169. package/tools/cli/lib/xml-to-markdown.js +0 -82
  170. package/tools/cli/lib/yaml-xml-builder.js +0 -570
  171. package/tools/schema/agent.js +0 -489
  172. /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-analyst/SKILL.md +0 -0
  173. /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/SKILL.md +0 -0
  174. /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/explain-concept.md +0 -0
  175. /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/mermaid-gen.md +0 -0
  176. /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/validate-doc.md +0 -0
  177. /package/src/{bmm/agents → bmm-skills/1-analysis}/bmad-agent-tech-writer/write-document.md +0 -0
  178. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/SKILL.md +0 -0
  179. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/checklist.md +0 -0
  180. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/documentation-requirements.csv +0 -0
  181. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/instructions.md +0 -0
  182. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/deep-dive-template.md +0 -0
  183. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/index-template.md +0 -0
  184. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/project-overview-template.md +0 -0
  185. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/project-scan-report-schema.json +0 -0
  186. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/templates/source-tree-template.md +0 -0
  187. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflow.md +0 -0
  188. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/deep-dive-instructions.md +0 -0
  189. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/deep-dive-workflow.md +0 -0
  190. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/full-scan-instructions.md +0 -0
  191. /package/src/{bmm/workflows → bmm-skills/1-analysis}/bmad-document-project/workflows/full-scan-workflow.md +0 -0
  192. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/artifact-analyzer.md +0 -0
  193. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/opportunity-reviewer.md +0 -0
  194. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/skeptic-reviewer.md +0 -0
  195. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/agents/web-researcher.md +0 -0
  196. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/bmad-manifest.json +0 -0
  197. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/contextual-discovery.md +0 -0
  198. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/draft-and-review.md +0 -0
  199. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/finalize.md +0 -0
  200. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/prompts/guided-elicitation.md +0 -0
  201. /package/src/{bmm/workflows/1-analysis/bmad-product-brief-preview → bmm-skills/1-analysis/bmad-product-brief}/resources/brief-template.md +0 -0
  202. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +0 -0
  203. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +0 -0
  204. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +0 -0
  205. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +0 -0
  206. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +0 -0
  207. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +0 -0
  208. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/research.template.md +0 -0
  209. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-domain-research/workflow.md +0 -0
  210. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/research.template.md +0 -0
  211. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-01-init.md +0 -0
  212. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +0 -0
  213. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +0 -0
  214. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +0 -0
  215. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +0 -0
  216. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +0 -0
  217. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-market-research/workflow.md +0 -0
  218. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/research.template.md +0 -0
  219. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +0 -0
  220. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +0 -0
  221. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +0 -0
  222. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +0 -0
  223. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +0 -0
  224. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +0 -0
  225. /package/src/{bmm/workflows → bmm-skills}/1-analysis/research/bmad-technical-research/workflow.md +0 -0
  226. /package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-pm/SKILL.md +0 -0
  227. /package/src/{bmm/agents → bmm-skills/2-plan-workflows}/bmad-agent-ux-designer/SKILL.md +0 -0
  228. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/SKILL.md +0 -0
  229. /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/domain-complexity.csv +0 -0
  230. /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/prd-purpose.md +0 -0
  231. /package/src/{bmm/workflows/2-plan-workflows/bmad-validate-prd → bmm-skills/2-plan-workflows/bmad-create-prd}/data/project-types.csv +0 -0
  232. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-01-init.md +0 -0
  233. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-01b-continue.md +0 -0
  234. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02-discovery.md +0 -0
  235. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02b-vision.md +0 -0
  236. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-02c-executive-summary.md +0 -0
  237. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-03-success.md +0 -0
  238. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-04-journeys.md +0 -0
  239. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-05-domain.md +0 -0
  240. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-06-innovation.md +0 -0
  241. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-07-project-type.md +0 -0
  242. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-08-scoping.md +0 -0
  243. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-09-functional.md +0 -0
  244. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-10-nonfunctional.md +0 -0
  245. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-11-polish.md +0 -0
  246. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/steps-c/step-12-complete.md +0 -0
  247. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/templates/prd-template.md +0 -0
  248. /package/src/{core/tasks → bmm-skills/2-plan-workflows}/bmad-create-prd/workflow.md +0 -0
  249. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/SKILL.md +0 -0
  250. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-01-init.md +0 -0
  251. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-01b-continue.md +0 -0
  252. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-02-discovery.md +0 -0
  253. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-03-core-experience.md +0 -0
  254. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-04-emotional-response.md +0 -0
  255. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-05-inspiration.md +0 -0
  256. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-06-design-system.md +0 -0
  257. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-07-defining-experience.md +0 -0
  258. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-08-visual-foundation.md +0 -0
  259. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-09-design-directions.md +0 -0
  260. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-10-user-journeys.md +0 -0
  261. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-11-component-strategy.md +0 -0
  262. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-12-ux-patterns.md +0 -0
  263. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-13-responsive-accessibility.md +0 -0
  264. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/steps/step-14-complete.md +0 -0
  265. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/ux-design-template.md +0 -0
  266. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-create-ux-design/workflow.md +0 -0
  267. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/SKILL.md +0 -0
  268. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-edit-prd/workflow.md +0 -0
  269. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/SKILL.md +0 -0
  270. /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/domain-complexity.csv +0 -0
  271. /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/prd-purpose.md +0 -0
  272. /package/src/{bmm/workflows/2-plan-workflows/create-prd → bmm-skills/2-plan-workflows/bmad-validate-prd}/data/project-types.csv +0 -0
  273. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-01-discovery.md +0 -0
  274. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02-format-detection.md +0 -0
  275. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-02b-parity-check.md +0 -0
  276. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-03-density-validation.md +0 -0
  277. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
  278. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -0
  279. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -0
  280. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
  281. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
  282. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -0
  283. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-10-smart-validation.md +0 -0
  284. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
  285. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -0
  286. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/steps-v/step-v-13-report-complete.md +0 -0
  287. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/bmad-validate-prd/workflow.md +0 -0
  288. /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/domain-complexity.csv +0 -0
  289. /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/prd-purpose.md +0 -0
  290. /package/src/{core/tasks/bmad-create-prd → bmm-skills/2-plan-workflows/create-prd}/data/project-types.csv +0 -0
  291. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +0 -0
  292. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +0 -0
  293. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +0 -0
  294. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +0 -0
  295. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -0
  296. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +0 -0
  297. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +0 -0
  298. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -0
  299. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -0
  300. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +0 -0
  301. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +0 -0
  302. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -0
  303. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +0 -0
  304. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +0 -0
  305. /package/src/{bmm/workflows → bmm-skills}/2-plan-workflows/create-prd/workflow-validate-prd.md +0 -0
  306. /package/src/{bmm/agents → bmm-skills/3-solutioning}/bmad-agent-architect/SKILL.md +0 -0
  307. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/SKILL.md +0 -0
  308. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +0 -0
  309. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +0 -0
  310. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +0 -0
  311. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -0
  312. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -0
  313. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +0 -0
  314. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +0 -0
  315. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-check-implementation-readiness/workflow.md +0 -0
  316. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/SKILL.md +0 -0
  317. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/architecture-decision-template.md +0 -0
  318. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/data/domain-complexity.csv +0 -0
  319. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/data/project-types.csv +0 -0
  320. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-01-init.md +0 -0
  321. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-01b-continue.md +0 -0
  322. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-02-context.md +0 -0
  323. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-03-starter.md +0 -0
  324. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-04-decisions.md +0 -0
  325. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-05-patterns.md +0 -0
  326. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-06-structure.md +0 -0
  327. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-07-validation.md +0 -0
  328. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/steps/step-08-complete.md +0 -0
  329. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-architecture/workflow.md +0 -0
  330. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/SKILL.md +0 -0
  331. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
  332. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +0 -0
  333. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
  334. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +0 -0
  335. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md +0 -0
  336. /package/src/{bmm/workflows → bmm-skills}/3-solutioning/bmad-create-epics-and-stories/workflow.md +0 -0
  337. /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/SKILL.md +0 -0
  338. /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/project-context-template.md +0 -0
  339. /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-01-discover.md +0 -0
  340. /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-02-generate.md +0 -0
  341. /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/steps/step-03-complete.md +0 -0
  342. /package/src/{bmm/workflows → bmm-skills/3-solutioning}/bmad-generate-project-context/workflow.md +0 -0
  343. /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-dev/SKILL.md +0 -0
  344. /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-qa/SKILL.md +0 -0
  345. /package/src/{bmm/agents → bmm-skills/4-implementation}/bmad-agent-sm/SKILL.md +0 -0
  346. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-code-review/SKILL.md +0 -0
  347. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/SKILL.md +0 -0
  348. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-correct-course/checklist.md +0 -0
  349. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/SKILL.md +0 -0
  350. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/checklist.md +0 -0
  351. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/discover-inputs.md +0 -0
  352. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/template.md +0 -0
  353. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-create-story/workflow.md +0 -0
  354. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/SKILL.md +0 -0
  355. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/checklist.md +0 -0
  356. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-dev-story/workflow.md +0 -0
  357. /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/SKILL.md +0 -0
  358. /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/checklist.md +0 -0
  359. /package/src/{bmm/workflows → bmm-skills/4-implementation}/bmad-qa-generate-e2e-tests/workflow.md +0 -0
  360. /package/src/{bmm/workflows/bmad-quick-flow/bmad-quick-dev-new-preview → bmm-skills/4-implementation/bmad-quick-dev}/step-04-review.md +0 -0
  361. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-retrospective/SKILL.md +0 -0
  362. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-retrospective/workflow.md +0 -0
  363. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/SKILL.md +0 -0
  364. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/checklist.md +0 -0
  365. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +0 -0
  366. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-planning/workflow.md +0 -0
  367. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-status/SKILL.md +0 -0
  368. /package/src/{bmm/workflows → bmm-skills}/4-implementation/bmad-sprint-status/workflow.md +0 -0
  369. /package/src/{bmm → bmm-skills}/module.yaml +0 -0
  370. /package/src/{core/skills → core-skills}/bmad-advanced-elicitation/methods.csv +0 -0
  371. /package/src/{core/skills → core-skills}/bmad-brainstorming/SKILL.md +0 -0
  372. /package/src/{core/skills → core-skills}/bmad-brainstorming/brain-methods.csv +0 -0
  373. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-01-session-setup.md +0 -0
  374. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-01b-continue.md +0 -0
  375. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02a-user-selected.md +0 -0
  376. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02b-ai-recommended.md +0 -0
  377. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02c-random-selection.md +0 -0
  378. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-02d-progressive-flow.md +0 -0
  379. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-03-technique-execution.md +0 -0
  380. /package/src/{core/skills → core-skills}/bmad-brainstorming/steps/step-04-idea-organization.md +0 -0
  381. /package/src/{core/skills → core-skills}/bmad-brainstorming/template.md +0 -0
  382. /package/src/{core/skills → core-skills}/bmad-brainstorming/workflow.md +0 -0
  383. /package/src/{core/skills → core-skills}/bmad-distillator/SKILL.md +0 -0
  384. /package/src/{core/skills → core-skills}/bmad-distillator/agents/distillate-compressor.md +0 -0
  385. /package/src/{core/skills → core-skills}/bmad-distillator/agents/round-trip-reconstructor.md +0 -0
  386. /package/src/{core/skills → core-skills}/bmad-distillator/resources/compression-rules.md +0 -0
  387. /package/src/{core/skills → core-skills}/bmad-distillator/resources/distillate-format-reference.md +0 -0
  388. /package/src/{core/skills → core-skills}/bmad-distillator/resources/splitting-strategy.md +0 -0
  389. /package/src/{core/skills → core-skills}/bmad-distillator/scripts/analyze_sources.py +0 -0
  390. /package/src/{core/skills → core-skills}/bmad-distillator/scripts/tests/test_analyze_sources.py +0 -0
  391. /package/src/{core/skills → core-skills}/bmad-init/SKILL.md +0 -0
  392. /package/src/{core/skills → core-skills}/bmad-init/resources/core-module.yaml +0 -0
  393. /package/src/{core/skills → core-skills}/bmad-init/scripts/bmad_init.py +0 -0
  394. /package/src/{core/skills → core-skills}/bmad-init/scripts/tests/test_bmad_init.py +0 -0
  395. /package/src/{core/skills → core-skills}/bmad-party-mode/SKILL.md +0 -0
  396. /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-01-agent-loading.md +0 -0
  397. /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-02-discussion-orchestration.md +0 -0
  398. /package/src/{core/skills → core-skills}/bmad-party-mode/steps/step-03-graceful-exit.md +0 -0
  399. /package/src/{core/skills → core-skills}/bmad-party-mode/workflow.md +0 -0
  400. /package/src/{core → core-skills}/module.yaml +0 -0
@@ -16,15 +16,12 @@ const {
16
16
  const packageJson = require('../../../../../package.json');
17
17
 
18
18
  /**
19
- * Generates manifest files for installed workflows, agents, and tasks
19
+ * Generates manifest files for installed skills and agents
20
20
  */
21
21
  class ManifestGenerator {
22
22
  constructor() {
23
- this.workflows = [];
24
23
  this.skills = [];
25
24
  this.agents = [];
26
- this.tasks = [];
27
- this.tools = [];
28
25
  this.modules = [];
29
26
  this.files = [];
30
27
  this.selectedIdes = [];
@@ -85,10 +82,6 @@ class ManifestGenerator {
85
82
  this.modules = allModules;
86
83
  this.updatedModules = allModules; // Include ALL modules (including custom) for scanning
87
84
 
88
- // For CSV manifests, we need to include ALL modules that are installed
89
- // preservedModules controls which modules stay as-is in the CSV (don't get rescanned)
90
- // But all modules should be included in the final manifest
91
- this.preservedModules = allModules; // Include ALL modules (including custom)
92
85
  this.bmadDir = bmadDir;
93
86
  this.bmadFolderName = path.basename(bmadDir); // Get the actual folder name (e.g., '_bmad' or 'bmad')
94
87
  this.allInstalledFiles = installedFiles;
@@ -111,44 +104,30 @@ class ManifestGenerator {
111
104
  // Collect skills first (populates skillClaimedDirs before legacy collectors run)
112
105
  await this.collectSkills();
113
106
 
114
- // Collect workflow data
115
- await this.collectWorkflows(selectedModules);
116
-
117
107
  // Collect agent data - use updatedModules which includes all installed modules
118
108
  await this.collectAgents(this.updatedModules);
119
109
 
120
- // Collect task data
121
- await this.collectTasks(this.updatedModules);
122
-
123
- // Collect tool data
124
- await this.collectTools(this.updatedModules);
125
-
126
110
  // Write manifest files and collect their paths
127
111
  const manifestFiles = [
128
112
  await this.writeMainManifest(cfgDir),
129
- await this.writeWorkflowManifest(cfgDir),
130
113
  await this.writeSkillManifest(cfgDir),
131
114
  await this.writeAgentManifest(cfgDir),
132
- await this.writeTaskManifest(cfgDir),
133
- await this.writeToolManifest(cfgDir),
134
115
  await this.writeFilesManifest(cfgDir),
135
116
  ];
136
117
 
137
118
  return {
138
119
  skills: this.skills.length,
139
- workflows: this.workflows.length,
140
120
  agents: this.agents.length,
141
- tasks: this.tasks.length,
142
- tools: this.tools.length,
143
121
  files: this.files.length,
144
122
  manifestFiles: manifestFiles,
145
123
  };
146
124
  }
147
125
 
148
126
  /**
149
- * Recursively walk a module directory tree, collecting skill directories.
150
- * A skill directory is one that contains both a bmad-skill-manifest.yaml with
151
- * type: skill AND a SKILL.md file with name/description frontmatter.
127
+ * Recursively walk a module directory tree, collecting native SKILL.md entrypoints.
128
+ * A directory is discovered as a skill when it contains a SKILL.md file with
129
+ * valid name/description frontmatter (name must match directory name).
130
+ * Manifest YAML is loaded only when present — for install_to_bmad and agent metadata.
152
131
  * Populates this.skills[] and this.skillClaimedDirs (Set of absolute paths).
153
132
  */
154
133
  async collectSkills() {
@@ -169,76 +148,55 @@ class ManifestGenerator {
169
148
  return;
170
149
  }
171
150
 
172
- // Check this directory for skill manifest
173
- const manifest = await this.loadSkillManifest(dir);
174
-
175
- // Determine if this directory is a skill (type: skill in manifest)
151
+ // SKILL.md with valid frontmatter is the primary discovery gate
176
152
  const skillFile = 'SKILL.md';
177
- const artifactType = this.getArtifactType(manifest, skillFile);
178
-
179
- if (artifactType === 'skill' || artifactType === 'agent') {
180
- const skillMdPath = path.join(dir, 'SKILL.md');
181
- const dirName = path.basename(dir);
182
-
183
- // Validate and parse SKILL.md
184
- const skillMeta = await this.parseSkillMd(skillMdPath, dir, dirName, debug);
185
-
186
- if (skillMeta) {
187
- // Build path relative from module root (points to SKILL.md — the permanent entrypoint)
188
- const relativePath = path.relative(modulePath, dir).split(path.sep).join('/');
189
- const installPath = relativePath
190
- ? `${this.bmadFolderName}/${moduleName}/${relativePath}/${skillFile}`
191
- : `${this.bmadFolderName}/${moduleName}/${skillFile}`;
192
-
193
- // Skills derive canonicalId from directory name — never from manifest
194
- // (agent-type skills legitimately use canonicalId for agent-manifest mapping, so skip warning)
195
- if (manifest && manifest.__single && manifest.__single.canonicalId && artifactType !== 'agent') {
196
- console.warn(
197
- `Warning: Skill manifest at ${dir}/bmad-skill-manifest.yaml contains canonicalId — this field is ignored for skills (directory name is the canonical ID)`,
198
- );
199
- }
200
- const canonicalId = dirName;
201
-
202
- this.skills.push({
203
- name: skillMeta.name,
204
- description: this.cleanForCSV(skillMeta.description),
205
- module: moduleName,
206
- path: installPath,
207
- canonicalId,
208
- install_to_bmad: this.getInstallToBmad(manifest, skillFile),
209
- });
210
-
211
- // Add to files list
212
- this.files.push({
213
- type: 'skill',
214
- name: skillMeta.name,
215
- module: moduleName,
216
- path: installPath,
217
- });
218
-
219
- this.skillClaimedDirs.add(dir);
220
-
221
- if (debug) {
222
- console.log(`[DEBUG] collectSkills: claimed skill "${skillMeta.name}" as ${canonicalId} at ${dir}`);
223
- }
153
+ const skillMdPath = path.join(dir, skillFile);
154
+ const dirName = path.basename(dir);
155
+
156
+ const skillMeta = await this.parseSkillMd(skillMdPath, dir, dirName, debug);
157
+
158
+ if (skillMeta) {
159
+ // Load manifest when present (for install_to_bmad and agent metadata)
160
+ const manifest = await this.loadSkillManifest(dir);
161
+ const artifactType = this.getArtifactType(manifest, skillFile);
162
+
163
+ // Build path relative from module root (points to SKILL.md — the permanent entrypoint)
164
+ const relativePath = path.relative(modulePath, dir).split(path.sep).join('/');
165
+ const installPath = relativePath
166
+ ? `${this.bmadFolderName}/${moduleName}/${relativePath}/${skillFile}`
167
+ : `${this.bmadFolderName}/${moduleName}/${skillFile}`;
168
+
169
+ // Native SKILL.md entrypoints derive canonicalId from directory name.
170
+ // Agent entrypoints may keep canonicalId metadata for compatibility, so
171
+ // only warn for non-agent SKILL.md directories.
172
+ if (manifest && manifest.__single && manifest.__single.canonicalId && artifactType !== 'agent') {
173
+ console.warn(
174
+ `Warning: Native entrypoint manifest at ${dir}/bmad-skill-manifest.yaml contains canonicalId — this field is ignored for SKILL.md directories (directory name is the canonical ID)`,
175
+ );
224
176
  }
225
- }
177
+ const canonicalId = dirName;
226
178
 
227
- // Warn if manifest says type:skill but directory was not claimed
228
- if (manifest && !this.skillClaimedDirs.has(dir)) {
229
- let hasSkillType = false;
230
- if (manifest.__single) {
231
- hasSkillType = manifest.__single.type === 'skill' || manifest.__single.type === 'agent';
232
- } else {
233
- for (const key of Object.keys(manifest)) {
234
- if (manifest[key]?.type === 'skill' || manifest[key]?.type === 'agent') {
235
- hasSkillType = true;
236
- break;
237
- }
238
- }
239
- }
240
- if (hasSkillType && debug) {
241
- console.log(`[DEBUG] collectSkills: dir has type:skill manifest but failed validation: ${dir}`);
179
+ this.skills.push({
180
+ name: skillMeta.name,
181
+ description: this.cleanForCSV(skillMeta.description),
182
+ module: moduleName,
183
+ path: installPath,
184
+ canonicalId,
185
+ install_to_bmad: this.getInstallToBmad(manifest, skillFile),
186
+ });
187
+
188
+ // Add to files list
189
+ this.files.push({
190
+ type: 'skill',
191
+ name: skillMeta.name,
192
+ module: moduleName,
193
+ path: installPath,
194
+ });
195
+
196
+ this.skillClaimedDirs.add(dir);
197
+
198
+ if (debug) {
199
+ console.log(`[DEBUG] collectSkills: claimed skill "${skillMeta.name}" as ${canonicalId} at ${dir}`);
242
200
  }
243
201
  }
244
202
 
@@ -310,509 +268,106 @@ class ManifestGenerator {
310
268
  }
311
269
 
312
270
  /**
313
- * Collect all workflows from core and selected modules
314
- * Scans the INSTALLED bmad directory, not the source
315
- */
316
- async collectWorkflows(selectedModules) {
317
- this.workflows = [];
318
-
319
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
320
- for (const moduleName of this.updatedModules) {
321
- const modulePath = path.join(this.bmadDir, moduleName);
322
-
323
- if (await fs.pathExists(modulePath)) {
324
- const moduleWorkflows = await this.getWorkflowsFromPath(modulePath, moduleName);
325
- this.workflows.push(...moduleWorkflows);
326
-
327
- // Also scan tasks/ for type:skill entries (skills can live anywhere)
328
- const tasksSkills = await this.getWorkflowsFromPath(modulePath, moduleName, 'tasks');
329
- this.workflows.push(...tasksSkills);
330
- }
331
- }
332
- }
333
-
334
- /**
335
- * Recursively find and parse workflow.md files
336
- */
337
- async getWorkflowsFromPath(basePath, moduleName, subDir = 'workflows') {
338
- const workflows = [];
339
- const workflowsPath = path.join(basePath, subDir);
340
- const debug = process.env.BMAD_DEBUG_MANIFEST === 'true';
341
-
342
- if (debug) {
343
- console.log(`[DEBUG] Scanning workflows in: ${workflowsPath}`);
344
- }
345
-
346
- if (!(await fs.pathExists(workflowsPath))) {
347
- if (debug) {
348
- console.log(`[DEBUG] Workflows path does not exist: ${workflowsPath}`);
349
- }
350
- return workflows;
351
- }
352
-
353
- // Recursively find workflow.md files
354
- const findWorkflows = async (dir, relativePath = '') => {
355
- // Skip directories already claimed as skills
356
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dir)) return;
357
-
358
- const entries = await fs.readdir(dir, { withFileTypes: true });
359
- // Load skill manifest for this directory (if present)
360
- const skillManifest = await this.loadSkillManifest(dir);
361
-
362
- for (const entry of entries) {
363
- const fullPath = path.join(dir, entry.name);
364
-
365
- if (entry.isDirectory()) {
366
- // Skip directories claimed by collectSkills
367
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(fullPath)) continue;
368
- // Recurse into subdirectories
369
- const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
370
- await findWorkflows(fullPath, newRelativePath);
371
- } else if (entry.name === 'workflow.md' || (entry.name.startsWith('workflow-') && entry.name.endsWith('.md'))) {
372
- // Parse workflow file (both YAML and MD formats)
373
- if (debug) {
374
- console.log(`[DEBUG] Found workflow file: ${fullPath}`);
375
- }
376
- try {
377
- // Read and normalize line endings (fix Windows CRLF issues)
378
- const rawContent = await fs.readFile(fullPath, 'utf8');
379
- const content = rawContent.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
380
-
381
- // Parse MD workflow with YAML frontmatter
382
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
383
- if (!frontmatterMatch) {
384
- if (debug) {
385
- console.log(`[DEBUG] Skipped (no frontmatter): ${fullPath}`);
386
- }
387
- continue; // Skip MD files without frontmatter
388
- }
389
- const workflow = yaml.parse(frontmatterMatch[1]);
390
-
391
- if (debug) {
392
- console.log(`[DEBUG] Parsed: name="${workflow.name}", description=${workflow.description ? 'OK' : 'MISSING'}`);
393
- }
394
-
395
- // Skip template workflows (those with placeholder values)
396
- if (workflow.name && workflow.name.includes('{') && workflow.name.includes('}')) {
397
- if (debug) {
398
- console.log(`[DEBUG] Skipped (template placeholder): ${workflow.name}`);
399
- }
400
- continue;
401
- }
402
-
403
- // Skip workflows marked as non-standalone (reference/example workflows)
404
- if (workflow.standalone === false) {
405
- if (debug) {
406
- console.log(`[DEBUG] Skipped (standalone=false): ${workflow.name}`);
407
- }
408
- continue;
409
- }
410
-
411
- if (workflow.name && workflow.description) {
412
- // Build relative path for installation
413
- const installPath =
414
- moduleName === 'core'
415
- ? `${this.bmadFolderName}/core/${subDir}/${relativePath}/${entry.name}`
416
- : `${this.bmadFolderName}/${moduleName}/${subDir}/${relativePath}/${entry.name}`;
417
-
418
- // Workflows with standalone: false are filtered out above
419
- workflows.push({
420
- name: workflow.name,
421
- description: this.cleanForCSV(workflow.description),
422
- module: moduleName,
423
- path: installPath,
424
- canonicalId: this.getCanonicalId(skillManifest, entry.name),
425
- });
426
-
427
- // Add to files list
428
- this.files.push({
429
- type: 'workflow',
430
- name: workflow.name,
431
- module: moduleName,
432
- path: installPath,
433
- });
434
-
435
- if (debug) {
436
- console.log(`[DEBUG] ✓ Added workflow: ${workflow.name} (${moduleName})`);
437
- }
438
- } else {
439
- if (debug) {
440
- console.log(`[DEBUG] Skipped (missing name or description): ${fullPath}`);
441
- }
442
- }
443
- } catch (error) {
444
- await prompts.log.warn(`Failed to parse workflow at ${fullPath}: ${error.message}`);
445
- }
446
- }
447
- }
448
- };
449
-
450
- await findWorkflows(workflowsPath);
451
-
452
- if (debug) {
453
- console.log(`[DEBUG] Total workflows found in ${moduleName}: ${workflows.length}`);
454
- }
455
-
456
- return workflows;
457
- }
458
-
459
- /**
460
- * Collect all agents from core and selected modules
461
- * Scans the INSTALLED bmad directory, not the source
271
+ * Collect all agents from selected modules by walking their directory trees.
462
272
  */
463
273
  async collectAgents(selectedModules) {
464
274
  this.agents = [];
275
+ const debug = process.env.BMAD_DEBUG_MANIFEST === 'true';
465
276
 
466
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
277
+ // Walk each module's full directory tree looking for type:agent manifests
467
278
  for (const moduleName of this.updatedModules) {
468
- const agentsPath = path.join(this.bmadDir, moduleName, 'agents');
279
+ const modulePath = path.join(this.bmadDir, moduleName);
280
+ if (!(await fs.pathExists(modulePath))) continue;
469
281
 
470
- if (await fs.pathExists(agentsPath)) {
471
- const moduleAgents = await this.getAgentsFromDir(agentsPath, moduleName);
472
- this.agents.push(...moduleAgents);
473
- }
282
+ const moduleAgents = await this.getAgentsFromDirRecursive(modulePath, moduleName, '', debug);
283
+ this.agents.push(...moduleAgents);
474
284
  }
475
285
 
476
286
  // Get standalone agents from bmad/agents/ directory
477
287
  const standaloneAgentsDir = path.join(this.bmadDir, 'agents');
478
288
  if (await fs.pathExists(standaloneAgentsDir)) {
479
- const agentDirs = await fs.readdir(standaloneAgentsDir, { withFileTypes: true });
480
-
481
- for (const agentDir of agentDirs) {
482
- if (!agentDir.isDirectory()) continue;
289
+ const standaloneAgents = await this.getAgentsFromDirRecursive(standaloneAgentsDir, 'standalone', '', debug);
290
+ this.agents.push(...standaloneAgents);
291
+ }
483
292
 
484
- const agentDirPath = path.join(standaloneAgentsDir, agentDir.name);
485
- const standaloneAgents = await this.getAgentsFromDir(agentDirPath, 'standalone');
486
- this.agents.push(...standaloneAgents);
487
- }
293
+ if (debug) {
294
+ console.log(`[DEBUG] collectAgents: total agents found: ${this.agents.length}`);
488
295
  }
489
296
  }
490
297
 
491
298
  /**
492
- * Get agents from a directory recursively
493
- * Only includes compiled .md files (not .agent.yaml source files)
299
+ * Recursively walk a directory tree collecting agents.
300
+ * Discovers agents via directory with bmad-skill-manifest.yaml containing type: agent
301
+ *
302
+ * @param {string} dirPath - Current directory being scanned
303
+ * @param {string} moduleName - Module this directory belongs to
304
+ * @param {string} relativePath - Path relative to the module root (for install path construction)
305
+ * @param {boolean} debug - Emit debug messages
494
306
  */
495
- async getAgentsFromDir(dirPath, moduleName, relativePath = '') {
496
- // Skip directories claimed by collectSkills
497
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dirPath)) return [];
307
+ async getAgentsFromDirRecursive(dirPath, moduleName, relativePath = '', debug = false) {
498
308
  const agents = [];
499
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
500
- // Load skill manifest for this directory (if present)
501
- const skillManifest = await this.loadSkillManifest(dirPath);
309
+ let entries;
310
+ try {
311
+ entries = await fs.readdir(dirPath, { withFileTypes: true });
312
+ } catch {
313
+ return agents;
314
+ }
502
315
 
503
316
  for (const entry of entries) {
504
- const fullPath = path.join(dirPath, entry.name);
505
-
506
- if (entry.isDirectory()) {
507
- // Check for new-format agent: bmad-skill-manifest.yaml with type: agent
508
- // Note: type:agent dirs may also be claimed by collectSkills for IDE installation,
509
- // but we still need to process them here for agent-manifest.csv
510
- const dirManifest = await this.loadSkillManifest(fullPath);
511
- if (dirManifest && dirManifest.__single && dirManifest.__single.type === 'agent') {
512
- const m = dirManifest.__single;
513
- const dirRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
514
- const installPath =
515
- moduleName === 'core'
516
- ? `${this.bmadFolderName}/core/agents/${dirRelativePath}`
517
- : `${this.bmadFolderName}/${moduleName}/agents/${dirRelativePath}`;
518
-
519
- agents.push({
520
- name: m.name || entry.name,
521
- displayName: m.displayName || m.name || entry.name,
522
- title: m.title || '',
523
- icon: m.icon || '',
524
- capabilities: m.capabilities ? this.cleanForCSV(m.capabilities) : '',
525
- role: m.role ? this.cleanForCSV(m.role) : '',
526
- identity: m.identity ? this.cleanForCSV(m.identity) : '',
527
- communicationStyle: m.communicationStyle ? this.cleanForCSV(m.communicationStyle) : '',
528
- principles: m.principles ? this.cleanForCSV(m.principles) : '',
529
- module: m.module || moduleName,
530
- path: installPath,
531
- canonicalId: m.canonicalId || '',
532
- });
533
-
534
- this.files.push({
535
- type: 'agent',
536
- name: m.name || entry.name,
537
- module: moduleName,
538
- path: installPath,
539
- });
540
- continue;
541
- }
542
-
543
- // Skip directories claimed by collectSkills (non-agent type skills)
544
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(fullPath)) continue;
545
-
546
- // Recurse into subdirectories
547
- const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
548
- const subDirAgents = await this.getAgentsFromDir(fullPath, moduleName, newRelativePath);
549
- agents.push(...subDirAgents);
550
- } else if (entry.name.endsWith('.md') && !entry.name.endsWith('.agent.yaml') && entry.name.toLowerCase() !== 'readme.md') {
551
- const content = await fs.readFile(fullPath, 'utf8');
552
-
553
- // Skip files that don't contain <agent> tag (e.g., README files)
554
- if (!content.includes('<agent')) {
555
- continue;
556
- }
557
-
558
- // Skip web-only agents
559
- if (content.includes('localskip="true"')) {
560
- continue;
561
- }
562
-
563
- // Extract agent metadata from the XML structure
564
- const nameMatch = content.match(/name="([^"]+)"/);
565
- const titleMatch = content.match(/title="([^"]+)"/);
566
- const iconMatch = content.match(/icon="([^"]+)"/);
567
- const capabilitiesMatch = content.match(/capabilities="([^"]+)"/);
568
-
569
- // Extract persona fields
570
- const roleMatch = content.match(/<role>([^<]+)<\/role>/);
571
- const identityMatch = content.match(/<identity>([\s\S]*?)<\/identity>/);
572
- const styleMatch = content.match(/<communication_style>([\s\S]*?)<\/communication_style>/);
573
- const principlesMatch = content.match(/<principles>([\s\S]*?)<\/principles>/);
317
+ if (!entry.isDirectory()) continue;
318
+ if (entry.name.startsWith('.') || entry.name.startsWith('_')) continue;
574
319
 
575
- // Build relative path for installation
576
- const fileRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
577
- const installPath =
578
- moduleName === 'core'
579
- ? `${this.bmadFolderName}/core/agents/${fileRelativePath}`
580
- : `${this.bmadFolderName}/${moduleName}/agents/${fileRelativePath}`;
320
+ const fullPath = path.join(dirPath, entry.name);
581
321
 
582
- const agentName = entry.name.replace('.md', '');
322
+ // Check for type:agent manifest BEFORE checking skillClaimedDirs —
323
+ // agent dirs may be claimed by collectSkills for IDE installation,
324
+ // but we still need them in agent-manifest.csv.
325
+ const dirManifest = await this.loadSkillManifest(fullPath);
326
+ if (dirManifest && dirManifest.__single && dirManifest.__single.type === 'agent') {
327
+ const m = dirManifest.__single;
328
+ const dirRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
329
+ const agentModule = m.module || moduleName;
330
+ const installPath = `${this.bmadFolderName}/${agentModule}/${dirRelativePath}`;
583
331
 
584
332
  agents.push({
585
- name: agentName,
586
- displayName: nameMatch ? nameMatch[1] : agentName,
587
- title: titleMatch ? titleMatch[1] : '',
588
- icon: iconMatch ? iconMatch[1] : '',
589
- capabilities: capabilitiesMatch ? this.cleanForCSV(capabilitiesMatch[1]) : '',
590
- role: roleMatch ? this.cleanForCSV(roleMatch[1]) : '',
591
- identity: identityMatch ? this.cleanForCSV(identityMatch[1]) : '',
592
- communicationStyle: styleMatch ? this.cleanForCSV(styleMatch[1]) : '',
593
- principles: principlesMatch ? this.cleanForCSV(principlesMatch[1]) : '',
594
- module: moduleName,
333
+ name: m.name || entry.name,
334
+ displayName: m.displayName || m.name || entry.name,
335
+ title: m.title || '',
336
+ icon: m.icon || '',
337
+ capabilities: m.capabilities ? this.cleanForCSV(m.capabilities) : '',
338
+ role: m.role ? this.cleanForCSV(m.role) : '',
339
+ identity: m.identity ? this.cleanForCSV(m.identity) : '',
340
+ communicationStyle: m.communicationStyle ? this.cleanForCSV(m.communicationStyle) : '',
341
+ principles: m.principles ? this.cleanForCSV(m.principles) : '',
342
+ module: agentModule,
595
343
  path: installPath,
596
- canonicalId: this.getCanonicalId(skillManifest, entry.name),
344
+ canonicalId: m.canonicalId || '',
597
345
  });
598
346
 
599
- // Add to files list
600
347
  this.files.push({
601
348
  type: 'agent',
602
- name: agentName,
603
- module: moduleName,
349
+ name: m.name || entry.name,
350
+ module: agentModule,
604
351
  path: installPath,
605
352
  });
606
- }
607
- }
608
-
609
- return agents;
610
- }
611
-
612
- /**
613
- * Collect all tasks from core and selected modules
614
- * Scans the INSTALLED bmad directory, not the source
615
- */
616
- async collectTasks(selectedModules) {
617
- this.tasks = [];
618
353
 
619
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
620
- for (const moduleName of this.updatedModules) {
621
- const tasksPath = path.join(this.bmadDir, moduleName, 'tasks');
622
-
623
- if (await fs.pathExists(tasksPath)) {
624
- const moduleTasks = await this.getTasksFromDir(tasksPath, moduleName);
625
- this.tasks.push(...moduleTasks);
626
- }
627
- }
628
- }
629
-
630
- /**
631
- * Get tasks from a directory
632
- */
633
- async getTasksFromDir(dirPath, moduleName) {
634
- // Skip directories claimed by collectSkills
635
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dirPath)) return [];
636
- const tasks = [];
637
- const files = await fs.readdir(dirPath);
638
- // Load skill manifest for this directory (if present)
639
- const skillManifest = await this.loadSkillManifest(dirPath);
640
-
641
- for (const file of files) {
642
- // Check for both .xml and .md files
643
- if (file.endsWith('.xml') || file.endsWith('.md')) {
644
- const filePath = path.join(dirPath, file);
645
- const content = await fs.readFile(filePath, 'utf8');
646
-
647
- // Skip internal/engine files (not user-facing tasks)
648
- if (content.includes('internal="true"')) {
649
- continue;
354
+ if (debug) {
355
+ console.log(`[DEBUG] collectAgents: found type:agent "${m.name || entry.name}" at ${fullPath}`);
650
356
  }
651
-
652
- let name = file.replace(/\.(xml|md)$/, '');
653
- let displayName = name;
654
- let description = '';
655
- let standalone = false;
656
-
657
- if (file.endsWith('.md')) {
658
- // Parse YAML frontmatter for .md tasks
659
- const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
660
- if (frontmatterMatch) {
661
- try {
662
- const frontmatter = yaml.parse(frontmatterMatch[1]);
663
- name = frontmatter.name || name;
664
- displayName = frontmatter.displayName || frontmatter.name || name;
665
- description = this.cleanForCSV(frontmatter.description || '');
666
- // Tasks are standalone by default unless explicitly false (internal=true is already filtered above)
667
- standalone = frontmatter.standalone !== false && frontmatter.standalone !== 'false';
668
- } catch {
669
- // If YAML parsing fails, use defaults
670
- standalone = true; // Default to standalone
671
- }
672
- } else {
673
- standalone = true; // No frontmatter means standalone
674
- }
675
- } else {
676
- // For .xml tasks, extract from tag attributes
677
- const nameMatch = content.match(/name="([^"]+)"/);
678
- displayName = nameMatch ? nameMatch[1] : name;
679
-
680
- const descMatch = content.match(/description="([^"]+)"/);
681
- const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
682
- description = this.cleanForCSV(descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '');
683
-
684
- const standaloneFalseMatch = content.match(/<task[^>]+standalone="false"/);
685
- standalone = !standaloneFalseMatch;
686
- }
687
-
688
- // Build relative path for installation
689
- const installPath =
690
- moduleName === 'core' ? `${this.bmadFolderName}/core/tasks/${file}` : `${this.bmadFolderName}/${moduleName}/tasks/${file}`;
691
-
692
- tasks.push({
693
- name: name,
694
- displayName: displayName,
695
- description: description,
696
- module: moduleName,
697
- path: installPath,
698
- standalone: standalone,
699
- canonicalId: this.getCanonicalId(skillManifest, file),
700
- });
701
-
702
- // Add to files list
703
- this.files.push({
704
- type: 'task',
705
- name: name,
706
- module: moduleName,
707
- path: installPath,
708
- });
357
+ continue;
709
358
  }
710
- }
711
-
712
- return tasks;
713
- }
714
-
715
- /**
716
- * Collect all tools from core and selected modules
717
- * Scans the INSTALLED bmad directory, not the source
718
- */
719
- async collectTools(selectedModules) {
720
- this.tools = [];
721
359
 
722
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
723
- for (const moduleName of this.updatedModules) {
724
- const toolsPath = path.join(this.bmadDir, moduleName, 'tools');
360
+ // Skip directories claimed by collectSkills (non-agent type skills)
361
+ // avoids recursing into skill trees that can't contain agents.
362
+ if (this.skillClaimedDirs && this.skillClaimedDirs.has(fullPath)) continue;
725
363
 
726
- if (await fs.pathExists(toolsPath)) {
727
- const moduleTools = await this.getToolsFromDir(toolsPath, moduleName);
728
- this.tools.push(...moduleTools);
729
- }
364
+ // Recurse into subdirectories
365
+ const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
366
+ const subDirAgents = await this.getAgentsFromDirRecursive(fullPath, moduleName, newRelativePath, debug);
367
+ agents.push(...subDirAgents);
730
368
  }
731
- }
732
369
 
733
- /**
734
- * Get tools from a directory
735
- */
736
- async getToolsFromDir(dirPath, moduleName) {
737
- // Skip directories claimed by collectSkills
738
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dirPath)) return [];
739
- const tools = [];
740
- const files = await fs.readdir(dirPath);
741
- // Load skill manifest for this directory (if present)
742
- const skillManifest = await this.loadSkillManifest(dirPath);
743
-
744
- for (const file of files) {
745
- // Check for both .xml and .md files
746
- if (file.endsWith('.xml') || file.endsWith('.md')) {
747
- const filePath = path.join(dirPath, file);
748
- const content = await fs.readFile(filePath, 'utf8');
749
-
750
- // Skip internal tools (same as tasks)
751
- if (content.includes('internal="true"')) {
752
- continue;
753
- }
754
-
755
- let name = file.replace(/\.(xml|md)$/, '');
756
- let displayName = name;
757
- let description = '';
758
- let standalone = false;
759
-
760
- if (file.endsWith('.md')) {
761
- // Parse YAML frontmatter for .md tools
762
- const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
763
- if (frontmatterMatch) {
764
- try {
765
- const frontmatter = yaml.parse(frontmatterMatch[1]);
766
- name = frontmatter.name || name;
767
- displayName = frontmatter.displayName || frontmatter.name || name;
768
- description = this.cleanForCSV(frontmatter.description || '');
769
- // Tools are standalone by default unless explicitly false (internal=true is already filtered above)
770
- standalone = frontmatter.standalone !== false && frontmatter.standalone !== 'false';
771
- } catch {
772
- // If YAML parsing fails, use defaults
773
- standalone = true; // Default to standalone
774
- }
775
- } else {
776
- standalone = true; // No frontmatter means standalone
777
- }
778
- } else {
779
- // For .xml tools, extract from tag attributes
780
- const nameMatch = content.match(/name="([^"]+)"/);
781
- displayName = nameMatch ? nameMatch[1] : name;
782
-
783
- const descMatch = content.match(/description="([^"]+)"/);
784
- const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
785
- description = this.cleanForCSV(descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '');
786
-
787
- const standaloneFalseMatch = content.match(/<tool[^>]+standalone="false"/);
788
- standalone = !standaloneFalseMatch;
789
- }
790
-
791
- // Build relative path for installation
792
- const installPath =
793
- moduleName === 'core' ? `${this.bmadFolderName}/core/tools/${file}` : `${this.bmadFolderName}/${moduleName}/tools/${file}`;
794
-
795
- tools.push({
796
- name: name,
797
- displayName: displayName,
798
- description: description,
799
- module: moduleName,
800
- path: installPath,
801
- standalone: standalone,
802
- canonicalId: this.getCanonicalId(skillManifest, file),
803
- });
804
-
805
- // Add to files list
806
- this.files.push({
807
- type: 'tool',
808
- name: name,
809
- module: moduleName,
810
- path: installPath,
811
- });
812
- }
813
- }
814
-
815
- return tools;
370
+ return agents;
816
371
  }
817
372
 
818
373
  /**
@@ -900,131 +455,6 @@ class ManifestGenerator {
900
455
  return manifestPath;
901
456
  }
902
457
 
903
- /**
904
- * Read existing CSV and preserve rows for modules NOT being updated
905
- * @param {string} csvPath - Path to existing CSV file
906
- * @param {number} moduleColumnIndex - Which column contains the module name (0-indexed)
907
- * @param {Array<string>} expectedColumns - Expected column names in order
908
- * @param {Object} defaultValues - Default values for missing columns
909
- * @returns {Array} Preserved CSV rows (without header), upgraded to match expected columns
910
- */
911
- async getPreservedCsvRows(csvPath, moduleColumnIndex, expectedColumns, defaultValues = {}) {
912
- if (!(await fs.pathExists(csvPath)) || this.preservedModules.length === 0) {
913
- return [];
914
- }
915
-
916
- try {
917
- const content = await fs.readFile(csvPath, 'utf8');
918
- const lines = content.trim().split('\n');
919
-
920
- if (lines.length < 2) {
921
- return []; // No data rows
922
- }
923
-
924
- // Parse header to understand old schema
925
- const header = lines[0];
926
- const headerColumns = header.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
927
- const oldColumns = headerColumns.map((c) => c.replaceAll(/^"|"$/g, ''));
928
-
929
- // Skip header row for data
930
- const dataRows = lines.slice(1);
931
- const preservedRows = [];
932
-
933
- for (const row of dataRows) {
934
- // Simple CSV parsing (handles quoted values)
935
- const columns = row.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
936
- const cleanColumns = columns.map((c) => c.replaceAll(/^"|"$/g, ''));
937
-
938
- const moduleValue = cleanColumns[moduleColumnIndex];
939
-
940
- // Keep this row if it belongs to a preserved module
941
- if (this.preservedModules.includes(moduleValue)) {
942
- // Upgrade row to match expected schema
943
- const upgradedRow = this.upgradeRowToSchema(cleanColumns, oldColumns, expectedColumns, defaultValues);
944
- preservedRows.push(upgradedRow);
945
- }
946
- }
947
-
948
- return preservedRows;
949
- } catch (error) {
950
- await prompts.log.warn(`Failed to read existing CSV ${csvPath}: ${error.message}`);
951
- return [];
952
- }
953
- }
954
-
955
- /**
956
- * Upgrade a CSV row from old schema to new schema
957
- * @param {Array<string>} rowValues - Values from old row
958
- * @param {Array<string>} oldColumns - Old column names
959
- * @param {Array<string>} newColumns - New column names
960
- * @param {Object} defaultValues - Default values for missing columns
961
- * @returns {string} Upgraded CSV row
962
- */
963
- upgradeRowToSchema(rowValues, oldColumns, newColumns, defaultValues) {
964
- const upgradedValues = [];
965
-
966
- for (const newCol of newColumns) {
967
- const oldIndex = oldColumns.indexOf(newCol);
968
-
969
- if (oldIndex !== -1 && oldIndex < rowValues.length) {
970
- // Column exists in old schema, use its value
971
- upgradedValues.push(rowValues[oldIndex]);
972
- } else if (defaultValues[newCol] === undefined) {
973
- // Column missing, no default provided
974
- upgradedValues.push('');
975
- } else {
976
- // Column missing, use default value
977
- upgradedValues.push(defaultValues[newCol]);
978
- }
979
- }
980
-
981
- // Properly quote values and join
982
- return upgradedValues.map((v) => `"${v}"`).join(',');
983
- }
984
-
985
- /**
986
- * Write workflow manifest CSV
987
- * @returns {string} Path to the manifest file
988
- */
989
- async writeWorkflowManifest(cfgDir) {
990
- const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
991
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
992
-
993
- // Create CSV header - standalone column removed, canonicalId added as optional column
994
- let csv = 'name,description,module,path,canonicalId\n';
995
-
996
- // Build workflows map from discovered workflows only
997
- // Old entries are NOT preserved - the manifest reflects what actually exists on disk
998
- const allWorkflows = new Map();
999
-
1000
- // Only add workflows that were actually discovered in this scan
1001
- for (const workflow of this.workflows) {
1002
- const key = `${workflow.module}:${workflow.name}`;
1003
- allWorkflows.set(key, {
1004
- name: workflow.name,
1005
- description: workflow.description,
1006
- module: workflow.module,
1007
- path: workflow.path,
1008
- canonicalId: workflow.canonicalId || '',
1009
- });
1010
- }
1011
-
1012
- // Write all workflows
1013
- for (const [, value] of allWorkflows) {
1014
- const row = [
1015
- escapeCsv(value.name),
1016
- escapeCsv(value.description),
1017
- escapeCsv(value.module),
1018
- escapeCsv(value.path),
1019
- escapeCsv(value.canonicalId),
1020
- ].join(',');
1021
- csv += row + '\n';
1022
- }
1023
-
1024
- await fs.writeFile(csvPath, csv);
1025
- return csvPath;
1026
- }
1027
-
1028
458
  /**
1029
459
  * Write skill manifest CSV
1030
460
  * @returns {string} Path to the manifest file
@@ -1125,134 +555,6 @@ class ManifestGenerator {
1125
555
  return csvPath;
1126
556
  }
1127
557
 
1128
- /**
1129
- * Write task manifest CSV
1130
- * @returns {string} Path to the manifest file
1131
- */
1132
- async writeTaskManifest(cfgDir) {
1133
- const csvPath = path.join(cfgDir, 'task-manifest.csv');
1134
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
1135
-
1136
- // Read existing manifest to preserve entries
1137
- const existingEntries = new Map();
1138
- if (await fs.pathExists(csvPath)) {
1139
- const content = await fs.readFile(csvPath, 'utf8');
1140
- const records = csv.parse(content, {
1141
- columns: true,
1142
- skip_empty_lines: true,
1143
- });
1144
- for (const record of records) {
1145
- existingEntries.set(`${record.module}:${record.name}`, record);
1146
- }
1147
- }
1148
-
1149
- // Create CSV header with standalone and canonicalId columns
1150
- let csvContent = 'name,displayName,description,module,path,standalone,canonicalId\n';
1151
-
1152
- // Combine existing and new tasks
1153
- const allTasks = new Map();
1154
-
1155
- // Add existing entries
1156
- for (const [key, value] of existingEntries) {
1157
- allTasks.set(key, value);
1158
- }
1159
-
1160
- // Add/update new tasks
1161
- for (const task of this.tasks) {
1162
- const key = `${task.module}:${task.name}`;
1163
- allTasks.set(key, {
1164
- name: task.name,
1165
- displayName: task.displayName,
1166
- description: task.description,
1167
- module: task.module,
1168
- path: task.path,
1169
- standalone: task.standalone,
1170
- canonicalId: task.canonicalId || '',
1171
- });
1172
- }
1173
-
1174
- // Write all tasks
1175
- for (const [, record] of allTasks) {
1176
- const row = [
1177
- escapeCsv(record.name),
1178
- escapeCsv(record.displayName),
1179
- escapeCsv(record.description),
1180
- escapeCsv(record.module),
1181
- escapeCsv(record.path),
1182
- escapeCsv(record.standalone),
1183
- escapeCsv(record.canonicalId),
1184
- ].join(',');
1185
- csvContent += row + '\n';
1186
- }
1187
-
1188
- await fs.writeFile(csvPath, csvContent);
1189
- return csvPath;
1190
- }
1191
-
1192
- /**
1193
- * Write tool manifest CSV
1194
- * @returns {string} Path to the manifest file
1195
- */
1196
- async writeToolManifest(cfgDir) {
1197
- const csvPath = path.join(cfgDir, 'tool-manifest.csv');
1198
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
1199
-
1200
- // Read existing manifest to preserve entries
1201
- const existingEntries = new Map();
1202
- if (await fs.pathExists(csvPath)) {
1203
- const content = await fs.readFile(csvPath, 'utf8');
1204
- const records = csv.parse(content, {
1205
- columns: true,
1206
- skip_empty_lines: true,
1207
- });
1208
- for (const record of records) {
1209
- existingEntries.set(`${record.module}:${record.name}`, record);
1210
- }
1211
- }
1212
-
1213
- // Create CSV header with standalone and canonicalId columns
1214
- let csvContent = 'name,displayName,description,module,path,standalone,canonicalId\n';
1215
-
1216
- // Combine existing and new tools
1217
- const allTools = new Map();
1218
-
1219
- // Add existing entries
1220
- for (const [key, value] of existingEntries) {
1221
- allTools.set(key, value);
1222
- }
1223
-
1224
- // Add/update new tools
1225
- for (const tool of this.tools) {
1226
- const key = `${tool.module}:${tool.name}`;
1227
- allTools.set(key, {
1228
- name: tool.name,
1229
- displayName: tool.displayName,
1230
- description: tool.description,
1231
- module: tool.module,
1232
- path: tool.path,
1233
- standalone: tool.standalone,
1234
- canonicalId: tool.canonicalId || '',
1235
- });
1236
- }
1237
-
1238
- // Write all tools
1239
- for (const [, record] of allTools) {
1240
- const row = [
1241
- escapeCsv(record.name),
1242
- escapeCsv(record.displayName),
1243
- escapeCsv(record.description),
1244
- escapeCsv(record.module),
1245
- escapeCsv(record.path),
1246
- escapeCsv(record.standalone),
1247
- escapeCsv(record.canonicalId),
1248
- ].join(',');
1249
- csvContent += row + '\n';
1250
- }
1251
-
1252
- await fs.writeFile(csvPath, csvContent);
1253
- return csvPath;
1254
- }
1255
-
1256
558
  /**
1257
559
  * Write files manifest CSV
1258
560
  */
@@ -1352,21 +654,12 @@ class ManifestGenerator {
1352
654
  continue;
1353
655
  }
1354
656
 
1355
- // Check if this looks like a module (has agents, workflows, or tasks directory)
657
+ // Check if this looks like a module (has agents directory or skill manifests)
1356
658
  const modulePath = path.join(bmadDir, entry.name);
1357
659
  const hasAgents = await fs.pathExists(path.join(modulePath, 'agents'));
1358
- const hasWorkflows = await fs.pathExists(path.join(modulePath, 'workflows'));
1359
- const hasTasks = await fs.pathExists(path.join(modulePath, 'tasks'));
1360
- const hasTools = await fs.pathExists(path.join(modulePath, 'tools'));
1361
-
1362
- // Check for skill-only modules: recursive scan for bmad-skill-manifest.yaml with type: skill
1363
- let hasSkills = false;
1364
- if (!hasAgents && !hasWorkflows && !hasTasks && !hasTools) {
1365
- hasSkills = await this._hasSkillManifestRecursive(modulePath);
1366
- }
660
+ const hasSkills = await this._hasSkillMdRecursive(modulePath);
1367
661
 
1368
- // If it has any of these directories or skill manifests, it's likely a module
1369
- if (hasAgents || hasWorkflows || hasTasks || hasTools || hasSkills) {
662
+ if (hasAgents || hasSkills) {
1370
663
  modules.push(entry.name);
1371
664
  }
1372
665
  }
@@ -1378,12 +671,12 @@ class ManifestGenerator {
1378
671
  }
1379
672
 
1380
673
  /**
1381
- * Recursively check if a directory tree contains a bmad-skill-manifest.yaml with type: skill.
674
+ * Recursively check if a directory tree contains a SKILL.md file.
1382
675
  * Skips directories starting with . or _.
1383
676
  * @param {string} dir - Directory to search
1384
- * @returns {boolean} True if a skill manifest is found
677
+ * @returns {boolean} True if a SKILL.md is found
1385
678
  */
1386
- async _hasSkillManifestRecursive(dir) {
679
+ async _hasSkillMdRecursive(dir) {
1387
680
  let entries;
1388
681
  try {
1389
682
  entries = await fs.readdir(dir, { withFileTypes: true });
@@ -1391,18 +684,14 @@ class ManifestGenerator {
1391
684
  return false;
1392
685
  }
1393
686
 
1394
- // Check for manifest in this directory
1395
- const manifest = await this.loadSkillManifest(dir);
1396
- if (manifest) {
1397
- const type = this.getArtifactType(manifest, 'workflow.md');
1398
- if (type === 'skill') return true;
1399
- }
687
+ // Check for SKILL.md in this directory
688
+ if (entries.some((e) => !e.isDirectory() && e.name === 'SKILL.md')) return true;
1400
689
 
1401
690
  // Recurse into subdirectories
1402
691
  for (const entry of entries) {
1403
692
  if (!entry.isDirectory()) continue;
1404
693
  if (entry.name.startsWith('.') || entry.name.startsWith('_')) continue;
1405
- if (await this._hasSkillManifestRecursive(path.join(dir, entry.name))) return true;
694
+ if (await this._hasSkillMdRecursive(path.join(dir, entry.name))) return true;
1406
695
  }
1407
696
 
1408
697
  return false;