bmad-method 6.0.0-alpha.9 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (931) hide show
  1. package/.augment/code_review_guidelines.yaml +271 -0
  2. package/.claude/skills/bmad-os-changelog-social/SKILL.md +178 -0
  3. package/.claude/skills/bmad-os-changelog-social/examples/discord-example.md +53 -0
  4. package/.claude/skills/bmad-os-changelog-social/examples/linkedin-example.md +49 -0
  5. package/.claude/skills/bmad-os-changelog-social/examples/twitter-example.md +55 -0
  6. package/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +7 -0
  7. package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
  8. package/.claude/skills/bmad-os-draft-changelog/SKILL.md +7 -0
  9. package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
  10. package/.claude/skills/bmad-os-gh-triage/README.md +14 -0
  11. package/.claude/skills/bmad-os-gh-triage/SKILL.md +12 -0
  12. package/.claude/skills/bmad-os-gh-triage/prompts/agent-prompt.md +60 -0
  13. package/.claude/skills/bmad-os-gh-triage/prompts/instructions.md +74 -0
  14. package/.claude/skills/bmad-os-release-module/README.md +24 -0
  15. package/.claude/skills/bmad-os-release-module/SKILL.md +7 -0
  16. package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
  17. package/.coderabbit.yaml +85 -0
  18. package/.github/CODE_OF_CONDUCT.md +128 -0
  19. package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
  20. package/.github/ISSUE_TEMPLATE/config.yaml +5 -2
  21. package/.github/ISSUE_TEMPLATE/documentation.yaml +55 -0
  22. package/.github/ISSUE_TEMPLATE/feature-request.md +22 -0
  23. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  24. package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  25. package/.github/scripts/discord-helpers.sh +34 -0
  26. package/.github/workflows/coderabbit-review.yaml +22 -0
  27. package/.github/workflows/discord.yaml +82 -8
  28. package/.github/workflows/docs.yaml +64 -0
  29. package/.github/workflows/quality.yaml +40 -2
  30. package/.husky/pre-commit +13 -0
  31. package/.markdownlint-cli2.yaml +41 -0
  32. package/.prettierignore +7 -0
  33. package/.vscode/settings.json +4 -3
  34. package/CHANGELOG.md +1074 -674
  35. package/CNAME +1 -0
  36. package/CONTRIBUTING.md +97 -189
  37. package/CONTRIBUTORS.md +32 -0
  38. package/LICENSE +7 -3
  39. package/README.md +51 -396
  40. package/SECURITY.md +85 -0
  41. package/TRADEMARK.md +55 -0
  42. package/Wordmark.png +0 -0
  43. package/banner-bmad-method.png +0 -0
  44. package/docs/404.md +9 -0
  45. package/docs/_STYLE_GUIDE.md +370 -0
  46. package/docs/explanation/advanced-elicitation.md +49 -0
  47. package/docs/explanation/adversarial-review.md +59 -0
  48. package/docs/explanation/brainstorming.md +33 -0
  49. package/docs/explanation/established-projects-faq.md +50 -0
  50. package/docs/explanation/party-mode.md +59 -0
  51. package/docs/explanation/preventing-agent-conflicts.md +112 -0
  52. package/docs/explanation/project-context.md +157 -0
  53. package/docs/explanation/quick-flow.md +73 -0
  54. package/docs/explanation/why-solutioning-matters.md +77 -0
  55. package/docs/how-to/customize-bmad.md +172 -0
  56. package/docs/how-to/established-projects.md +105 -0
  57. package/docs/how-to/get-answers-about-bmad.md +103 -0
  58. package/docs/how-to/install-bmad.md +88 -0
  59. package/docs/how-to/non-interactive-installation.md +171 -0
  60. package/docs/how-to/project-context.md +136 -0
  61. package/docs/how-to/quick-fixes.md +123 -0
  62. package/docs/how-to/shard-large-documents.md +78 -0
  63. package/docs/how-to/upgrade-to-v6.md +97 -0
  64. package/docs/index.md +33 -206
  65. package/docs/reference/agents.md +28 -0
  66. package/docs/reference/commands.md +131 -0
  67. package/docs/reference/modules.md +76 -0
  68. package/docs/reference/testing.md +106 -0
  69. package/docs/reference/workflow-map.md +122 -0
  70. package/docs/tutorials/getting-started.md +219 -0
  71. package/eslint.config.mjs +26 -16
  72. package/package.json +35 -28
  73. package/src/bmm/agents/analyst.agent.yaml +43 -0
  74. package/src/bmm/agents/architect.agent.yaml +29 -0
  75. package/src/bmm/agents/dev.agent.yaml +38 -0
  76. package/src/bmm/agents/pm.agent.yaml +44 -0
  77. package/src/bmm/agents/qa.agent.yaml +58 -0
  78. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  79. package/src/bmm/agents/sm.agent.yaml +37 -0
  80. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  81. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -0
  82. package/src/bmm/agents/ux-designer.agent.yaml +27 -0
  83. package/src/bmm/data/project-context-template.md +26 -0
  84. package/src/bmm/module-help.csv +31 -0
  85. package/src/bmm/module.yaml +50 -0
  86. package/src/bmm/teams/default-party.csv +20 -0
  87. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  88. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  89. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  90. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  91. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  92. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  93. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  94. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  95. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
  96. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  97. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  98. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  99. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  100. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  101. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  102. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  103. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  104. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  105. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  106. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  107. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  108. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  109. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  110. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  111. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  112. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  113. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
  114. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  115. package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
  116. package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
  117. package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
  118. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
  119. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  120. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  121. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  122. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
  123. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  124. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
  125. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
  126. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  127. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  128. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  129. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  130. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  131. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  132. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  133. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  134. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  135. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  136. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  137. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  138. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  139. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  140. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  141. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
  142. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  143. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  144. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  145. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  146. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  147. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  148. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  149. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  150. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  151. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  152. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  153. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  154. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  155. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  156. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
  157. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
  158. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
  159. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  160. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  161. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  162. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  163. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  164. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  165. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  166. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  167. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  168. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  169. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  170. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  171. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  172. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  173. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  174. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  175. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
  176. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
  177. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
  178. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
  179. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
  180. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
  181. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
  182. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  183. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
  184. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  185. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
  186. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  187. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  188. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  189. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  190. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  191. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  192. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  193. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  194. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  195. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  196. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
  197. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  198. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  199. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  200. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  201. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  202. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  203. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  204. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  205. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +44 -0
  206. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  207. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
  208. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +54 -0
  209. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  210. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +346 -0
  211. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  212. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +53 -0
  213. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  214. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  215. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +21 -0
  216. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
  217. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +53 -0
  218. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -0
  219. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  220. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
  221. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
  222. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
  223. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
  224. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
  225. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
  226. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
  227. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -0
  228. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
  229. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  230. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +191 -0
  231. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
  232. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +127 -0
  233. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -0
  234. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  235. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  236. package/src/bmm/workflows/document-project/checklist.md +245 -0
  237. package/src/bmm/workflows/document-project/instructions.md +130 -0
  238. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  239. package/src/bmm/workflows/document-project/workflow.yaml +22 -0
  240. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  241. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  242. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  243. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  244. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  245. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  246. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  247. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  248. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  249. package/src/bmm/workflows/qa/automate/checklist.md +33 -0
  250. package/src/bmm/workflows/qa/automate/instructions.md +110 -0
  251. package/src/bmm/workflows/qa/automate/workflow.yaml +44 -0
  252. package/src/core/agents/bmad-master.agent.yaml +12 -21
  253. package/src/core/module-help.csv +9 -0
  254. package/src/core/module.yaml +25 -0
  255. package/src/core/tasks/editorial-review-prose.xml +102 -0
  256. package/src/core/tasks/editorial-review-structure.xml +209 -0
  257. package/src/core/tasks/help.md +85 -0
  258. package/src/core/tasks/index-docs.xml +2 -2
  259. package/src/core/tasks/review-adversarial-general.xml +48 -0
  260. package/src/core/tasks/shard-doc.xml +108 -0
  261. package/src/core/tasks/workflow.xml +39 -74
  262. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  263. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  264. package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
  265. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  266. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  267. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  268. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  269. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  270. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  271. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  272. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  273. package/src/core/workflows/brainstorming/template.md +13 -104
  274. package/src/core/workflows/brainstorming/workflow.md +58 -0
  275. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  276. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  277. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
  278. package/src/core/workflows/party-mode/workflow.md +194 -0
  279. package/src/utility/agent-components/activation-rules.txt +6 -0
  280. package/src/utility/agent-components/activation-steps.txt +14 -0
  281. package/src/utility/agent-components/agent-command-header.md +1 -0
  282. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  283. package/src/utility/agent-components/handler-action.txt +4 -0
  284. package/src/utility/agent-components/handler-exec.txt +6 -0
  285. package/src/utility/agent-components/handler-multi.txt +14 -0
  286. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  287. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  288. package/src/utility/agent-components/handler-workflow.txt +10 -0
  289. package/src/utility/agent-components/menu-handlers.txt +6 -0
  290. package/test/README.md +4 -4
  291. package/test/adversarial-review-tests/README.md +56 -0
  292. package/test/adversarial-review-tests/sample-content.md +46 -0
  293. package/test/adversarial-review-tests/test-cases.yaml +103 -0
  294. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +1 -0
  295. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +1 -0
  296. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +1 -0
  297. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +1 -0
  298. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +1 -0
  299. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +1 -0
  300. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +1 -0
  301. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  302. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  303. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +1 -0
  304. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +1 -0
  305. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +1 -0
  306. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +1 -0
  307. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +1 -0
  308. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +1 -1
  309. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +1 -0
  310. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +1 -0
  311. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +1 -0
  312. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +1 -0
  313. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +1 -0
  314. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +1 -0
  315. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +1 -0
  316. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +1 -0
  317. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +1 -0
  318. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +1 -0
  319. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +1 -0
  320. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +1 -0
  321. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +1 -0
  322. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -0
  323. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +1 -0
  324. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +2 -3
  325. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -0
  326. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  327. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +2 -1
  328. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  329. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +1 -0
  330. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +2 -1
  331. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +2 -1
  332. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  333. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  334. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +1 -0
  335. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +1 -0
  336. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +1 -0
  337. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +1 -0
  338. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +1 -0
  339. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +1 -0
  340. package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
  341. package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
  342. package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
  343. package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
  344. package/test/fixtures/file-refs-csv/valid/bmm-style.csv +3 -0
  345. package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
  346. package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
  347. package/test/test-agent-schema.js +4 -4
  348. package/test/test-file-refs-csv.js +133 -0
  349. package/test/test-installation-components.js +10 -12
  350. package/test/test-rehype-plugins.mjs +1050 -0
  351. package/test/unit-test-schema.js +2 -2
  352. package/tools/build-docs.mjs +463 -0
  353. package/tools/cli/README.md +41 -589
  354. package/tools/cli/bmad-cli.js +67 -1
  355. package/tools/cli/commands/install.js +42 -34
  356. package/tools/cli/commands/status.js +44 -26
  357. package/tools/cli/commands/uninstall.js +146 -23
  358. package/tools/cli/external-official-modules.yaml +53 -0
  359. package/tools/cli/installers/install-messages.yaml +39 -0
  360. package/tools/cli/installers/lib/core/config-collector.js +589 -95
  361. package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
  362. package/tools/cli/installers/lib/core/dependency-resolver.js +57 -39
  363. package/tools/cli/installers/lib/core/detector.js +19 -125
  364. package/tools/cli/installers/lib/core/ide-config-manager.js +12 -9
  365. package/tools/cli/installers/lib/core/installer.js +2075 -1161
  366. package/tools/cli/installers/lib/core/manifest-generator.js +494 -103
  367. package/tools/cli/installers/lib/core/manifest.js +544 -46
  368. package/tools/cli/installers/lib/custom/handler.js +358 -0
  369. package/tools/cli/installers/lib/ide/_base-ide.js +83 -44
  370. package/tools/cli/installers/lib/ide/_config-driven.js +560 -0
  371. package/tools/cli/installers/lib/ide/codex.js +277 -54
  372. package/tools/cli/installers/lib/ide/github-copilot.js +607 -209
  373. package/tools/cli/installers/lib/ide/kilo.js +169 -75
  374. package/tools/cli/installers/lib/ide/manager.js +179 -48
  375. package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
  376. package/tools/cli/installers/lib/ide/platform-codes.yaml +227 -0
  377. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +95 -5
  378. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +51 -20
  379. package/tools/cli/installers/lib/ide/shared/module-injections.js +6 -3
  380. package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
  381. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +262 -14
  382. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +108 -27
  383. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +2 -1
  384. package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
  385. package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +16 -0
  386. package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
  387. package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
  388. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +15 -0
  389. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +7 -0
  390. package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
  391. package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
  392. package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
  393. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
  394. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
  395. package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
  396. package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
  397. package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
  398. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
  399. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
  400. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
  401. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +14 -0
  402. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +14 -0
  403. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +17 -0
  404. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +17 -0
  405. package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
  406. package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
  407. package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
  408. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +2 -1
  409. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +6 -0
  410. package/tools/cli/installers/lib/message-loader.js +83 -0
  411. package/tools/cli/installers/lib/modules/external-manager.js +136 -0
  412. package/tools/cli/installers/lib/modules/manager.js +931 -207
  413. package/tools/cli/lib/activation-builder.js +13 -16
  414. package/tools/cli/lib/agent/compiler.js +525 -0
  415. package/tools/cli/lib/agent/installer.js +680 -0
  416. package/tools/cli/lib/agent/template-engine.js +152 -0
  417. package/tools/cli/lib/agent-analyzer.js +48 -20
  418. package/tools/cli/lib/agent-party-generator.js +5 -17
  419. package/tools/cli/lib/cli-utils.js +76 -104
  420. package/tools/cli/lib/config.js +4 -3
  421. package/tools/cli/lib/platform-codes.js +2 -2
  422. package/tools/cli/lib/project-root.js +6 -0
  423. package/tools/cli/lib/prompts.js +809 -0
  424. package/tools/cli/lib/ui.js +1600 -272
  425. package/tools/cli/lib/xml-handler.js +4 -55
  426. package/tools/cli/lib/yaml-format.js +4 -6
  427. package/tools/cli/lib/yaml-xml-builder.js +183 -61
  428. package/tools/docs/_prompt-external-modules-page.md +59 -0
  429. package/tools/docs/fix-refs.md +91 -0
  430. package/tools/fix-doc-links.js +285 -0
  431. package/tools/lib/xml-utils.js +13 -0
  432. package/tools/maintainer/review-pr-README.md +55 -0
  433. package/tools/maintainer/review-pr.md +242 -0
  434. package/tools/migrate-custom-module-paths.js +124 -0
  435. package/tools/platform-codes.yaml +24 -0
  436. package/tools/schema/agent.js +306 -53
  437. package/tools/validate-agent-schema.js +3 -3
  438. package/tools/validate-doc-links.js +393 -0
  439. package/tools/validate-file-refs.js +554 -0
  440. package/tools/validate-svg-changes.sh +356 -0
  441. package/website/README.md +75 -0
  442. package/website/astro.config.mjs +135 -0
  443. package/website/public/favicon.ico +0 -0
  444. package/website/public/img/bmad-dark.png +0 -0
  445. package/website/public/img/bmad-light.png +0 -0
  446. package/website/public/workflow-map-diagram.html +361 -0
  447. package/website/src/components/Banner.astro +62 -0
  448. package/website/src/components/Header.astro +96 -0
  449. package/website/src/components/MobileMenuFooter.astro +33 -0
  450. package/website/src/content/config.ts +6 -0
  451. package/website/src/lib/site-url.mjs +25 -0
  452. package/website/src/pages/404.astro +11 -0
  453. package/website/src/pages/robots.txt.ts +48 -0
  454. package/website/src/rehype-base-paths.js +112 -0
  455. package/website/src/rehype-markdown-links.js +111 -0
  456. package/website/src/styles/custom.css +509 -0
  457. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  458. package/.github/ISSUE_TEMPLATE/idea_submission.md +0 -109
  459. package/.github/workflows/bundle-latest.yaml +0 -277
  460. package/.github/workflows/manual-release.yaml +0 -212
  461. package/docs/BUNDLE_DISTRIBUTION_SETUP.md +0 -95
  462. package/docs/agent-customization-guide.md +0 -208
  463. package/docs/document-sharding-guide.md +0 -447
  464. package/docs/ide-info/auggie.md +0 -31
  465. package/docs/ide-info/claude-code.md +0 -25
  466. package/docs/ide-info/cline.md +0 -31
  467. package/docs/ide-info/codex.md +0 -21
  468. package/docs/ide-info/crush.md +0 -30
  469. package/docs/ide-info/cursor.md +0 -25
  470. package/docs/ide-info/gemini.md +0 -25
  471. package/docs/ide-info/github-copilot.md +0 -26
  472. package/docs/ide-info/iflow.md +0 -33
  473. package/docs/ide-info/kilo.md +0 -24
  474. package/docs/ide-info/opencode.md +0 -24
  475. package/docs/ide-info/qwen.md +0 -25
  476. package/docs/ide-info/roo.md +0 -27
  477. package/docs/ide-info/trae.md +0 -25
  478. package/docs/ide-info/windsurf.md +0 -22
  479. package/docs/installers-bundlers/ide-injections.md +0 -186
  480. package/docs/installers-bundlers/installers-modules-platforms-reference.md +0 -388
  481. package/docs/installers-bundlers/web-bundler-usage.md +0 -54
  482. package/docs/v4-to-v6-upgrade.md +0 -227
  483. package/docs/web-bundles-gemini-gpt-guide.md +0 -473
  484. package/src/core/_module-installer/install-config.yaml +0 -35
  485. package/src/core/_module-installer/installer.js +0 -60
  486. package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  487. package/src/core/tasks/adv-elicit-methods.csv +0 -39
  488. package/src/core/tasks/advanced-elicitation.xml +0 -106
  489. package/src/core/tasks/validate-workflow.xml +0 -89
  490. package/src/core/tools/shard-doc.xml +0 -109
  491. package/src/core/workflows/brainstorming/README.md +0 -261
  492. package/src/core/workflows/brainstorming/instructions.md +0 -315
  493. package/src/core/workflows/brainstorming/workflow.yaml +0 -43
  494. package/src/core/workflows/party-mode/instructions.md +0 -183
  495. package/src/core/workflows/party-mode/workflow.yaml +0 -27
  496. package/src/modules/bmb/README.md +0 -194
  497. package/src/modules/bmb/_module-installer/install-config.yaml +0 -31
  498. package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -59
  499. package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
  500. package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
  501. package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
  502. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
  503. package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
  504. package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
  505. package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
  506. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -34
  507. package/src/modules/bmb/workflows/create-agent/README.md +0 -203
  508. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +0 -415
  509. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
  510. package/src/modules/bmb/workflows/create-agent/agent-types.md +0 -292
  511. package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +0 -174
  512. package/src/modules/bmb/workflows/create-agent/checklist.md +0 -62
  513. package/src/modules/bmb/workflows/create-agent/communication-styles.md +0 -202
  514. package/src/modules/bmb/workflows/create-agent/instructions.md +0 -456
  515. package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -49
  516. package/src/modules/bmb/workflows/create-module/README.md +0 -229
  517. package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
  518. package/src/modules/bmb/workflows/create-module/checklist.md +0 -235
  519. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
  520. package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
  521. package/src/modules/bmb/workflows/create-module/instructions.md +0 -576
  522. package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
  523. package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -44
  524. package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
  525. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
  526. package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
  527. package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -724
  528. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1306
  529. package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
  530. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
  531. package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
  532. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -65
  533. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -42
  534. package/src/modules/bmb/workflows/edit-agent/README.md +0 -112
  535. package/src/modules/bmb/workflows/edit-agent/checklist.md +0 -112
  536. package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -290
  537. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -35
  538. package/src/modules/bmb/workflows/edit-module/README.md +0 -187
  539. package/src/modules/bmb/workflows/edit-module/checklist.md +0 -165
  540. package/src/modules/bmb/workflows/edit-module/instructions.md +0 -339
  541. package/src/modules/bmb/workflows/edit-module/workflow.yaml +0 -36
  542. package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
  543. package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
  544. package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
  545. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -29
  546. package/src/modules/bmb/workflows/module-brief/README.md +0 -264
  547. package/src/modules/bmb/workflows/module-brief/checklist.md +0 -116
  548. package/src/modules/bmb/workflows/module-brief/instructions.md +0 -267
  549. package/src/modules/bmb/workflows/module-brief/template.md +0 -275
  550. package/src/modules/bmb/workflows/module-brief/workflow.yaml +0 -31
  551. package/src/modules/bmb/workflows/redoc/README.md +0 -87
  552. package/src/modules/bmb/workflows/redoc/checklist.md +0 -99
  553. package/src/modules/bmb/workflows/redoc/instructions.md +0 -265
  554. package/src/modules/bmb/workflows/redoc/workflow.yaml +0 -34
  555. package/src/modules/bmgd/README.md +0 -208
  556. package/src/modules/bmgd/_module-installer/install-config.yaml +0 -54
  557. package/src/modules/bmgd/agents/game-architect.agent.yaml +0 -33
  558. package/src/modules/bmgd/agents/game-designer.agent.yaml +0 -40
  559. package/src/modules/bmgd/agents/game-dev.agent.yaml +0 -40
  560. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +0 -75
  561. package/src/modules/bmgd/teams/default-party.csv +0 -10
  562. package/src/modules/bmgd/teams/team-gamedev.yaml +0 -18
  563. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-brain-methods.csv +0 -26
  564. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-context.md +0 -115
  565. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +0 -128
  566. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +0 -41
  567. package/src/modules/bmgd/workflows/1-preproduction/game-brief/checklist.md +0 -128
  568. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +0 -371
  569. package/src/modules/bmgd/workflows/1-preproduction/game-brief/template.md +0 -205
  570. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +0 -44
  571. package/src/modules/bmgd/workflows/2-design/gdd/checklist.md +0 -148
  572. package/src/modules/bmgd/workflows/2-design/gdd/game-types/action-platformer.md +0 -45
  573. package/src/modules/bmgd/workflows/2-design/gdd/game-types/adventure.md +0 -84
  574. package/src/modules/bmgd/workflows/2-design/gdd/game-types/card-game.md +0 -76
  575. package/src/modules/bmgd/workflows/2-design/gdd/game-types/fighting.md +0 -89
  576. package/src/modules/bmgd/workflows/2-design/gdd/game-types/horror.md +0 -86
  577. package/src/modules/bmgd/workflows/2-design/gdd/game-types/idle-incremental.md +0 -78
  578. package/src/modules/bmgd/workflows/2-design/gdd/game-types/metroidvania.md +0 -87
  579. package/src/modules/bmgd/workflows/2-design/gdd/game-types/moba.md +0 -74
  580. package/src/modules/bmgd/workflows/2-design/gdd/game-types/party-game.md +0 -79
  581. package/src/modules/bmgd/workflows/2-design/gdd/game-types/puzzle.md +0 -58
  582. package/src/modules/bmgd/workflows/2-design/gdd/game-types/racing.md +0 -88
  583. package/src/modules/bmgd/workflows/2-design/gdd/game-types/rhythm.md +0 -79
  584. package/src/modules/bmgd/workflows/2-design/gdd/game-types/roguelike.md +0 -69
  585. package/src/modules/bmgd/workflows/2-design/gdd/game-types/rpg.md +0 -70
  586. package/src/modules/bmgd/workflows/2-design/gdd/game-types/sandbox.md +0 -79
  587. package/src/modules/bmgd/workflows/2-design/gdd/game-types/shooter.md +0 -62
  588. package/src/modules/bmgd/workflows/2-design/gdd/game-types/simulation.md +0 -73
  589. package/src/modules/bmgd/workflows/2-design/gdd/game-types/sports.md +0 -75
  590. package/src/modules/bmgd/workflows/2-design/gdd/game-types/strategy.md +0 -71
  591. package/src/modules/bmgd/workflows/2-design/gdd/game-types/survival.md +0 -79
  592. package/src/modules/bmgd/workflows/2-design/gdd/game-types/text-based.md +0 -91
  593. package/src/modules/bmgd/workflows/2-design/gdd/game-types/tower-defense.md +0 -79
  594. package/src/modules/bmgd/workflows/2-design/gdd/game-types/turn-based-tactics.md +0 -88
  595. package/src/modules/bmgd/workflows/2-design/gdd/game-types/visual-novel.md +0 -89
  596. package/src/modules/bmgd/workflows/2-design/gdd/game-types.csv +0 -25
  597. package/src/modules/bmgd/workflows/2-design/gdd/gdd-template.md +0 -153
  598. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -501
  599. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +0 -81
  600. package/src/modules/bmgd/workflows/2-design/narrative/checklist.md +0 -139
  601. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +0 -603
  602. package/src/modules/bmgd/workflows/2-design/narrative/narrative-template.md +0 -195
  603. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +0 -38
  604. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -321
  605. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-template.md +0 -103
  606. package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +0 -240
  607. package/src/modules/bmgd/workflows/3-technical/game-architecture/decision-catalog.yaml +0 -222
  608. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +0 -699
  609. package/src/modules/bmgd/workflows/3-technical/game-architecture/pattern-categories.csv +0 -13
  610. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +0 -67
  611. package/src/modules/bmgd/workflows/4-production/code-review/backlog_template.md +0 -12
  612. package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
  613. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
  614. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +0 -57
  615. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +0 -279
  616. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +0 -206
  617. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +0 -52
  618. package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +0 -240
  619. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
  620. package/src/modules/bmgd/workflows/4-production/create-story/template.md +0 -51
  621. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +0 -68
  622. package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +0 -38
  623. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
  624. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +0 -53
  625. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
  626. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
  627. package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
  628. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -52
  629. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +0 -1442
  630. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +0 -52
  631. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +0 -234
  632. package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +0 -55
  633. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +0 -50
  634. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
  635. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
  636. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
  637. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -57
  638. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
  639. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
  640. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
  641. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
  642. package/src/modules/bmm/README.md +0 -128
  643. package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
  644. package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
  645. package/src/modules/bmm/_module-installer/install-config.yaml +0 -60
  646. package/src/modules/bmm/_module-installer/installer.js +0 -131
  647. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +0 -35
  648. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +0 -32
  649. package/src/modules/bmm/agents/analyst.agent.yaml +0 -48
  650. package/src/modules/bmm/agents/architect.agent.yaml +0 -42
  651. package/src/modules/bmm/agents/dev.agent.yaml +0 -40
  652. package/src/modules/bmm/agents/pm.agent.yaml +0 -61
  653. package/src/modules/bmm/agents/sm.agent.yaml +0 -72
  654. package/src/modules/bmm/agents/tea.agent.yaml +0 -65
  655. package/src/modules/bmm/agents/tech-writer.agent.yaml +0 -73
  656. package/src/modules/bmm/agents/ux-designer.agent.yaml +0 -38
  657. package/src/modules/bmm/docs/README.md +0 -235
  658. package/src/modules/bmm/docs/agents-guide.md +0 -1056
  659. package/src/modules/bmm/docs/brownfield-guide.md +0 -754
  660. package/src/modules/bmm/docs/enterprise-agentic-development.md +0 -680
  661. package/src/modules/bmm/docs/faq.md +0 -587
  662. package/src/modules/bmm/docs/glossary.md +0 -320
  663. package/src/modules/bmm/docs/party-mode.md +0 -224
  664. package/src/modules/bmm/docs/quick-spec-flow.md +0 -652
  665. package/src/modules/bmm/docs/quick-start.md +0 -366
  666. package/src/modules/bmm/docs/scale-adaptive-system.md +0 -599
  667. package/src/modules/bmm/docs/test-architecture.md +0 -394
  668. package/src/modules/bmm/docs/workflow-architecture-reference.md +0 -371
  669. package/src/modules/bmm/docs/workflow-document-project-reference.md +0 -487
  670. package/src/modules/bmm/docs/workflows-analysis.md +0 -370
  671. package/src/modules/bmm/docs/workflows-implementation.md +0 -284
  672. package/src/modules/bmm/docs/workflows-planning.md +0 -601
  673. package/src/modules/bmm/docs/workflows-solutioning.md +0 -501
  674. package/src/modules/bmm/teams/default-party.csv +0 -19
  675. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  676. package/src/modules/bmm/testarch/knowledge/component-tdd.md +0 -486
  677. package/src/modules/bmm/testarch/knowledge/contract-testing.md +0 -957
  678. package/src/modules/bmm/testarch/knowledge/data-factories.md +0 -500
  679. package/src/modules/bmm/testarch/knowledge/email-auth.md +0 -721
  680. package/src/modules/bmm/testarch/knowledge/error-handling.md +0 -725
  681. package/src/modules/bmm/testarch/knowledge/feature-flags.md +0 -750
  682. package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  683. package/src/modules/bmm/testarch/knowledge/network-first.md +0 -486
  684. package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  685. package/src/modules/bmm/testarch/knowledge/playwright-config.md +0 -730
  686. package/src/modules/bmm/testarch/knowledge/probability-impact.md +0 -601
  687. package/src/modules/bmm/testarch/knowledge/risk-governance.md +0 -615
  688. package/src/modules/bmm/testarch/knowledge/selective-testing.md +0 -732
  689. package/src/modules/bmm/testarch/knowledge/selector-resilience.md +0 -527
  690. package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  691. package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  692. package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  693. package/src/modules/bmm/testarch/knowledge/test-quality.md +0 -664
  694. package/src/modules/bmm/testarch/knowledge/timing-debugging.md +0 -372
  695. package/src/modules/bmm/testarch/knowledge/visual-debugging.md +0 -524
  696. package/src/modules/bmm/testarch/tea-index.csv +0 -22
  697. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
  698. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  699. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
  700. package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -423
  701. package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  702. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
  703. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  704. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -522
  705. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  706. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -65
  707. package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  708. package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  709. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
  710. package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  711. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -437
  712. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -674
  713. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
  714. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -533
  715. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  716. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
  717. package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  718. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
  719. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  720. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1306
  721. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  722. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -99
  723. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  724. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -80
  725. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -292
  726. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -53
  727. package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  728. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -525
  729. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
  730. package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  731. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -76
  732. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  733. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  734. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -434
  735. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -978
  736. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  737. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  738. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -57
  739. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  740. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  741. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  742. package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  743. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -696
  744. package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  745. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -96
  746. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -169
  747. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -302
  748. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
  749. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -66
  750. package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  751. package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  752. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  753. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -57
  754. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
  755. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
  756. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -52
  757. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
  758. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  759. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +0 -51
  760. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -68
  761. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
  762. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  763. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -53
  764. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  765. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  766. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  767. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -52
  768. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1442
  769. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -52
  770. package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
  771. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
  772. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
  773. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -50
  774. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  775. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  776. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  777. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -57
  778. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  779. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
  780. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  781. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
  782. package/src/modules/bmm/workflows/document-project/checklist.md +0 -245
  783. package/src/modules/bmm/workflows/document-project/instructions.md +0 -222
  784. package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  785. package/src/modules/bmm/workflows/document-project/workflow.yaml +0 -36
  786. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  787. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  788. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  789. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  790. package/src/modules/bmm/workflows/techdoc/documentation-standards.md +0 -262
  791. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  792. package/src/modules/bmm/workflows/testarch/atdd/checklist.md +0 -373
  793. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +0 -785
  794. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +0 -54
  795. package/src/modules/bmm/workflows/testarch/automate/checklist.md +0 -580
  796. package/src/modules/bmm/workflows/testarch/automate/instructions.md +0 -1303
  797. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +0 -63
  798. package/src/modules/bmm/workflows/testarch/ci/checklist.md +0 -246
  799. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  800. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  801. package/src/modules/bmm/workflows/testarch/ci/instructions.md +0 -517
  802. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +0 -55
  803. package/src/modules/bmm/workflows/testarch/framework/checklist.md +0 -321
  804. package/src/modules/bmm/workflows/testarch/framework/instructions.md +0 -455
  805. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +0 -55
  806. package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  807. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  808. package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  809. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -58
  810. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +0 -234
  811. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +0 -782
  812. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  813. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +0 -58
  814. package/src/modules/bmm/workflows/testarch/test-review/checklist.md +0 -470
  815. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +0 -608
  816. package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  817. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +0 -55
  818. package/src/modules/bmm/workflows/testarch/trace/checklist.md +0 -654
  819. package/src/modules/bmm/workflows/testarch/trace/instructions.md +0 -1045
  820. package/src/modules/bmm/workflows/testarch/trace/trace-template.md +0 -673
  821. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +0 -68
  822. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +0 -823
  823. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +0 -29
  824. package/src/modules/bmm/workflows/workflow-status/instructions.md +0 -387
  825. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
  826. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
  827. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
  828. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -104
  829. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -95
  830. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  831. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  832. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  833. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
  834. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +0 -30
  835. package/src/modules/cis/README.md +0 -153
  836. package/src/modules/cis/_module-installer/install-config.yaml +0 -16
  837. package/src/modules/cis/_module-installer/installer.js +0 -92
  838. package/src/modules/cis/agents/README.md +0 -104
  839. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +0 -28
  840. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +0 -28
  841. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +0 -28
  842. package/src/modules/cis/agents/innovation-strategist.agent.yaml +0 -28
  843. package/src/modules/cis/agents/storyteller.agent.yaml +0 -28
  844. package/src/modules/cis/teams/creative-squad.yaml +0 -7
  845. package/src/modules/cis/teams/default-party.csv +0 -11
  846. package/src/modules/cis/workflows/README.md +0 -139
  847. package/src/modules/cis/workflows/design-thinking/README.md +0 -56
  848. package/src/modules/cis/workflows/design-thinking/design-methods.csv +0 -31
  849. package/src/modules/cis/workflows/design-thinking/instructions.md +0 -200
  850. package/src/modules/cis/workflows/design-thinking/template.md +0 -111
  851. package/src/modules/cis/workflows/design-thinking/workflow.yaml +0 -43
  852. package/src/modules/cis/workflows/innovation-strategy/README.md +0 -56
  853. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +0 -31
  854. package/src/modules/cis/workflows/innovation-strategy/instructions.md +0 -274
  855. package/src/modules/cis/workflows/innovation-strategy/template.md +0 -189
  856. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +0 -43
  857. package/src/modules/cis/workflows/problem-solving/README.md +0 -56
  858. package/src/modules/cis/workflows/problem-solving/instructions.md +0 -250
  859. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +0 -31
  860. package/src/modules/cis/workflows/problem-solving/template.md +0 -165
  861. package/src/modules/cis/workflows/problem-solving/workflow.yaml +0 -43
  862. package/src/modules/cis/workflows/storytelling/README.md +0 -58
  863. package/src/modules/cis/workflows/storytelling/instructions.md +0 -291
  864. package/src/modules/cis/workflows/storytelling/story-types.csv +0 -26
  865. package/src/modules/cis/workflows/storytelling/template.md +0 -113
  866. package/src/modules/cis/workflows/storytelling/workflow.yaml +0 -43
  867. package/src/utility/models/agent-activation-ide.xml +0 -51
  868. package/src/utility/models/agent-activation-web.xml +0 -60
  869. package/src/utility/models/agent-command-header.md +0 -1
  870. package/src/utility/models/agent-config-template.md +0 -23
  871. package/src/utility/models/agent-in-team-activation.xml +0 -3
  872. package/src/utility/models/fragments/activation-rules.xml +0 -8
  873. package/src/utility/models/fragments/activation-steps.xml +0 -16
  874. package/src/utility/models/fragments/handler-action.xml +0 -4
  875. package/src/utility/models/fragments/handler-exec.xml +0 -5
  876. package/src/utility/models/fragments/handler-tmpl.xml +0 -5
  877. package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
  878. package/src/utility/models/fragments/handler-workflow.xml +0 -9
  879. package/src/utility/models/fragments/menu-handlers.xml +0 -6
  880. package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
  881. package/src/utility/templates/agent.customize.template.yaml +0 -42
  882. package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +0 -26
  883. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
  884. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
  885. package/tools/cli/bundlers/bundle-web.js +0 -179
  886. package/tools/cli/bundlers/test-analyst.js +0 -28
  887. package/tools/cli/bundlers/test-bundler.js +0 -118
  888. package/tools/cli/bundlers/web-bundler.js +0 -1667
  889. package/tools/cli/commands/build.js +0 -458
  890. package/tools/cli/commands/list.js +0 -28
  891. package/tools/cli/commands/update.js +0 -28
  892. package/tools/cli/installers/lib/ide/auggie.js +0 -179
  893. package/tools/cli/installers/lib/ide/claude-code.js +0 -471
  894. package/tools/cli/installers/lib/ide/cline.js +0 -220
  895. package/tools/cli/installers/lib/ide/crush.js +0 -240
  896. package/tools/cli/installers/lib/ide/cursor.js +0 -352
  897. package/tools/cli/installers/lib/ide/gemini.js +0 -206
  898. package/tools/cli/installers/lib/ide/iflow.js +0 -125
  899. package/tools/cli/installers/lib/ide/opencode.js +0 -212
  900. package/tools/cli/installers/lib/ide/qwen.js +0 -318
  901. package/tools/cli/installers/lib/ide/roo.js +0 -253
  902. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +0 -14
  903. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +0 -12
  904. package/tools/cli/installers/lib/ide/trae.js +0 -266
  905. package/tools/cli/installers/lib/ide/windsurf.js +0 -211
  906. package/tools/cli/lib/replace-project-root.js +0 -239
  907. package/tools/cli/regenerate-manifests.js +0 -28
  908. package/tools/cli/test-yaml-builder.js +0 -43
  909. package/tools/flattener/aggregate.js +0 -76
  910. package/tools/flattener/binary.js +0 -80
  911. package/tools/flattener/discovery.js +0 -71
  912. package/tools/flattener/files.js +0 -35
  913. package/tools/flattener/ignoreRules.js +0 -172
  914. package/tools/flattener/main.js +0 -483
  915. package/tools/flattener/projectRoot.js +0 -201
  916. package/tools/flattener/prompts.js +0 -44
  917. package/tools/flattener/stats.helpers.js +0 -368
  918. package/tools/flattener/stats.js +0 -75
  919. package/tools/flattener/test-matrix.js +0 -409
  920. package/tools/flattener/xml.js +0 -88
  921. package/tools/validate-bundles.js +0 -87
  922. package/v6-open-items.md +0 -17
  923. /package/src/{modules/bmm → bmm}/teams/team-fullstack.yaml +0 -0
  924. /package/src/{modules/bmgd/workflows/4-production → bmm/workflows/4-implementation}/sprint-planning/checklist.md +0 -0
  925. /package/src/{modules/bmm → bmm}/workflows/document-project/documentation-requirements.csv +0 -0
  926. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/deep-dive-template.md +0 -0
  927. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/index-template.md +0 -0
  928. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/project-overview-template.md +0 -0
  929. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/source-tree-template.md +0 -0
  930. /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
  931. /package/{src/utility/models/action-command-header.md → tools/cli/installers/lib/ide/templates/split/.gitkeep} +0 -0
@@ -1,1667 +0,0 @@
1
- const path = require('node:path');
2
- const fs = require('fs-extra');
3
- const chalk = require('chalk');
4
- const yaml = require('js-yaml');
5
- const { DependencyResolver } = require('../installers/lib/core/dependency-resolver');
6
- const { XmlHandler } = require('../lib/xml-handler');
7
- const { YamlXmlBuilder } = require('../lib/yaml-xml-builder');
8
- const { AgentPartyGenerator } = require('../lib/agent-party-generator');
9
- const xml2js = require('xml2js');
10
- const { getProjectRoot, getSourcePath, getModulePath } = require('../lib/project-root');
11
-
12
- class WebBundler {
13
- constructor(sourceDir = null, outputDir = 'web-bundles') {
14
- this.sourceDir = sourceDir || getSourcePath();
15
- this.outputDir = path.isAbsolute(outputDir) ? outputDir : path.join(getProjectRoot(), outputDir);
16
- this.modulesPath = getSourcePath('modules');
17
- this.utilityPath = getSourcePath('utility');
18
-
19
- this.dependencyResolver = new DependencyResolver();
20
- this.xmlHandler = new XmlHandler();
21
- this.yamlBuilder = new YamlXmlBuilder();
22
-
23
- // Cache for resolved dependencies to avoid duplicates
24
- this.dependencyCache = new Map();
25
-
26
- // Discovered agents and teams for manifest generation
27
- this.discoveredAgents = [];
28
- this.discoveredTeams = [];
29
-
30
- // Temporary directory for generated manifests
31
- this.tempDir = path.join(process.cwd(), '.bundler-temp');
32
- this.tempManifestDir = path.join(this.tempDir, 'bmad', '_cfg');
33
-
34
- // Bundle statistics
35
- this.stats = {
36
- totalAgents: 0,
37
- bundledAgents: 0,
38
- skippedAgents: 0,
39
- failedAgents: 0,
40
- invalidXml: 0,
41
- warnings: [],
42
- };
43
- }
44
-
45
- /**
46
- * Main entry point to bundle all modules
47
- */
48
- async bundleAll() {
49
- console.log(chalk.cyan.bold('═══════════════════════════════════════════════'));
50
- console.log(chalk.cyan.bold(' 🚀 Web Bundle Generation'));
51
- console.log(chalk.cyan.bold('═══════════════════════════════════════════════\n'));
52
-
53
- try {
54
- // Vendor cross-module workflows FIRST
55
- const modules = await this.discoverModules();
56
- for (const module of modules) {
57
- await this.vendorCrossModuleWorkflows(module);
58
- }
59
-
60
- // Pre-discover all modules to generate complete manifests
61
- for (const module of modules) {
62
- await this.preDiscoverModule(module);
63
- }
64
-
65
- // Create temporary manifest files
66
- await this.createTempManifests();
67
-
68
- // Process all modules
69
- for (const module of modules) {
70
- await this.bundleModule(module);
71
- }
72
-
73
- // Display summary
74
- this.displaySummary();
75
- } finally {
76
- // Clean up temp files
77
- await this.cleanupTempFiles();
78
- }
79
- }
80
-
81
- /**
82
- * Bundle a specific module
83
- */
84
- async bundleModule(moduleName) {
85
- const modulePath = path.join(this.modulesPath, moduleName);
86
-
87
- if (!(await fs.pathExists(modulePath))) {
88
- console.log(chalk.yellow(`Module ${moduleName} not found`));
89
- return { module: moduleName, agents: [], teams: [] };
90
- }
91
-
92
- console.log(chalk.bold(`\n📦 Bundling module: ${moduleName}`));
93
-
94
- const results = {
95
- module: moduleName,
96
- agents: [],
97
- teams: [],
98
- };
99
-
100
- // Vendor cross-module workflows first (if not already done by bundleAll)
101
- await this.vendorCrossModuleWorkflows(moduleName);
102
-
103
- // Pre-discover all agents and teams for manifest generation
104
- await this.preDiscoverModule(moduleName);
105
-
106
- // Ensure temp manifests exist (might not exist if called directly)
107
- if (!(await fs.pathExists(this.tempManifestDir))) {
108
- await this.createTempManifests();
109
- }
110
-
111
- // Process agents
112
- const agents = await this.discoverAgents(modulePath);
113
- for (const agent of agents) {
114
- try {
115
- await this.bundleAgent(moduleName, agent, false); // false = don't track again
116
- results.agents.push(agent);
117
- } catch (error) {
118
- console.error(` Failed to bundle agent ${agent}:`, error.message);
119
- }
120
- }
121
-
122
- // Process teams
123
- const teams = await this.discoverTeams(modulePath);
124
- for (const team of teams) {
125
- try {
126
- await this.bundleTeam(moduleName, team);
127
- results.teams.push(team);
128
- } catch (error) {
129
- console.error(` Failed to bundle team ${team}:`, error.message);
130
- }
131
- }
132
-
133
- return results;
134
- }
135
-
136
- /**
137
- * Bundle a single agent
138
- */
139
- async bundleAgent(moduleName, agentFile, shouldTrack = true) {
140
- const agentName = agentFile.endsWith('.agent.yaml') ? path.basename(agentFile, '.agent.yaml') : path.basename(agentFile, '.md');
141
- this.stats.totalAgents++;
142
-
143
- console.log(chalk.dim(` → Processing: ${agentName}`));
144
-
145
- // Vendor cross-module workflows first (if not already done)
146
- await this.vendorCrossModuleWorkflows(moduleName);
147
-
148
- const agentPath = path.join(this.modulesPath, moduleName, 'agents', agentFile);
149
-
150
- // Check if agent file exists
151
- if (!(await fs.pathExists(agentPath))) {
152
- this.stats.failedAgents++;
153
- console.log(chalk.red(` ✗ Agent file not found`));
154
- throw new Error(`Agent file not found: ${agentPath}`);
155
- }
156
-
157
- let content;
158
- let agentXml;
159
-
160
- // Handle YAML agents - build in-memory to XML
161
- if (agentFile.endsWith('.agent.yaml')) {
162
- // Build agent from YAML (no customize file for web bundles)
163
- const xmlContent = await this.yamlBuilder.buildFromYaml(agentPath, null, {
164
- includeMetadata: false, // Don't include build metadata in web bundles
165
- forWebBundle: true, // Use web-specific activation fragments
166
- });
167
-
168
- content = xmlContent;
169
- agentXml = this.extractAgentXml(xmlContent);
170
- } else {
171
- // Legacy MD format - read and extract XML
172
- content = await fs.readFile(agentPath, 'utf8');
173
- agentXml = this.extractAgentXml(content);
174
- }
175
-
176
- if (!agentXml) {
177
- this.stats.failedAgents++;
178
- console.log(chalk.red(` ✗ No agent XML found in ${agentFile}`));
179
- return;
180
- }
181
-
182
- // Check if agent has bundle="false" attribute
183
- if (this.shouldSkipBundling(agentXml)) {
184
- this.stats.skippedAgents++;
185
- console.log(chalk.gray(` ⊘ Skipped (bundle="false")`));
186
- return;
187
- }
188
-
189
- // Process {project-root} references in agent XML
190
- agentXml = this.processProjectRootReferences(agentXml);
191
-
192
- // Track for manifest generation BEFORE generating manifests (if not pre-discovered)
193
- if (shouldTrack) {
194
- const agentDetails = AgentPartyGenerator.extractAgentDetails(content, moduleName, agentName);
195
- if (agentDetails) {
196
- this.discoveredAgents.push(agentDetails);
197
- }
198
- }
199
-
200
- // Resolve dependencies with warning tracking
201
- const dependencyWarnings = [];
202
- const { dependencies, skippedWorkflows } = await this.resolveAgentDependencies(agentXml, moduleName, dependencyWarnings);
203
-
204
- if (dependencyWarnings.length > 0) {
205
- this.stats.warnings.push({ agent: agentName, warnings: dependencyWarnings });
206
- }
207
-
208
- // Check for module's default-party.csv and include it as agent manifest
209
- const defaultPartyPath = path.join(this.modulesPath, moduleName, 'teams', 'default-party.csv');
210
- if (await fs.pathExists(defaultPartyPath)) {
211
- const partyContent = await fs.readFile(defaultPartyPath, 'utf8');
212
- // Process any placeholders in the CSV content
213
- const processedPartyContent = this.processProjectRootReferences(partyContent);
214
- // Wrap as text to preserve raw CSV format in CDATA
215
- const wrappedParty = this.wrapContentInXml(processedPartyContent, 'bmad/_cfg/agent-manifest.csv', 'text');
216
- dependencies.set('bmad/_cfg/agent-manifest.csv', wrappedParty);
217
- console.log(chalk.gray(` + Added party manifest from module default-party.csv`));
218
- }
219
-
220
- // Remove commands for skipped workflows from agent XML
221
- if (skippedWorkflows.length > 0) {
222
- agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
223
- }
224
-
225
- // Build the bundle (no manifests for individual agents)
226
- const bundle = this.buildAgentBundle(agentXml, dependencies);
227
-
228
- // Validate XML
229
- const isValid = await this.validateXml(bundle);
230
- if (!isValid) {
231
- this.stats.invalidXml++;
232
- console.log(chalk.red(` ⚠ Invalid XML generated!`));
233
- }
234
-
235
- // Write bundle to output
236
- const outputPath = path.join(this.outputDir, moduleName, 'agents', `${agentName}.xml`);
237
- await fs.ensureDir(path.dirname(outputPath));
238
- await fs.writeFile(outputPath, bundle, 'utf8');
239
-
240
- this.stats.bundledAgents++;
241
- const statusIcon = isValid ? chalk.green('✓') : chalk.yellow('⚠');
242
- console.log(` ${statusIcon} Bundled: ${agentName}.xml${isValid ? '' : chalk.yellow(' (invalid XML)')}`);
243
- }
244
-
245
- /**
246
- * Bundle a team - includes orchestrator and all agents with their dependencies
247
- */
248
- async bundleTeam(moduleName, teamFile) {
249
- const teamName = path.basename(teamFile, path.extname(teamFile));
250
- console.log(chalk.dim(` → Processing team: ${teamName}`));
251
-
252
- const teamPath = path.join(this.modulesPath, moduleName, 'teams', teamFile);
253
-
254
- // Check if team file exists
255
- if (!(await fs.pathExists(teamPath))) {
256
- console.log(chalk.red(` ✗ Team file not found`));
257
- throw new Error(`Team file not found: ${teamPath}`);
258
- }
259
-
260
- // Read and parse team YAML
261
- const teamContent = await fs.readFile(teamPath, 'utf8');
262
- const teamConfig = yaml.load(teamContent);
263
-
264
- if (!teamConfig || !teamConfig.bundle) {
265
- console.log(chalk.red(` ✗ Invalid team configuration`));
266
- return;
267
- }
268
-
269
- // Start building the team bundle
270
- const dependencies = new Map();
271
- const processed = new Set();
272
- const allAgentXmls = [];
273
- const warnings = [];
274
-
275
- // Check if team has a party CSV file (agent manifest)
276
- const hasPartyFile = teamConfig.party && teamConfig.party.endsWith('.csv');
277
- if (hasPartyFile) {
278
- // Load the party CSV and add it as bmad/_cfg/agent-manifest.csv
279
- const partyPath = path.join(path.dirname(teamPath), teamConfig.party.replace(/^\.\//, ''));
280
- if (await fs.pathExists(partyPath)) {
281
- const partyContent = await fs.readFile(partyPath, 'utf8');
282
- // Process any placeholders in the CSV content
283
- const processedPartyContent = this.processProjectRootReferences(partyContent);
284
- // Wrap as text/csv to preserve raw CSV format in CDATA
285
- const wrappedParty = this.wrapContentInXml(processedPartyContent, 'bmad/_cfg/agent-manifest.csv', 'text');
286
- dependencies.set('bmad/_cfg/agent-manifest.csv', wrappedParty);
287
- console.log(chalk.gray(` + Added agent manifest from: ${teamConfig.party}`));
288
- } else {
289
- console.log(chalk.yellow(` ⚠ Party file not found: ${partyPath}`));
290
- }
291
- }
292
-
293
- // 1. First, always add the bmad-web-orchestrator (XML file only, no transformation needed)
294
- const orchestratorXmlPath = path.join(this.sourceDir, 'core', 'agents', 'bmad-web-orchestrator.agent.xml');
295
-
296
- if (await fs.pathExists(orchestratorXmlPath)) {
297
- // Read the XML file directly - no transformation needed
298
- const xmlContent = await fs.readFile(orchestratorXmlPath, 'utf8');
299
- let orchestratorXml = xmlContent.trim();
300
-
301
- // Process {project-root} references
302
- orchestratorXml = this.processProjectRootReferences(orchestratorXml);
303
-
304
- // Inject help/exit menu items only (orchestrator has its own activation)
305
- orchestratorXml = this.injectHelpExitMenuItems(orchestratorXml);
306
-
307
- // Resolve orchestrator dependencies
308
- const { dependencies: orchDeps } = await this.resolveAgentDependencies(orchestratorXml, 'core', warnings);
309
-
310
- // Merge orchestrator dependencies
311
- for (const [id, content] of orchDeps) {
312
- if (!dependencies.has(id)) {
313
- dependencies.set(id, content);
314
- }
315
- }
316
-
317
- // Add orchestrator XML first
318
- allAgentXmls.push(orchestratorXml);
319
- console.log(chalk.gray(` + Added orchestrator: bmad-web-orchestrator`));
320
- } else {
321
- console.log(chalk.yellow(` ⚠ Orchestrator not found at: ${orchestratorXmlPath}`));
322
- }
323
-
324
- // 2. Determine which agents to include
325
- let agentsToBundle = [];
326
-
327
- if (teamConfig.agents === '*' || (Array.isArray(teamConfig.agents) && teamConfig.agents.includes('*'))) {
328
- // Include all agents from the module
329
- const agentsPath = path.join(this.modulesPath, moduleName, 'agents');
330
- if (await fs.pathExists(agentsPath)) {
331
- const agentFiles = await fs.readdir(agentsPath);
332
- agentsToBundle = agentFiles
333
- .filter((file) => file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme')))
334
- .map((file) => file.replace(/\.(agent\.yaml|md)$/, ''));
335
- }
336
- } else if (Array.isArray(teamConfig.agents)) {
337
- // Include specific agents listed
338
- agentsToBundle = teamConfig.agents;
339
- } else {
340
- console.log(chalk.yellow(` ⚠ No agents specified in team configuration`));
341
- }
342
-
343
- // 3. Process each agent and their dependencies
344
- for (const agentName of agentsToBundle) {
345
- // Try YAML first, then MD
346
- let agentPath = path.join(this.modulesPath, moduleName, 'agents', `${agentName}.agent.yaml`);
347
- let isYaml = await fs.pathExists(agentPath);
348
-
349
- if (!isYaml) {
350
- agentPath = path.join(this.modulesPath, moduleName, 'agents', `${agentName}.md`);
351
- if (!(await fs.pathExists(agentPath))) {
352
- console.log(chalk.yellow(` ⚠ Agent not found: ${agentName}`));
353
- continue;
354
- }
355
- }
356
-
357
- let agentXml;
358
-
359
- if (isYaml) {
360
- // Build YAML agent in-memory - skip activation for team agents (orchestrator handles it)
361
- const xmlContent = await this.yamlBuilder.buildFromYaml(agentPath, null, {
362
- includeMetadata: false,
363
- skipActivation: true, // Skip activation for team agents
364
- });
365
- agentXml = this.extractAgentXml(xmlContent);
366
- } else {
367
- // Read legacy MD agent
368
- const agentContent = await fs.readFile(agentPath, 'utf8');
369
- agentXml = this.extractAgentXml(agentContent);
370
- }
371
-
372
- if (!agentXml) {
373
- console.log(chalk.yellow(` ⚠ No XML found in agent: ${agentName}`));
374
- continue;
375
- }
376
-
377
- // Skip agents with bundle="false"
378
- if (this.shouldSkipBundling(agentXml)) {
379
- console.log(chalk.gray(` ⊘ Skipped agent (bundle="false"): ${agentName}`));
380
- continue;
381
- }
382
-
383
- // Process {project-root} references
384
- agentXml = this.processProjectRootReferences(agentXml);
385
-
386
- // Resolve agent dependencies
387
- const agentWarnings = [];
388
- const { dependencies: agentDeps, skippedWorkflows } = await this.resolveAgentDependencies(agentXml, moduleName, agentWarnings);
389
-
390
- if (agentWarnings.length > 0) {
391
- warnings.push({ agent: agentName, warnings: agentWarnings });
392
- }
393
-
394
- // Remove commands for skipped workflows from agent XML
395
- if (skippedWorkflows.length > 0) {
396
- agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
397
- }
398
-
399
- // Merge agent dependencies (deduplicate)
400
- for (const [id, content] of agentDeps) {
401
- if (!dependencies.has(id)) {
402
- dependencies.set(id, content);
403
- }
404
- }
405
-
406
- // Skip web activation injection for team agents - orchestrator handles everything
407
- // Only inject help/exit menu items if missing
408
- agentXml = this.injectHelpExitMenuItems(agentXml);
409
-
410
- // Add agent XML to the collection
411
- allAgentXmls.push(agentXml);
412
- console.log(chalk.gray(` + Added agent: ${agentName}`));
413
- }
414
-
415
- // 4. Build the team bundle XML
416
- const bundle = this.buildTeamBundle(teamConfig.bundle, allAgentXmls, dependencies);
417
-
418
- // 5. Validate XML
419
- const isValid = await this.validateXml(bundle);
420
- if (!isValid) {
421
- console.log(chalk.red(` ⚠ Invalid XML generated for team!`));
422
- }
423
-
424
- // 6. Write bundle to output
425
- const outputPath = path.join(this.outputDir, moduleName, 'teams', `${teamName}.xml`);
426
- await fs.ensureDir(path.dirname(outputPath));
427
- await fs.writeFile(outputPath, bundle, 'utf8');
428
-
429
- const statusIcon = isValid ? chalk.green('✓') : chalk.yellow('⚠');
430
- console.log(` ${statusIcon} Bundled team: ${teamName}.xml${isValid ? '' : chalk.yellow(' (invalid XML)')}`);
431
-
432
- // Track warnings
433
- if (warnings.length > 0) {
434
- this.stats.warnings.push(...warnings);
435
- }
436
- }
437
-
438
- /**
439
- * Build the final team bundle XML
440
- */
441
- buildTeamBundle(teamMetadata, agentXmls, dependencies) {
442
- const parts = ['<?xml version="1.0" encoding="UTF-8"?>', '<team-bundle>', ' <!-- Agent Definitions -->', ' <agents>'];
443
-
444
- for (const agentXml of agentXmls) {
445
- // Indent each agent XML properly (add 4 spaces to each line)
446
- const indentedAgent = agentXml
447
- .split('\n')
448
- .map((line) => ' ' + line)
449
- .join('\n');
450
- parts.push(indentedAgent);
451
- }
452
-
453
- parts.push(' </agents>');
454
-
455
- // Add all dependencies
456
- if (dependencies && dependencies.size > 0) {
457
- parts.push('', ' <!-- Shared Dependencies -->', ' <dependencies>');
458
-
459
- for (const [id, content] of dependencies) {
460
- // All dependencies are now consistently wrapped in <file> elements
461
- // Indent properly (add 4 spaces to each line)
462
- const indentedContent = content
463
- .split('\n')
464
- .map((line) => ' ' + line)
465
- .join('\n');
466
- parts.push(indentedContent);
467
- }
468
-
469
- parts.push(' </dependencies>');
470
- }
471
-
472
- parts.push('</team-bundle>');
473
-
474
- return parts.join('\n');
475
- }
476
-
477
- /**
478
- * Vendor cross-module workflows for a module
479
- * Scans source agent YAML files for workflow-install attributes and copies workflows
480
- */
481
- async vendorCrossModuleWorkflows(moduleName) {
482
- const modulePath = path.join(this.modulesPath, moduleName);
483
- const agentsPath = path.join(modulePath, 'agents');
484
-
485
- if (!(await fs.pathExists(agentsPath))) {
486
- return;
487
- }
488
-
489
- // Find all agent YAML files
490
- const files = await fs.readdir(agentsPath);
491
- const yamlFiles = files.filter((f) => f.endsWith('.agent.yaml'));
492
-
493
- for (const agentFile of yamlFiles) {
494
- const agentPath = path.join(agentsPath, agentFile);
495
- const agentYaml = yaml.load(await fs.readFile(agentPath, 'utf8'));
496
-
497
- const menuItems = agentYaml?.agent?.menu || [];
498
- const workflowInstallItems = menuItems.filter((item) => item['workflow-install']);
499
-
500
- for (const item of workflowInstallItems) {
501
- const sourceWorkflowPath = item.workflow;
502
- const installWorkflowPath = item['workflow-install'];
503
-
504
- if (!sourceWorkflowPath || !installWorkflowPath) {
505
- continue;
506
- }
507
-
508
- // Parse paths to extract module and workflow location
509
- // Support both {project-root}/bmad/... and {project-root}/{bmad_folder}/... patterns
510
- const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
511
- const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
512
-
513
- if (!sourceMatch || !installMatch) {
514
- continue;
515
- }
516
-
517
- const sourceModule = sourceMatch[1];
518
- const sourceWorkflowRelPath = sourceMatch[2];
519
- const installModule = installMatch[1];
520
- const installWorkflowRelPath = installMatch[2];
521
-
522
- // Build actual filesystem paths
523
- const actualSourceWorkflowPath = path.join(this.modulesPath, sourceModule, 'workflows', sourceWorkflowRelPath);
524
- const actualDestWorkflowPath = path.join(this.modulesPath, installModule, 'workflows', installWorkflowRelPath);
525
-
526
- // Check if source workflow exists
527
- if (!(await fs.pathExists(actualSourceWorkflowPath))) {
528
- console.log(chalk.yellow(` ⚠ Source workflow not found for vendoring: ${sourceWorkflowPath}`));
529
- continue;
530
- }
531
-
532
- // Check if destination already exists (skip if already vendored)
533
- if (await fs.pathExists(actualDestWorkflowPath)) {
534
- continue;
535
- }
536
-
537
- // Get workflow directory (workflow.yaml is in a directory with other files)
538
- const sourceWorkflowDir = path.dirname(actualSourceWorkflowPath);
539
- const destWorkflowDir = path.dirname(actualDestWorkflowPath);
540
-
541
- // Copy entire workflow directory
542
- await fs.copy(sourceWorkflowDir, destWorkflowDir, { overwrite: false });
543
-
544
- // Update config_source in the vendored workflow.yaml
545
- const workflowYamlPath = actualDestWorkflowPath;
546
- if (await fs.pathExists(workflowYamlPath)) {
547
- await this.updateWorkflowConfigSource(workflowYamlPath, installModule);
548
- }
549
-
550
- console.log(chalk.dim(` → Vendored workflow: ${sourceWorkflowRelPath} → ${installModule}/workflows/${installWorkflowRelPath}`));
551
- }
552
- }
553
- }
554
-
555
- /**
556
- * Update config_source in a vendored workflow YAML file
557
- */
558
- async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
559
- let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
560
-
561
- // Replace config_source with new module reference
562
- // Support both old format (bmad) and new format ({bmad_folder})
563
- const configSourcePattern = /config_source:\s*["']?\{project-root\}\/(?:\{bmad_folder\}|bmad)\/[^/]+\/config\.yaml["']?/g;
564
- const newConfigSource = `config_source: "{project-root}/{bmad_folder}/${newModuleName}/config.yaml"`;
565
-
566
- const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
567
- await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
568
- }
569
-
570
- /**
571
- * Pre-discover all agents and teams in a module for manifest generation
572
- */
573
- async preDiscoverModule(moduleName) {
574
- const modulePath = path.join(this.modulesPath, moduleName);
575
-
576
- // Clear any previously discovered agents for this module
577
- this.discoveredAgents = this.discoveredAgents.filter((a) => a.module !== moduleName);
578
-
579
- // Discover agents
580
- const agentsPath = path.join(modulePath, 'agents');
581
- if (await fs.pathExists(agentsPath)) {
582
- const files = await fs.readdir(agentsPath);
583
- for (const file of files) {
584
- if (file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme'))) {
585
- const agentPath = path.join(agentsPath, file);
586
- let content;
587
-
588
- if (file.endsWith('.agent.yaml')) {
589
- // Build YAML agent in-memory
590
- content = await this.yamlBuilder.buildFromYaml(agentPath, null, {
591
- includeMetadata: false,
592
- });
593
- } else {
594
- // Read legacy MD agent
595
- content = await fs.readFile(agentPath, 'utf8');
596
- }
597
-
598
- const agentXml = this.extractAgentXml(content);
599
-
600
- if (agentXml) {
601
- // Skip agents with bundle="false"
602
- if (this.shouldSkipBundling(agentXml)) {
603
- continue;
604
- }
605
-
606
- const agentName = file.endsWith('.agent.yaml') ? path.basename(file, '.agent.yaml') : path.basename(file, '.md');
607
- // Use the shared generator to extract agent details (pass full content)
608
- const agentDetails = AgentPartyGenerator.extractAgentDetails(content, moduleName, agentName);
609
- if (agentDetails) {
610
- this.discoveredAgents.push(agentDetails);
611
- }
612
- }
613
- }
614
- }
615
- }
616
-
617
- // TODO: Discover teams when implemented
618
- }
619
-
620
- /**
621
- * Extract agent XML from markdown content
622
- */
623
- extractAgentXml(content) {
624
- // Try 4 backticks first (can contain 3 backtick blocks inside)
625
- let match = content.match(/````xml\s*([\s\S]*?)````/);
626
- if (!match) {
627
- // Fall back to 3 backticks if no 4-backtick block found
628
- match = content.match(/```xml\s*([\s\S]*?)```/);
629
- }
630
-
631
- if (match) {
632
- const xmlContent = match[1];
633
- const agentMatch = xmlContent.match(/<agent[^>]*>[\s\S]*?<\/agent>/);
634
- return agentMatch ? agentMatch[0] : null;
635
- }
636
-
637
- // Fall back to direct extraction
638
- match = content.match(/<agent[^>]*>[\s\S]*?<\/agent>/);
639
- return match ? match[0] : null;
640
- }
641
-
642
- /**
643
- * Resolve all dependencies for an agent
644
- */
645
- async resolveAgentDependencies(agentXml, moduleName, warnings = []) {
646
- const dependencies = new Map();
647
- const processed = new Set();
648
- const skippedWorkflows = [];
649
-
650
- // Extract file references from agent XML
651
- const { refs, workflowRefs } = this.extractFileReferences(agentXml);
652
-
653
- // Process regular file references
654
- for (const ref of refs) {
655
- await this.processFileDependency(ref, dependencies, processed, moduleName, warnings);
656
- }
657
-
658
- // Process workflow references with special handling
659
- for (const workflowRef of workflowRefs) {
660
- const result = await this.processWorkflowDependency(workflowRef, dependencies, processed, moduleName, warnings);
661
- if (result && result.skipped) {
662
- skippedWorkflows.push(workflowRef);
663
- }
664
- }
665
-
666
- return { dependencies, skippedWorkflows };
667
- }
668
-
669
- /**
670
- * Extract file references from agent XML
671
- */
672
- extractFileReferences(xml) {
673
- const refs = new Set();
674
- const workflowRefs = new Set();
675
-
676
- // Match various file reference patterns
677
- const patterns = [
678
- /exec="([^"]+)"/g, // Command exec paths
679
- /tmpl="([^"]+)"/g, // Template paths
680
- /data="([^"]+)"/g, // Data file paths
681
- /file="([^"]+)"/g, // Generic file refs
682
- /src="([^"]+)"/g, // Source paths
683
- /system-prompts="([^"]+)"/g,
684
- /tools="([^"]+)"/g,
685
- /knowledge="([^"]+)"/g,
686
- /{project-root}\/([^"'\s<>]+)/g, // Legacy {project-root} paths
687
- /\bbmad\/([^"'\s<>]+)/g, // Direct bmad/ paths (after {bmad_folder} replacement)
688
- ];
689
-
690
- for (const pattern of patterns) {
691
- let match;
692
- while ((match = pattern.exec(xml)) !== null) {
693
- let filePath = match[1];
694
- // Remove {project-root} prefix if present
695
- filePath = filePath.replace(/^{project-root}\//, '');
696
- // Remove {bmad_folder} prefix if present (should be rare, mostly replaced already)
697
- filePath = filePath.replace(/^{bmad_folder}\//, 'bmad/');
698
-
699
- // For bmad/ pattern, prepend 'bmad/' since it was captured without it
700
- if (pattern.source.includes(String.raw`\bbmad\/`)) {
701
- filePath = 'bmad/' + filePath;
702
- }
703
-
704
- // Skip obvious placeholder/example paths
705
- if (filePath && !filePath.includes('path/to/') && !filePath.includes('example') && !filePath.includes('...')) {
706
- refs.add(filePath);
707
- }
708
- }
709
- }
710
-
711
- // Extract workflow references - both 'workflow' and 'run-workflow' attributes
712
- const workflowPatterns = [
713
- /workflow="([^"]+)"/g, // Menu items with workflow attribute
714
- /run-workflow="([^"]+)"/g, // Commands with run-workflow attribute
715
- /validate-workflow="([^"]+)"/g, // Validation workflow references
716
- ];
717
-
718
- for (const pattern of workflowPatterns) {
719
- let match;
720
- while ((match = pattern.exec(xml)) !== null) {
721
- let workflowPath = match[1];
722
- workflowPath = workflowPath.replace(/^{project-root}\//, '');
723
- // Remove {bmad_folder} prefix if present and replace with bmad
724
- workflowPath = workflowPath.replace(/^{bmad_folder}\//, 'bmad/');
725
-
726
- // Skip obvious placeholder/example paths
727
- if (workflowPath && workflowPath.endsWith('.yaml') && !workflowPath.includes('path/to/') && !workflowPath.includes('example')) {
728
- workflowRefs.add(workflowPath);
729
- }
730
- }
731
- }
732
-
733
- return { refs: [...refs], workflowRefs: [...workflowRefs] };
734
- }
735
-
736
- /**
737
- * Remove commands from agent XML that reference skipped workflows
738
- */
739
- removeSkippedWorkflowCommands(agentXml, skippedWorkflows) {
740
- let modifiedXml = agentXml;
741
-
742
- // For each skipped workflow, find and remove menu items and commands
743
- for (const workflowPath of skippedWorkflows) {
744
- // Need to escape special regex characters in the path
745
- const escapedPath = workflowPath.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
746
-
747
- // Pattern 1: Remove <item> tags with workflow attribute
748
- // Match: <item cmd="..." workflow="workflowPath">...</item>
749
- const itemWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
750
- modifiedXml = modifiedXml.replace(itemWorkflowPattern, '');
751
-
752
- // Pattern 2: Remove <item> tags with run-workflow attribute
753
- // Match: <item cmd="..." run-workflow="workflowPath">...</item>
754
- const itemRunWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
755
- modifiedXml = modifiedXml.replace(itemRunWorkflowPattern, '');
756
-
757
- // Pattern 3: Remove <c> tags with run-workflow attribute (legacy)
758
- // Match: <c cmd="..." run-workflow="workflowPath">...</c>
759
- const cPattern = new RegExp(`\\s*<c\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
760
- modifiedXml = modifiedXml.replace(cPattern, '');
761
- }
762
-
763
- return modifiedXml;
764
- }
765
-
766
- /**
767
- * Process a file dependency recursively
768
- */
769
- async processFileDependency(filePath, dependencies, processed, moduleName, warnings = []) {
770
- // Skip workflow YAML files - they're handled by processWorkflowDependency
771
- if (filePath.includes('/workflow') && filePath.endsWith('workflow.yaml')) {
772
- return;
773
- }
774
-
775
- // Skip if already processed
776
- if (processed.has(filePath)) {
777
- return;
778
- }
779
- processed.add(filePath);
780
-
781
- // Skip agent-manifest.csv manifest for web bundles (agents are already bundled)
782
- if (filePath === 'bmad/_cfg/agent-manifest.csv' || filePath.endsWith('/agent-manifest.csv')) {
783
- return;
784
- }
785
-
786
- // Handle wildcard patterns
787
- if (filePath.includes('*')) {
788
- await this.processWildcardDependency(filePath, dependencies, processed, moduleName, warnings);
789
- return;
790
- }
791
-
792
- // Resolve actual file path
793
- const actualPath = this.resolveFilePath(filePath, moduleName);
794
-
795
- if (!actualPath || !(await fs.pathExists(actualPath))) {
796
- warnings.push(filePath);
797
- return;
798
- }
799
-
800
- // Read file content
801
- let content = await fs.readFile(actualPath, 'utf8');
802
-
803
- // Process {project-root} references
804
- content = this.processProjectRootReferences(content);
805
-
806
- // Extract dependencies from frontmatter if present
807
- const frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
808
- if (frontmatterMatch) {
809
- const frontmatter = frontmatterMatch[1];
810
- // Look for dependencies in frontmatter
811
- const depMatch = frontmatter.match(/dependencies:\s*\[(.*?)\]/);
812
- if (depMatch) {
813
- const deps = depMatch[1].match(/['"]([^'"]+)['"]/g);
814
- if (deps) {
815
- for (const dep of deps) {
816
- let depPath = dep.replaceAll(/['"]/g, '').replace(/^{project-root}\//, '');
817
- depPath = depPath.replace(/^{bmad_folder}\//, 'bmad/');
818
- if (depPath && !processed.has(depPath)) {
819
- await this.processFileDependency(depPath, dependencies, processed, moduleName, warnings);
820
- }
821
- }
822
- }
823
- }
824
- // Look for template references
825
- const templateMatch = frontmatter.match(/template:\s*\[(.*?)\]/);
826
- if (templateMatch) {
827
- const templates = templateMatch[1].match(/['"]([^'"]+)['"]/g);
828
- if (templates) {
829
- for (const template of templates) {
830
- let templatePath = template.replaceAll(/['"]/g, '').replace(/^{project-root}\//, '');
831
- templatePath = templatePath.replace(/^{bmad_folder}\//, 'bmad/');
832
- if (templatePath && !processed.has(templatePath)) {
833
- await this.processFileDependency(templatePath, dependencies, processed, moduleName, warnings);
834
- }
835
- }
836
- }
837
- }
838
- }
839
-
840
- // Extract XML from markdown if applicable
841
- const ext = path.extname(actualPath).toLowerCase();
842
- let processedContent = content;
843
-
844
- switch (ext) {
845
- case '.md': {
846
- // Try to extract XML from markdown - handle both 3 and 4 backtick blocks
847
- // First try 4 backticks (which can contain 3 backtick blocks inside)
848
- let xmlMatches = [...content.matchAll(/````xml\s*([\s\S]*?)````/g)];
849
-
850
- // If no 4-backtick blocks, try 3 backticks
851
- if (xmlMatches.length === 0) {
852
- xmlMatches = [...content.matchAll(/```xml\s*([\s\S]*?)```/g)];
853
- }
854
-
855
- const xmlBlocks = [];
856
-
857
- for (const match of xmlMatches) {
858
- if (match[1]) {
859
- xmlBlocks.push(match[1].trim());
860
- }
861
- }
862
-
863
- if (xmlBlocks.length > 0) {
864
- // For XML content, just include it directly (it's already valid XML)
865
- processedContent = xmlBlocks.join('\n\n');
866
- } else {
867
- // No XML blocks found, skip non-XML markdown files
868
- return;
869
- }
870
-
871
- break;
872
- }
873
- case '.csv': {
874
- // CSV files need special handling - convert to XML file-index
875
- const lines = content.split('\n').filter((line) => line.trim());
876
- if (lines.length === 0) return;
877
-
878
- const headers = lines[0].split(',').map((h) => h.trim());
879
- const rows = lines.slice(1);
880
-
881
- const indexParts = [`<file-index id="${filePath}">`];
882
- indexParts.push(' <items>');
883
-
884
- // Track files referenced in CSV for additional bundling
885
- const referencedFiles = new Set();
886
-
887
- for (const row of rows) {
888
- const values = row.split(',').map((v) => v.trim());
889
- if (values.every((v) => !v)) continue;
890
-
891
- indexParts.push(' <item>');
892
- for (const [i, header] of headers.entries()) {
893
- const value = values[i] || '';
894
- const tagName = header.toLowerCase().replaceAll(/[^a-z0-9]/g, '_');
895
- indexParts.push(` <${tagName}>${value}</${tagName}>`);
896
-
897
- // Track referenced files
898
- if (header.toLowerCase().includes('file') && value.endsWith('.md')) {
899
- // Build path relative to CSV location
900
- const csvDir = path.dirname(actualPath);
901
- const refPath = path.join(csvDir, value);
902
- if (fs.existsSync(refPath)) {
903
- const refId = filePath.replace('index.csv', value);
904
- referencedFiles.add(refId);
905
- }
906
- }
907
- }
908
- indexParts.push(' </item>');
909
- }
910
-
911
- indexParts.push(' </items>', '</file-index>');
912
-
913
- // Store the XML version wrapped in a file element
914
- const csvXml = indexParts.join('\n');
915
- const wrappedCsv = `<file id="${filePath}" type="xml">\n${csvXml}\n</file>`;
916
- dependencies.set(filePath, wrappedCsv);
917
-
918
- // Process referenced files from CSV
919
- for (const refId of referencedFiles) {
920
- if (!processed.has(refId)) {
921
- await this.processFileDependency(refId, dependencies, processed, moduleName, warnings);
922
- }
923
- }
924
-
925
- return;
926
- }
927
- case '.xml': {
928
- // XML files can be included directly
929
- processedContent = content;
930
- break;
931
- }
932
- default: {
933
- // For other non-XML file types, skip them
934
- return;
935
- }
936
- }
937
-
938
- // Determine file type for wrapping
939
- let fileType = 'text';
940
- if (ext === '.xml' || (ext === '.md' && processedContent.trim().startsWith('<'))) {
941
- fileType = 'xml';
942
- } else
943
- switch (ext) {
944
- case '.yaml':
945
- case '.yml': {
946
- fileType = 'yaml';
947
-
948
- break;
949
- }
950
- case '.json': {
951
- fileType = 'json';
952
-
953
- break;
954
- }
955
- case '.md': {
956
- fileType = 'md';
957
-
958
- break;
959
- }
960
- // No default
961
- }
962
-
963
- // Wrap content in file element and store
964
- const wrappedContent = this.wrapContentInXml(processedContent, filePath, fileType);
965
- dependencies.set(filePath, wrappedContent);
966
-
967
- // Recursively scan for more dependencies
968
- const { refs: nestedRefs } = this.extractFileReferences(processedContent);
969
- for (const ref of nestedRefs) {
970
- await this.processFileDependency(ref, dependencies, processed, moduleName, warnings);
971
- }
972
- }
973
-
974
- /**
975
- * Process a workflow YAML file and its bundle files
976
- */
977
- async processWorkflowDependency(workflowPath, dependencies, processed, moduleName, warnings = []) {
978
- // Skip if already processed
979
- if (processed.has(workflowPath)) {
980
- return { skipped: false };
981
- }
982
- processed.add(workflowPath);
983
-
984
- // Resolve actual file path
985
- const actualPath = this.resolveFilePath(workflowPath, moduleName);
986
-
987
- if (!actualPath || !(await fs.pathExists(actualPath))) {
988
- warnings.push(workflowPath);
989
- return { skipped: true };
990
- }
991
-
992
- // Read and parse YAML file
993
- const yamlContent = await fs.readFile(actualPath, 'utf8');
994
- let workflowConfig;
995
-
996
- try {
997
- workflowConfig = yaml.load(yamlContent);
998
- } catch (error) {
999
- warnings.push(`${workflowPath} (invalid YAML: ${error.message})`);
1000
- return { skipped: true };
1001
- }
1002
-
1003
- // Check if web_bundle is explicitly set to false
1004
- if (workflowConfig.web_bundle === false) {
1005
- // Mark this workflow as skipped so we can remove the command from agent
1006
- return { skipped: true, workflowPath };
1007
- }
1008
-
1009
- // Create YAML content with only web_bundle section (flattened)
1010
- let bundleYamlContent;
1011
- if (workflowConfig.web_bundle && typeof workflowConfig.web_bundle === 'object') {
1012
- // Only include the web_bundle content, flattened to root level
1013
- bundleYamlContent = yaml.dump(workflowConfig.web_bundle);
1014
- } else {
1015
- // If no web_bundle section, include full YAML
1016
- bundleYamlContent = yamlContent;
1017
- }
1018
-
1019
- // Process {project-root} and {bmad_folder} references in the YAML content
1020
- bundleYamlContent = this.processProjectRootReferences(bundleYamlContent);
1021
-
1022
- // Include the YAML file with only web_bundle content, wrapped in XML
1023
- // Process the workflow path to create a clean ID
1024
- let yamlId = workflowPath.replace(/^{project-root}\//, '');
1025
- yamlId = yamlId.replace(/^{bmad_folder}\//, 'bmad/');
1026
- const wrappedYaml = this.wrapContentInXml(bundleYamlContent, yamlId, 'yaml');
1027
- dependencies.set(yamlId, wrappedYaml);
1028
-
1029
- // Always include core workflow task when processing workflows
1030
- await this.includeCoreWorkflowFiles(dependencies, processed, moduleName, warnings);
1031
-
1032
- // Check if advanced elicitation is enabled
1033
- if (workflowConfig.web_bundle && workflowConfig.web_bundle.use_advanced_elicitation) {
1034
- await this.includeAdvancedElicitationFiles(dependencies, processed, moduleName, warnings);
1035
- }
1036
-
1037
- // Process web_bundle_files if they exist
1038
- if (workflowConfig.web_bundle && workflowConfig.web_bundle.web_bundle_files) {
1039
- const bundleFiles = workflowConfig.web_bundle.web_bundle_files;
1040
-
1041
- for (const bundleFilePath of bundleFiles) {
1042
- // Process the file path to create a clean ID for checking if already processed
1043
- let cleanFilePath = bundleFilePath.replace(/^{project-root}\//, '');
1044
- cleanFilePath = cleanFilePath.replace(/^{bmad_folder}\//, 'bmad/');
1045
-
1046
- if (processed.has(cleanFilePath)) {
1047
- continue;
1048
- }
1049
-
1050
- const bundleActualPath = this.resolveFilePath(bundleFilePath, moduleName);
1051
-
1052
- if (!bundleActualPath || !(await fs.pathExists(bundleActualPath))) {
1053
- warnings.push(bundleFilePath);
1054
- continue;
1055
- }
1056
-
1057
- // Check if this is another workflow.yaml file - if so, recursively process it
1058
- if (bundleFilePath.endsWith('workflow.yaml')) {
1059
- // Recursively process this workflow and its dependencies
1060
- await this.processWorkflowDependency(bundleFilePath, dependencies, processed, moduleName, warnings);
1061
- } else {
1062
- // Regular file - process normally
1063
- processed.add(cleanFilePath);
1064
-
1065
- // Read the file content
1066
- let fileContent = await fs.readFile(bundleActualPath, 'utf8');
1067
- const fileExt = path.extname(bundleActualPath).toLowerCase().replace('.', '');
1068
-
1069
- // Process {project-root} references before wrapping
1070
- fileContent = this.processProjectRootReferences(fileContent);
1071
-
1072
- // Wrap in XML with proper escaping
1073
- const wrappedContent = this.wrapContentInXml(fileContent, cleanFilePath, fileExt);
1074
- dependencies.set(cleanFilePath, wrappedContent);
1075
- }
1076
- }
1077
- }
1078
-
1079
- return { skipped: false };
1080
- }
1081
-
1082
- /**
1083
- * Include core workflow task files
1084
- */
1085
- async includeCoreWorkflowFiles(dependencies, processed, moduleName, warnings = []) {
1086
- const coreWorkflowPath = 'bmad/core/tasks/workflow.xml';
1087
-
1088
- if (processed.has(coreWorkflowPath)) {
1089
- return;
1090
- }
1091
- processed.add(coreWorkflowPath);
1092
-
1093
- const actualPath = this.resolveFilePath(coreWorkflowPath, moduleName);
1094
-
1095
- if (!actualPath || !(await fs.pathExists(actualPath))) {
1096
- warnings.push(coreWorkflowPath);
1097
- return;
1098
- }
1099
-
1100
- let fileContent = await fs.readFile(actualPath, 'utf8');
1101
- // Process {project-root} and {bmad_folder} references
1102
- fileContent = this.processProjectRootReferences(fileContent);
1103
- const wrappedContent = this.wrapContentInXml(fileContent, coreWorkflowPath, 'xml');
1104
- dependencies.set(coreWorkflowPath, wrappedContent);
1105
- }
1106
-
1107
- /**
1108
- * Include advanced elicitation files
1109
- */
1110
- async includeAdvancedElicitationFiles(dependencies, processed, moduleName, warnings = []) {
1111
- const elicitationFiles = ['bmad/core/tasks/advanced-elicitation.xml', 'bmad/core/tasks/advanced-elicitation-methods.csv'];
1112
-
1113
- for (const filePath of elicitationFiles) {
1114
- if (processed.has(filePath)) {
1115
- continue;
1116
- }
1117
- processed.add(filePath);
1118
-
1119
- const actualPath = this.resolveFilePath(filePath, moduleName);
1120
-
1121
- if (!actualPath || !(await fs.pathExists(actualPath))) {
1122
- warnings.push(filePath);
1123
- continue;
1124
- }
1125
-
1126
- let fileContent = await fs.readFile(actualPath, 'utf8');
1127
- // Process {project-root} and {bmad_folder} references
1128
- fileContent = this.processProjectRootReferences(fileContent);
1129
- const fileExt = path.extname(actualPath).toLowerCase().replace('.', '');
1130
- const wrappedContent = this.wrapContentInXml(fileContent, filePath, fileExt);
1131
- dependencies.set(filePath, wrappedContent);
1132
- }
1133
- }
1134
-
1135
- /**
1136
- * Wrap file content in XML with proper escaping
1137
- */
1138
- wrapContentInXml(content, id, type = 'text') {
1139
- // For XML files, include directly without CDATA (they're already valid XML)
1140
- if (type === 'xml') {
1141
- // XML files can be included directly as they're already well-formed
1142
- // Just wrap in a file element
1143
- return `<file id="${id}" type="${type}">\n${content}\n</file>`;
1144
- }
1145
-
1146
- // For all other file types, use CDATA to preserve content exactly
1147
- // Escape any ]]> sequences in the content by splitting CDATA sections
1148
- // Replace ]]> with ]]]]><![CDATA[> to properly escape it within CDATA
1149
- const escapedContent = content.replaceAll(']]>', ']]]]><![CDATA[>');
1150
-
1151
- // Use CDATA to preserve content exactly as-is, including special characters
1152
- return `<file id="${id}" type="${type}"><![CDATA[${escapedContent}]]></file>`;
1153
- }
1154
-
1155
- /**
1156
- * Process wildcard dependency patterns
1157
- */
1158
- async processWildcardDependency(pattern, dependencies, processed, moduleName, warnings = []) {
1159
- // Remove {project-root} prefix
1160
- pattern = pattern.replace(/^{project-root}\//, '');
1161
- // Replace {bmad_folder} with bmad
1162
- pattern = pattern.replace(/^{bmad_folder}\//, 'bmad/');
1163
-
1164
- // Get directory and file pattern
1165
- const lastSlash = pattern.lastIndexOf('/');
1166
- const dirPath = pattern.slice(0, Math.max(0, lastSlash));
1167
- const filePattern = pattern.slice(Math.max(0, lastSlash + 1));
1168
-
1169
- // Resolve directory path without checking file existence
1170
- let dir;
1171
- if (dirPath.startsWith('bmad/')) {
1172
- // Remove bmad/ prefix
1173
- const actualPath = dirPath.replace(/^bmad\//, '');
1174
-
1175
- // Try different path mappings for directories
1176
- const possibleDirs = [
1177
- // Try as module path: bmad/cis/... -> src/modules/cis/...
1178
- path.join(this.sourceDir, 'modules', actualPath),
1179
- // Try as direct path: bmad/core/... -> src/core/...
1180
- path.join(this.sourceDir, actualPath),
1181
- ];
1182
-
1183
- for (const testDir of possibleDirs) {
1184
- if (fs.existsSync(testDir)) {
1185
- dir = testDir;
1186
- break;
1187
- }
1188
- }
1189
- }
1190
-
1191
- if (!dir) {
1192
- warnings.push(`${pattern} (could not resolve directory)`);
1193
- return;
1194
- }
1195
- if (!(await fs.pathExists(dir))) {
1196
- warnings.push(pattern);
1197
- return;
1198
- }
1199
-
1200
- // Read directory and match files
1201
- const files = await fs.readdir(dir);
1202
- let matchedFiles = [];
1203
-
1204
- if (filePattern === '*.*') {
1205
- matchedFiles = files;
1206
- } else if (filePattern.startsWith('*.')) {
1207
- const ext = filePattern.slice(1);
1208
- matchedFiles = files.filter((f) => f.endsWith(ext));
1209
- } else {
1210
- // Simple glob matching
1211
- const regex = new RegExp('^' + filePattern.replace('*', '.*') + '$');
1212
- matchedFiles = files.filter((f) => regex.test(f));
1213
- }
1214
-
1215
- // Process each matched file
1216
- for (const file of matchedFiles) {
1217
- const fullPath = dirPath + '/' + file;
1218
- if (!processed.has(fullPath)) {
1219
- await this.processFileDependency(fullPath, dependencies, processed, moduleName, warnings);
1220
- }
1221
- }
1222
- }
1223
-
1224
- /**
1225
- * Resolve file path relative to project
1226
- */
1227
- resolveFilePath(filePath, moduleName) {
1228
- // Remove {project-root} prefix
1229
- filePath = filePath.replace(/^{project-root}\//, '');
1230
- // Replace {bmad_folder} with bmad
1231
- filePath = filePath.replace(/^{bmad_folder}\//, 'bmad/');
1232
- filePath = filePath.replace(/^{bmad_folder}$/, 'bmad');
1233
-
1234
- // Check temp directory first for _cfg files
1235
- if (filePath.startsWith('bmad/_cfg/')) {
1236
- const filename = filePath.split('/').pop();
1237
- const tempPath = path.join(this.tempManifestDir, filename);
1238
- if (fs.existsSync(tempPath)) {
1239
- return tempPath;
1240
- }
1241
- }
1242
-
1243
- // Handle different path patterns for bmad files
1244
- // bmad/cis/tasks/brain-session.md -> src/modules/cis/tasks/brain-session.md
1245
- // bmad/core/tasks/create-doc.md -> src/core/tasks/create-doc.md
1246
- // bmad/bmm/templates/brief.md -> src/modules/bmm/templates/brief.md
1247
-
1248
- let actualPath = filePath;
1249
-
1250
- if (filePath.startsWith('bmad/')) {
1251
- // Remove bmad/ prefix
1252
- actualPath = filePath.replace(/^bmad\//, '');
1253
-
1254
- // Check if it's a module-specific file (cis, bmm, etc) or core file
1255
- const parts = actualPath.split('/');
1256
- const firstPart = parts[0];
1257
-
1258
- // Try different path mappings
1259
- const possiblePaths = [
1260
- // Try in temp directory first
1261
- path.join(this.tempDir, filePath),
1262
- // Try as module path: bmad/cis/... -> src/modules/cis/...
1263
- path.join(this.sourceDir, 'modules', actualPath),
1264
- // Try as direct path: bmad/core/... -> src/core/...
1265
- path.join(this.sourceDir, actualPath),
1266
- // Try without any prefix in src
1267
- path.join(this.sourceDir, parts.slice(1).join('/')),
1268
- // Try in project root
1269
- path.join(this.sourceDir, '..', actualPath),
1270
- // Try original with bmad
1271
- path.join(this.sourceDir, '..', filePath),
1272
- ];
1273
-
1274
- for (const testPath of possiblePaths) {
1275
- if (fs.existsSync(testPath)) {
1276
- return testPath;
1277
- }
1278
- }
1279
- }
1280
-
1281
- // Try standard paths for non-bmad files
1282
- const basePaths = [
1283
- this.sourceDir, // src directory
1284
- path.join(this.modulesPath, moduleName), // Current module
1285
- path.join(this.sourceDir, '..'), // Project root
1286
- ];
1287
-
1288
- for (const basePath of basePaths) {
1289
- const fullPath = path.join(basePath, actualPath);
1290
- if (fs.existsSync(fullPath)) {
1291
- return fullPath;
1292
- }
1293
- }
1294
-
1295
- return null;
1296
- }
1297
-
1298
- /**
1299
- * Process and remove {project-root} references and replace {bmad_folder} with bmad
1300
- */
1301
- processProjectRootReferences(content) {
1302
- // Remove {project-root}/ prefix (with slash)
1303
- content = content.replaceAll('{project-root}/', '');
1304
- // Also remove {project-root} without slash
1305
- content = content.replaceAll('{project-root}', '');
1306
- // Replace {bmad_folder} with bmad
1307
- content = content.replaceAll('{bmad_folder}', 'bmad');
1308
- return content;
1309
- }
1310
-
1311
- /**
1312
- * Escape special XML characters in text content
1313
- */
1314
- escapeXmlText(text) {
1315
- return text
1316
- .replaceAll('&', '&amp;')
1317
- .replaceAll('<', '&lt;')
1318
- .replaceAll('>', '&gt;')
1319
- .replaceAll('"', '&quot;')
1320
- .replaceAll("'", '&apos;');
1321
- }
1322
-
1323
- /**
1324
- * Escape XML content while preserving XML tags
1325
- */
1326
- escapeXmlContent(content) {
1327
- const tagPattern = /<([^>]+)>/g;
1328
- const parts = [];
1329
- let lastIndex = 0;
1330
- let match;
1331
-
1332
- while ((match = tagPattern.exec(content)) !== null) {
1333
- if (match.index > lastIndex) {
1334
- parts.push(this.escapeXmlText(content.slice(lastIndex, match.index)));
1335
- }
1336
- parts.push('<' + match[1] + '>');
1337
- lastIndex = match.index + match[0].length;
1338
- }
1339
-
1340
- if (lastIndex < content.length) {
1341
- parts.push(this.escapeXmlText(content.slice(lastIndex)));
1342
- }
1343
-
1344
- return parts.join('');
1345
- }
1346
-
1347
- /**
1348
- * Inject help and exit menu items into agent XML
1349
- */
1350
- injectHelpExitMenuItems(agentXml) {
1351
- // Check if menu already has help and exit
1352
- const hasHelp = agentXml.includes('cmd="*help"') || agentXml.includes('trigger="*help"');
1353
- const hasExit = agentXml.includes('cmd="*exit"') || agentXml.includes('trigger="*exit"');
1354
-
1355
- if (hasHelp && hasExit) {
1356
- return agentXml; // Already has both, skip injection
1357
- }
1358
-
1359
- // Find the menu section
1360
- const menuMatch = agentXml.match(/(<menu>[\s\S]*?<\/menu>)/);
1361
- if (!menuMatch) {
1362
- return agentXml; // No menu found, skip injection
1363
- }
1364
-
1365
- const menuContent = menuMatch[1];
1366
- const menuClosingMatch = menuContent.match(/(\s*)<\/menu>/);
1367
- if (!menuClosingMatch) {
1368
- return agentXml;
1369
- }
1370
-
1371
- const indent = menuClosingMatch[1];
1372
- const menuItems = [];
1373
-
1374
- if (!hasHelp) {
1375
- menuItems.push(`${indent}<item cmd="*help">Show numbered menu</item>`);
1376
- }
1377
-
1378
- if (!hasExit) {
1379
- menuItems.push(`${indent}<item cmd="*exit">Exit with confirmation</item>`);
1380
- }
1381
-
1382
- if (menuItems.length === 0) {
1383
- return agentXml;
1384
- }
1385
-
1386
- // Inject menu items before closing </menu> tag
1387
- const newMenuContent = menuContent.replace(/(\s*)<\/menu>/, `\n${menuItems.join('\n')}\n${indent}</menu>`);
1388
- return agentXml.replace(menuContent, newMenuContent);
1389
- }
1390
-
1391
- /**
1392
- * Inject web activation instructions into agent XML
1393
- */
1394
- injectWebActivation(agentXml) {
1395
- // First, always inject help/exit menu items
1396
- agentXml = this.injectHelpExitMenuItems(agentXml);
1397
-
1398
- // Load the web activation template
1399
- const activationPath = path.join(this.sourceDir, 'utility', 'models', 'agent-activation-web.xml');
1400
-
1401
- if (!fs.existsSync(activationPath)) {
1402
- console.warn(chalk.yellow('Warning: agent-activation-web.xml not found, skipping activation injection'));
1403
- return agentXml;
1404
- }
1405
-
1406
- const activationXml = fs.readFileSync(activationPath, 'utf8');
1407
-
1408
- // For web bundles, ALWAYS replace existing activation with web activation
1409
- // This is because fragment-based activation assumes filesystem access which won't work in web bundles
1410
- const hasActivation = agentXml.includes('<activation');
1411
-
1412
- if (hasActivation) {
1413
- // Replace existing activation block with web activation
1414
- const injectedXml = agentXml.replace(/<activation[^>]*>[\s\S]*?<\/activation>/, activationXml);
1415
- return injectedXml;
1416
- }
1417
-
1418
- // Check for critical-actions block (legacy)
1419
- const hasCriticalActions = agentXml.includes('<critical-actions');
1420
-
1421
- if (hasCriticalActions) {
1422
- // Replace critical-actions block with activation
1423
- const injectedXml = agentXml.replace(/<critical-actions>[\s\S]*?<\/critical-actions>/, activationXml);
1424
- return injectedXml;
1425
- }
1426
-
1427
- // If no critical-actions, inject before closing </agent> tag
1428
- const closingTagMatch = agentXml.match(/(\s*)<\/agent>/);
1429
- if (!closingTagMatch) {
1430
- console.warn(chalk.yellow('Warning: Could not find </agent> tag for activation injection'));
1431
- return agentXml;
1432
- }
1433
-
1434
- // Inject the activation block before the closing </agent> tag
1435
- // Properly indent each line of the activation XML
1436
- const indent = closingTagMatch[1];
1437
- const indentedActivation = activationXml
1438
- .split('\n')
1439
- .map((line) => (line.trim() ? indent + line : ''))
1440
- .join('\n');
1441
-
1442
- const injectedXml = agentXml.replace(/(\s*)<\/agent>/, `\n${indentedActivation}\n${indent}</agent>`);
1443
-
1444
- return injectedXml;
1445
- }
1446
-
1447
- /**
1448
- * Build the final agent bundle XML
1449
- */
1450
- buildAgentBundle(agentXml, dependencies) {
1451
- // Web activation is now handled by fragments during YAML building
1452
- // agentXml = this.injectWebActivation(agentXml);
1453
-
1454
- const parts = [
1455
- '<?xml version="1.0" encoding="UTF-8"?>',
1456
- '<agent-bundle>',
1457
- ' <!-- Agent Definition -->',
1458
- ' ' + agentXml.replaceAll('\n', '\n '),
1459
- ];
1460
-
1461
- // Add dependencies (all are now consistently wrapped in <file> elements)
1462
- if (dependencies && dependencies.size > 0) {
1463
- parts.push('\n <!-- Dependencies -->');
1464
- for (const [id, content] of dependencies) {
1465
- // All dependencies are now wrapped in <file> elements
1466
- // Indent properly
1467
- const indentedContent = content
1468
- .split('\n')
1469
- .map((line) => ' ' + line)
1470
- .join('\n');
1471
- parts.push(indentedContent);
1472
- }
1473
- }
1474
-
1475
- parts.push('</agent-bundle>');
1476
-
1477
- return parts.join('\n');
1478
- }
1479
-
1480
- /**
1481
- * Discover all modules
1482
- */
1483
- async discoverModules() {
1484
- const modules = [];
1485
-
1486
- if (!(await fs.pathExists(this.modulesPath))) {
1487
- console.log(chalk.yellow('No modules directory found'));
1488
- return modules;
1489
- }
1490
-
1491
- const entries = await fs.readdir(this.modulesPath, { withFileTypes: true });
1492
-
1493
- for (const entry of entries) {
1494
- if (entry.isDirectory()) {
1495
- modules.push(entry.name);
1496
- }
1497
- }
1498
-
1499
- return modules;
1500
- }
1501
-
1502
- /**
1503
- * Discover agents in a module
1504
- */
1505
- async discoverAgents(modulePath) {
1506
- const agents = [];
1507
- const agentsPath = path.join(modulePath, 'agents');
1508
-
1509
- if (!(await fs.pathExists(agentsPath))) {
1510
- return agents;
1511
- }
1512
-
1513
- const files = await fs.readdir(agentsPath);
1514
-
1515
- for (const file of files) {
1516
- // Look for .agent.yaml files (new format) or .md files (legacy format)
1517
- if (file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme'))) {
1518
- agents.push(file);
1519
- }
1520
- }
1521
-
1522
- return agents;
1523
- }
1524
-
1525
- /**
1526
- * Discover all teams in a module
1527
- */
1528
- async discoverTeams(modulePath) {
1529
- const teams = [];
1530
- const teamsPath = path.join(modulePath, 'teams');
1531
-
1532
- if (!(await fs.pathExists(teamsPath))) {
1533
- return teams;
1534
- }
1535
-
1536
- const files = await fs.readdir(teamsPath);
1537
-
1538
- for (const file of files) {
1539
- if (file.endsWith('.yaml') || file.endsWith('.yml')) {
1540
- teams.push(file);
1541
- }
1542
- }
1543
-
1544
- return teams;
1545
- }
1546
-
1547
- /**
1548
- * Extract agent name from XML
1549
- */
1550
- getAgentName(xml) {
1551
- const match = xml.match(/<agent[^>]*name="([^"]+)"/);
1552
- return match ? match[1] : 'Unknown';
1553
- }
1554
-
1555
- /**
1556
- * Extract agent description from XML
1557
- */
1558
- getAgentDescription(xml) {
1559
- const match = xml.match(/<description>([^<]+)<\/description>/);
1560
- return match ? match[1] : '';
1561
- }
1562
-
1563
- /**
1564
- * Check if agent should be skipped for bundling
1565
- */
1566
- shouldSkipBundling(xml) {
1567
- // Check for bundle="false" attribute in the agent tag
1568
- const match = xml.match(/<agent[^>]*bundle="false"[^>]*>/);
1569
- return match !== null;
1570
- }
1571
-
1572
- /**
1573
- * Create temporary manifest files
1574
- */
1575
- async createTempManifests() {
1576
- // Ensure temp directory exists
1577
- await fs.ensureDir(this.tempManifestDir);
1578
-
1579
- // Generate agent-manifest.csv using shared generator
1580
- const agentPartyPath = path.join(this.tempManifestDir, 'agent-manifest.csv');
1581
- await AgentPartyGenerator.writeAgentParty(agentPartyPath, this.discoveredAgents, { forWeb: true });
1582
-
1583
- console.log(chalk.dim(' ✓ Created temporary manifest files'));
1584
- }
1585
-
1586
- /**
1587
- * Clean up temporary files
1588
- */
1589
- async cleanupTempFiles() {
1590
- if (await fs.pathExists(this.tempDir)) {
1591
- await fs.remove(this.tempDir);
1592
- console.log(chalk.dim('\n✓ Cleaned up temporary files'));
1593
- }
1594
- }
1595
-
1596
- /**
1597
- * Validate XML content
1598
- */
1599
- async validateXml(xmlContent) {
1600
- try {
1601
- await xml2js.parseStringPromise(xmlContent, {
1602
- strict: true,
1603
- explicitArray: false,
1604
- });
1605
- return true;
1606
- } catch {
1607
- return false;
1608
- }
1609
- }
1610
-
1611
- /**
1612
- * Display summary statistics
1613
- */
1614
- displaySummary() {
1615
- console.log(chalk.cyan.bold('\n═══════════════════════════════════════════════'));
1616
- console.log(chalk.cyan.bold(' SUMMARY'));
1617
- console.log(chalk.cyan.bold('═══════════════════════════════════════════════\n'));
1618
-
1619
- console.log(chalk.bold('Bundle Statistics:'));
1620
- console.log(` Total agents found: ${this.stats.totalAgents}`);
1621
- console.log(` Successfully bundled: ${chalk.green(this.stats.bundledAgents)}`);
1622
- console.log(` Skipped (bundle=false): ${chalk.gray(this.stats.skippedAgents)}`);
1623
-
1624
- if (this.stats.failedAgents > 0) {
1625
- console.log(` Failed to bundle: ${chalk.red(this.stats.failedAgents)}`);
1626
- }
1627
-
1628
- if (this.stats.invalidXml > 0) {
1629
- console.log(` Invalid XML bundles: ${chalk.yellow(this.stats.invalidXml)}`);
1630
- }
1631
-
1632
- // Display warnings summary
1633
- // Check if there are actually any warnings with content
1634
- const hasActualWarnings = this.stats.warnings.some((w) => w && w.warnings && w.warnings.length > 0);
1635
-
1636
- if (hasActualWarnings) {
1637
- console.log(chalk.yellow('\n⚠ Missing Dependencies by Agent:'));
1638
-
1639
- // Group and display warnings by agent
1640
- for (const agentWarning of this.stats.warnings) {
1641
- if (agentWarning && agentWarning.warnings && agentWarning.warnings.length > 0) {
1642
- console.log(chalk.bold(`\n ${agentWarning.agent}:`));
1643
- // Display unique warnings for this agent
1644
- const uniqueWarnings = [...new Set(agentWarning.warnings)];
1645
- for (const warning of uniqueWarnings) {
1646
- console.log(chalk.dim(` • ${warning}`));
1647
- }
1648
- }
1649
- }
1650
- } else {
1651
- console.log(chalk.green('\n✓ No missing dependencies'));
1652
- }
1653
-
1654
- // Final status
1655
- if (this.stats.invalidXml > 0) {
1656
- console.log(chalk.yellow('\n⚠ Some bundles have invalid XML. Please review the output.'));
1657
- } else if (this.stats.failedAgents > 0) {
1658
- console.log(chalk.yellow('\n⚠ Some agents failed to bundle. Please review the errors.'));
1659
- } else {
1660
- console.log(chalk.green('\n✨ All bundles generated successfully!'));
1661
- }
1662
-
1663
- console.log(chalk.cyan.bold('\n═══════════════════════════════════════════════\n'));
1664
- }
1665
- }
1666
-
1667
- module.exports = { WebBundler };