@zeyue0329/xiaoma-cli 1.0.48 → 6.0.0-alpha.13

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 (914) hide show
  1. package/README.md +0 -2
  2. package/custom/src/agents/commit-poet/commit-poet.agent.yaml +129 -0
  3. package/custom/src/agents/commit-poet/installation-guide.md +36 -0
  4. package/custom/src/agents/toolsmith/installation-guide.md +36 -0
  5. package/custom/src/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
  6. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
  7. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
  8. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
  9. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
  10. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +160 -0
  11. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
  12. package/custom/src/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
  13. package/custom/src/agents/toolsmith/toolsmith.agent.yaml +108 -0
  14. package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  15. package/docs/agent-customization-guide.md +208 -0
  16. package/docs/custom-agent-installation.md +183 -0
  17. package/docs/document-sharding-guide.md +449 -0
  18. package/docs/ide-info/auggie.md +31 -0
  19. package/docs/ide-info/claude-code.md +25 -0
  20. package/docs/ide-info/cline.md +31 -0
  21. package/docs/ide-info/codex.md +21 -0
  22. package/docs/ide-info/crush.md +30 -0
  23. package/docs/ide-info/cursor.md +25 -0
  24. package/docs/ide-info/gemini.md +25 -0
  25. package/docs/ide-info/github-copilot.md +26 -0
  26. package/docs/ide-info/iflow.md +33 -0
  27. package/docs/ide-info/kilo.md +24 -0
  28. package/docs/ide-info/opencode.md +24 -0
  29. package/docs/ide-info/qwen.md +25 -0
  30. package/docs/ide-info/roo.md +27 -0
  31. package/docs/ide-info/rovo-dev.md +388 -0
  32. package/docs/ide-info/trae.md +25 -0
  33. package/docs/ide-info/windsurf.md +22 -0
  34. package/docs/index.md +144 -0
  35. package/docs/installers-bundlers/ide-injections.md +186 -0
  36. package/docs/installers-bundlers/installers-modules-platforms-reference.md +379 -0
  37. package/docs/rag/rag.md +812 -0
  38. package/docs/v4-to-v6-upgrade.md +220 -0
  39. package/docs/v6-open-items.md +17 -0
  40. package/docs/web-bundles-gemini-gpt-guide.md +468 -0
  41. package/eslint.config.mjs +133 -0
  42. package/package.json +41 -51
  43. package/prettier.config.mjs +32 -0
  44. package/src/core/_module-installer/install-config.yaml +29 -0
  45. package/src/core/_module-installer/installer.js +60 -0
  46. package/src/core/agents/xiaoma-master.agent.yaml +39 -0
  47. package/src/core/agents/xiaoma-web-orchestrator.agent.xml +113 -0
  48. package/src/core/resources/excalidraw/README.md +160 -0
  49. package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
  50. package/src/core/resources/excalidraw/library-loader.md +50 -0
  51. package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
  52. package/src/core/tasks/advanced-elicitation-methods.csv +51 -0
  53. package/src/core/tasks/advanced-elicitation.xml +116 -0
  54. package/src/core/tasks/index-docs.xml +65 -0
  55. package/src/core/tasks/validate-workflow.xml +89 -0
  56. package/src/core/tasks/workflow.xml +235 -0
  57. package/src/core/tools/shard-doc.xml +109 -0
  58. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  59. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +196 -0
  60. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +121 -0
  61. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +224 -0
  62. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +236 -0
  63. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +208 -0
  64. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +263 -0
  65. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +339 -0
  66. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +302 -0
  67. package/src/core/workflows/brainstorming/template.md +15 -0
  68. package/src/core/workflows/brainstorming/workflow.md +51 -0
  69. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  70. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +203 -0
  71. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +159 -0
  72. package/src/core/workflows/party-mode/workflow.md +207 -0
  73. package/src/modules/cis/_module-installer/install-config.yaml +16 -0
  74. package/src/modules/cis/_module-installer/installer.js +92 -0
  75. package/src/modules/cis/agents/README.md +104 -0
  76. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +29 -0
  77. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +29 -0
  78. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +29 -0
  79. package/src/modules/cis/agents/innovation-strategist.agent.yaml +29 -0
  80. package/src/modules/cis/agents/presentation-master.agent.yaml +61 -0
  81. package/src/modules/cis/agents/storyteller.agent.yaml +29 -0
  82. package/src/modules/cis/readme.md +153 -0
  83. package/src/modules/cis/teams/creative-squad.yaml +7 -0
  84. package/src/modules/cis/teams/default-party.csv +12 -0
  85. package/src/modules/cis/workflows/README.md +139 -0
  86. package/src/modules/cis/workflows/design-thinking/README.md +56 -0
  87. package/src/modules/cis/workflows/design-thinking/design-methods.csv +31 -0
  88. package/src/modules/cis/workflows/design-thinking/instructions.md +202 -0
  89. package/src/modules/cis/workflows/design-thinking/template.md +111 -0
  90. package/src/modules/cis/workflows/design-thinking/workflow.yaml +38 -0
  91. package/src/modules/cis/workflows/innovation-strategy/README.md +56 -0
  92. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +31 -0
  93. package/src/modules/cis/workflows/innovation-strategy/instructions.md +276 -0
  94. package/src/modules/cis/workflows/innovation-strategy/template.md +189 -0
  95. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +38 -0
  96. package/src/modules/cis/workflows/problem-solving/README.md +56 -0
  97. package/src/modules/cis/workflows/problem-solving/instructions.md +252 -0
  98. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +31 -0
  99. package/src/modules/cis/workflows/problem-solving/template.md +165 -0
  100. package/src/modules/cis/workflows/problem-solving/workflow.yaml +38 -0
  101. package/src/modules/cis/workflows/storytelling/README.md +58 -0
  102. package/src/modules/cis/workflows/storytelling/instructions.md +293 -0
  103. package/src/modules/cis/workflows/storytelling/story-types.csv +26 -0
  104. package/src/modules/cis/workflows/storytelling/template.md +113 -0
  105. package/src/modules/cis/workflows/storytelling/workflow.yaml +38 -0
  106. package/src/modules/xmb/README.md +261 -0
  107. package/src/modules/xmb/_module-installer/install-config.yaml +28 -0
  108. package/src/modules/xmb/agents/xiaoma-builder.agent.yaml +71 -0
  109. package/src/modules/xmb/docs/agents/agent-compilation.md +340 -0
  110. package/src/modules/xmb/docs/agents/agent-menu-patterns.md +524 -0
  111. package/src/modules/xmb/docs/agents/expert-agent-architecture.md +364 -0
  112. package/src/modules/xmb/docs/agents/index.md +55 -0
  113. package/src/modules/xmb/docs/agents/kb.csv +0 -0
  114. package/src/modules/xmb/docs/agents/module-agent-architecture.md +367 -0
  115. package/src/modules/xmb/docs/agents/simple-agent-architecture.md +288 -0
  116. package/src/modules/xmb/docs/agents/understanding-agent-types.md +184 -0
  117. package/src/modules/xmb/docs/workflows/architecture.md +220 -0
  118. package/src/modules/xmb/docs/workflows/common-workflow-tools.csv +19 -0
  119. package/src/modules/xmb/docs/workflows/csv-data-file-standards.md +206 -0
  120. package/src/modules/xmb/docs/workflows/index.md +45 -0
  121. package/src/modules/xmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -0
  122. package/src/modules/xmb/docs/workflows/kb.csv +0 -0
  123. package/src/modules/xmb/docs/workflows/step-template.md +283 -0
  124. package/src/modules/xmb/docs/workflows/terms.md +97 -0
  125. package/src/modules/xmb/docs/workflows/workflow-template.md +152 -0
  126. package/src/modules/xmb/reference/agents/expert-examples/journal-keeper/README.md +242 -0
  127. package/src/modules/xmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
  128. package/src/modules/xmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
  129. package/src/modules/xmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
  130. package/src/modules/xmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
  131. package/src/modules/xmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
  132. package/src/modules/xmb/reference/agents/module-examples/README.md +50 -0
  133. package/src/modules/xmb/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
  134. package/src/modules/xmb/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
  135. package/src/modules/xmb/reference/agents/simple-examples/README.md +223 -0
  136. package/src/modules/xmb/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
  137. package/src/modules/xmb/reference/readme.md +3 -0
  138. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
  139. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
  140. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
  141. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
  142. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
  143. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
  144. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
  145. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
  146. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
  147. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
  148. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
  149. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
  150. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
  151. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
  152. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
  153. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
  154. package/src/modules/xmb/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
  155. package/src/modules/xmb/workflows/create-agent/data/agent-validation-checklist.md +174 -0
  156. package/src/modules/xmb/workflows/create-agent/data/brainstorm-context.md +153 -0
  157. package/src/modules/xmb/workflows/create-agent/data/communication-presets.csv +61 -0
  158. package/src/modules/xmb/workflows/create-agent/data/info-and-installation-guide.md +17 -0
  159. package/src/modules/xmb/workflows/create-agent/data/reference/README.md +3 -0
  160. package/src/modules/xmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +242 -0
  161. package/src/modules/xmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
  162. package/src/modules/xmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
  163. package/src/modules/xmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
  164. package/src/modules/xmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
  165. package/src/modules/xmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
  166. package/src/modules/xmb/workflows/create-agent/data/reference/agents/module-examples/README.md +50 -0
  167. package/src/modules/xmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
  168. package/src/modules/xmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
  169. package/src/modules/xmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +223 -0
  170. package/src/modules/xmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
  171. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
  172. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
  173. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
  174. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
  175. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
  176. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
  177. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
  178. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
  179. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
  180. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
  181. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
  182. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
  183. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
  184. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
  185. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
  186. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
  187. package/src/modules/xmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
  188. package/src/modules/xmb/workflows/create-agent/data/validation-complete.md +305 -0
  189. package/src/modules/xmb/workflows/create-agent/steps/step-01-brainstorm.md +145 -0
  190. package/src/modules/xmb/workflows/create-agent/steps/step-02-discover.md +210 -0
  191. package/src/modules/xmb/workflows/create-agent/steps/step-03-persona.md +260 -0
  192. package/src/modules/xmb/workflows/create-agent/steps/step-04-commands.md +237 -0
  193. package/src/modules/xmb/workflows/create-agent/steps/step-05-name.md +231 -0
  194. package/src/modules/xmb/workflows/create-agent/steps/step-06-build.md +224 -0
  195. package/src/modules/xmb/workflows/create-agent/steps/step-07-validate.md +234 -0
  196. package/src/modules/xmb/workflows/create-agent/steps/step-08-setup.md +179 -0
  197. package/src/modules/xmb/workflows/create-agent/steps/step-09-customize.md +197 -0
  198. package/src/modules/xmb/workflows/create-agent/steps/step-10-build-tools.md +180 -0
  199. package/src/modules/xmb/workflows/create-agent/steps/step-11-celebrate.md +222 -0
  200. package/src/modules/xmb/workflows/create-agent/templates/agent_commands.md +21 -0
  201. package/src/modules/xmb/workflows/create-agent/templates/agent_persona.md +25 -0
  202. package/src/modules/xmb/workflows/create-agent/templates/agent_purpose_and_type.md +23 -0
  203. package/src/modules/xmb/workflows/create-agent/workflow.md +91 -0
  204. package/src/modules/xmb/workflows/create-workflow/steps/step-01-init.md +168 -0
  205. package/src/modules/xmb/workflows/create-workflow/steps/step-02-gather.md +233 -0
  206. package/src/modules/xmb/workflows/create-workflow/steps/step-03-tools-overview.md +127 -0
  207. package/src/modules/xmb/workflows/create-workflow/steps/step-04-core-tools.md +145 -0
  208. package/src/modules/xmb/workflows/create-workflow/steps/step-05-memory-requirements.md +136 -0
  209. package/src/modules/xmb/workflows/create-workflow/steps/step-06-external-tools.md +154 -0
  210. package/src/modules/xmb/workflows/create-workflow/steps/step-07-installation-guidance.md +159 -0
  211. package/src/modules/xmb/workflows/create-workflow/steps/step-08-tools-summary.md +167 -0
  212. package/src/modules/xmb/workflows/create-workflow/steps/step-09-design.md +239 -0
  213. package/src/modules/xmb/workflows/create-workflow/steps/step-10-plan-review.md +215 -0
  214. package/src/modules/xmb/workflows/create-workflow/steps/step-11-build.md +262 -0
  215. package/src/modules/xmb/workflows/create-workflow/steps/step-12-review.md +270 -0
  216. package/src/modules/xmb/workflows/create-workflow/templates/build-summary.md +36 -0
  217. package/src/modules/xmb/workflows/create-workflow/templates/completion-section.md +39 -0
  218. package/src/modules/xmb/workflows/create-workflow/templates/content-template.md +21 -0
  219. package/src/modules/xmb/workflows/create-workflow/templates/design-section.md +53 -0
  220. package/src/modules/xmb/workflows/create-workflow/templates/project-info.md +18 -0
  221. package/src/modules/xmb/workflows/create-workflow/templates/requirements-section.md +47 -0
  222. package/src/modules/xmb/workflows/create-workflow/templates/review-section.md +56 -0
  223. package/src/modules/xmb/workflows/create-workflow/templates/step-file.md +139 -0
  224. package/src/modules/xmb/workflows/create-workflow/templates/workflow-plan.md +54 -0
  225. package/src/modules/xmb/workflows/create-workflow/templates/workflow.md +58 -0
  226. package/src/modules/xmb/workflows/create-workflow/workflow.md +58 -0
  227. package/src/modules/xmb/workflows/edit-agent/steps/step-01-discover-intent.md +134 -0
  228. package/src/modules/xmb/workflows/edit-agent/steps/step-02-analyze-agent.md +202 -0
  229. package/src/modules/xmb/workflows/edit-agent/steps/step-03-propose-changes.md +157 -0
  230. package/src/modules/xmb/workflows/edit-agent/steps/step-04-apply-changes.md +150 -0
  231. package/src/modules/xmb/workflows/edit-agent/steps/step-05-validate.md +150 -0
  232. package/src/modules/xmb/workflows/edit-agent/workflow.md +58 -0
  233. package/src/modules/xmb/workflows/edit-workflow/steps/step-01-analyze.md +221 -0
  234. package/src/modules/xmb/workflows/edit-workflow/steps/step-02-discover.md +253 -0
  235. package/src/modules/xmb/workflows/edit-workflow/steps/step-03-improve.md +217 -0
  236. package/src/modules/xmb/workflows/edit-workflow/steps/step-04-validate.md +193 -0
  237. package/src/modules/xmb/workflows/edit-workflow/steps/step-05-compliance-check.md +245 -0
  238. package/src/modules/xmb/workflows/edit-workflow/templates/completion-summary.md +75 -0
  239. package/src/modules/xmb/workflows/edit-workflow/templates/improvement-goals.md +68 -0
  240. package/src/modules/xmb/workflows/edit-workflow/templates/improvement-log.md +40 -0
  241. package/src/modules/xmb/workflows/edit-workflow/templates/validation-results.md +51 -0
  242. package/src/modules/xmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -0
  243. package/src/modules/xmb/workflows/edit-workflow/workflow.md +58 -0
  244. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +152 -0
  245. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +243 -0
  246. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +274 -0
  247. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +295 -0
  248. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +264 -0
  249. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +360 -0
  250. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +258 -0
  251. package/src/modules/xmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +301 -0
  252. package/src/modules/xmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -0
  253. package/src/modules/xmb/workflows/workflow-compliance-check/workflow.md +58 -0
  254. package/src/modules/xmb/workflows-legacy/create-module/README.md +229 -0
  255. package/src/modules/xmb/workflows-legacy/create-module/brainstorm-context.md +137 -0
  256. package/src/modules/xmb/workflows-legacy/create-module/checklist.md +235 -0
  257. package/src/modules/xmb/workflows-legacy/create-module/installer-templates/install-config.yaml +92 -0
  258. package/src/modules/xmb/workflows-legacy/create-module/installer-templates/installer.js +231 -0
  259. package/src/modules/xmb/workflows-legacy/create-module/instructions.md +577 -0
  260. package/src/modules/xmb/workflows-legacy/create-module/module-structure.md +400 -0
  261. package/src/modules/xmb/workflows-legacy/create-module/workflow.yaml +52 -0
  262. package/src/modules/xmb/workflows-legacy/edit-module/README.md +187 -0
  263. package/src/modules/xmb/workflows-legacy/edit-module/checklist.md +165 -0
  264. package/src/modules/xmb/workflows-legacy/edit-module/instructions.md +341 -0
  265. package/src/modules/xmb/workflows-legacy/edit-module/workflow.yaml +34 -0
  266. package/src/modules/xmb/workflows-legacy/module-brief/README.md +264 -0
  267. package/src/modules/xmb/workflows-legacy/module-brief/checklist.md +116 -0
  268. package/src/modules/xmb/workflows-legacy/module-brief/instructions.md +268 -0
  269. package/src/modules/xmb/workflows-legacy/module-brief/template.md +275 -0
  270. package/src/modules/xmb/workflows-legacy/module-brief/workflow.yaml +36 -0
  271. package/src/modules/xmc/README.md +128 -0
  272. package/src/modules/xmc/_module-installer/install-config.yaml +53 -0
  273. package/src/modules/xmc/_module-installer/installer.js +131 -0
  274. package/src/modules/xmc/_module-installer/platform-specifics/claude-code.js +35 -0
  275. package/src/modules/xmc/_module-installer/platform-specifics/windsurf.js +32 -0
  276. package/src/modules/xmc/agents/analyst.agent.yaml +49 -0
  277. package/src/modules/xmc/agents/architect.agent.yaml +52 -0
  278. package/src/modules/xmc/agents/auto-iteration-orchestrator.agent.yaml +115 -0
  279. package/src/modules/xmc/agents/dev.agent.yaml +44 -0
  280. package/src/modules/xmc/agents/pm.agent.yaml +50 -0
  281. package/src/modules/xmc/agents/quick-flow-solo-dev.agent.yaml +36 -0
  282. package/src/modules/xmc/agents/sm.agent.yaml +55 -0
  283. package/src/modules/xmc/agents/tea.agent.yaml +70 -0
  284. package/src/modules/xmc/agents/tech-writer.agent.yaml +67 -0
  285. package/src/modules/xmc/agents/ux-designer.agent.yaml +45 -0
  286. package/src/modules/xmc/data/README.md +29 -0
  287. package/src/modules/xmc/data/documentation-standards.md +262 -0
  288. package/src/modules/xmc/data/project-context-template.md +40 -0
  289. package/src/modules/xmc/docs/README.md +252 -0
  290. package/src/modules/xmc/docs/agents-guide.md +952 -0
  291. package/src/modules/xmc/docs/brownfield-guide.md +750 -0
  292. package/src/modules/xmc/docs/enterprise-agentic-development.md +686 -0
  293. package/src/modules/xmc/docs/faq.md +561 -0
  294. package/src/modules/xmc/docs/glossary.md +303 -0
  295. package/src/modules/xmc/docs/images/workflow-method-greenfield.excalidraw +5174 -0
  296. package/src/modules/xmc/docs/images/workflow-method-greenfield.svg +2 -0
  297. package/src/modules/xmc/docs/iteration-development-guide.md +752 -0
  298. package/src/modules/xmc/docs/party-mode.md +224 -0
  299. package/src/modules/xmc/docs/quick-flow-solo-dev.md +337 -0
  300. package/src/modules/xmc/docs/quick-start.md +367 -0
  301. package/src/modules/xmc/docs/scale-adaptive-system.md +618 -0
  302. package/src/modules/xmc/docs/test-architecture.md +462 -0
  303. package/src/modules/xmc/docs/workflow-architecture-reference.md +366 -0
  304. package/src/modules/xmc/docs/workflow-document-project-reference.md +489 -0
  305. package/src/modules/xmc/docs/workflows-analysis.md +266 -0
  306. package/src/modules/xmc/docs/workflows-implementation.md +171 -0
  307. package/src/modules/xmc/docs/workflows-planning.md +451 -0
  308. package/src/modules/xmc/docs/workflows-solutioning.md +509 -0
  309. package/src/modules/xmc/docs/xiaoma-quick-flow.md +528 -0
  310. package/src/modules/xmc/sub-modules/claude-code/config.yaml +5 -0
  311. package/src/modules/xmc/sub-modules/claude-code/injections.yaml +242 -0
  312. package/src/modules/xmc/sub-modules/claude-code/readme.md +87 -0
  313. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-analysis/api-documenter.md +102 -0
  314. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-analysis/codebase-analyzer.md +82 -0
  315. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-analysis/data-analyst.md +101 -0
  316. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-analysis/pattern-detector.md +84 -0
  317. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/dependency-mapper.md +83 -0
  318. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/epic-optimizer.md +81 -0
  319. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/requirements-analyst.md +61 -0
  320. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/technical-decisions-curator.md +168 -0
  321. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/trend-spotter.md +115 -0
  322. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/user-journey-mapper.md +123 -0
  323. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-planning/user-researcher.md +72 -0
  324. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-research/market-researcher.md +51 -0
  325. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-research/tech-debt-auditor.md +106 -0
  326. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-review/document-reviewer.md +102 -0
  327. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-review/technical-evaluator.md +68 -0
  328. package/src/modules/xmc/sub-modules/claude-code/sub-agents/bmad-review/test-coverage-analyzer.md +108 -0
  329. package/src/modules/xmc/teams/default-party.csv +21 -0
  330. package/src/modules/xmc/teams/team-fullstack.yaml +12 -0
  331. package/src/modules/xmc/testarch/knowledge/api-request.md +303 -0
  332. package/src/modules/xmc/testarch/knowledge/auth-session.md +356 -0
  333. package/src/modules/xmc/testarch/knowledge/burn-in.md +273 -0
  334. package/src/modules/xmc/testarch/knowledge/ci-burn-in.md +675 -0
  335. package/src/modules/xmc/testarch/knowledge/component-tdd.md +486 -0
  336. package/src/modules/xmc/testarch/knowledge/contract-testing.md +957 -0
  337. package/src/modules/xmc/testarch/knowledge/data-factories.md +500 -0
  338. package/src/modules/xmc/testarch/knowledge/email-auth.md +721 -0
  339. package/src/modules/xmc/testarch/knowledge/error-handling.md +725 -0
  340. package/src/modules/xmc/testarch/knowledge/feature-flags.md +750 -0
  341. package/src/modules/xmc/testarch/knowledge/file-utils.md +260 -0
  342. package/src/modules/xmc/testarch/knowledge/fixture-architecture.md +401 -0
  343. package/src/modules/xmc/testarch/knowledge/fixtures-composition.md +382 -0
  344. package/src/modules/xmc/testarch/knowledge/intercept-network-call.md +280 -0
  345. package/src/modules/xmc/testarch/knowledge/log.md +294 -0
  346. package/src/modules/xmc/testarch/knowledge/network-error-monitor.md +272 -0
  347. package/src/modules/xmc/testarch/knowledge/network-first.md +486 -0
  348. package/src/modules/xmc/testarch/knowledge/network-recorder.md +265 -0
  349. package/src/modules/xmc/testarch/knowledge/nfr-criteria.md +670 -0
  350. package/src/modules/xmc/testarch/knowledge/overview.md +284 -0
  351. package/src/modules/xmc/testarch/knowledge/playwright-config.md +730 -0
  352. package/src/modules/xmc/testarch/knowledge/probability-impact.md +601 -0
  353. package/src/modules/xmc/testarch/knowledge/recurse.md +296 -0
  354. package/src/modules/xmc/testarch/knowledge/risk-governance.md +615 -0
  355. package/src/modules/xmc/testarch/knowledge/selective-testing.md +732 -0
  356. package/src/modules/xmc/testarch/knowledge/selector-resilience.md +527 -0
  357. package/src/modules/xmc/testarch/knowledge/test-healing-patterns.md +644 -0
  358. package/src/modules/xmc/testarch/knowledge/test-levels-framework.md +473 -0
  359. package/src/modules/xmc/testarch/knowledge/test-priorities-matrix.md +373 -0
  360. package/src/modules/xmc/testarch/knowledge/test-quality.md +664 -0
  361. package/src/modules/xmc/testarch/knowledge/timing-debugging.md +372 -0
  362. package/src/modules/xmc/testarch/knowledge/visual-debugging.md +524 -0
  363. package/src/modules/xmc/testarch/tea-index.csv +33 -0
  364. package/src/modules/xmc/workflows/1-analysis/product-brief/product-brief.template.md +8 -0
  365. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-01-init.md +192 -0
  366. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-01b-continue.md +167 -0
  367. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-02-vision.md +203 -0
  368. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-03-users.md +206 -0
  369. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-04-metrics.md +209 -0
  370. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-05-scope.md +223 -0
  371. package/src/modules/xmc/workflows/1-analysis/product-brief/steps/step-06-complete.md +199 -0
  372. package/src/modules/xmc/workflows/1-analysis/product-brief/workflow.md +58 -0
  373. package/src/modules/xmc/workflows/1-analysis/research/domain-steps/step-01-init.md +136 -0
  374. package/src/modules/xmc/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +228 -0
  375. package/src/modules/xmc/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +237 -0
  376. package/src/modules/xmc/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +205 -0
  377. package/src/modules/xmc/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +233 -0
  378. package/src/modules/xmc/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  379. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  380. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +235 -0
  381. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +198 -0
  382. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +247 -0
  383. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +257 -0
  384. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +175 -0
  385. package/src/modules/xmc/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  386. package/src/modules/xmc/workflows/1-analysis/research/research.template.md +16 -0
  387. package/src/modules/xmc/workflows/1-analysis/research/technical-steps/step-01-init.md +136 -0
  388. package/src/modules/xmc/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +237 -0
  389. package/src/modules/xmc/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +246 -0
  390. package/src/modules/xmc/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +200 -0
  391. package/src/modules/xmc/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +237 -0
  392. package/src/modules/xmc/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  393. package/src/modules/xmc/workflows/1-analysis/research/workflow.md +198 -0
  394. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +159 -0
  395. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +126 -0
  396. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +209 -0
  397. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +215 -0
  398. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +218 -0
  399. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +233 -0
  400. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +251 -0
  401. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +253 -0
  402. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +223 -0
  403. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +223 -0
  404. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +240 -0
  405. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +247 -0
  406. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +236 -0
  407. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +263 -0
  408. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +226 -0
  409. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  410. package/src/modules/xmc/workflows/2-plan-workflows/create-ux-design/workflow.md +53 -0
  411. package/src/modules/xmc/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
  412. package/src/modules/xmc/workflows/2-plan-workflows/prd/prd-template.md +9 -0
  413. package/src/modules/xmc/workflows/2-plan-workflows/prd/project-types.csv +11 -0
  414. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-01-init.md +161 -0
  415. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +123 -0
  416. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +275 -0
  417. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-03-success.md +271 -0
  418. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +272 -0
  419. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-05-domain.md +249 -0
  420. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +240 -0
  421. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +236 -0
  422. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +280 -0
  423. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-09-functional.md +251 -0
  424. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +275 -0
  425. package/src/modules/xmc/workflows/2-plan-workflows/prd/steps/step-11-complete.md +210 -0
  426. package/src/modules/xmc/workflows/2-plan-workflows/prd/workflow.md +61 -0
  427. package/src/modules/xmc/workflows/3-solutioning/architecture/architecture-decision-template.md +13 -0
  428. package/src/modules/xmc/workflows/3-solutioning/architecture/data/domain-complexity.csv +11 -0
  429. package/src/modules/xmc/workflows/3-solutioning/architecture/data/project-types.csv +7 -0
  430. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-01-init.md +194 -0
  431. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-01b-continue.md +163 -0
  432. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-02-context.md +223 -0
  433. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-03-starter.md +330 -0
  434. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-04-decisions.md +317 -0
  435. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-05-patterns.md +358 -0
  436. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-06-structure.md +378 -0
  437. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-07-validation.md +358 -0
  438. package/src/modules/xmc/workflows/3-solutioning/architecture/steps/step-08-complete.md +351 -0
  439. package/src/modules/xmc/workflows/3-solutioning/architecture/workflow.md +48 -0
  440. package/src/modules/xmc/workflows/3-solutioning/create-epics-and-stories/epics-template.md +80 -0
  441. package/src/modules/xmc/workflows/3-solutioning/create-epics-and-stories/instructions.md +387 -0
  442. package/src/modules/xmc/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +53 -0
  443. package/src/modules/xmc/workflows/3-solutioning/implementation-readiness/checklist.md +169 -0
  444. package/src/modules/xmc/workflows/3-solutioning/implementation-readiness/instructions.md +332 -0
  445. package/src/modules/xmc/workflows/3-solutioning/implementation-readiness/template.md +146 -0
  446. package/src/modules/xmc/workflows/3-solutioning/implementation-readiness/workflow.yaml +64 -0
  447. package/src/modules/xmc/workflows/4-implementation/code-review/instructions.xml +176 -0
  448. package/src/modules/xmc/workflows/4-implementation/code-review/workflow.yaml +54 -0
  449. package/src/modules/xmc/workflows/4-implementation/correct-course/checklist.md +279 -0
  450. package/src/modules/xmc/workflows/4-implementation/correct-course/instructions.md +206 -0
  451. package/src/modules/xmc/workflows/4-implementation/correct-course/workflow.yaml +58 -0
  452. package/src/modules/xmc/workflows/4-implementation/create-story/checklist.md +358 -0
  453. package/src/modules/xmc/workflows/4-implementation/create-story/instructions.xml +354 -0
  454. package/src/modules/xmc/workflows/4-implementation/create-story/template.md +51 -0
  455. package/src/modules/xmc/workflows/4-implementation/create-story/workflow.yaml +60 -0
  456. package/src/modules/xmc/workflows/4-implementation/dev-story/checklist.md +80 -0
  457. package/src/modules/xmc/workflows/4-implementation/dev-story/instructions.xml +406 -0
  458. package/src/modules/xmc/workflows/4-implementation/dev-story/workflow.yaml +27 -0
  459. package/src/modules/xmc/workflows/4-implementation/retrospective/instructions.md +1443 -0
  460. package/src/modules/xmc/workflows/4-implementation/retrospective/workflow.yaml +57 -0
  461. package/src/modules/xmc/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  462. package/src/modules/xmc/workflows/4-implementation/sprint-planning/instructions.md +232 -0
  463. package/src/modules/xmc/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +56 -0
  464. package/src/modules/xmc/workflows/4-implementation/sprint-planning/workflow.yaml +53 -0
  465. package/src/modules/xmc/workflows/auto-iteration/full-auto-workflow.md +692 -0
  466. package/src/modules/xmc/workflows/auto-iteration/knowledge-base/kb-call-points.md +595 -0
  467. package/src/modules/xmc/workflows/auto-iteration/knowledge-base/kb-interface.md +347 -0
  468. package/src/modules/xmc/workflows/auto-iteration/knowledge-base/kb-query.md +368 -0
  469. package/src/modules/xmc/workflows/auto-iteration/knowledge-base/kb-setup.md +343 -0
  470. package/src/modules/xmc/workflows/auto-iteration/phases/phase-1-analyze.md +406 -0
  471. package/src/modules/xmc/workflows/auto-iteration/phases/phase-2-plan.md +574 -0
  472. package/src/modules/xmc/workflows/auto-iteration/phases/phase-3-design.md +628 -0
  473. package/src/modules/xmc/workflows/auto-iteration/phases/phase-4-develop.md +622 -0
  474. package/src/modules/xmc/workflows/auto-iteration/phases/phase-5-test.md +538 -0
  475. package/src/modules/xmc/workflows/auto-iteration/resume.md +254 -0
  476. package/src/modules/xmc/workflows/auto-iteration/status.md +194 -0
  477. package/src/modules/xmc/workflows/auto-iteration/templates/auto-iteration-status.template.yaml +142 -0
  478. package/src/modules/xmc/workflows/bmad-quick-flow/create-tech-spec/instructions.md +115 -0
  479. package/src/modules/xmc/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +26 -0
  480. package/src/modules/xmc/workflows/bmad-quick-flow/quick-dev/checklist.md +25 -0
  481. package/src/modules/xmc/workflows/bmad-quick-flow/quick-dev/instructions.md +105 -0
  482. package/src/modules/xmc/workflows/bmad-quick-flow/quick-dev/workflow.yaml +29 -0
  483. package/src/modules/xmc/workflows/diagrams/_shared/excalidraw-library.json +90 -0
  484. package/src/modules/xmc/workflows/diagrams/_shared/excalidraw-templates.yaml +127 -0
  485. package/src/modules/xmc/workflows/diagrams/create-dataflow/checklist.md +39 -0
  486. package/src/modules/xmc/workflows/diagrams/create-dataflow/instructions.md +130 -0
  487. package/src/modules/xmc/workflows/diagrams/create-dataflow/workflow.yaml +27 -0
  488. package/src/modules/xmc/workflows/diagrams/create-diagram/checklist.md +43 -0
  489. package/src/modules/xmc/workflows/diagrams/create-diagram/instructions.md +141 -0
  490. package/src/modules/xmc/workflows/diagrams/create-diagram/workflow.yaml +27 -0
  491. package/src/modules/xmc/workflows/diagrams/create-flowchart/checklist.md +49 -0
  492. package/src/modules/xmc/workflows/diagrams/create-flowchart/instructions.md +241 -0
  493. package/src/modules/xmc/workflows/diagrams/create-flowchart/workflow.yaml +27 -0
  494. package/src/modules/xmc/workflows/diagrams/create-wireframe/checklist.md +38 -0
  495. package/src/modules/xmc/workflows/diagrams/create-wireframe/instructions.md +133 -0
  496. package/src/modules/xmc/workflows/diagrams/create-wireframe/workflow.yaml +27 -0
  497. package/src/modules/xmc/workflows/document-project/checklist.md +245 -0
  498. package/src/modules/xmc/workflows/document-project/documentation-requirements.csv +12 -0
  499. package/src/modules/xmc/workflows/document-project/instructions.md +222 -0
  500. package/src/modules/xmc/workflows/document-project/templates/deep-dive-template.md +345 -0
  501. package/src/modules/xmc/workflows/document-project/templates/index-template.md +169 -0
  502. package/src/modules/xmc/workflows/document-project/templates/project-overview-template.md +103 -0
  503. package/src/modules/xmc/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  504. package/src/modules/xmc/workflows/document-project/templates/source-tree-template.md +135 -0
  505. package/src/modules/xmc/workflows/document-project/workflow.yaml +31 -0
  506. package/src/modules/xmc/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  507. package/src/modules/xmc/workflows/document-project/workflows/deep-dive.yaml +31 -0
  508. package/src/modules/xmc/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  509. package/src/modules/xmc/workflows/document-project/workflows/full-scan.yaml +31 -0
  510. package/src/modules/xmc/workflows/generate-project-context/project-context-template.md +20 -0
  511. package/src/modules/xmc/workflows/generate-project-context/steps/step-01-discover.md +193 -0
  512. package/src/modules/xmc/workflows/generate-project-context/steps/step-02-generate.md +317 -0
  513. package/src/modules/xmc/workflows/generate-project-context/steps/step-03-complete.md +277 -0
  514. package/src/modules/xmc/workflows/generate-project-context/workflow.md +48 -0
  515. package/src/modules/xmc/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  516. package/src/modules/xmc/workflows/testarch/atdd/checklist.md +373 -0
  517. package/src/modules/xmc/workflows/testarch/atdd/instructions.md +805 -0
  518. package/src/modules/xmc/workflows/testarch/atdd/workflow.yaml +47 -0
  519. package/src/modules/xmc/workflows/testarch/automate/checklist.md +580 -0
  520. package/src/modules/xmc/workflows/testarch/automate/instructions.md +1324 -0
  521. package/src/modules/xmc/workflows/testarch/automate/workflow.yaml +54 -0
  522. package/src/modules/xmc/workflows/testarch/ci/checklist.md +246 -0
  523. package/src/modules/xmc/workflows/testarch/ci/github-actions-template.yaml +165 -0
  524. package/src/modules/xmc/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
  525. package/src/modules/xmc/workflows/testarch/ci/instructions.md +534 -0
  526. package/src/modules/xmc/workflows/testarch/ci/workflow.yaml +47 -0
  527. package/src/modules/xmc/workflows/testarch/framework/checklist.md +321 -0
  528. package/src/modules/xmc/workflows/testarch/framework/instructions.md +481 -0
  529. package/src/modules/xmc/workflows/testarch/framework/workflow.yaml +49 -0
  530. package/src/modules/xmc/workflows/testarch/nfr-assess/checklist.md +405 -0
  531. package/src/modules/xmc/workflows/testarch/nfr-assess/instructions.md +722 -0
  532. package/src/modules/xmc/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
  533. package/src/modules/xmc/workflows/testarch/nfr-assess/workflow.yaml +49 -0
  534. package/src/modules/xmc/workflows/testarch/test-design/checklist.md +234 -0
  535. package/src/modules/xmc/workflows/testarch/test-design/instructions.md +788 -0
  536. package/src/modules/xmc/workflows/testarch/test-design/test-design-template.md +285 -0
  537. package/src/modules/xmc/workflows/testarch/test-design/workflow.yaml +50 -0
  538. package/src/modules/xmc/workflows/testarch/test-review/checklist.md +470 -0
  539. package/src/modules/xmc/workflows/testarch/test-review/instructions.md +628 -0
  540. package/src/modules/xmc/workflows/testarch/test-review/test-review-template.md +388 -0
  541. package/src/modules/xmc/workflows/testarch/test-review/workflow.yaml +48 -0
  542. package/src/modules/xmc/workflows/testarch/trace/checklist.md +654 -0
  543. package/src/modules/xmc/workflows/testarch/trace/instructions.md +1045 -0
  544. package/src/modules/xmc/workflows/testarch/trace/trace-template.md +673 -0
  545. package/src/modules/xmc/workflows/testarch/trace/workflow.yaml +57 -0
  546. package/src/modules/xmc/workflows/workflow-status/init/instructions.md +331 -0
  547. package/src/modules/xmc/workflows/workflow-status/init/workflow.yaml +29 -0
  548. package/src/modules/xmc/workflows/workflow-status/instructions.md +395 -0
  549. package/src/modules/xmc/workflows/workflow-status/paths/enterprise-brownfield.yaml +127 -0
  550. package/src/modules/xmc/workflows/workflow-status/paths/enterprise-greenfield.yaml +115 -0
  551. package/src/modules/xmc/workflows/workflow-status/paths/method-brownfield.yaml +111 -0
  552. package/src/modules/xmc/workflows/workflow-status/paths/method-greenfield.yaml +102 -0
  553. package/src/modules/xmc/workflows/workflow-status/project-levels.yaml +59 -0
  554. package/src/modules/xmc/workflows/workflow-status/workflow-status-template.yaml +24 -0
  555. package/src/modules/xmc/workflows/workflow-status/workflow.yaml +30 -0
  556. package/src/utility/models/action-command-header.md +0 -0
  557. package/src/utility/models/agent-activation-ide.xml +51 -0
  558. package/src/utility/models/agent-activation-web.xml +50 -0
  559. package/src/utility/models/agent-command-header.md +1 -0
  560. package/src/utility/models/agent-config-template.md +23 -0
  561. package/src/utility/models/agent-in-team-activation.xml +3 -0
  562. package/src/utility/models/fragments/activation-rules.xml +7 -0
  563. package/src/utility/models/fragments/activation-steps.xml +16 -0
  564. package/src/utility/models/fragments/handler-action.xml +4 -0
  565. package/src/utility/models/fragments/handler-data.xml +5 -0
  566. package/src/utility/models/fragments/handler-exec.xml +6 -0
  567. package/src/utility/models/fragments/handler-multi.xml +14 -0
  568. package/src/utility/models/fragments/handler-tmpl.xml +5 -0
  569. package/src/utility/models/fragments/handler-validate-workflow.xml +7 -0
  570. package/src/utility/models/fragments/handler-workflow.xml +9 -0
  571. package/src/utility/models/fragments/menu-handlers.xml +6 -0
  572. package/src/utility/models/fragments/web-bundle-activation-steps.xml +32 -0
  573. package/src/utility/templates/agent.customize.template.yaml +42 -0
  574. package/test/README.md +295 -0
  575. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +26 -0
  576. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +29 -0
  577. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +21 -0
  578. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +19 -0
  579. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +24 -0
  580. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +23 -0
  581. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +24 -0
  582. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +30 -0
  583. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +24 -0
  584. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +24 -0
  585. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +24 -0
  586. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +24 -0
  587. package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +26 -0
  588. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  589. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  590. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +26 -0
  591. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  592. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +25 -0
  593. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +26 -0
  594. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +23 -0
  595. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +26 -0
  596. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +26 -0
  597. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +23 -0
  598. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +28 -0
  599. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +30 -0
  600. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +27 -0
  601. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +27 -0
  602. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  603. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +27 -0
  604. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  605. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  606. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  607. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +23 -0
  608. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +21 -0
  609. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +26 -0
  610. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +30 -0
  611. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +21 -0
  612. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +37 -0
  613. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +23 -0
  614. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +33 -0
  615. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +23 -0
  616. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +23 -0
  617. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +23 -0
  618. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +23 -0
  619. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +23 -0
  620. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +21 -0
  621. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +27 -0
  622. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +29 -0
  623. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +23 -0
  624. package/test/test-agent-schema.js +387 -0
  625. package/test/test-cli-integration.sh +159 -0
  626. package/test/test-installation-components.js +214 -0
  627. package/test/unit-test-schema.js +133 -0
  628. package/tools/cli/README.md +609 -0
  629. package/tools/cli/bundlers/bundle-web.js +179 -0
  630. package/tools/cli/bundlers/test-analyst.js +28 -0
  631. package/tools/cli/bundlers/test-bundler.js +119 -0
  632. package/tools/cli/bundlers/web-bundler.js +1764 -0
  633. package/tools/cli/commands/agent-install.js +409 -0
  634. package/tools/cli/commands/build.js +458 -0
  635. package/tools/cli/commands/cleanup.js +141 -0
  636. package/tools/cli/commands/install.js +124 -0
  637. package/tools/cli/commands/list.js +28 -0
  638. package/tools/cli/commands/status.js +47 -0
  639. package/tools/cli/commands/uninstall.js +44 -0
  640. package/tools/cli/commands/update.js +28 -0
  641. package/tools/cli/installers/lib/core/config-collector.js +876 -0
  642. package/tools/cli/installers/lib/core/dependency-resolver.js +725 -0
  643. package/tools/cli/installers/lib/core/detector.js +329 -0
  644. package/tools/cli/installers/lib/core/ide-config-manager.js +154 -0
  645. package/tools/cli/installers/lib/core/installer.js +2956 -0
  646. package/tools/cli/installers/lib/core/manifest-generator.js +692 -0
  647. package/tools/cli/installers/lib/core/manifest.js +540 -0
  648. package/tools/cli/installers/lib/ide/_base-ide.js +651 -0
  649. package/tools/cli/installers/lib/ide/antigravity.js +510 -0
  650. package/tools/cli/installers/lib/ide/auggie.js +232 -0
  651. package/tools/cli/installers/lib/ide/claude-code.js +512 -0
  652. package/tools/cli/installers/lib/ide/cline.js +269 -0
  653. package/tools/cli/installers/lib/ide/codex.js +388 -0
  654. package/tools/cli/installers/lib/ide/crush.js +287 -0
  655. package/tools/cli/installers/lib/ide/cursor.js +400 -0
  656. package/tools/cli/installers/lib/ide/gemini.js +253 -0
  657. package/tools/cli/installers/lib/ide/github-copilot.js +387 -0
  658. package/tools/cli/installers/lib/ide/iflow.js +172 -0
  659. package/tools/cli/installers/lib/ide/kilo.js +249 -0
  660. package/tools/cli/installers/lib/ide/manager.js +245 -0
  661. package/tools/cli/installers/lib/ide/opencode.js +257 -0
  662. package/tools/cli/installers/lib/ide/qwen.js +372 -0
  663. package/tools/cli/installers/lib/ide/roo.js +324 -0
  664. package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
  665. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +90 -0
  666. package/tools/cli/installers/lib/ide/shared/module-injections.js +133 -0
  667. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +119 -0
  668. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +237 -0
  669. package/tools/cli/installers/lib/ide/shared/xiaoma-artifacts.js +143 -0
  670. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  671. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  672. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  673. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
  674. package/tools/cli/installers/lib/ide/trae.js +313 -0
  675. package/tools/cli/installers/lib/ide/windsurf.js +258 -0
  676. package/tools/cli/installers/lib/modules/manager.js +751 -0
  677. package/tools/cli/lib/activation-builder.js +168 -0
  678. package/tools/cli/lib/agent/compiler.js +524 -0
  679. package/tools/cli/lib/agent/installer.js +735 -0
  680. package/tools/cli/lib/agent/template-engine.js +152 -0
  681. package/tools/cli/lib/agent-analyzer.js +109 -0
  682. package/tools/cli/lib/agent-party-generator.js +206 -0
  683. package/tools/cli/lib/cli-utils.js +210 -0
  684. package/tools/cli/lib/config.js +212 -0
  685. package/tools/cli/lib/file-ops.js +204 -0
  686. package/tools/cli/lib/platform-codes.js +116 -0
  687. package/tools/cli/lib/project-root.js +71 -0
  688. package/tools/cli/lib/replace-project-root.js +239 -0
  689. package/tools/cli/lib/ui.js +769 -0
  690. package/tools/cli/lib/xml-handler.js +229 -0
  691. package/tools/cli/lib/xml-to-markdown.js +82 -0
  692. package/tools/{yaml-format.js → cli/lib/yaml-format.js} +36 -66
  693. package/tools/cli/lib/yaml-xml-builder.js +606 -0
  694. package/tools/cli/regenerate-manifests.js +28 -0
  695. package/tools/cli/test-yaml-builder.js +43 -0
  696. package/tools/cli/xiaoma-cli.js +40 -0
  697. package/tools/flattener/aggregate.js +12 -30
  698. package/tools/flattener/binary.js +43 -46
  699. package/tools/flattener/discovery.js +15 -23
  700. package/tools/flattener/files.js +6 -6
  701. package/tools/flattener/ignoreRules.js +122 -127
  702. package/tools/flattener/main.js +140 -330
  703. package/tools/flattener/projectRoot.js +71 -81
  704. package/tools/flattener/prompts.js +10 -12
  705. package/tools/flattener/stats.helpers.js +63 -119
  706. package/tools/flattener/stats.js +2 -7
  707. package/tools/flattener/test-matrix.js +169 -228
  708. package/tools/flattener/xml.js +23 -31
  709. package/tools/format-workflow-md.js +263 -0
  710. package/tools/platform-codes.yaml +145 -0
  711. package/tools/schema/agent.js +389 -0
  712. package/tools/validate-agent-schema.js +110 -0
  713. package/tools/validate-bundles.js +87 -0
  714. package/tools/xiaoma-npx-wrapper.js +18 -24
  715. package/.claude/agents/tech-translator.md +0 -124
  716. package/.claude/settings.local.json +0 -37
  717. package/.idea/XiaoMa-Cli.iml +0 -9
  718. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  719. package/.idea/misc.xml +0 -6
  720. package/.idea/modules.xml +0 -8
  721. package/.idea/prettier.xml +0 -6
  722. package/.idea/vcs.xml +0 -7
  723. package/.idea/workspace.xml +0 -114
  724. package/.xiaoma-core/.coordinator-state.json +0 -19
  725. package/CLAUDE.md +0 -283
  726. package/JAVA-BACKEND-COMMANDS-REFERENCE.md +0 -300
  727. package/JAVA-BACKEND-ITERATION-GUIDE.md +0 -2116
  728. package/common/tasks/create-doc.md +0 -103
  729. package/common/tasks/execute-checklist.md +0 -88
  730. package/common/utils/bmad-doc-template.md +0 -327
  731. package/common/utils/workflow-management.md +0 -71
  732. package/dist/agents/analyst.txt +0 -6308
  733. package/dist/agents/architect.txt +0 -3911
  734. package/dist/agents/automation-orchestrator.txt +0 -396
  735. package/dist/agents/dev.txt +0 -576
  736. package/dist/agents/full-requirement-orchestrator.txt +0 -505
  737. package/dist/agents/pm.txt +0 -2224
  738. package/dist/agents/po.txt +0 -1358
  739. package/dist/agents/qa.txt +0 -2002
  740. package/dist/agents/sm.txt +0 -2061
  741. package/dist/agents/ux-expert.txt +0 -707
  742. package/dist/agents/workflow-executor.txt +0 -1029
  743. package/dist/agents/workflow-helper.txt +0 -93
  744. package/dist/agents/xiaoma-master.txt +0 -9008
  745. package/dist/agents/xiaoma-orchestrator.txt +0 -1523
  746. package/dist/teams/team-all.txt +0 -19525
  747. package/dist/teams/team-fullstack-with-database.txt +0 -21500
  748. package/dist/teams/team-fullstack.txt +0 -13831
  749. package/dist/teams/team-ide-minimal.txt +0 -6698
  750. package/dist/teams/team-no-ui.txt +0 -12379
  751. package/docs/GUIDING-PRINCIPLES.md +0 -91
  752. package/docs/architecture/workflow-coordinator-implementation.md +0 -1188
  753. package/docs/architecture-sharding-modification.md +0 -623
  754. package/docs/automated-requirements-analysis-outputs.md +0 -896
  755. package/docs/core-architecture.md +0 -219
  756. package/docs/enhanced-ide-development-workflow.md +0 -248
  757. package/docs/prd/workflow-coordinator-prd.md +0 -1214
  758. package/docs/user-guide.md +0 -530
  759. package/docs/versioning-and-releases.md +0 -155
  760. package/docs/versions.md +0 -48
  761. package/docs/working-in-the-brownfield.md +0 -597
  762. package/tools/api-server.js +0 -367
  763. package/tools/builders/web-builder.js +0 -830
  764. package/tools/bump-all-versions.js +0 -133
  765. package/tools/cli.js +0 -157
  766. package/tools/installer/README.md +0 -8
  767. package/tools/installer/bin/xiaoma.js +0 -477
  768. package/tools/installer/config/ide-agent-config.yaml +0 -58
  769. package/tools/installer/config/install.config.yaml +0 -164
  770. package/tools/installer/lib/config-loader.js +0 -286
  771. package/tools/installer/lib/file-manager.js +0 -446
  772. package/tools/installer/lib/ide-base-setup.js +0 -238
  773. package/tools/installer/lib/ide-setup.js +0 -2027
  774. package/tools/installer/lib/installer.js +0 -2333
  775. package/tools/installer/lib/memory-profiler.js +0 -235
  776. package/tools/installer/lib/module-manager.js +0 -116
  777. package/tools/installer/lib/resource-locator.js +0 -334
  778. package/tools/installer/package-lock.json +0 -715
  779. package/tools/installer/package.json +0 -44
  780. package/tools/lib/dependency-resolver.js +0 -186
  781. package/tools/lib/yaml-utils.js +0 -34
  782. package/tools/md-assets/web-agent-startup-instructions.md +0 -39
  783. package/tools/preview-release-notes.js +0 -74
  784. package/tools/setup-hooks.sh +0 -37
  785. package/tools/shared/bannerArt.js +0 -105
  786. package/tools/sync-installer-version.js +0 -41
  787. package/tools/sync-version.sh +0 -23
  788. package/tools/upgraders/v3-to-v4-upgrader.js +0 -753
  789. package/tools/version-bump.js +0 -100
  790. package/tools/workflow-coordinator/README.md +0 -38
  791. package/tools/workflow-coordinator/USAGE.md +0 -548
  792. package/tools/workflow-coordinator/package-lock.json +0 -4868
  793. package/tools/workflow-coordinator/package.json +0 -35
  794. package/tools/workflow-coordinator/src/api/server.js +0 -207
  795. package/tools/workflow-coordinator/src/controller/workflow-controller.js +0 -263
  796. package/tools/workflow-coordinator/src/index.js +0 -113
  797. package/tools/workflow-coordinator/src/parser/workflow-parser.js +0 -144
  798. package/tools/workflow-coordinator/src/utils/state-manager.js +0 -59
  799. package/tools/workflow-coordinator/src/utils/validator.js +0 -86
  800. package/tools/workflow-coordinator/test/integration-test.js +0 -266
  801. package/tools/workflow-coordinator/test/quick-test.js +0 -127
  802. package/xiaoma-core/agent-teams/team-all.yaml +0 -15
  803. package/xiaoma-core/agent-teams/team-fullstack-with-database.yaml +0 -27
  804. package/xiaoma-core/agent-teams/team-fullstack.yaml +0 -19
  805. package/xiaoma-core/agent-teams/team-ide-minimal.yaml +0 -11
  806. package/xiaoma-core/agent-teams/team-no-ui.yaml +0 -14
  807. package/xiaoma-core/agents/analyst.md +0 -91
  808. package/xiaoma-core/agents/architect.md +0 -85
  809. package/xiaoma-core/agents/automated-fix-validator.yaml +0 -579
  810. package/xiaoma-core/agents/automated-quality-validator.yaml +0 -549
  811. package/xiaoma-core/agents/automation-orchestrator.md +0 -353
  812. package/xiaoma-core/agents/dev.md +0 -79
  813. package/xiaoma-core/agents/enhanced-workflow-orchestrator.yaml +0 -304
  814. package/xiaoma-core/agents/full-requirement-orchestrator.md +0 -462
  815. package/xiaoma-core/agents/global-requirements-auditor.yaml +0 -520
  816. package/xiaoma-core/agents/intelligent-template-adapter.yaml +0 -389
  817. package/xiaoma-core/agents/issue-dispatcher.yaml +0 -627
  818. package/xiaoma-core/agents/master-execution-engine.yaml +0 -543
  819. package/xiaoma-core/agents/pm.md +0 -82
  820. package/xiaoma-core/agents/po.md +0 -77
  821. package/xiaoma-core/agents/qa.md +0 -88
  822. package/xiaoma-core/agents/requirements-coverage-auditor.yaml +0 -373
  823. package/xiaoma-core/agents/sm.md +0 -67
  824. package/xiaoma-core/agents/ux-expert.md +0 -67
  825. package/xiaoma-core/agents/workflow-executor.md +0 -1031
  826. package/xiaoma-core/agents/workflow-helper.md +0 -481
  827. package/xiaoma-core/agents/xiaoma-master.md +0 -108
  828. package/xiaoma-core/agents/xiaoma-orchestrator.md +0 -145
  829. package/xiaoma-core/checklists/architect-checklist.md +0 -440
  830. package/xiaoma-core/checklists/change-checklist.md +0 -184
  831. package/xiaoma-core/checklists/dev-completion-checklist.md +0 -324
  832. package/xiaoma-core/checklists/pm-checklist.md +0 -372
  833. package/xiaoma-core/checklists/po-master-checklist.md +0 -434
  834. package/xiaoma-core/checklists/po-story-validation-checklist.md +0 -219
  835. package/xiaoma-core/checklists/qa-approval-checklist.md +0 -393
  836. package/xiaoma-core/checklists/story-dod-checklist.md +0 -96
  837. package/xiaoma-core/checklists/story-draft-checklist.md +0 -155
  838. package/xiaoma-core/core-config.yaml +0 -23
  839. package/xiaoma-core/data/bmad-kb.md +0 -809
  840. package/xiaoma-core/data/brainstorming-techniques.md +0 -38
  841. package/xiaoma-core/data/elicitation-methods.md +0 -156
  842. package/xiaoma-core/data/technical-preferences.md +0 -5
  843. package/xiaoma-core/data/test-levels-framework.md +0 -148
  844. package/xiaoma-core/data/test-priorities-matrix.md +0 -174
  845. package/xiaoma-core/scripts/build-validation/pre-dev-validation.sh +0 -71
  846. package/xiaoma-core/scripts/build-validation/progressive-validation.sh +0 -88
  847. package/xiaoma-core/scripts/build-validation/quick-check.sh +0 -69
  848. package/xiaoma-core/tasks/advanced-elicitation.md +0 -119
  849. package/xiaoma-core/tasks/analyze-existing-database.md +0 -155
  850. package/xiaoma-core/tasks/apply-qa-fixes.md +0 -150
  851. package/xiaoma-core/tasks/automated-story-cycle.md +0 -370
  852. package/xiaoma-core/tasks/batch-story-generation.md +0 -354
  853. package/xiaoma-core/tasks/brownfield-create-epic.md +0 -162
  854. package/xiaoma-core/tasks/brownfield-create-story.md +0 -149
  855. package/xiaoma-core/tasks/correct-course.md +0 -72
  856. package/xiaoma-core/tasks/create-brownfield-story.md +0 -314
  857. package/xiaoma-core/tasks/create-database-design.md +0 -161
  858. package/xiaoma-core/tasks/create-deep-research-prompt.md +0 -280
  859. package/xiaoma-core/tasks/create-enhanced-story-with-database.md +0 -250
  860. package/xiaoma-core/tasks/create-next-story.md +0 -114
  861. package/xiaoma-core/tasks/document-project.md +0 -345
  862. package/xiaoma-core/tasks/facilitate-brainstorming-session.md +0 -138
  863. package/xiaoma-core/tasks/generate-ai-frontend-prompt.md +0 -53
  864. package/xiaoma-core/tasks/generate-database-ddl.md +0 -240
  865. package/xiaoma-core/tasks/generate-database-entities.md +0 -501
  866. package/xiaoma-core/tasks/generate-rag-questions.md +0 -312
  867. package/xiaoma-core/tasks/index-docs.md +0 -175
  868. package/xiaoma-core/tasks/kb-mode-interaction.md +0 -77
  869. package/xiaoma-core/tasks/nfr-assess.md +0 -345
  870. package/xiaoma-core/tasks/project-integration-testing.md +0 -477
  871. package/xiaoma-core/tasks/qa-gate.md +0 -163
  872. package/xiaoma-core/tasks/requirement-analysis-with-rag.md +0 -1318
  873. package/xiaoma-core/tasks/requirements-coverage-audit.md +0 -198
  874. package/xiaoma-core/tasks/review-story.md +0 -316
  875. package/xiaoma-core/tasks/risk-profile.md +0 -355
  876. package/xiaoma-core/tasks/serial-development-orchestration.md +0 -426
  877. package/xiaoma-core/tasks/shard-doc.md +0 -187
  878. package/xiaoma-core/tasks/test-design.md +0 -176
  879. package/xiaoma-core/tasks/trace-requirements.md +0 -266
  880. package/xiaoma-core/tasks/validate-next-story.md +0 -136
  881. package/xiaoma-core/templates/api-design-tmpl.yaml +0 -704
  882. package/xiaoma-core/templates/architecture-tmpl.yaml +0 -650
  883. package/xiaoma-core/templates/brainstorming-output-tmpl.yaml +0 -156
  884. package/xiaoma-core/templates/brownfield-architecture-tmpl.yaml +0 -476
  885. package/xiaoma-core/templates/brownfield-prd-tmpl.yaml +0 -280
  886. package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +0 -336
  887. package/xiaoma-core/templates/database-design-tmpl.yaml +0 -266
  888. package/xiaoma-core/templates/enhanced-story-with-database-tmpl.yaml +0 -428
  889. package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +0 -272
  890. package/xiaoma-core/templates/front-end-spec-tmpl.yaml +0 -354
  891. package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +0 -925
  892. package/xiaoma-core/templates/global-qa-monitoring-tmpl.yaml +0 -443
  893. package/xiaoma-core/templates/market-research-tmpl.yaml +0 -252
  894. package/xiaoma-core/templates/maven-lombok-template.xml +0 -111
  895. package/xiaoma-core/templates/prd-tmpl.yaml +0 -202
  896. package/xiaoma-core/templates/project-brief-tmpl.yaml +0 -221
  897. package/xiaoma-core/templates/qa-gate-tmpl.yaml +0 -102
  898. package/xiaoma-core/templates/rag-knowledge-tmpl.yaml +0 -569
  899. package/xiaoma-core/templates/rag-questions-tmpl.yaml +0 -949
  900. package/xiaoma-core/templates/requirements-coverage-audit.yaml +0 -330
  901. package/xiaoma-core/templates/start-enhanced-workflow.yaml +0 -347
  902. package/xiaoma-core/templates/story-tmpl.yaml +0 -137
  903. package/xiaoma-core/workflows/automated-requirements-analysis.yaml +0 -2149
  904. package/xiaoma-core/workflows/automated-requirements-development.yaml +0 -739
  905. package/xiaoma-core/workflows/automated-story-development.yaml +0 -1264
  906. package/xiaoma-core/workflows/brownfield-fullstack.yaml +0 -298
  907. package/xiaoma-core/workflows/brownfield-service.yaml +0 -188
  908. package/xiaoma-core/workflows/brownfield-ui.yaml +0 -198
  909. package/xiaoma-core/workflows/enhanced-fullstack-with-database.yaml +0 -427
  910. package/xiaoma-core/workflows/enhanced-fullstack-with-qa-loop.yaml +0 -766
  911. package/xiaoma-core/workflows/full-requirement-automation.yaml +0 -1305
  912. package/xiaoma-core/workflows/greenfield-fullstack.yaml +0 -241
  913. package/xiaoma-core/workflows/greenfield-service.yaml +0 -207
  914. package/xiaoma-core/workflows/greenfield-ui.yaml +0 -236
@@ -1,2333 +0,0 @@
1
- const path = require("node:path");
2
- const fs = require("fs-extra");
3
- const chalk = require("chalk");
4
- const ora = require("ora");
5
- const inquirer = require("inquirer");
6
- const fileManager = require("./file-manager");
7
- const configLoader = require("./config-loader");
8
- const ideSetup = require("./ide-setup");
9
- const { extractYamlFromAgent } = require("../../lib/yaml-utils");
10
- const resourceLocator = require("./resource-locator");
11
-
12
- class Installer {
13
- async getCoreVersion() {
14
- try {
15
- // Always use package.json version
16
- const packagePath = path.join(
17
- __dirname,
18
- "..",
19
- "..",
20
- "..",
21
- "package.json",
22
- );
23
- const packageJson = require(packagePath);
24
- return packageJson.version;
25
- } catch {
26
- console.warn("Could not read version from package.json, using 'unknown'");
27
- return "unknown";
28
- }
29
- }
30
-
31
- async install(config) {
32
- const spinner = ora("Analyzing installation directory...").start();
33
-
34
- try {
35
- // Store the original CWD where npx was executed
36
- const originalCwd =
37
- process.env.INIT_CWD || process.env.PWD || process.cwd();
38
-
39
- // Resolve installation directory relative to where the user ran the command
40
- let installDir = path.isAbsolute(config.directory)
41
- ? config.directory
42
- : path.resolve(originalCwd, config.directory);
43
-
44
- if (path.basename(installDir) === ".xiaoma-core") {
45
- // If user points directly to .xiaoma-core, treat its parent as the project root
46
- installDir = path.dirname(installDir);
47
- }
48
-
49
- // Log resolved path for clarity
50
- if (!path.isAbsolute(config.directory)) {
51
- spinner.text = `Resolving "${config.directory}" to: ${installDir}`;
52
- }
53
-
54
- // Check if directory exists and handle non-existent directories
55
- if (!(await fileManager.pathExists(installDir))) {
56
- spinner.stop();
57
- console.log(`\nThe directory ${installDir} does not exist.`);
58
-
59
- const { action } = await inquirer.prompt([
60
- {
61
- type: "list",
62
- name: "action",
63
- message: "What would you like to do?",
64
- choices: [
65
- {
66
- name: "Create the directory and continue",
67
- value: "create",
68
- },
69
- {
70
- name: "Choose a different directory",
71
- value: "change",
72
- },
73
- {
74
- name: "Cancel installation",
75
- value: "cancel",
76
- },
77
- ],
78
- },
79
- ]);
80
-
81
- switch (action) {
82
- case "cancel": {
83
- console.log("Installation cancelled.");
84
- process.exit(0);
85
-
86
- break;
87
- }
88
- case "change": {
89
- const { newDirectory } = await inquirer.prompt([
90
- {
91
- type: "input",
92
- name: "newDirectory",
93
- message: "Enter the new directory path:",
94
- validate: (input) => {
95
- if (!input.trim()) {
96
- return "Please enter a valid directory path";
97
- }
98
- return true;
99
- },
100
- },
101
- ]);
102
- // Preserve the original CWD for the recursive call
103
- config.directory = newDirectory;
104
- return await this.install(config); // Recursive call with new directory
105
- }
106
- case "create": {
107
- try {
108
- await fileManager.ensureDirectory(installDir);
109
- console.log(`✓ Created directory: ${installDir}`);
110
- } catch (error) {
111
- console.error(`Failed to create directory: ${error.message}`);
112
- console.error(
113
- "You may need to check permissions or use a different path.",
114
- );
115
- process.exit(1);
116
- }
117
-
118
- break;
119
- }
120
- // No default
121
- }
122
-
123
- spinner.start("Analyzing installation directory...");
124
- }
125
-
126
- // If this is an update request from early detection, handle it directly
127
- if (config.installType === "update") {
128
- const state = await this.detectInstallationState(installDir);
129
- if (state.type === "v4_existing") {
130
- return await this.performUpdate(
131
- config,
132
- installDir,
133
- state.manifest,
134
- spinner,
135
- );
136
- } else {
137
- spinner.fail("No existing v4 installation found to update");
138
- throw new Error("No existing v4 installation found");
139
- }
140
- }
141
-
142
- // Detect current state
143
- const state = await this.detectInstallationState(installDir);
144
-
145
- // Handle different states
146
- switch (state.type) {
147
- case "clean": {
148
- return await this.performFreshInstall(config, installDir, spinner);
149
- }
150
-
151
- case "v4_existing": {
152
- return await this.handleExistingV4Installation(
153
- config,
154
- installDir,
155
- state,
156
- spinner,
157
- );
158
- }
159
-
160
- case "v3_existing": {
161
- return await this.handleV3Installation(
162
- config,
163
- installDir,
164
- state,
165
- spinner,
166
- );
167
- }
168
-
169
- case "unknown_existing": {
170
- return await this.handleUnknownInstallation(
171
- config,
172
- installDir,
173
- state,
174
- spinner,
175
- );
176
- }
177
- }
178
- } catch (error) {
179
- // Check if modules were initialized
180
- if (spinner) {
181
- spinner.fail("Installation failed");
182
- } else {
183
- console.error("Installation failed:", error.message);
184
- }
185
- throw error;
186
- }
187
- }
188
-
189
- async detectInstallationState(installDir) {
190
- const state = {
191
- type: "clean",
192
- hasV4Manifest: false,
193
- hasV3Structure: false,
194
- hasBmadCore: false,
195
- hasOtherFiles: false,
196
- manifest: null,
197
- expansionPacks: {},
198
- };
199
-
200
- // Check if directory exists
201
- if (!(await fileManager.pathExists(installDir))) {
202
- return state; // clean install
203
- }
204
-
205
- // Check for V4 installation (has .xiaoma-core with manifest)
206
- const bmadCorePath = path.join(installDir, ".xiaoma-core");
207
- const manifestPath = path.join(bmadCorePath, "install-manifest.yaml");
208
-
209
- if (await fileManager.pathExists(manifestPath)) {
210
- state.type = "v4_existing";
211
- state.hasV4Manifest = true;
212
- state.hasBmadCore = true;
213
- state.manifest = await fileManager.readManifest(installDir);
214
- return state;
215
- }
216
-
217
- // Check for V3 installation (has bmad-agent directory)
218
- const bmadAgentPath = path.join(installDir, "bmad-agent");
219
- if (await fileManager.pathExists(bmadAgentPath)) {
220
- state.type = "v3_existing";
221
- state.hasV3Structure = true;
222
- return state;
223
- }
224
-
225
- // Check for .xiaoma-core without manifest (broken V4 or manual copy)
226
- if (await fileManager.pathExists(bmadCorePath)) {
227
- state.type = "unknown_existing";
228
- state.hasBmadCore = true;
229
- return state;
230
- }
231
-
232
- // Check if directory has other files
233
- const files = await resourceLocator.findFiles("**/*", {
234
- cwd: installDir,
235
- nodir: true,
236
- ignore: ["**/.git/**", "**/node_modules/**"],
237
- });
238
-
239
- if (files.length > 0) {
240
- // Directory has other files, but no XiaoMa installation.
241
- // Treat as clean install but record that it isn't empty.
242
- state.hasOtherFiles = true;
243
- }
244
-
245
- // Check for expansion packs (folders starting with .)
246
- const expansionPacks = await this.detectExpansionPacks(installDir);
247
- state.expansionPacks = expansionPacks;
248
-
249
- return state; // clean install
250
- }
251
-
252
- async performFreshInstall(config, installDir, spinner, options = {}) {
253
- spinner.text = "Installing XiaoMa-Cli...";
254
-
255
- let files = [];
256
-
257
- switch (config.installType) {
258
- case "full": {
259
- // Full installation - copy entire .xiaoma-core folder as a subdirectory
260
- spinner.text = "Copying complete .xiaoma-core folder...";
261
- const sourceDir = resourceLocator.getBmadCorePath();
262
- const bmadCoreDestDir = path.join(installDir, ".xiaoma-core");
263
- await fileManager.copyDirectoryWithRootReplacement(
264
- sourceDir,
265
- bmadCoreDestDir,
266
- ".xiaoma-core",
267
- );
268
-
269
- // Copy common/ items to .xiaoma-core
270
- spinner.text = "Copying common utilities...";
271
- await this.copyCommonItems(installDir, ".xiaoma-core", spinner);
272
-
273
- // Copy documentation files from docs/ to .xiaoma-core
274
- spinner.text = "Copying documentation files...";
275
- await this.copyDocsItems(installDir, ".xiaoma-core", spinner);
276
-
277
- // Get list of all files for manifest
278
- const foundFiles = await resourceLocator.findFiles("**/*", {
279
- cwd: bmadCoreDestDir,
280
- nodir: true,
281
- ignore: ["**/.git/**", "**/node_modules/**"],
282
- });
283
- files = foundFiles.map((file) => path.join(".xiaoma-core", file));
284
-
285
- break;
286
- }
287
- case "single-agent": {
288
- // Single agent installation
289
- spinner.text = `Installing ${config.agent} agent...`;
290
-
291
- // Copy agent file with {root} replacement
292
- const agentPath = configLoader.getAgentPath(config.agent);
293
- const destinationAgentPath = path.join(
294
- installDir,
295
- ".xiaoma-core",
296
- "agents",
297
- `${config.agent}.md`,
298
- );
299
- await fileManager.copyFileWithRootReplacement(
300
- agentPath,
301
- destinationAgentPath,
302
- ".xiaoma-core",
303
- );
304
- files.push(`.xiaoma-core/agents/${config.agent}.md`);
305
-
306
- // Copy dependencies
307
- const { all: dependencies } =
308
- await resourceLocator.getAgentDependencies(config.agent);
309
- const sourceBase = resourceLocator.getBmadCorePath();
310
-
311
- for (const dep of dependencies) {
312
- spinner.text = `Copying dependency: ${dep}`;
313
-
314
- if (dep.includes("*")) {
315
- // Handle glob patterns with {root} replacement
316
- const copiedFiles = await fileManager.copyGlobPattern(
317
- dep.replace(".xiaoma-core/", ""),
318
- sourceBase,
319
- path.join(installDir, ".xiaoma-core"),
320
- ".xiaoma-core",
321
- );
322
- files.push(...copiedFiles.map((f) => `.xiaoma-core/${f}`));
323
- } else {
324
- // Handle single files with {root} replacement if needed
325
- const sourcePath = path.join(
326
- sourceBase,
327
- dep.replace(".xiaoma-core/", ""),
328
- );
329
- const destinationPath = path.join(installDir, dep);
330
-
331
- const needsRootReplacement =
332
- dep.endsWith(".md") ||
333
- dep.endsWith(".yaml") ||
334
- dep.endsWith(".yml");
335
- let success = false;
336
-
337
- success = await (needsRootReplacement
338
- ? fileManager.copyFileWithRootReplacement(
339
- sourcePath,
340
- destinationPath,
341
- ".xiaoma-core",
342
- )
343
- : fileManager.copyFile(sourcePath, destinationPath));
344
-
345
- if (success) {
346
- files.push(dep);
347
- }
348
- }
349
- }
350
-
351
- // Copy common/ items to .xiaoma-core
352
- spinner.text = "Copying common utilities...";
353
- const commonFiles = await this.copyCommonItems(
354
- installDir,
355
- ".xiaoma-core",
356
- spinner,
357
- );
358
- files.push(...commonFiles);
359
-
360
- // Copy documentation files from docs/ to .xiaoma-core
361
- spinner.text = "Copying documentation files...";
362
- const documentFiles = await this.copyDocsItems(
363
- installDir,
364
- ".xiaoma-core",
365
- spinner,
366
- );
367
- files.push(...documentFiles);
368
-
369
- break;
370
- }
371
- case "team": {
372
- // Team installation
373
- spinner.text = `Installing ${config.team} team...`;
374
-
375
- // Get team dependencies
376
- const teamDependencies = await configLoader.getTeamDependencies(
377
- config.team,
378
- );
379
- const sourceBase = resourceLocator.getBmadCorePath();
380
-
381
- // Install all team dependencies
382
- for (const dep of teamDependencies) {
383
- spinner.text = `Copying team dependency: ${dep}`;
384
-
385
- if (dep.includes("*")) {
386
- // Handle glob patterns with {root} replacement
387
- const copiedFiles = await fileManager.copyGlobPattern(
388
- dep.replace(".xiaoma-core/", ""),
389
- sourceBase,
390
- path.join(installDir, ".xiaoma-core"),
391
- ".xiaoma-core",
392
- );
393
- files.push(...copiedFiles.map((f) => `.xiaoma-core/${f}`));
394
- } else {
395
- // Handle single files with {root} replacement if needed
396
- const sourcePath = path.join(
397
- sourceBase,
398
- dep.replace(".xiaoma-core/", ""),
399
- );
400
- const destinationPath = path.join(installDir, dep);
401
-
402
- const needsRootReplacement =
403
- dep.endsWith(".md") ||
404
- dep.endsWith(".yaml") ||
405
- dep.endsWith(".yml");
406
- let success = false;
407
-
408
- success = await (needsRootReplacement
409
- ? fileManager.copyFileWithRootReplacement(
410
- sourcePath,
411
- destinationPath,
412
- ".xiaoma-core",
413
- )
414
- : fileManager.copyFile(sourcePath, destinationPath));
415
-
416
- if (success) {
417
- files.push(dep);
418
- }
419
- }
420
- }
421
-
422
- // Copy common/ items to .xiaoma-core
423
- spinner.text = "Copying common utilities...";
424
- const commonFiles = await this.copyCommonItems(
425
- installDir,
426
- ".xiaoma-core",
427
- spinner,
428
- );
429
- files.push(...commonFiles);
430
-
431
- // Copy documentation files from docs/ to .xiaoma-core
432
- spinner.text = "Copying documentation files...";
433
- const documentFiles = await this.copyDocsItems(
434
- installDir,
435
- ".xiaoma-core",
436
- spinner,
437
- );
438
- files.push(...documentFiles);
439
-
440
- break;
441
- }
442
- case "expansion-only": {
443
- // Expansion-only installation - DO NOT create .xiaoma-core
444
- // Only install expansion packs
445
- spinner.text = "Installing expansion packs only...";
446
-
447
- break;
448
- }
449
- // No default
450
- }
451
-
452
- // Install expansion packs if requested
453
- const expansionFiles = await this.installExpansionPacks(
454
- installDir,
455
- config.expansionPacks,
456
- spinner,
457
- config,
458
- );
459
- files.push(...expansionFiles);
460
-
461
- // Install web bundles if requested
462
- if (config.includeWebBundles && config.webBundlesDirectory) {
463
- spinner.text = "Installing web bundles...";
464
- // Resolve web bundles directory using the same logic as the main installation directory
465
- const originalCwd =
466
- process.env.INIT_CWD || process.env.PWD || process.cwd();
467
- let resolvedWebBundlesDir = path.isAbsolute(config.webBundlesDirectory)
468
- ? config.webBundlesDirectory
469
- : path.resolve(originalCwd, config.webBundlesDirectory);
470
- await this.installWebBundles(resolvedWebBundlesDir, config, spinner);
471
- }
472
-
473
- // Set up IDE integration if requested
474
- const ides = config.ides || (config.ide ? [config.ide] : []);
475
- if (ides.length > 0) {
476
- for (const ide of ides) {
477
- spinner.text = `Setting up ${ide} integration...`;
478
- let preConfiguredSettings = null;
479
- if (ide === "github-copilot") {
480
- preConfiguredSettings = config.githubCopilotConfig;
481
- } else if (ide === "auggie-cli") {
482
- preConfiguredSettings = config.augmentCodeConfig;
483
- }
484
- await ideSetup.setup(
485
- ide,
486
- installDir,
487
- config.agent,
488
- spinner,
489
- preConfiguredSettings,
490
- );
491
- }
492
- }
493
-
494
- // Modify core-config.yaml if sharding preferences were provided
495
- if (
496
- config.installType !== "expansion-only" &&
497
- (config.prdSharded !== undefined ||
498
- config.architectureSharded !== undefined)
499
- ) {
500
- spinner.text = "Configuring document sharding settings...";
501
- await fileManager.modifyCoreConfig(installDir, config);
502
- }
503
-
504
- // Create manifest (skip for expansion-only installations)
505
- if (config.installType !== "expansion-only") {
506
- spinner.text = "Creating installation manifest...";
507
- await fileManager.createManifest(installDir, config, files);
508
- }
509
-
510
- spinner.succeed("Installation complete!");
511
- this.showSuccessMessage(config, installDir, options);
512
- }
513
-
514
- async handleExistingV4Installation(config, installDir, state, spinner) {
515
- spinner.stop();
516
-
517
- const currentVersion = state.manifest.version;
518
- const newVersion = await this.getCoreVersion();
519
- const versionCompare = this.compareVersions(currentVersion, newVersion);
520
-
521
- console.log(chalk.yellow("\n🔍 Found existing XiaoMa v4 installation"));
522
- console.log(` Directory: ${installDir}`);
523
- console.log(` Current version: ${currentVersion}`);
524
- console.log(` Available version: ${newVersion}`);
525
- console.log(
526
- ` Installed: ${new Date(state.manifest.installed_at).toLocaleDateString()}`,
527
- );
528
-
529
- // Check file integrity
530
- spinner.start("Checking installation integrity...");
531
- const integrity = await fileManager.checkFileIntegrity(
532
- installDir,
533
- state.manifest,
534
- );
535
- spinner.stop();
536
-
537
- const hasMissingFiles = integrity.missing.length > 0;
538
- const hasModifiedFiles = integrity.modified.length > 0;
539
- const hasIntegrityIssues = hasMissingFiles || hasModifiedFiles;
540
-
541
- if (hasIntegrityIssues) {
542
- console.log(chalk.red("\n⚠️ Installation issues detected:"));
543
- if (hasMissingFiles) {
544
- console.log(chalk.red(` Missing files: ${integrity.missing.length}`));
545
- if (integrity.missing.length <= 5) {
546
- for (const file of integrity.missing)
547
- console.log(chalk.dim(` - ${file}`));
548
- }
549
- }
550
- if (hasModifiedFiles) {
551
- console.log(
552
- chalk.yellow(` Modified files: ${integrity.modified.length}`),
553
- );
554
- if (integrity.modified.length <= 5) {
555
- for (const file of integrity.modified)
556
- console.log(chalk.dim(` - ${file}`));
557
- }
558
- }
559
- }
560
-
561
- // Show existing expansion packs
562
- if (Object.keys(state.expansionPacks).length > 0) {
563
- console.log(chalk.cyan("\n📦 Installed expansion packs:"));
564
- for (const [packId, packInfo] of Object.entries(state.expansionPacks)) {
565
- if (packInfo.hasManifest && packInfo.manifest) {
566
- console.log(
567
- ` - ${packId} (v${packInfo.manifest.version || "unknown"})`,
568
- );
569
- } else {
570
- console.log(` - ${packId} (no manifest)`);
571
- }
572
- }
573
- }
574
-
575
- let choices = [];
576
-
577
- if (versionCompare < 0) {
578
- console.log(chalk.cyan("\n⬆️ Upgrade available for XiaoMa-Cli core"));
579
- choices.push({
580
- name: `Upgrade XiaoMa-Cli core (v${currentVersion} → v${newVersion})`,
581
- value: "upgrade",
582
- });
583
- } else if (versionCompare === 0) {
584
- if (hasIntegrityIssues) {
585
- // Offer repair option when files are missing or modified
586
- choices.push({
587
- name: "Repair installation (restore missing/modified files)",
588
- value: "repair",
589
- });
590
- }
591
- console.log(chalk.yellow("\n⚠️ Same version already installed"));
592
- choices.push({
593
- name: `Force reinstall XiaoMa-Cli core (v${currentVersion} - reinstall)`,
594
- value: "reinstall",
595
- });
596
- } else {
597
- console.log(
598
- chalk.yellow("\n⬇️ Installed version is newer than available"),
599
- );
600
- choices.push({
601
- name: `Downgrade XiaoMa-Cli core (v${currentVersion} → v${newVersion})`,
602
- value: "reinstall",
603
- });
604
- }
605
-
606
- choices.push(
607
- { name: "Add/update expansion packs only", value: "expansions" },
608
- { name: "Cancel", value: "cancel" },
609
- );
610
-
611
- const { action } = await inquirer.prompt([
612
- {
613
- type: "list",
614
- name: "action",
615
- message: "What would you like to do?",
616
- choices: choices,
617
- },
618
- ]);
619
-
620
- switch (action) {
621
- case "upgrade": {
622
- return await this.performUpdate(
623
- config,
624
- installDir,
625
- state.manifest,
626
- spinner,
627
- );
628
- }
629
- case "repair": {
630
- // For repair, restore missing/modified files while backing up modified ones
631
- return await this.performRepair(
632
- config,
633
- installDir,
634
- state.manifest,
635
- integrity,
636
- spinner,
637
- );
638
- }
639
- case "reinstall": {
640
- // For reinstall, don't check for modifications - just overwrite
641
- return await this.performReinstall(config, installDir, spinner);
642
- }
643
- case "expansions": {
644
- // Ask which expansion packs to install
645
- const availableExpansionPacks =
646
- await resourceLocator.getExpansionPacks();
647
-
648
- if (availableExpansionPacks.length === 0) {
649
- console.log(chalk.yellow("No expansion packs available."));
650
- return;
651
- }
652
-
653
- const { selectedPacks } = await inquirer.prompt([
654
- {
655
- type: "checkbox",
656
- name: "selectedPacks",
657
- message: "Select expansion packs to install/update:",
658
- choices: availableExpansionPacks.map((pack) => ({
659
- name: `${pack.name} (v${pack.version}) .${pack.id}`,
660
- value: pack.id,
661
- checked: state.expansionPacks[pack.id] !== undefined,
662
- })),
663
- },
664
- ]);
665
-
666
- if (selectedPacks.length === 0) {
667
- console.log(chalk.yellow("No expansion packs selected."));
668
- return;
669
- }
670
-
671
- spinner.start("Installing expansion packs...");
672
- const expansionFiles = await this.installExpansionPacks(
673
- installDir,
674
- selectedPacks,
675
- spinner,
676
- { ides: config.ides || [] },
677
- );
678
- spinner.succeed("Expansion packs installed successfully!");
679
-
680
- console.log(chalk.green("\n✓ Installation complete!"));
681
- console.log(chalk.green(`✓ Expansion packs installed/updated:`));
682
- for (const packId of selectedPacks) {
683
- console.log(chalk.green(` - ${packId} → .${packId}/`));
684
- }
685
- return;
686
- }
687
- case "cancel": {
688
- console.log("Installation cancelled.");
689
- return;
690
- }
691
- }
692
- }
693
-
694
- async handleV3Installation(config, installDir, state, spinner) {
695
- spinner.stop();
696
-
697
- console.log(
698
- chalk.yellow("\n🔍 Found XiaoMa v3 installation (bmad-agent/ directory)"),
699
- );
700
- console.log(` Directory: ${installDir}`);
701
-
702
- const { action } = await inquirer.prompt([
703
- {
704
- type: "list",
705
- name: "action",
706
- message: "What would you like to do?",
707
- choices: [
708
- { name: "Upgrade from v3 to v4 (recommended)", value: "upgrade" },
709
- { name: "Install v4 alongside v3", value: "alongside" },
710
- { name: "Cancel", value: "cancel" },
711
- ],
712
- },
713
- ]);
714
-
715
- switch (action) {
716
- case "upgrade": {
717
- console.log(chalk.cyan("\n📦 Starting v3 to v4 upgrade process..."));
718
- const V3ToV4Upgrader = require("../../upgraders/v3-to-v4-upgrader");
719
- const upgrader = new V3ToV4Upgrader();
720
- return await upgrader.upgrade({
721
- projectPath: installDir,
722
- ides: config.ides || [], // Pass IDE selections from initial config
723
- });
724
- }
725
- case "alongside": {
726
- return await this.performFreshInstall(config, installDir, spinner);
727
- }
728
- case "cancel": {
729
- console.log("Installation cancelled.");
730
- return;
731
- }
732
- }
733
- }
734
-
735
- async handleUnknownInstallation(config, installDir, state, spinner) {
736
- spinner.stop();
737
-
738
- console.log(chalk.yellow("\n⚠️ Directory contains existing files"));
739
- console.log(` Directory: ${installDir}`);
740
-
741
- if (state.hasBmadCore) {
742
- console.log(" Found: .xiaoma-core directory (but no manifest)");
743
- }
744
- if (state.hasOtherFiles) {
745
- console.log(" Found: Other files in directory");
746
- }
747
-
748
- const { action } = await inquirer.prompt([
749
- {
750
- type: "list",
751
- name: "action",
752
- message: "What would you like to do?",
753
- choices: [
754
- { name: "Install anyway (may overwrite files)", value: "force" },
755
- { name: "Choose different directory", value: "different" },
756
- { name: "Cancel", value: "cancel" },
757
- ],
758
- },
759
- ]);
760
-
761
- switch (action) {
762
- case "force": {
763
- return await this.performFreshInstall(config, installDir, spinner);
764
- }
765
- case "different": {
766
- const { newDir } = await inquirer.prompt([
767
- {
768
- type: "input",
769
- name: "newDir",
770
- message: "Enter new installation directory:",
771
- default: path.join(path.dirname(installDir), "bmad-project"),
772
- },
773
- ]);
774
- config.directory = newDir;
775
- return await this.install(config);
776
- }
777
- case "cancel": {
778
- console.log("Installation cancelled.");
779
- return;
780
- }
781
- }
782
- }
783
-
784
- async performUpdate(newConfig, installDir, manifest, spinner) {
785
- spinner.start("Checking for updates...");
786
-
787
- try {
788
- // Get current and new versions
789
- const currentVersion = manifest.version;
790
- const newVersion = await this.getCoreVersion();
791
- const versionCompare = this.compareVersions(currentVersion, newVersion);
792
-
793
- // Only check for modified files if it's an actual version upgrade
794
- let modifiedFiles = [];
795
- if (versionCompare !== 0) {
796
- spinner.text = "Checking for modified files...";
797
- modifiedFiles = await fileManager.checkModifiedFiles(
798
- installDir,
799
- manifest,
800
- );
801
- }
802
-
803
- if (modifiedFiles.length > 0) {
804
- spinner.warn("Found modified files");
805
- console.log(chalk.yellow("\nThe following files have been modified:"));
806
- for (const file of modifiedFiles) {
807
- console.log(` - ${file}`);
808
- }
809
-
810
- const { action } = await inquirer.prompt([
811
- {
812
- type: "list",
813
- name: "action",
814
- message: "How would you like to proceed?",
815
- choices: [
816
- { name: "Backup and overwrite modified files", value: "backup" },
817
- { name: "Skip modified files", value: "skip" },
818
- { name: "Cancel update", value: "cancel" },
819
- ],
820
- },
821
- ]);
822
-
823
- if (action === "cancel") {
824
- console.log("Update cancelled.");
825
- return;
826
- }
827
-
828
- if (action === "backup") {
829
- spinner.start("Backing up modified files...");
830
- for (const file of modifiedFiles) {
831
- const filePath = path.join(installDir, file);
832
- const backupPath = await fileManager.backupFile(filePath);
833
- console.log(
834
- chalk.dim(` Backed up: ${file} → ${path.basename(backupPath)}`),
835
- );
836
- }
837
- }
838
- }
839
-
840
- // Perform update by re-running installation
841
- spinner.text =
842
- versionCompare === 0 ? "Reinstalling files..." : "Updating files...";
843
- const config = {
844
- installType: manifest.install_type,
845
- agent: manifest.agent,
846
- directory: installDir,
847
- ides: newConfig?.ides || manifest.ides_setup || [],
848
- };
849
-
850
- await this.performFreshInstall(config, installDir, spinner, {
851
- isUpdate: true,
852
- });
853
-
854
- // Clean up .yml files that now have .yaml counterparts
855
- spinner.text = "Cleaning up legacy .yml files...";
856
- await this.cleanupLegacyYmlFiles(installDir, spinner);
857
- } catch (error) {
858
- spinner.fail("Update failed");
859
- throw error;
860
- }
861
- }
862
-
863
- async performRepair(config, installDir, manifest, integrity, spinner) {
864
- spinner.start("Preparing to repair installation...");
865
-
866
- try {
867
- // Back up modified files
868
- if (integrity.modified.length > 0) {
869
- spinner.text = "Backing up modified files...";
870
- for (const file of integrity.modified) {
871
- const filePath = path.join(installDir, file);
872
- if (await fileManager.pathExists(filePath)) {
873
- const backupPath = await fileManager.backupFile(filePath);
874
- console.log(
875
- chalk.dim(` Backed up: ${file} → ${path.basename(backupPath)}`),
876
- );
877
- }
878
- }
879
- }
880
-
881
- // Restore missing and modified files
882
- spinner.text = "Restoring files...";
883
- const sourceBase = resourceLocator.getBmadCorePath();
884
- const filesToRestore = [...integrity.missing, ...integrity.modified];
885
-
886
- for (const file of filesToRestore) {
887
- // Skip the manifest file itself
888
- if (file.endsWith("install-manifest.yaml")) continue;
889
-
890
- const relativePath = file.replace(".xiaoma-core/", "");
891
- const destinationPath = path.join(installDir, file);
892
-
893
- // Check if this is a common/ file that needs special processing
894
- const commonBase = path.dirname(
895
- path.dirname(path.dirname(path.dirname(__filename))),
896
- );
897
- const commonSourcePath = path.join(commonBase, "common", relativePath);
898
-
899
- if (await fileManager.pathExists(commonSourcePath)) {
900
- // This is a common/ file - needs template processing
901
- const fs = require("node:fs").promises;
902
- const content = await fs.readFile(commonSourcePath, "utf8");
903
- const updatedContent = content.replaceAll("{root}", ".xiaoma-core");
904
- await fileManager.ensureDirectory(path.dirname(destinationPath));
905
- await fs.writeFile(destinationPath, updatedContent, "utf8");
906
- spinner.text = `Restored: ${file}`;
907
- } else {
908
- // Regular file from xiaoma-core
909
- const sourcePath = path.join(sourceBase, relativePath);
910
- if (await fileManager.pathExists(sourcePath)) {
911
- await fileManager.copyFile(sourcePath, destinationPath);
912
- spinner.text = `Restored: ${file}`;
913
-
914
- // If this is a .yaml file, check for and remove corresponding .yml file
915
- if (file.endsWith(".yaml")) {
916
- const ymlFile = file.replace(/\.yaml$/, ".yml");
917
- const ymlPath = path.join(installDir, ymlFile);
918
- if (await fileManager.pathExists(ymlPath)) {
919
- const fs = require("node:fs").promises;
920
- await fs.unlink(ymlPath);
921
- console.log(
922
- chalk.dim(
923
- ` Removed legacy: ${ymlFile} (replaced by ${file})`,
924
- ),
925
- );
926
- }
927
- }
928
- } else {
929
- console.warn(
930
- chalk.yellow(` Warning: Source file not found: ${file}`),
931
- );
932
- }
933
- }
934
- }
935
-
936
- // Clean up .yml files that now have .yaml counterparts
937
- spinner.text = "Cleaning up legacy .yml files...";
938
- await this.cleanupLegacyYmlFiles(installDir, spinner);
939
-
940
- spinner.succeed("Repair completed successfully!");
941
-
942
- // Show summary
943
- console.log(chalk.green("\n✓ Installation repaired!"));
944
- if (integrity.missing.length > 0) {
945
- console.log(
946
- chalk.green(` Restored ${integrity.missing.length} missing files`),
947
- );
948
- }
949
- if (integrity.modified.length > 0) {
950
- console.log(
951
- chalk.green(
952
- ` Restored ${integrity.modified.length} modified files (backups created)`,
953
- ),
954
- );
955
- }
956
-
957
- // Warning for Cursor custom modes if agents were repaired
958
- const ides = manifest.ides_setup || [];
959
- if (ides.includes("cursor")) {
960
- console.log(
961
- chalk.yellow.bold(
962
- "\n⚠️ IMPORTANT: Cursor Custom Modes Update Required",
963
- ),
964
- );
965
- console.log(
966
- chalk.yellow(
967
- "Since agent files have been repaired, you need to update any custom agent modes configured in the Cursor custom agent GUI per the Cursor docs.",
968
- ),
969
- );
970
- }
971
- } catch (error) {
972
- spinner.fail("Repair failed");
973
- throw error;
974
- }
975
- }
976
-
977
- async performReinstall(config, installDir, spinner) {
978
- spinner.start("Preparing to reinstall XiaoMa-Cli...");
979
-
980
- // Remove existing .xiaoma-core
981
- const bmadCorePath = path.join(installDir, ".xiaoma-core");
982
- if (await fileManager.pathExists(bmadCorePath)) {
983
- spinner.text = "Removing existing installation...";
984
- await fileManager.removeDirectory(bmadCorePath);
985
- }
986
-
987
- spinner.text = "Installing fresh copy...";
988
- const result = await this.performFreshInstall(config, installDir, spinner, {
989
- isUpdate: true,
990
- });
991
-
992
- // Clean up .yml files that now have .yaml counterparts
993
- spinner.text = "Cleaning up legacy .yml files...";
994
- await this.cleanupLegacyYmlFiles(installDir, spinner);
995
-
996
- return result;
997
- }
998
-
999
- showSuccessMessage(config, installDir, options = {}) {
1000
- console.log(chalk.green("\n✓ XiaoMa-Cli installed successfully!\n"));
1001
-
1002
- const ides = config.ides || (config.ide ? [config.ide] : []);
1003
- if (ides.length > 0) {
1004
- for (const ide of ides) {
1005
- const ideConfig = configLoader.getIdeConfiguration(ide);
1006
- if (ideConfig?.instructions) {
1007
- console.log(
1008
- chalk.bold(`To use XiaoMa-Cli agents in ${ideConfig.name}:`),
1009
- );
1010
- console.log(ideConfig.instructions);
1011
- }
1012
- }
1013
- } else {
1014
- console.log(chalk.yellow("No IDE configuration was set up."));
1015
- console.log(
1016
- "You can manually configure your IDE using the agent files in:",
1017
- installDir,
1018
- );
1019
- }
1020
-
1021
- // Information about installation components
1022
- console.log(chalk.bold("\n🎯 Installation Summary:"));
1023
- if (config.installType !== "expansion-only") {
1024
- console.log(
1025
- chalk.green(
1026
- "✓ .xiaoma-core framework installed with all agents and workflows",
1027
- ),
1028
- );
1029
- }
1030
-
1031
- if (config.expansionPacks && config.expansionPacks.length > 0) {
1032
- console.log(chalk.green(`✓ Expansion packs installed:`));
1033
- for (const packId of config.expansionPacks) {
1034
- console.log(chalk.green(` - ${packId} → .${packId}/`));
1035
- }
1036
- }
1037
-
1038
- if (config.includeWebBundles && config.webBundlesDirectory) {
1039
- const bundleInfo = this.getWebBundleInfo(config);
1040
- // Resolve the web bundles directory for display
1041
- const originalCwd =
1042
- process.env.INIT_CWD || process.env.PWD || process.cwd();
1043
- const resolvedWebBundlesDir = path.isAbsolute(config.webBundlesDirectory)
1044
- ? config.webBundlesDirectory
1045
- : path.resolve(originalCwd, config.webBundlesDirectory);
1046
- console.log(
1047
- chalk.green(
1048
- `✓ Web bundles (${bundleInfo}) installed to: ${resolvedWebBundlesDir}`,
1049
- ),
1050
- );
1051
- }
1052
-
1053
- if (ides.length > 0) {
1054
- const ideNames = ides
1055
- .map((ide) => {
1056
- const ideConfig = configLoader.getIdeConfiguration(ide);
1057
- return ideConfig?.name || ide;
1058
- })
1059
- .join(", ");
1060
- console.log(
1061
- chalk.green(`✓ IDE rules and configurations set up for: ${ideNames}`),
1062
- );
1063
- }
1064
-
1065
- // Information about web bundles
1066
- if (!config.includeWebBundles) {
1067
- console.log(chalk.bold("\n📦 Web Bundles Available:"));
1068
- console.log(
1069
- "Pre-built web bundles are available and can be added later:",
1070
- );
1071
- console.log(
1072
- chalk.cyan(" Run the installer again to add them to your project"),
1073
- );
1074
- console.log(
1075
- "These bundles work independently and can be shared, moved, or used",
1076
- );
1077
- console.log("in other projects as standalone files.");
1078
- }
1079
-
1080
- if (config.installType === "single-agent") {
1081
- console.log(
1082
- chalk.dim(
1083
- "\nNeed other agents? Run: npx xiaoma-cli install --agent=<name>",
1084
- ),
1085
- );
1086
- console.log(
1087
- chalk.dim("Need everything? Run: npx xiaoma-cli install --full"),
1088
- );
1089
- }
1090
-
1091
- // Warning for Cursor custom modes if agents were updated
1092
- if (options.isUpdate && ides.includes("cursor")) {
1093
- console.log(
1094
- chalk.yellow.bold(
1095
- "\n⚠️ IMPORTANT: Cursor Custom Modes Update Required",
1096
- ),
1097
- );
1098
- console.log(
1099
- chalk.yellow(
1100
- "Since agents have been updated, you need to update any custom agent modes configured in the Cursor custom agent GUI per the Cursor docs.",
1101
- ),
1102
- );
1103
- }
1104
-
1105
- // Important notice to read the user guide
1106
- console.log(
1107
- chalk.red.bold(
1108
- "\n📖 IMPORTANT: Please read the user guide at docs/user-guide.md (also installed at .xiaoma-core/user-guide.md)",
1109
- ),
1110
- );
1111
- console.log(
1112
- chalk.red(
1113
- "This guide contains essential information about the XiaoMa-Cli workflow and how to use the agents effectively.",
1114
- ),
1115
- );
1116
- }
1117
-
1118
- // Legacy method for backward compatibility
1119
- async update() {
1120
- console.log(chalk.yellow('The "update" command is deprecated.'));
1121
- console.log(
1122
- 'Please use "install" instead - it will detect and offer to update existing installations.',
1123
- );
1124
-
1125
- const installDir = await this.findInstallation();
1126
- if (installDir) {
1127
- const config = {
1128
- installType: "full",
1129
- directory: path.dirname(installDir),
1130
- ide: null,
1131
- };
1132
- return await this.install(config);
1133
- }
1134
- console.log(chalk.red("No XiaoMa installation found."));
1135
- }
1136
-
1137
- async listAgents() {
1138
- const agents = await resourceLocator.getAvailableAgents();
1139
-
1140
- console.log(chalk.bold("\nAvailable XiaoMa Agents:\n"));
1141
-
1142
- for (const agent of agents) {
1143
- console.log(chalk.cyan(` ${agent.id.padEnd(20)}`), agent.description);
1144
- }
1145
-
1146
- console.log(
1147
- chalk.dim("\nInstall with: npx xiaoma-cli install --agent=<id>\n"),
1148
- );
1149
- }
1150
-
1151
- async listExpansionPacks() {
1152
- const expansionPacks = await resourceLocator.getExpansionPacks();
1153
-
1154
- console.log(chalk.bold("\nAvailable XiaoMa Expansion Packs:\n"));
1155
-
1156
- if (expansionPacks.length === 0) {
1157
- console.log(chalk.yellow("No expansion packs found."));
1158
- return;
1159
- }
1160
-
1161
- for (const pack of expansionPacks) {
1162
- console.log(
1163
- chalk.cyan(` ${pack.id.padEnd(20)}`),
1164
- `${pack.name} v${pack.version}`,
1165
- );
1166
- console.log(chalk.dim(` ${" ".repeat(22)}${pack.description}`));
1167
- if (pack.author && pack.author !== "Unknown") {
1168
- console.log(chalk.dim(` ${" ".repeat(22)}by ${pack.author}`));
1169
- }
1170
- console.log();
1171
- }
1172
-
1173
- console.log(
1174
- chalk.dim(
1175
- "Install with: npx xiaoma-cli install --full --expansion-packs <id>\n",
1176
- ),
1177
- );
1178
- }
1179
-
1180
- async showStatus() {
1181
- const installDir = await this.findInstallation();
1182
-
1183
- if (!installDir) {
1184
- console.log(
1185
- chalk.yellow("No XiaoMa installation found in current directory tree"),
1186
- );
1187
- return;
1188
- }
1189
-
1190
- const manifest = await fileManager.readManifest(installDir);
1191
-
1192
- if (!manifest) {
1193
- console.log(chalk.red("Invalid installation - manifest not found"));
1194
- return;
1195
- }
1196
-
1197
- console.log(chalk.bold("\nXiaoMa-Cli Installation Status:\n"));
1198
- console.log(` Directory: ${installDir}`);
1199
- console.log(` Version: ${manifest.version}`);
1200
- console.log(
1201
- ` Installed: ${new Date(manifest.installed_at).toLocaleDateString()}`,
1202
- );
1203
- console.log(` Type: ${manifest.install_type}`);
1204
-
1205
- if (manifest.agent) {
1206
- console.log(` Agent: ${manifest.agent}`);
1207
- }
1208
-
1209
- if (manifest.ides_setup && manifest.ides_setup.length > 0) {
1210
- console.log(` IDE Setup: ${manifest.ides_setup.join(", ")}`);
1211
- }
1212
-
1213
- console.log(` Total Files: ${manifest.files.length}`);
1214
-
1215
- // Check for modifications
1216
- const modifiedFiles = await fileManager.checkModifiedFiles(
1217
- installDir,
1218
- manifest,
1219
- );
1220
- if (modifiedFiles.length > 0) {
1221
- console.log(chalk.yellow(` Modified Files: ${modifiedFiles.length}`));
1222
- }
1223
-
1224
- console.log("");
1225
- }
1226
-
1227
- async getAvailableAgents() {
1228
- return resourceLocator.getAvailableAgents();
1229
- }
1230
-
1231
- async getAvailableExpansionPacks() {
1232
- return resourceLocator.getExpansionPacks();
1233
- }
1234
-
1235
- async getAvailableTeams() {
1236
- return configLoader.getAvailableTeams();
1237
- }
1238
-
1239
- async installExpansionPacks(installDir, selectedPacks, spinner, config = {}) {
1240
- if (!selectedPacks || selectedPacks.length === 0) {
1241
- return [];
1242
- }
1243
-
1244
- const installedFiles = [];
1245
-
1246
- for (const packId of selectedPacks) {
1247
- spinner.text = `Installing expansion pack: ${packId}...`;
1248
-
1249
- try {
1250
- const expansionPacks = await resourceLocator.getExpansionPacks();
1251
- const pack = expansionPacks.find((p) => p.id === packId);
1252
-
1253
- if (!pack) {
1254
- console.warn(`Expansion pack ${packId} not found, skipping...`);
1255
- continue;
1256
- }
1257
-
1258
- // Check if expansion pack already exists
1259
- let expansionDotFolder = path.join(installDir, `.${packId}`);
1260
- const existingManifestPath = path.join(
1261
- expansionDotFolder,
1262
- "install-manifest.yaml",
1263
- );
1264
-
1265
- if (await fileManager.pathExists(existingManifestPath)) {
1266
- spinner.stop();
1267
- const existingManifest = await fileManager.readExpansionPackManifest(
1268
- installDir,
1269
- packId,
1270
- );
1271
-
1272
- console.log(
1273
- chalk.yellow(`\n🔍 Found existing ${pack.name} installation`),
1274
- );
1275
- console.log(
1276
- ` Current version: ${existingManifest.version || "unknown"}`,
1277
- );
1278
- console.log(` New version: ${pack.version}`);
1279
-
1280
- // Check integrity of existing expansion pack
1281
- const packIntegrity = await fileManager.checkFileIntegrity(
1282
- installDir,
1283
- existingManifest,
1284
- );
1285
- const hasPackIntegrityIssues =
1286
- packIntegrity.missing.length > 0 ||
1287
- packIntegrity.modified.length > 0;
1288
-
1289
- if (hasPackIntegrityIssues) {
1290
- console.log(chalk.red(" ⚠️ Installation issues detected:"));
1291
- if (packIntegrity.missing.length > 0) {
1292
- console.log(
1293
- chalk.red(
1294
- ` Missing files: ${packIntegrity.missing.length}`,
1295
- ),
1296
- );
1297
- }
1298
- if (packIntegrity.modified.length > 0) {
1299
- console.log(
1300
- chalk.yellow(
1301
- ` Modified files: ${packIntegrity.modified.length}`,
1302
- ),
1303
- );
1304
- }
1305
- }
1306
-
1307
- const versionCompare = this.compareVersions(
1308
- existingManifest.version || "0.0.0",
1309
- pack.version,
1310
- );
1311
-
1312
- if (versionCompare === 0) {
1313
- console.log(chalk.yellow(" ⚠️ Same version already installed"));
1314
-
1315
- const choices = [];
1316
- if (hasPackIntegrityIssues) {
1317
- choices.push({
1318
- name: "Repair (restore missing/modified files)",
1319
- value: "repair",
1320
- });
1321
- }
1322
- choices.push(
1323
- { name: "Force reinstall (overwrite)", value: "overwrite" },
1324
- { name: "Skip this expansion pack", value: "skip" },
1325
- { name: "Cancel installation", value: "cancel" },
1326
- );
1327
-
1328
- const { action } = await inquirer.prompt([
1329
- {
1330
- type: "list",
1331
- name: "action",
1332
- message: `${pack.name} v${pack.version} is already installed. What would you like to do?`,
1333
- choices: choices,
1334
- },
1335
- ]);
1336
-
1337
- switch (action) {
1338
- case "skip": {
1339
- spinner.start();
1340
- continue;
1341
-
1342
- break;
1343
- }
1344
- case "cancel": {
1345
- console.log("Installation cancelled.");
1346
- process.exit(0);
1347
-
1348
- break;
1349
- }
1350
- case "repair": {
1351
- // Repair the expansion pack
1352
- await this.repairExpansionPack(
1353
- installDir,
1354
- packId,
1355
- pack,
1356
- packIntegrity,
1357
- spinner,
1358
- );
1359
- continue;
1360
-
1361
- break;
1362
- }
1363
- // No default
1364
- }
1365
- } else if (versionCompare < 0) {
1366
- console.log(chalk.cyan(" ⬆️ Upgrade available"));
1367
-
1368
- const { proceed } = await inquirer.prompt([
1369
- {
1370
- type: "confirm",
1371
- name: "proceed",
1372
- message: `Upgrade ${pack.name} from v${existingManifest.version} to v${pack.version}?`,
1373
- default: true,
1374
- },
1375
- ]);
1376
-
1377
- if (!proceed) {
1378
- spinner.start();
1379
- continue;
1380
- }
1381
- } else {
1382
- console.log(
1383
- chalk.yellow(
1384
- " ⬇️ Installed version is newer than available version",
1385
- ),
1386
- );
1387
-
1388
- const { action } = await inquirer.prompt([
1389
- {
1390
- type: "list",
1391
- name: "action",
1392
- message: "What would you like to do?",
1393
- choices: [
1394
- { name: "Keep current version", value: "skip" },
1395
- {
1396
- name: "Downgrade to available version",
1397
- value: "downgrade",
1398
- },
1399
- { name: "Cancel installation", value: "cancel" },
1400
- ],
1401
- },
1402
- ]);
1403
-
1404
- if (action === "skip") {
1405
- spinner.start();
1406
- continue;
1407
- } else if (action === "cancel") {
1408
- console.log("Installation cancelled.");
1409
- process.exit(0);
1410
- }
1411
- }
1412
-
1413
- // If we get here, we're proceeding with installation
1414
- spinner.start(`Removing old ${pack.name} installation...`);
1415
- await fileManager.removeDirectory(expansionDotFolder);
1416
- }
1417
-
1418
- const expansionPackDir = pack.path;
1419
-
1420
- // Ensure dedicated dot folder exists for this expansion pack
1421
- expansionDotFolder = path.join(installDir, `.${packId}`);
1422
- await fileManager.ensureDirectory(expansionDotFolder);
1423
-
1424
- // Define the folders to copy from expansion packs
1425
- const foldersToSync = [
1426
- "agents",
1427
- "agent-teams",
1428
- "templates",
1429
- "tasks",
1430
- "checklists",
1431
- "workflows",
1432
- "data",
1433
- "utils",
1434
- "schemas",
1435
- ];
1436
-
1437
- // Copy each folder if it exists
1438
- for (const folder of foldersToSync) {
1439
- const sourceFolder = path.join(expansionPackDir, folder);
1440
-
1441
- // Check if folder exists in expansion pack
1442
- if (await fileManager.pathExists(sourceFolder)) {
1443
- // Get all files in this folder
1444
- const files = await resourceLocator.findFiles("**/*", {
1445
- cwd: sourceFolder,
1446
- nodir: true,
1447
- });
1448
-
1449
- // Copy each file to the expansion pack's dot folder with {root} replacement
1450
- for (const file of files) {
1451
- const sourcePath = path.join(sourceFolder, file);
1452
- const destinationPath = path.join(
1453
- expansionDotFolder,
1454
- folder,
1455
- file,
1456
- );
1457
-
1458
- const needsRootReplacement =
1459
- file.endsWith(".md") ||
1460
- file.endsWith(".yaml") ||
1461
- file.endsWith(".yml");
1462
- let success = false;
1463
-
1464
- success = await (needsRootReplacement
1465
- ? fileManager.copyFileWithRootReplacement(
1466
- sourcePath,
1467
- destinationPath,
1468
- `.${packId}`,
1469
- )
1470
- : fileManager.copyFile(sourcePath, destinationPath));
1471
-
1472
- if (success) {
1473
- installedFiles.push(path.join(`.${packId}`, folder, file));
1474
- }
1475
- }
1476
- }
1477
- }
1478
-
1479
- // Copy config.yaml with {root} replacement
1480
- const configPath = path.join(expansionPackDir, "config.yaml");
1481
- if (await fileManager.pathExists(configPath)) {
1482
- const configDestinationPath = path.join(
1483
- expansionDotFolder,
1484
- "config.yaml",
1485
- );
1486
- if (
1487
- await fileManager.copyFileWithRootReplacement(
1488
- configPath,
1489
- configDestinationPath,
1490
- `.${packId}`,
1491
- )
1492
- ) {
1493
- installedFiles.push(path.join(`.${packId}`, "config.yaml"));
1494
- }
1495
- }
1496
-
1497
- // Copy README if it exists with {root} replacement
1498
- const readmePath = path.join(expansionPackDir, "README.md");
1499
- if (await fileManager.pathExists(readmePath)) {
1500
- const readmeDestinationPath = path.join(
1501
- expansionDotFolder,
1502
- "README.md",
1503
- );
1504
- if (
1505
- await fileManager.copyFileWithRootReplacement(
1506
- readmePath,
1507
- readmeDestinationPath,
1508
- `.${packId}`,
1509
- )
1510
- ) {
1511
- installedFiles.push(path.join(`.${packId}`, "README.md"));
1512
- }
1513
- }
1514
-
1515
- // Copy common/ items to expansion pack folder
1516
- spinner.text = `Copying common utilities to ${packId}...`;
1517
- await this.copyCommonItems(installDir, `.${packId}`, spinner);
1518
-
1519
- // Check and resolve core dependencies
1520
- await this.resolveExpansionPackCoreDependencies(
1521
- installDir,
1522
- expansionDotFolder,
1523
- packId,
1524
- pack,
1525
- spinner,
1526
- );
1527
-
1528
- // Check and resolve core agents referenced by teams
1529
- await this.resolveExpansionPackCoreAgents(
1530
- installDir,
1531
- expansionDotFolder,
1532
- packId,
1533
- spinner,
1534
- );
1535
-
1536
- // Create manifest for this expansion pack
1537
- spinner.text = `Creating manifest for ${packId}...`;
1538
- const expansionConfig = {
1539
- installType: "expansion-pack",
1540
- expansionPackId: packId,
1541
- expansionPackName: pack.name,
1542
- expansionPackVersion: pack.version,
1543
- ides: config.ides || [], // Use ides_setup instead of ide_setup
1544
- };
1545
-
1546
- // Get all files installed in this expansion pack
1547
- const foundFiles = await resourceLocator.findFiles("**/*", {
1548
- cwd: expansionDotFolder,
1549
- nodir: true,
1550
- });
1551
- const expansionPackFiles = foundFiles.map((f) =>
1552
- path.join(`.${packId}`, f),
1553
- );
1554
-
1555
- await fileManager.createExpansionPackManifest(
1556
- installDir,
1557
- packId,
1558
- expansionConfig,
1559
- expansionPackFiles,
1560
- );
1561
-
1562
- console.log(
1563
- chalk.green(
1564
- `✓ Installed expansion pack: ${pack.name} to ${`.${packId}`}`,
1565
- ),
1566
- );
1567
- } catch (error) {
1568
- console.error(
1569
- `Failed to install expansion pack ${packId}: ${error.message}`,
1570
- );
1571
- console.error(`Stack trace: ${error.stack}`);
1572
- }
1573
- }
1574
-
1575
- return installedFiles;
1576
- }
1577
-
1578
- async resolveExpansionPackCoreDependencies(
1579
- installDir,
1580
- expansionDotFolder,
1581
- packId,
1582
- pack,
1583
- spinner,
1584
- ) {
1585
- const yaml = require("js-yaml");
1586
- const fs = require("node:fs").promises;
1587
-
1588
- // Find all agent files in the expansion pack
1589
- const agentFiles = await resourceLocator.findFiles("agents/*.md", {
1590
- cwd: expansionDotFolder,
1591
- });
1592
-
1593
- for (const agentFile of agentFiles) {
1594
- const agentPath = path.join(expansionDotFolder, agentFile);
1595
- const agentContent = await fs.readFile(agentPath, "utf8");
1596
-
1597
- // Extract YAML frontmatter to check dependencies
1598
- const yamlContent = extractYamlFromAgent(agentContent);
1599
- if (yamlContent) {
1600
- try {
1601
- const agentConfig = yaml.load(yamlContent);
1602
- const dependencies = agentConfig.dependencies || {};
1603
-
1604
- // Check for core dependencies (those that don't exist in the expansion pack)
1605
- for (const depType of [
1606
- "tasks",
1607
- "templates",
1608
- "checklists",
1609
- "workflows",
1610
- "utils",
1611
- "data",
1612
- ]) {
1613
- const deps = dependencies[depType] || [];
1614
-
1615
- for (const dep of deps) {
1616
- const depFileName =
1617
- dep.endsWith(".md") || dep.endsWith(".yaml")
1618
- ? dep
1619
- : depType === "templates"
1620
- ? `${dep}.yaml`
1621
- : `${dep}.md`;
1622
- const expansionDepPath = path.join(
1623
- expansionDotFolder,
1624
- depType,
1625
- depFileName,
1626
- );
1627
-
1628
- // Check if dependency exists in expansion pack dot folder
1629
- if (!(await fileManager.pathExists(expansionDepPath))) {
1630
- // Try to find it in expansion pack source
1631
- const sourceDepPath = path.join(
1632
- pack.path,
1633
- depType,
1634
- depFileName,
1635
- );
1636
-
1637
- if (await fileManager.pathExists(sourceDepPath)) {
1638
- // Copy from expansion pack source
1639
- spinner.text = `Copying ${packId} dependency ${dep}...`;
1640
- const destinationPath = path.join(
1641
- expansionDotFolder,
1642
- depType,
1643
- depFileName,
1644
- );
1645
- await fileManager.copyFileWithRootReplacement(
1646
- sourceDepPath,
1647
- destinationPath,
1648
- `.${packId}`,
1649
- );
1650
- console.log(
1651
- chalk.dim(
1652
- ` Added ${packId} dependency: ${depType}/${depFileName}`,
1653
- ),
1654
- );
1655
- } else {
1656
- // Try to find it in core
1657
- const coreDepPath = path.join(
1658
- resourceLocator.getBmadCorePath(),
1659
- depType,
1660
- depFileName,
1661
- );
1662
-
1663
- if (await fileManager.pathExists(coreDepPath)) {
1664
- spinner.text = `Copying core dependency ${dep} for ${packId}...`;
1665
-
1666
- // Copy from core to expansion pack dot folder with {root} replacement
1667
- const destinationPath = path.join(
1668
- expansionDotFolder,
1669
- depType,
1670
- depFileName,
1671
- );
1672
- await fileManager.copyFileWithRootReplacement(
1673
- coreDepPath,
1674
- destinationPath,
1675
- `.${packId}`,
1676
- );
1677
-
1678
- console.log(
1679
- chalk.dim(
1680
- ` Added core dependency: ${depType}/${depFileName}`,
1681
- ),
1682
- );
1683
- } else {
1684
- console.warn(
1685
- chalk.yellow(
1686
- ` Warning: Dependency ${depType}/${dep} not found in core or expansion pack`,
1687
- ),
1688
- );
1689
- }
1690
- }
1691
- }
1692
- }
1693
- }
1694
- } catch (error) {
1695
- console.warn(
1696
- ` Warning: Could not parse agent dependencies: ${error.message}`,
1697
- );
1698
- }
1699
- }
1700
- }
1701
- }
1702
-
1703
- async resolveExpansionPackCoreAgents(
1704
- installDir,
1705
- expansionDotFolder,
1706
- packId,
1707
- spinner,
1708
- ) {
1709
- const yaml = require("js-yaml");
1710
- const fs = require("node:fs").promises;
1711
-
1712
- // Find all team files in the expansion pack
1713
- const teamFiles = await resourceLocator.findFiles("agent-teams/*.yaml", {
1714
- cwd: expansionDotFolder,
1715
- });
1716
-
1717
- // Also get existing agents in the expansion pack
1718
- const existingAgents = new Set();
1719
- const agentFiles = await resourceLocator.findFiles("agents/*.md", {
1720
- cwd: expansionDotFolder,
1721
- });
1722
- for (const agentFile of agentFiles) {
1723
- const agentName = path.basename(agentFile, ".md");
1724
- existingAgents.add(agentName);
1725
- }
1726
-
1727
- // Process each team file
1728
- for (const teamFile of teamFiles) {
1729
- const teamPath = path.join(expansionDotFolder, teamFile);
1730
- const teamContent = await fs.readFile(teamPath, "utf8");
1731
-
1732
- try {
1733
- const teamConfig = yaml.load(teamContent);
1734
- const agents = teamConfig.agents || [];
1735
-
1736
- // Add bmad-orchestrator if not present (required for all teams)
1737
- if (!agents.includes("bmad-orchestrator")) {
1738
- agents.unshift("bmad-orchestrator");
1739
- }
1740
-
1741
- // Check each agent in the team
1742
- for (const agentId of agents) {
1743
- if (!existingAgents.has(agentId)) {
1744
- // Agent not in expansion pack, try to get from core
1745
- const coreAgentPath = path.join(
1746
- resourceLocator.getBmadCorePath(),
1747
- "agents",
1748
- `${agentId}.md`,
1749
- );
1750
-
1751
- if (await fileManager.pathExists(coreAgentPath)) {
1752
- spinner.text = `Copying core agent ${agentId} for ${packId}...`;
1753
-
1754
- // Copy agent file with {root} replacement
1755
- const destinationPath = path.join(
1756
- expansionDotFolder,
1757
- "agents",
1758
- `${agentId}.md`,
1759
- );
1760
- await fileManager.copyFileWithRootReplacement(
1761
- coreAgentPath,
1762
- destinationPath,
1763
- `.${packId}`,
1764
- );
1765
- existingAgents.add(agentId);
1766
-
1767
- console.log(chalk.dim(` Added core agent: ${agentId}`));
1768
-
1769
- // Now resolve this agent's dependencies too
1770
- const agentContent = await fs.readFile(coreAgentPath, "utf8");
1771
- const yamlContent = extractYamlFromAgent(agentContent, true);
1772
-
1773
- if (yamlContent) {
1774
- try {
1775
- const agentConfig = yaml.load(yamlContent);
1776
- const dependencies = agentConfig.dependencies || {};
1777
-
1778
- // Copy all dependencies for this agent
1779
- for (const depType of [
1780
- "tasks",
1781
- "templates",
1782
- "checklists",
1783
- "workflows",
1784
- "utils",
1785
- "data",
1786
- ]) {
1787
- const deps = dependencies[depType] || [];
1788
-
1789
- for (const dep of deps) {
1790
- const depFileName =
1791
- dep.endsWith(".md") || dep.endsWith(".yaml")
1792
- ? dep
1793
- : depType === "templates"
1794
- ? `${dep}.yaml`
1795
- : `${dep}.md`;
1796
- const expansionDepPath = path.join(
1797
- expansionDotFolder,
1798
- depType,
1799
- depFileName,
1800
- );
1801
-
1802
- // Check if dependency exists in expansion pack
1803
- if (!(await fileManager.pathExists(expansionDepPath))) {
1804
- // Try to find it in core
1805
- const coreDepPath = path.join(
1806
- resourceLocator.getBmadCorePath(),
1807
- depType,
1808
- depFileName,
1809
- );
1810
-
1811
- if (await fileManager.pathExists(coreDepPath)) {
1812
- const destinationDepPath = path.join(
1813
- expansionDotFolder,
1814
- depType,
1815
- depFileName,
1816
- );
1817
- await fileManager.copyFileWithRootReplacement(
1818
- coreDepPath,
1819
- destinationDepPath,
1820
- `.${packId}`,
1821
- );
1822
- console.log(
1823
- chalk.dim(
1824
- ` Added agent dependency: ${depType}/${depFileName}`,
1825
- ),
1826
- );
1827
- } else {
1828
- // Try common folder
1829
- const sourceBase = path.dirname(
1830
- path.dirname(
1831
- path.dirname(path.dirname(__filename)),
1832
- ),
1833
- ); // Go up to project root
1834
- const commonDepPath = path.join(
1835
- sourceBase,
1836
- "common",
1837
- depType,
1838
- depFileName,
1839
- );
1840
- if (await fileManager.pathExists(commonDepPath)) {
1841
- const destinationDepPath = path.join(
1842
- expansionDotFolder,
1843
- depType,
1844
- depFileName,
1845
- );
1846
- await fileManager.copyFile(
1847
- commonDepPath,
1848
- destinationDepPath,
1849
- );
1850
- console.log(
1851
- chalk.dim(
1852
- ` Added agent dependency from common: ${depType}/${depFileName}`,
1853
- ),
1854
- );
1855
- }
1856
- }
1857
- }
1858
- }
1859
- }
1860
- } catch (error) {
1861
- console.warn(
1862
- ` Warning: Could not parse agent ${agentId} dependencies: ${error.message}`,
1863
- );
1864
- }
1865
- }
1866
- } else {
1867
- console.warn(
1868
- chalk.yellow(
1869
- ` Warning: Core agent ${agentId} not found for team ${path.basename(teamFile, ".yaml")}`,
1870
- ),
1871
- );
1872
- }
1873
- }
1874
- }
1875
- } catch (error) {
1876
- console.warn(
1877
- ` Warning: Could not parse team file ${teamFile}: ${error.message}`,
1878
- );
1879
- }
1880
- }
1881
- }
1882
-
1883
- getWebBundleInfo(config) {
1884
- const webBundleType = config.webBundleType || "all";
1885
-
1886
- switch (webBundleType) {
1887
- case "all": {
1888
- return "all bundles";
1889
- }
1890
- case "agents": {
1891
- return "individual agents only";
1892
- }
1893
- case "teams": {
1894
- return config.selectedWebBundleTeams
1895
- ? `teams: ${config.selectedWebBundleTeams.join(", ")}`
1896
- : "selected teams";
1897
- }
1898
- case "custom": {
1899
- const parts = [];
1900
- if (
1901
- config.selectedWebBundleTeams &&
1902
- config.selectedWebBundleTeams.length > 0
1903
- ) {
1904
- parts.push(`teams: ${config.selectedWebBundleTeams.join(", ")}`);
1905
- }
1906
- if (config.includeIndividualAgents) {
1907
- parts.push("individual agents");
1908
- }
1909
- return parts.length > 0 ? parts.join(" + ") : "custom selection";
1910
- }
1911
- default: {
1912
- return "selected bundles";
1913
- }
1914
- }
1915
- }
1916
-
1917
- async installWebBundles(webBundlesDirectory, config, spinner) {
1918
- try {
1919
- // Find the dist directory in the XiaoMa installation
1920
- const distDir = configLoader.getDistPath();
1921
-
1922
- if (!(await fileManager.pathExists(distDir))) {
1923
- console.warn(
1924
- 'Web bundles not found. Run "npm run build" to generate them.',
1925
- );
1926
- return;
1927
- }
1928
-
1929
- // Ensure web bundles directory exists
1930
- await fileManager.ensureDirectory(webBundlesDirectory);
1931
-
1932
- const webBundleType = config.webBundleType || "all";
1933
-
1934
- if (webBundleType === "all") {
1935
- // Copy the entire dist directory structure
1936
- await fileManager.copyDirectory(distDir, webBundlesDirectory);
1937
- console.log(
1938
- chalk.green(`✓ Installed all web bundles to: ${webBundlesDirectory}`),
1939
- );
1940
- } else {
1941
- let copiedCount = 0;
1942
-
1943
- // Copy specific selections based on type
1944
- if (
1945
- webBundleType === "agents" ||
1946
- (webBundleType === "custom" && config.includeIndividualAgents)
1947
- ) {
1948
- const agentsSource = path.join(distDir, "agents");
1949
- const agentsTarget = path.join(webBundlesDirectory, "agents");
1950
- if (await fileManager.pathExists(agentsSource)) {
1951
- await fileManager.copyDirectory(agentsSource, agentsTarget);
1952
- console.log(chalk.green(`✓ Copied individual agent bundles`));
1953
- copiedCount += 10; // Approximate count for agents
1954
- }
1955
- }
1956
-
1957
- if (
1958
- (webBundleType === "teams" || webBundleType === "custom") &&
1959
- config.selectedWebBundleTeams &&
1960
- config.selectedWebBundleTeams.length > 0
1961
- ) {
1962
- const teamsSource = path.join(distDir, "teams");
1963
- const teamsTarget = path.join(webBundlesDirectory, "teams");
1964
- await fileManager.ensureDirectory(teamsTarget);
1965
-
1966
- for (const teamId of config.selectedWebBundleTeams) {
1967
- const teamFile = `${teamId}.txt`;
1968
- const sourcePath = path.join(teamsSource, teamFile);
1969
- const targetPath = path.join(teamsTarget, teamFile);
1970
-
1971
- if (await fileManager.pathExists(sourcePath)) {
1972
- await fileManager.copyFile(sourcePath, targetPath);
1973
- copiedCount++;
1974
- console.log(chalk.green(`✓ Copied team bundle: ${teamId}`));
1975
- }
1976
- }
1977
- }
1978
-
1979
- // Always copy expansion packs if they exist
1980
- const expansionSource = path.join(distDir, "expansion-packs");
1981
- const expansionTarget = path.join(
1982
- webBundlesDirectory,
1983
- "expansion-packs",
1984
- );
1985
- if (await fileManager.pathExists(expansionSource)) {
1986
- await fileManager.copyDirectory(expansionSource, expansionTarget);
1987
- console.log(chalk.green(`✓ Copied expansion pack bundles`));
1988
- }
1989
-
1990
- console.log(
1991
- chalk.green(
1992
- `✓ Installed ${copiedCount} selected web bundles to: ${webBundlesDirectory}`,
1993
- ),
1994
- );
1995
- }
1996
- } catch (error) {
1997
- console.error(`Failed to install web bundles: ${error.message}`);
1998
- }
1999
- }
2000
-
2001
- async copyCommonItems(installDir, targetSubdir, spinner) {
2002
- const fs = require("node:fs").promises;
2003
- const sourceBase = path.dirname(
2004
- path.dirname(path.dirname(path.dirname(__filename))),
2005
- ); // Go up to project root
2006
- const commonPath = path.join(sourceBase, "common");
2007
- const targetPath = path.join(installDir, targetSubdir);
2008
- const copiedFiles = [];
2009
-
2010
- // Check if common/ exists
2011
- if (!(await fileManager.pathExists(commonPath))) {
2012
- console.warn("Warning: common/ folder not found");
2013
- return copiedFiles;
2014
- }
2015
-
2016
- // Copy all items from common/ to target
2017
- const commonItems = await resourceLocator.findFiles("**/*", {
2018
- cwd: commonPath,
2019
- nodir: true,
2020
- });
2021
-
2022
- for (const item of commonItems) {
2023
- const sourcePath = path.join(commonPath, item);
2024
- const destinationPath = path.join(targetPath, item);
2025
-
2026
- // Read the file content
2027
- const content = await fs.readFile(sourcePath, "utf8");
2028
-
2029
- // Replace {root} with the target subdirectory
2030
- const updatedContent = content.replaceAll("{root}", targetSubdir);
2031
-
2032
- // Ensure directory exists
2033
- await fileManager.ensureDirectory(path.dirname(destinationPath));
2034
-
2035
- // Write the updated content
2036
- await fs.writeFile(destinationPath, updatedContent, "utf8");
2037
- copiedFiles.push(path.join(targetSubdir, item));
2038
- }
2039
-
2040
- console.log(chalk.dim(` Added ${commonItems.length} common utilities`));
2041
- return copiedFiles;
2042
- }
2043
-
2044
- async copyDocsItems(installDir, targetSubdir, spinner) {
2045
- const fs = require("node:fs").promises;
2046
- const sourceBase = path.dirname(
2047
- path.dirname(path.dirname(path.dirname(__filename))),
2048
- ); // Go up to project root
2049
- const docsPath = path.join(sourceBase, "docs");
2050
- const targetPath = path.join(installDir, targetSubdir);
2051
- const copiedFiles = [];
2052
-
2053
- // Specific documentation files to copy
2054
- const documentFiles = [
2055
- "enhanced-ide-development-workflow.md",
2056
- "user-guide.md",
2057
- "working-in-the-brownfield.md",
2058
- ];
2059
-
2060
- // Check if docs/ exists
2061
- if (!(await fileManager.pathExists(docsPath))) {
2062
- console.warn("Warning: docs/ folder not found");
2063
- return copiedFiles;
2064
- }
2065
-
2066
- // Copy specific documentation files from docs/ to target
2067
- for (const documentFile of documentFiles) {
2068
- const sourcePath = path.join(docsPath, documentFile);
2069
- const destinationPath = path.join(targetPath, documentFile);
2070
-
2071
- // Check if the source file exists
2072
- if (await fileManager.pathExists(sourcePath)) {
2073
- // Read the file content
2074
- const content = await fs.readFile(sourcePath, "utf8");
2075
-
2076
- // Replace {root} with the target subdirectory
2077
- const updatedContent = content.replaceAll("{root}", targetSubdir);
2078
-
2079
- // Ensure directory exists
2080
- await fileManager.ensureDirectory(path.dirname(destinationPath));
2081
-
2082
- // Write the updated content
2083
- await fs.writeFile(destinationPath, updatedContent, "utf8");
2084
- copiedFiles.push(path.join(targetSubdir, documentFile));
2085
- }
2086
- }
2087
-
2088
- if (copiedFiles.length > 0) {
2089
- console.log(
2090
- chalk.dim(` Added ${copiedFiles.length} documentation files`),
2091
- );
2092
- }
2093
- return copiedFiles;
2094
- }
2095
-
2096
- async detectExpansionPacks(installDir) {
2097
- const expansionPacks = {};
2098
- const glob = require("glob");
2099
-
2100
- // Find all dot folders that might be expansion packs
2101
- const dotFolders = glob.sync(".*", {
2102
- cwd: installDir,
2103
- ignore: [".git", ".git/**", ".xiaoma-core", ".xiaoma-core/**"],
2104
- });
2105
-
2106
- for (const folder of dotFolders) {
2107
- const folderPath = path.join(installDir, folder);
2108
- const stats = await fileManager.pathExists(folderPath);
2109
-
2110
- if (stats) {
2111
- // Check if it has a manifest
2112
- const manifestPath = path.join(folderPath, "install-manifest.yaml");
2113
- if (await fileManager.pathExists(manifestPath)) {
2114
- const manifest = await fileManager.readExpansionPackManifest(
2115
- installDir,
2116
- folder.slice(1),
2117
- );
2118
- if (manifest) {
2119
- expansionPacks[folder.slice(1)] = {
2120
- path: folderPath,
2121
- manifest: manifest,
2122
- hasManifest: true,
2123
- };
2124
- }
2125
- } else {
2126
- // Check if it has a config.yaml (expansion pack without manifest)
2127
- const configPath = path.join(folderPath, "config.yaml");
2128
- if (await fileManager.pathExists(configPath)) {
2129
- expansionPacks[folder.slice(1)] = {
2130
- path: folderPath,
2131
- manifest: null,
2132
- hasManifest: false,
2133
- };
2134
- }
2135
- }
2136
- }
2137
- }
2138
-
2139
- return expansionPacks;
2140
- }
2141
-
2142
- async repairExpansionPack(installDir, packId, pack, integrity, spinner) {
2143
- spinner.start(`Repairing ${pack.name}...`);
2144
-
2145
- try {
2146
- const expansionDotFolder = path.join(installDir, `.${packId}`);
2147
-
2148
- // Back up modified files
2149
- if (integrity.modified.length > 0) {
2150
- spinner.text = "Backing up modified files...";
2151
- for (const file of integrity.modified) {
2152
- const filePath = path.join(installDir, file);
2153
- if (await fileManager.pathExists(filePath)) {
2154
- const backupPath = await fileManager.backupFile(filePath);
2155
- console.log(
2156
- chalk.dim(` Backed up: ${file} → ${path.basename(backupPath)}`),
2157
- );
2158
- }
2159
- }
2160
- }
2161
-
2162
- // Restore missing and modified files
2163
- spinner.text = "Restoring files...";
2164
- const filesToRestore = [...integrity.missing, ...integrity.modified];
2165
-
2166
- for (const file of filesToRestore) {
2167
- // Skip the manifest file itself
2168
- if (file.endsWith("install-manifest.yaml")) continue;
2169
-
2170
- const relativePath = file.replace(`.${packId}/`, "");
2171
- const sourcePath = path.join(pack.path, relativePath);
2172
- const destinationPath = path.join(installDir, file);
2173
-
2174
- // Check if this is a common/ file that needs special processing
2175
- const commonBase = path.dirname(
2176
- path.dirname(path.dirname(path.dirname(__filename))),
2177
- );
2178
- const commonSourcePath = path.join(commonBase, "common", relativePath);
2179
-
2180
- if (await fileManager.pathExists(commonSourcePath)) {
2181
- // This is a common/ file - needs template processing
2182
- const fs = require("node:fs").promises;
2183
- const content = await fs.readFile(commonSourcePath, "utf8");
2184
- const updatedContent = content.replaceAll("{root}", `.${packId}`);
2185
- await fileManager.ensureDirectory(path.dirname(destinationPath));
2186
- await fs.writeFile(destinationPath, updatedContent, "utf8");
2187
- spinner.text = `Restored: ${file}`;
2188
- } else if (await fileManager.pathExists(sourcePath)) {
2189
- // Regular file from expansion pack
2190
- await fileManager.copyFile(sourcePath, destinationPath);
2191
- spinner.text = `Restored: ${file}`;
2192
- } else {
2193
- console.warn(
2194
- chalk.yellow(` Warning: Source file not found: ${file}`),
2195
- );
2196
- }
2197
- }
2198
-
2199
- spinner.succeed(`${pack.name} repaired successfully!`);
2200
-
2201
- // Show summary
2202
- console.log(chalk.green(`\n✓ ${pack.name} repaired!`));
2203
- if (integrity.missing.length > 0) {
2204
- console.log(
2205
- chalk.green(` Restored ${integrity.missing.length} missing files`),
2206
- );
2207
- }
2208
- if (integrity.modified.length > 0) {
2209
- console.log(
2210
- chalk.green(
2211
- ` Restored ${integrity.modified.length} modified files (backups created)`,
2212
- ),
2213
- );
2214
- }
2215
- } catch (error) {
2216
- if (spinner) spinner.fail(`Failed to repair ${pack.name}`);
2217
- console.error(`Error: ${error.message}`);
2218
- }
2219
- }
2220
-
2221
- compareVersions(v1, v2) {
2222
- // Simple semver comparison
2223
- const parts1 = v1.split(".").map(Number);
2224
- const parts2 = v2.split(".").map(Number);
2225
-
2226
- for (let index = 0; index < 3; index++) {
2227
- const part1 = parts1[index] || 0;
2228
- const part2 = parts2[index] || 0;
2229
-
2230
- if (part1 > part2) return 1;
2231
- if (part1 < part2) return -1;
2232
- }
2233
-
2234
- return 0;
2235
- }
2236
-
2237
- async cleanupLegacyYmlFiles(installDir, spinner) {
2238
- const glob = require("glob");
2239
- const fs = require("node:fs").promises;
2240
-
2241
- try {
2242
- // Find all .yml files in the installation directory
2243
- const ymlFiles = glob.sync("**/*.yml", {
2244
- cwd: installDir,
2245
- ignore: ["**/node_modules/**", "**/.git/**"],
2246
- });
2247
-
2248
- let deletedCount = 0;
2249
-
2250
- for (const ymlFile of ymlFiles) {
2251
- // Check if corresponding .yaml file exists
2252
- const yamlFile = ymlFile.replace(/\.yml$/, ".yaml");
2253
- const ymlPath = path.join(installDir, ymlFile);
2254
- const yamlPath = path.join(installDir, yamlFile);
2255
-
2256
- if (await fileManager.pathExists(yamlPath)) {
2257
- // .yaml counterpart exists, delete the .yml file
2258
- await fs.unlink(ymlPath);
2259
- deletedCount++;
2260
- console.log(
2261
- chalk.dim(` Removed legacy: ${ymlFile} (replaced by ${yamlFile})`),
2262
- );
2263
- }
2264
- }
2265
-
2266
- if (deletedCount > 0) {
2267
- console.log(
2268
- chalk.green(`✓ Cleaned up ${deletedCount} legacy .yml files`),
2269
- );
2270
- }
2271
- } catch (error) {
2272
- console.warn(
2273
- `Warning: Could not cleanup legacy .yml files: ${error.message}`,
2274
- );
2275
- }
2276
- }
2277
-
2278
- async findInstallation() {
2279
- // Look for .xiaoma-core in current directory or parent directories
2280
- let currentDir = process.cwd();
2281
-
2282
- while (currentDir !== path.dirname(currentDir)) {
2283
- const bmadDir = path.join(currentDir, ".xiaoma-core");
2284
- const manifestPath = path.join(bmadDir, "install-manifest.yaml");
2285
-
2286
- if (await fileManager.pathExists(manifestPath)) {
2287
- return currentDir; // Return parent directory, not .xiaoma-core itself
2288
- }
2289
-
2290
- currentDir = path.dirname(currentDir);
2291
- }
2292
-
2293
- // Also check if we're inside a .xiaoma-core directory
2294
- if (path.basename(process.cwd()) === ".xiaoma-core") {
2295
- const manifestPath = path.join(process.cwd(), "install-manifest.yaml");
2296
- if (await fileManager.pathExists(manifestPath)) {
2297
- return path.dirname(process.cwd()); // Return parent directory
2298
- }
2299
- }
2300
-
2301
- return null;
2302
- }
2303
-
2304
- async flatten(options) {
2305
- const { spawn } = require("node:child_process");
2306
- const flattenerPath = path.join(
2307
- __dirname,
2308
- "..",
2309
- "..",
2310
- "flattener",
2311
- "main.js",
2312
- );
2313
-
2314
- const arguments_ = [];
2315
- if (options.input) {
2316
- arguments_.push("--input", options.input);
2317
- }
2318
- if (options.output) {
2319
- arguments_.push("--output", options.output);
2320
- }
2321
-
2322
- const child = spawn("node", [flattenerPath, ...arguments_], {
2323
- stdio: "inherit",
2324
- cwd: process.cwd(),
2325
- });
2326
-
2327
- child.on("exit", (code) => {
2328
- process.exit(code);
2329
- });
2330
- }
2331
- }
2332
-
2333
- module.exports = new Installer();