@zeyue0329/xiaoma-cli 1.0.7 → 1.0.10

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 (321) hide show
  1. package/.github/FORK_GUIDE.md +106 -0
  2. package/.github/FUNDING.yaml +15 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. package/.github/workflows/discord.yaml +26 -0
  6. package/.github/workflows/format-check.yaml +44 -0
  7. package/.github/workflows/manual-release.yaml +174 -0
  8. package/.github/workflows/pr-validation.yaml +55 -0
  9. package/.husky/pre-commit +3 -0
  10. package/.vscode/settings.json +26 -1
  11. package/CHANGELOG.md +686 -0
  12. package/CONTRIBUTING.md +250 -0
  13. package/LICENSE +6 -1
  14. package/common/tasks/create-doc.md +2 -0
  15. package/common/tasks/execute-checklist.md +2 -7
  16. package/common/utils/bmad-doc-template.md +7 -5
  17. package/common/utils/workflow-management.md +2 -0
  18. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +2103 -0
  19. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +1627 -0
  20. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +822 -0
  21. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +8486 -0
  22. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +3210 -0
  23. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +3244 -0
  24. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +317 -0
  25. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +982 -0
  26. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +12854 -0
  27. package/dist/expansion-packs/bmad-creative-writing/agents/beta-reader.txt +921 -0
  28. package/dist/expansion-packs/bmad-creative-writing/agents/book-critic.txt +81 -0
  29. package/dist/expansion-packs/bmad-creative-writing/agents/character-psychologist.txt +886 -0
  30. package/dist/expansion-packs/bmad-creative-writing/agents/cover-designer.txt +85 -0
  31. package/dist/expansion-packs/bmad-creative-writing/agents/dialog-specialist.txt +903 -0
  32. package/dist/expansion-packs/bmad-creative-writing/agents/editor.txt +837 -0
  33. package/dist/expansion-packs/bmad-creative-writing/agents/genre-specialist.txt +989 -0
  34. package/dist/expansion-packs/bmad-creative-writing/agents/narrative-designer.txt +888 -0
  35. package/dist/expansion-packs/bmad-creative-writing/agents/plot-architect.txt +1173 -0
  36. package/dist/expansion-packs/bmad-creative-writing/agents/world-builder.txt +914 -0
  37. package/dist/expansion-packs/bmad-creative-writing/teams/agent-team.txt +6071 -0
  38. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +2079 -0
  39. package/docs/GUIDING-PRINCIPLES.md +91 -0
  40. package/docs/core-architecture.md +219 -0
  41. package/docs/enhanced-ide-development-workflow.md +248 -0
  42. package/docs/expansion-packs.md +200 -0
  43. package/docs/how-to-contribute-with-pull-requests.md +158 -0
  44. package/docs/user-guide.md +530 -0
  45. package/docs/versioning-and-releases.md +155 -0
  46. package/docs/versions.md +48 -0
  47. package/docs/working-in-the-brownfield.md +597 -0
  48. package/eslint.config.mjs +119 -0
  49. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +14 -0
  50. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +73 -0
  51. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +80 -0
  52. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +66 -0
  53. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +203 -0
  54. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +162 -0
  55. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +9 -0
  56. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +252 -0
  57. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +649 -0
  58. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +112 -0
  59. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +218 -0
  60. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +292 -0
  61. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +614 -0
  62. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +357 -0
  63. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +344 -0
  64. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +254 -0
  65. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +485 -0
  66. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +184 -0
  67. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +176 -0
  68. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +15 -0
  69. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +82 -0
  70. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +79 -0
  71. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +80 -0
  72. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +67 -0
  73. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +393 -0
  74. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +205 -0
  75. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +203 -0
  76. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +126 -0
  77. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +7 -0
  78. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +771 -0
  79. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +588 -0
  80. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +112 -0
  81. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +143 -0
  82. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +186 -0
  83. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +292 -0
  84. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +202 -0
  85. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +1031 -0
  86. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +357 -0
  87. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +706 -0
  88. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +257 -0
  89. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +485 -0
  90. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +184 -0
  91. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +176 -0
  92. package/expansion-packs/bmad-creative-writing/README.md +146 -0
  93. package/expansion-packs/bmad-creative-writing/agent-teams/agent-team.yaml +20 -0
  94. package/expansion-packs/bmad-creative-writing/agents/beta-reader.md +94 -0
  95. package/expansion-packs/bmad-creative-writing/agents/book-critic.md +40 -0
  96. package/expansion-packs/bmad-creative-writing/agents/character-psychologist.md +93 -0
  97. package/expansion-packs/bmad-creative-writing/agents/cover-designer.md +46 -0
  98. package/expansion-packs/bmad-creative-writing/agents/dialog-specialist.md +92 -0
  99. package/expansion-packs/bmad-creative-writing/agents/editor.md +93 -0
  100. package/expansion-packs/bmad-creative-writing/agents/genre-specialist.md +95 -0
  101. package/expansion-packs/bmad-creative-writing/agents/narrative-designer.md +93 -0
  102. package/expansion-packs/bmad-creative-writing/agents/plot-architect.md +95 -0
  103. package/expansion-packs/bmad-creative-writing/agents/world-builder.md +94 -0
  104. package/expansion-packs/bmad-creative-writing/checklists/beta-feedback-closure-checklist.md +23 -0
  105. package/expansion-packs/bmad-creative-writing/checklists/character-consistency-checklist.md +23 -0
  106. package/expansion-packs/bmad-creative-writing/checklists/comedic-timing-checklist.md +23 -0
  107. package/expansion-packs/bmad-creative-writing/checklists/cyberpunk-aesthetic-checklist.md +23 -0
  108. package/expansion-packs/bmad-creative-writing/checklists/ebook-formatting-checklist.md +21 -0
  109. package/expansion-packs/bmad-creative-writing/checklists/epic-poetry-meter-checklist.md +23 -0
  110. package/expansion-packs/bmad-creative-writing/checklists/fantasy-magic-system-checklist.md +23 -0
  111. package/expansion-packs/bmad-creative-writing/checklists/foreshadowing-payoff-checklist.md +22 -0
  112. package/expansion-packs/bmad-creative-writing/checklists/genre-tropes-checklist.md +22 -0
  113. package/expansion-packs/bmad-creative-writing/checklists/historical-accuracy-checklist.md +23 -0
  114. package/expansion-packs/bmad-creative-writing/checklists/horror-suspense-checklist.md +23 -0
  115. package/expansion-packs/bmad-creative-writing/checklists/kdp-cover-ready-checklist.md +25 -0
  116. package/expansion-packs/bmad-creative-writing/checklists/line-edit-quality-checklist.md +23 -0
  117. package/expansion-packs/bmad-creative-writing/checklists/marketing-copy-checklist.md +23 -0
  118. package/expansion-packs/bmad-creative-writing/checklists/mystery-clue-trail-checklist.md +23 -0
  119. package/expansion-packs/bmad-creative-writing/checklists/orbital-mechanics-checklist.md +23 -0
  120. package/expansion-packs/bmad-creative-writing/checklists/plot-structure-checklist.md +59 -0
  121. package/expansion-packs/bmad-creative-writing/checklists/publication-readiness-checklist.md +23 -0
  122. package/expansion-packs/bmad-creative-writing/checklists/romance-emotional-beats-checklist.md +23 -0
  123. package/expansion-packs/bmad-creative-writing/checklists/scene-quality-checklist.md +23 -0
  124. package/expansion-packs/bmad-creative-writing/checklists/scifi-technology-plausibility-checklist.md +22 -0
  125. package/expansion-packs/bmad-creative-writing/checklists/sensitivity-representation-checklist.md +23 -0
  126. package/expansion-packs/bmad-creative-writing/checklists/steampunk-gadget-checklist.md +23 -0
  127. package/expansion-packs/bmad-creative-writing/checklists/thriller-pacing-stakes-checklist.md +23 -0
  128. package/expansion-packs/bmad-creative-writing/checklists/timeline-continuity-checklist.md +23 -0
  129. package/expansion-packs/bmad-creative-writing/checklists/world-building-continuity-checklist.md +23 -0
  130. package/expansion-packs/bmad-creative-writing/checklists/ya-appropriateness-checklist.md +23 -0
  131. package/expansion-packs/bmad-creative-writing/config.yaml +12 -0
  132. package/expansion-packs/bmad-creative-writing/data/bmad-kb.md +209 -0
  133. package/expansion-packs/bmad-creative-writing/data/story-structures.md +67 -0
  134. package/expansion-packs/bmad-creative-writing/docs/brief.md +212 -0
  135. package/expansion-packs/bmad-creative-writing/tasks/advanced-elicitation.md +119 -0
  136. package/expansion-packs/bmad-creative-writing/tasks/analyze-reader-feedback.md +23 -0
  137. package/expansion-packs/bmad-creative-writing/tasks/analyze-story-structure.md +67 -0
  138. package/expansion-packs/bmad-creative-writing/tasks/assemble-kdp-package.md +29 -0
  139. package/expansion-packs/bmad-creative-writing/tasks/brainstorm-premise.md +23 -0
  140. package/expansion-packs/bmad-creative-writing/tasks/build-world.md +24 -0
  141. package/expansion-packs/bmad-creative-writing/tasks/character-depth-pass.md +22 -0
  142. package/expansion-packs/bmad-creative-writing/tasks/create-doc.md +103 -0
  143. package/expansion-packs/bmad-creative-writing/tasks/create-draft-section.md +26 -0
  144. package/expansion-packs/bmad-creative-writing/tasks/critical-review.md +26 -0
  145. package/expansion-packs/bmad-creative-writing/tasks/develop-character.md +24 -0
  146. package/expansion-packs/bmad-creative-writing/tasks/execute-checklist.md +88 -0
  147. package/expansion-packs/bmad-creative-writing/tasks/expand-premise.md +23 -0
  148. package/expansion-packs/bmad-creative-writing/tasks/expand-synopsis.md +23 -0
  149. package/expansion-packs/bmad-creative-writing/tasks/final-polish.md +23 -0
  150. package/expansion-packs/bmad-creative-writing/tasks/generate-cover-brief.md +25 -0
  151. package/expansion-packs/bmad-creative-writing/tasks/generate-cover-prompts.md +26 -0
  152. package/expansion-packs/bmad-creative-writing/tasks/generate-scene-list.md +23 -0
  153. package/expansion-packs/bmad-creative-writing/tasks/incorporate-feedback.md +25 -0
  154. package/expansion-packs/bmad-creative-writing/tasks/outline-scenes.md +23 -0
  155. package/expansion-packs/bmad-creative-writing/tasks/provide-feedback.md +24 -0
  156. package/expansion-packs/bmad-creative-writing/tasks/publish-chapter.md +23 -0
  157. package/expansion-packs/bmad-creative-writing/tasks/quick-feedback.md +22 -0
  158. package/expansion-packs/bmad-creative-writing/tasks/select-next-arc.md +23 -0
  159. package/expansion-packs/bmad-creative-writing/tasks/workshop-dialog.md +64 -0
  160. package/expansion-packs/bmad-creative-writing/templates/beta-feedback-form.yaml +97 -0
  161. package/expansion-packs/bmad-creative-writing/templates/chapter-draft-tmpl.yaml +82 -0
  162. package/expansion-packs/bmad-creative-writing/templates/character-profile-tmpl.yaml +92 -0
  163. package/expansion-packs/bmad-creative-writing/templates/cover-design-brief-tmpl.yaml +98 -0
  164. package/expansion-packs/bmad-creative-writing/templates/premise-brief-tmpl.yaml +78 -0
  165. package/expansion-packs/bmad-creative-writing/templates/scene-list-tmpl.yaml +55 -0
  166. package/expansion-packs/bmad-creative-writing/templates/story-outline-tmpl.yaml +96 -0
  167. package/expansion-packs/bmad-creative-writing/templates/world-guide-tmpl.yaml +89 -0
  168. package/expansion-packs/bmad-creative-writing/workflows/book-cover-design-workflow.md +218 -0
  169. package/expansion-packs/bmad-creative-writing/workflows/novel-greenfield-workflow.yaml +56 -0
  170. package/expansion-packs/bmad-creative-writing/workflows/novel-serial-workflow.yaml +50 -0
  171. package/expansion-packs/bmad-creative-writing/workflows/novel-snowflake-workflow.yaml +69 -0
  172. package/expansion-packs/bmad-creative-writing/workflows/novel-writing.yaml +91 -0
  173. package/expansion-packs/bmad-creative-writing/workflows/screenplay-development.yaml +85 -0
  174. package/expansion-packs/bmad-creative-writing/workflows/series-planning.yaml +78 -0
  175. package/expansion-packs/bmad-creative-writing/workflows/short-story-creation.yaml +64 -0
  176. package/expansion-packs/bmad-infrastructure-devops/README.md +147 -0
  177. package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +73 -0
  178. package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +486 -0
  179. package/expansion-packs/bmad-infrastructure-devops/config.yaml +10 -0
  180. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +307 -0
  181. package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +161 -0
  182. package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +155 -0
  183. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +425 -0
  184. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +630 -0
  185. package/implement-fork-friendly-ci.sh +229 -0
  186. package/package.json +75 -45
  187. package/prettier.config.mjs +32 -0
  188. package/test.md +1 -0
  189. package/tools/builders/web-builder.js +143 -149
  190. package/tools/bump-all-versions.js +42 -33
  191. package/tools/bump-expansion-version.js +23 -16
  192. package/tools/cli.js +15 -15
  193. package/tools/flattener/aggregate.js +76 -0
  194. package/tools/flattener/binary.js +80 -0
  195. package/tools/flattener/discovery.js +71 -0
  196. package/tools/flattener/files.js +35 -0
  197. package/tools/flattener/ignoreRules.js +176 -0
  198. package/tools/flattener/main.js +458 -460
  199. package/tools/flattener/projectRoot.js +206 -0
  200. package/tools/flattener/prompts.js +44 -0
  201. package/tools/flattener/stats.helpers.js +395 -0
  202. package/tools/flattener/stats.js +80 -0
  203. package/tools/flattener/test-matrix.js +413 -0
  204. package/tools/flattener/xml.js +88 -0
  205. package/tools/installer/README.md +1 -1
  206. package/tools/installer/bin/xiaoma.js +392 -99
  207. package/tools/installer/config/ide-agent-config.yaml +1 -1
  208. package/tools/installer/config/install.config.yaml +60 -9
  209. package/tools/installer/lib/config-loader.js +55 -51
  210. package/tools/installer/lib/file-manager.js +92 -114
  211. package/tools/installer/lib/ide-base-setup.js +57 -56
  212. package/tools/installer/lib/ide-setup.js +821 -414
  213. package/tools/installer/lib/installer.js +924 -696
  214. package/tools/installer/lib/memory-profiler.js +54 -53
  215. package/tools/installer/lib/module-manager.js +19 -15
  216. package/tools/installer/lib/resource-locator.js +31 -33
  217. package/tools/installer/package.json +24 -23
  218. package/tools/lib/dependency-resolver.js +39 -43
  219. package/tools/lib/yaml-utils.js +7 -7
  220. package/tools/md-assets/web-agent-startup-instructions.md +6 -6
  221. package/tools/preview-release-notes.js +66 -0
  222. package/tools/setup-hooks.sh +37 -0
  223. package/tools/shared/bannerArt.js +105 -0
  224. package/tools/sync-installer-version.js +7 -9
  225. package/tools/sync-version.sh +23 -0
  226. package/tools/update-expansion-version.js +14 -15
  227. package/tools/upgraders/v3-to-v4-upgrader.js +203 -294
  228. package/tools/version-bump.js +41 -26
  229. package/tools/xiaoma-npx-wrapper.js +14 -14
  230. package/tools/yaml-format.js +56 -43
  231. package/xiaoma-core/agent-teams/team-all.yaml +3 -2
  232. package/xiaoma-core/agent-teams/team-fullstack.yaml +2 -1
  233. package/xiaoma-core/agent-teams/team-ide-minimal.yaml +1 -0
  234. package/xiaoma-core/agent-teams/team-no-ui.yaml +2 -1
  235. package/xiaoma-core/agents/analyst.md +20 -17
  236. package/xiaoma-core/agents/architect.md +15 -14
  237. package/xiaoma-core/agents/{xiaoma-master.md → bmad-master.md} +29 -27
  238. package/xiaoma-core/agents/{xiaoma-orchestrator.md → bmad-orchestrator.md} +36 -39
  239. package/xiaoma-core/agents/dev.md +23 -18
  240. package/xiaoma-core/agents/pm.md +18 -15
  241. package/xiaoma-core/agents/po.md +13 -10
  242. package/xiaoma-core/agents/qa.md +46 -24
  243. package/xiaoma-core/agents/sm.md +11 -8
  244. package/xiaoma-core/agents/ux-expert.md +10 -7
  245. package/xiaoma-core/checklists/architect-checklist.md +2 -5
  246. package/xiaoma-core/checklists/change-checklist.md +4 -2
  247. package/xiaoma-core/checklists/pm-checklist.md +2 -5
  248. package/xiaoma-core/checklists/po-master-checklist.md +2 -9
  249. package/xiaoma-core/checklists/story-dod-checklist.md +2 -7
  250. package/xiaoma-core/checklists/story-draft-checklist.md +2 -3
  251. package/xiaoma-core/core-config.yaml +4 -1
  252. package/xiaoma-core/data/{xiaoma-kb.md → bmad-kb.md} +48 -42
  253. package/xiaoma-core/data/brainstorming-techniques.md +2 -0
  254. package/xiaoma-core/data/elicitation-methods.md +22 -0
  255. package/xiaoma-core/data/technical-preferences.md +2 -0
  256. package/xiaoma-core/data/test-levels-framework.md +148 -0
  257. package/xiaoma-core/data/test-priorities-matrix.md +174 -0
  258. package/xiaoma-core/tasks/advanced-elicitation.md +2 -0
  259. package/xiaoma-core/tasks/apply-qa-fixes.md +150 -0
  260. package/xiaoma-core/tasks/brownfield-create-epic.md +2 -0
  261. package/xiaoma-core/tasks/brownfield-create-story.md +2 -0
  262. package/xiaoma-core/tasks/correct-course.md +2 -0
  263. package/xiaoma-core/tasks/create-brownfield-story.md +14 -4
  264. package/xiaoma-core/tasks/create-deep-research-prompt.md +2 -11
  265. package/xiaoma-core/tasks/create-next-story.md +3 -1
  266. package/xiaoma-core/tasks/document-project.md +17 -13
  267. package/xiaoma-core/tasks/facilitate-brainstorming-session.md +5 -3
  268. package/xiaoma-core/tasks/generate-ai-frontend-prompt.md +2 -0
  269. package/xiaoma-core/tasks/index-docs.md +2 -6
  270. package/xiaoma-core/tasks/kb-mode-interaction.md +17 -15
  271. package/xiaoma-core/tasks/nfr-assess.md +345 -0
  272. package/xiaoma-core/tasks/qa-gate.md +163 -0
  273. package/xiaoma-core/tasks/review-story.md +245 -74
  274. package/xiaoma-core/tasks/risk-profile.md +355 -0
  275. package/xiaoma-core/tasks/shard-doc.md +2 -2
  276. package/xiaoma-core/tasks/test-design.md +176 -0
  277. package/xiaoma-core/tasks/trace-requirements.md +266 -0
  278. package/xiaoma-core/tasks/validate-next-story.md +5 -3
  279. package/xiaoma-core/templates/architecture-tmpl.yaml +50 -49
  280. package/xiaoma-core/templates/brainstorming-output-tmpl.yaml +5 -5
  281. package/xiaoma-core/templates/brownfield-architecture-tmpl.yaml +32 -31
  282. package/xiaoma-core/templates/brownfield-prd-tmpl.yaml +14 -13
  283. package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +20 -6
  284. package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +22 -9
  285. package/xiaoma-core/templates/front-end-spec-tmpl.yaml +25 -24
  286. package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +123 -104
  287. package/xiaoma-core/templates/market-research-tmpl.yaml +3 -2
  288. package/xiaoma-core/templates/prd-tmpl.yaml +10 -9
  289. package/xiaoma-core/templates/project-brief-tmpl.yaml +5 -4
  290. package/xiaoma-core/templates/qa-gate-tmpl.yaml +103 -0
  291. package/xiaoma-core/templates/story-tmpl.yaml +13 -12
  292. package/xiaoma-core/workflows/brownfield-fullstack.yaml +13 -12
  293. package/xiaoma-core/workflows/brownfield-service.yaml +5 -4
  294. package/xiaoma-core/workflows/brownfield-ui.yaml +5 -4
  295. package/xiaoma-core/workflows/greenfield-fullstack.yaml +7 -6
  296. package/xiaoma-core/workflows/greenfield-service.yaml +5 -4
  297. package/xiaoma-core/workflows/greenfield-ui.yaml +6 -5
  298. package/.releaserc.json +0 -18
  299. package/README.md +0 -532
  300. package/dist/agents/analyst.txt +0 -2882
  301. package/dist/agents/architect.txt +0 -3543
  302. package/dist/agents/dev.txt +0 -428
  303. package/dist/agents/pm.txt +0 -2229
  304. package/dist/agents/po.txt +0 -1364
  305. package/dist/agents/qa.txt +0 -386
  306. package/dist/agents/sm.txt +0 -668
  307. package/dist/agents/ux-expert.txt +0 -701
  308. package/dist/agents/xiaoma-master.txt +0 -8756
  309. package/dist/agents/xiaoma-orchestrator.txt +0 -1490
  310. package/dist/teams/team-all.txt +0 -11062
  311. package/dist/teams/team-fullstack.txt +0 -10392
  312. package/dist/teams/team-ide-minimal.txt +0 -3507
  313. package/dist/teams/team-no-ui.txt +0 -8951
  314. package/docs/quick-start.md +0 -179
  315. package/tools/bmad-npx-wrapper.js +0 -39
  316. package/tools/installer/package-lock.json +0 -704
  317. package/tools/semantic-release-sync-installer.js +0 -30
  318. package/xiaoma-core/bmad-core/user-guide.md +0 -0
  319. package/xiaoma-core/enhanced-ide-development-workflow.md +0 -43
  320. package/xiaoma-core/user-guide.md +0 -251
  321. package/xiaoma-core/working-in-the-brownfield.md +0 -364
@@ -1,32 +1,24 @@
1
- const fs = require("fs-extra");
2
- const path = require("path");
3
- const crypto = require("crypto");
4
- const yaml = require("js-yaml");
5
- const chalk = require("chalk");
6
- const { createReadStream, createWriteStream, promises: fsPromises } = require('fs');
7
- const { pipeline } = require('stream/promises');
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const crypto = require('node:crypto');
4
+ const yaml = require('js-yaml');
5
+ const chalk = require('chalk');
6
+ const { createReadStream, createWriteStream, promises: fsPromises } = require('node:fs');
7
+ const { pipeline } = require('node:stream/promises');
8
8
  const resourceLocator = require('./resource-locator');
9
9
 
10
10
  class FileManager {
11
- constructor() {
12
- this.manifestDir = ".xiaoma-core";
13
- this.manifestFile = "install-manifest.yaml";
14
- }
11
+ constructor() {}
15
12
 
16
13
  async copyFile(source, destination) {
17
14
  try {
18
15
  await fs.ensureDir(path.dirname(destination));
19
-
16
+
20
17
  // Use streaming for large files (> 10MB)
21
18
  const stats = await fs.stat(source);
22
- if (stats.size > 10 * 1024 * 1024) {
23
- await pipeline(
24
- createReadStream(source),
25
- createWriteStream(destination)
26
- );
27
- } else {
28
- await fs.copy(source, destination);
29
- }
19
+ await (stats.size > 10 * 1024 * 1024
20
+ ? pipeline(createReadStream(source), createWriteStream(destination))
21
+ : fs.copy(source, destination));
30
22
  return true;
31
23
  } catch (error) {
32
24
  console.error(chalk.red(`Failed to copy ${source}:`), error.message);
@@ -37,32 +29,24 @@ class FileManager {
37
29
  async copyDirectory(source, destination) {
38
30
  try {
39
31
  await fs.ensureDir(destination);
40
-
32
+
41
33
  // Use streaming copy for large directories
42
34
  const files = await resourceLocator.findFiles('**/*', {
43
35
  cwd: source,
44
- nodir: true
36
+ nodir: true,
45
37
  });
46
-
38
+
47
39
  // Process files in batches to avoid memory issues
48
40
  const batchSize = 50;
49
- for (let i = 0; i < files.length; i += batchSize) {
50
- const batch = files.slice(i, i + batchSize);
41
+ for (let index = 0; index < files.length; index += batchSize) {
42
+ const batch = files.slice(index, index + batchSize);
51
43
  await Promise.all(
52
- batch.map(file =>
53
- this.copyFile(
54
- path.join(source, file),
55
- path.join(destination, file)
56
- )
57
- )
44
+ batch.map((file) => this.copyFile(path.join(source, file), path.join(destination, file))),
58
45
  );
59
46
  }
60
47
  return true;
61
48
  } catch (error) {
62
- console.error(
63
- chalk.red(`Failed to copy directory ${source}:`),
64
- error.message
65
- );
49
+ console.error(chalk.red(`Failed to copy directory ${source}:`), error.message);
66
50
  return false;
67
51
  }
68
52
  }
@@ -73,17 +57,16 @@ class FileManager {
73
57
 
74
58
  for (const file of files) {
75
59
  const sourcePath = path.join(sourceDir, file);
76
- const destPath = path.join(destDir, file);
60
+ const destinationPath = path.join(destDir, file);
77
61
 
78
62
  // Use root replacement if rootValue is provided and file needs it
79
- const needsRootReplacement = rootValue && (file.endsWith('.md') || file.endsWith('.yaml') || file.endsWith('.yml'));
80
-
63
+ const needsRootReplacement =
64
+ rootValue && (file.endsWith('.md') || file.endsWith('.yaml') || file.endsWith('.yml'));
65
+
81
66
  let success = false;
82
- if (needsRootReplacement) {
83
- success = await this.copyFileWithRootReplacement(sourcePath, destPath, rootValue);
84
- } else {
85
- success = await this.copyFile(sourcePath, destPath);
86
- }
67
+ success = await (needsRootReplacement
68
+ ? this.copyFileWithRootReplacement(sourcePath, destinationPath, rootValue)
69
+ : this.copyFile(sourcePath, destinationPath));
87
70
 
88
71
  if (success) {
89
72
  copied.push(file);
@@ -97,32 +80,28 @@ class FileManager {
97
80
  try {
98
81
  // Use streaming for hash calculation to reduce memory usage
99
82
  const stream = createReadStream(filePath);
100
- const hash = crypto.createHash("sha256");
101
-
83
+ const hash = crypto.createHash('sha256');
84
+
102
85
  for await (const chunk of stream) {
103
86
  hash.update(chunk);
104
87
  }
105
-
106
- return hash.digest("hex").slice(0, 16);
107
- } catch (error) {
88
+
89
+ return hash.digest('hex').slice(0, 16);
90
+ } catch {
108
91
  return null;
109
92
  }
110
93
  }
111
94
 
112
95
  async createManifest(installDir, config, files) {
113
- const manifestPath = path.join(
114
- installDir,
115
- this.manifestDir,
116
- this.manifestFile
117
- );
96
+ const manifestPath = path.join(installDir, this.manifestDir, this.manifestFile);
118
97
 
119
98
  // Read version from package.json
120
- let coreVersion = "unknown";
99
+ let coreVersion = 'unknown';
121
100
  try {
122
101
  const packagePath = path.join(__dirname, '..', '..', '..', 'package.json');
123
102
  const packageJson = require(packagePath);
124
103
  coreVersion = packageJson.version;
125
- } catch (error) {
104
+ } catch {
126
105
  console.warn("Could not read version from package.json, using 'unknown'");
127
106
  }
128
107
 
@@ -156,31 +135,23 @@ class FileManager {
156
135
  }
157
136
 
158
137
  async readManifest(installDir) {
159
- const manifestPath = path.join(
160
- installDir,
161
- this.manifestDir,
162
- this.manifestFile
163
- );
138
+ const manifestPath = path.join(installDir, this.manifestDir, this.manifestFile);
164
139
 
165
140
  try {
166
- const content = await fs.readFile(manifestPath, "utf8");
141
+ const content = await fs.readFile(manifestPath, 'utf8');
167
142
  return yaml.load(content);
168
- } catch (error) {
143
+ } catch {
169
144
  return null;
170
145
  }
171
146
  }
172
147
 
173
148
  async readExpansionPackManifest(installDir, packId) {
174
- const manifestPath = path.join(
175
- installDir,
176
- `.${packId}`,
177
- this.manifestFile
178
- );
149
+ const manifestPath = path.join(installDir, `.${packId}`, this.manifestFile);
179
150
 
180
151
  try {
181
- const content = await fs.readFile(manifestPath, "utf8");
152
+ const content = await fs.readFile(manifestPath, 'utf8');
182
153
  return yaml.load(content);
183
- } catch (error) {
154
+ } catch {
184
155
  return null;
185
156
  }
186
157
  }
@@ -203,24 +174,24 @@ class FileManager {
203
174
  async checkFileIntegrity(installDir, manifest) {
204
175
  const result = {
205
176
  missing: [],
206
- modified: []
177
+ modified: [],
207
178
  };
208
179
 
209
180
  for (const file of manifest.files) {
210
181
  const filePath = path.join(installDir, file.path);
211
-
182
+
212
183
  // Skip checking the manifest file itself - it will always be different due to timestamps
213
184
  if (file.path.endsWith('install-manifest.yaml')) {
214
185
  continue;
215
186
  }
216
-
217
- if (!(await this.pathExists(filePath))) {
218
- result.missing.push(file.path);
219
- } else {
187
+
188
+ if (await this.pathExists(filePath)) {
220
189
  const currentHash = await this.calculateFileHash(filePath);
221
190
  if (currentHash && currentHash !== file.hash) {
222
191
  result.modified.push(file.path);
223
192
  }
193
+ } else {
194
+ result.missing.push(file.path);
224
195
  }
225
196
  }
226
197
 
@@ -228,7 +199,7 @@ class FileManager {
228
199
  }
229
200
 
230
201
  async backupFile(filePath) {
231
- const backupPath = filePath + ".bak";
202
+ const backupPath = filePath + '.bak';
232
203
  let counter = 1;
233
204
  let finalBackupPath = backupPath;
234
205
 
@@ -256,7 +227,7 @@ class FileManager {
256
227
  }
257
228
 
258
229
  async readFile(filePath) {
259
- return fs.readFile(filePath, "utf8");
230
+ return fs.readFile(filePath, 'utf8');
260
231
  }
261
232
 
262
233
  async writeFile(filePath, content) {
@@ -269,14 +240,10 @@ class FileManager {
269
240
  }
270
241
 
271
242
  async createExpansionPackManifest(installDir, packId, config, files) {
272
- const manifestPath = path.join(
273
- installDir,
274
- `.${packId}`,
275
- this.manifestFile
276
- );
243
+ const manifestPath = path.join(installDir, `.${packId}`, this.manifestFile);
277
244
 
278
245
  const manifest = {
279
- version: config.expansionPackVersion || require("../../../package.json").version,
246
+ version: config.expansionPackVersion || require('../../../package.json').version,
280
247
  installed_at: new Date().toISOString(),
281
248
  install_type: config.installType,
282
249
  expansion_pack_id: config.expansionPackId,
@@ -305,25 +272,25 @@ class FileManager {
305
272
  }
306
273
 
307
274
  async modifyCoreConfig(installDir, config) {
308
- const coreConfigPath = path.join(installDir, '.xiaoma-core', 'core-config.yaml');
309
-
275
+ const coreConfigPath = path.join(installDir, '.bmad-core', 'core-config.yaml');
276
+
310
277
  try {
311
278
  // Read the existing core-config.yaml
312
279
  const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
313
280
  const coreConfig = yaml.load(coreConfigContent);
314
-
281
+
315
282
  // Modify sharding settings if provided
316
283
  if (config.prdSharded !== undefined) {
317
284
  coreConfig.prd.prdSharded = config.prdSharded;
318
285
  }
319
-
286
+
320
287
  if (config.architectureSharded !== undefined) {
321
288
  coreConfig.architecture.architectureSharded = config.architectureSharded;
322
289
  }
323
-
290
+
324
291
  // Write back the modified config
325
292
  await fs.writeFile(coreConfigPath, yaml.dump(coreConfig, { indent: 2 }));
326
-
293
+
327
294
  return true;
328
295
  } catch (error) {
329
296
  console.error(chalk.red(`Failed to modify core-config.yaml:`), error.message);
@@ -335,31 +302,32 @@ class FileManager {
335
302
  try {
336
303
  // Check file size to determine if we should stream
337
304
  const stats = await fs.stat(source);
338
-
339
- if (stats.size > 5 * 1024 * 1024) { // 5MB threshold
305
+
306
+ if (stats.size > 5 * 1024 * 1024) {
307
+ // 5MB threshold
340
308
  // Use streaming for large files
341
- const { Transform } = require('stream');
309
+ const { Transform } = require('node:stream');
342
310
  const replaceStream = new Transform({
343
311
  transform(chunk, encoding, callback) {
344
- const modified = chunk.toString().replace(/\{root\}/g, rootValue);
312
+ const modified = chunk.toString().replaceAll('{root}', rootValue);
345
313
  callback(null, modified);
346
- }
314
+ },
347
315
  });
348
-
316
+
349
317
  await this.ensureDirectory(path.dirname(destination));
350
318
  await pipeline(
351
319
  createReadStream(source, { encoding: 'utf8' }),
352
320
  replaceStream,
353
- createWriteStream(destination, { encoding: 'utf8' })
321
+ createWriteStream(destination, { encoding: 'utf8' }),
354
322
  );
355
323
  } else {
356
324
  // Regular approach for smaller files
357
325
  const content = await fsPromises.readFile(source, 'utf8');
358
- const updatedContent = content.replace(/\{root\}/g, rootValue);
326
+ const updatedContent = content.replaceAll('{root}', rootValue);
359
327
  await this.ensureDirectory(path.dirname(destination));
360
328
  await fsPromises.writeFile(destination, updatedContent, 'utf8');
361
329
  }
362
-
330
+
363
331
  return true;
364
332
  } catch (error) {
365
333
  console.error(chalk.red(`Failed to copy ${source} with root replacement:`), error.message);
@@ -367,45 +335,55 @@ class FileManager {
367
335
  }
368
336
  }
369
337
 
370
- async copyDirectoryWithRootReplacement(source, destination, rootValue, fileExtensions = ['.md', '.yaml', '.yml']) {
338
+ async copyDirectoryWithRootReplacement(
339
+ source,
340
+ destination,
341
+ rootValue,
342
+ fileExtensions = ['.md', '.yaml', '.yml'],
343
+ ) {
371
344
  try {
372
345
  await this.ensureDirectory(destination);
373
-
346
+
374
347
  // Get all files in source directory
375
- const files = await resourceLocator.findFiles('**/*', {
376
- cwd: source,
377
- nodir: true
348
+ const files = await resourceLocator.findFiles('**/*', {
349
+ cwd: source,
350
+ nodir: true,
378
351
  });
379
-
352
+
380
353
  let replacedCount = 0;
381
-
354
+
382
355
  for (const file of files) {
383
356
  const sourcePath = path.join(source, file);
384
- const destPath = path.join(destination, file);
385
-
357
+ const destinationPath = path.join(destination, file);
358
+
386
359
  // Check if this file type should have {root} replacement
387
- const shouldReplace = fileExtensions.some(ext => file.endsWith(ext));
388
-
360
+ const shouldReplace = fileExtensions.some((extension) => file.endsWith(extension));
361
+
389
362
  if (shouldReplace) {
390
- if (await this.copyFileWithRootReplacement(sourcePath, destPath, rootValue)) {
363
+ if (await this.copyFileWithRootReplacement(sourcePath, destinationPath, rootValue)) {
391
364
  replacedCount++;
392
365
  }
393
366
  } else {
394
367
  // Regular copy for files that don't need replacement
395
- await this.copyFile(sourcePath, destPath);
368
+ await this.copyFile(sourcePath, destinationPath);
396
369
  }
397
370
  }
398
-
371
+
399
372
  if (replacedCount > 0) {
400
373
  console.log(chalk.dim(` Processed ${replacedCount} files with {root} replacement`));
401
374
  }
402
-
375
+
403
376
  return true;
404
377
  } catch (error) {
405
- console.error(chalk.red(`Failed to copy directory ${source} with root replacement:`), error.message);
378
+ console.error(
379
+ chalk.red(`Failed to copy directory ${source} with root replacement:`),
380
+ error.message,
381
+ );
406
382
  return false;
407
383
  }
408
384
  }
385
+ manifestDir = '.bmad-core';
386
+ manifestFile = 'install-manifest.yaml';
409
387
  }
410
388
 
411
389
  module.exports = new FileManager();
@@ -3,13 +3,13 @@
3
3
  * Reduces duplication and provides shared methods
4
4
  */
5
5
 
6
- const path = require("path");
7
- const fs = require("fs-extra");
8
- const yaml = require("js-yaml");
9
- const chalk = require("chalk");
10
- const fileManager = require("./file-manager");
11
- const resourceLocator = require("./resource-locator");
12
- const { extractYamlFromAgent } = require("../../lib/yaml-utils");
6
+ const path = require('node:path');
7
+ const fs = require('fs-extra');
8
+ const yaml = require('js-yaml');
9
+ const chalk = require('chalk').default || require('chalk');
10
+ const fileManager = require('./file-manager');
11
+ const resourceLocator = require('./resource-locator');
12
+ const { extractYamlFromAgent } = require('../../lib/yaml-utils');
13
13
 
14
14
  class BaseIdeSetup {
15
15
  constructor() {
@@ -27,19 +27,19 @@ class BaseIdeSetup {
27
27
  }
28
28
 
29
29
  const allAgents = new Set();
30
-
30
+
31
31
  // Get core agents
32
32
  const coreAgents = await this.getCoreAgentIds(installDir);
33
- coreAgents.forEach(id => allAgents.add(id));
34
-
33
+ for (const id of coreAgents) allAgents.add(id);
34
+
35
35
  // Get expansion pack agents
36
36
  const expansionPacks = await this.getInstalledExpansionPacks(installDir);
37
37
  for (const pack of expansionPacks) {
38
38
  const packAgents = await this.getExpansionPackAgents(pack.path);
39
- packAgents.forEach(id => allAgents.add(id));
39
+ for (const id of packAgents) allAgents.add(id);
40
40
  }
41
-
42
- const result = Array.from(allAgents);
41
+
42
+ const result = [...allAgents];
43
43
  this._agentCache.set(cacheKey, result);
44
44
  return result;
45
45
  }
@@ -50,14 +50,14 @@ class BaseIdeSetup {
50
50
  async getCoreAgentIds(installDir) {
51
51
  const coreAgents = [];
52
52
  const corePaths = [
53
- path.join(installDir, ".xiaoma-core", "agents"),
54
- path.join(installDir, "xiaoma-core", "agents")
53
+ path.join(installDir, '.bmad-core', 'agents'),
54
+ path.join(installDir, 'bmad-core', 'agents'),
55
55
  ];
56
56
 
57
57
  for (const agentsDir of corePaths) {
58
58
  if (await fileManager.pathExists(agentsDir)) {
59
- const files = await resourceLocator.findFiles("*.md", { cwd: agentsDir });
60
- coreAgents.push(...files.map(file => path.basename(file, ".md")));
59
+ const files = await resourceLocator.findFiles('*.md', { cwd: agentsDir });
60
+ coreAgents.push(...files.map((file) => path.basename(file, '.md')));
61
61
  break; // Use first found
62
62
  }
63
63
  }
@@ -76,13 +76,13 @@ class BaseIdeSetup {
76
76
 
77
77
  // Use resource locator for efficient path finding
78
78
  let agentPath = await resourceLocator.getAgentPath(agentId);
79
-
79
+
80
80
  if (!agentPath) {
81
81
  // Check installation-specific paths
82
82
  const possiblePaths = [
83
- path.join(installDir, ".xiaoma-core", "agents", `${agentId}.md`),
84
- path.join(installDir, "xiaoma-core", "agents", `${agentId}.md`),
85
- path.join(installDir, "common", "agents", `${agentId}.md`)
83
+ path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`),
84
+ path.join(installDir, 'bmad-core', 'agents', `${agentId}.md`),
85
+ path.join(installDir, 'common', 'agents', `${agentId}.md`),
86
86
  ];
87
87
 
88
88
  for (const testPath of possiblePaths) {
@@ -113,7 +113,7 @@ class BaseIdeSetup {
113
113
  const metadata = yaml.load(yamlContent);
114
114
  return metadata.agent_name || agentId;
115
115
  }
116
- } catch (error) {
116
+ } catch {
117
117
  // Fallback to agent ID
118
118
  }
119
119
  return agentId;
@@ -129,31 +129,31 @@ class BaseIdeSetup {
129
129
  }
130
130
 
131
131
  const expansionPacks = [];
132
-
132
+
133
133
  // Check for dot-prefixed expansion packs
134
- const dotExpansions = await resourceLocator.findFiles(".bmad-*", { cwd: installDir });
135
-
134
+ const dotExpansions = await resourceLocator.findFiles('.bmad-*', { cwd: installDir });
135
+
136
136
  for (const dotExpansion of dotExpansions) {
137
- if (dotExpansion !== ".xiaoma-core") {
137
+ if (dotExpansion !== '.bmad-core') {
138
138
  const packPath = path.join(installDir, dotExpansion);
139
- const packName = dotExpansion.substring(1); // remove the dot
139
+ const packName = dotExpansion.slice(1); // remove the dot
140
140
  expansionPacks.push({
141
141
  name: packName,
142
- path: packPath
142
+ path: packPath,
143
143
  });
144
144
  }
145
145
  }
146
-
146
+
147
147
  // Check other dot folders that have config.yaml
148
- const allDotFolders = await resourceLocator.findFiles(".*", { cwd: installDir });
148
+ const allDotFolders = await resourceLocator.findFiles('.*', { cwd: installDir });
149
149
  for (const folder of allDotFolders) {
150
- if (!folder.startsWith(".bmad-") && folder !== ".xiaoma-core") {
150
+ if (!folder.startsWith('.bmad-') && folder !== '.bmad-core') {
151
151
  const packPath = path.join(installDir, folder);
152
- const configPath = path.join(packPath, "config.yaml");
152
+ const configPath = path.join(packPath, 'config.yaml');
153
153
  if (await fileManager.pathExists(configPath)) {
154
154
  expansionPacks.push({
155
- name: folder.substring(1), // remove the dot
156
- path: packPath
155
+ name: folder.slice(1), // remove the dot
156
+ path: packPath,
157
157
  });
158
158
  }
159
159
  }
@@ -167,13 +167,13 @@ class BaseIdeSetup {
167
167
  * Get expansion pack agents
168
168
  */
169
169
  async getExpansionPackAgents(packPath) {
170
- const agentsDir = path.join(packPath, "agents");
170
+ const agentsDir = path.join(packPath, 'agents');
171
171
  if (!(await fileManager.pathExists(agentsDir))) {
172
172
  return [];
173
173
  }
174
-
175
- const agentFiles = await resourceLocator.findFiles("*.md", { cwd: agentsDir });
176
- return agentFiles.map(file => path.basename(file, ".md"));
174
+
175
+ const agentFiles = await resourceLocator.findFiles('*.md', { cwd: agentsDir });
176
+ return agentFiles.map((file) => path.basename(file, '.md'));
177
177
  }
178
178
 
179
179
  /**
@@ -183,27 +183,28 @@ class BaseIdeSetup {
183
183
  const agentContent = await fileManager.readFile(agentPath);
184
184
  const agentTitle = await this.getAgentTitle(agentId, installDir);
185
185
  const yamlContent = extractYamlFromAgent(agentContent);
186
-
187
- let content = "";
188
-
186
+
187
+ let content = '';
188
+
189
189
  if (format === 'mdc') {
190
190
  // MDC format for Cursor
191
- content = "---\n";
192
- content += "description: \n";
193
- content += "globs: []\n";
194
- content += "alwaysApply: false\n";
195
- content += "---\n\n";
191
+ content = '---\n';
192
+ content += 'description: \n';
193
+ content += 'globs: []\n';
194
+ content += 'alwaysApply: false\n';
195
+ content += '---\n\n';
196
196
  content += `# ${agentId.toUpperCase()} Agent Rule\n\n`;
197
197
  content += `This rule is triggered when the user types \`@${agentId}\` and activates the ${agentTitle} agent persona.\n\n`;
198
- content += "## Agent Activation\n\n";
199
- content += "CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n";
200
- content += "```yaml\n";
201
- content += yamlContent || agentContent.replace(/^#.*$/m, "").trim();
202
- content += "\n```\n\n";
203
- content += "## File Reference\n\n";
204
- const relativePath = path.relative(installDir, agentPath).replace(/\\/g, '/');
198
+ content += '## Agent Activation\n\n';
199
+ content +=
200
+ 'CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n';
201
+ content += '```yaml\n';
202
+ content += yamlContent || agentContent.replace(/^#.*$/m, '').trim();
203
+ content += '\n```\n\n';
204
+ content += '## File Reference\n\n';
205
+ const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
205
206
  content += `The complete agent definition is available in [${relativePath}](mdc:${relativePath}).\n\n`;
206
- content += "## Usage\n\n";
207
+ content += '## Usage\n\n';
207
208
  content += `When the user types \`@${agentId}\`, activate this ${agentTitle} persona and follow all instructions defined in the YAML configuration above.\n`;
208
209
  } else if (format === 'claude') {
209
210
  // Claude Code format
@@ -211,7 +212,7 @@ class BaseIdeSetup {
211
212
  content += `When this command is used, adopt the following agent persona:\n\n`;
212
213
  content += agentContent;
213
214
  }
214
-
215
+
215
216
  return content;
216
217
  }
217
218
 
@@ -224,4 +225,4 @@ class BaseIdeSetup {
224
225
  }
225
226
  }
226
227
 
227
- module.exports = BaseIdeSetup;
228
+ module.exports = BaseIdeSetup;