scm-method 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/.claude-plugin/marketplace.json +77 -0
  2. package/AGENTS.md +12 -0
  3. package/LICENSE +30 -0
  4. package/README.md +109 -0
  5. package/README_CN.md +108 -0
  6. package/package.json +110 -0
  7. package/src/bmm-skills/1-analysis/research/scm-domain-research/SKILL.md +6 -0
  8. package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-01-init.md +137 -0
  9. package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
  10. package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
  11. package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
  12. package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-05-technical-trends.md +234 -0
  13. package/src/bmm-skills/1-analysis/research/scm-domain-research/domain-steps/step-06-research-synthesis.md +444 -0
  14. package/src/bmm-skills/1-analysis/research/scm-domain-research/research.template.md +29 -0
  15. package/src/bmm-skills/1-analysis/research/scm-domain-research/workflow.md +51 -0
  16. package/src/bmm-skills/1-analysis/research/scm-market-research/SKILL.md +6 -0
  17. package/src/bmm-skills/1-analysis/research/scm-market-research/research.template.md +29 -0
  18. package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-01-init.md +184 -0
  19. package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-02-customer-behavior.md +239 -0
  20. package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-03-customer-pain-points.md +251 -0
  21. package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-04-customer-decisions.md +261 -0
  22. package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-05-competitive-analysis.md +173 -0
  23. package/src/bmm-skills/1-analysis/research/scm-market-research/steps/step-06-research-completion.md +478 -0
  24. package/src/bmm-skills/1-analysis/research/scm-market-research/workflow.md +51 -0
  25. package/src/bmm-skills/1-analysis/research/scm-technical-research/SKILL.md +6 -0
  26. package/src/bmm-skills/1-analysis/research/scm-technical-research/research.template.md +29 -0
  27. package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-01-init.md +137 -0
  28. package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-02-technical-overview.md +239 -0
  29. package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
  30. package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
  31. package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-05-implementation-research.md +233 -0
  32. package/src/bmm-skills/1-analysis/research/scm-technical-research/technical-steps/step-06-research-synthesis.md +487 -0
  33. package/src/bmm-skills/1-analysis/research/scm-technical-research/workflow.md +52 -0
  34. package/src/bmm-skills/1-analysis/scm-agent-analyst/SKILL.md +59 -0
  35. package/src/bmm-skills/1-analysis/scm-agent-analyst/scm-skill-manifest.yaml +11 -0
  36. package/src/bmm-skills/1-analysis/scm-agent-tech-writer/SKILL.md +57 -0
  37. package/src/bmm-skills/1-analysis/scm-agent-tech-writer/explain-concept.md +20 -0
  38. package/src/bmm-skills/1-analysis/scm-agent-tech-writer/mermaid-gen.md +20 -0
  39. package/src/bmm-skills/1-analysis/scm-agent-tech-writer/scm-skill-manifest.yaml +11 -0
  40. package/src/bmm-skills/1-analysis/scm-agent-tech-writer/validate-doc.md +19 -0
  41. package/src/bmm-skills/1-analysis/scm-agent-tech-writer/write-document.md +20 -0
  42. package/src/bmm-skills/1-analysis/scm-document-project/SKILL.md +6 -0
  43. package/src/bmm-skills/1-analysis/scm-document-project/checklist.md +245 -0
  44. package/src/bmm-skills/1-analysis/scm-document-project/documentation-requirements.csv +12 -0
  45. package/src/bmm-skills/1-analysis/scm-document-project/instructions.md +128 -0
  46. package/src/bmm-skills/1-analysis/scm-document-project/templates/deep-dive-template.md +345 -0
  47. package/src/bmm-skills/1-analysis/scm-document-project/templates/index-template.md +169 -0
  48. package/src/bmm-skills/1-analysis/scm-document-project/templates/project-overview-template.md +103 -0
  49. package/src/bmm-skills/1-analysis/scm-document-project/templates/project-scan-report-schema.json +160 -0
  50. package/src/bmm-skills/1-analysis/scm-document-project/templates/source-tree-template.md +135 -0
  51. package/src/bmm-skills/1-analysis/scm-document-project/workflow.md +25 -0
  52. package/src/bmm-skills/1-analysis/scm-document-project/workflows/deep-dive-instructions.md +299 -0
  53. package/src/bmm-skills/1-analysis/scm-document-project/workflows/deep-dive-workflow.md +34 -0
  54. package/src/bmm-skills/1-analysis/scm-document-project/workflows/full-scan-instructions.md +1107 -0
  55. package/src/bmm-skills/1-analysis/scm-document-project/workflows/full-scan-workflow.md +34 -0
  56. package/src/bmm-skills/1-analysis/scm-prfaq/SKILL.md +96 -0
  57. package/src/bmm-skills/1-analysis/scm-prfaq/agents/artifact-analyzer.md +60 -0
  58. package/src/bmm-skills/1-analysis/scm-prfaq/agents/web-researcher.md +49 -0
  59. package/src/bmm-skills/1-analysis/scm-prfaq/assets/prfaq-template.md +62 -0
  60. package/src/bmm-skills/1-analysis/scm-prfaq/references/customer-faq.md +55 -0
  61. package/src/bmm-skills/1-analysis/scm-prfaq/references/internal-faq.md +51 -0
  62. package/src/bmm-skills/1-analysis/scm-prfaq/references/press-release.md +60 -0
  63. package/src/bmm-skills/1-analysis/scm-prfaq/references/verdict.md +79 -0
  64. package/src/bmm-skills/1-analysis/scm-prfaq/scm-manifest.json +16 -0
  65. package/src/bmm-skills/1-analysis/scm-product-brief/SKILL.md +82 -0
  66. package/src/bmm-skills/1-analysis/scm-product-brief/agents/artifact-analyzer.md +60 -0
  67. package/src/bmm-skills/1-analysis/scm-product-brief/agents/opportunity-reviewer.md +44 -0
  68. package/src/bmm-skills/1-analysis/scm-product-brief/agents/skeptic-reviewer.md +44 -0
  69. package/src/bmm-skills/1-analysis/scm-product-brief/agents/web-researcher.md +49 -0
  70. package/src/bmm-skills/1-analysis/scm-product-brief/prompts/contextual-discovery.md +57 -0
  71. package/src/bmm-skills/1-analysis/scm-product-brief/prompts/draft-and-review.md +86 -0
  72. package/src/bmm-skills/1-analysis/scm-product-brief/prompts/finalize.md +75 -0
  73. package/src/bmm-skills/1-analysis/scm-product-brief/prompts/guided-elicitation.md +70 -0
  74. package/src/bmm-skills/1-analysis/scm-product-brief/resources/brief-template.md +60 -0
  75. package/src/bmm-skills/1-analysis/scm-product-brief/scm-manifest.json +17 -0
  76. package/src/bmm-skills/2-plan-workflows/scm-agent-pm/SKILL.md +59 -0
  77. package/src/bmm-skills/2-plan-workflows/scm-agent-pm/scm-skill-manifest.yaml +11 -0
  78. package/src/bmm-skills/2-plan-workflows/scm-agent-ux-designer/SKILL.md +55 -0
  79. package/src/bmm-skills/2-plan-workflows/scm-agent-ux-designer/scm-skill-manifest.yaml +11 -0
  80. package/src/bmm-skills/2-plan-workflows/scm-create-prd/SKILL.md +6 -0
  81. package/src/bmm-skills/2-plan-workflows/scm-create-prd/data/domain-complexity.csv +15 -0
  82. package/src/bmm-skills/2-plan-workflows/scm-create-prd/data/prd-purpose.md +197 -0
  83. package/src/bmm-skills/2-plan-workflows/scm-create-prd/data/project-types.csv +11 -0
  84. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-01-init.md +178 -0
  85. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-01b-continue.md +161 -0
  86. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-02-discovery.md +208 -0
  87. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-02b-vision.md +142 -0
  88. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-02c-executive-summary.md +158 -0
  89. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-03-success.md +214 -0
  90. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-04-journeys.md +201 -0
  91. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-05-domain.md +194 -0
  92. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-06-innovation.md +211 -0
  93. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-07-project-type.md +222 -0
  94. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-08-scoping.md +216 -0
  95. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-09-functional.md +219 -0
  96. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-10-nonfunctional.md +230 -0
  97. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-11-polish.md +221 -0
  98. package/src/bmm-skills/2-plan-workflows/scm-create-prd/steps-c/step-12-complete.md +115 -0
  99. package/src/bmm-skills/2-plan-workflows/scm-create-prd/templates/prd-template.md +10 -0
  100. package/src/bmm-skills/2-plan-workflows/scm-create-prd/workflow.md +61 -0
  101. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/SKILL.md +6 -0
  102. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-01-init.md +135 -0
  103. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-01b-continue.md +127 -0
  104. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-02-discovery.md +190 -0
  105. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-03-core-experience.md +217 -0
  106. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-04-emotional-response.md +220 -0
  107. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-05-inspiration.md +235 -0
  108. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-06-design-system.md +253 -0
  109. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-07-defining-experience.md +255 -0
  110. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-08-visual-foundation.md +225 -0
  111. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-09-design-directions.md +225 -0
  112. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-10-user-journeys.md +242 -0
  113. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-11-component-strategy.md +249 -0
  114. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-12-ux-patterns.md +238 -0
  115. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-13-responsive-accessibility.md +265 -0
  116. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/steps/step-14-complete.md +171 -0
  117. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/ux-design-template.md +13 -0
  118. package/src/bmm-skills/2-plan-workflows/scm-create-ux-design/workflow.md +35 -0
  119. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/SKILL.md +6 -0
  120. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-01-discovery.md +242 -0
  121. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-01b-legacy-conversion.md +204 -0
  122. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-02-review.md +245 -0
  123. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-03-edit.md +250 -0
  124. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/steps-e/step-e-04-complete.md +165 -0
  125. package/src/bmm-skills/2-plan-workflows/scm-edit-prd/workflow.md +62 -0
  126. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/SKILL.md +6 -0
  127. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/data/domain-complexity.csv +15 -0
  128. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/data/prd-purpose.md +197 -0
  129. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/data/project-types.csv +11 -0
  130. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-01-discovery.md +221 -0
  131. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-02-format-detection.md +188 -0
  132. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-02b-parity-check.md +206 -0
  133. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-03-density-validation.md +171 -0
  134. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +211 -0
  135. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-05-measurability-validation.md +225 -0
  136. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-06-traceability-validation.md +214 -0
  137. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +202 -0
  138. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +240 -0
  139. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-09-project-type-validation.md +260 -0
  140. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-10-smart-validation.md +206 -0
  141. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +261 -0
  142. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-12-completeness-validation.md +239 -0
  143. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/steps-v/step-v-13-report-complete.md +229 -0
  144. package/src/bmm-skills/2-plan-workflows/scm-validate-prd/workflow.md +61 -0
  145. package/src/bmm-skills/3-solutioning/scm-agent-architect/SKILL.md +54 -0
  146. package/src/bmm-skills/3-solutioning/scm-agent-architect/scm-skill-manifest.yaml +11 -0
  147. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/SKILL.md +6 -0
  148. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
  149. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
  150. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
  151. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
  152. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
  153. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/steps/step-06-final-assessment.md +126 -0
  154. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/templates/readiness-report-template.md +4 -0
  155. package/src/bmm-skills/3-solutioning/scm-check-implementation-readiness/workflow.md +47 -0
  156. package/src/bmm-skills/3-solutioning/scm-create-architecture/SKILL.md +6 -0
  157. package/src/bmm-skills/3-solutioning/scm-create-architecture/architecture-decision-template.md +12 -0
  158. package/src/bmm-skills/3-solutioning/scm-create-architecture/data/domain-complexity.csv +13 -0
  159. package/src/bmm-skills/3-solutioning/scm-create-architecture/data/project-types.csv +7 -0
  160. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-01-init.md +153 -0
  161. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-01b-continue.md +173 -0
  162. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-02-context.md +224 -0
  163. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-03-starter.md +329 -0
  164. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-04-decisions.md +318 -0
  165. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-05-patterns.md +359 -0
  166. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-06-structure.md +379 -0
  167. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-07-validation.md +359 -0
  168. package/src/bmm-skills/3-solutioning/scm-create-architecture/steps/step-08-complete.md +76 -0
  169. package/src/bmm-skills/3-solutioning/scm-create-architecture/workflow.md +32 -0
  170. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/SKILL.md +6 -0
  171. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-01-validate-prerequisites.md +255 -0
  172. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-02-design-epics.md +212 -0
  173. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
  174. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/steps/step-04-final-validation.md +131 -0
  175. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/templates/epics-template.md +61 -0
  176. package/src/bmm-skills/3-solutioning/scm-create-epics-and-stories/workflow.md +51 -0
  177. package/src/bmm-skills/3-solutioning/scm-generate-project-context/SKILL.md +6 -0
  178. package/src/bmm-skills/3-solutioning/scm-generate-project-context/project-context-template.md +21 -0
  179. package/src/bmm-skills/3-solutioning/scm-generate-project-context/steps/step-01-discover.md +186 -0
  180. package/src/bmm-skills/3-solutioning/scm-generate-project-context/steps/step-02-generate.md +321 -0
  181. package/src/bmm-skills/3-solutioning/scm-generate-project-context/steps/step-03-complete.md +278 -0
  182. package/src/bmm-skills/3-solutioning/scm-generate-project-context/workflow.md +39 -0
  183. package/src/bmm-skills/4-implementation/scm-agent-dev/SKILL.md +64 -0
  184. package/src/bmm-skills/4-implementation/scm-agent-dev/scm-skill-manifest.yaml +11 -0
  185. package/src/bmm-skills/4-implementation/scm-agent-qa/SKILL.md +61 -0
  186. package/src/bmm-skills/4-implementation/scm-agent-qa/scm-skill-manifest.yaml +11 -0
  187. package/src/bmm-skills/4-implementation/scm-agent-quick-flow-solo-dev/SKILL.md +53 -0
  188. package/src/bmm-skills/4-implementation/scm-agent-quick-flow-solo-dev/scm-skill-manifest.yaml +11 -0
  189. package/src/bmm-skills/4-implementation/scm-agent-sm/SKILL.md +55 -0
  190. package/src/bmm-skills/4-implementation/scm-agent-sm/scm-skill-manifest.yaml +11 -0
  191. package/src/bmm-skills/4-implementation/scm-code-review/SKILL.md +6 -0
  192. package/src/bmm-skills/4-implementation/scm-code-review/steps/step-01-gather-context.md +62 -0
  193. package/src/bmm-skills/4-implementation/scm-code-review/steps/step-02-review.md +34 -0
  194. package/src/bmm-skills/4-implementation/scm-code-review/steps/step-03-triage.md +49 -0
  195. package/src/bmm-skills/4-implementation/scm-code-review/steps/step-04-present.md +129 -0
  196. package/src/bmm-skills/4-implementation/scm-code-review/workflow.md +55 -0
  197. package/src/bmm-skills/4-implementation/scm-correct-course/SKILL.md +6 -0
  198. package/src/bmm-skills/4-implementation/scm-correct-course/checklist.md +288 -0
  199. package/src/bmm-skills/4-implementation/scm-correct-course/workflow.md +267 -0
  200. package/src/bmm-skills/4-implementation/scm-create-story/SKILL.md +6 -0
  201. package/src/bmm-skills/4-implementation/scm-create-story/checklist.md +357 -0
  202. package/src/bmm-skills/4-implementation/scm-create-story/discover-inputs.md +88 -0
  203. package/src/bmm-skills/4-implementation/scm-create-story/template.md +49 -0
  204. package/src/bmm-skills/4-implementation/scm-create-story/workflow.md +380 -0
  205. package/src/bmm-skills/4-implementation/scm-dev-story/SKILL.md +6 -0
  206. package/src/bmm-skills/4-implementation/scm-dev-story/checklist.md +80 -0
  207. package/src/bmm-skills/4-implementation/scm-dev-story/workflow.md +450 -0
  208. package/src/bmm-skills/4-implementation/scm-qa-generate-e2e-tests/SKILL.md +6 -0
  209. package/src/bmm-skills/4-implementation/scm-qa-generate-e2e-tests/checklist.md +33 -0
  210. package/src/bmm-skills/4-implementation/scm-qa-generate-e2e-tests/workflow.md +136 -0
  211. package/src/bmm-skills/4-implementation/scm-quick-dev/SKILL.md +6 -0
  212. package/src/bmm-skills/4-implementation/scm-quick-dev/spec-template.md +88 -0
  213. package/src/bmm-skills/4-implementation/scm-quick-dev/step-01-clarify-and-route.md +66 -0
  214. package/src/bmm-skills/4-implementation/scm-quick-dev/step-02-plan.md +35 -0
  215. package/src/bmm-skills/4-implementation/scm-quick-dev/step-03-implement.md +37 -0
  216. package/src/bmm-skills/4-implementation/scm-quick-dev/step-04-review.md +49 -0
  217. package/src/bmm-skills/4-implementation/scm-quick-dev/step-05-present.md +63 -0
  218. package/src/bmm-skills/4-implementation/scm-quick-dev/step-oneshot.md +62 -0
  219. package/src/bmm-skills/4-implementation/scm-quick-dev/workflow.md +79 -0
  220. package/src/bmm-skills/4-implementation/scm-retrospective/SKILL.md +6 -0
  221. package/src/bmm-skills/4-implementation/scm-retrospective/workflow.md +1479 -0
  222. package/src/bmm-skills/4-implementation/scm-sprint-planning/SKILL.md +6 -0
  223. package/src/bmm-skills/4-implementation/scm-sprint-planning/checklist.md +33 -0
  224. package/src/bmm-skills/4-implementation/scm-sprint-planning/sprint-status-template.yaml +56 -0
  225. package/src/bmm-skills/4-implementation/scm-sprint-planning/workflow.md +263 -0
  226. package/src/bmm-skills/4-implementation/scm-sprint-status/SKILL.md +6 -0
  227. package/src/bmm-skills/4-implementation/scm-sprint-status/workflow.md +261 -0
  228. package/src/bmm-skills/module-help.csv +31 -0
  229. package/src/bmm-skills/module.yaml +50 -0
  230. package/src/core-skills/module-help.csv +11 -0
  231. package/src/core-skills/module.yaml +25 -0
  232. package/src/core-skills/scm-advanced-elicitation/SKILL.md +136 -0
  233. package/src/core-skills/scm-advanced-elicitation/methods.csv +51 -0
  234. package/src/core-skills/scm-brainstorming/SKILL.md +6 -0
  235. package/src/core-skills/scm-brainstorming/brain-methods.csv +62 -0
  236. package/src/core-skills/scm-brainstorming/steps/step-01-session-setup.md +214 -0
  237. package/src/core-skills/scm-brainstorming/steps/step-01b-continue.md +124 -0
  238. package/src/core-skills/scm-brainstorming/steps/step-02a-user-selected.md +229 -0
  239. package/src/core-skills/scm-brainstorming/steps/step-02b-ai-recommended.md +239 -0
  240. package/src/core-skills/scm-brainstorming/steps/step-02c-random-selection.md +211 -0
  241. package/src/core-skills/scm-brainstorming/steps/step-02d-progressive-flow.md +266 -0
  242. package/src/core-skills/scm-brainstorming/steps/step-03-technique-execution.md +401 -0
  243. package/src/core-skills/scm-brainstorming/steps/step-04-idea-organization.md +305 -0
  244. package/src/core-skills/scm-brainstorming/template.md +15 -0
  245. package/src/core-skills/scm-brainstorming/workflow.md +53 -0
  246. package/src/core-skills/scm-distillator/SKILL.md +177 -0
  247. package/src/core-skills/scm-distillator/agents/distillate-compressor.md +116 -0
  248. package/src/core-skills/scm-distillator/agents/round-trip-reconstructor.md +68 -0
  249. package/src/core-skills/scm-distillator/resources/compression-rules.md +51 -0
  250. package/src/core-skills/scm-distillator/resources/distillate-format-reference.md +227 -0
  251. package/src/core-skills/scm-distillator/resources/splitting-strategy.md +78 -0
  252. package/src/core-skills/scm-distillator/scripts/analyze_sources.py +300 -0
  253. package/src/core-skills/scm-distillator/scripts/tests/test_analyze_sources.py +204 -0
  254. package/src/core-skills/scm-editorial-review-prose/SKILL.md +86 -0
  255. package/src/core-skills/scm-editorial-review-structure/SKILL.md +179 -0
  256. package/src/core-skills/scm-help/SKILL.md +73 -0
  257. package/src/core-skills/scm-index-docs/SKILL.md +66 -0
  258. package/src/core-skills/scm-party-mode/SKILL.md +125 -0
  259. package/src/core-skills/scm-review-adversarial-general/SKILL.md +37 -0
  260. package/src/core-skills/scm-review-edge-case-hunter/SKILL.md +67 -0
  261. package/src/core-skills/scm-shard-doc/SKILL.md +105 -0
  262. package/tools/format-workflow-md.js +263 -0
  263. package/tools/installer/README.md +60 -0
  264. package/tools/installer/cli-utils.js +181 -0
  265. package/tools/installer/commands/install.js +80 -0
  266. package/tools/installer/commands/status.js +65 -0
  267. package/tools/installer/commands/uninstall.js +167 -0
  268. package/tools/installer/core/config.js +52 -0
  269. package/tools/installer/core/custom-module-cache.js +260 -0
  270. package/tools/installer/core/existing-install.js +127 -0
  271. package/tools/installer/core/install-paths.js +129 -0
  272. package/tools/installer/core/installer.js +1790 -0
  273. package/tools/installer/core/manifest-generator.js +701 -0
  274. package/tools/installer/core/manifest.js +1040 -0
  275. package/tools/installer/custom-handler.js +112 -0
  276. package/tools/installer/external-official-modules.yaml +63 -0
  277. package/tools/installer/file-ops.js +204 -0
  278. package/tools/installer/ide/_config-driven.js +536 -0
  279. package/tools/installer/ide/manager.js +247 -0
  280. package/tools/installer/ide/platform-codes.js +37 -0
  281. package/tools/installer/ide/platform-codes.yaml +192 -0
  282. package/tools/installer/ide/shared/agent-command-generator.js +180 -0
  283. package/tools/installer/ide/shared/module-injections.js +136 -0
  284. package/tools/installer/ide/shared/path-utils.js +364 -0
  285. package/tools/installer/ide/shared/scm-artifacts.js +208 -0
  286. package/tools/installer/ide/shared/skill-manifest.js +72 -0
  287. package/tools/installer/ide/templates/agent-command-template.md +14 -0
  288. package/tools/installer/ide/templates/combined/antigravity.md +8 -0
  289. package/tools/installer/ide/templates/combined/default-agent.md +15 -0
  290. package/tools/installer/ide/templates/combined/default-task.md +10 -0
  291. package/tools/installer/ide/templates/combined/default-tool.md +10 -0
  292. package/tools/installer/ide/templates/combined/default-workflow.md +6 -0
  293. package/tools/installer/ide/templates/combined/gemini-agent.toml +14 -0
  294. package/tools/installer/ide/templates/combined/gemini-task.toml +11 -0
  295. package/tools/installer/ide/templates/combined/gemini-tool.toml +11 -0
  296. package/tools/installer/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
  297. package/tools/installer/ide/templates/combined/gemini-workflow.toml +14 -0
  298. package/tools/installer/ide/templates/combined/kiro-agent.md +16 -0
  299. package/tools/installer/ide/templates/combined/kiro-task.md +9 -0
  300. package/tools/installer/ide/templates/combined/kiro-tool.md +9 -0
  301. package/tools/installer/ide/templates/combined/kiro-workflow.md +7 -0
  302. package/tools/installer/ide/templates/combined/opencode-agent.md +15 -0
  303. package/tools/installer/ide/templates/combined/opencode-task.md +13 -0
  304. package/tools/installer/ide/templates/combined/opencode-tool.md +13 -0
  305. package/tools/installer/ide/templates/combined/opencode-workflow-yaml.md +16 -0
  306. package/tools/installer/ide/templates/combined/opencode-workflow.md +16 -0
  307. package/tools/installer/ide/templates/combined/rovodev.md +9 -0
  308. package/tools/installer/ide/templates/combined/trae.md +9 -0
  309. package/tools/installer/ide/templates/combined/windsurf-workflow.md +10 -0
  310. package/tools/installer/ide/templates/split/.gitkeep +0 -0
  311. package/tools/installer/install-messages.yaml +35 -0
  312. package/tools/installer/message-loader.js +83 -0
  313. package/tools/installer/modules/custom-modules.js +197 -0
  314. package/tools/installer/modules/external-manager.js +354 -0
  315. package/tools/installer/modules/official-modules.js +2043 -0
  316. package/tools/installer/project-root.js +77 -0
  317. package/tools/installer/prompts.js +809 -0
  318. package/tools/installer/scm-cli.js +108 -0
  319. package/tools/installer/ui.js +1683 -0
  320. package/tools/installer/yaml-format.js +245 -0
  321. package/tools/javascript-conventions.md +5 -0
  322. package/tools/migrate-custom-module-paths.js +124 -0
  323. package/tools/platform-codes.yaml +169 -0
  324. package/tools/validate-skills.js +736 -0
@@ -0,0 +1,247 @@
1
+ const { SCM_FOLDER_NAME } = require('./shared/path-utils');
2
+ const prompts = require('../prompts');
3
+
4
+ /**
5
+ * IDE Manager - handles IDE-specific setup
6
+ * Dynamically discovers and loads IDE handlers
7
+ *
8
+ * Loading strategy:
9
+ * All platforms are config-driven from platform-codes.yaml.
10
+ */
11
+ class IdeManager {
12
+ constructor() {
13
+ this.handlers = new Map();
14
+ this._initialized = false;
15
+ this.scmFolderName = SCM_FOLDER_NAME; // Default, can be overridden
16
+ }
17
+
18
+ /**
19
+ * Set the scm folder name for all IDE handlers
20
+ * @param {string} scmFolderName - The scm folder name
21
+ */
22
+ setBmadFolderName(scmFolderName) {
23
+ this.scmFolderName = scmFolderName;
24
+ // Update all loaded handlers
25
+ for (const handler of this.handlers.values()) {
26
+ if (typeof handler.setBmadFolderName === 'function') {
27
+ handler.setBmadFolderName(scmFolderName);
28
+ }
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Ensure handlers are loaded (lazy loading)
34
+ */
35
+ async ensureInitialized() {
36
+ if (!this._initialized) {
37
+ await this.loadHandlers();
38
+ this._initialized = true;
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Dynamically load all IDE handlers from platform-codes.yaml
44
+ */
45
+ async loadHandlers() {
46
+ await this.loadConfigDrivenHandlers();
47
+ }
48
+
49
+ /**
50
+ * Load config-driven handlers from platform-codes.yaml
51
+ * This creates ConfigDrivenIdeSetup instances for platforms with installer config
52
+ */
53
+ async loadConfigDrivenHandlers() {
54
+ const { loadPlatformCodes } = require('./platform-codes');
55
+ const platformConfig = await loadPlatformCodes();
56
+
57
+ const { ConfigDrivenIdeSetup } = require('./_config-driven');
58
+
59
+ for (const [platformCode, platformInfo] of Object.entries(platformConfig.platforms)) {
60
+ // Skip if no installer config (platform may not need installation)
61
+ if (!platformInfo.installer) continue;
62
+
63
+ const handler = new ConfigDrivenIdeSetup(platformCode, platformInfo);
64
+ if (typeof handler.setBmadFolderName === 'function') {
65
+ handler.setBmadFolderName(this.scmFolderName);
66
+ }
67
+ this.handlers.set(platformCode, handler);
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Get all available IDEs with their metadata
73
+ * @returns {Array} Array of IDE information objects
74
+ */
75
+ getAvailableIdes() {
76
+ const ides = [];
77
+
78
+ for (const [key, handler] of this.handlers) {
79
+ // Skip handlers without valid names
80
+ const name = handler.displayName || handler.name || key;
81
+
82
+ // Filter out invalid entries (undefined name, empty key, etc.)
83
+ if (!key || !name || typeof key !== 'string' || typeof name !== 'string') {
84
+ continue;
85
+ }
86
+
87
+ // Skip suspended platforms (e.g., IDE doesn't support skills yet)
88
+ if (handler.platformConfig?.suspended) {
89
+ continue;
90
+ }
91
+
92
+ ides.push({
93
+ value: key,
94
+ name: name,
95
+ preferred: handler.preferred || false,
96
+ });
97
+ }
98
+
99
+ // Sort: preferred first, then alphabetical
100
+ ides.sort((a, b) => {
101
+ if (a.preferred && !b.preferred) return -1;
102
+ if (!a.preferred && b.preferred) return 1;
103
+ return a.name.localeCompare(b.name);
104
+ });
105
+
106
+ return ides;
107
+ }
108
+
109
+ /**
110
+ * Get preferred IDEs
111
+ * @returns {Array} Array of preferred IDE information
112
+ */
113
+ getPreferredIdes() {
114
+ return this.getAvailableIdes().filter((ide) => ide.preferred);
115
+ }
116
+
117
+ /**
118
+ * Get non-preferred IDEs
119
+ * @returns {Array} Array of non-preferred IDE information
120
+ */
121
+ getOtherIdes() {
122
+ return this.getAvailableIdes().filter((ide) => !ide.preferred);
123
+ }
124
+
125
+ /**
126
+ * Setup IDE configuration
127
+ * @param {string} ideName - Name of the IDE
128
+ * @param {string} projectDir - Project directory
129
+ * @param {string} scmDir - SCM installation directory
130
+ * @param {Object} options - Setup options
131
+ */
132
+ async setup(ideName, projectDir, scmDir, options = {}) {
133
+ const handler = this.handlers.get(ideName.toLowerCase());
134
+
135
+ if (!handler) {
136
+ await prompts.log.warn(`IDE '${ideName}' is not yet supported`);
137
+ await prompts.log.message(`Supported IDEs: ${[...this.handlers.keys()].join(', ')}`);
138
+ return { success: false, ide: ideName, error: 'unsupported IDE' };
139
+ }
140
+
141
+ // Block suspended platforms — clean up legacy files but don't install
142
+ if (handler.platformConfig?.suspended) {
143
+ if (!options.silent) {
144
+ await prompts.log.warn(`${handler.displayName || ideName}: ${handler.platformConfig.suspended}`);
145
+ }
146
+ // Still clean up legacy artifacts so old broken configs don't linger
147
+ if (typeof handler.cleanup === 'function') {
148
+ try {
149
+ await handler.cleanup(projectDir, { silent: true });
150
+ } catch {
151
+ // Best-effort cleanup — don't let stale files block the suspended result
152
+ }
153
+ }
154
+ return { success: false, ide: ideName, error: 'suspended' };
155
+ }
156
+
157
+ try {
158
+ const handlerResult = await handler.setup(projectDir, scmDir, options);
159
+ // Build detail string from handler-returned data
160
+ let detail = '';
161
+ if (handlerResult && handlerResult.results) {
162
+ const r = handlerResult.results;
163
+ const count = r.skillDirectories || r.skills || 0;
164
+ if (count > 0) detail = `${count} skills`;
165
+ }
166
+ // Propagate handler's success status (default true for backward compat)
167
+ const success = handlerResult?.success !== false;
168
+ return { success, ide: ideName, detail, error: handlerResult?.error, handlerResult };
169
+ } catch (error) {
170
+ await prompts.log.error(`Failed to setup ${ideName}: ${error.message}`);
171
+ return { success: false, ide: ideName, error: error.message };
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Cleanup IDE configurations
177
+ * @param {string} projectDir - Project directory
178
+ * @param {Object} [options] - Cleanup options passed through to handlers
179
+ */
180
+ async cleanup(projectDir, options = {}) {
181
+ const results = [];
182
+
183
+ for (const [name, handler] of this.handlers) {
184
+ try {
185
+ await handler.cleanup(projectDir, options);
186
+ results.push({ ide: name, success: true });
187
+ } catch (error) {
188
+ results.push({ ide: name, success: false, error: error.message });
189
+ }
190
+ }
191
+
192
+ return results;
193
+ }
194
+
195
+ /**
196
+ * Cleanup only the IDEs in the provided list
197
+ * Falls back to cleanup() (all handlers) if ideList is empty or undefined
198
+ * @param {string} projectDir - Project directory
199
+ * @param {Array<string>} ideList - List of IDE names to clean up
200
+ * @param {Object} [options] - Cleanup options passed through to handlers
201
+ * @returns {Array} Results array
202
+ */
203
+ async cleanupByList(projectDir, ideList, options = {}) {
204
+ if (!ideList || ideList.length === 0) {
205
+ return this.cleanup(projectDir, options);
206
+ }
207
+
208
+ await this.ensureInitialized();
209
+ const results = [];
210
+
211
+ // Build lowercase lookup for case-insensitive matching
212
+ const lowercaseHandlers = new Map([...this.handlers.entries()].map(([k, v]) => [k.toLowerCase(), v]));
213
+
214
+ for (const ideName of ideList) {
215
+ const handler = lowercaseHandlers.get(ideName.toLowerCase());
216
+ if (!handler) continue;
217
+
218
+ try {
219
+ await handler.cleanup(projectDir, options);
220
+ results.push({ ide: ideName, success: true });
221
+ } catch (error) {
222
+ results.push({ ide: ideName, success: false, error: error.message });
223
+ }
224
+ }
225
+
226
+ return results;
227
+ }
228
+
229
+ /**
230
+ * Detect installed IDEs
231
+ * @param {string} projectDir - Project directory
232
+ * @returns {Array} List of detected IDEs
233
+ */
234
+ async detectInstalledIdes(projectDir) {
235
+ const detected = [];
236
+
237
+ for (const [name, handler] of this.handlers) {
238
+ if (typeof handler.detect === 'function' && (await handler.detect(projectDir))) {
239
+ detected.push(name);
240
+ }
241
+ }
242
+
243
+ return detected;
244
+ }
245
+ }
246
+
247
+ module.exports = { IdeManager };
@@ -0,0 +1,37 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const yaml = require('yaml');
4
+
5
+ const PLATFORM_CODES_PATH = path.join(__dirname, 'platform-codes.yaml');
6
+
7
+ let _cachedPlatformCodes = null;
8
+
9
+ /**
10
+ * Load the platform codes configuration from YAML
11
+ * @returns {Object} Platform codes configuration
12
+ */
13
+ async function loadPlatformCodes() {
14
+ if (_cachedPlatformCodes) {
15
+ return _cachedPlatformCodes;
16
+ }
17
+
18
+ if (!(await fs.pathExists(PLATFORM_CODES_PATH))) {
19
+ throw new Error(`Platform codes configuration not found at: ${PLATFORM_CODES_PATH}`);
20
+ }
21
+
22
+ const content = await fs.readFile(PLATFORM_CODES_PATH, 'utf8');
23
+ _cachedPlatformCodes = yaml.parse(content);
24
+ return _cachedPlatformCodes;
25
+ }
26
+
27
+ /**
28
+ * Clear the cached platform codes (useful for testing)
29
+ */
30
+ function clearCache() {
31
+ _cachedPlatformCodes = null;
32
+ }
33
+
34
+ module.exports = {
35
+ loadPlatformCodes,
36
+ clearCache,
37
+ };
@@ -0,0 +1,192 @@
1
+ # SCM Platform Codes Configuration
2
+ #
3
+ # Each platform entry has:
4
+ # name: Display name shown to users
5
+ # preferred: Whether shown as a recommended option on install
6
+ # suspended: (optional) Message explaining why install is blocked
7
+ # installer:
8
+ # target_dir: Directory where skill directories are installed
9
+ # legacy_targets: (optional) Old target dirs to clean up on reinstall
10
+ # ancestor_conflict_check: (optional) Refuse install when ancestor dir has SCM files
11
+
12
+ platforms:
13
+ antigravity:
14
+ name: "Google Antigravity"
15
+ preferred: false
16
+ installer:
17
+ legacy_targets:
18
+ - .agent/workflows
19
+ target_dir: .agent/skills
20
+
21
+ auggie:
22
+ name: "Auggie"
23
+ preferred: false
24
+ installer:
25
+ legacy_targets:
26
+ - .augment/commands
27
+ target_dir: .augment/skills
28
+
29
+ claude-code:
30
+ name: "Claude Code"
31
+ preferred: true
32
+ installer:
33
+ legacy_targets:
34
+ - .claude/commands
35
+ target_dir: .claude/skills
36
+
37
+ cline:
38
+ name: "Cline"
39
+ preferred: false
40
+ installer:
41
+ legacy_targets:
42
+ - .clinerules/workflows
43
+ target_dir: .cline/skills
44
+
45
+ codex:
46
+ name: "Codex"
47
+ preferred: false
48
+ installer:
49
+ legacy_targets:
50
+ - .codex/prompts
51
+ - ~/.codex/prompts
52
+ target_dir: .agents/skills
53
+
54
+ codebuddy:
55
+ name: "CodeBuddy"
56
+ preferred: false
57
+ installer:
58
+ legacy_targets:
59
+ - .codebuddy/commands
60
+ target_dir: .codebuddy/skills
61
+
62
+ crush:
63
+ name: "Crush"
64
+ preferred: false
65
+ installer:
66
+ legacy_targets:
67
+ - .crush/commands
68
+ target_dir: .crush/skills
69
+
70
+ cursor:
71
+ name: "Cursor"
72
+ preferred: true
73
+ installer:
74
+ legacy_targets:
75
+ - .cursor/commands
76
+ target_dir: .cursor/skills
77
+
78
+ gemini:
79
+ name: "Gemini CLI"
80
+ preferred: false
81
+ installer:
82
+ legacy_targets:
83
+ - .gemini/commands
84
+ target_dir: .gemini/skills
85
+
86
+ github-copilot:
87
+ name: "GitHub Copilot"
88
+ preferred: false
89
+ installer:
90
+ legacy_targets:
91
+ - .github/agents
92
+ - .github/prompts
93
+ target_dir: .github/skills
94
+
95
+ iflow:
96
+ name: "iFlow"
97
+ preferred: false
98
+ installer:
99
+ legacy_targets:
100
+ - .iflow/commands
101
+ target_dir: .iflow/skills
102
+
103
+ junie:
104
+ name: "Junie"
105
+ preferred: false
106
+ installer:
107
+ target_dir: .agents/skills
108
+
109
+ kilo:
110
+ name: "KiloCoder"
111
+ preferred: false
112
+ installer:
113
+ legacy_targets:
114
+ - .kilocode/workflows
115
+ target_dir: .kilocode/skills
116
+
117
+ kiro:
118
+ name: "Kiro"
119
+ preferred: false
120
+ installer:
121
+ legacy_targets:
122
+ - .kiro/steering
123
+ target_dir: .kiro/skills
124
+
125
+ ona:
126
+ name: "Ona"
127
+ preferred: false
128
+ installer:
129
+ target_dir: .ona/skills
130
+
131
+ opencode:
132
+ name: "OpenCode"
133
+ preferred: false
134
+ installer:
135
+ legacy_targets:
136
+ - .opencode/agents
137
+ - .opencode/commands
138
+ - .opencode/agent
139
+ - .opencode/command
140
+ target_dir: .opencode/skills
141
+
142
+ pi:
143
+ name: "Pi"
144
+ preferred: false
145
+ installer:
146
+ target_dir: .pi/skills
147
+
148
+ qoder:
149
+ name: "Qoder"
150
+ preferred: false
151
+ installer:
152
+ target_dir: .qoder/skills
153
+
154
+ qwen:
155
+ name: "QwenCoder"
156
+ preferred: false
157
+ installer:
158
+ legacy_targets:
159
+ - .qwen/commands
160
+ target_dir: .qwen/skills
161
+
162
+ roo:
163
+ name: "Roo Code"
164
+ preferred: false
165
+ installer:
166
+ legacy_targets:
167
+ - .roo/commands
168
+ target_dir: .roo/skills
169
+
170
+ rovo-dev:
171
+ name: "Rovo Dev"
172
+ preferred: false
173
+ installer:
174
+ legacy_targets:
175
+ - .rovodev/workflows
176
+ target_dir: .rovodev/skills
177
+
178
+ trae:
179
+ name: "Trae"
180
+ preferred: false
181
+ installer:
182
+ legacy_targets:
183
+ - .trae/rules
184
+ target_dir: .trae/skills
185
+
186
+ windsurf:
187
+ name: "Windsurf"
188
+ preferred: false
189
+ installer:
190
+ legacy_targets:
191
+ - .windsurf/workflows
192
+ target_dir: .windsurf/skills
@@ -0,0 +1,180 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, SCM_FOLDER_NAME } = require('./path-utils');
4
+
5
+ /**
6
+ * Generates launcher command files for each agent
7
+ */
8
+ class AgentCommandGenerator {
9
+ constructor(scmFolderName = SCM_FOLDER_NAME) {
10
+ this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
11
+ this.scmFolderName = scmFolderName;
12
+ }
13
+
14
+ /**
15
+ * Collect agent artifacts for IDE installation
16
+ * @param {string} scmDir - SCM installation directory
17
+ * @param {Array} selectedModules - Modules to include
18
+ * @returns {Object} Artifacts array with metadata
19
+ */
20
+ async collectAgentArtifacts(scmDir, selectedModules = []) {
21
+ const { getAgentsFromBmad } = require('./scm-artifacts');
22
+
23
+ // Get agents from INSTALLED scm/ directory
24
+ const agents = await getAgentsFromBmad(scmDir, selectedModules);
25
+
26
+ const artifacts = [];
27
+
28
+ for (const agent of agents) {
29
+ const launcherContent = await this.generateLauncherContent(agent);
30
+ // Use relativePath if available (for nested agents), otherwise just name with .md
31
+ const agentPathInModule = agent.relativePath || `${agent.name}.md`;
32
+ // Calculate the relative agent path (e.g., bmm/agents/pm.md)
33
+ let agentRelPath = agent.path || '';
34
+ // Normalize path separators for cross-platform compatibility
35
+ agentRelPath = agentRelPath.replaceAll('\\', '/');
36
+ // Remove _scm/ prefix if present to get relative path from project root
37
+ // Handle both absolute paths (/path/to/_scm/...) and relative paths (_scm/...)
38
+ if (agentRelPath.includes('_scm/')) {
39
+ const parts = agentRelPath.split(/_scm\//);
40
+ if (parts.length > 1) {
41
+ agentRelPath = parts.slice(1).join('/');
42
+ }
43
+ }
44
+ artifacts.push({
45
+ type: 'agent-launcher',
46
+ name: agent.name,
47
+ description: agent.description || `${agent.name} agent`,
48
+ module: agent.module,
49
+ canonicalId: agent.canonicalId || '',
50
+ relativePath: path.join(agent.module, 'agents', agentPathInModule), // For command filename
51
+ agentPath: agentRelPath, // Relative path to actual agent file
52
+ content: launcherContent,
53
+ sourcePath: agent.path,
54
+ });
55
+ }
56
+
57
+ return {
58
+ artifacts,
59
+ counts: {
60
+ agents: agents.length,
61
+ },
62
+ };
63
+ }
64
+
65
+ /**
66
+ * Generate launcher content for an agent
67
+ * @param {Object} agent - Agent metadata
68
+ * @returns {string} Launcher file content
69
+ */
70
+ async generateLauncherContent(agent) {
71
+ // Load the template
72
+ const template = await fs.readFile(this.templatePath, 'utf8');
73
+
74
+ // Replace template variables
75
+ // Use relativePath if available (for nested agents), otherwise just name with .md
76
+ const agentPathInModule = agent.relativePath || `${agent.name}.md`;
77
+ return template
78
+ .replaceAll('{{name}}', agent.name)
79
+ .replaceAll('{{module}}', agent.module)
80
+ .replaceAll('{{path}}', agentPathInModule)
81
+ .replaceAll('{{description}}', agent.description || `${agent.name} agent`)
82
+ .replaceAll('_scm', this.scmFolderName)
83
+ .replaceAll('_scm', '_scm');
84
+ }
85
+
86
+ /**
87
+ * Write agent launcher artifacts to IDE commands directory
88
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
89
+ * @param {Array} artifacts - Agent launcher artifacts
90
+ * @returns {number} Count of launchers written
91
+ */
92
+ async writeAgentLaunchers(baseCommandsDir, artifacts) {
93
+ let writtenCount = 0;
94
+
95
+ for (const artifact of artifacts) {
96
+ if (artifact.type === 'agent-launcher') {
97
+ const moduleAgentsDir = path.join(baseCommandsDir, artifact.module, 'agents');
98
+ await fs.ensureDir(moduleAgentsDir);
99
+
100
+ const launcherPath = path.join(moduleAgentsDir, `${artifact.name}.md`);
101
+ await fs.writeFile(launcherPath, artifact.content);
102
+ writtenCount++;
103
+ }
104
+ }
105
+
106
+ return writtenCount;
107
+ }
108
+
109
+ /**
110
+ * Write agent launcher artifacts using underscore format (Windows-compatible)
111
+ * Creates flat files like: scm_bmm_pm.md
112
+ *
113
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
114
+ * @param {Array} artifacts - Agent launcher artifacts
115
+ * @returns {number} Count of launchers written
116
+ */
117
+ async writeColonArtifacts(baseCommandsDir, artifacts) {
118
+ let writtenCount = 0;
119
+
120
+ for (const artifact of artifacts) {
121
+ if (artifact.type === 'agent-launcher') {
122
+ // Convert relativePath to underscore format: bmm/agents/pm.md → scm_bmm_pm.md
123
+ const flatName = toColonPath(artifact.relativePath);
124
+ const launcherPath = path.join(baseCommandsDir, flatName);
125
+ await fs.ensureDir(path.dirname(launcherPath));
126
+ await fs.writeFile(launcherPath, artifact.content);
127
+ writtenCount++;
128
+ }
129
+ }
130
+
131
+ return writtenCount;
132
+ }
133
+
134
+ /**
135
+ * Write agent launcher artifacts using dash format (NEW STANDARD)
136
+ * Creates flat files like: scm-agent-bmm-pm.md
137
+ *
138
+ * The scm-agent- prefix distinguishes agents from workflows/tasks/tools.
139
+ *
140
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
141
+ * @param {Array} artifacts - Agent launcher artifacts
142
+ * @returns {number} Count of launchers written
143
+ */
144
+ async writeDashArtifacts(baseCommandsDir, artifacts) {
145
+ let writtenCount = 0;
146
+
147
+ for (const artifact of artifacts) {
148
+ if (artifact.type === 'agent-launcher') {
149
+ // Convert relativePath to dash format: bmm/agents/pm.md → scm-agent-bmm-pm.md
150
+ const flatName = toDashPath(artifact.relativePath);
151
+ const launcherPath = path.join(baseCommandsDir, flatName);
152
+ await fs.ensureDir(path.dirname(launcherPath));
153
+ await fs.writeFile(launcherPath, artifact.content);
154
+ writtenCount++;
155
+ }
156
+ }
157
+
158
+ return writtenCount;
159
+ }
160
+
161
+ /**
162
+ * Get the custom agent name in underscore format (Windows-compatible)
163
+ * @param {string} agentName - Custom agent name
164
+ * @returns {string} Underscore-formatted filename
165
+ */
166
+ getCustomAgentColonName(agentName) {
167
+ return customAgentColonName(agentName);
168
+ }
169
+
170
+ /**
171
+ * Get the custom agent name in underscore format (Windows-compatible)
172
+ * @param {string} agentName - Custom agent name
173
+ * @returns {string} Underscore-formatted filename
174
+ */
175
+ getCustomAgentDashName(agentName) {
176
+ return customAgentDashName(agentName);
177
+ }
178
+ }
179
+
180
+ module.exports = { AgentCommandGenerator };