@cregis-dev/cckit 0.4.0 → 0.4.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 (366) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +76 -84
  3. package/bin/cckit.js +3 -3
  4. package/package.json +7 -5
  5. package/registry.json +234 -234
  6. package/src/adapters/trae-adapter.js +90 -90
  7. package/src/cli.js +2 -2
  8. package/src/commands/init.js +337 -337
  9. package/src/commands/status.js +62 -62
  10. package/src/commands/sync.js +325 -325
  11. package/src/commands/update.js +430 -430
  12. package/src/core/config.js +82 -82
  13. package/src/core/differ.js +57 -57
  14. package/src/core/installer.js +97 -97
  15. package/src/core/plugin-installer.js +278 -278
  16. package/src/core/registry.js +75 -75
  17. package/src/core/templatize.js +42 -42
  18. package/src/core/upstream.js +357 -357
  19. package/src/utils/fs.js +55 -55
  20. package/src/utils/logger.js +16 -16
  21. package/templates/bmad/_config/agent-manifest.csv +12 -12
  22. package/templates/bmad/_config/agents/bmm-analyst.customize.yaml +41 -41
  23. package/templates/bmad/_config/agents/bmm-architect.customize.yaml +41 -41
  24. package/templates/bmad/_config/agents/bmm-dev.customize.yaml +41 -41
  25. package/templates/bmad/_config/agents/bmm-pm.customize.yaml +41 -41
  26. package/templates/bmad/_config/agents/bmm-qa.customize.yaml +41 -41
  27. package/templates/bmad/_config/agents/bmm-quick-flow-solo-dev.customize.yaml +41 -41
  28. package/templates/bmad/_config/agents/bmm-sm.customize.yaml +41 -41
  29. package/templates/bmad/_config/agents/bmm-tech-writer.customize.yaml +41 -41
  30. package/templates/bmad/_config/agents/bmm-ux-designer.customize.yaml +41 -41
  31. package/templates/bmad/_config/agents/core-bmad-master.customize.yaml +41 -41
  32. package/templates/bmad/_config/agents/tea-tea.customize.yaml +41 -41
  33. package/templates/bmad/_config/bmad-help.csv +48 -48
  34. package/templates/bmad/_config/files-manifest.csv +437 -437
  35. package/templates/bmad/_config/ides/claude-code.yaml +5 -5
  36. package/templates/bmad/_config/ides/opencode.yaml +5 -5
  37. package/templates/bmad/_config/ides/trae.yaml +5 -5
  38. package/templates/bmad/_config/task-manifest.csv +8 -8
  39. package/templates/bmad/_config/tool-manifest.csv +1 -1
  40. package/templates/bmad/_config/workflow-manifest.csv +35 -35
  41. package/templates/bmad/bmm/agents/analyst.md +78 -78
  42. package/templates/bmad/bmm/agents/architect.md +58 -58
  43. package/templates/bmad/bmm/agents/dev.md +69 -69
  44. package/templates/bmad/bmm/agents/pm.md +72 -72
  45. package/templates/bmad/bmm/agents/qa.md +92 -92
  46. package/templates/bmad/bmm/agents/quick-flow-solo-dev.md +69 -69
  47. package/templates/bmad/bmm/agents/sm.md +70 -70
  48. package/templates/bmad/bmm/agents/tech-writer/tech-writer.md +70 -70
  49. package/templates/bmad/bmm/agents/ux-designer.md +57 -57
  50. package/templates/bmad/bmm/config.yaml +15 -15
  51. package/templates/bmad/bmm/data/project-context-template.md +26 -26
  52. package/templates/bmad/bmm/module-help.csv +31 -31
  53. package/templates/bmad/bmm/teams/default-party.csv +20 -20
  54. package/templates/bmad/bmm/teams/team-fullstack.yaml +12 -12
  55. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -10
  56. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -177
  57. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -161
  58. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -199
  59. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -202
  60. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -205
  61. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -219
  62. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -162
  63. package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -57
  64. package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -137
  65. package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -229
  66. package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -238
  67. package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -206
  68. package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -234
  69. package/templates/bmad/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -444
  70. package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -182
  71. package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -237
  72. package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -249
  73. package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -259
  74. package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -177
  75. package/templates/bmad/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -476
  76. package/templates/bmad/bmm/workflows/1-analysis/research/research.template.md +29 -29
  77. package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -137
  78. package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -239
  79. package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -248
  80. package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -202
  81. package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -233
  82. package/templates/bmad/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -487
  83. package/templates/bmad/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -54
  84. package/templates/bmad/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -54
  85. package/templates/bmad/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -54
  86. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +14 -14
  87. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -197
  88. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +10 -10
  89. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -191
  90. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -152
  91. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -224
  92. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -154
  93. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -170
  94. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -226
  95. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -213
  96. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -207
  97. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -226
  98. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -237
  99. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -228
  100. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -231
  101. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -242
  102. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -217
  103. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -124
  104. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -247
  105. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -208
  106. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -249
  107. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -253
  108. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -168
  109. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -226
  110. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -191
  111. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -209
  112. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -174
  113. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -214
  114. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -228
  115. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -217
  116. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -205
  117. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -243
  118. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -263
  119. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -209
  120. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -264
  121. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -242
  122. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -231
  123. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -10
  124. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -63
  125. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -65
  126. package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -63
  127. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -135
  128. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -127
  129. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -190
  130. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -216
  131. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -219
  132. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -234
  133. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -252
  134. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -254
  135. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -224
  136. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -224
  137. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -241
  138. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -248
  139. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -237
  140. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -264
  141. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -171
  142. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -13
  143. package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -42
  144. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -184
  145. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -172
  146. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -173
  147. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -133
  148. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -245
  149. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -129
  150. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -4
  151. package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -54
  152. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -12
  153. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +12 -12
  154. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +6 -6
  155. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -153
  156. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -173
  157. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -224
  158. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -329
  159. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -318
  160. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -359
  161. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -379
  162. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -359
  163. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -76
  164. package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -49
  165. package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -259
  166. package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -233
  167. package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -272
  168. package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -149
  169. package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -57
  170. package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -58
  171. package/templates/bmad/bmm/workflows/4-implementation/code-review/checklist.md +23 -23
  172. package/templates/bmad/bmm/workflows/4-implementation/code-review/instructions.xml +226 -226
  173. package/templates/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -43
  174. package/templates/bmad/bmm/workflows/4-implementation/correct-course/checklist.md +288 -288
  175. package/templates/bmad/bmm/workflows/4-implementation/correct-course/instructions.md +207 -207
  176. package/templates/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -53
  177. package/templates/bmad/bmm/workflows/4-implementation/create-story/checklist.md +358 -358
  178. package/templates/bmad/bmm/workflows/4-implementation/create-story/instructions.xml +346 -346
  179. package/templates/bmad/bmm/workflows/4-implementation/create-story/template.md +49 -49
  180. package/templates/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -52
  181. package/templates/bmad/bmm/workflows/4-implementation/dev-story/checklist.md +80 -80
  182. package/templates/bmad/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -410
  183. package/templates/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -20
  184. package/templates/bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -1444
  185. package/templates/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -52
  186. package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -33
  187. package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -226
  188. package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -55
  189. package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -47
  190. package/templates/bmad/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -230
  191. package/templates/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -25
  192. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -174
  193. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -118
  194. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -111
  195. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -111
  196. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -104
  197. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -146
  198. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -50
  199. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -189
  200. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +143 -143
  201. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +126 -126
  202. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -200
  203. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -74
  204. package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -79
  205. package/templates/bmad/bmm/workflows/document-project/checklist.md +245 -245
  206. package/templates/bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -12
  207. package/templates/bmad/bmm/workflows/document-project/instructions.md +130 -130
  208. package/templates/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -345
  209. package/templates/bmad/bmm/workflows/document-project/templates/index-template.md +169 -169
  210. package/templates/bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -103
  211. package/templates/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -160
  212. package/templates/bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -135
  213. package/templates/bmad/bmm/workflows/document-project/workflow.yaml +22 -22
  214. package/templates/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -298
  215. package/templates/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -31
  216. package/templates/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -1106
  217. package/templates/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -31
  218. package/templates/bmad/bmm/workflows/generate-project-context/project-context-template.md +21 -21
  219. package/templates/bmad/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -184
  220. package/templates/bmad/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -318
  221. package/templates/bmad/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -278
  222. package/templates/bmad/bmm/workflows/generate-project-context/workflow.md +49 -49
  223. package/templates/bmad/bmm/workflows/qa/automate/checklist.md +33 -33
  224. package/templates/bmad/bmm/workflows/qa/automate/instructions.md +110 -110
  225. package/templates/bmad/bmm/workflows/qa/automate/workflow.yaml +44 -44
  226. package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -33
  227. package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -110
  228. package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -42
  229. package/templates/bmad/commands/bmad-agent-bmad-master.md +15 -15
  230. package/templates/bmad/commands/bmad-agent-bmm-analyst.md +15 -15
  231. package/templates/bmad/commands/bmad-agent-bmm-architect.md +15 -15
  232. package/templates/bmad/commands/bmad-agent-bmm-dev.md +15 -15
  233. package/templates/bmad/commands/bmad-agent-bmm-pm.md +15 -15
  234. package/templates/bmad/commands/bmad-agent-bmm-qa.md +15 -15
  235. package/templates/bmad/commands/bmad-agent-bmm-quick-flow-solo-dev.md +15 -15
  236. package/templates/bmad/commands/bmad-agent-bmm-sm.md +15 -15
  237. package/templates/bmad/commands/bmad-agent-bmm-tech-writer.md +15 -15
  238. package/templates/bmad/commands/bmad-agent-bmm-ux-designer.md +15 -15
  239. package/templates/bmad/commands/bmad-agent-tea-tea.md +15 -15
  240. package/templates/bmad/commands/bmad-bmm-check-implementation-readiness.md +6 -6
  241. package/templates/bmad/commands/bmad-bmm-code-review.md +14 -14
  242. package/templates/bmad/commands/bmad-bmm-correct-course.md +14 -14
  243. package/templates/bmad/commands/bmad-bmm-create-architecture.md +6 -6
  244. package/templates/bmad/commands/bmad-bmm-create-epics-and-stories.md +6 -6
  245. package/templates/bmad/commands/bmad-bmm-create-prd.md +6 -6
  246. package/templates/bmad/commands/bmad-bmm-create-product-brief.md +6 -6
  247. package/templates/bmad/commands/bmad-bmm-create-story.md +14 -14
  248. package/templates/bmad/commands/bmad-bmm-create-ux-design.md +6 -6
  249. package/templates/bmad/commands/bmad-bmm-dev-story.md +14 -14
  250. package/templates/bmad/commands/bmad-bmm-document-project.md +14 -14
  251. package/templates/bmad/commands/bmad-bmm-domain-research.md +6 -6
  252. package/templates/bmad/commands/bmad-bmm-edit-prd.md +6 -6
  253. package/templates/bmad/commands/bmad-bmm-generate-project-context.md +6 -6
  254. package/templates/bmad/commands/bmad-bmm-market-research.md +6 -6
  255. package/templates/bmad/commands/bmad-bmm-qa-automate.md +15 -15
  256. package/templates/bmad/commands/bmad-bmm-qa-generate-e2e-tests.md +14 -14
  257. package/templates/bmad/commands/bmad-bmm-quick-dev.md +6 -6
  258. package/templates/bmad/commands/bmad-bmm-quick-spec.md +6 -6
  259. package/templates/bmad/commands/bmad-bmm-retrospective.md +14 -14
  260. package/templates/bmad/commands/bmad-bmm-sprint-planning.md +14 -14
  261. package/templates/bmad/commands/bmad-bmm-sprint-status.md +14 -14
  262. package/templates/bmad/commands/bmad-bmm-technical-research.md +6 -6
  263. package/templates/bmad/commands/bmad-bmm-validate-prd.md +6 -6
  264. package/templates/bmad/commands/bmad-brainstorming.md +6 -6
  265. package/templates/bmad/commands/bmad-editorial-review-prose.md +10 -10
  266. package/templates/bmad/commands/bmad-editorial-review-structure.md +10 -10
  267. package/templates/bmad/commands/bmad-help.md +10 -10
  268. package/templates/bmad/commands/bmad-index-docs.md +10 -10
  269. package/templates/bmad/commands/bmad-party-mode.md +6 -6
  270. package/templates/bmad/commands/bmad-review-adversarial-general.md +10 -10
  271. package/templates/bmad/commands/bmad-review-edge-case-hunter.md +10 -10
  272. package/templates/bmad/commands/bmad-shard-doc.md +10 -10
  273. package/templates/bmad/commands/bmad-tea-teach-me-testing.md +6 -6
  274. package/templates/bmad/commands/bmad-tea-testarch-atdd.md +14 -14
  275. package/templates/bmad/commands/bmad-tea-testarch-automate.md +14 -14
  276. package/templates/bmad/commands/bmad-tea-testarch-ci.md +14 -14
  277. package/templates/bmad/commands/bmad-tea-testarch-framework.md +14 -14
  278. package/templates/bmad/commands/bmad-tea-testarch-nfr.md +14 -14
  279. package/templates/bmad/commands/bmad-tea-testarch-test-design.md +14 -14
  280. package/templates/bmad/commands/bmad-tea-testarch-test-review.md +14 -14
  281. package/templates/bmad/commands/bmad-tea-testarch-trace.md +14 -14
  282. package/templates/bmad/core/agents/bmad-master.md +56 -56
  283. package/templates/bmad/core/config.yaml +8 -8
  284. package/templates/bmad/core/module-help.csv +10 -10
  285. package/templates/bmad/core/tasks/editorial-review-prose.xml +101 -101
  286. package/templates/bmad/core/tasks/editorial-review-structure.xml +207 -207
  287. package/templates/bmad/core/tasks/help.md +86 -86
  288. package/templates/bmad/core/tasks/index-docs.xml +64 -64
  289. package/templates/bmad/core/tasks/review-adversarial-general.xml +48 -48
  290. package/templates/bmad/core/tasks/review-edge-case-hunter.xml +63 -63
  291. package/templates/bmad/core/tasks/shard-doc.xml +107 -107
  292. package/templates/bmad/core/tasks/workflow.xml +234 -234
  293. package/templates/bmad/core/workflows/advanced-elicitation/methods.csv +51 -51
  294. package/templates/bmad/core/workflows/advanced-elicitation/workflow.xml +117 -117
  295. package/templates/bmad/core/workflows/brainstorming/brain-methods.csv +61 -61
  296. package/templates/bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +210 -210
  297. package/templates/bmad/core/workflows/brainstorming/steps/step-01b-continue.md +122 -122
  298. package/templates/bmad/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -225
  299. package/templates/bmad/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -237
  300. package/templates/bmad/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -209
  301. package/templates/bmad/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -264
  302. package/templates/bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -399
  303. package/templates/bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -303
  304. package/templates/bmad/core/workflows/brainstorming/template.md +15 -15
  305. package/templates/bmad/core/workflows/brainstorming/workflow.md +60 -60
  306. package/templates/bmad/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -138
  307. package/templates/bmad/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -187
  308. package/templates/bmad/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -168
  309. package/templates/bmad/core/workflows/party-mode/workflow.md +194 -194
  310. package/templates/bmad/tea/agents/tea.md +71 -71
  311. package/templates/bmad/tea/config.yaml +24 -24
  312. package/templates/mcp/claude-code/.mcp.json +35 -35
  313. package/templates/mcp/trae/mcp.json +35 -35
  314. package/templates/trae-bmad/rules/bmad-agent-bmad-master.md +15 -15
  315. package/templates/trae-bmad/rules/bmad-agent-bmm-analyst.md +15 -15
  316. package/templates/trae-bmad/rules/bmad-agent-bmm-architect.md +15 -15
  317. package/templates/trae-bmad/rules/bmad-agent-bmm-dev.md +15 -15
  318. package/templates/trae-bmad/rules/bmad-agent-bmm-pm.md +15 -15
  319. package/templates/trae-bmad/rules/bmad-agent-bmm-qa.md +15 -15
  320. package/templates/trae-bmad/rules/bmad-agent-bmm-quick-flow-solo-dev.md +15 -15
  321. package/templates/trae-bmad/rules/bmad-agent-bmm-sm.md +15 -15
  322. package/templates/trae-bmad/rules/bmad-agent-bmm-tech-writer.md +15 -15
  323. package/templates/trae-bmad/rules/bmad-agent-bmm-ux-designer.md +15 -15
  324. package/templates/trae-bmad/rules/bmad-agent-tea-tea.md +15 -15
  325. package/templates/trae-bmad/rules/bmad-bmm-check-implementation-readiness.md +6 -6
  326. package/templates/trae-bmad/rules/bmad-bmm-code-review.md +14 -14
  327. package/templates/trae-bmad/rules/bmad-bmm-correct-course.md +14 -14
  328. package/templates/trae-bmad/rules/bmad-bmm-create-architecture.md +6 -6
  329. package/templates/trae-bmad/rules/bmad-bmm-create-epics-and-stories.md +6 -6
  330. package/templates/trae-bmad/rules/bmad-bmm-create-prd.md +6 -6
  331. package/templates/trae-bmad/rules/bmad-bmm-create-product-brief.md +6 -6
  332. package/templates/trae-bmad/rules/bmad-bmm-create-story.md +14 -14
  333. package/templates/trae-bmad/rules/bmad-bmm-create-ux-design.md +6 -6
  334. package/templates/trae-bmad/rules/bmad-bmm-dev-story.md +14 -14
  335. package/templates/trae-bmad/rules/bmad-bmm-document-project.md +14 -14
  336. package/templates/trae-bmad/rules/bmad-bmm-domain-research.md +6 -6
  337. package/templates/trae-bmad/rules/bmad-bmm-edit-prd.md +6 -6
  338. package/templates/trae-bmad/rules/bmad-bmm-generate-project-context.md +6 -6
  339. package/templates/trae-bmad/rules/bmad-bmm-market-research.md +6 -6
  340. package/templates/trae-bmad/rules/bmad-bmm-qa-automate.md +15 -15
  341. package/templates/trae-bmad/rules/bmad-bmm-qa-generate-e2e-tests.md +14 -14
  342. package/templates/trae-bmad/rules/bmad-bmm-quick-dev.md +6 -6
  343. package/templates/trae-bmad/rules/bmad-bmm-quick-spec.md +6 -6
  344. package/templates/trae-bmad/rules/bmad-bmm-retrospective.md +14 -14
  345. package/templates/trae-bmad/rules/bmad-bmm-sprint-planning.md +14 -14
  346. package/templates/trae-bmad/rules/bmad-bmm-sprint-status.md +14 -14
  347. package/templates/trae-bmad/rules/bmad-bmm-technical-research.md +6 -6
  348. package/templates/trae-bmad/rules/bmad-bmm-validate-prd.md +6 -6
  349. package/templates/trae-bmad/rules/bmad-brainstorming.md +6 -6
  350. package/templates/trae-bmad/rules/bmad-editorial-review-prose.md +10 -10
  351. package/templates/trae-bmad/rules/bmad-editorial-review-structure.md +10 -10
  352. package/templates/trae-bmad/rules/bmad-help.md +10 -10
  353. package/templates/trae-bmad/rules/bmad-index-docs.md +10 -10
  354. package/templates/trae-bmad/rules/bmad-party-mode.md +6 -6
  355. package/templates/trae-bmad/rules/bmad-review-adversarial-general.md +10 -10
  356. package/templates/trae-bmad/rules/bmad-review-edge-case-hunter.md +10 -10
  357. package/templates/trae-bmad/rules/bmad-shard-doc.md +10 -10
  358. package/templates/trae-bmad/rules/bmad-tea-teach-me-testing.md +6 -6
  359. package/templates/trae-bmad/rules/bmad-tea-testarch-atdd.md +14 -14
  360. package/templates/trae-bmad/rules/bmad-tea-testarch-automate.md +14 -14
  361. package/templates/trae-bmad/rules/bmad-tea-testarch-ci.md +14 -14
  362. package/templates/trae-bmad/rules/bmad-tea-testarch-framework.md +14 -14
  363. package/templates/trae-bmad/rules/bmad-tea-testarch-nfr.md +14 -14
  364. package/templates/trae-bmad/rules/bmad-tea-testarch-test-design.md +14 -14
  365. package/templates/trae-bmad/rules/bmad-tea-testarch-test-review.md +14 -14
  366. package/templates/trae-bmad/rules/bmad-tea-testarch-trace.md +14 -14
@@ -1,82 +1,82 @@
1
- const LANG_MAP = {
2
- ts: 'typescript', typescript: 'typescript',
3
- py: 'python', python: 'python',
4
- go: 'golang', golang: 'golang'
5
- }
6
-
7
- export const DEFAULT_CONFIG = {
8
- user_name: 'User',
9
- communication_language: '汉语',
10
- document_output_language: '汉语',
11
- languages: ['typescript', 'python', 'golang'],
12
- modules: 'all',
13
- plugins: 'default',
14
- ides: ['claude-code', 'trae'],
15
- excludeGroups: []
16
- }
17
-
18
- /**
19
- * Merge CLI flags into a config object, falling back to DEFAULT_CONFIG
20
- * for any values not provided.
21
- *
22
- * Supported flags:
23
- * userName - Override user_name
24
- * communicationLanguage - Override communication_language
25
- * docLanguage - Override document_output_language
26
- * lang - Comma-separated language aliases (ts,py,go)
27
- * modules - "all" or comma-separated module IDs
28
- * ides - Comma-separated IDE identifiers
29
- * trae - Set to false to exclude trae from ides
30
- * bmad - Set to false to add "bmad" to excludeGroups
31
- * ecc - Set to false to add "ecc" to excludeGroups
32
- * mcp - Set to false to add "mcp" to excludeGroups
33
- * plugins - "default", "none", or comma-separated plugin IDs.
34
- * Set to false (via --no-plugins) to disable plugins.
35
- *
36
- * @param {object} [flags={}] - CLI flags parsed by commander
37
- * @returns {object} Merged config
38
- */
39
- export function mergeConfig(flags = {}) {
40
- const config = { ...DEFAULT_CONFIG, excludeGroups: [] }
41
-
42
- if (flags.userName) config.user_name = flags.userName
43
- if (flags.communicationLanguage) config.communication_language = flags.communicationLanguage
44
- if (flags.docLanguage) config.document_output_language = flags.docLanguage
45
-
46
- if (flags.lang) {
47
- config.languages = flags.lang
48
- .split(',')
49
- .map(l => LANG_MAP[l.trim().toLowerCase()])
50
- .filter(Boolean)
51
- }
52
-
53
- if (flags.modules) {
54
- config.modules = flags.modules === 'all'
55
- ? 'all'
56
- : flags.modules.split(',').map(m => m.trim())
57
- }
58
-
59
- if (flags.ides) {
60
- config.ides = flags.ides.split(',').map(i => i.trim())
61
- } else {
62
- // Handle --no-trae / --no-claude-code negation flags
63
- const ides = ['claude-code', 'trae']
64
- if (flags.trae === false) {
65
- config.ides = ides.filter(i => i !== 'trae')
66
- }
67
- }
68
-
69
- if (flags.bmad === false) config.excludeGroups.push('bmad')
70
- if (flags.ecc === false) config.excludeGroups.push('ecc')
71
- if (flags.mcp === false) config.excludeGroups.push('mcp')
72
-
73
- if (flags.plugins === false) {
74
- config.plugins = 'none'
75
- } else if (typeof flags.plugins === 'string') {
76
- config.plugins = flags.plugins === 'default' || flags.plugins === 'none'
77
- ? flags.plugins
78
- : flags.plugins.split(',').map(p => p.trim())
79
- }
80
-
81
- return config
82
- }
1
+ const LANG_MAP = {
2
+ ts: 'typescript', typescript: 'typescript',
3
+ py: 'python', python: 'python',
4
+ go: 'golang', golang: 'golang'
5
+ }
6
+
7
+ export const DEFAULT_CONFIG = {
8
+ user_name: 'User',
9
+ communication_language: '汉语',
10
+ document_output_language: '汉语',
11
+ languages: ['typescript', 'python', 'golang'],
12
+ modules: 'all',
13
+ plugins: 'default',
14
+ ides: ['claude-code', 'trae'],
15
+ excludeGroups: []
16
+ }
17
+
18
+ /**
19
+ * Merge CLI flags into a config object, falling back to DEFAULT_CONFIG
20
+ * for any values not provided.
21
+ *
22
+ * Supported flags:
23
+ * userName - Override user_name
24
+ * communicationLanguage - Override communication_language
25
+ * docLanguage - Override document_output_language
26
+ * lang - Comma-separated language aliases (ts,py,go)
27
+ * modules - "all" or comma-separated module IDs
28
+ * ides - Comma-separated IDE identifiers
29
+ * trae - Set to false to exclude trae from ides
30
+ * bmad - Set to false to add "bmad" to excludeGroups
31
+ * ecc - Set to false to add "ecc" to excludeGroups
32
+ * mcp - Set to false to add "mcp" to excludeGroups
33
+ * plugins - "default", "none", or comma-separated plugin IDs.
34
+ * Set to false (via --no-plugins) to disable plugins.
35
+ *
36
+ * @param {object} [flags={}] - CLI flags parsed by commander
37
+ * @returns {object} Merged config
38
+ */
39
+ export function mergeConfig(flags = {}) {
40
+ const config = { ...DEFAULT_CONFIG, excludeGroups: [] }
41
+
42
+ if (flags.userName) config.user_name = flags.userName
43
+ if (flags.communicationLanguage) config.communication_language = flags.communicationLanguage
44
+ if (flags.docLanguage) config.document_output_language = flags.docLanguage
45
+
46
+ if (flags.lang) {
47
+ config.languages = flags.lang
48
+ .split(',')
49
+ .map(l => LANG_MAP[l.trim().toLowerCase()])
50
+ .filter(Boolean)
51
+ }
52
+
53
+ if (flags.modules) {
54
+ config.modules = flags.modules === 'all'
55
+ ? 'all'
56
+ : flags.modules.split(',').map(m => m.trim())
57
+ }
58
+
59
+ if (flags.ides) {
60
+ config.ides = flags.ides.split(',').map(i => i.trim())
61
+ } else {
62
+ // Handle --no-trae / --no-claude-code negation flags
63
+ const ides = ['claude-code', 'trae']
64
+ if (flags.trae === false) {
65
+ config.ides = ides.filter(i => i !== 'trae')
66
+ }
67
+ }
68
+
69
+ if (flags.bmad === false) config.excludeGroups.push('bmad')
70
+ if (flags.ecc === false) config.excludeGroups.push('ecc')
71
+ if (flags.mcp === false) config.excludeGroups.push('mcp')
72
+
73
+ if (flags.plugins === false) {
74
+ config.plugins = 'none'
75
+ } else if (typeof flags.plugins === 'string') {
76
+ config.plugins = flags.plugins === 'default' || flags.plugins === 'none'
77
+ ? flags.plugins
78
+ : flags.plugins.split(',').map(p => p.trim())
79
+ }
80
+
81
+ return config
82
+ }
@@ -1,57 +1,57 @@
1
- /**
2
- * Directory snapshotting and diff computation for sync reporting.
3
- *
4
- * Captures file hashes before and after sync, then computes the set
5
- * of added, modified, and deleted files.
6
- */
7
-
8
- import path from 'node:path'
9
- import { listFiles, computeFileHash } from '../utils/fs.js'
10
-
11
- /**
12
- * Create a snapshot of all files in a directory as a Map of relPath → hash.
13
- *
14
- * @param {string} baseDir - Directory to snapshot
15
- * @returns {Promise<Map<string, string>>} Map of relative paths to sha256 hashes
16
- */
17
- export async function snapshotDir(baseDir) {
18
- const files = await listFiles(baseDir)
19
- const entries = await Promise.all(
20
- files.map(async (relPath) => {
21
- const absPath = path.join(baseDir, relPath)
22
- const hash = await computeFileHash(absPath)
23
- const normalized = relPath.replace(/\\/g, '/')
24
- return [normalized, hash]
25
- })
26
- )
27
- return new Map(entries)
28
- }
29
-
30
- /**
31
- * Compute the diff between two directory snapshots.
32
- *
33
- * @param {Map<string, string>} before - Snapshot before changes
34
- * @param {Map<string, string>} after - Snapshot after changes
35
- * @returns {{ added: string[], modified: string[], deleted: string[] }}
36
- */
37
- export function computeDiff(before, after) {
38
- const added = []
39
- const modified = []
40
- const deleted = []
41
-
42
- for (const [filePath, hash] of after) {
43
- if (!before.has(filePath)) {
44
- added.push(filePath)
45
- } else if (before.get(filePath) !== hash) {
46
- modified.push(filePath)
47
- }
48
- }
49
-
50
- for (const filePath of before.keys()) {
51
- if (!after.has(filePath)) {
52
- deleted.push(filePath)
53
- }
54
- }
55
-
56
- return { added: added.sort(), modified: modified.sort(), deleted: deleted.sort() }
57
- }
1
+ /**
2
+ * Directory snapshotting and diff computation for sync reporting.
3
+ *
4
+ * Captures file hashes before and after sync, then computes the set
5
+ * of added, modified, and deleted files.
6
+ */
7
+
8
+ import path from 'node:path'
9
+ import { listFiles, computeFileHash } from '../utils/fs.js'
10
+
11
+ /**
12
+ * Create a snapshot of all files in a directory as a Map of relPath → hash.
13
+ *
14
+ * @param {string} baseDir - Directory to snapshot
15
+ * @returns {Promise<Map<string, string>>} Map of relative paths to sha256 hashes
16
+ */
17
+ export async function snapshotDir(baseDir) {
18
+ const files = await listFiles(baseDir)
19
+ const entries = await Promise.all(
20
+ files.map(async (relPath) => {
21
+ const absPath = path.join(baseDir, relPath)
22
+ const hash = await computeFileHash(absPath)
23
+ const normalized = relPath.replace(/\\/g, '/')
24
+ return [normalized, hash]
25
+ })
26
+ )
27
+ return new Map(entries)
28
+ }
29
+
30
+ /**
31
+ * Compute the diff between two directory snapshots.
32
+ *
33
+ * @param {Map<string, string>} before - Snapshot before changes
34
+ * @param {Map<string, string>} after - Snapshot after changes
35
+ * @returns {{ added: string[], modified: string[], deleted: string[] }}
36
+ */
37
+ export function computeDiff(before, after) {
38
+ const added = []
39
+ const modified = []
40
+ const deleted = []
41
+
42
+ for (const [filePath, hash] of after) {
43
+ if (!before.has(filePath)) {
44
+ added.push(filePath)
45
+ } else if (before.get(filePath) !== hash) {
46
+ modified.push(filePath)
47
+ }
48
+ }
49
+
50
+ for (const filePath of before.keys()) {
51
+ if (!after.has(filePath)) {
52
+ deleted.push(filePath)
53
+ }
54
+ }
55
+
56
+ return { added: added.sort(), modified: modified.sort(), deleted: deleted.sort() }
57
+ }
@@ -1,97 +1,97 @@
1
- import fse from 'fs-extra'
2
- import path from 'node:path'
3
- import { copyWithInterpolation, computeFileHash, listFiles, interpolate } from '../utils/fs.js'
4
-
5
- export class Installer {
6
- constructor({ targetDir, logger }) {
7
- this.targetDir = targetDir
8
- this.logger = logger
9
- this.createdPaths = []
10
- }
11
-
12
- async install(modules, variables) {
13
- const result = { installed: [], fileRegistry: {} }
14
-
15
- try {
16
- for (let i = 0; i < modules.length; i++) {
17
- const mod = modules[i]
18
- this.logger.step(i + 1, modules.length, `Installing ${mod.name}...`)
19
-
20
- const srcExists = await fse.pathExists(mod.templateDir)
21
- if (!srcExists) {
22
- throw new Error(`Template directory not found: ${mod.templateDir}`)
23
- }
24
-
25
- const destDir = path.join(this.targetDir, mod.targetDir)
26
- this.createdPaths.push(destDir)
27
-
28
- if (mod.adapter || mod.prefix) {
29
- await this.installWithTransform(mod, destDir, variables)
30
- } else {
31
- await copyWithInterpolation(mod.templateDir, destDir, variables)
32
- }
33
-
34
- const files = await listFiles(destDir)
35
- for (const file of files) {
36
- const fullPath = path.join(destDir, file)
37
- const hash = await computeFileHash(fullPath)
38
- const relKey = path.join(mod.targetDir, file).replace(/\\/g, '/')
39
- result.fileRegistry[relKey] = hash
40
- }
41
-
42
- result.installed.push({
43
- id: mod.id,
44
- name: mod.name,
45
- files: files.length
46
- })
47
-
48
- this.logger.success(`${mod.name} (${files.length} files)`)
49
- }
50
- } catch (err) {
51
- this.logger.error(`Installation failed: ${err.message}`)
52
- await this.rollback()
53
- throw err
54
- }
55
-
56
- return result
57
- }
58
-
59
- async installWithTransform(mod, destDir, variables) {
60
- const srcFiles = await listFiles(mod.templateDir)
61
-
62
- for (const relPath of srcFiles) {
63
- const srcFile = path.join(mod.templateDir, relPath)
64
- let content = await fse.readFile(srcFile, 'utf8')
65
-
66
- // Interpolate variables
67
- content = interpolate(content, variables)
68
-
69
- // Apply adapter transformation
70
- if (mod.adapter) {
71
- content = mod.adapter(content, path.basename(relPath))
72
- }
73
-
74
- // Apply prefix to filename
75
- let destRelPath = relPath
76
- if (mod.prefix) {
77
- const dir = path.dirname(relPath)
78
- const base = path.basename(relPath)
79
- destRelPath = dir === '.' ? `${mod.prefix}${base}` : path.join(dir, `${mod.prefix}${base}`)
80
- }
81
-
82
- const destFile = path.join(destDir, destRelPath)
83
- await fse.ensureDir(path.dirname(destFile))
84
- await fse.writeFile(destFile, content, 'utf8')
85
- }
86
- }
87
-
88
- async rollback() {
89
- this.logger.warn('Rolling back...')
90
- for (const p of this.createdPaths.reverse()) {
91
- if (await fse.pathExists(p)) {
92
- await fse.remove(p)
93
- this.logger.debug(`Removed: ${p}`)
94
- }
95
- }
96
- }
97
- }
1
+ import fse from 'fs-extra'
2
+ import path from 'node:path'
3
+ import { copyWithInterpolation, computeFileHash, listFiles, interpolate } from '../utils/fs.js'
4
+
5
+ export class Installer {
6
+ constructor({ targetDir, logger }) {
7
+ this.targetDir = targetDir
8
+ this.logger = logger
9
+ this.createdPaths = []
10
+ }
11
+
12
+ async install(modules, variables) {
13
+ const result = { installed: [], fileRegistry: {} }
14
+
15
+ try {
16
+ for (let i = 0; i < modules.length; i++) {
17
+ const mod = modules[i]
18
+ this.logger.step(i + 1, modules.length, `Installing ${mod.name}...`)
19
+
20
+ const srcExists = await fse.pathExists(mod.templateDir)
21
+ if (!srcExists) {
22
+ throw new Error(`Template directory not found: ${mod.templateDir}`)
23
+ }
24
+
25
+ const destDir = path.join(this.targetDir, mod.targetDir)
26
+ this.createdPaths.push(destDir)
27
+
28
+ if (mod.adapter || mod.prefix) {
29
+ await this.installWithTransform(mod, destDir, variables)
30
+ } else {
31
+ await copyWithInterpolation(mod.templateDir, destDir, variables)
32
+ }
33
+
34
+ const files = await listFiles(destDir)
35
+ for (const file of files) {
36
+ const fullPath = path.join(destDir, file)
37
+ const hash = await computeFileHash(fullPath)
38
+ const relKey = path.join(mod.targetDir, file).replace(/\\/g, '/')
39
+ result.fileRegistry[relKey] = hash
40
+ }
41
+
42
+ result.installed.push({
43
+ id: mod.id,
44
+ name: mod.name,
45
+ files: files.length
46
+ })
47
+
48
+ this.logger.success(`${mod.name} (${files.length} files)`)
49
+ }
50
+ } catch (err) {
51
+ this.logger.error(`Installation failed: ${err.message}`)
52
+ await this.rollback()
53
+ throw err
54
+ }
55
+
56
+ return result
57
+ }
58
+
59
+ async installWithTransform(mod, destDir, variables) {
60
+ const srcFiles = await listFiles(mod.templateDir)
61
+
62
+ for (const relPath of srcFiles) {
63
+ const srcFile = path.join(mod.templateDir, relPath)
64
+ let content = await fse.readFile(srcFile, 'utf8')
65
+
66
+ // Interpolate variables
67
+ content = interpolate(content, variables)
68
+
69
+ // Apply adapter transformation
70
+ if (mod.adapter) {
71
+ content = mod.adapter(content, path.basename(relPath))
72
+ }
73
+
74
+ // Apply prefix to filename
75
+ let destRelPath = relPath
76
+ if (mod.prefix) {
77
+ const dir = path.dirname(relPath)
78
+ const base = path.basename(relPath)
79
+ destRelPath = dir === '.' ? `${mod.prefix}${base}` : path.join(dir, `${mod.prefix}${base}`)
80
+ }
81
+
82
+ const destFile = path.join(destDir, destRelPath)
83
+ await fse.ensureDir(path.dirname(destFile))
84
+ await fse.writeFile(destFile, content, 'utf8')
85
+ }
86
+ }
87
+
88
+ async rollback() {
89
+ this.logger.warn('Rolling back...')
90
+ for (const p of this.createdPaths.reverse()) {
91
+ if (await fse.pathExists(p)) {
92
+ await fse.remove(p)
93
+ this.logger.debug(`Removed: ${p}`)
94
+ }
95
+ }
96
+ }
97
+ }