@zeyue0329/xiaoma-cli 1.7.0 → 1.8.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.
- package/README.md +33 -33
- package/package.json +3 -8
- package/pipeline-optimization-report.md +331 -564
- package/src/core/module-help.csv +10 -10
- package/src/core/skills/xiaoma-advanced-elicitation/SKILL.md +2 -2
- package/src/core/skills/xiaoma-advanced-elicitation/workflow.md +2 -2
- package/src/core/skills/xiaoma-brainstorming/SKILL.md +1 -1
- package/src/core/skills/xiaoma-brainstorming/steps/step-01-session-setup.md +4 -0
- package/src/core/skills/xiaoma-brainstorming/steps/step-01b-continue.md +3 -1
- package/src/core/skills/xiaoma-brainstorming/steps/step-02a-user-selected.md +5 -1
- package/src/core/skills/xiaoma-brainstorming/steps/step-02b-ai-recommended.md +3 -1
- package/src/core/skills/xiaoma-brainstorming/steps/step-02c-random-selection.md +3 -1
- package/src/core/skills/xiaoma-brainstorming/steps/step-02d-progressive-flow.md +3 -1
- package/src/core/skills/xiaoma-brainstorming/steps/step-03-technique-execution.md +2 -0
- package/src/core/skills/xiaoma-brainstorming/steps/step-04-idea-organization.md +2 -0
- package/src/core/skills/xiaoma-brainstorming/workflow.md +1 -2
- package/src/core/skills/xiaoma-distillator/SKILL.md +1 -1
- package/src/core/skills/xiaoma-distillator/agents/distillate-compressor.md +4 -4
- package/src/core/skills/xiaoma-distillator/resources/distillate-format-reference.md +34 -34
- package/src/core/skills/xiaoma-distillator/xiaoma-skill-manifest.yaml +1 -1
- package/src/core/skills/xiaoma-editorial-review-prose/SKILL.md +1 -1
- package/src/core/skills/xiaoma-editorial-review-structure/SKILL.md +1 -1
- package/src/core/skills/xiaoma-editorial-review-structure/workflow.md +1 -1
- package/src/core/skills/xiaoma-help/SKILL.md +2 -2
- package/src/core/skills/xiaoma-index-docs/SKILL.md +1 -1
- package/src/core/skills/xiaoma-party-mode/SKILL.md +2 -2
- package/src/core/skills/xiaoma-party-mode/steps/step-01-agent-loading.md +3 -3
- package/src/core/skills/xiaoma-party-mode/steps/step-02-discussion-orchestration.md +2 -2
- package/src/core/skills/xiaoma-party-mode/steps/step-03-graceful-exit.md +5 -5
- package/src/core/skills/xiaoma-party-mode/workflow.md +4 -4
- package/src/core/skills/xiaoma-review-adversarial-general/SKILL.md +1 -1
- package/src/core/skills/xiaoma-review-edge-case-hunter/SKILL.md +2 -2
- package/src/core/skills/xiaoma-shard-doc/SKILL.md +1 -1
- package/src/core/tasks/xiaoma-create-prd/SKILL.md +1 -1
- package/src/core/tasks/xiaoma-create-prd/data/prd-purpose.md +4 -4
- package/src/core/tasks/xiaoma-create-prd/data/project-types.csv +1 -1
- package/src/core/tasks/xiaoma-create-prd/steps-c/step-11-polish.md +1 -1
- package/src/xmc/agents/analyst.agent.yaml +3 -3
- package/src/xmc/agents/qa.agent.yaml +1 -1
- package/src/xmc/agents/sm.agent.yaml +3 -3
- package/src/xmc/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +2 -2
- package/src/xmc/agents/tech-writer/xiaoma-skill-manifest.yaml +1 -1
- package/src/xmc/agents/xiaoma-skill-manifest.yaml +8 -8
- package/src/xmc/module-help.csv +31 -31
- package/src/xmc/module.yaml +2 -2
- package/src/xmc/teams/default-party.csv +14 -14
- package/src/xmc/teams/team-fullstack.yaml +1 -1
- package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/steps/step-04-create-prd.md +2 -1
- package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/steps/step-05-validate-prd.md +3 -2
- package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/steps/step-06-create-epics.md +14 -5
- package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/steps/step-08-finalize.md +3 -3
- package/src/xmc/workflows/1-analysis/auto-requirements-pipeline/workflow.md +1 -0
- package/src/xmc/workflows/1-analysis/research/xiaoma-domain-research/SKILL.md +1 -1
- package/src/xmc/workflows/1-analysis/research/xiaoma-market-research/SKILL.md +1 -1
- package/src/xmc/workflows/1-analysis/research/xiaoma-technical-research/SKILL.md +1 -1
- package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/SKILL.md +1 -1
- package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-02-vision.md +1 -0
- package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-03-users.md +1 -0
- package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-04-metrics.md +1 -0
- package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/steps/step-05-scope.md +1 -0
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/SKILL.md +1 -1
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/prompts/contextual-discovery.md +7 -7
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/prompts/draft-and-review.md +5 -5
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/prompts/finalize.md +1 -1
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/prompts/guided-elicitation.md +2 -2
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/xiaoma-manifest.json +2 -2
- package/src/xmc/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +4 -4
- package/src/xmc/workflows/2-plan-workflows/create-prd/data/project-types.csv +1 -1
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +1 -1
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +16 -16
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +9 -9
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +1 -1
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +8 -8
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +1 -1
- package/src/xmc/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +2 -2
- package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/SKILL.md +1 -1
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/SKILL.md +1 -1
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-01-discovery.md +13 -17
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-01b-legacy-conversion.md +9 -13
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-02-review.md +4 -8
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-03-edit.md +9 -13
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/steps-e/step-e-04-complete.md +2 -5
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/workflow.md +1 -2
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/SKILL.md +1 -1
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/data/prd-purpose.md +4 -4
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/data/project-types.csv +1 -1
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-01-discovery.md +1 -4
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-02-format-detection.md +16 -19
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-02b-parity-check.md +8 -11
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-03-density-validation.md +1 -4
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-04-brief-coverage-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-05-measurability-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-06-traceability-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-07-implementation-leakage-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-08-domain-compliance-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-09-project-type-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-10-smart-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-11-holistic-quality-validation.md +8 -11
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-12-completeness-validation.md +0 -3
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/steps-v/step-v-13-report-complete.md +2 -5
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/workflow.md +2 -2
- package/src/xmc/workflows/3-solutioning/xiaoma-check-implementation-readiness/SKILL.md +1 -1
- package/src/xmc/workflows/3-solutioning/xiaoma-create-architecture/SKILL.md +1 -1
- package/src/xmc/workflows/3-solutioning/xiaoma-create-epics-and-stories/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-01-init-and-validate.md +6 -3
- package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-05-code-review.md +5 -6
- package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-07-fix-and-retest.md +14 -7
- package/src/xmc/workflows/4-implementation/auto-story-pipeline/steps/step-09-cycle-check.md +11 -2
- package/src/xmc/workflows/4-implementation/auto-story-pipeline/workflow.md +9 -8
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/SKILL.md +2 -2
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-01-gather-context.md +61 -0
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-02-review.md +41 -0
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-03-triage.md +50 -0
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/steps/step-04-present.md +38 -0
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/workflow.md +33 -240
- package/src/xmc/workflows/4-implementation/xiaoma-correct-course/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-correct-course/workflow.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-create-story/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-create-story/workflow.md +3 -3
- package/src/xmc/workflows/4-implementation/xiaoma-dev-story/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-dev-story/workflow.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-retrospective/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-sprint-planning/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-sprint-planning/workflow.md +2 -2
- package/src/xmc/workflows/4-implementation/xiaoma-sprint-status/SKILL.md +1 -1
- package/src/xmc/workflows/4-implementation/xiaoma-sprint-status/workflow.md +5 -5
- package/src/xmc/workflows/xiaoma-document-project/SKILL.md +1 -1
- package/src/xmc/workflows/xiaoma-document-project/templates/index-template.md +1 -1
- package/src/xmc/workflows/xiaoma-document-project/templates/project-overview-template.md +1 -1
- package/src/xmc/workflows/xiaoma-document-project/templates/source-tree-template.md +1 -1
- package/src/xmc/workflows/xiaoma-generate-project-context/SKILL.md +1 -1
- package/src/xmc/workflows/xiaoma-generate-project-context/steps/step-01-discover.md +3 -1
- package/src/xmc/workflows/xiaoma-generate-project-context/steps/step-02-generate.md +2 -0
- package/src/xmc/workflows/xiaoma-qa-generate-e2e-tests/SKILL.md +1 -1
- package/src/xmc/workflows/xiaoma-qa-generate-e2e-tests/checklist.md +1 -1
- package/src/xmc/workflows/xiaoma-qa-generate-e2e-tests/workflow.md +2 -2
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/SKILL.md +1 -1
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/steps/step-01-mode-detection.md +2 -2
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/SKILL.md +1 -1
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-spec/SKILL.md +1 -1
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-spec/workflow.md +1 -0
- package/tools/cli/README.md +4 -4
- package/tools/cli/commands/install.js +1 -1
- package/tools/cli/commands/status.js +4 -4
- package/tools/cli/commands/uninstall.js +9 -9
- package/tools/cli/external-official-modules.yaml +2 -54
- package/tools/cli/installers/install-messages.yaml +5 -5
- package/tools/cli/installers/lib/core/config-collector.js +2 -2
- package/tools/cli/installers/lib/core/dependency-resolver.js +2 -2
- package/tools/cli/installers/lib/core/detector.js +9 -9
- package/tools/cli/installers/lib/core/ide-config-manager.js +7 -7
- package/tools/cli/installers/lib/core/installer.js +51 -51
- package/tools/cli/installers/lib/core/manifest-generator.js +6 -6
- package/tools/cli/installers/lib/core/manifest.js +3 -3
- package/tools/cli/installers/lib/custom/handler.js +5 -5
- package/tools/cli/installers/lib/ide/_base-ide.js +15 -15
- package/tools/cli/installers/lib/ide/_config-driven.js +31 -31
- package/tools/cli/installers/lib/ide/manager.js +8 -8
- package/tools/cli/installers/lib/ide/platform-codes.yaml +3 -3
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +3 -3
- package/tools/cli/installers/lib/ide/shared/path-utils.js +3 -3
- package/tools/cli/installers/lib/ide/shared/skill-manifest.js +2 -2
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +13 -13
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/xiaoma-artifacts.js +1 -1
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/default-task.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +3 -3
- package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +3 -3
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +3 -3
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +3 -3
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +1 -1
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +1 -1
- package/tools/cli/installers/lib/modules/manager.js +22 -22
- package/tools/cli/lib/agent/compiler.js +3 -3
- package/tools/cli/lib/agent/installer.js +9 -9
- package/tools/cli/lib/agent/template-engine.js +1 -1
- package/tools/cli/lib/agent-party-generator.js +3 -3
- package/tools/cli/lib/cli-utils.js +1 -1
- package/tools/cli/lib/project-root.js +5 -5
- package/tools/cli/lib/prompts.js +1 -1
- package/tools/cli/lib/ui.js +27 -27
- package/tools/cli/lib/xml-handler.js +1 -1
- package/tools/cli/lib/yaml-format.js +1 -1
- package/tools/cli/lib/yaml-xml-builder.js +2 -2
- package/tools/cli/xiaoma-cli.js +3 -3
- package/tools/platform-codes.yaml +2 -2
- package/tools/schema/agent.js +1 -1
- package/tools/xiaoma-npx-wrapper.js +1 -1
- package/.idea/codeStyles/Project.xml +0 -60
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/jsLibraryMappings.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -6
- package/.idea/vcs.xml +0 -6
- package/.idea/workspace.xml +0 -146
- package/AGENTS.md +0 -9
- package/README_CN.md +0 -121
- package/XIAOMA-CLI-GUIDE.md +0 -512
- package/src/core/skills/xiaoma-advanced-elicitation/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-brainstorming/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-distillator/SKILL.md.bak +0 -178
- package/src/core/skills/xiaoma-editorial-review-prose/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-editorial-review-structure/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-index-docs/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-party-mode/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-review-adversarial-general/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-review-edge-case-hunter/SKILL.md.bak +0 -6
- package/src/core/skills/xiaoma-shard-doc/SKILL.md.bak +0 -6
- package/src/core/tasks/xiaoma-create-prd/SKILL.md.bak +0 -6
- package/src/xmc/workflows/1-analysis/research/xiaoma-domain-research/SKILL.md.bak +0 -6
- package/src/xmc/workflows/1-analysis/research/xiaoma-market-research/SKILL.md.bak +0 -6
- package/src/xmc/workflows/1-analysis/research/xiaoma-technical-research/SKILL.md.bak +0 -6
- package/src/xmc/workflows/1-analysis/xiaoma-create-product-brief/SKILL.md.bak +0 -6
- package/src/xmc/workflows/1-analysis/xiaoma-product-brief-preview/SKILL.md.bak +0 -88
- package/src/xmc/workflows/2-plan-workflows/xiaoma-create-ux-design/SKILL.md.bak +0 -6
- package/src/xmc/workflows/2-plan-workflows/xiaoma-edit-prd/SKILL.md.bak +0 -6
- package/src/xmc/workflows/2-plan-workflows/xiaoma-validate-prd/SKILL.md.bak +0 -6
- package/src/xmc/workflows/3-solutioning/xiaoma-check-implementation-readiness/SKILL.md.bak +0 -6
- package/src/xmc/workflows/3-solutioning/xiaoma-create-architecture/SKILL.md.bak +0 -6
- package/src/xmc/workflows/3-solutioning/xiaoma-create-epics-and-stories/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-code-review/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-correct-course/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-create-story/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-dev-story/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-retrospective/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-sprint-planning/SKILL.md.bak +0 -6
- package/src/xmc/workflows/4-implementation/xiaoma-sprint-status/SKILL.md.bak +0 -6
- package/src/xmc/workflows/xiaoma-document-project/SKILL.md.bak +0 -6
- package/src/xmc/workflows/xiaoma-generate-project-context/SKILL.md.bak +0 -6
- package/src/xmc/workflows/xiaoma-qa-generate-e2e-tests/SKILL.md.bak +0 -6
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev/SKILL.md.bak +0 -6
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/SKILL.md.bak +0 -6
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-spec/SKILL.md.bak +0 -6
- package/tools/format-workflow-md.js +0 -263
- package/tools/migrate-custom-module-paths.js +0 -124
- package/tools/skill-validator.md +0 -322
|
@@ -12,7 +12,7 @@ const csv = require('csv-parse/sync');
|
|
|
12
12
|
/**
|
|
13
13
|
* Config-driven IDE setup handler
|
|
14
14
|
*
|
|
15
|
-
* This class provides a standardized way to install
|
|
15
|
+
* This class provides a standardized way to install XiaoMa artifacts to IDEs
|
|
16
16
|
* based on configuration in platform-codes.yaml. It eliminates the need for
|
|
17
17
|
* individual installer files for each IDE.
|
|
18
18
|
*
|
|
@@ -60,19 +60,19 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
60
60
|
/**
|
|
61
61
|
* Main setup method - called by IdeManager
|
|
62
62
|
* @param {string} projectDir - Project directory
|
|
63
|
-
* @param {string} xiaomaDir -
|
|
63
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
64
64
|
* @param {Object} options - Setup options
|
|
65
65
|
* @returns {Promise<Object>} Setup result
|
|
66
66
|
*/
|
|
67
67
|
async setup(projectDir, xiaomaDir, options = {}) {
|
|
68
|
-
// Check for
|
|
68
|
+
// Check for XiaoMa files in ancestor directories that would cause duplicates
|
|
69
69
|
if (this.installerConfig?.ancestor_conflict_check) {
|
|
70
70
|
const conflict = await this.findAncestorConflict(projectDir);
|
|
71
71
|
if (conflict) {
|
|
72
72
|
await prompts.log.error(
|
|
73
|
-
`Found existing
|
|
73
|
+
`Found existing XiaoMa skills in ancestor installation: ${conflict}\n` +
|
|
74
74
|
` ${this.name} inherits skills from parent directories, so this would cause duplicates.\n` +
|
|
75
|
-
` Please remove the
|
|
75
|
+
` Please remove the XiaoMa files from that directory first:\n` +
|
|
76
76
|
` rm -rf "${conflict}"/xiaoma*`,
|
|
77
77
|
);
|
|
78
78
|
return {
|
|
@@ -86,7 +86,7 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
86
86
|
|
|
87
87
|
if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`);
|
|
88
88
|
|
|
89
|
-
// Clean up any old
|
|
89
|
+
// Clean up any old XiaoMa installation first
|
|
90
90
|
await this.cleanup(projectDir, options);
|
|
91
91
|
|
|
92
92
|
if (!this.installerConfig) {
|
|
@@ -109,7 +109,7 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
109
109
|
/**
|
|
110
110
|
* Install to a single target directory
|
|
111
111
|
* @param {string} projectDir - Project directory
|
|
112
|
-
* @param {string} xiaomaDir -
|
|
112
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
113
113
|
* @param {Object} config - Installation configuration
|
|
114
114
|
* @param {Object} options - Setup options
|
|
115
115
|
* @returns {Promise<Object>} Installation result
|
|
@@ -171,7 +171,7 @@ class ConfigDrivenIdeSetup extends BaseIdeSetup {
|
|
|
171
171
|
/**
|
|
172
172
|
* Install to multiple target directories
|
|
173
173
|
* @param {string} projectDir - Project directory
|
|
174
|
-
* @param {string} xiaomaDir -
|
|
174
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
175
175
|
* @param {Array} targets - Array of target configurations
|
|
176
176
|
* @param {Object} options - Setup options
|
|
177
177
|
* @returns {Promise<Object>} Installation result
|
|
@@ -634,7 +634,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
634
634
|
* Copies the entire source directory as-is into the IDE skill directory.
|
|
635
635
|
* The source SKILL.md is used directly — no frontmatter transformation or file generation.
|
|
636
636
|
* @param {string} projectDir - Project directory
|
|
637
|
-
* @param {string} xiaomaDir -
|
|
637
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
638
638
|
* @param {string} targetPath - Target skills directory
|
|
639
639
|
* @param {Object} config - Installation configuration
|
|
640
640
|
* @returns {Promise<number>} Count of skills installed
|
|
@@ -659,7 +659,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
659
659
|
if (!canonicalId) continue;
|
|
660
660
|
|
|
661
661
|
// Derive source directory from path column
|
|
662
|
-
// path is like "_xiaoma/
|
|
662
|
+
// path is like "_xiaoma/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/SKILL.md"
|
|
663
663
|
// Strip xiaomaFolderName prefix and join with xiaomaDir, then get dirname
|
|
664
664
|
const relativePath = record.path.startsWith(xiaomaPrefix) ? record.path.slice(xiaomaPrefix.length) : record.path;
|
|
665
665
|
const sourceFile = path.join(xiaomaDir, relativePath);
|
|
@@ -738,17 +738,17 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
738
738
|
}
|
|
739
739
|
}
|
|
740
740
|
|
|
741
|
-
// Strip
|
|
741
|
+
// Strip XiaoMa markers from copilot-instructions.md if present
|
|
742
742
|
if (this.name === 'github-copilot') {
|
|
743
743
|
await this.cleanupCopilotInstructions(projectDir, options);
|
|
744
744
|
}
|
|
745
745
|
|
|
746
|
-
// Strip
|
|
746
|
+
// Strip XiaoMa modes from .kilocodemodes if present
|
|
747
747
|
if (this.name === 'kilo') {
|
|
748
748
|
await this.cleanupKiloModes(projectDir, options);
|
|
749
749
|
}
|
|
750
750
|
|
|
751
|
-
// Strip
|
|
751
|
+
// Strip XiaoMa entries from .rovodev/prompts.yml if present
|
|
752
752
|
if (this.name === 'rovo-dev') {
|
|
753
753
|
await this.cleanupRovoDevPrompts(projectDir, options);
|
|
754
754
|
}
|
|
@@ -783,7 +783,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
783
783
|
}
|
|
784
784
|
|
|
785
785
|
/**
|
|
786
|
-
* Warn about stale
|
|
786
|
+
* Warn about stale XiaoMa files in a global legacy directory (never auto-deletes)
|
|
787
787
|
* @param {string} legacyDir - Legacy directory path (may start with ~)
|
|
788
788
|
* @param {Object} options - Options (silent, etc.)
|
|
789
789
|
*/
|
|
@@ -801,7 +801,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
801
801
|
const xiaomaFiles = entries.filter((e) => typeof e === 'string' && e.startsWith('xiaoma'));
|
|
802
802
|
|
|
803
803
|
if (xiaomaFiles.length > 0 && !options.silent) {
|
|
804
|
-
await prompts.log.warn(`Found ${xiaomaFiles.length} stale
|
|
804
|
+
await prompts.log.warn(`Found ${xiaomaFiles.length} stale XiaoMa file(s) in ${expanded}. Remove manually: rm ${expanded}/xiaoma-*`);
|
|
805
805
|
}
|
|
806
806
|
} catch {
|
|
807
807
|
// Errors reading global paths are silently ignored
|
|
@@ -851,7 +851,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
851
851
|
}
|
|
852
852
|
|
|
853
853
|
if (removedCount > 0 && !options.silent) {
|
|
854
|
-
await prompts.log.message(` Cleaned ${removedCount}
|
|
854
|
+
await prompts.log.message(` Cleaned ${removedCount} XiaoMa files from ${targetDir}`);
|
|
855
855
|
}
|
|
856
856
|
|
|
857
857
|
// Remove empty directory after cleanup
|
|
@@ -867,8 +867,8 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
867
867
|
}
|
|
868
868
|
}
|
|
869
869
|
/**
|
|
870
|
-
* Strip
|
|
871
|
-
* The old custom installer injected content between <!--
|
|
870
|
+
* Strip XiaoMa-owned content from .github/copilot-instructions.md.
|
|
871
|
+
* The old custom installer injected content between <!-- XiaoMa:START --> and <!-- XiaoMa:END --> markers.
|
|
872
872
|
* Deletes the file if nothing remains. Restores .bak backup if one exists.
|
|
873
873
|
*/
|
|
874
874
|
async cleanupCopilotInstructions(projectDir, options = {}) {
|
|
@@ -878,12 +878,12 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
878
878
|
|
|
879
879
|
try {
|
|
880
880
|
const content = await fs.readFile(filePath, 'utf8');
|
|
881
|
-
const startIdx = content.indexOf('<!--
|
|
882
|
-
const endIdx = content.indexOf('<!--
|
|
881
|
+
const startIdx = content.indexOf('<!-- XiaoMa:START -->');
|
|
882
|
+
const endIdx = content.indexOf('<!-- XiaoMa:END -->');
|
|
883
883
|
|
|
884
884
|
if (startIdx === -1 || endIdx === -1 || endIdx <= startIdx) return;
|
|
885
885
|
|
|
886
|
-
const cleaned = content.slice(0, startIdx) + content.slice(endIdx + '<!--
|
|
886
|
+
const cleaned = content.slice(0, startIdx) + content.slice(endIdx + '<!-- XiaoMa:END -->'.length);
|
|
887
887
|
|
|
888
888
|
if (cleaned.trim().length === 0) {
|
|
889
889
|
await fs.remove(filePath);
|
|
@@ -898,16 +898,16 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
898
898
|
if (await fs.pathExists(backupPath)) await fs.remove(backupPath);
|
|
899
899
|
}
|
|
900
900
|
|
|
901
|
-
if (!options.silent) await prompts.log.message(' Cleaned
|
|
901
|
+
if (!options.silent) await prompts.log.message(' Cleaned XiaoMa markers from copilot-instructions.md');
|
|
902
902
|
} catch {
|
|
903
|
-
if (!options.silent) await prompts.log.warn(' Warning: Could not clean
|
|
903
|
+
if (!options.silent) await prompts.log.warn(' Warning: Could not clean XiaoMa markers from copilot-instructions.md');
|
|
904
904
|
}
|
|
905
905
|
}
|
|
906
906
|
|
|
907
907
|
/**
|
|
908
|
-
* Strip
|
|
908
|
+
* Strip XiaoMa-owned modes from .kilocodemodes.
|
|
909
909
|
* The old custom kilo.js installer added modes with slug starting with 'xiaoma-'.
|
|
910
|
-
* Parses YAML, filters out
|
|
910
|
+
* Parses YAML, filters out XiaoMa modes, rewrites. Leaves file as-is on parse failure.
|
|
911
911
|
*/
|
|
912
912
|
async cleanupKiloModes(projectDir, options = {}) {
|
|
913
913
|
const kiloModesPath = path.join(projectDir, '.kilocodemodes');
|
|
@@ -933,7 +933,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
933
933
|
if (removedCount > 0) {
|
|
934
934
|
try {
|
|
935
935
|
await fs.writeFile(kiloModesPath, yaml.stringify(config, { lineWidth: 0 }));
|
|
936
|
-
if (!options.silent) await prompts.log.message(` Removed ${removedCount}
|
|
936
|
+
if (!options.silent) await prompts.log.message(` Removed ${removedCount} XiaoMa modes from .kilocodemodes`);
|
|
937
937
|
} catch {
|
|
938
938
|
if (!options.silent) await prompts.log.warn(' Warning: Could not write .kilocodemodes during cleanup');
|
|
939
939
|
}
|
|
@@ -941,7 +941,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
941
941
|
}
|
|
942
942
|
|
|
943
943
|
/**
|
|
944
|
-
* Strip
|
|
944
|
+
* Strip XiaoMa-owned entries from .rovodev/prompts.yml.
|
|
945
945
|
* The old custom rovodev.js installer registered workflows in prompts.yml.
|
|
946
946
|
* Parses YAML, filters out entries with name starting with 'xiaoma-', rewrites.
|
|
947
947
|
* Removes the file if no entries remain.
|
|
@@ -974,7 +974,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
974
974
|
} else {
|
|
975
975
|
await fs.writeFile(promptsPath, yaml.stringify(config, { lineWidth: 0 }));
|
|
976
976
|
}
|
|
977
|
-
if (!options.silent) await prompts.log.message(` Removed ${removedCount}
|
|
977
|
+
if (!options.silent) await prompts.log.message(` Removed ${removedCount} XiaoMa entries from prompts.yml`);
|
|
978
978
|
} catch {
|
|
979
979
|
if (!options.silent) await prompts.log.warn(' Warning: Could not write prompts.yml during cleanup');
|
|
980
980
|
}
|
|
@@ -982,7 +982,7 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
982
982
|
}
|
|
983
983
|
|
|
984
984
|
/**
|
|
985
|
-
* Check ancestor directories for existing
|
|
985
|
+
* Check ancestor directories for existing XiaoMa files in the same target_dir.
|
|
986
986
|
* IDEs like Claude Code inherit commands from parent directories, so an existing
|
|
987
987
|
* installation in an ancestor would cause duplicate commands.
|
|
988
988
|
* @param {string} projectDir - Project directory being installed to
|
|
@@ -1001,10 +1001,10 @@ LOAD and execute from: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
|
1001
1001
|
try {
|
|
1002
1002
|
if (await fs.pathExists(candidatePath)) {
|
|
1003
1003
|
const entries = await fs.readdir(candidatePath);
|
|
1004
|
-
const
|
|
1004
|
+
const hasXiaoma = entries.some(
|
|
1005
1005
|
(e) => typeof e === 'string' && e.toLowerCase().startsWith('xiaoma') && !e.toLowerCase().startsWith('xiaoma-os-'),
|
|
1006
1006
|
);
|
|
1007
|
-
if (
|
|
1007
|
+
if (hasXiaoma) {
|
|
1008
1008
|
return candidatePath;
|
|
1009
1009
|
}
|
|
1010
1010
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const {
|
|
1
|
+
const { XiaoMa_FOLDER_NAME } = require('./shared/path-utils');
|
|
2
2
|
const prompts = require('../../../lib/prompts');
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -12,19 +12,19 @@ class IdeManager {
|
|
|
12
12
|
constructor() {
|
|
13
13
|
this.handlers = new Map();
|
|
14
14
|
this._initialized = false;
|
|
15
|
-
this.xiaomaFolderName =
|
|
15
|
+
this.xiaomaFolderName = XiaoMa_FOLDER_NAME; // Default, can be overridden
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Set the xiaoma folder name for all IDE handlers
|
|
20
20
|
* @param {string} xiaomaFolderName - The xiaoma folder name
|
|
21
21
|
*/
|
|
22
|
-
|
|
22
|
+
setXiaomaFolderName(xiaomaFolderName) {
|
|
23
23
|
this.xiaomaFolderName = xiaomaFolderName;
|
|
24
24
|
// Update all loaded handlers
|
|
25
25
|
for (const handler of this.handlers.values()) {
|
|
26
|
-
if (typeof handler.
|
|
27
|
-
handler.
|
|
26
|
+
if (typeof handler.setXiaomaFolderName === 'function') {
|
|
27
|
+
handler.setXiaomaFolderName(xiaomaFolderName);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -61,8 +61,8 @@ class IdeManager {
|
|
|
61
61
|
if (!platformInfo.installer) continue;
|
|
62
62
|
|
|
63
63
|
const handler = new ConfigDrivenIdeSetup(platformCode, platformInfo);
|
|
64
|
-
if (typeof handler.
|
|
65
|
-
handler.
|
|
64
|
+
if (typeof handler.setXiaomaFolderName === 'function') {
|
|
65
|
+
handler.setXiaomaFolderName(this.xiaomaFolderName);
|
|
66
66
|
}
|
|
67
67
|
this.handlers.set(platformCode, handler);
|
|
68
68
|
}
|
|
@@ -126,7 +126,7 @@ class IdeManager {
|
|
|
126
126
|
* Setup IDE configuration
|
|
127
127
|
* @param {string} ideName - Name of the IDE
|
|
128
128
|
* @param {string} projectDir - Project directory
|
|
129
|
-
* @param {string} xiaomaDir -
|
|
129
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
130
130
|
* @param {Object} options - Setup options
|
|
131
131
|
*/
|
|
132
132
|
async setup(ideName, projectDir, xiaomaDir, options = {}) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Central configuration for all platform/IDE codes used in the
|
|
1
|
+
# XiaoMa Platform Codes Configuration
|
|
2
|
+
# Central configuration for all platform/IDE codes used in the XiaoMa system
|
|
3
3
|
#
|
|
4
4
|
# This file defines:
|
|
5
5
|
# 1. Platform metadata (name, preferred status, category, description)
|
|
@@ -281,7 +281,7 @@ platforms:
|
|
|
281
281
|
# skip_existing: boolean (optional) # Skip files that already exist (default: false)
|
|
282
282
|
# skill_format: boolean (optional) # Use directory-per-skill output: <name>/SKILL.md
|
|
283
283
|
# # with clean frontmatter (name + description, unquoted)
|
|
284
|
-
# ancestor_conflict_check: boolean (optional) # Refuse install when ancestor dir has
|
|
284
|
+
# ancestor_conflict_check: boolean (optional) # Refuse install when ancestor dir has XiaoMa files
|
|
285
285
|
# # in the same target_dir (for IDEs that inherit
|
|
286
286
|
# # skills from parent directories)
|
|
287
287
|
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
|
-
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName,
|
|
3
|
+
const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, XiaoMa_FOLDER_NAME } = require('./path-utils');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Generates launcher command files for each agent
|
|
7
7
|
* Similar to WorkflowCommandGenerator but for agents
|
|
8
8
|
*/
|
|
9
9
|
class AgentCommandGenerator {
|
|
10
|
-
constructor(xiaomaFolderName =
|
|
10
|
+
constructor(xiaomaFolderName = XiaoMa_FOLDER_NAME) {
|
|
11
11
|
this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
|
|
12
12
|
this.xiaomaFolderName = xiaomaFolderName;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Collect agent artifacts for IDE installation
|
|
17
|
-
* @param {string} xiaomaDir -
|
|
17
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
18
18
|
* @param {Array} selectedModules - Modules to include
|
|
19
19
|
* @returns {Object} Artifacts array with metadata
|
|
20
20
|
*/
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
const TYPE_SEGMENTS = ['workflows', 'tasks', 'tools'];
|
|
20
20
|
const AGENT_SEGMENT = 'agents';
|
|
21
21
|
|
|
22
|
-
//
|
|
23
|
-
const
|
|
22
|
+
// XiaoMa installation folder name - centralized constant for all installers
|
|
23
|
+
const XiaoMa_FOLDER_NAME = '_xiaoma';
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Convert hierarchical path to flat dash-separated name (NEW STANDARD)
|
|
@@ -360,5 +360,5 @@ module.exports = {
|
|
|
360
360
|
|
|
361
361
|
TYPE_SEGMENTS,
|
|
362
362
|
AGENT_SEGMENT,
|
|
363
|
-
|
|
363
|
+
XiaoMa_FOLDER_NAME,
|
|
364
364
|
};
|
|
@@ -72,7 +72,7 @@ function getArtifactType(manifest, filename) {
|
|
|
72
72
|
* @param {string} filename - Source filename to look up
|
|
73
73
|
* @returns {boolean} install_to_xiaoma value (defaults to true)
|
|
74
74
|
*/
|
|
75
|
-
function
|
|
75
|
+
function getInstallToXiaoma(manifest, filename) {
|
|
76
76
|
if (!manifest) return true;
|
|
77
77
|
// Single-entry manifest applies to all files in the directory
|
|
78
78
|
if (manifest.__single) return manifest.__single.install_to_xiaoma !== false;
|
|
@@ -87,4 +87,4 @@ function getInstallToBmad(manifest, filename) {
|
|
|
87
87
|
return true;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
module.exports = { loadSkillManifest, getCanonicalId, getArtifactType,
|
|
90
|
+
module.exports = { loadSkillManifest, getCanonicalId, getArtifactType, getInstallToXiaoma };
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const csv = require('csv-parse/sync');
|
|
4
|
-
const { toColonName, toColonPath, toDashPath,
|
|
4
|
+
const { toColonName, toColonPath, toDashPath, XiaoMa_FOLDER_NAME } = require('./path-utils');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Generates command files for standalone tasks and tools
|
|
8
8
|
*/
|
|
9
9
|
class TaskToolCommandGenerator {
|
|
10
10
|
/**
|
|
11
|
-
* @param {string} xiaomaFolderName - Name of the
|
|
11
|
+
* @param {string} xiaomaFolderName - Name of the XiaoMa folder for template rendering (default: '_xiaoma')
|
|
12
12
|
* Note: This parameter is accepted for API consistency with AgentCommandGenerator and
|
|
13
13
|
* WorkflowCommandGenerator, but is not used for path stripping. The manifest always stores
|
|
14
14
|
* filesystem paths with '_xiaoma/' prefix (the actual folder name), while xiaomaFolderName is
|
|
15
15
|
* used for template placeholder rendering ({{xiaomaFolderName}}).
|
|
16
16
|
*/
|
|
17
|
-
constructor(xiaomaFolderName =
|
|
17
|
+
constructor(xiaomaFolderName = XiaoMa_FOLDER_NAME) {
|
|
18
18
|
this.xiaomaFolderName = xiaomaFolderName;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Collect task and tool artifacts for IDE installation
|
|
23
|
-
* @param {string} xiaomaDir -
|
|
23
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
24
24
|
* @returns {Promise<Object>} Artifacts array with metadata
|
|
25
25
|
*/
|
|
26
26
|
async collectTaskToolArtifacts(xiaomaDir) {
|
|
@@ -29,7 +29,7 @@ class TaskToolCommandGenerator {
|
|
|
29
29
|
|
|
30
30
|
// All tasks/tools in manifest are standalone (internal=true items are filtered during manifest generation)
|
|
31
31
|
const artifacts = [];
|
|
32
|
-
const xiaomaPrefix = `${
|
|
32
|
+
const xiaomaPrefix = `${XiaoMa_FOLDER_NAME}/`;
|
|
33
33
|
|
|
34
34
|
// Collect task artifacts
|
|
35
35
|
for (const task of tasks || []) {
|
|
@@ -95,7 +95,7 @@ class TaskToolCommandGenerator {
|
|
|
95
95
|
/**
|
|
96
96
|
* Generate task and tool commands from manifest CSVs
|
|
97
97
|
* @param {string} projectDir - Project directory
|
|
98
|
-
* @param {string} xiaomaDir -
|
|
98
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
99
99
|
* @param {string} baseCommandsDir - Optional base commands directory (defaults to .claude/commands/xiaoma)
|
|
100
100
|
*/
|
|
101
101
|
async generateTaskToolCommands(projectDir, xiaomaDir, baseCommandsDir = null) {
|
|
@@ -164,9 +164,9 @@ class TaskToolCommandGenerator {
|
|
|
164
164
|
if (xiaomaMatch) {
|
|
165
165
|
// Found /_xiaoma/ or /xiaoma/ - use relative path after it
|
|
166
166
|
itemPath = `{project-root}/${this.xiaomaFolderName}/${xiaomaMatch[1]}`;
|
|
167
|
-
} else if (itemPath.startsWith(`${
|
|
167
|
+
} else if (itemPath.startsWith(`${XiaoMa_FOLDER_NAME}/`)) {
|
|
168
168
|
// Relative path starting with _xiaoma/
|
|
169
|
-
itemPath = `{project-root}/${this.xiaomaFolderName}/${itemPath.slice(
|
|
169
|
+
itemPath = `{project-root}/${this.xiaomaFolderName}/${itemPath.slice(XiaoMa_FOLDER_NAME.length + 1)}`;
|
|
170
170
|
} else if (itemPath.startsWith('xiaoma/')) {
|
|
171
171
|
// Relative path starting with xiaoma/
|
|
172
172
|
itemPath = `{project-root}/${this.xiaomaFolderName}/${itemPath.slice(5)}`;
|
|
@@ -227,7 +227,7 @@ Follow all instructions in the ${type} file exactly as written.
|
|
|
227
227
|
* Creates flat files like: xiaoma_bmm_help.md
|
|
228
228
|
*
|
|
229
229
|
* @param {string} projectDir - Project directory
|
|
230
|
-
* @param {string} xiaomaDir -
|
|
230
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
231
231
|
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
232
232
|
* @returns {Object} Generation results
|
|
233
233
|
*/
|
|
@@ -271,7 +271,7 @@ Follow all instructions in the ${type} file exactly as written.
|
|
|
271
271
|
* Creates flat files like: xiaoma_bmm_help.md
|
|
272
272
|
*
|
|
273
273
|
* @param {string} projectDir - Project directory
|
|
274
|
-
* @param {string} xiaomaDir -
|
|
274
|
+
* @param {string} xiaomaDir - XiaoMa installation directory
|
|
275
275
|
* @param {string} baseCommandsDir - Base commands directory for the IDE
|
|
276
276
|
* @returns {Object} Generation results
|
|
277
277
|
*/
|
|
@@ -284,7 +284,7 @@ Follow all instructions in the ${type} file exactly as written.
|
|
|
284
284
|
// Generate command files for tasks
|
|
285
285
|
for (const task of tasks || []) {
|
|
286
286
|
const commandContent = this.generateCommandContent(task, 'task');
|
|
287
|
-
// Use dash format: xiaoma-
|
|
287
|
+
// Use dash format: xiaoma-xmc-name.md
|
|
288
288
|
const flatName = toDashPath(`${task.module}/tasks/${task.name}.md`);
|
|
289
289
|
const commandPath = path.join(baseCommandsDir, flatName);
|
|
290
290
|
await fs.ensureDir(path.dirname(commandPath));
|
|
@@ -295,7 +295,7 @@ Follow all instructions in the ${type} file exactly as written.
|
|
|
295
295
|
// Generate command files for tools
|
|
296
296
|
for (const tool of tools || []) {
|
|
297
297
|
const commandContent = this.generateCommandContent(tool, 'tool');
|
|
298
|
-
// Use dash format: xiaoma-
|
|
298
|
+
// Use dash format: xiaoma-xmc-name.md
|
|
299
299
|
const flatName = toDashPath(`${tool.module}/tools/${tool.name}.md`);
|
|
300
300
|
const commandPath = path.join(baseCommandsDir, flatName);
|
|
301
301
|
await fs.ensureDir(path.dirname(commandPath));
|
|
@@ -338,7 +338,7 @@ Follow all instructions in the ${type} file exactly as written.
|
|
|
338
338
|
|
|
339
339
|
/**
|
|
340
340
|
* Write task/tool artifacts using dash format (NEW STANDARD)
|
|
341
|
-
* Creates flat files like: xiaoma-
|
|
341
|
+
* Creates flat files like: xiaoma-xmc-help.md
|
|
342
342
|
*
|
|
343
343
|
* Note: Tasks/tools do NOT have xiaoma-agent- prefix - only agents do.
|
|
344
344
|
*
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const fs = require('fs-extra');
|
|
3
3
|
const csv = require('csv-parse/sync');
|
|
4
|
-
const {
|
|
4
|
+
const { XiaoMa_FOLDER_NAME } = require('./path-utils');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Generates command files for each workflow in the manifest
|
|
8
8
|
*/
|
|
9
9
|
class WorkflowCommandGenerator {
|
|
10
|
-
constructor(xiaomaFolderName =
|
|
10
|
+
constructor(xiaomaFolderName = XiaoMa_FOLDER_NAME) {
|
|
11
11
|
this.xiaomaFolderName = xiaomaFolderName;
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -3,7 +3,7 @@ const fs = require('fs-extra');
|
|
|
3
3
|
const { loadSkillManifest, getCanonicalId } = require('./skill-manifest');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Helpers for gathering
|
|
6
|
+
* Helpers for gathering XiaoMa agents/tasks from the installed tree.
|
|
7
7
|
* Shared by installers that need Claude-style exports.
|
|
8
8
|
*/
|
|
9
9
|
async function getAgentsFromXiaoma(xiaomaDir, selectedModules = []) {
|
|
@@ -6,7 +6,7 @@ description: '{{description}}'
|
|
|
6
6
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
7
|
|
|
8
8
|
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from {project-root}/
|
|
9
|
+
1. LOAD the FULL agent file from {project-root}/_xiaoma/{{module}}/agents/{{path}}
|
|
10
10
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
11
|
3. Execute ALL activation steps exactly as written in the agent file
|
|
12
12
|
4. Follow the agent's persona and menu system precisely
|
|
@@ -3,6 +3,6 @@ name: '{{name}}'
|
|
|
3
3
|
description: '{{description}}'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Read the entire workflow file at: {project-root}/
|
|
6
|
+
Read the entire workflow file at: {project-root}/_xiaoma/{{workflow_path}}
|
|
7
7
|
|
|
8
8
|
Follow all instructions in the workflow file exactly as written.
|
|
@@ -6,7 +6,7 @@ description: '{{description}}'
|
|
|
6
6
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
7
|
|
|
8
8
|
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from {project-root}/
|
|
9
|
+
1. LOAD the FULL agent file from {project-root}/_xiaoma/{{path}}
|
|
10
10
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
11
|
3. FOLLOW every step in the <activation> section precisely
|
|
12
12
|
4. DISPLAY the welcome/greeting as instructed
|
|
@@ -3,4 +3,4 @@ name: '{{name}}'
|
|
|
3
3
|
description: '{{description}}'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL {project-root}/{{
|
|
6
|
+
IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL {project-root}/{{xiaomaFolderName}}/{{path}}, READ its entire contents and follow its directions exactly!
|
|
@@ -7,7 +7,7 @@ inclusion: manual
|
|
|
7
7
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
8
8
|
|
|
9
9
|
<agent-activation CRITICAL="TRUE">
|
|
10
|
-
1. LOAD the FULL agent file from #[[file:{{
|
|
10
|
+
1. LOAD the FULL agent file from #[[file:{{xiaomaFolderName}}/{{path}}]]
|
|
11
11
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
12
12
|
3. FOLLOW every step in the <activation> section precisely
|
|
13
13
|
4. DISPLAY the welcome/greeting as instructed
|
|
@@ -4,4 +4,4 @@ inclusion: manual
|
|
|
4
4
|
|
|
5
5
|
# {{name}}
|
|
6
6
|
|
|
7
|
-
IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL #[[file:{{
|
|
7
|
+
IT IS CRITICAL THAT YOU FOLLOW THIS COMMAND: LOAD the FULL #[[file:{{xiaomaFolderName}}/{{path}}]], READ its entire contents and follow its directions exactly!
|
|
@@ -6,7 +6,7 @@ description: '{{description}}'
|
|
|
6
6
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
7
|
|
|
8
8
|
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from {project-root}/{{
|
|
9
|
+
1. LOAD the FULL agent file from {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
10
10
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
11
|
3. FOLLOW every step in the <activation> section precisely
|
|
12
12
|
4. DISPLAY the welcome/greeting as instructed
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
description: '{{description}}'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
Execute the
|
|
5
|
+
Execute the XiaoMa '{{name}}' task.
|
|
6
6
|
|
|
7
7
|
TASK INSTRUCTIONS:
|
|
8
8
|
|
|
9
|
-
1. LOAD the task file from {project-root}/{{
|
|
9
|
+
1. LOAD the task file from {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
10
10
|
2. READ its entire contents
|
|
11
11
|
3. FOLLOW every instruction precisely as specified
|
|
12
12
|
|
|
13
|
-
TASK FILE: {project-root}/{{
|
|
13
|
+
TASK FILE: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
description: '{{description}}'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
Execute the
|
|
5
|
+
Execute the XiaoMa '{{name}}' tool.
|
|
6
6
|
|
|
7
7
|
TOOL INSTRUCTIONS:
|
|
8
8
|
|
|
9
|
-
1. LOAD the tool file from {project-root}/{{
|
|
9
|
+
1. LOAD the tool file from {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
10
10
|
2. READ its entire contents
|
|
11
11
|
3. FOLLOW every instruction precisely as specified
|
|
12
12
|
|
|
13
|
-
TOOL FILE: {project-root}/{{
|
|
13
|
+
TOOL FILE: {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
description: '{{description}}'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
Execute the
|
|
5
|
+
Execute the XiaoMa '{{name}}' workflow.
|
|
6
6
|
|
|
7
7
|
CRITICAL: You must load and follow the workflow definition exactly.
|
|
8
8
|
|
|
9
9
|
WORKFLOW INSTRUCTIONS:
|
|
10
10
|
|
|
11
|
-
1. LOAD the workflow file from {project-root}/{{
|
|
11
|
+
1. LOAD the workflow file from {project-root}/{{xiaomaFolderName}}/{{path}}
|
|
12
12
|
2. READ its entire contents
|
|
13
13
|
3. FOLLOW every step precisely as specified
|
|
14
14
|
4. DO NOT skip or modify any steps
|
|
15
15
|
|
|
16
|
-
WORKFLOW FILE: {project-root}/{{
|
|
16
|
+
WORKFLOW FILE: {project-root}/{{xiaomaFolderName}}/{{path}}
|