@zeyue0329/xiaoma-cli 1.13.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/package.json +24 -14
  2. package/src/core-skills/module-help.csv +13 -0
  3. package/src/{core → core-skills}/module.yaml +8 -0
  4. package/src/{core/skills/xiaoma-advanced-elicitation/workflow.md → core-skills/xiaoma-advanced-elicitation/SKILL.md} +10 -3
  5. package/src/core-skills/xiaoma-advanced-elicitation/methods.csv +70 -0
  6. package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-03-technique-execution.md +6 -4
  7. package/src/{core/skills → core-skills}/xiaoma-brainstorming/workflow.md +1 -1
  8. package/src/core-skills/xiaoma-customize/SKILL.md +111 -0
  9. package/src/core-skills/xiaoma-customize/scripts/list_customizable_skills.js +172 -0
  10. package/src/{core/skills → core-skills}/xiaoma-distillator/resources/distillate-format-reference.md +1 -1
  11. package/src/{core/skills → core-skills}/xiaoma-distillator/scripts/analyze_sources.py +2 -2
  12. package/src/{core/skills/xiaoma-editorial-review-prose/workflow.md → core-skills/xiaoma-editorial-review-prose/SKILL.md} +5 -0
  13. package/src/{core/skills/xiaoma-editorial-review-structure/workflow.md → core-skills/xiaoma-editorial-review-structure/SKILL.md} +5 -0
  14. package/src/core-skills/xiaoma-help/SKILL.md +75 -0
  15. package/src/{core/skills/xiaoma-index-docs/workflow.md → core-skills/xiaoma-index-docs/SKILL.md} +5 -0
  16. package/src/core-skills/xiaoma-party-mode/SKILL.md +128 -0
  17. package/src/{core/skills/xiaoma-review-adversarial-general/workflow.md → core-skills/xiaoma-review-adversarial-general/SKILL.md} +5 -0
  18. package/src/{core/skills/xiaoma-review-edge-case-hunter/workflow.md → core-skills/xiaoma-review-edge-case-hunter/SKILL.md} +5 -0
  19. package/src/{core/skills/xiaoma-shard-doc/workflow.md → core-skills/xiaoma-shard-doc/SKILL.md} +5 -0
  20. package/src/core-skills/xiaoma-spec/SKILL.md +129 -0
  21. package/src/core-skills/xiaoma-spec/assets/headless-schemas.md +33 -0
  22. package/src/core-skills/xiaoma-spec/assets/spec-template.md +49 -0
  23. package/src/core-skills/xiaoma-spec/customize.toml +53 -0
  24. package/src/scripts/resolve_config.js +163 -0
  25. package/src/scripts/resolve_customization.js +188 -0
  26. package/src/scripts/toml.js +338 -0
  27. package/src/xmc-skills/1-analysis/research/xiaoma-domain-research/SKILL.md +96 -0
  28. package/src/xmc-skills/1-analysis/research/xiaoma-domain-research/customize.toml +41 -0
  29. package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-domain-research/domain-steps/step-06-research-synthesis.md +6 -0
  30. package/src/xmc-skills/1-analysis/research/xiaoma-market-research/SKILL.md +96 -0
  31. package/src/xmc-skills/1-analysis/research/xiaoma-market-research/customize.toml +41 -0
  32. package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-market-research/steps/step-06-research-completion.md +6 -0
  33. package/src/xmc-skills/1-analysis/research/xiaoma-technical-research/SKILL.md +96 -0
  34. package/src/xmc-skills/1-analysis/research/xiaoma-technical-research/customize.toml +41 -0
  35. package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-technical-research/technical-steps/step-06-research-synthesis.md +6 -0
  36. package/src/xmc-skills/1-analysis/xiaoma-agent-analyst/SKILL.md +76 -0
  37. package/src/xmc-skills/1-analysis/xiaoma-agent-analyst/customize.toml +90 -0
  38. package/src/xmc-skills/1-analysis/xiaoma-agent-tech-writer/SKILL.md +76 -0
  39. package/src/xmc-skills/1-analysis/xiaoma-agent-tech-writer/customize.toml +81 -0
  40. package/src/xmc-skills/1-analysis/xiaoma-agent-tech-writer/explain-concept.md +20 -0
  41. package/src/xmc-skills/1-analysis/xiaoma-agent-tech-writer/mermaid-gen.md +20 -0
  42. package/src/xmc-skills/1-analysis/xiaoma-agent-tech-writer/validate-doc.md +19 -0
  43. package/src/xmc-skills/1-analysis/xiaoma-agent-tech-writer/write-document.md +20 -0
  44. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/checklist.md +5 -2
  45. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-01-init-and-validate.md +18 -1
  46. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-02-requirements-analysis.md +3 -1
  47. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-03-architecture-analysis.md +5 -3
  48. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-04-create-prd.md +12 -14
  49. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-05-validate-prd.md +18 -15
  50. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-06-create-epics.md +9 -5
  51. package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/steps/step-07-create-architecture.md +10 -7
  52. package/src/xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline/steps/step-08-finalize.md +184 -0
  53. package/src/xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline/workflow.md +140 -0
  54. package/src/xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline/xiaoma-skill-manifest.yaml +24 -0
  55. package/src/xmc-skills/1-analysis/xiaoma-document-project/SKILL.md +62 -0
  56. package/src/xmc-skills/1-analysis/xiaoma-document-project/customize.toml +41 -0
  57. package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/workflows/deep-dive-instructions.md +1 -0
  58. package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/workflows/full-scan-instructions.md +1 -0
  59. package/src/xmc-skills/1-analysis/xiaoma-prfaq/SKILL.md +135 -0
  60. package/src/xmc-skills/1-analysis/xiaoma-prfaq/agents/artifact-analyzer.md +60 -0
  61. package/src/xmc-skills/1-analysis/xiaoma-prfaq/agents/web-researcher.md +49 -0
  62. package/src/xmc-skills/1-analysis/xiaoma-prfaq/assets/prfaq-template.md +62 -0
  63. package/src/xmc-skills/1-analysis/xiaoma-prfaq/customize.toml +41 -0
  64. package/src/xmc-skills/1-analysis/xiaoma-prfaq/references/customer-faq.md +55 -0
  65. package/src/xmc-skills/1-analysis/xiaoma-prfaq/references/internal-faq.md +51 -0
  66. package/src/xmc-skills/1-analysis/xiaoma-prfaq/references/press-release.md +60 -0
  67. package/src/xmc-skills/1-analysis/xiaoma-prfaq/references/verdict.md +83 -0
  68. package/src/xmc-skills/1-analysis/xiaoma-prfaq/xiaoma-manifest.json +16 -0
  69. package/src/xmc-skills/1-analysis/xiaoma-product-brief/SKILL.md +91 -0
  70. package/src/xmc-skills/1-analysis/xiaoma-product-brief/assets/brief-template.md +41 -0
  71. package/src/xmc-skills/1-analysis/xiaoma-product-brief/customize.toml +99 -0
  72. package/src/xmc-skills/2-plan-workflows/xiaoma-agent-pm/SKILL.md +76 -0
  73. package/src/xmc-skills/2-plan-workflows/xiaoma-agent-pm/customize.toml +75 -0
  74. package/src/xmc-skills/2-plan-workflows/xiaoma-agent-ux-designer/SKILL.md +76 -0
  75. package/src/xmc-skills/2-plan-workflows/xiaoma-agent-ux-designer/customize.toml +60 -0
  76. package/src/xmc-skills/2-plan-workflows/xiaoma-create-prd/SKILL.md +30 -0
  77. package/src/xmc-skills/2-plan-workflows/xiaoma-create-prd/customize.toml +41 -0
  78. package/src/xmc-skills/2-plan-workflows/xiaoma-edit-prd/SKILL.md +30 -0
  79. package/src/xmc-skills/2-plan-workflows/xiaoma-edit-prd/customize.toml +42 -0
  80. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/SKILL.md +92 -0
  81. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/assets/headless-schemas.md +76 -0
  82. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/assets/prd-template.md +165 -0
  83. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/assets/prd-validation-checklist.md +217 -0
  84. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/assets/validation-report-template.html +325 -0
  85. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/customize.toml +147 -0
  86. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/references/headless.md +39 -0
  87. package/src/xmc-skills/2-plan-workflows/xiaoma-prd/references/validate.md +97 -0
  88. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/SKILL.md +90 -0
  89. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/color-themes.md +9 -0
  90. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/design-directions.md +9 -0
  91. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/design-example-editorial.md +158 -0
  92. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/design-example-mobile.md +93 -0
  93. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/design-example-shadcn.md +109 -0
  94. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/excalidraw-wireframe.md +19 -0
  95. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/experience-example-mobile.md +112 -0
  96. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/experience-example-shadcn.md +133 -0
  97. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/headless-schemas.md +84 -0
  98. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/key-screens.md +29 -0
  99. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/assets/validation-report-template.html +319 -0
  100. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/customize.toml +100 -0
  101. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/references/creative-tools.md +19 -0
  102. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/references/design-md-spec.md +50 -0
  103. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/references/headless.md +37 -0
  104. package/src/xmc-skills/2-plan-workflows/xiaoma-ux/references/validate.md +115 -0
  105. package/src/xmc-skills/2-plan-workflows/xiaoma-validate-prd/SKILL.md +30 -0
  106. package/src/xmc-skills/2-plan-workflows/xiaoma-validate-prd/customize.toml +31 -0
  107. package/src/xmc-skills/3-solutioning/xiaoma-agent-architect/SKILL.md +76 -0
  108. package/src/xmc-skills/3-solutioning/xiaoma-agent-architect/customize.toml +65 -0
  109. package/src/xmc-skills/3-solutioning/xiaoma-check-implementation-readiness/SKILL.md +91 -0
  110. package/src/xmc-skills/3-solutioning/xiaoma-check-implementation-readiness/customize.toml +41 -0
  111. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/steps/step-01-document-discovery.md +1 -1
  112. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/steps/step-02-prd-analysis.md +1 -1
  113. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +1 -1
  114. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/steps/step-06-final-assessment.md +6 -0
  115. package/src/xmc-skills/3-solutioning/xiaoma-create-architecture/SKILL.md +74 -0
  116. package/src/xmc-skills/3-solutioning/xiaoma-create-architecture/customize.toml +41 -0
  117. package/src/xmc-skills/3-solutioning/xiaoma-create-architecture/references/headless.md +37 -0
  118. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-07-validation.md +23 -21
  119. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-08-complete.md +6 -0
  120. package/src/xmc-skills/3-solutioning/xiaoma-create-epics-and-stories/SKILL.md +93 -0
  121. package/src/xmc-skills/3-solutioning/xiaoma-create-epics-and-stories/customize.toml +41 -0
  122. package/src/xmc-skills/3-solutioning/xiaoma-create-epics-and-stories/references/headless.md +35 -0
  123. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-epics-and-stories/steps/step-02-design-epics.md +34 -4
  124. package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-epics-and-stories/steps/step-04-final-validation.md +12 -0
  125. package/src/xmc-skills/3-solutioning/xiaoma-generate-project-context/SKILL.md +81 -0
  126. package/src/xmc-skills/3-solutioning/xiaoma-generate-project-context/customize.toml +41 -0
  127. package/src/{xmc/workflows → xmc-skills/3-solutioning}/xiaoma-generate-project-context/steps/step-03-complete.md +6 -0
  128. package/src/xmc-skills/4-implementation/xiaoma-agent-dev/SKILL.md +76 -0
  129. package/src/xmc-skills/4-implementation/xiaoma-agent-dev/customize.toml +131 -0
  130. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/checklist.md +29 -0
  131. package/src/{xmc/workflows/4-implementation/auto-story-pipeline → xmc-skills/4-implementation/xiaoma-auto-story-pipeline}/steps/step-01-init-and-validate.md +16 -8
  132. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/steps/step-02-create-story.md +111 -0
  133. package/src/{xmc/workflows/4-implementation/auto-story-pipeline → xmc-skills/4-implementation/xiaoma-auto-story-pipeline}/steps/step-03-validate-story.md +4 -2
  134. package/src/{xmc/workflows/4-implementation/auto-story-pipeline → xmc-skills/4-implementation/xiaoma-auto-story-pipeline}/steps/step-04-develop-story.md +10 -6
  135. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/steps/step-05-code-review.md +99 -0
  136. package/src/{xmc/workflows/4-implementation/auto-story-pipeline → xmc-skills/4-implementation/xiaoma-auto-story-pipeline}/steps/step-06-test-story.md +25 -12
  137. package/src/{xmc/workflows/4-implementation/auto-story-pipeline → xmc-skills/4-implementation/xiaoma-auto-story-pipeline}/steps/step-07-fix-and-retest.md +28 -13
  138. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/steps/step-08-complete-story.md +174 -0
  139. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/steps/step-09-finalize.md +145 -0
  140. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/workflow.md +127 -0
  141. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline/xiaoma-skill-manifest.yaml +27 -0
  142. package/src/{xmc/workflows/4-implementation/auto-story-pipeline-batch → xmc-skills/4-implementation/xiaoma-auto-story-pipeline-batch}/SKILL.md +2 -2
  143. package/src/xmc-skills/4-implementation/xiaoma-auto-story-pipeline-batch/checklist.md +45 -0
  144. package/src/{xmc/workflows/4-implementation/auto-story-pipeline-batch → xmc-skills/4-implementation/xiaoma-auto-story-pipeline-batch}/workflow.md +150 -7
  145. package/src/{xmc/workflows/4-implementation/auto-story-pipeline-batch → xmc-skills/4-implementation/xiaoma-auto-story-pipeline-batch}/xiaoma-skill-manifest.yaml +2 -2
  146. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/SKILL.md +68 -0
  147. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/customize.toml +41 -0
  148. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/generate-trail.md +38 -0
  149. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/step-01-orientation.md +105 -0
  150. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/step-02-walkthrough.md +89 -0
  151. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/step-03-detail-pass.md +106 -0
  152. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/step-04-testing.md +74 -0
  153. package/src/xmc-skills/4-implementation/xiaoma-checkpoint-preview/step-05-wrapup.md +30 -0
  154. package/src/xmc-skills/4-implementation/xiaoma-code-review/SKILL.md +90 -0
  155. package/src/xmc-skills/4-implementation/xiaoma-code-review/customize.toml +41 -0
  156. package/src/xmc-skills/4-implementation/xiaoma-code-review/steps/step-01-gather-context.md +85 -0
  157. package/src/xmc-skills/4-implementation/xiaoma-code-review/steps/step-02-review.md +35 -0
  158. package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-code-review/steps/step-03-triage.md +7 -8
  159. package/src/xmc-skills/4-implementation/xiaoma-code-review/steps/step-04-present.md +132 -0
  160. package/src/{xmc/workflows/4-implementation/xiaoma-correct-course/workflow.md → xmc-skills/4-implementation/xiaoma-correct-course/SKILL.md} +65 -31
  161. package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-correct-course/checklist.md +2 -2
  162. package/src/xmc-skills/4-implementation/xiaoma-correct-course/customize.toml +41 -0
  163. package/src/{xmc/workflows/4-implementation/xiaoma-create-story/workflow.md → xmc-skills/4-implementation/xiaoma-create-story/SKILL.md} +60 -11
  164. package/src/xmc-skills/4-implementation/xiaoma-create-story/customize.toml +41 -0
  165. package/src/xmc-skills/4-implementation/xiaoma-create-story/references/headless.md +32 -0
  166. package/src/{xmc/workflows/4-implementation/xiaoma-dev-story/workflow.md → xmc-skills/4-implementation/xiaoma-dev-story/SKILL.md} +70 -20
  167. package/src/xmc-skills/4-implementation/xiaoma-dev-story/customize.toml +41 -0
  168. package/src/xmc-skills/4-implementation/xiaoma-investigate/SKILL.md +196 -0
  169. package/src/xmc-skills/4-implementation/xiaoma-investigate/customize.toml +62 -0
  170. package/src/xmc-skills/4-implementation/xiaoma-investigate/references/case-file-template.md +127 -0
  171. package/src/{xmc/workflows/xiaoma-qa-generate-e2e-tests/workflow.md → xmc-skills/4-implementation/xiaoma-qa-generate-e2e-tests/SKILL.md} +51 -23
  172. package/src/{xmc/workflows → xmc-skills/4-implementation}/xiaoma-qa-generate-e2e-tests/checklist.md +1 -5
  173. package/src/xmc-skills/4-implementation/xiaoma-qa-generate-e2e-tests/customize.toml +41 -0
  174. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/SKILL.md +111 -0
  175. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/compile-epic-context.md +62 -0
  176. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/customize.toml +41 -0
  177. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/spec-template.md +88 -0
  178. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/step-01-clarify-and-route.md +100 -0
  179. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/step-02-plan.md +47 -0
  180. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/step-03-implement.md +41 -0
  181. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/step-04-review.md +50 -0
  182. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/step-05-present.md +78 -0
  183. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/step-oneshot.md +71 -0
  184. package/src/xmc-skills/4-implementation/xiaoma-quick-dev/sync-sprint-status.md +19 -0
  185. package/src/{xmc/workflows/4-implementation/xiaoma-retrospective/workflow.md → xmc-skills/4-implementation/xiaoma-retrospective/SKILL.md} +185 -152
  186. package/src/xmc-skills/4-implementation/xiaoma-retrospective/customize.toml +41 -0
  187. package/src/{xmc/workflows/4-implementation/xiaoma-sprint-planning/workflow.md → xmc-skills/4-implementation/xiaoma-sprint-planning/SKILL.md} +59 -15
  188. package/src/xmc-skills/4-implementation/xiaoma-sprint-planning/customize.toml +41 -0
  189. package/src/xmc-skills/4-implementation/xiaoma-sprint-planning/references/headless.md +28 -0
  190. package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-sprint-planning/sprint-status-template.yaml +3 -3
  191. package/src/{xmc/workflows/4-implementation/xiaoma-sprint-status/workflow.md → xmc-skills/4-implementation/xiaoma-sprint-status/SKILL.md} +57 -20
  192. package/src/xmc-skills/4-implementation/xiaoma-sprint-status/customize.toml +41 -0
  193. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/checklist.md +6 -0
  194. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/steps/step-01-init-and-validate.md +28 -4
  195. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/steps/step-02-run-requirements-pipeline.md +2 -1
  196. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/steps/step-03-bridge-sprint-planning.md +63 -9
  197. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/steps/step-04-run-story-pipeline.md +2 -1
  198. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/steps/step-05-finalize.md +30 -3
  199. package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/workflow.md +7 -8
  200. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/checklist.md +4 -0
  201. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/steps/step-01-init-and-validate.md +8 -7
  202. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/steps/step-02-create-epics.md +3 -2
  203. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/steps/step-03-bridge-sprint-planning.md +68 -14
  204. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/steps/step-04-batch-create-stories.md +6 -5
  205. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/steps/step-05-finalize.md +48 -8
  206. package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/workflow.md +7 -8
  207. package/src/xmc-skills/module-help.csv +32 -0
  208. package/src/xmc-skills/module.yaml +95 -0
  209. package/src/xpm-skills/module-help.csv +3 -0
  210. package/src/xpm-skills/module.yaml +36 -0
  211. package/src/xpm-skills/xiaoma-agent-patent-advisor/SKILL.md +75 -0
  212. package/src/xpm-skills/xiaoma-agent-patent-advisor/customize.toml +46 -0
  213. package/src/xpm-skills/xiaoma-patent-mining/SKILL.md +6 -0
  214. package/src/xpm-skills/xiaoma-patent-mining/steps/step-01-project-analysis.md +65 -0
  215. package/src/xpm-skills/xiaoma-patent-mining/steps/step-02-patent-mining.md +87 -0
  216. package/src/xpm-skills/xiaoma-patent-mining/steps/step-03-disclosure-writing.md +110 -0
  217. package/src/xpm-skills/xiaoma-patent-mining/steps/step-04-ai-taste-removal.md +85 -0
  218. package/src/xpm-skills/xiaoma-patent-mining/steps/step-05-docx-generation.md +111 -0
  219. package/src/xpm-skills/xiaoma-patent-mining/workflow.md +94 -0
  220. package/tools/format-workflow-md.js +263 -0
  221. package/tools/{cli → installer}/README.md +2 -2
  222. package/tools/installer/cli-utils.js +57 -0
  223. package/tools/installer/commands/install.js +146 -0
  224. package/tools/{cli → installer}/commands/status.js +15 -7
  225. package/tools/{cli → installer}/commands/uninstall.js +7 -7
  226. package/tools/installer/core/config.js +73 -0
  227. package/tools/installer/core/existing-install.js +121 -0
  228. package/tools/installer/core/install-paths.js +132 -0
  229. package/tools/installer/core/installer.js +1624 -0
  230. package/tools/installer/core/legacy-warnings.js +156 -0
  231. package/tools/installer/core/manifest-generator.js +859 -0
  232. package/tools/installer/core/manifest.js +434 -0
  233. package/tools/{cli/lib → installer}/file-ops.js +1 -1
  234. package/tools/installer/fs-native.js +116 -0
  235. package/tools/installer/ide/_config-driven.js +972 -0
  236. package/tools/{cli/installers/lib → installer}/ide/manager.js +82 -62
  237. package/tools/installer/ide/platform-codes.js +80 -0
  238. package/tools/installer/ide/platform-codes.yaml +322 -0
  239. package/tools/installer/ide/shared/installed-skills.js +50 -0
  240. package/tools/{cli/installers/lib → installer}/ide/shared/path-utils.js +0 -145
  241. package/tools/{cli/installers/lib → installer}/ide/shared/skill-manifest.js +3 -36
  242. package/tools/installer/list-options.js +210 -0
  243. package/tools/{cli/installers/lib → installer}/message-loader.js +3 -3
  244. package/tools/installer/modules/channel-plan.js +203 -0
  245. package/tools/installer/modules/channel-resolver.js +241 -0
  246. package/tools/installer/modules/custom-module-manager.js +912 -0
  247. package/tools/installer/modules/external-manager.js +533 -0
  248. package/tools/installer/modules/module-help-schema.js +13 -0
  249. package/tools/{cli/installers/lib/core/config-collector.js → installer/modules/official-modules.js} +1052 -110
  250. package/tools/installer/modules/plugin-resolver.js +398 -0
  251. package/tools/installer/modules/version-resolver.js +336 -0
  252. package/tools/installer/project-root.js +230 -0
  253. package/tools/{cli/lib → installer}/prompts.js +143 -100
  254. package/tools/installer/set-overrides.js +330 -0
  255. package/tools/installer/ui.js +2078 -0
  256. package/tools/{cli → installer}/xiaoma-cli.js +9 -10
  257. package/tools/{cli/lib → installer}/yaml-format.js +1 -1
  258. package/tools/migrate-custom-module-paths.js +124 -0
  259. package/tools/schema/step.js +855 -0
  260. package/tools/skill-validator.md +323 -0
  261. package/tools/validate-file-refs.js +566 -0
  262. package/tools/validate-frontmatter-prose-routing.js +334 -0
  263. package/tools/validate-skills.js +702 -0
  264. package/tools/validate-step-schemas.js +401 -0
  265. package/tools/validate-svg-changes.sh +1 -1
  266. package/tools/validate-trigger-column-vs-emits.js +375 -0
  267. package/tools/validate-warnings-samples.js +261 -0
  268. package/tools/xiaoma/rebrand.mjs +0 -0
  269. package/tools/xiaoma-npx-wrapper.js +2 -2
  270. package/.playwright-cli/console-2026-05-13T06-36-26-793Z.log +0 -2
  271. package/.playwright-cli/page-2026-05-13T06-36-27-725Z.yml +0 -1
  272. package/CLAUDE.md +0 -111
  273. package/README.md +0 -128
  274. package/XiaoMa-CLI-2026H2-/350/277/255/344/273/243/350/247/204/345/210/222.pptx +0 -0
  275. package/demo/xiaoma-bug-circle-resolve/SKILL.md +0 -6
  276. package/demo/xiaoma-bug-circle-resolve/workflow.md +0 -254
  277. package/demo/xiaoma-bug-resolve/SKILL.md +0 -6
  278. package/demo/xiaoma-bug-resolve/workflow.md +0 -269
  279. package/demo/xiaoma-prd-saas-zh/README.md +0 -57
  280. package/demo/xiaoma-prd-saas-zh/domain-research.md +0 -128
  281. package/demo/xiaoma-prd-saas-zh/epics.md +0 -303
  282. package/demo/xiaoma-prd-saas-zh/market-research-2026-q1.md +0 -183
  283. package/demo/xiaoma-prd-saas-zh/prd-bad-examples.md +0 -268
  284. package/demo/xiaoma-prd-saas-zh/prd.md +0 -409
  285. package/demo/xiaoma-prd-saas-zh/product-brief.md +0 -97
  286. package/demo/xiaoma-prd-saas-zh/validation-report.md +0 -279
  287. package/docs/roadshow/01-/351/241/271/347/233/256/346/246/202/350/247/210/344/270/216/346/236/266/346/236/204.md +0 -189
  288. package/docs/roadshow/02-/346/231/272/350/203/275/344/275/223/347/263/273/347/273/237/350/257/246/350/247/243.md +0 -464
  289. package/docs/roadshow/03-/346/231/272/350/203/275/344/275/223/344/272/244/344/272/222/346/265/201/347/250/213/345/233/276.md +0 -334
  290. package/docs/roadshow/04-/345/267/245/344/275/234/346/265/201/346/211/247/350/241/214/350/257/246/350/247/243.md +0 -1038
  291. package/docs/roadshow/05-/346/212/200/346/234/257/345/256/236/347/216/260/344/270/216/345/210/233/346/226/260/344/272/256/347/202/271.md +0 -205
  292. package/docs/roadshow/06-/350/267/257/346/274/224/346/200/273/347/273/223/344/270/216/346/274/224/347/244/272/345/273/272/350/256/256.md +0 -167
  293. package/media/doc1_fig1.png +0 -0
  294. package/media/doc1_fig2.png +0 -0
  295. package/media/doc1_fig3.png +0 -0
  296. package/media/doc1_fig4.png +0 -0
  297. package/media/doc2_fig1.png +0 -0
  298. package/media/doc2_fig2.png +0 -0
  299. package/media/doc2_fig3.png +0 -0
  300. package/media/doc2_fig4.png +0 -0
  301. package/media/doc3_fig1.png +0 -0
  302. package/media/doc3_fig2.png +0 -0
  303. package/media/doc3_fig3.png +0 -0
  304. package/media/doc3_fig4.png +0 -0
  305. package/media/doc4_fig1.png +0 -0
  306. package/media/doc4_fig2.png +0 -0
  307. package/media/doc4_fig3.png +0 -0
  308. package/media/doc5_fig1.png +0 -0
  309. package/media/doc5_fig2.png +0 -0
  310. package/media/doc5_fig3.png +0 -0
  311. package/patent-disclosure-optimized/SKILL.md +0 -416
  312. package/src/core/module-help.csv +0 -11
  313. package/src/core/skills/xiaoma-advanced-elicitation/SKILL.md +0 -6
  314. package/src/core/skills/xiaoma-advanced-elicitation/methods.csv +0 -51
  315. package/src/core/skills/xiaoma-editorial-review-prose/SKILL.md +0 -6
  316. package/src/core/skills/xiaoma-editorial-review-structure/SKILL.md +0 -6
  317. package/src/core/skills/xiaoma-help/SKILL.md +0 -6
  318. package/src/core/skills/xiaoma-help/workflow.md +0 -88
  319. package/src/core/skills/xiaoma-help/xiaoma-skill-manifest.yaml +0 -1
  320. package/src/core/skills/xiaoma-index-docs/SKILL.md +0 -6
  321. package/src/core/skills/xiaoma-index-docs/xiaoma-skill-manifest.yaml +0 -1
  322. package/src/core/skills/xiaoma-party-mode/SKILL.md +0 -6
  323. package/src/core/skills/xiaoma-party-mode/steps/step-01-agent-loading.md +0 -138
  324. package/src/core/skills/xiaoma-party-mode/steps/step-02-discussion-orchestration.md +0 -187
  325. package/src/core/skills/xiaoma-party-mode/steps/step-03-graceful-exit.md +0 -167
  326. package/src/core/skills/xiaoma-party-mode/workflow.md +0 -190
  327. package/src/core/skills/xiaoma-party-mode/xiaoma-skill-manifest.yaml +0 -1
  328. package/src/core/skills/xiaoma-review-adversarial-general/SKILL.md +0 -6
  329. package/src/core/skills/xiaoma-review-adversarial-general/xiaoma-skill-manifest.yaml +0 -1
  330. package/src/core/skills/xiaoma-review-edge-case-hunter/SKILL.md +0 -6
  331. package/src/core/skills/xiaoma-review-edge-case-hunter/xiaoma-skill-manifest.yaml +0 -1
  332. package/src/core/skills/xiaoma-shard-doc/SKILL.md +0 -6
  333. package/src/core/skills/xiaoma-shard-doc/xiaoma-skill-manifest.yaml +0 -1
  334. package/src/core/tasks/xiaoma-create-prd/SKILL.md +0 -6
  335. package/src/core/tasks/xiaoma-create-prd/data/prd-purpose.md +0 -354
  336. package/src/core/tasks/xiaoma-create-prd/data/upstream-input-contract.md +0 -168
  337. package/src/core/tasks/xiaoma-create-prd/steps-c/step-01-init.md +0 -178
  338. package/src/core/tasks/xiaoma-create-prd/steps-c/step-01b-continue.md +0 -161
  339. package/src/core/tasks/xiaoma-create-prd/steps-c/step-02-discovery.md +0 -208
  340. package/src/core/tasks/xiaoma-create-prd/steps-c/step-02b-vision.md +0 -142
  341. package/src/core/tasks/xiaoma-create-prd/steps-c/step-02c-executive-summary.md +0 -158
  342. package/src/core/tasks/xiaoma-create-prd/steps-c/step-03-success.md +0 -214
  343. package/src/core/tasks/xiaoma-create-prd/steps-c/step-04-journeys.md +0 -201
  344. package/src/core/tasks/xiaoma-create-prd/steps-c/step-05-domain.md +0 -194
  345. package/src/core/tasks/xiaoma-create-prd/steps-c/step-06-innovation.md +0 -211
  346. package/src/core/tasks/xiaoma-create-prd/steps-c/step-07-project-type.md +0 -222
  347. package/src/core/tasks/xiaoma-create-prd/steps-c/step-08-scoping.md +0 -216
  348. package/src/core/tasks/xiaoma-create-prd/steps-c/step-09-functional.md +0 -219
  349. package/src/core/tasks/xiaoma-create-prd/steps-c/step-10-nonfunctional.md +0 -230
  350. package/src/core/tasks/xiaoma-create-prd/steps-c/step-11-polish.md +0 -221
  351. package/src/core/tasks/xiaoma-create-prd/steps-c/step-12-complete.md +0 -115
  352. package/src/core/tasks/xiaoma-create-prd/templates/prd-skeleton-reference.md +0 -428
  353. package/src/core/tasks/xiaoma-create-prd/templates/prd-template.md +0 -108
  354. package/src/core/tasks/xiaoma-create-prd/workflow.md +0 -62
  355. package/src/core/tasks/xiaoma-create-prd/xiaoma-skill-manifest.yaml +0 -1
  356. package/src/utility/agent-components/activation-rules.txt +0 -6
  357. package/src/utility/agent-components/activation-steps.txt +0 -14
  358. package/src/utility/agent-components/agent-command-header.md +0 -1
  359. package/src/utility/agent-components/agent.customize.template.yaml +0 -41
  360. package/src/utility/agent-components/handler-action.txt +0 -4
  361. package/src/utility/agent-components/handler-data.txt +0 -5
  362. package/src/utility/agent-components/handler-exec.txt +0 -6
  363. package/src/utility/agent-components/handler-multi.txt +0 -13
  364. package/src/utility/agent-components/handler-tmpl.txt +0 -5
  365. package/src/utility/agent-components/menu-handlers.txt +0 -6
  366. package/src/xmc/agents/analyst.agent.yaml +0 -47
  367. package/src/xmc/agents/architect.agent.yaml +0 -29
  368. package/src/xmc/agents/dev.agent.yaml +0 -38
  369. package/src/xmc/agents/pm.agent.yaml +0 -44
  370. package/src/xmc/agents/qa.agent.yaml +0 -58
  371. package/src/xmc/agents/quick-flow-solo-dev.agent.yaml +0 -36
  372. package/src/xmc/agents/sm.agent.yaml +0 -53
  373. package/src/xmc/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +0 -224
  374. package/src/xmc/agents/tech-writer/tech-writer.agent.yaml +0 -46
  375. package/src/xmc/agents/tech-writer/xiaoma-skill-manifest.yaml +0 -3
  376. package/src/xmc/agents/ux-designer.agent.yaml +0 -27
  377. package/src/xmc/agents/xiaoma-skill-manifest.yaml +0 -39
  378. package/src/xmc/data/project-context-template.md +0 -26
  379. package/src/xmc/module-help.csv +0 -32
  380. package/src/xmc/module.yaml +0 -50
  381. package/src/xmc/teams/default-party.csv +0 -20
  382. package/src/xmc/teams/team-fullstack.yaml +0 -12
  383. package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/steps/step-08-finalize.md +0 -124
  384. package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/workflow.md +0 -107
  385. package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/xiaoma-skill-manifest.yaml +0 -3
  386. package/src/xmc/workflows/1-analysis/research/market-steps/step-01-init.md +0 -182
  387. package/src/xmc/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +0 -237
  388. package/src/xmc/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +0 -249
  389. package/src/xmc/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +0 -259
  390. package/src/xmc/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +0 -177
  391. package/src/xmc/workflows/1-analysis/research/market-steps/step-06-research-completion.md +0 -476
  392. package/src/xmc/workflows/1-analysis/research/xiaoma-domain-research/SKILL.md +0 -6
  393. package/src/xmc/workflows/1-analysis/research/xiaoma-domain-research/workflow.md +0 -49
  394. package/src/xmc/workflows/1-analysis/research/xiaoma-domain-research/xiaoma-skill-manifest.yaml +0 -1
  395. package/src/xmc/workflows/1-analysis/research/xiaoma-market-research/SKILL.md +0 -6
  396. package/src/xmc/workflows/1-analysis/research/xiaoma-market-research/workflow.md +0 -49
  397. package/src/xmc/workflows/1-analysis/research/xiaoma-market-research/xiaoma-skill-manifest.yaml +0 -1
  398. package/src/xmc/workflows/1-analysis/research/xiaoma-technical-research/SKILL.md +0 -6
  399. package/src/xmc/workflows/1-analysis/research/xiaoma-technical-research/research.template.md +0 -29
  400. package/src/xmc/workflows/1-analysis/research/xiaoma-technical-research/workflow.md +0 -50
  401. package/src/xmc/workflows/1-analysis/research/xiaoma-technical-research/xiaoma-skill-manifest.yaml +0 -1
  402. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/SKILL.md +0 -6
  403. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/product-brief.template.md +0 -10
  404. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-01-init.md +0 -170
  405. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-01b-continue.md +0 -158
  406. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-02-vision.md +0 -193
  407. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-03-users.md +0 -196
  408. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-04-metrics.md +0 -199
  409. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-05-scope.md +0 -213
  410. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-06-complete.md +0 -159
  411. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/workflow.md +0 -55
  412. package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/xiaoma-skill-manifest.yaml +0 -1
  413. package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/xiaoma-skill-manifest.yaml +0 -1
  414. package/src/xmc/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +0 -15
  415. package/src/xmc/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +0 -197
  416. package/src/xmc/workflows/2-plan-workflows/create-prd/data/project-types.csv +0 -11
  417. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +0 -224
  418. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +0 -191
  419. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +0 -209
  420. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +0 -174
  421. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -214
  422. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +0 -228
  423. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +0 -217
  424. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -205
  425. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -243
  426. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +0 -263
  427. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +0 -209
  428. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -264
  429. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +0 -242
  430. package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +0 -232
  431. package/src/xmc/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +0 -65
  432. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/SKILL.md +0 -6
  433. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-01-init.md +0 -135
  434. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-01b-continue.md +0 -127
  435. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-02-discovery.md +0 -190
  436. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-03-core-experience.md +0 -217
  437. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-04-emotional-response.md +0 -220
  438. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-05-inspiration.md +0 -235
  439. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-06-design-system.md +0 -253
  440. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-07-defining-experience.md +0 -255
  441. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-08-visual-foundation.md +0 -225
  442. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-09-design-directions.md +0 -225
  443. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-10-user-journeys.md +0 -242
  444. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-11-component-strategy.md +0 -249
  445. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-12-ux-patterns.md +0 -238
  446. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-13-responsive-accessibility.md +0 -265
  447. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/steps/step-14-complete.md +0 -171
  448. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/ux-design-template.md +0 -13
  449. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/workflow.md +0 -36
  450. package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/xiaoma-skill-manifest.yaml +0 -1
  451. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/SKILL.md +0 -6
  452. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-01-discovery.md +0 -242
  453. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-01b-legacy-conversion.md +0 -204
  454. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-02-review.md +0 -245
  455. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-03-edit.md +0 -250
  456. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-04-complete.md +0 -165
  457. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/workflow.md +0 -63
  458. package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/xiaoma-skill-manifest.yaml +0 -1
  459. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/SKILL.md +0 -6
  460. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/data/domain-complexity.csv +0 -15
  461. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/data/prd-purpose.md +0 -197
  462. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/data/prd-quality-rubric.csv +0 -14
  463. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/data/project-types.csv +0 -11
  464. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-01-discovery.md +0 -221
  465. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-02-format-detection.md +0 -188
  466. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-02b-parity-check.md +0 -206
  467. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-03-density-validation.md +0 -171
  468. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -211
  469. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -225
  470. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -214
  471. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -202
  472. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -240
  473. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -260
  474. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-10-smart-validation.md +0 -206
  475. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +0 -261
  476. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -239
  477. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-13-report-complete.md +0 -229
  478. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/workflow.md +0 -62
  479. package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/xiaoma-skill-manifest.yaml +0 -1
  480. package/src/xmc/workflows/3-solutioning/xiaoma-check-implementation-readiness/SKILL.md +0 -6
  481. package/src/xmc/workflows/3-solutioning/xiaoma-check-implementation-readiness/workflow.md +0 -49
  482. package/src/xmc/workflows/3-solutioning/xiaoma-check-implementation-readiness/xiaoma-skill-manifest.yaml +0 -1
  483. package/src/xmc/workflows/3-solutioning/xiaoma-create-architecture/SKILL.md +0 -6
  484. package/src/xmc/workflows/3-solutioning/xiaoma-create-architecture/workflow.md +0 -38
  485. package/src/xmc/workflows/3-solutioning/xiaoma-create-architecture/xiaoma-skill-manifest.yaml +0 -1
  486. package/src/xmc/workflows/3-solutioning/xiaoma-create-epics-and-stories/SKILL.md +0 -6
  487. package/src/xmc/workflows/3-solutioning/xiaoma-create-epics-and-stories/workflow.md +0 -53
  488. package/src/xmc/workflows/3-solutioning/xiaoma-create-epics-and-stories/xiaoma-skill-manifest.yaml +0 -1
  489. package/src/xmc/workflows/4-implementation/auto-story-pipeline/checklist.md +0 -22
  490. package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-02-create-story.md +0 -102
  491. package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-05-code-review.md +0 -95
  492. package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-08-complete-story.md +0 -114
  493. package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-09-finalize.md +0 -69
  494. package/src/xmc/workflows/4-implementation/auto-story-pipeline/workflow.md +0 -89
  495. package/src/xmc/workflows/4-implementation/auto-story-pipeline/xiaoma-skill-manifest.yaml +0 -3
  496. package/src/xmc/workflows/4-implementation/xiaoma-code-review/SKILL.md +0 -6
  497. package/src/xmc/workflows/4-implementation/xiaoma-code-review/checklist.md +0 -23
  498. package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-01-gather-context.md +0 -61
  499. package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-02-review.md +0 -41
  500. package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-04-present.md +0 -38
  501. package/src/xmc/workflows/4-implementation/xiaoma-code-review/workflow.md +0 -54
  502. package/src/xmc/workflows/4-implementation/xiaoma-code-review/xiaoma-skill-manifest.yaml +0 -1
  503. package/src/xmc/workflows/4-implementation/xiaoma-correct-course/SKILL.md +0 -6
  504. package/src/xmc/workflows/4-implementation/xiaoma-correct-course/xiaoma-skill-manifest.yaml +0 -1
  505. package/src/xmc/workflows/4-implementation/xiaoma-create-story/SKILL.md +0 -6
  506. package/src/xmc/workflows/4-implementation/xiaoma-create-story/discover-inputs.md +0 -88
  507. package/src/xmc/workflows/4-implementation/xiaoma-create-story/xiaoma-skill-manifest.yaml +0 -1
  508. package/src/xmc/workflows/4-implementation/xiaoma-dev-story/SKILL.md +0 -6
  509. package/src/xmc/workflows/4-implementation/xiaoma-dev-story/xiaoma-skill-manifest.yaml +0 -1
  510. package/src/xmc/workflows/4-implementation/xiaoma-retrospective/SKILL.md +0 -6
  511. package/src/xmc/workflows/4-implementation/xiaoma-retrospective/xiaoma-skill-manifest.yaml +0 -1
  512. package/src/xmc/workflows/4-implementation/xiaoma-sprint-planning/SKILL.md +0 -6
  513. package/src/xmc/workflows/4-implementation/xiaoma-sprint-planning/xiaoma-skill-manifest.yaml +0 -1
  514. package/src/xmc/workflows/4-implementation/xiaoma-sprint-status/SKILL.md +0 -6
  515. package/src/xmc/workflows/4-implementation/xiaoma-sprint-status/xiaoma-skill-manifest.yaml +0 -1
  516. package/src/xmc/workflows/xiaoma-document-project/SKILL.md +0 -6
  517. package/src/xmc/workflows/xiaoma-document-project/workflow.md +0 -27
  518. package/src/xmc/workflows/xiaoma-document-project/xiaoma-skill-manifest.yaml +0 -1
  519. package/src/xmc/workflows/xiaoma-generate-project-context/SKILL.md +0 -6
  520. package/src/xmc/workflows/xiaoma-generate-project-context/workflow.md +0 -43
  521. package/src/xmc/workflows/xiaoma-generate-project-context/xiaoma-skill-manifest.yaml +0 -1
  522. package/src/xmc/workflows/xiaoma-qa-generate-e2e-tests/SKILL.md +0 -6
  523. package/src/xmc/workflows/xiaoma-qa-generate-e2e-tests/xiaoma-skill-manifest.yaml +0 -1
  524. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/SKILL.md +0 -6
  525. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-01-mode-detection.md +0 -169
  526. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-02-context-gathering.md +0 -114
  527. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-03-execute.md +0 -107
  528. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-04-self-check.md +0 -107
  529. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-05-adversarial-review.md +0 -94
  530. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-06-resolve-findings.md +0 -144
  531. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/workflow.md +0 -38
  532. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/xiaoma-skill-manifest.yaml +0 -1
  533. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/xiaoma-skill-manifest.yaml +0 -1
  534. package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-spec/xiaoma-skill-manifest.yaml +0 -1
  535. package/tools/cli/commands/install.js +0 -87
  536. package/tools/cli/external-official-modules.yaml +0 -4
  537. package/tools/cli/installers/lib/core/custom-module-cache.js +0 -260
  538. package/tools/cli/installers/lib/core/dependency-resolver.js +0 -743
  539. package/tools/cli/installers/lib/core/detector.js +0 -223
  540. package/tools/cli/installers/lib/core/ide-config-manager.js +0 -157
  541. package/tools/cli/installers/lib/core/installer.js +0 -3212
  542. package/tools/cli/installers/lib/core/manifest-generator.js +0 -1374
  543. package/tools/cli/installers/lib/core/manifest.js +0 -1040
  544. package/tools/cli/installers/lib/custom/handler.js +0 -358
  545. package/tools/cli/installers/lib/ide/_base-ide.js +0 -673
  546. package/tools/cli/installers/lib/ide/_config-driven.js +0 -1058
  547. package/tools/cli/installers/lib/ide/platform-codes.js +0 -100
  548. package/tools/cli/installers/lib/ide/platform-codes.yaml +0 -321
  549. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +0 -181
  550. package/tools/cli/installers/lib/ide/shared/module-injections.js +0 -136
  551. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +0 -368
  552. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +0 -179
  553. package/tools/cli/installers/lib/ide/shared/xiaoma-artifacts.js +0 -181
  554. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +0 -14
  555. package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +0 -8
  556. package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +0 -15
  557. package/tools/cli/installers/lib/ide/templates/combined/default-task.md +0 -10
  558. package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +0 -10
  559. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +0 -6
  560. package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +0 -14
  561. package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +0 -11
  562. package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +0 -11
  563. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +0 -16
  564. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +0 -14
  565. package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +0 -16
  566. package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +0 -9
  567. package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +0 -9
  568. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +0 -7
  569. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +0 -15
  570. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +0 -13
  571. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +0 -13
  572. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +0 -16
  573. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +0 -16
  574. package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +0 -9
  575. package/tools/cli/installers/lib/ide/templates/combined/trae.md +0 -9
  576. package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +0 -10
  577. package/tools/cli/installers/lib/ide/templates/split/.gitkeep +0 -0
  578. package/tools/cli/installers/lib/modules/external-manager.js +0 -136
  579. package/tools/cli/installers/lib/modules/manager.js +0 -1382
  580. package/tools/cli/lib/activation-builder.js +0 -165
  581. package/tools/cli/lib/agent/compiler.js +0 -516
  582. package/tools/cli/lib/agent/installer.js +0 -680
  583. package/tools/cli/lib/agent/template-engine.js +0 -152
  584. package/tools/cli/lib/agent-analyzer.js +0 -97
  585. package/tools/cli/lib/agent-party-generator.js +0 -194
  586. package/tools/cli/lib/cli-utils.js +0 -182
  587. package/tools/cli/lib/config.js +0 -213
  588. package/tools/cli/lib/platform-codes.js +0 -116
  589. package/tools/cli/lib/project-root.js +0 -77
  590. package/tools/cli/lib/ui.js +0 -1960
  591. package/tools/cli/lib/xml-handler.js +0 -177
  592. package/tools/cli/lib/xml-to-markdown.js +0 -82
  593. package/tools/cli/lib/yaml-xml-builder.js +0 -570
  594. package/tools/platform-codes.yaml +0 -157
  595. package/tools/schema/agent.js +0 -489
  596. package//344/270/223/345/210/251/344/272/244/345/272/225/344/271/246_1_/351/235/242/345/220/221AI/346/231/272/350/203/275/344/275/223/347/232/204/345/244/232/351/200/232/351/201/223/344/276/235/350/265/226_20260318.md +0 -483
  597. package//344/270/223/345/210/251/344/272/244/345/272/225/344/271/246_2_/345/237/272/344/272/216/351/205/215/347/275/256/351/251/261/345/212/250/347/232/204/350/267/250/345/271/263/345/217/260IDE/346/231/272/350/203/275_20260318.md +0 -592
  598. package//344/270/223/345/210/251/344/272/244/345/272/225/344/271/246_3_AI/346/231/272/350/203/275/344/275/223/345/243/260/346/230/216/345/274/217/345/256/232/344/271/211/347/232/204/347/274/226/350/257/221/346/265/201/346/260/264_20260318.md +0 -624
  599. package//344/270/223/345/210/251/344/272/244/345/272/225/344/271/246_4_/345/237/272/344/272/216/345/223/210/345/270/214/346/214/207/347/272/271/347/232/204/346/231/272/350/203/275/344/275/223/351/231/204/345/261/236/350/265/204/346/272/220/351/200/211_20260318.md +0 -628
  600. package//344/270/223/345/210/251/344/272/244/345/272/225/344/271/246_5_AI/346/231/272/350/203/275/344/275/223/350/247/246/345/217/221/346/214/207/344/273/244/347/232/204/345/244/215/345/220/210/346/240/274/345/274/217/346/240/241_20260318.md +0 -652
  601. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/SKILL.md +0 -0
  602. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/brain-methods.csv +0 -0
  603. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-01-session-setup.md +0 -0
  604. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-01b-continue.md +0 -0
  605. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-02a-user-selected.md +0 -0
  606. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-02b-ai-recommended.md +0 -0
  607. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-02c-random-selection.md +0 -0
  608. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-02d-progressive-flow.md +0 -0
  609. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/steps/step-04-idea-organization.md +0 -0
  610. /package/src/{core/skills → core-skills}/xiaoma-brainstorming/template.md +0 -0
  611. /package/src/{core/skills → core-skills}/xiaoma-distillator/SKILL.md +0 -0
  612. /package/src/{core/skills → core-skills}/xiaoma-distillator/agents/distillate-compressor.md +0 -0
  613. /package/src/{core/skills → core-skills}/xiaoma-distillator/agents/round-trip-reconstructor.md +0 -0
  614. /package/src/{core/skills → core-skills}/xiaoma-distillator/resources/compression-rules.md +0 -0
  615. /package/src/{core/skills → core-skills}/xiaoma-distillator/resources/splitting-strategy.md +0 -0
  616. /package/src/{core/skills → core-skills}/xiaoma-distillator/scripts/tests/test_analyze_sources.py +0 -0
  617. /package/src/{core/skills → core-skills}/xiaoma-distillator/xiaoma-skill-manifest.yaml +0 -0
  618. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-domain-research/domain-steps/step-01-init.md +0 -0
  619. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-domain-research/domain-steps/step-02-domain-analysis.md +0 -0
  620. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-domain-research/domain-steps/step-03-competitive-landscape.md +0 -0
  621. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-domain-research/domain-steps/step-04-regulatory-focus.md +0 -0
  622. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-domain-research/domain-steps/step-05-technical-trends.md +0 -0
  623. /package/src/{xmc/workflows/1-analysis/research → xmc-skills/1-analysis/research/xiaoma-domain-research}/research.template.md +0 -0
  624. /package/src/{xmc/workflows/1-analysis/research/xiaoma-domain-research → xmc-skills/1-analysis/research/xiaoma-market-research}/research.template.md +0 -0
  625. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-market-research/steps/step-01-init.md +0 -0
  626. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-market-research/steps/step-02-customer-behavior.md +0 -0
  627. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-market-research/steps/step-03-customer-pain-points.md +0 -0
  628. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-market-research/steps/step-04-customer-decisions.md +0 -0
  629. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-market-research/steps/step-05-competitive-analysis.md +0 -0
  630. /package/src/{xmc/workflows/1-analysis/research/xiaoma-market-research → xmc-skills/1-analysis/research/xiaoma-technical-research}/research.template.md +0 -0
  631. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-technical-research/technical-steps/step-01-init.md +0 -0
  632. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-technical-research/technical-steps/step-02-technical-overview.md +0 -0
  633. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-technical-research/technical-steps/step-03-integration-patterns.md +0 -0
  634. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-technical-research/technical-steps/step-04-architectural-patterns.md +0 -0
  635. /package/src/{xmc/workflows → xmc-skills}/1-analysis/research/xiaoma-technical-research/technical-steps/step-05-implementation-research.md +0 -0
  636. /package/src/{xmc/workflows/1-analysis/auto-requirements-pipeline → xmc-skills/1-analysis/xiaoma-auto-requirements-pipeline}/SKILL.md +0 -0
  637. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/checklist.md +0 -0
  638. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/documentation-requirements.csv +0 -0
  639. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/instructions.md +0 -0
  640. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/templates/deep-dive-template.md +0 -0
  641. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/templates/index-template.md +0 -0
  642. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/templates/project-overview-template.md +0 -0
  643. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/templates/project-scan-report-schema.json +0 -0
  644. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/templates/source-tree-template.md +0 -0
  645. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/workflows/deep-dive-workflow.md +0 -0
  646. /package/src/{xmc/workflows → xmc-skills/1-analysis}/xiaoma-document-project/workflows/full-scan-workflow.md +0 -0
  647. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/SKILL.md +0 -0
  648. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/agents/artifact-analyzer.md +0 -0
  649. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/agents/opportunity-reviewer.md +0 -0
  650. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/agents/skeptic-reviewer.md +0 -0
  651. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/agents/web-researcher.md +0 -0
  652. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/prompts/contextual-discovery.md +0 -0
  653. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/prompts/draft-and-review.md +0 -0
  654. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/prompts/finalize.md +0 -0
  655. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/prompts/guided-elicitation.md +0 -0
  656. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/resources/brief-template.md +0 -0
  657. /package/src/{xmc/workflows → xmc-skills}/1-analysis/xiaoma-product-brief-preview/xiaoma-manifest.json +0 -0
  658. /package/src/{core/skills/xiaoma-advanced-elicitation → xmc-skills/1-analysis/xiaoma-product-brief-preview}/xiaoma-skill-manifest.yaml +0 -0
  659. /package/src/{core/tasks/xiaoma-create-prd/data → xmc-skills/2-plan-workflows/xiaoma-prd/assets}/domain-complexity.csv +0 -0
  660. /package/src/{core/tasks/xiaoma-create-prd/data → xmc-skills/2-plan-workflows/xiaoma-prd/assets}/project-types.csv +0 -0
  661. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/steps/step-04-ux-alignment.md +0 -0
  662. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/steps/step-05-epic-quality-review.md +0 -0
  663. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-check-implementation-readiness/templates/readiness-report-template.md +0 -0
  664. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/architecture-decision-template.md +0 -0
  665. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/data/domain-complexity.csv +0 -0
  666. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/data/project-types.csv +0 -0
  667. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-01-init.md +0 -0
  668. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-01b-continue.md +0 -0
  669. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-02-context.md +0 -0
  670. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-03-starter.md +0 -0
  671. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-04-decisions.md +0 -0
  672. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-05-patterns.md +0 -0
  673. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-architecture/steps/step-06-structure.md +0 -0
  674. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-epics-and-stories/steps/step-01-validate-prerequisites.md +0 -0
  675. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-epics-and-stories/steps/step-03-create-stories.md +0 -0
  676. /package/src/{xmc/workflows → xmc-skills}/3-solutioning/xiaoma-create-epics-and-stories/templates/epics-template.md +0 -0
  677. /package/src/{xmc/workflows → xmc-skills/3-solutioning}/xiaoma-generate-project-context/project-context-template.md +0 -0
  678. /package/src/{xmc/workflows → xmc-skills/3-solutioning}/xiaoma-generate-project-context/steps/step-01-discover.md +0 -0
  679. /package/src/{xmc/workflows → xmc-skills/3-solutioning}/xiaoma-generate-project-context/steps/step-02-generate.md +0 -0
  680. /package/src/{xmc/workflows/4-implementation/auto-story-pipeline → xmc-skills/4-implementation/xiaoma-auto-story-pipeline}/SKILL.md +0 -0
  681. /package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-create-story/checklist.md +0 -0
  682. /package/src/{xmc/workflows/4-implementation/xiaoma-code-review → xmc-skills/4-implementation/xiaoma-create-story}/discover-inputs.md +0 -0
  683. /package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-create-story/template.md +0 -0
  684. /package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-dev-story/checklist.md +0 -0
  685. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/SKILL.md +0 -0
  686. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/steps/step-01-clarify-and-route.md +0 -0
  687. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/steps/step-02-plan.md +0 -0
  688. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/steps/step-03-implement.md +0 -0
  689. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/steps/step-04-review.md +0 -0
  690. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/steps/step-05-present.md +0 -0
  691. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/tech-spec-template.md +0 -0
  692. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-dev-new-preview/workflow.md +0 -0
  693. /package/src/{core/skills/xiaoma-brainstorming → xmc-skills/4-implementation/xiaoma-quick-dev-new-preview}/xiaoma-skill-manifest.yaml +0 -0
  694. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/SKILL.md +0 -0
  695. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/steps/step-01-understand.md +0 -0
  696. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/steps/step-02-investigate.md +0 -0
  697. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/steps/step-03-generate.md +0 -0
  698. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/steps/step-04-review.md +0 -0
  699. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/tech-spec-template.md +0 -0
  700. /package/src/{xmc/workflows/xiaoma-quick-flow → xmc-skills/4-implementation}/xiaoma-quick-spec/workflow.md +0 -0
  701. /package/src/{core/skills/xiaoma-editorial-review-prose → xmc-skills/4-implementation/xiaoma-quick-spec}/xiaoma-skill-manifest.yaml +0 -0
  702. /package/src/{xmc/workflows → xmc-skills}/4-implementation/xiaoma-sprint-planning/checklist.md +0 -0
  703. /package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/SKILL.md +0 -0
  704. /package/src/{xmc/workflows/5-full-pipeline/auto-full-pipeline → xmc-skills/5-full-pipeline/xiaoma-auto-full-pipeline}/xiaoma-skill-manifest.yaml +0 -0
  705. /package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/SKILL.md +0 -0
  706. /package/src/{xmc/workflows/5-full-pipeline/auto-prd-to-stories → xmc-skills/5-full-pipeline/xiaoma-auto-prd-to-stories}/xiaoma-skill-manifest.yaml +0 -0
  707. /package/{patent-disclosure-optimized → src/xpm-skills/xiaoma-patent-mining}/references/disclosure-template.md +0 -0
  708. /package/{patent-disclosure-optimized → src/xpm-skills/xiaoma-patent-mining}/references/docx-format-spec.md +0 -0
  709. /package/{patent-disclosure-optimized → src/xpm-skills/xiaoma-patent-mining}/references/mining-principles.md +0 -0
  710. /package/{patent-disclosure-optimized → src/xpm-skills/xiaoma-patent-mining}/scripts/md2docx.js +0 -0
  711. /package/src/{core/skills/xiaoma-editorial-review-structure → xpm-skills/xiaoma-patent-mining}/xiaoma-skill-manifest.yaml +0 -0
  712. /package/tools/{cli/installers → installer}/install-messages.yaml +0 -0
@@ -1,1374 +0,0 @@
1
- const path = require('node:path');
2
- const fs = require('fs-extra');
3
- const yaml = require('yaml');
4
- const crypto = require('node:crypto');
5
- const csv = require('csv-parse/sync');
6
- const { getSourcePath, getModulePath } = require('../../../lib/project-root');
7
- const prompts = require('../../../lib/prompts');
8
- const {
9
- loadSkillManifest: loadSkillManifestShared,
10
- getCanonicalId: getCanonicalIdShared,
11
- getArtifactType: getArtifactTypeShared,
12
- getInstallToXiaoma: getInstallToXiaomaShared,
13
- } = require('../ide/shared/skill-manifest');
14
-
15
- // Load package.json for version info
16
- const packageJson = require('../../../../../package.json');
17
-
18
- /**
19
- * Generates manifest files for installed workflows, agents, and tasks
20
- */
21
- class ManifestGenerator {
22
- constructor() {
23
- this.workflows = [];
24
- this.skills = [];
25
- this.agents = [];
26
- this.tasks = [];
27
- this.tools = [];
28
- this.modules = [];
29
- this.files = [];
30
- this.selectedIdes = [];
31
- }
32
-
33
- /** Delegate to shared skill-manifest module */
34
- async loadSkillManifest(dirPath) {
35
- return loadSkillManifestShared(dirPath);
36
- }
37
-
38
- /** Delegate to shared skill-manifest module */
39
- getCanonicalId(manifest, filename) {
40
- return getCanonicalIdShared(manifest, filename);
41
- }
42
-
43
- /** Delegate to shared skill-manifest module */
44
- getArtifactType(manifest, filename) {
45
- return getArtifactTypeShared(manifest, filename);
46
- }
47
-
48
- /** Delegate to shared skill-manifest module */
49
- getInstallToXiaoma(manifest, filename) {
50
- return getInstallToXiaomaShared(manifest, filename);
51
- }
52
-
53
- /**
54
- * Clean text for CSV output by normalizing whitespace.
55
- * Note: Quote escaping is handled by escapeCsv() at write time.
56
- * @param {string} text - Text to clean
57
- * @returns {string} Cleaned text
58
- */
59
- cleanForCSV(text) {
60
- if (!text) return '';
61
- return text.trim().replaceAll(/\s+/g, ' '); // Normalize all whitespace (including newlines) to single space
62
- }
63
-
64
- /**
65
- * Generate all manifests for the installation
66
- * @param {string} xiaomaDir - _xiaoma
67
- * @param {Array} selectedModules - Selected modules for installation
68
- * @param {Array} installedFiles - All installed files (optional, for hash tracking)
69
- */
70
- async generateManifests(xiaomaDir, selectedModules, installedFiles = [], options = {}) {
71
- // Create _config directory if it doesn't exist
72
- const cfgDir = path.join(xiaomaDir, '_config');
73
- await fs.ensureDir(cfgDir);
74
-
75
- // Store modules list (all modules including preserved ones)
76
- const preservedModules = options.preservedModules || [];
77
-
78
- // Scan the xiaoma directory to find all actually installed modules
79
- const installedModules = await this.scanInstalledModules(xiaomaDir);
80
-
81
- // Since custom modules are now installed the same way as regular modules,
82
- // we don't need to exclude them from manifest generation
83
- const allModules = [...new Set(['core', ...selectedModules, ...preservedModules, ...installedModules])];
84
-
85
- this.modules = allModules;
86
- this.updatedModules = allModules; // Include ALL modules (including custom) for scanning
87
-
88
- // For CSV manifests, we need to include ALL modules that are installed
89
- // preservedModules controls which modules stay as-is in the CSV (don't get rescanned)
90
- // But all modules should be included in the final manifest
91
- this.preservedModules = allModules; // Include ALL modules (including custom)
92
- this.xiaomaDir = xiaomaDir;
93
- this.xiaomaFolderName = path.basename(xiaomaDir); // Get the actual folder name (e.g., '_xiaoma' or 'xiaoma')
94
- this.allInstalledFiles = installedFiles;
95
-
96
- if (!Object.prototype.hasOwnProperty.call(options, 'ides')) {
97
- throw new Error('ManifestGenerator requires `options.ides` to be provided – installer should supply the selected IDEs array.');
98
- }
99
-
100
- const resolvedIdes = options.ides ?? [];
101
- if (!Array.isArray(resolvedIdes)) {
102
- throw new TypeError('ManifestGenerator expected `options.ides` to be an array.');
103
- }
104
-
105
- // Filter out any undefined/null values from IDE list
106
- this.selectedIdes = resolvedIdes.filter((ide) => ide && typeof ide === 'string');
107
-
108
- // Reset files list (defensive: prevent stale data if instance is reused)
109
- this.files = [];
110
-
111
- // Collect skills first (populates skillClaimedDirs before legacy collectors run)
112
- await this.collectSkills();
113
-
114
- // Collect workflow data
115
- await this.collectWorkflows(selectedModules);
116
-
117
- // Collect agent data - use updatedModules which includes all installed modules
118
- await this.collectAgents(this.updatedModules);
119
-
120
- // Collect task data
121
- await this.collectTasks(this.updatedModules);
122
-
123
- // Collect tool data
124
- await this.collectTools(this.updatedModules);
125
-
126
- // Write manifest files and collect their paths
127
- const manifestFiles = [
128
- await this.writeMainManifest(cfgDir),
129
- await this.writeWorkflowManifest(cfgDir),
130
- await this.writeSkillManifest(cfgDir),
131
- await this.writeAgentManifest(cfgDir),
132
- await this.writeTaskManifest(cfgDir),
133
- await this.writeToolManifest(cfgDir),
134
- await this.writeFilesManifest(cfgDir),
135
- ];
136
-
137
- return {
138
- skills: this.skills.length,
139
- workflows: this.workflows.length,
140
- agents: this.agents.length,
141
- tasks: this.tasks.length,
142
- tools: this.tools.length,
143
- files: this.files.length,
144
- manifestFiles: manifestFiles,
145
- };
146
- }
147
-
148
- /**
149
- * Recursively walk a module directory tree, collecting skill directories.
150
- * A skill directory is one that contains both a xiaoma-skill-manifest.yaml with
151
- * type: skill AND a SKILL.md file with name/description frontmatter.
152
- * Populates this.skills[] and this.skillClaimedDirs (Set of absolute paths).
153
- */
154
- async collectSkills() {
155
- this.skills = [];
156
- this.skillClaimedDirs = new Set();
157
- const debug = process.env.XiaoMa_DEBUG_MANIFEST === 'true';
158
-
159
- for (const moduleName of this.updatedModules) {
160
- const modulePath = path.join(this.xiaomaDir, moduleName);
161
- if (!(await fs.pathExists(modulePath))) continue;
162
-
163
- // Recursive walk skipping . and _ prefixed dirs
164
- const walk = async (dir) => {
165
- let entries;
166
- try {
167
- entries = await fs.readdir(dir, { withFileTypes: true });
168
- } catch {
169
- return;
170
- }
171
-
172
- // Check this directory for skill manifest
173
- const manifest = await this.loadSkillManifest(dir);
174
-
175
- // Determine if this directory is a skill (type: skill in manifest)
176
- const skillFile = 'SKILL.md';
177
- const artifactType = this.getArtifactType(manifest, skillFile);
178
-
179
- if (artifactType === 'skill') {
180
- const skillMdPath = path.join(dir, 'SKILL.md');
181
- const dirName = path.basename(dir);
182
-
183
- // Validate and parse SKILL.md
184
- const skillMeta = await this.parseSkillMd(skillMdPath, dir, dirName, debug);
185
-
186
- if (skillMeta) {
187
- // Build path relative from module root (points to SKILL.md — the permanent entrypoint)
188
- const relativePath = path.relative(modulePath, dir).split(path.sep).join('/');
189
- const installPath = relativePath
190
- ? `${this.xiaomaFolderName}/${moduleName}/${relativePath}/${skillFile}`
191
- : `${this.xiaomaFolderName}/${moduleName}/${skillFile}`;
192
-
193
- // Skills derive canonicalId from directory name — never from manifest
194
- if (manifest && manifest.__single && manifest.__single.canonicalId) {
195
- console.warn(
196
- `Warning: Skill manifest at ${dir}/xiaoma-skill-manifest.yaml contains canonicalId — this field is ignored for skills (directory name is the canonical ID)`,
197
- );
198
- }
199
- const canonicalId = dirName;
200
-
201
- this.skills.push({
202
- name: skillMeta.name,
203
- description: this.cleanForCSV(skillMeta.description),
204
- module: moduleName,
205
- path: installPath,
206
- canonicalId,
207
- install_to_xiaoma: this.getInstallToXiaoma(manifest, skillFile),
208
- });
209
-
210
- // Add to files list
211
- this.files.push({
212
- type: 'skill',
213
- name: skillMeta.name,
214
- module: moduleName,
215
- path: installPath,
216
- });
217
-
218
- this.skillClaimedDirs.add(dir);
219
-
220
- if (debug) {
221
- console.log(`[DEBUG] collectSkills: claimed skill "${skillMeta.name}" as ${canonicalId} at ${dir}`);
222
- }
223
- }
224
- }
225
-
226
- // Warn if manifest says type:skill but directory was not claimed
227
- if (manifest && !this.skillClaimedDirs.has(dir)) {
228
- let hasSkillType = false;
229
- if (manifest.__single) {
230
- hasSkillType = manifest.__single.type === 'skill';
231
- } else {
232
- for (const key of Object.keys(manifest)) {
233
- if (manifest[key]?.type === 'skill') {
234
- hasSkillType = true;
235
- break;
236
- }
237
- }
238
- }
239
- if (hasSkillType && debug) {
240
- console.log(`[DEBUG] collectSkills: dir has type:skill manifest but failed validation: ${dir}`);
241
- }
242
- }
243
-
244
- // Recurse into subdirectories
245
- for (const entry of entries) {
246
- if (!entry.isDirectory()) continue;
247
- if (entry.name.startsWith('.') || entry.name.startsWith('_')) continue;
248
- await walk(path.join(dir, entry.name));
249
- }
250
- };
251
-
252
- await walk(modulePath);
253
- }
254
-
255
- if (debug) {
256
- console.log(`[DEBUG] collectSkills: total skills found: ${this.skills.length}, claimed dirs: ${this.skillClaimedDirs.size}`);
257
- }
258
- }
259
-
260
- /**
261
- * Parse and validate SKILL.md for a skill directory.
262
- * Returns parsed frontmatter object with name/description, or null if invalid.
263
- * @param {string} skillMdPath - Absolute path to SKILL.md
264
- * @param {string} dir - Skill directory path (for error messages)
265
- * @param {string} dirName - Expected name (must match frontmatter name)
266
- * @param {boolean} debug - Whether to emit debug-level messages
267
- * @returns {Promise<Object|null>} Parsed frontmatter or null
268
- */
269
- async parseSkillMd(skillMdPath, dir, dirName, debug = false) {
270
- if (!(await fs.pathExists(skillMdPath))) {
271
- if (debug) console.log(`[DEBUG] parseSkillMd: "${dir}" is missing SKILL.md — skipping`);
272
- return null;
273
- }
274
-
275
- try {
276
- const rawContent = await fs.readFile(skillMdPath, 'utf8');
277
- const content = rawContent.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
278
-
279
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
280
- if (frontmatterMatch) {
281
- const skillMeta = yaml.parse(frontmatterMatch[1]);
282
-
283
- if (
284
- !skillMeta ||
285
- typeof skillMeta !== 'object' ||
286
- typeof skillMeta.name !== 'string' ||
287
- typeof skillMeta.description !== 'string' ||
288
- !skillMeta.name ||
289
- !skillMeta.description
290
- ) {
291
- if (debug) console.log(`[DEBUG] parseSkillMd: SKILL.md in "${dir}" is missing name or description (or wrong type) — skipping`);
292
- return null;
293
- }
294
-
295
- if (skillMeta.name !== dirName) {
296
- console.error(`Error: SKILL.md name "${skillMeta.name}" does not match directory name "${dirName}" — skipping`);
297
- return null;
298
- }
299
-
300
- return skillMeta;
301
- }
302
-
303
- if (debug) console.log(`[DEBUG] parseSkillMd: SKILL.md in "${dir}" has no frontmatter — skipping`);
304
- return null;
305
- } catch (error) {
306
- if (debug) console.log(`[DEBUG] parseSkillMd: failed to parse SKILL.md in "${dir}": ${error.message} — skipping`);
307
- return null;
308
- }
309
- }
310
-
311
- /**
312
- * Collect all workflows from core and selected modules
313
- * Scans the INSTALLED xiaoma directory, not the source
314
- */
315
- async collectWorkflows(selectedModules) {
316
- this.workflows = [];
317
-
318
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
319
- for (const moduleName of this.updatedModules) {
320
- const modulePath = path.join(this.xiaomaDir, moduleName);
321
-
322
- if (await fs.pathExists(modulePath)) {
323
- const moduleWorkflows = await this.getWorkflowsFromPath(modulePath, moduleName);
324
- this.workflows.push(...moduleWorkflows);
325
-
326
- // Also scan tasks/ for type:skill entries (skills can live anywhere)
327
- const tasksSkills = await this.getWorkflowsFromPath(modulePath, moduleName, 'tasks');
328
- this.workflows.push(...tasksSkills);
329
- }
330
- }
331
- }
332
-
333
- /**
334
- * Recursively find and parse workflow.md files
335
- */
336
- async getWorkflowsFromPath(basePath, moduleName, subDir = 'workflows') {
337
- const workflows = [];
338
- const workflowsPath = path.join(basePath, subDir);
339
- const debug = process.env.XiaoMa_DEBUG_MANIFEST === 'true';
340
-
341
- if (debug) {
342
- console.log(`[DEBUG] Scanning workflows in: ${workflowsPath}`);
343
- }
344
-
345
- if (!(await fs.pathExists(workflowsPath))) {
346
- if (debug) {
347
- console.log(`[DEBUG] Workflows path does not exist: ${workflowsPath}`);
348
- }
349
- return workflows;
350
- }
351
-
352
- // Recursively find workflow.md files
353
- const findWorkflows = async (dir, relativePath = '') => {
354
- // Skip directories already claimed as skills
355
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dir)) return;
356
-
357
- const entries = await fs.readdir(dir, { withFileTypes: true });
358
- // Load skill manifest for this directory (if present)
359
- const skillManifest = await this.loadSkillManifest(dir);
360
-
361
- for (const entry of entries) {
362
- const fullPath = path.join(dir, entry.name);
363
-
364
- if (entry.isDirectory()) {
365
- // Skip directories claimed by collectSkills
366
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(fullPath)) continue;
367
- // Recurse into subdirectories
368
- const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
369
- await findWorkflows(fullPath, newRelativePath);
370
- } else if (entry.name === 'workflow.md' || (entry.name.startsWith('workflow-') && entry.name.endsWith('.md'))) {
371
- // Parse workflow file (both YAML and MD formats)
372
- if (debug) {
373
- console.log(`[DEBUG] Found workflow file: ${fullPath}`);
374
- }
375
- try {
376
- // Read and normalize line endings (fix Windows CRLF issues)
377
- const rawContent = await fs.readFile(fullPath, 'utf8');
378
- const content = rawContent.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
379
-
380
- // Parse MD workflow with YAML frontmatter
381
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
382
- if (!frontmatterMatch) {
383
- if (debug) {
384
- console.log(`[DEBUG] Skipped (no frontmatter): ${fullPath}`);
385
- }
386
- continue; // Skip MD files without frontmatter
387
- }
388
- const workflow = yaml.parse(frontmatterMatch[1]);
389
-
390
- if (debug) {
391
- console.log(`[DEBUG] Parsed: name="${workflow.name}", description=${workflow.description ? 'OK' : 'MISSING'}`);
392
- }
393
-
394
- // Skip template workflows (those with placeholder values)
395
- if (workflow.name && workflow.name.includes('{') && workflow.name.includes('}')) {
396
- if (debug) {
397
- console.log(`[DEBUG] Skipped (template placeholder): ${workflow.name}`);
398
- }
399
- continue;
400
- }
401
-
402
- // Skip workflows marked as non-standalone (reference/example workflows)
403
- if (workflow.standalone === false) {
404
- if (debug) {
405
- console.log(`[DEBUG] Skipped (standalone=false): ${workflow.name}`);
406
- }
407
- continue;
408
- }
409
-
410
- if (workflow.name && workflow.description) {
411
- // Build relative path for installation
412
- const installPath =
413
- moduleName === 'core'
414
- ? `${this.xiaomaFolderName}/core/${subDir}/${relativePath}/${entry.name}`
415
- : `${this.xiaomaFolderName}/${moduleName}/${subDir}/${relativePath}/${entry.name}`;
416
-
417
- // Workflows with standalone: false are filtered out above
418
- workflows.push({
419
- name: workflow.name,
420
- description: this.cleanForCSV(workflow.description),
421
- module: moduleName,
422
- path: installPath,
423
- canonicalId: this.getCanonicalId(skillManifest, entry.name),
424
- });
425
-
426
- // Add to files list
427
- this.files.push({
428
- type: 'workflow',
429
- name: workflow.name,
430
- module: moduleName,
431
- path: installPath,
432
- });
433
-
434
- if (debug) {
435
- console.log(`[DEBUG] ✓ Added workflow: ${workflow.name} (${moduleName})`);
436
- }
437
- } else {
438
- if (debug) {
439
- console.log(`[DEBUG] Skipped (missing name or description): ${fullPath}`);
440
- }
441
- }
442
- } catch (error) {
443
- await prompts.log.warn(`Failed to parse workflow at ${fullPath}: ${error.message}`);
444
- }
445
- }
446
- }
447
- };
448
-
449
- await findWorkflows(workflowsPath);
450
-
451
- if (debug) {
452
- console.log(`[DEBUG] Total workflows found in ${moduleName}: ${workflows.length}`);
453
- }
454
-
455
- return workflows;
456
- }
457
-
458
- /**
459
- * Collect all agents from core and selected modules
460
- * Scans the INSTALLED xiaoma directory, not the source
461
- */
462
- async collectAgents(selectedModules) {
463
- this.agents = [];
464
-
465
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
466
- for (const moduleName of this.updatedModules) {
467
- const agentsPath = path.join(this.xiaomaDir, moduleName, 'agents');
468
-
469
- if (await fs.pathExists(agentsPath)) {
470
- const moduleAgents = await this.getAgentsFromDir(agentsPath, moduleName);
471
- this.agents.push(...moduleAgents);
472
- }
473
- }
474
-
475
- // Get standalone agents from xiaoma/agents/ directory
476
- const standaloneAgentsDir = path.join(this.xiaomaDir, 'agents');
477
- if (await fs.pathExists(standaloneAgentsDir)) {
478
- const agentDirs = await fs.readdir(standaloneAgentsDir, { withFileTypes: true });
479
-
480
- for (const agentDir of agentDirs) {
481
- if (!agentDir.isDirectory()) continue;
482
-
483
- const agentDirPath = path.join(standaloneAgentsDir, agentDir.name);
484
- const standaloneAgents = await this.getAgentsFromDir(agentDirPath, 'standalone');
485
- this.agents.push(...standaloneAgents);
486
- }
487
- }
488
- }
489
-
490
- /**
491
- * Get agents from a directory recursively
492
- * Only includes compiled .md files (not .agent.yaml source files)
493
- */
494
- async getAgentsFromDir(dirPath, moduleName, relativePath = '') {
495
- // Skip directories claimed by collectSkills
496
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dirPath)) return [];
497
- const agents = [];
498
- const entries = await fs.readdir(dirPath, { withFileTypes: true });
499
- // Load skill manifest for this directory (if present)
500
- const skillManifest = await this.loadSkillManifest(dirPath);
501
-
502
- for (const entry of entries) {
503
- const fullPath = path.join(dirPath, entry.name);
504
-
505
- if (entry.isDirectory()) {
506
- // Skip directories claimed by collectSkills
507
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(fullPath)) continue;
508
- // Recurse into subdirectories
509
- const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
510
- const subDirAgents = await this.getAgentsFromDir(fullPath, moduleName, newRelativePath);
511
- agents.push(...subDirAgents);
512
- } else if (entry.name.endsWith('.md') && !entry.name.endsWith('.agent.yaml') && entry.name.toLowerCase() !== 'readme.md') {
513
- const content = await fs.readFile(fullPath, 'utf8');
514
-
515
- // Skip files that don't contain <agent> tag (e.g., README files)
516
- if (!content.includes('<agent')) {
517
- continue;
518
- }
519
-
520
- // Skip web-only agents
521
- if (content.includes('localskip="true"')) {
522
- continue;
523
- }
524
-
525
- // Extract agent metadata from the XML structure
526
- const nameMatch = content.match(/name="([^"]+)"/);
527
- const titleMatch = content.match(/title="([^"]+)"/);
528
- const iconMatch = content.match(/icon="([^"]+)"/);
529
- const capabilitiesMatch = content.match(/capabilities="([^"]+)"/);
530
-
531
- // Extract persona fields
532
- const roleMatch = content.match(/<role>([^<]+)<\/role>/);
533
- const identityMatch = content.match(/<identity>([\s\S]*?)<\/identity>/);
534
- const styleMatch = content.match(/<communication_style>([\s\S]*?)<\/communication_style>/);
535
- const principlesMatch = content.match(/<principles>([\s\S]*?)<\/principles>/);
536
-
537
- // Build relative path for installation
538
- const fileRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
539
- const installPath =
540
- moduleName === 'core'
541
- ? `${this.xiaomaFolderName}/core/agents/${fileRelativePath}`
542
- : `${this.xiaomaFolderName}/${moduleName}/agents/${fileRelativePath}`;
543
-
544
- const agentName = entry.name.replace('.md', '');
545
-
546
- agents.push({
547
- name: agentName,
548
- displayName: nameMatch ? nameMatch[1] : agentName,
549
- title: titleMatch ? titleMatch[1] : '',
550
- icon: iconMatch ? iconMatch[1] : '',
551
- capabilities: capabilitiesMatch ? this.cleanForCSV(capabilitiesMatch[1]) : '',
552
- role: roleMatch ? this.cleanForCSV(roleMatch[1]) : '',
553
- identity: identityMatch ? this.cleanForCSV(identityMatch[1]) : '',
554
- communicationStyle: styleMatch ? this.cleanForCSV(styleMatch[1]) : '',
555
- principles: principlesMatch ? this.cleanForCSV(principlesMatch[1]) : '',
556
- module: moduleName,
557
- path: installPath,
558
- canonicalId: this.getCanonicalId(skillManifest, entry.name),
559
- });
560
-
561
- // Add to files list
562
- this.files.push({
563
- type: 'agent',
564
- name: agentName,
565
- module: moduleName,
566
- path: installPath,
567
- });
568
- }
569
- }
570
-
571
- return agents;
572
- }
573
-
574
- /**
575
- * Collect all tasks from core and selected modules
576
- * Scans the INSTALLED xiaoma directory, not the source
577
- */
578
- async collectTasks(selectedModules) {
579
- this.tasks = [];
580
-
581
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
582
- for (const moduleName of this.updatedModules) {
583
- const tasksPath = path.join(this.xiaomaDir, moduleName, 'tasks');
584
-
585
- if (await fs.pathExists(tasksPath)) {
586
- const moduleTasks = await this.getTasksFromDir(tasksPath, moduleName);
587
- this.tasks.push(...moduleTasks);
588
- }
589
- }
590
- }
591
-
592
- /**
593
- * Get tasks from a directory
594
- */
595
- async getTasksFromDir(dirPath, moduleName) {
596
- // Skip directories claimed by collectSkills
597
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dirPath)) return [];
598
- const tasks = [];
599
- const files = await fs.readdir(dirPath);
600
- // Load skill manifest for this directory (if present)
601
- const skillManifest = await this.loadSkillManifest(dirPath);
602
-
603
- for (const file of files) {
604
- // Check for both .xml and .md files
605
- if (file.endsWith('.xml') || file.endsWith('.md')) {
606
- const filePath = path.join(dirPath, file);
607
- const content = await fs.readFile(filePath, 'utf8');
608
-
609
- // Skip internal/engine files (not user-facing tasks)
610
- if (content.includes('internal="true"')) {
611
- continue;
612
- }
613
-
614
- let name = file.replace(/\.(xml|md)$/, '');
615
- let displayName = name;
616
- let description = '';
617
- let standalone = false;
618
-
619
- if (file.endsWith('.md')) {
620
- // Parse YAML frontmatter for .md tasks
621
- const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
622
- if (frontmatterMatch) {
623
- try {
624
- const frontmatter = yaml.parse(frontmatterMatch[1]);
625
- name = frontmatter.name || name;
626
- displayName = frontmatter.displayName || frontmatter.name || name;
627
- description = this.cleanForCSV(frontmatter.description || '');
628
- // Tasks are standalone by default unless explicitly false (internal=true is already filtered above)
629
- standalone = frontmatter.standalone !== false && frontmatter.standalone !== 'false';
630
- } catch {
631
- // If YAML parsing fails, use defaults
632
- standalone = true; // Default to standalone
633
- }
634
- } else {
635
- standalone = true; // No frontmatter means standalone
636
- }
637
- } else {
638
- // For .xml tasks, extract from tag attributes
639
- const nameMatch = content.match(/name="([^"]+)"/);
640
- displayName = nameMatch ? nameMatch[1] : name;
641
-
642
- const descMatch = content.match(/description="([^"]+)"/);
643
- const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
644
- description = this.cleanForCSV(descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '');
645
-
646
- const standaloneFalseMatch = content.match(/<task[^>]+standalone="false"/);
647
- standalone = !standaloneFalseMatch;
648
- }
649
-
650
- // Build relative path for installation
651
- const installPath =
652
- moduleName === 'core' ? `${this.xiaomaFolderName}/core/tasks/${file}` : `${this.xiaomaFolderName}/${moduleName}/tasks/${file}`;
653
-
654
- tasks.push({
655
- name: name,
656
- displayName: displayName,
657
- description: description,
658
- module: moduleName,
659
- path: installPath,
660
- standalone: standalone,
661
- canonicalId: this.getCanonicalId(skillManifest, file),
662
- });
663
-
664
- // Add to files list
665
- this.files.push({
666
- type: 'task',
667
- name: name,
668
- module: moduleName,
669
- path: installPath,
670
- });
671
- }
672
- }
673
-
674
- return tasks;
675
- }
676
-
677
- /**
678
- * Collect all tools from core and selected modules
679
- * Scans the INSTALLED xiaoma directory, not the source
680
- */
681
- async collectTools(selectedModules) {
682
- this.tools = [];
683
-
684
- // Use updatedModules which already includes deduplicated 'core' + selectedModules
685
- for (const moduleName of this.updatedModules) {
686
- const toolsPath = path.join(this.xiaomaDir, moduleName, 'tools');
687
-
688
- if (await fs.pathExists(toolsPath)) {
689
- const moduleTools = await this.getToolsFromDir(toolsPath, moduleName);
690
- this.tools.push(...moduleTools);
691
- }
692
- }
693
- }
694
-
695
- /**
696
- * Get tools from a directory
697
- */
698
- async getToolsFromDir(dirPath, moduleName) {
699
- // Skip directories claimed by collectSkills
700
- if (this.skillClaimedDirs && this.skillClaimedDirs.has(dirPath)) return [];
701
- const tools = [];
702
- const files = await fs.readdir(dirPath);
703
- // Load skill manifest for this directory (if present)
704
- const skillManifest = await this.loadSkillManifest(dirPath);
705
-
706
- for (const file of files) {
707
- // Check for both .xml and .md files
708
- if (file.endsWith('.xml') || file.endsWith('.md')) {
709
- const filePath = path.join(dirPath, file);
710
- const content = await fs.readFile(filePath, 'utf8');
711
-
712
- // Skip internal tools (same as tasks)
713
- if (content.includes('internal="true"')) {
714
- continue;
715
- }
716
-
717
- let name = file.replace(/\.(xml|md)$/, '');
718
- let displayName = name;
719
- let description = '';
720
- let standalone = false;
721
-
722
- if (file.endsWith('.md')) {
723
- // Parse YAML frontmatter for .md tools
724
- const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
725
- if (frontmatterMatch) {
726
- try {
727
- const frontmatter = yaml.parse(frontmatterMatch[1]);
728
- name = frontmatter.name || name;
729
- displayName = frontmatter.displayName || frontmatter.name || name;
730
- description = this.cleanForCSV(frontmatter.description || '');
731
- // Tools are standalone by default unless explicitly false (internal=true is already filtered above)
732
- standalone = frontmatter.standalone !== false && frontmatter.standalone !== 'false';
733
- } catch {
734
- // If YAML parsing fails, use defaults
735
- standalone = true; // Default to standalone
736
- }
737
- } else {
738
- standalone = true; // No frontmatter means standalone
739
- }
740
- } else {
741
- // For .xml tools, extract from tag attributes
742
- const nameMatch = content.match(/name="([^"]+)"/);
743
- displayName = nameMatch ? nameMatch[1] : name;
744
-
745
- const descMatch = content.match(/description="([^"]+)"/);
746
- const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
747
- description = this.cleanForCSV(descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '');
748
-
749
- const standaloneFalseMatch = content.match(/<tool[^>]+standalone="false"/);
750
- standalone = !standaloneFalseMatch;
751
- }
752
-
753
- // Build relative path for installation
754
- const installPath =
755
- moduleName === 'core' ? `${this.xiaomaFolderName}/core/tools/${file}` : `${this.xiaomaFolderName}/${moduleName}/tools/${file}`;
756
-
757
- tools.push({
758
- name: name,
759
- displayName: displayName,
760
- description: description,
761
- module: moduleName,
762
- path: installPath,
763
- standalone: standalone,
764
- canonicalId: this.getCanonicalId(skillManifest, file),
765
- });
766
-
767
- // Add to files list
768
- this.files.push({
769
- type: 'tool',
770
- name: name,
771
- module: moduleName,
772
- path: installPath,
773
- });
774
- }
775
- }
776
-
777
- return tools;
778
- }
779
-
780
- /**
781
- * Write main manifest as YAML with installation info only
782
- * Fetches fresh version info for all modules
783
- * @returns {string} Path to the manifest file
784
- */
785
- async writeMainManifest(cfgDir) {
786
- const manifestPath = path.join(cfgDir, 'manifest.yaml');
787
-
788
- // Read existing manifest to preserve install date
789
- let existingInstallDate = null;
790
- const existingModulesMap = new Map();
791
-
792
- if (await fs.pathExists(manifestPath)) {
793
- try {
794
- const existingContent = await fs.readFile(manifestPath, 'utf8');
795
- const existingManifest = yaml.parse(existingContent);
796
-
797
- // Preserve original install date
798
- if (existingManifest.installation?.installDate) {
799
- existingInstallDate = existingManifest.installation.installDate;
800
- }
801
-
802
- // Build map of existing modules for quick lookup
803
- if (existingManifest.modules && Array.isArray(existingManifest.modules)) {
804
- for (const m of existingManifest.modules) {
805
- if (typeof m === 'object' && m.name) {
806
- existingModulesMap.set(m.name, m);
807
- } else if (typeof m === 'string') {
808
- existingModulesMap.set(m, { installDate: existingInstallDate });
809
- }
810
- }
811
- }
812
- } catch {
813
- // If we can't read existing manifest, continue with defaults
814
- }
815
- }
816
-
817
- // Fetch fresh version info for all modules
818
- const { Manifest } = require('./manifest');
819
- const manifestObj = new Manifest();
820
- const updatedModules = [];
821
-
822
- for (const moduleName of this.modules) {
823
- // Get fresh version info from source
824
- const versionInfo = await manifestObj.getModuleVersionInfo(moduleName, this.xiaomaDir);
825
-
826
- // Get existing install date if available
827
- const existing = existingModulesMap.get(moduleName);
828
-
829
- updatedModules.push({
830
- name: moduleName,
831
- version: versionInfo.version,
832
- installDate: existing?.installDate || new Date().toISOString(),
833
- lastUpdated: new Date().toISOString(),
834
- source: versionInfo.source,
835
- npmPackage: versionInfo.npmPackage,
836
- repoUrl: versionInfo.repoUrl,
837
- });
838
- }
839
-
840
- const manifest = {
841
- installation: {
842
- version: packageJson.version,
843
- installDate: existingInstallDate || new Date().toISOString(),
844
- lastUpdated: new Date().toISOString(),
845
- },
846
- modules: updatedModules,
847
- ides: this.selectedIdes,
848
- };
849
-
850
- // Clean the manifest to remove any non-serializable values
851
- const cleanManifest = structuredClone(manifest);
852
-
853
- const yamlStr = yaml.stringify(cleanManifest, {
854
- indent: 2,
855
- lineWidth: 0,
856
- sortKeys: false,
857
- });
858
-
859
- // Ensure POSIX-compliant final newline
860
- const content = yamlStr.endsWith('\n') ? yamlStr : yamlStr + '\n';
861
- await fs.writeFile(manifestPath, content);
862
- return manifestPath;
863
- }
864
-
865
- /**
866
- * Read existing CSV and preserve rows for modules NOT being updated
867
- * @param {string} csvPath - Path to existing CSV file
868
- * @param {number} moduleColumnIndex - Which column contains the module name (0-indexed)
869
- * @param {Array<string>} expectedColumns - Expected column names in order
870
- * @param {Object} defaultValues - Default values for missing columns
871
- * @returns {Array} Preserved CSV rows (without header), upgraded to match expected columns
872
- */
873
- async getPreservedCsvRows(csvPath, moduleColumnIndex, expectedColumns, defaultValues = {}) {
874
- if (!(await fs.pathExists(csvPath)) || this.preservedModules.length === 0) {
875
- return [];
876
- }
877
-
878
- try {
879
- const content = await fs.readFile(csvPath, 'utf8');
880
- const lines = content.trim().split('\n');
881
-
882
- if (lines.length < 2) {
883
- return []; // No data rows
884
- }
885
-
886
- // Parse header to understand old schema
887
- const header = lines[0];
888
- const headerColumns = header.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
889
- const oldColumns = headerColumns.map((c) => c.replaceAll(/^"|"$/g, ''));
890
-
891
- // Skip header row for data
892
- const dataRows = lines.slice(1);
893
- const preservedRows = [];
894
-
895
- for (const row of dataRows) {
896
- // Simple CSV parsing (handles quoted values)
897
- const columns = row.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
898
- const cleanColumns = columns.map((c) => c.replaceAll(/^"|"$/g, ''));
899
-
900
- const moduleValue = cleanColumns[moduleColumnIndex];
901
-
902
- // Keep this row if it belongs to a preserved module
903
- if (this.preservedModules.includes(moduleValue)) {
904
- // Upgrade row to match expected schema
905
- const upgradedRow = this.upgradeRowToSchema(cleanColumns, oldColumns, expectedColumns, defaultValues);
906
- preservedRows.push(upgradedRow);
907
- }
908
- }
909
-
910
- return preservedRows;
911
- } catch (error) {
912
- await prompts.log.warn(`Failed to read existing CSV ${csvPath}: ${error.message}`);
913
- return [];
914
- }
915
- }
916
-
917
- /**
918
- * Upgrade a CSV row from old schema to new schema
919
- * @param {Array<string>} rowValues - Values from old row
920
- * @param {Array<string>} oldColumns - Old column names
921
- * @param {Array<string>} newColumns - New column names
922
- * @param {Object} defaultValues - Default values for missing columns
923
- * @returns {string} Upgraded CSV row
924
- */
925
- upgradeRowToSchema(rowValues, oldColumns, newColumns, defaultValues) {
926
- const upgradedValues = [];
927
-
928
- for (const newCol of newColumns) {
929
- const oldIndex = oldColumns.indexOf(newCol);
930
-
931
- if (oldIndex !== -1 && oldIndex < rowValues.length) {
932
- // Column exists in old schema, use its value
933
- upgradedValues.push(rowValues[oldIndex]);
934
- } else if (defaultValues[newCol] === undefined) {
935
- // Column missing, no default provided
936
- upgradedValues.push('');
937
- } else {
938
- // Column missing, use default value
939
- upgradedValues.push(defaultValues[newCol]);
940
- }
941
- }
942
-
943
- // Properly quote values and join
944
- return upgradedValues.map((v) => `"${v}"`).join(',');
945
- }
946
-
947
- /**
948
- * Write workflow manifest CSV
949
- * @returns {string} Path to the manifest file
950
- */
951
- async writeWorkflowManifest(cfgDir) {
952
- const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
953
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
954
-
955
- // Create CSV header - standalone column removed, canonicalId added as optional column
956
- let csv = 'name,description,module,path,canonicalId\n';
957
-
958
- // Build workflows map from discovered workflows only
959
- // Old entries are NOT preserved - the manifest reflects what actually exists on disk
960
- const allWorkflows = new Map();
961
-
962
- // Only add workflows that were actually discovered in this scan
963
- for (const workflow of this.workflows) {
964
- const key = `${workflow.module}:${workflow.name}`;
965
- allWorkflows.set(key, {
966
- name: workflow.name,
967
- description: workflow.description,
968
- module: workflow.module,
969
- path: workflow.path,
970
- canonicalId: workflow.canonicalId || '',
971
- });
972
- }
973
-
974
- // Write all workflows
975
- for (const [, value] of allWorkflows) {
976
- const row = [
977
- escapeCsv(value.name),
978
- escapeCsv(value.description),
979
- escapeCsv(value.module),
980
- escapeCsv(value.path),
981
- escapeCsv(value.canonicalId),
982
- ].join(',');
983
- csv += row + '\n';
984
- }
985
-
986
- await fs.writeFile(csvPath, csv);
987
- return csvPath;
988
- }
989
-
990
- /**
991
- * Write skill manifest CSV
992
- * @returns {string} Path to the manifest file
993
- */
994
- async writeSkillManifest(cfgDir) {
995
- const csvPath = path.join(cfgDir, 'skill-manifest.csv');
996
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
997
-
998
- let csvContent = 'canonicalId,name,description,module,path,install_to_xiaoma\n';
999
-
1000
- for (const skill of this.skills) {
1001
- const row = [
1002
- escapeCsv(skill.canonicalId),
1003
- escapeCsv(skill.name),
1004
- escapeCsv(skill.description),
1005
- escapeCsv(skill.module),
1006
- escapeCsv(skill.path),
1007
- escapeCsv(skill.install_to_xiaoma),
1008
- ].join(',');
1009
- csvContent += row + '\n';
1010
- }
1011
-
1012
- await fs.writeFile(csvPath, csvContent);
1013
- return csvPath;
1014
- }
1015
-
1016
- /**
1017
- * Write agent manifest CSV
1018
- * @returns {string} Path to the manifest file
1019
- */
1020
- async writeAgentManifest(cfgDir) {
1021
- const csvPath = path.join(cfgDir, 'agent-manifest.csv');
1022
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
1023
-
1024
- // Read existing manifest to preserve entries
1025
- const existingEntries = new Map();
1026
- if (await fs.pathExists(csvPath)) {
1027
- const content = await fs.readFile(csvPath, 'utf8');
1028
- const records = csv.parse(content, {
1029
- columns: true,
1030
- skip_empty_lines: true,
1031
- });
1032
- for (const record of records) {
1033
- existingEntries.set(`${record.module}:${record.name}`, record);
1034
- }
1035
- }
1036
-
1037
- // Create CSV header with persona fields and canonicalId
1038
- let csvContent = 'name,displayName,title,icon,capabilities,role,identity,communicationStyle,principles,module,path,canonicalId\n';
1039
-
1040
- // Combine existing and new agents, preferring new data for duplicates
1041
- const allAgents = new Map();
1042
-
1043
- // Add existing entries
1044
- for (const [key, value] of existingEntries) {
1045
- allAgents.set(key, value);
1046
- }
1047
-
1048
- // Add/update new agents
1049
- for (const agent of this.agents) {
1050
- const key = `${agent.module}:${agent.name}`;
1051
- allAgents.set(key, {
1052
- name: agent.name,
1053
- displayName: agent.displayName,
1054
- title: agent.title,
1055
- icon: agent.icon,
1056
- capabilities: agent.capabilities,
1057
- role: agent.role,
1058
- identity: agent.identity,
1059
- communicationStyle: agent.communicationStyle,
1060
- principles: agent.principles,
1061
- module: agent.module,
1062
- path: agent.path,
1063
- canonicalId: agent.canonicalId || '',
1064
- });
1065
- }
1066
-
1067
- // Write all agents
1068
- for (const [, record] of allAgents) {
1069
- const row = [
1070
- escapeCsv(record.name),
1071
- escapeCsv(record.displayName),
1072
- escapeCsv(record.title),
1073
- escapeCsv(record.icon),
1074
- escapeCsv(record.capabilities),
1075
- escapeCsv(record.role),
1076
- escapeCsv(record.identity),
1077
- escapeCsv(record.communicationStyle),
1078
- escapeCsv(record.principles),
1079
- escapeCsv(record.module),
1080
- escapeCsv(record.path),
1081
- escapeCsv(record.canonicalId),
1082
- ].join(',');
1083
- csvContent += row + '\n';
1084
- }
1085
-
1086
- await fs.writeFile(csvPath, csvContent);
1087
- return csvPath;
1088
- }
1089
-
1090
- /**
1091
- * Write task manifest CSV
1092
- * @returns {string} Path to the manifest file
1093
- */
1094
- async writeTaskManifest(cfgDir) {
1095
- const csvPath = path.join(cfgDir, 'task-manifest.csv');
1096
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
1097
-
1098
- // Read existing manifest to preserve entries
1099
- const existingEntries = new Map();
1100
- if (await fs.pathExists(csvPath)) {
1101
- const content = await fs.readFile(csvPath, 'utf8');
1102
- const records = csv.parse(content, {
1103
- columns: true,
1104
- skip_empty_lines: true,
1105
- });
1106
- for (const record of records) {
1107
- existingEntries.set(`${record.module}:${record.name}`, record);
1108
- }
1109
- }
1110
-
1111
- // Create CSV header with standalone and canonicalId columns
1112
- let csvContent = 'name,displayName,description,module,path,standalone,canonicalId\n';
1113
-
1114
- // Combine existing and new tasks
1115
- const allTasks = new Map();
1116
-
1117
- // Add existing entries
1118
- for (const [key, value] of existingEntries) {
1119
- allTasks.set(key, value);
1120
- }
1121
-
1122
- // Add/update new tasks
1123
- for (const task of this.tasks) {
1124
- const key = `${task.module}:${task.name}`;
1125
- allTasks.set(key, {
1126
- name: task.name,
1127
- displayName: task.displayName,
1128
- description: task.description,
1129
- module: task.module,
1130
- path: task.path,
1131
- standalone: task.standalone,
1132
- canonicalId: task.canonicalId || '',
1133
- });
1134
- }
1135
-
1136
- // Write all tasks
1137
- for (const [, record] of allTasks) {
1138
- const row = [
1139
- escapeCsv(record.name),
1140
- escapeCsv(record.displayName),
1141
- escapeCsv(record.description),
1142
- escapeCsv(record.module),
1143
- escapeCsv(record.path),
1144
- escapeCsv(record.standalone),
1145
- escapeCsv(record.canonicalId),
1146
- ].join(',');
1147
- csvContent += row + '\n';
1148
- }
1149
-
1150
- await fs.writeFile(csvPath, csvContent);
1151
- return csvPath;
1152
- }
1153
-
1154
- /**
1155
- * Write tool manifest CSV
1156
- * @returns {string} Path to the manifest file
1157
- */
1158
- async writeToolManifest(cfgDir) {
1159
- const csvPath = path.join(cfgDir, 'tool-manifest.csv');
1160
- const escapeCsv = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
1161
-
1162
- // Read existing manifest to preserve entries
1163
- const existingEntries = new Map();
1164
- if (await fs.pathExists(csvPath)) {
1165
- const content = await fs.readFile(csvPath, 'utf8');
1166
- const records = csv.parse(content, {
1167
- columns: true,
1168
- skip_empty_lines: true,
1169
- });
1170
- for (const record of records) {
1171
- existingEntries.set(`${record.module}:${record.name}`, record);
1172
- }
1173
- }
1174
-
1175
- // Create CSV header with standalone and canonicalId columns
1176
- let csvContent = 'name,displayName,description,module,path,standalone,canonicalId\n';
1177
-
1178
- // Combine existing and new tools
1179
- const allTools = new Map();
1180
-
1181
- // Add existing entries
1182
- for (const [key, value] of existingEntries) {
1183
- allTools.set(key, value);
1184
- }
1185
-
1186
- // Add/update new tools
1187
- for (const tool of this.tools) {
1188
- const key = `${tool.module}:${tool.name}`;
1189
- allTools.set(key, {
1190
- name: tool.name,
1191
- displayName: tool.displayName,
1192
- description: tool.description,
1193
- module: tool.module,
1194
- path: tool.path,
1195
- standalone: tool.standalone,
1196
- canonicalId: tool.canonicalId || '',
1197
- });
1198
- }
1199
-
1200
- // Write all tools
1201
- for (const [, record] of allTools) {
1202
- const row = [
1203
- escapeCsv(record.name),
1204
- escapeCsv(record.displayName),
1205
- escapeCsv(record.description),
1206
- escapeCsv(record.module),
1207
- escapeCsv(record.path),
1208
- escapeCsv(record.standalone),
1209
- escapeCsv(record.canonicalId),
1210
- ].join(',');
1211
- csvContent += row + '\n';
1212
- }
1213
-
1214
- await fs.writeFile(csvPath, csvContent);
1215
- return csvPath;
1216
- }
1217
-
1218
- /**
1219
- * Write files manifest CSV
1220
- */
1221
- /**
1222
- * Calculate SHA256 hash of a file
1223
- * @param {string} filePath - Path to file
1224
- * @returns {string} SHA256 hash
1225
- */
1226
- async calculateFileHash(filePath) {
1227
- try {
1228
- const content = await fs.readFile(filePath);
1229
- return crypto.createHash('sha256').update(content).digest('hex');
1230
- } catch {
1231
- return '';
1232
- }
1233
- }
1234
-
1235
- /**
1236
- * @returns {string} Path to the manifest file
1237
- */
1238
- async writeFilesManifest(cfgDir) {
1239
- const csvPath = path.join(cfgDir, 'files-manifest.csv');
1240
-
1241
- // Create CSV header with hash column
1242
- let csv = 'type,name,module,path,hash\n';
1243
-
1244
- // If we have ALL installed files, use those instead of just workflows/agents/tasks
1245
- const allFiles = [];
1246
- if (this.allInstalledFiles && this.allInstalledFiles.length > 0) {
1247
- // Process all installed files
1248
- for (const filePath of this.allInstalledFiles) {
1249
- // Store paths relative to xiaomaDir (no folder prefix)
1250
- const relativePath = filePath.replace(this.xiaomaDir, '').replaceAll('\\', '/').replace(/^\//, '');
1251
- const ext = path.extname(filePath).toLowerCase();
1252
- const fileName = path.basename(filePath, ext);
1253
-
1254
- // Determine module from path (first directory component)
1255
- const pathParts = relativePath.split('/');
1256
- const module = pathParts.length > 0 ? pathParts[0] : 'unknown';
1257
-
1258
- // Calculate hash
1259
- const hash = await this.calculateFileHash(filePath);
1260
-
1261
- allFiles.push({
1262
- type: ext.slice(1) || 'file',
1263
- name: fileName,
1264
- module: module,
1265
- path: relativePath,
1266
- hash: hash,
1267
- });
1268
- }
1269
- } else {
1270
- // Fallback: use the collected workflows/agents/tasks
1271
- for (const file of this.files) {
1272
- // Strip the folder prefix if present (for consistency)
1273
- const relPath = file.path.replace(this.xiaomaFolderName + '/', '');
1274
- const filePath = path.join(this.xiaomaDir, relPath);
1275
- const hash = await this.calculateFileHash(filePath);
1276
- allFiles.push({
1277
- ...file,
1278
- path: relPath,
1279
- hash: hash,
1280
- });
1281
- }
1282
- }
1283
-
1284
- // Sort files by module, then type, then name
1285
- allFiles.sort((a, b) => {
1286
- if (a.module !== b.module) return a.module.localeCompare(b.module);
1287
- if (a.type !== b.type) return a.type.localeCompare(b.type);
1288
- return a.name.localeCompare(b.name);
1289
- });
1290
-
1291
- // Add all files
1292
- for (const file of allFiles) {
1293
- csv += `"${file.type}","${file.name}","${file.module}","${file.path}","${file.hash}"\n`;
1294
- }
1295
-
1296
- await fs.writeFile(csvPath, csv);
1297
- return csvPath;
1298
- }
1299
-
1300
- /**
1301
- * Scan the xiaoma directory to find all installed modules
1302
- * @param {string} xiaomaDir - Path to xiaoma directory
1303
- * @returns {Array} List of module names
1304
- */
1305
- async scanInstalledModules(xiaomaDir) {
1306
- const modules = [];
1307
-
1308
- try {
1309
- const entries = await fs.readdir(xiaomaDir, { withFileTypes: true });
1310
-
1311
- for (const entry of entries) {
1312
- // Skip if not a directory or is a special directory
1313
- if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === '_config') {
1314
- continue;
1315
- }
1316
-
1317
- // Check if this looks like a module (has agents, workflows, or tasks directory)
1318
- const modulePath = path.join(xiaomaDir, entry.name);
1319
- const hasAgents = await fs.pathExists(path.join(modulePath, 'agents'));
1320
- const hasWorkflows = await fs.pathExists(path.join(modulePath, 'workflows'));
1321
- const hasTasks = await fs.pathExists(path.join(modulePath, 'tasks'));
1322
- const hasTools = await fs.pathExists(path.join(modulePath, 'tools'));
1323
-
1324
- // Check for skill-only modules: recursive scan for xiaoma-skill-manifest.yaml with type: skill
1325
- let hasSkills = false;
1326
- if (!hasAgents && !hasWorkflows && !hasTasks && !hasTools) {
1327
- hasSkills = await this._hasSkillManifestRecursive(modulePath);
1328
- }
1329
-
1330
- // If it has any of these directories or skill manifests, it's likely a module
1331
- if (hasAgents || hasWorkflows || hasTasks || hasTools || hasSkills) {
1332
- modules.push(entry.name);
1333
- }
1334
- }
1335
- } catch (error) {
1336
- await prompts.log.warn(`Could not scan for installed modules: ${error.message}`);
1337
- }
1338
-
1339
- return modules;
1340
- }
1341
-
1342
- /**
1343
- * Recursively check if a directory tree contains a xiaoma-skill-manifest.yaml with type: skill.
1344
- * Skips directories starting with . or _.
1345
- * @param {string} dir - Directory to search
1346
- * @returns {boolean} True if a skill manifest is found
1347
- */
1348
- async _hasSkillManifestRecursive(dir) {
1349
- let entries;
1350
- try {
1351
- entries = await fs.readdir(dir, { withFileTypes: true });
1352
- } catch {
1353
- return false;
1354
- }
1355
-
1356
- // Check for manifest in this directory
1357
- const manifest = await this.loadSkillManifest(dir);
1358
- if (manifest) {
1359
- const type = this.getArtifactType(manifest, 'workflow.md');
1360
- if (type === 'skill') return true;
1361
- }
1362
-
1363
- // Recurse into subdirectories
1364
- for (const entry of entries) {
1365
- if (!entry.isDirectory()) continue;
1366
- if (entry.name.startsWith('.') || entry.name.startsWith('_')) continue;
1367
- if (await this._hasSkillManifestRecursive(path.join(dir, entry.name))) return true;
1368
- }
1369
-
1370
- return false;
1371
- }
1372
- }
1373
-
1374
- module.exports = { ManifestGenerator };