@zeyue0329/xiaoma-cli 1.0.49 → 1.6.4
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/.github/workflows/quality.yaml +116 -0
- package/.husky/pre-commit +26 -0
- package/.idea/codeStyles/Project.xml +60 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/modules.xml +1 -1
- package/.idea/vcs.xml +0 -1
- package/.idea/workspace.xml +40 -24
- package/.markdownlint-cli2.yaml +41 -0
- package/.prettierignore +12 -0
- package/.vscode/settings.json +96 -0
- package/LICENSE +30 -0
- package/README.md +108 -2
- package/XIAOMA-CLI-GUIDE.md +512 -0
- package/{.idea/XiaoMa-Cli.iml → XiaoMa-Cli.iml} +1 -1
- package/custom/src/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/custom/src/agents/commit-poet/installation-guide.md +36 -0
- package/custom/src/agents/toolsmith/installation-guide.md +36 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +160 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/custom/src/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/custom/src/agents/toolsmith/toolsmith.agent.yaml +108 -0
- package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/docs/agent-customization-guide.md +208 -0
- package/docs/custom-agent-installation.md +183 -0
- package/docs/document-sharding-guide.md +449 -0
- package/docs/explanation/advanced-elicitation.md +49 -0
- package/docs/explanation/adversarial-review.md +59 -0
- package/docs/explanation/brainstorming.md +33 -0
- package/docs/explanation/established-projects-faq.md +50 -0
- package/docs/explanation/party-mode.md +59 -0
- package/docs/explanation/preventing-agent-conflicts.md +112 -0
- package/docs/explanation/project-context.md +157 -0
- package/docs/explanation/quick-dev-new-preview.md +73 -0
- package/docs/explanation/quick-flow.md +77 -0
- package/docs/explanation/why-solutioning-matters.md +77 -0
- package/docs/how-to/customize-xiaoma.md +172 -0
- package/docs/how-to/established-projects.md +117 -0
- package/docs/how-to/get-answers-about-xiaoma.md +134 -0
- package/docs/how-to/install-xiaoma.md +107 -0
- package/docs/how-to/non-interactive-installation.md +171 -0
- package/docs/how-to/project-context.md +136 -0
- package/docs/how-to/quick-fixes.md +123 -0
- package/docs/how-to/shard-large-documents.md +78 -0
- package/docs/how-to/upgrade-to-v6.md +100 -0
- package/docs/ide-info/auggie.md +31 -0
- package/docs/ide-info/claude-code.md +25 -0
- package/docs/ide-info/cline.md +31 -0
- package/docs/ide-info/codex.md +21 -0
- package/docs/ide-info/crush.md +30 -0
- package/docs/ide-info/cursor.md +25 -0
- package/docs/ide-info/gemini.md +25 -0
- package/docs/ide-info/github-copilot.md +26 -0
- package/docs/ide-info/iflow.md +33 -0
- package/docs/ide-info/kilo.md +24 -0
- package/docs/ide-info/opencode.md +24 -0
- package/docs/ide-info/qwen.md +25 -0
- package/docs/ide-info/roo.md +27 -0
- package/docs/ide-info/rovo-dev.md +388 -0
- package/docs/ide-info/trae.md +25 -0
- package/docs/ide-info/windsurf.md +22 -0
- package/docs/index.md +60 -0
- package/docs/installers-bundlers/ide-injections.md +186 -0
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +379 -0
- package/docs/rag/rag.md +856 -0
- package/docs/reference/agents.md +28 -0
- package/docs/reference/commands.md +145 -0
- package/docs/reference/modules.md +76 -0
- package/docs/reference/testing.md +106 -0
- package/docs/reference/workflow-map.md +89 -0
- package/docs/roadmap.mdx +136 -0
- package/docs/superpowers/plans/2026-03-11-upstream-sync-with-branding.md +586 -0
- package/docs/tutorials/getting-started.md +273 -0
- package/docs/v4-to-v6-upgrade.md +220 -0
- package/docs/v6-open-items.md +17 -0
- package/docs/web-bundles-gemini-gpt-guide.md +468 -0
- package/docs/zh-cn/404.md +9 -0
- package/docs/zh-cn/_STYLE_GUIDE.md +370 -0
- package/docs/zh-cn/explanation/advanced-elicitation.md +62 -0
- package/docs/zh-cn/explanation/adversarial-review.md +71 -0
- package/docs/zh-cn/explanation/brainstorming.md +43 -0
- package/docs/zh-cn/explanation/established-projects-faq.md +60 -0
- package/docs/zh-cn/explanation/party-mode.md +79 -0
- package/docs/zh-cn/explanation/preventing-agent-conflicts.md +137 -0
- package/docs/zh-cn/explanation/project-context.md +176 -0
- package/docs/zh-cn/explanation/quick-flow.md +93 -0
- package/docs/zh-cn/explanation/why-solutioning-matters.md +90 -0
- package/docs/zh-cn/how-to/customize-xiaoma.md +182 -0
- package/docs/zh-cn/how-to/established-projects.md +134 -0
- package/docs/zh-cn/how-to/get-answers-about-xiaoma.md +144 -0
- package/docs/zh-cn/how-to/install-xiaoma.md +105 -0
- package/docs/zh-cn/how-to/non-interactive-installation.md +181 -0
- package/docs/zh-cn/how-to/project-context.md +152 -0
- package/docs/zh-cn/how-to/quick-fixes.md +140 -0
- package/docs/zh-cn/how-to/shard-large-documents.md +86 -0
- package/docs/zh-cn/how-to/upgrade-to-v6.md +120 -0
- package/docs/zh-cn/index.md +69 -0
- package/docs/zh-cn/reference/agents.md +41 -0
- package/docs/zh-cn/reference/commands.md +166 -0
- package/docs/zh-cn/reference/modules.md +94 -0
- package/docs/zh-cn/reference/testing.md +122 -0
- package/docs/zh-cn/reference/workflow-map.md +104 -0
- package/docs/zh-cn/roadmap.mdx +152 -0
- package/docs/zh-cn/tutorials/getting-started.md +300 -0
- package/eslint.config.mjs +144 -0
- package/package.json +56 -58
- package/prettier.config.mjs +32 -0
- package/src/core/_module-installer/install-config.yaml +29 -0
- package/src/core/_module-installer/installer.js +60 -0
- package/src/core/agents/xiaoma-master.agent.yaml +30 -0
- package/src/core/agents/xiaoma-skill-manifest.yaml +3 -0
- package/src/core/agents/xiaoma-web-orchestrator.agent.xml +113 -0
- package/src/core/module-help.csv +10 -0
- package/src/core/module.yaml +25 -0
- package/src/core/resources/excalidraw/README.md +160 -0
- package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
- package/src/core/resources/excalidraw/library-loader.md +50 -0
- package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
- package/src/core/tasks/advanced-elicitation-methods.csv +51 -0
- package/src/core/tasks/advanced-elicitation.xml +116 -0
- package/src/core/tasks/editorial-review-prose.xml +102 -0
- package/src/core/tasks/editorial-review-structure.xml +208 -0
- package/src/core/tasks/help.md +92 -0
- package/src/core/tasks/index-docs.xml +65 -0
- package/src/core/tasks/review-adversarial-general.xml +49 -0
- package/src/core/tasks/review-edge-case-hunter.xml +63 -0
- package/src/core/tasks/shard-doc.xml +108 -0
- package/src/core/tasks/validate-workflow.xml +89 -0
- package/src/core/tasks/workflow.xml +235 -0
- package/src/core/tasks/xiaoma-help/SKILL.md +6 -0
- package/src/core/tasks/xiaoma-help/workflow.md +88 -0
- package/src/core/tasks/xiaoma-help/xiaoma-skill-manifest.yaml +1 -0
- package/src/core/tasks/xiaoma-review-adversarial-general/SKILL.md +6 -0
- package/src/core/tasks/xiaoma-review-adversarial-general/workflow.md +32 -0
- package/src/core/tasks/xiaoma-review-adversarial-general/xiaoma-skill-manifest.yaml +1 -0
- package/src/core/tasks/xiaoma-review-edge-case-hunter/SKILL.md +6 -0
- package/src/core/tasks/xiaoma-review-edge-case-hunter/workflow.md +62 -0
- package/src/core/tasks/xiaoma-review-edge-case-hunter/xiaoma-skill-manifest.yaml +1 -0
- package/src/core/tasks/xiaoma-skill-manifest.yaml +19 -0
- package/src/core/tools/shard-doc.xml +109 -0
- package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
- package/src/core/workflows/advanced-elicitation/workflow.md +138 -0
- package/src/core/workflows/advanced-elicitation/workflow.xml +118 -0
- package/src/core/workflows/advanced-elicitation/xiaoma-skill-manifest.yaml +3 -0
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +210 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
- package/src/core/workflows/brainstorming/template.md +15 -0
- package/src/core/workflows/brainstorming/workflow.md +60 -0
- package/src/core/workflows/brainstorming/xiaoma-skill-manifest.yaml +3 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
- package/src/core/workflows/party-mode/workflow.md +194 -0
- package/src/core/workflows/party-mode/xiaoma-skill-manifest.yaml +3 -0
- package/src/utility/agent-components/activation-rules.txt +6 -0
- package/src/utility/agent-components/activation-steps.txt +14 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-data.txt +5 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +13 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/src/utility/models/action-command-header.md +0 -0
- package/src/utility/models/agent-activation-ide.xml +51 -0
- package/src/utility/models/agent-activation-web.xml +50 -0
- package/src/utility/models/agent-command-header.md +1 -0
- package/src/utility/models/agent-config-template.md +23 -0
- package/src/utility/models/agent-in-team-activation.xml +3 -0
- package/src/utility/models/fragments/activation-rules.xml +7 -0
- package/src/utility/models/fragments/activation-steps.xml +16 -0
- package/src/utility/models/fragments/handler-action.xml +4 -0
- package/src/utility/models/fragments/handler-data.xml +5 -0
- package/src/utility/models/fragments/handler-exec.xml +6 -0
- package/src/utility/models/fragments/handler-multi.xml +14 -0
- package/src/utility/models/fragments/handler-tmpl.xml +5 -0
- package/src/utility/models/fragments/handler-validate-workflow.xml +7 -0
- package/src/utility/models/fragments/handler-workflow.xml +9 -0
- package/src/utility/models/fragments/menu-handlers.xml +6 -0
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +32 -0
- package/src/utility/templates/agent.customize.template.yaml +42 -0
- package/src/xmc/_module-installer/install-config.yaml +53 -0
- package/src/xmc/_module-installer/installer.js +131 -0
- package/src/xmc/_module-installer/platform-specifics/claude-code.js +35 -0
- package/src/xmc/_module-installer/platform-specifics/windsurf.js +32 -0
- package/src/xmc/agents/analyst.agent.yaml +43 -0
- package/src/xmc/agents/architect.agent.yaml +29 -0
- package/src/xmc/agents/dev.agent.yaml +38 -0
- package/src/xmc/agents/pm.agent.yaml +44 -0
- package/src/xmc/agents/qa.agent.yaml +58 -0
- package/src/xmc/agents/quick-flow-solo-dev.agent.yaml +36 -0
- package/src/xmc/agents/sm.agent.yaml +37 -0
- package/src/xmc/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
- package/src/xmc/agents/tech-writer/tech-writer.agent.yaml +46 -0
- package/src/xmc/agents/tech-writer/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/agents/ux-designer.agent.yaml +27 -0
- package/src/xmc/agents/xiaoma-skill-manifest.yaml +39 -0
- package/src/xmc/data/project-context-template.md +26 -0
- package/src/xmc/module-help.csv +32 -0
- package/src/xmc/module.yaml +50 -0
- package/src/xmc/sub-modules/claude-code/config.yaml +5 -0
- package/src/xmc/sub-modules/claude-code/injections.yaml +242 -0
- package/src/xmc/sub-modules/claude-code/readme.md +87 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-analysis/api-documenter.md +102 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-analysis/codebase-analyzer.md +82 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-analysis/data-analyst.md +101 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-analysis/pattern-detector.md +84 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/dependency-mapper.md +83 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/epic-optimizer.md +81 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/requirements-analyst.md +61 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/technical-decisions-curator.md +168 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/trend-spotter.md +115 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/user-journey-mapper.md +123 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-planning/user-researcher.md +72 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-research/market-researcher.md +51 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-research/tech-debt-auditor.md +106 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-review/document-reviewer.md +102 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-review/technical-evaluator.md +68 -0
- package/src/xmc/sub-modules/claude-code/sub-agents/xiaoma-review/test-coverage-analyzer.md +108 -0
- package/src/xmc/teams/default-party.csv +20 -0
- package/src/xmc/teams/team-fullstack.yaml +12 -0
- package/src/xmc/testarch/knowledge/api-request.md +303 -0
- package/src/xmc/testarch/knowledge/auth-session.md +356 -0
- package/src/xmc/testarch/knowledge/burn-in.md +273 -0
- package/src/xmc/testarch/knowledge/ci-burn-in.md +675 -0
- package/src/xmc/testarch/knowledge/component-tdd.md +486 -0
- package/src/xmc/testarch/knowledge/contract-testing.md +957 -0
- package/src/xmc/testarch/knowledge/data-factories.md +500 -0
- package/src/xmc/testarch/knowledge/email-auth.md +721 -0
- package/src/xmc/testarch/knowledge/error-handling.md +725 -0
- package/src/xmc/testarch/knowledge/feature-flags.md +750 -0
- package/src/xmc/testarch/knowledge/file-utils.md +260 -0
- package/src/xmc/testarch/knowledge/fixture-architecture.md +401 -0
- package/src/xmc/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/xmc/testarch/knowledge/intercept-network-call.md +280 -0
- package/src/xmc/testarch/knowledge/log.md +294 -0
- package/src/xmc/testarch/knowledge/network-error-monitor.md +272 -0
- package/src/xmc/testarch/knowledge/network-first.md +486 -0
- package/src/xmc/testarch/knowledge/network-recorder.md +265 -0
- package/src/xmc/testarch/knowledge/nfr-criteria.md +670 -0
- package/src/xmc/testarch/knowledge/overview.md +284 -0
- package/src/xmc/testarch/knowledge/playwright-config.md +730 -0
- package/src/xmc/testarch/knowledge/probability-impact.md +601 -0
- package/src/xmc/testarch/knowledge/recurse.md +296 -0
- package/src/xmc/testarch/knowledge/risk-governance.md +615 -0
- package/src/xmc/testarch/knowledge/selective-testing.md +732 -0
- package/src/xmc/testarch/knowledge/selector-resilience.md +527 -0
- package/src/xmc/testarch/knowledge/test-healing-patterns.md +644 -0
- package/src/xmc/testarch/knowledge/test-levels-framework.md +473 -0
- package/src/xmc/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/src/xmc/testarch/knowledge/test-quality.md +664 -0
- package/src/xmc/testarch/knowledge/timing-debugging.md +372 -0
- package/src/xmc/testarch/knowledge/visual-debugging.md +524 -0
- package/src/xmc/testarch/tea-index.csv +33 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/workflow.md +57 -0
- package/src/xmc/workflows/1-analysis/create-product-brief/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
- package/src/xmc/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
- package/src/xmc/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
- package/src/xmc/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
- package/src/xmc/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
- package/src/xmc/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -0
- package/src/xmc/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
- package/src/xmc/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
- package/src/xmc/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
- package/src/xmc/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
- package/src/xmc/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
- package/src/xmc/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -0
- package/src/xmc/workflows/1-analysis/research/research.template.md +29 -0
- package/src/xmc/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
- package/src/xmc/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
- package/src/xmc/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
- package/src/xmc/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
- package/src/xmc/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
- package/src/xmc/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -0
- package/src/xmc/workflows/1-analysis/research/workflow-domain-research.md +54 -0
- package/src/xmc/workflows/1-analysis/research/workflow-market-research.md +54 -0
- package/src/xmc/workflows/1-analysis/research/workflow-technical-research.md +54 -0
- package/src/xmc/workflows/1-analysis/research/xiaoma-skill-manifest.yaml +14 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
- package/src/xmc/workflows/2-plan-workflows/create-prd/xiaoma-skill-manifest.yaml +14 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
- package/src/xmc/workflows/2-plan-workflows/create-ux-design/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
- package/src/xmc/workflows/3-solutioning/check-implementation-readiness/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/workflow.md +49 -0
- package/src/xmc/workflows/3-solutioning/create-architecture/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/xmc/workflows/3-solutioning/create-epics-and-stories/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/code-review/checklist.md +23 -0
- package/src/xmc/workflows/4-implementation/code-review/discover-inputs.md +88 -0
- package/src/xmc/workflows/4-implementation/code-review/workflow.md +271 -0
- package/src/xmc/workflows/4-implementation/code-review/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/correct-course/checklist.md +288 -0
- package/src/xmc/workflows/4-implementation/correct-course/workflow.md +274 -0
- package/src/xmc/workflows/4-implementation/correct-course/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/create-story/checklist.md +357 -0
- package/src/xmc/workflows/4-implementation/create-story/discover-inputs.md +88 -0
- package/src/xmc/workflows/4-implementation/create-story/template.md +49 -0
- package/src/xmc/workflows/4-implementation/create-story/workflow.md +388 -0
- package/src/xmc/workflows/4-implementation/create-story/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/dev-story/checklist.md +80 -0
- package/src/xmc/workflows/4-implementation/dev-story/workflow.md +457 -0
- package/src/xmc/workflows/4-implementation/dev-story/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/retrospective/workflow.md +1485 -0
- package/src/xmc/workflows/4-implementation/retrospective/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/src/xmc/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +56 -0
- package/src/xmc/workflows/4-implementation/sprint-planning/workflow.md +271 -0
- package/src/xmc/workflows/4-implementation/sprint-planning/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/4-implementation/sprint-status/workflow.md +267 -0
- package/src/xmc/workflows/4-implementation/sprint-status/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/document-project/checklist.md +245 -0
- package/src/xmc/workflows/document-project/documentation-requirements.csv +12 -0
- package/src/xmc/workflows/document-project/instructions.md +128 -0
- package/src/xmc/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/src/xmc/workflows/document-project/templates/index-template.md +169 -0
- package/src/xmc/workflows/document-project/templates/project-overview-template.md +103 -0
- package/src/xmc/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/src/xmc/workflows/document-project/templates/source-tree-template.md +135 -0
- package/src/xmc/workflows/document-project/workflow.md +39 -0
- package/src/xmc/workflows/document-project/workflows/deep-dive-instructions.md +297 -0
- package/src/xmc/workflows/document-project/workflows/deep-dive-workflow.md +42 -0
- package/src/xmc/workflows/document-project/workflows/full-scan-instructions.md +1105 -0
- package/src/xmc/workflows/document-project/workflows/full-scan-workflow.md +42 -0
- package/src/xmc/workflows/document-project/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/generate-project-context/project-context-template.md +21 -0
- package/src/xmc/workflows/generate-project-context/steps/step-01-discover.md +184 -0
- package/src/xmc/workflows/generate-project-context/steps/step-02-generate.md +318 -0
- package/src/xmc/workflows/generate-project-context/steps/step-03-complete.md +278 -0
- package/src/xmc/workflows/generate-project-context/workflow.md +49 -0
- package/src/xmc/workflows/generate-project-context/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/qa-generate-e2e-tests/checklist.md +33 -0
- package/src/xmc/workflows/qa-generate-e2e-tests/workflow.md +143 -0
- package/src/xmc/workflows/qa-generate-e2e-tests/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/steps/step-05-adversarial-review.md +98 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/workflow.md +50 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-dev/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/steps/step-02-investigate.md +143 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/steps/step-03-generate.md +126 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/steps/step-04-review.md +198 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/tech-spec-template.md +74 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/workflow.md +79 -0
- package/src/xmc/workflows/xiaoma-quick-flow/quick-spec/xiaoma-skill-manifest.yaml +3 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/SKILL.md +6 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/steps/step-01-clarify-and-route.md +54 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/steps/step-02-plan.md +39 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/steps/step-03-implement.md +35 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/steps/step-04-review.md +55 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/steps/step-05-present.md +19 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/tech-spec-template.md +90 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/workflow.md +84 -0
- package/src/xmc/workflows/xiaoma-quick-flow/xiaoma-quick-dev-new-preview/xiaoma-skill-manifest.yaml +1 -0
- package/test/README.md +295 -0
- package/test/adversarial-review-tests/README.md +56 -0
- package/test/adversarial-review-tests/sample-content.md +46 -0
- package/test/adversarial-review-tests/test-cases.yaml +103 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
- package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
- package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
- package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
- package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
- package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
- package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
- package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
- package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
- package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
- package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
- package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
- package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
- package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
- package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
- package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
- package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
- package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
- package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
- package/test/fixtures/file-refs-csv/valid/xmc-style.csv +3 -0
- package/test/test-agent-schema.js +387 -0
- package/test/test-cli-integration.sh +159 -0
- package/test/test-file-refs-csv.js +133 -0
- package/test/test-install-to-xiaoma.js +154 -0
- package/test/test-installation-components.js +1802 -0
- package/test/test-rehype-plugins.mjs +1050 -0
- package/test/test-workflow-path-regex.js +88 -0
- package/test/unit-test-schema.js +133 -0
- package/tools/build-docs.mjs +464 -0
- package/tools/cli/README.md +60 -0
- package/tools/cli/bundlers/bundle-web.js +179 -0
- package/tools/cli/bundlers/bundlers/bundle-web.js +179 -0
- package/tools/cli/bundlers/bundlers/test-analyst.js +28 -0
- package/tools/cli/bundlers/bundlers/test-bundler.js +119 -0
- package/tools/cli/bundlers/bundlers/web-bundler.js +1754 -0
- package/tools/cli/bundlers/test-analyst.js +28 -0
- package/tools/cli/bundlers/test-bundler.js +119 -0
- package/tools/cli/bundlers/web-bundler.js +1754 -0
- package/tools/cli/commands/agent-install.js +409 -0
- package/tools/cli/commands/build.js +458 -0
- package/tools/cli/commands/cleanup.js +144 -0
- package/tools/cli/commands/install.js +87 -0
- package/tools/cli/commands/list.js +43 -0
- package/tools/cli/commands/status.js +65 -0
- package/tools/cli/commands/uninstall.js +167 -0
- package/tools/cli/commands/update.js +28 -0
- package/tools/cli/external-official-modules.yaml +53 -0
- package/tools/cli/installers/install-messages.yaml +39 -0
- package/tools/cli/installers/lib/core/config-collector.js +1285 -0
- package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +743 -0
- package/tools/cli/installers/lib/core/detector.js +223 -0
- package/tools/cli/installers/lib/core/ide-config-manager.js +157 -0
- package/tools/cli/installers/lib/core/installer.js +3195 -0
- package/tools/cli/installers/lib/core/manifest-generator.js +1374 -0
- package/tools/cli/installers/lib/core/manifest.js +1038 -0
- package/tools/cli/installers/lib/custom/handler.js +358 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +674 -0
- package/tools/cli/installers/lib/ide/_config-driven.js +1053 -0
- package/tools/cli/installers/lib/ide/antigravity.js +510 -0
- package/tools/cli/installers/lib/ide/auggie.js +232 -0
- package/tools/cli/installers/lib/ide/claude-code.js +512 -0
- package/tools/cli/installers/lib/ide/cline.js +269 -0
- package/tools/cli/installers/lib/ide/codex.js +440 -0
- package/tools/cli/installers/lib/ide/crush.js +287 -0
- package/tools/cli/installers/lib/ide/cursor.js +400 -0
- package/tools/cli/installers/lib/ide/gemini.js +253 -0
- package/tools/cli/installers/lib/ide/github-copilot.js +699 -0
- package/tools/cli/installers/lib/ide/iflow.js +172 -0
- package/tools/cli/installers/lib/ide/kilo.js +269 -0
- package/tools/cli/installers/lib/ide/manager.js +304 -0
- package/tools/cli/installers/lib/ide/opencode.js +257 -0
- package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +321 -0
- package/tools/cli/installers/lib/ide/qwen.js +372 -0
- package/tools/cli/installers/lib/ide/roo.js +324 -0
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/rovodev.js +257 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +181 -0
- package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
- package/tools/cli/installers/lib/ide/shared/path-utils.js +364 -0
- package/tools/cli/installers/lib/ide/shared/skill-manifest.js +90 -0
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +368 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +179 -0
- package/tools/cli/installers/lib/ide/shared/xiaoma-artifacts.js +181 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +13 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +13 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +16 -0
- package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
- package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
- package/tools/cli/installers/lib/ide/templates/split/.gitkeep +0 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/ide/trae.js +313 -0
- package/tools/cli/installers/lib/ide/windsurf.js +258 -0
- package/tools/cli/installers/lib/message-loader.js +83 -0
- package/tools/cli/installers/lib/modules/external-manager.js +136 -0
- package/tools/cli/installers/lib/modules/manager.js +1382 -0
- package/tools/cli/lib/activation-builder.js +165 -0
- package/tools/cli/lib/agent/compiler.js +516 -0
- package/tools/cli/lib/agent/installer.js +680 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent-analyzer.js +97 -0
- package/tools/cli/lib/agent-party-generator.js +194 -0
- package/tools/cli/lib/cli-utils.js +182 -0
- package/tools/cli/lib/config.js +213 -0
- package/tools/cli/lib/file-ops.js +204 -0
- package/tools/cli/lib/platform-codes.js +116 -0
- package/tools/cli/lib/project-root.js +77 -0
- package/tools/cli/lib/prompts.js +809 -0
- package/tools/cli/lib/replace-project-root.js +239 -0
- package/tools/cli/lib/ui.js +1940 -0
- package/tools/cli/lib/xml-handler.js +177 -0
- package/tools/cli/lib/xml-to-markdown.js +82 -0
- package/tools/{yaml-format.js → cli/lib/yaml-format.js} +39 -71
- package/tools/cli/lib/yaml-xml-builder.js +570 -0
- package/tools/cli/regenerate-manifests.js +28 -0
- package/tools/cli/test-yaml-builder.js +43 -0
- package/tools/cli/xiaoma-cli.js +106 -0
- package/tools/docs/_prompt-external-modules-page.md +59 -0
- package/tools/docs/fix-refs.md +91 -0
- package/tools/docs/native-skills-migration-checklist.md +281 -0
- package/tools/fix-doc-links.js +285 -0
- package/tools/flattener/aggregate.js +12 -30
- package/tools/flattener/binary.js +43 -46
- package/tools/flattener/discovery.js +15 -23
- package/tools/flattener/files.js +6 -6
- package/tools/flattener/flattener/aggregate.js +76 -0
- package/tools/flattener/flattener/binary.js +80 -0
- package/tools/flattener/flattener/discovery.js +71 -0
- package/tools/flattener/flattener/files.js +35 -0
- package/tools/flattener/flattener/ignoreRules.js +172 -0
- package/tools/flattener/flattener/main.js +483 -0
- package/tools/flattener/flattener/projectRoot.js +201 -0
- package/tools/flattener/flattener/prompts.js +44 -0
- package/tools/flattener/flattener/stats.helpers.js +368 -0
- package/tools/flattener/flattener/stats.js +75 -0
- package/tools/flattener/flattener/test-matrix.js +409 -0
- package/tools/flattener/flattener/xml.js +88 -0
- package/tools/flattener/ignoreRules.js +122 -127
- package/tools/flattener/main.js +140 -330
- package/tools/flattener/projectRoot.js +71 -81
- package/tools/flattener/prompts.js +10 -12
- package/tools/flattener/stats.helpers.js +63 -119
- package/tools/flattener/stats.js +2 -7
- package/tools/flattener/test-matrix.js +169 -228
- package/tools/flattener/xml.js +23 -31
- package/tools/format-workflow-md.js +263 -0
- package/tools/lib/xml-utils.js +13 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +157 -0
- package/tools/schema/agent.js +489 -0
- package/tools/validate-agent-schema.js +110 -0
- package/tools/validate-bundles.js +87 -0
- package/tools/validate-doc-links.js +409 -0
- package/tools/validate-file-refs.js +556 -0
- package/tools/validate-svg-changes.sh +356 -0
- package/tools/xiaoma-npx-wrapper.js +18 -24
- package/web-bundles/xmc/agents/analyst.xml +109 -0
- package/web-bundles/xmc/agents/architect.xml +101 -0
- package/web-bundles/xmc/agents/dev.xml +106 -0
- package/web-bundles/xmc/agents/pm.xml +112 -0
- package/web-bundles/xmc/agents/qa.xml +126 -0
- package/web-bundles/xmc/agents/quick-flow-solo-dev.xml +104 -0
- package/web-bundles/xmc/agents/sm.xml +109 -0
- package/web-bundles/xmc/agents/ux-designer.xml +100 -0
- package/web-bundles/xmc/teams/team-fullstack.xml +1192 -0
- package/.claude/agents/tech-translator.md +0 -124
- package/.claude/settings.local.json +0 -37
- package/.idea/misc.xml +0 -6
- package/.xiaoma-core/.coordinator-state.json +0 -19
- package/CLAUDE.md +0 -283
- package/JAVA-BACKEND-COMMANDS-REFERENCE.md +0 -300
- package/JAVA-BACKEND-ITERATION-GUIDE.md +0 -2116
- package/common/tasks/create-doc.md +0 -103
- package/common/tasks/execute-checklist.md +0 -88
- package/common/utils/bmad-doc-template.md +0 -327
- package/common/utils/workflow-management.md +0 -71
- package/dist/agents/analyst.txt +0 -6308
- package/dist/agents/architect.txt +0 -5046
- package/dist/agents/automation-orchestrator.txt +0 -396
- package/dist/agents/dev.txt +0 -1180
- package/dist/agents/full-requirement-orchestrator.txt +0 -505
- package/dist/agents/pm.txt +0 -3078
- package/dist/agents/po.txt +0 -1358
- package/dist/agents/qa.txt +0 -2002
- package/dist/agents/sm.txt +0 -3044
- package/dist/agents/ux-expert.txt +0 -707
- package/dist/agents/workflow-executor.txt +0 -1029
- package/dist/agents/workflow-helper.txt +0 -93
- package/dist/agents/xiaoma-master.txt +0 -9008
- package/dist/agents/xiaoma-orchestrator.txt +0 -1523
- package/dist/teams/team-all.txt +0 -23101
- package/dist/teams/team-fullstack-with-database.txt +0 -25076
- package/dist/teams/team-fullstack.txt +0 -15820
- package/dist/teams/team-ide-minimal.txt +0 -8285
- package/dist/teams/team-no-ui.txt +0 -14368
- package/docs/GUIDING-PRINCIPLES.md +0 -91
- package/docs/architecture/workflow-coordinator-implementation.md +0 -1188
- package/docs/architecture-sharding-modification.md +0 -623
- package/docs/automated-requirements-analysis-outputs.md +0 -896
- package/docs/core-architecture.md +0 -219
- package/docs/enhanced-ide-development-workflow.md +0 -248
- package/docs/prd/workflow-coordinator-prd.md +0 -1214
- package/docs/user-guide.md +0 -530
- package/docs/versioning-and-releases.md +0 -155
- package/docs/versions.md +0 -48
- package/docs/working-in-the-brownfield.md +0 -597
- package/tools/api-server.js +0 -367
- package/tools/builders/web-builder.js +0 -830
- package/tools/bump-all-versions.js +0 -133
- package/tools/cli.js +0 -157
- package/tools/installer/README.md +0 -8
- package/tools/installer/bin/xiaoma.js +0 -477
- package/tools/installer/config/ide-agent-config.yaml +0 -58
- package/tools/installer/config/install.config.yaml +0 -164
- package/tools/installer/lib/config-loader.js +0 -286
- package/tools/installer/lib/file-manager.js +0 -446
- package/tools/installer/lib/ide-base-setup.js +0 -238
- package/tools/installer/lib/ide-setup.js +0 -2027
- package/tools/installer/lib/installer.js +0 -2333
- package/tools/installer/lib/memory-profiler.js +0 -235
- package/tools/installer/lib/module-manager.js +0 -116
- package/tools/installer/lib/resource-locator.js +0 -334
- package/tools/installer/package-lock.json +0 -715
- package/tools/installer/package.json +0 -44
- package/tools/lib/dependency-resolver.js +0 -186
- package/tools/lib/yaml-utils.js +0 -34
- package/tools/md-assets/web-agent-startup-instructions.md +0 -39
- package/tools/preview-release-notes.js +0 -74
- package/tools/setup-hooks.sh +0 -37
- package/tools/shared/bannerArt.js +0 -105
- package/tools/sync-installer-version.js +0 -41
- package/tools/sync-version.sh +0 -23
- package/tools/upgraders/v3-to-v4-upgrader.js +0 -753
- package/tools/version-bump.js +0 -100
- package/tools/workflow-coordinator/README.md +0 -38
- package/tools/workflow-coordinator/USAGE.md +0 -548
- package/tools/workflow-coordinator/package-lock.json +0 -4868
- package/tools/workflow-coordinator/package.json +0 -35
- package/tools/workflow-coordinator/src/api/server.js +0 -207
- package/tools/workflow-coordinator/src/controller/workflow-controller.js +0 -263
- package/tools/workflow-coordinator/src/index.js +0 -113
- package/tools/workflow-coordinator/src/parser/workflow-parser.js +0 -144
- package/tools/workflow-coordinator/src/utils/state-manager.js +0 -59
- package/tools/workflow-coordinator/src/utils/validator.js +0 -86
- package/tools/workflow-coordinator/test/integration-test.js +0 -266
- package/tools/workflow-coordinator/test/quick-test.js +0 -127
- package/xiaoma-core/agent-teams/team-all.yaml +0 -15
- package/xiaoma-core/agent-teams/team-fullstack-with-database.yaml +0 -27
- package/xiaoma-core/agent-teams/team-fullstack.yaml +0 -19
- package/xiaoma-core/agent-teams/team-ide-minimal.yaml +0 -11
- package/xiaoma-core/agent-teams/team-no-ui.yaml +0 -14
- package/xiaoma-core/agents/analyst.md +0 -91
- package/xiaoma-core/agents/architect.md +0 -88
- package/xiaoma-core/agents/automated-fix-validator.yaml +0 -579
- package/xiaoma-core/agents/automated-quality-validator.yaml +0 -549
- package/xiaoma-core/agents/automation-orchestrator.md +0 -353
- package/xiaoma-core/agents/dev.md +0 -144
- package/xiaoma-core/agents/enhanced-workflow-orchestrator.yaml +0 -304
- package/xiaoma-core/agents/full-requirement-orchestrator.md +0 -462
- package/xiaoma-core/agents/global-requirements-auditor.yaml +0 -520
- package/xiaoma-core/agents/intelligent-template-adapter.yaml +0 -389
- package/xiaoma-core/agents/issue-dispatcher.yaml +0 -627
- package/xiaoma-core/agents/master-execution-engine.yaml +0 -543
- package/xiaoma-core/agents/pm.md +0 -85
- package/xiaoma-core/agents/po.md +0 -77
- package/xiaoma-core/agents/qa.md +0 -88
- package/xiaoma-core/agents/requirements-coverage-auditor.yaml +0 -373
- package/xiaoma-core/agents/sm.md +0 -125
- package/xiaoma-core/agents/ux-expert.md +0 -67
- package/xiaoma-core/agents/workflow-executor.md +0 -1031
- package/xiaoma-core/agents/workflow-helper.md +0 -481
- package/xiaoma-core/agents/xiaoma-master.md +0 -108
- package/xiaoma-core/agents/xiaoma-orchestrator.md +0 -145
- package/xiaoma-core/checklists/architect-checklist.md +0 -440
- package/xiaoma-core/checklists/change-checklist.md +0 -184
- package/xiaoma-core/checklists/dev-completion-checklist.md +0 -324
- package/xiaoma-core/checklists/pm-checklist.md +0 -372
- package/xiaoma-core/checklists/po-master-checklist.md +0 -434
- package/xiaoma-core/checklists/po-story-validation-checklist.md +0 -219
- package/xiaoma-core/checklists/qa-approval-checklist.md +0 -393
- package/xiaoma-core/checklists/story-dod-checklist.md +0 -96
- package/xiaoma-core/checklists/story-draft-checklist.md +0 -155
- package/xiaoma-core/core-config.yaml +0 -23
- package/xiaoma-core/data/bmad-kb.md +0 -809
- package/xiaoma-core/data/brainstorming-techniques.md +0 -38
- package/xiaoma-core/data/elicitation-methods.md +0 -156
- package/xiaoma-core/data/technical-preferences.md +0 -5
- package/xiaoma-core/data/test-levels-framework.md +0 -148
- package/xiaoma-core/data/test-priorities-matrix.md +0 -174
- package/xiaoma-core/scripts/build-validation/pre-dev-validation.sh +0 -71
- package/xiaoma-core/scripts/build-validation/progressive-validation.sh +0 -88
- package/xiaoma-core/scripts/build-validation/quick-check.sh +0 -69
- package/xiaoma-core/tasks/advanced-elicitation.md +0 -119
- package/xiaoma-core/tasks/analyze-existing-database.md +0 -155
- package/xiaoma-core/tasks/apply-qa-fixes.md +0 -150
- package/xiaoma-core/tasks/automated-story-cycle.md +0 -370
- package/xiaoma-core/tasks/batch-story-generation.md +0 -354
- package/xiaoma-core/tasks/brownfield-create-epic.md +0 -162
- package/xiaoma-core/tasks/brownfield-create-story.md +0 -149
- package/xiaoma-core/tasks/correct-course.md +0 -72
- package/xiaoma-core/tasks/create-brownfield-story.md +0 -314
- package/xiaoma-core/tasks/create-database-design.md +0 -161
- package/xiaoma-core/tasks/create-deep-research-prompt.md +0 -280
- package/xiaoma-core/tasks/create-enhanced-story-with-database.md +0 -250
- package/xiaoma-core/tasks/create-incremental-architecture.md +0 -525
- package/xiaoma-core/tasks/create-next-story.md +0 -114
- package/xiaoma-core/tasks/create-prd-from-rag.md +0 -435
- package/xiaoma-core/tasks/create-story-with-rag.md +0 -559
- package/xiaoma-core/tasks/develop-story-with-rag.md +0 -536
- package/xiaoma-core/tasks/document-project.md +0 -345
- package/xiaoma-core/tasks/facilitate-brainstorming-session.md +0 -138
- package/xiaoma-core/tasks/generate-ai-frontend-prompt.md +0 -53
- package/xiaoma-core/tasks/generate-database-ddl.md +0 -240
- package/xiaoma-core/tasks/generate-database-entities.md +0 -501
- package/xiaoma-core/tasks/generate-rag-questions.md +0 -312
- package/xiaoma-core/tasks/index-docs.md +0 -175
- package/xiaoma-core/tasks/kb-mode-interaction.md +0 -77
- package/xiaoma-core/tasks/nfr-assess.md +0 -345
- package/xiaoma-core/tasks/project-integration-testing.md +0 -477
- package/xiaoma-core/tasks/qa-gate.md +0 -163
- package/xiaoma-core/tasks/requirement-analysis-with-rag.md +0 -1318
- package/xiaoma-core/tasks/requirements-coverage-audit.md +0 -198
- package/xiaoma-core/tasks/review-story.md +0 -316
- package/xiaoma-core/tasks/risk-profile.md +0 -355
- package/xiaoma-core/tasks/serial-development-orchestration.md +0 -426
- package/xiaoma-core/tasks/shard-doc.md +0 -187
- package/xiaoma-core/tasks/test-design.md +0 -176
- package/xiaoma-core/tasks/trace-requirements.md +0 -266
- package/xiaoma-core/tasks/validate-next-story.md +0 -136
- package/xiaoma-core/templates/api-design-tmpl.yaml +0 -704
- package/xiaoma-core/templates/architecture-tmpl.yaml +0 -650
- package/xiaoma-core/templates/brainstorming-output-tmpl.yaml +0 -156
- package/xiaoma-core/templates/brownfield-architecture-tmpl.yaml +0 -476
- package/xiaoma-core/templates/brownfield-prd-tmpl.yaml +0 -280
- package/xiaoma-core/templates/competitor-analysis-tmpl.yaml +0 -336
- package/xiaoma-core/templates/database-design-tmpl.yaml +0 -266
- package/xiaoma-core/templates/enhanced-story-with-database-tmpl.yaml +0 -428
- package/xiaoma-core/templates/front-end-architecture-tmpl.yaml +0 -272
- package/xiaoma-core/templates/front-end-spec-tmpl.yaml +0 -354
- package/xiaoma-core/templates/fullstack-architecture-tmpl.yaml +0 -925
- package/xiaoma-core/templates/global-qa-monitoring-tmpl.yaml +0 -443
- package/xiaoma-core/templates/incremental-architecture-tmpl.yaml +0 -601
- package/xiaoma-core/templates/market-research-tmpl.yaml +0 -252
- package/xiaoma-core/templates/maven-lombok-template.xml +0 -111
- package/xiaoma-core/templates/prd-from-rag-tmpl.yaml +0 -410
- package/xiaoma-core/templates/prd-tmpl.yaml +0 -202
- package/xiaoma-core/templates/project-brief-tmpl.yaml +0 -221
- package/xiaoma-core/templates/qa-gate-tmpl.yaml +0 -102
- package/xiaoma-core/templates/rag-knowledge-tmpl.yaml +0 -569
- package/xiaoma-core/templates/rag-questions-tmpl.yaml +0 -949
- package/xiaoma-core/templates/requirements-coverage-audit.yaml +0 -330
- package/xiaoma-core/templates/start-enhanced-workflow.yaml +0 -347
- package/xiaoma-core/templates/story-tmpl.yaml +0 -137
- package/xiaoma-core/templates/story-with-rag-tmpl.yaml +0 -360
- package/xiaoma-core/workflows/automated-requirements-analysis.yaml +0 -2149
- package/xiaoma-core/workflows/automated-requirements-development.yaml +0 -739
- package/xiaoma-core/workflows/automated-story-development.yaml +0 -1264
- package/xiaoma-core/workflows/brownfield-fullstack.yaml +0 -298
- package/xiaoma-core/workflows/brownfield-service.yaml +0 -188
- package/xiaoma-core/workflows/brownfield-ui.yaml +0 -198
- package/xiaoma-core/workflows/enhanced-fullstack-with-database.yaml +0 -427
- package/xiaoma-core/workflows/enhanced-fullstack-with-qa-loop.yaml +0 -766
- package/xiaoma-core/workflows/full-requirement-automation.yaml +0 -1305
- package/xiaoma-core/workflows/greenfield-fullstack.yaml +0 -241
- package/xiaoma-core/workflows/greenfield-service.yaml +0 -207
- package/xiaoma-core/workflows/greenfield-ui.yaml +0 -236
|
@@ -5,67 +5,64 @@
|
|
|
5
5
|
No external options or flags required. Safe to run multiple times.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
const os = require(
|
|
9
|
-
const path = require(
|
|
10
|
-
const fs = require(
|
|
11
|
-
const { promisify } = require(
|
|
12
|
-
const { execFile } = require(
|
|
13
|
-
const process = require(
|
|
8
|
+
const os = require('node:os');
|
|
9
|
+
const path = require('node:path');
|
|
10
|
+
const fs = require('fs-extra');
|
|
11
|
+
const { promisify } = require('node:util');
|
|
12
|
+
const { execFile } = require('node:child_process');
|
|
13
|
+
const process = require('node:process');
|
|
14
14
|
const execFileAsync = promisify(execFile);
|
|
15
15
|
|
|
16
|
-
const { findProjectRoot } = require(
|
|
16
|
+
const { findProjectRoot } = require('./projectRoot.js');
|
|
17
17
|
|
|
18
18
|
async function cmdAvailable(cmd) {
|
|
19
19
|
try {
|
|
20
|
-
await execFileAsync(cmd, [
|
|
21
|
-
timeout: 500,
|
|
22
|
-
windowsHide: true,
|
|
23
|
-
});
|
|
20
|
+
await execFileAsync(cmd, ['--version'], { timeout: 500, windowsHide: true });
|
|
24
21
|
return true;
|
|
25
22
|
} catch {
|
|
26
23
|
return false;
|
|
27
24
|
}
|
|
28
25
|
|
|
29
26
|
async function testSvnMarker() {
|
|
30
|
-
const root = await mkTmpDir(
|
|
31
|
-
const nested = path.join(root,
|
|
27
|
+
const root = await mkTmpDir('svn');
|
|
28
|
+
const nested = path.join(root, 'proj', 'code');
|
|
32
29
|
await fs.ensureDir(nested);
|
|
33
|
-
await fs.ensureDir(path.join(root,
|
|
30
|
+
await fs.ensureDir(path.join(root, '.svn'));
|
|
34
31
|
const found = await findProjectRoot(nested);
|
|
35
|
-
assertEqual(found, root,
|
|
36
|
-
return { name:
|
|
32
|
+
assertEqual(found, root, '.svn marker should be detected');
|
|
33
|
+
return { name: 'svn-marker', ok: true };
|
|
37
34
|
}
|
|
38
35
|
|
|
39
36
|
async function testSymlinkStart() {
|
|
40
|
-
const root = await mkTmpDir(
|
|
41
|
-
const nested = path.join(root,
|
|
37
|
+
const root = await mkTmpDir('symlink-start');
|
|
38
|
+
const nested = path.join(root, 'a', 'b');
|
|
42
39
|
await fs.ensureDir(nested);
|
|
43
|
-
await fs.writeFile(path.join(root,
|
|
44
|
-
const tmp = await mkTmpDir(
|
|
45
|
-
const link = path.join(tmp,
|
|
40
|
+
await fs.writeFile(path.join(root, '.project-root'), '\n');
|
|
41
|
+
const tmp = await mkTmpDir('symlink-tmp');
|
|
42
|
+
const link = path.join(tmp, 'link-to-b');
|
|
46
43
|
try {
|
|
47
44
|
await fs.symlink(nested, link);
|
|
48
45
|
} catch {
|
|
49
46
|
// symlink may not be permitted on some systems; skip
|
|
50
|
-
return { name:
|
|
47
|
+
return { name: 'symlink-start', ok: true, skipped: true };
|
|
51
48
|
}
|
|
52
49
|
const found = await findProjectRoot(link);
|
|
53
|
-
assertEqual(found, root,
|
|
54
|
-
return { name:
|
|
50
|
+
assertEqual(found, root, 'should resolve symlinked start to real root');
|
|
51
|
+
return { name: 'symlink-start', ok: true };
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
async function testSubmoduleLikeInnerGitFile() {
|
|
58
|
-
const root = await mkTmpDir(
|
|
59
|
-
const mid = path.join(root,
|
|
60
|
-
const leaf = path.join(mid,
|
|
55
|
+
const root = await mkTmpDir('submodule-like');
|
|
56
|
+
const mid = path.join(root, 'mid');
|
|
57
|
+
const leaf = path.join(mid, 'leaf');
|
|
61
58
|
await fs.ensureDir(leaf);
|
|
62
59
|
// outer repo
|
|
63
|
-
await fs.ensureDir(path.join(root,
|
|
60
|
+
await fs.ensureDir(path.join(root, '.git'));
|
|
64
61
|
// inner submodule-like .git file
|
|
65
|
-
await fs.writeFile(path.join(mid,
|
|
62
|
+
await fs.writeFile(path.join(mid, '.git'), 'gitdir: ../.git/modules/mid\n');
|
|
66
63
|
const found = await findProjectRoot(leaf);
|
|
67
|
-
assertEqual(found, root,
|
|
68
|
-
return { name:
|
|
64
|
+
assertEqual(found, root, 'outermost .git should win on tie weight');
|
|
65
|
+
return { name: 'submodule-like-gitfile', ok: true };
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
68
|
|
|
@@ -82,325 +79,274 @@ function assertEqual(actual, expected, msg) {
|
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
async function testSentinel() {
|
|
85
|
-
const root = await mkTmpDir(
|
|
86
|
-
const nested = path.join(root,
|
|
82
|
+
const root = await mkTmpDir('sentinel');
|
|
83
|
+
const nested = path.join(root, 'a', 'b', 'c');
|
|
87
84
|
await fs.ensureDir(nested);
|
|
88
|
-
await fs.writeFile(path.join(root,
|
|
85
|
+
await fs.writeFile(path.join(root, '.project-root'), '\n');
|
|
89
86
|
const found = await findProjectRoot(nested);
|
|
90
|
-
await assertEqual(found, root,
|
|
91
|
-
return { name:
|
|
87
|
+
await assertEqual(found, root, 'sentinel .project-root should win');
|
|
88
|
+
return { name: 'sentinel', ok: true };
|
|
92
89
|
}
|
|
93
90
|
|
|
94
91
|
async function testOtherSentinels() {
|
|
95
|
-
const root = await mkTmpDir(
|
|
96
|
-
const nested = path.join(root,
|
|
92
|
+
const root = await mkTmpDir('other-sentinels');
|
|
93
|
+
const nested = path.join(root, 'x', 'y');
|
|
97
94
|
await fs.ensureDir(nested);
|
|
98
|
-
await fs.writeFile(path.join(root,
|
|
95
|
+
await fs.writeFile(path.join(root, '.workspace-root'), '\n');
|
|
99
96
|
const found1 = await findProjectRoot(nested);
|
|
100
|
-
assertEqual(found1, root,
|
|
97
|
+
assertEqual(found1, root, 'sentinel .workspace-root should win');
|
|
101
98
|
|
|
102
|
-
await fs.remove(path.join(root,
|
|
103
|
-
await fs.writeFile(path.join(root,
|
|
99
|
+
await fs.remove(path.join(root, '.workspace-root'));
|
|
100
|
+
await fs.writeFile(path.join(root, '.repo-root'), '\n');
|
|
104
101
|
const found2 = await findProjectRoot(nested);
|
|
105
|
-
assertEqual(found2, root,
|
|
106
|
-
return { name:
|
|
102
|
+
assertEqual(found2, root, 'sentinel .repo-root should win');
|
|
103
|
+
return { name: 'other-sentinels', ok: true };
|
|
107
104
|
}
|
|
108
105
|
|
|
109
106
|
async function testGitCliAndMarker() {
|
|
110
|
-
const hasGit = await cmdAvailable(
|
|
111
|
-
if (!hasGit) return { name:
|
|
107
|
+
const hasGit = await cmdAvailable('git');
|
|
108
|
+
if (!hasGit) return { name: 'git-cli', ok: true, skipped: true };
|
|
112
109
|
|
|
113
|
-
const root = await mkTmpDir(
|
|
114
|
-
const nested = path.join(root,
|
|
110
|
+
const root = await mkTmpDir('git');
|
|
111
|
+
const nested = path.join(root, 'pkg', 'src');
|
|
115
112
|
await fs.ensureDir(nested);
|
|
116
|
-
await execFileAsync(
|
|
113
|
+
await execFileAsync('git', ['init'], { cwd: root, timeout: 2000 });
|
|
117
114
|
const found = await findProjectRoot(nested);
|
|
118
|
-
await assertEqual(found, root,
|
|
119
|
-
return { name:
|
|
115
|
+
await assertEqual(found, root, 'git toplevel should be detected');
|
|
116
|
+
return { name: 'git-cli', ok: true };
|
|
120
117
|
}
|
|
121
118
|
|
|
122
119
|
async function testHgMarkerOrCli() {
|
|
123
120
|
// Prefer simple marker test to avoid requiring Mercurial install
|
|
124
|
-
const root = await mkTmpDir(
|
|
125
|
-
const nested = path.join(root,
|
|
121
|
+
const root = await mkTmpDir('hg');
|
|
122
|
+
const nested = path.join(root, 'lib');
|
|
126
123
|
await fs.ensureDir(nested);
|
|
127
|
-
await fs.ensureDir(path.join(root,
|
|
124
|
+
await fs.ensureDir(path.join(root, '.hg'));
|
|
128
125
|
const found = await findProjectRoot(nested);
|
|
129
|
-
await assertEqual(found, root,
|
|
130
|
-
return { name:
|
|
126
|
+
await assertEqual(found, root, '.hg marker should be detected');
|
|
127
|
+
return { name: 'hg-marker', ok: true };
|
|
131
128
|
}
|
|
132
129
|
|
|
133
130
|
async function testWorkspacePnpm() {
|
|
134
|
-
const root = await mkTmpDir(
|
|
135
|
-
const pkgA = path.join(root,
|
|
131
|
+
const root = await mkTmpDir('pnpm-workspace');
|
|
132
|
+
const pkgA = path.join(root, 'packages', 'a');
|
|
136
133
|
await fs.ensureDir(pkgA);
|
|
137
|
-
await fs.writeFile(
|
|
138
|
-
path.join(root, "pnpm-workspace.yaml"),
|
|
139
|
-
"packages:\n - packages/*\n",
|
|
140
|
-
);
|
|
134
|
+
await fs.writeFile(path.join(root, 'pnpm-workspace.yaml'), 'packages:\n - packages/*\n');
|
|
141
135
|
const found = await findProjectRoot(pkgA);
|
|
142
|
-
await assertEqual(found, root,
|
|
143
|
-
return { name:
|
|
136
|
+
await assertEqual(found, root, 'pnpm-workspace.yaml should be detected');
|
|
137
|
+
return { name: 'pnpm-workspace', ok: true };
|
|
144
138
|
}
|
|
145
139
|
|
|
146
140
|
async function testPackageJsonWorkspaces() {
|
|
147
|
-
const root = await mkTmpDir(
|
|
148
|
-
const pkgA = path.join(root,
|
|
141
|
+
const root = await mkTmpDir('package-workspaces');
|
|
142
|
+
const pkgA = path.join(root, 'packages', 'a');
|
|
149
143
|
await fs.ensureDir(pkgA);
|
|
150
|
-
await fs.writeJson(
|
|
151
|
-
path.join(root, "package.json"),
|
|
152
|
-
{ private: true, workspaces: ["packages/*"] },
|
|
153
|
-
{ spaces: 2 },
|
|
154
|
-
);
|
|
144
|
+
await fs.writeJson(path.join(root, 'package.json'), { private: true, workspaces: ['packages/*'] }, { spaces: 2 });
|
|
155
145
|
const found = await findProjectRoot(pkgA);
|
|
156
|
-
await assertEqual(found, root,
|
|
157
|
-
return { name:
|
|
146
|
+
await assertEqual(found, root, 'package.json workspaces should be detected');
|
|
147
|
+
return { name: 'package.json-workspaces', ok: true };
|
|
158
148
|
}
|
|
159
149
|
|
|
160
150
|
async function testLockfiles() {
|
|
161
|
-
const root = await mkTmpDir(
|
|
162
|
-
const nested = path.join(root,
|
|
151
|
+
const root = await mkTmpDir('lockfiles');
|
|
152
|
+
const nested = path.join(root, 'src');
|
|
163
153
|
await fs.ensureDir(nested);
|
|
164
|
-
await fs.writeFile(path.join(root,
|
|
154
|
+
await fs.writeFile(path.join(root, 'yarn.lock'), '\n');
|
|
165
155
|
const found = await findProjectRoot(nested);
|
|
166
|
-
await assertEqual(found, root,
|
|
167
|
-
return { name:
|
|
156
|
+
await assertEqual(found, root, 'yarn.lock should be detected');
|
|
157
|
+
return { name: 'lockfiles', ok: true };
|
|
168
158
|
}
|
|
169
159
|
|
|
170
160
|
async function testLanguageConfigs() {
|
|
171
|
-
const root = await mkTmpDir(
|
|
172
|
-
const nested = path.join(root,
|
|
161
|
+
const root = await mkTmpDir('lang-configs');
|
|
162
|
+
const nested = path.join(root, 'x', 'y');
|
|
173
163
|
await fs.ensureDir(nested);
|
|
174
|
-
await fs.writeFile(
|
|
175
|
-
path.join(root, "pyproject.toml"),
|
|
176
|
-
"[tool.poetry]\nname='tmp'\n",
|
|
177
|
-
);
|
|
164
|
+
await fs.writeFile(path.join(root, 'pyproject.toml'), "[tool.poetry]\nname='tmp'\n");
|
|
178
165
|
const found = await findProjectRoot(nested);
|
|
179
|
-
await assertEqual(found, root,
|
|
180
|
-
return { name:
|
|
166
|
+
await assertEqual(found, root, 'pyproject.toml should be detected');
|
|
167
|
+
return { name: 'language-configs', ok: true };
|
|
181
168
|
}
|
|
182
169
|
|
|
183
170
|
async function testPreferOuterOnTie() {
|
|
184
|
-
const root = await mkTmpDir(
|
|
185
|
-
const mid = path.join(root,
|
|
186
|
-
const leaf = path.join(mid,
|
|
171
|
+
const root = await mkTmpDir('tie');
|
|
172
|
+
const mid = path.join(root, 'mid');
|
|
173
|
+
const leaf = path.join(mid, 'leaf');
|
|
187
174
|
await fs.ensureDir(leaf);
|
|
188
175
|
// same weight marker at two levels
|
|
189
|
-
await fs.writeFile(path.join(root,
|
|
190
|
-
await fs.writeFile(path.join(mid,
|
|
176
|
+
await fs.writeFile(path.join(root, 'requirements.txt'), '\n');
|
|
177
|
+
await fs.writeFile(path.join(mid, 'requirements.txt'), '\n');
|
|
191
178
|
const found = await findProjectRoot(leaf);
|
|
192
|
-
await assertEqual(
|
|
193
|
-
|
|
194
|
-
root,
|
|
195
|
-
"outermost directory should win on equal weight",
|
|
196
|
-
);
|
|
197
|
-
return { name: "prefer-outermost-tie", ok: true };
|
|
179
|
+
await assertEqual(found, root, 'outermost directory should win on equal weight');
|
|
180
|
+
return { name: 'prefer-outermost-tie', ok: true };
|
|
198
181
|
}
|
|
199
182
|
|
|
200
183
|
// Additional coverage: Bazel, Nx/Turbo/Rush, Go workspaces, Deno, Java/Scala, PHP, Rust, Nix, Changesets, env markers,
|
|
201
184
|
// and priority interaction between package.json and lockfiles.
|
|
202
185
|
|
|
203
186
|
async function testBazelWorkspace() {
|
|
204
|
-
const root = await mkTmpDir(
|
|
205
|
-
const nested = path.join(root,
|
|
187
|
+
const root = await mkTmpDir('bazel');
|
|
188
|
+
const nested = path.join(root, 'apps', 'svc');
|
|
206
189
|
await fs.ensureDir(nested);
|
|
207
|
-
await fs.writeFile(path.join(root,
|
|
190
|
+
await fs.writeFile(path.join(root, 'WORKSPACE'), 'workspace(name="tmp")\n');
|
|
208
191
|
const found = await findProjectRoot(nested);
|
|
209
|
-
await assertEqual(found, root,
|
|
210
|
-
return { name:
|
|
192
|
+
await assertEqual(found, root, 'Bazel WORKSPACE should be detected');
|
|
193
|
+
return { name: 'bazel-workspace', ok: true };
|
|
211
194
|
}
|
|
212
195
|
|
|
213
196
|
async function testNx() {
|
|
214
|
-
const root = await mkTmpDir(
|
|
215
|
-
const nested = path.join(root,
|
|
197
|
+
const root = await mkTmpDir('nx');
|
|
198
|
+
const nested = path.join(root, 'apps', 'web');
|
|
216
199
|
await fs.ensureDir(nested);
|
|
217
|
-
await fs.writeJson(
|
|
218
|
-
path.join(root, "nx.json"),
|
|
219
|
-
{ npmScope: "tmp" },
|
|
220
|
-
{ spaces: 2 },
|
|
221
|
-
);
|
|
200
|
+
await fs.writeJson(path.join(root, 'nx.json'), { npmScope: 'tmp' }, { spaces: 2 });
|
|
222
201
|
const found = await findProjectRoot(nested);
|
|
223
|
-
await assertEqual(found, root,
|
|
224
|
-
return { name:
|
|
202
|
+
await assertEqual(found, root, 'nx.json should be detected');
|
|
203
|
+
return { name: 'nx', ok: true };
|
|
225
204
|
}
|
|
226
205
|
|
|
227
206
|
async function testTurbo() {
|
|
228
|
-
const root = await mkTmpDir(
|
|
229
|
-
const nested = path.join(root,
|
|
207
|
+
const root = await mkTmpDir('turbo');
|
|
208
|
+
const nested = path.join(root, 'packages', 'x');
|
|
230
209
|
await fs.ensureDir(nested);
|
|
231
|
-
await fs.writeJson(
|
|
232
|
-
path.join(root, "turbo.json"),
|
|
233
|
-
{ pipeline: {} },
|
|
234
|
-
{ spaces: 2 },
|
|
235
|
-
);
|
|
210
|
+
await fs.writeJson(path.join(root, 'turbo.json'), { pipeline: {} }, { spaces: 2 });
|
|
236
211
|
const found = await findProjectRoot(nested);
|
|
237
|
-
await assertEqual(found, root,
|
|
238
|
-
return { name:
|
|
212
|
+
await assertEqual(found, root, 'turbo.json should be detected');
|
|
213
|
+
return { name: 'turbo', ok: true };
|
|
239
214
|
}
|
|
240
215
|
|
|
241
216
|
async function testRush() {
|
|
242
|
-
const root = await mkTmpDir(
|
|
243
|
-
const nested = path.join(root,
|
|
217
|
+
const root = await mkTmpDir('rush');
|
|
218
|
+
const nested = path.join(root, 'apps', 'a');
|
|
244
219
|
await fs.ensureDir(nested);
|
|
245
|
-
await fs.writeJson(
|
|
246
|
-
path.join(root, "rush.json"),
|
|
247
|
-
{ projectFolderMinDepth: 1 },
|
|
248
|
-
{ spaces: 2 },
|
|
249
|
-
);
|
|
220
|
+
await fs.writeJson(path.join(root, 'rush.json'), { projectFolderMinDepth: 1 }, { spaces: 2 });
|
|
250
221
|
const found = await findProjectRoot(nested);
|
|
251
|
-
await assertEqual(found, root,
|
|
252
|
-
return { name:
|
|
222
|
+
await assertEqual(found, root, 'rush.json should be detected');
|
|
223
|
+
return { name: 'rush', ok: true };
|
|
253
224
|
}
|
|
254
225
|
|
|
255
226
|
async function testGoWorkAndMod() {
|
|
256
|
-
const root = await mkTmpDir(
|
|
257
|
-
const mod = path.join(root,
|
|
258
|
-
const nested = path.join(mod,
|
|
227
|
+
const root = await mkTmpDir('gowork');
|
|
228
|
+
const mod = path.join(root, 'modA');
|
|
229
|
+
const nested = path.join(mod, 'pkg');
|
|
259
230
|
await fs.ensureDir(nested);
|
|
260
|
-
await fs.writeFile(path.join(root,
|
|
261
|
-
await fs.writeFile(
|
|
262
|
-
path.join(mod, "go.mod"),
|
|
263
|
-
"module example.com/a\ngo 1.22\n",
|
|
264
|
-
);
|
|
231
|
+
await fs.writeFile(path.join(root, 'go.work'), 'go 1.22\nuse ./modA\n');
|
|
232
|
+
await fs.writeFile(path.join(mod, 'go.mod'), 'module example.com/a\ngo 1.22\n');
|
|
265
233
|
const found = await findProjectRoot(nested);
|
|
266
|
-
await assertEqual(found, root,
|
|
267
|
-
return { name:
|
|
234
|
+
await assertEqual(found, root, 'go.work should define the workspace root');
|
|
235
|
+
return { name: 'go-work', ok: true };
|
|
268
236
|
}
|
|
269
237
|
|
|
270
238
|
async function testDenoJson() {
|
|
271
|
-
const root = await mkTmpDir(
|
|
272
|
-
const nested = path.join(root,
|
|
239
|
+
const root = await mkTmpDir('deno');
|
|
240
|
+
const nested = path.join(root, 'src');
|
|
273
241
|
await fs.ensureDir(nested);
|
|
274
|
-
await fs.writeJson(
|
|
275
|
-
path.join(root, "deno.json"),
|
|
276
|
-
{ tasks: {} },
|
|
277
|
-
{ spaces: 2 },
|
|
278
|
-
);
|
|
242
|
+
await fs.writeJson(path.join(root, 'deno.json'), { tasks: {} }, { spaces: 2 });
|
|
279
243
|
const found = await findProjectRoot(nested);
|
|
280
|
-
await assertEqual(found, root,
|
|
281
|
-
return { name:
|
|
244
|
+
await assertEqual(found, root, 'deno.json should be detected');
|
|
245
|
+
return { name: 'deno-json', ok: true };
|
|
282
246
|
}
|
|
283
247
|
|
|
284
248
|
async function testGradleSettings() {
|
|
285
|
-
const root = await mkTmpDir(
|
|
286
|
-
const nested = path.join(root,
|
|
249
|
+
const root = await mkTmpDir('gradle');
|
|
250
|
+
const nested = path.join(root, 'app');
|
|
287
251
|
await fs.ensureDir(nested);
|
|
288
|
-
await fs.writeFile(
|
|
289
|
-
path.join(root, "settings.gradle"),
|
|
290
|
-
"rootProject.name='tmp'\n",
|
|
291
|
-
);
|
|
252
|
+
await fs.writeFile(path.join(root, 'settings.gradle'), "rootProject.name='tmp'\n");
|
|
292
253
|
const found = await findProjectRoot(nested);
|
|
293
|
-
await assertEqual(found, root,
|
|
294
|
-
return { name:
|
|
254
|
+
await assertEqual(found, root, 'settings.gradle should be detected');
|
|
255
|
+
return { name: 'gradle-settings', ok: true };
|
|
295
256
|
}
|
|
296
257
|
|
|
297
258
|
async function testMavenPom() {
|
|
298
|
-
const root = await mkTmpDir(
|
|
299
|
-
const nested = path.join(root,
|
|
259
|
+
const root = await mkTmpDir('maven');
|
|
260
|
+
const nested = path.join(root, 'module');
|
|
300
261
|
await fs.ensureDir(nested);
|
|
301
|
-
await fs.writeFile(path.join(root,
|
|
262
|
+
await fs.writeFile(path.join(root, 'pom.xml'), '<project></project>\n');
|
|
302
263
|
const found = await findProjectRoot(nested);
|
|
303
|
-
await assertEqual(found, root,
|
|
304
|
-
return { name:
|
|
264
|
+
await assertEqual(found, root, 'pom.xml should be detected');
|
|
265
|
+
return { name: 'maven-pom', ok: true };
|
|
305
266
|
}
|
|
306
267
|
|
|
307
268
|
async function testSbtBuild() {
|
|
308
|
-
const root = await mkTmpDir(
|
|
309
|
-
const nested = path.join(root,
|
|
269
|
+
const root = await mkTmpDir('sbt');
|
|
270
|
+
const nested = path.join(root, 'sub');
|
|
310
271
|
await fs.ensureDir(nested);
|
|
311
|
-
await fs.writeFile(path.join(root,
|
|
272
|
+
await fs.writeFile(path.join(root, 'build.sbt'), 'name := "tmp"\n');
|
|
312
273
|
const found = await findProjectRoot(nested);
|
|
313
|
-
await assertEqual(found, root,
|
|
314
|
-
return { name:
|
|
274
|
+
await assertEqual(found, root, 'build.sbt should be detected');
|
|
275
|
+
return { name: 'sbt-build', ok: true };
|
|
315
276
|
}
|
|
316
277
|
|
|
317
278
|
async function testComposer() {
|
|
318
|
-
const root = await mkTmpDir(
|
|
319
|
-
const nested = path.join(root,
|
|
279
|
+
const root = await mkTmpDir('composer');
|
|
280
|
+
const nested = path.join(root, 'src');
|
|
320
281
|
await fs.ensureDir(nested);
|
|
321
|
-
await fs.writeJson(
|
|
322
|
-
|
|
323
|
-
{ name: "tmp/pkg" },
|
|
324
|
-
{ spaces: 2 },
|
|
325
|
-
);
|
|
326
|
-
await fs.writeFile(path.join(root, "composer.lock"), "{}\n");
|
|
282
|
+
await fs.writeJson(path.join(root, 'composer.json'), { name: 'tmp/pkg' }, { spaces: 2 });
|
|
283
|
+
await fs.writeFile(path.join(root, 'composer.lock'), '{}\n');
|
|
327
284
|
const found = await findProjectRoot(nested);
|
|
328
|
-
await assertEqual(found, root,
|
|
329
|
-
return { name:
|
|
285
|
+
await assertEqual(found, root, 'composer.{json,lock} should be detected');
|
|
286
|
+
return { name: 'composer', ok: true };
|
|
330
287
|
}
|
|
331
288
|
|
|
332
289
|
async function testCargo() {
|
|
333
|
-
const root = await mkTmpDir(
|
|
334
|
-
const nested = path.join(root,
|
|
290
|
+
const root = await mkTmpDir('cargo');
|
|
291
|
+
const nested = path.join(root, 'src');
|
|
335
292
|
await fs.ensureDir(nested);
|
|
336
|
-
await fs.writeFile(
|
|
337
|
-
path.join(root, "Cargo.toml"),
|
|
338
|
-
"[package]\nname='tmp'\nversion='0.0.0'\n",
|
|
339
|
-
);
|
|
293
|
+
await fs.writeFile(path.join(root, 'Cargo.toml'), "[package]\nname='tmp'\nversion='0.0.0'\n");
|
|
340
294
|
const found = await findProjectRoot(nested);
|
|
341
|
-
await assertEqual(found, root,
|
|
342
|
-
return { name:
|
|
295
|
+
await assertEqual(found, root, 'Cargo.toml should be detected');
|
|
296
|
+
return { name: 'cargo', ok: true };
|
|
343
297
|
}
|
|
344
298
|
|
|
345
299
|
async function testNixFlake() {
|
|
346
|
-
const root = await mkTmpDir(
|
|
347
|
-
const nested = path.join(root,
|
|
300
|
+
const root = await mkTmpDir('nix');
|
|
301
|
+
const nested = path.join(root, 'work');
|
|
348
302
|
await fs.ensureDir(nested);
|
|
349
|
-
await fs.writeFile(path.join(root,
|
|
303
|
+
await fs.writeFile(path.join(root, 'flake.nix'), '{ }\n');
|
|
350
304
|
const found = await findProjectRoot(nested);
|
|
351
|
-
await assertEqual(found, root,
|
|
352
|
-
return { name:
|
|
305
|
+
await assertEqual(found, root, 'flake.nix should be detected');
|
|
306
|
+
return { name: 'nix-flake', ok: true };
|
|
353
307
|
}
|
|
354
308
|
|
|
355
309
|
async function testChangesetConfig() {
|
|
356
|
-
const root = await mkTmpDir(
|
|
357
|
-
const nested = path.join(root,
|
|
310
|
+
const root = await mkTmpDir('changeset');
|
|
311
|
+
const nested = path.join(root, 'pkg');
|
|
358
312
|
await fs.ensureDir(nested);
|
|
359
|
-
await fs.ensureDir(path.join(root,
|
|
313
|
+
await fs.ensureDir(path.join(root, '.changeset'));
|
|
360
314
|
await fs.writeJson(
|
|
361
|
-
path.join(root,
|
|
362
|
-
{ $schema:
|
|
315
|
+
path.join(root, '.changeset', 'config.json'),
|
|
316
|
+
{ $schema: 'https://unpkg.com/@changesets/config@2.3.1/schema.json' },
|
|
363
317
|
{ spaces: 2 },
|
|
364
318
|
);
|
|
365
319
|
const found = await findProjectRoot(nested);
|
|
366
|
-
await assertEqual(found, root,
|
|
367
|
-
return { name:
|
|
320
|
+
await assertEqual(found, root, '.changeset/config.json should be detected');
|
|
321
|
+
return { name: 'changesets', ok: true };
|
|
368
322
|
}
|
|
369
323
|
|
|
370
324
|
async function testEnvCustomMarker() {
|
|
371
|
-
const root = await mkTmpDir(
|
|
372
|
-
const nested = path.join(root,
|
|
325
|
+
const root = await mkTmpDir('env-marker');
|
|
326
|
+
const nested = path.join(root, 'dir');
|
|
373
327
|
await fs.ensureDir(nested);
|
|
374
|
-
await fs.writeFile(path.join(root,
|
|
328
|
+
await fs.writeFile(path.join(root, 'MY_ROOT'), '\n');
|
|
375
329
|
const prev = process.env.PROJECT_ROOT_MARKERS;
|
|
376
|
-
process.env.PROJECT_ROOT_MARKERS =
|
|
330
|
+
process.env.PROJECT_ROOT_MARKERS = 'MY_ROOT';
|
|
377
331
|
try {
|
|
378
332
|
const found = await findProjectRoot(nested);
|
|
379
|
-
await assertEqual(found, root,
|
|
333
|
+
await assertEqual(found, root, 'custom env marker should be honored');
|
|
380
334
|
} finally {
|
|
381
335
|
if (prev === undefined) delete process.env.PROJECT_ROOT_MARKERS;
|
|
382
336
|
else process.env.PROJECT_ROOT_MARKERS = prev;
|
|
383
337
|
}
|
|
384
|
-
return { name:
|
|
338
|
+
return { name: 'env-custom-marker', ok: true };
|
|
385
339
|
}
|
|
386
340
|
|
|
387
341
|
async function testPackageLowPriorityVsLock() {
|
|
388
|
-
const root = await mkTmpDir(
|
|
389
|
-
const nested = path.join(root,
|
|
390
|
-
await fs.ensureDir(path.join(nested,
|
|
391
|
-
await fs.writeJson(
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
await fs.writeFile(path.join(root, "yarn.lock"), "\n");
|
|
397
|
-
const found = await findProjectRoot(path.join(nested, "deep"));
|
|
398
|
-
await assertEqual(
|
|
399
|
-
found,
|
|
400
|
-
root,
|
|
401
|
-
"lockfile at root should outrank nested package.json",
|
|
402
|
-
);
|
|
403
|
-
return { name: "package-vs-lock-priority", ok: true };
|
|
342
|
+
const root = await mkTmpDir('pkg-vs-lock');
|
|
343
|
+
const nested = path.join(root, 'nested');
|
|
344
|
+
await fs.ensureDir(path.join(nested, 'deep'));
|
|
345
|
+
await fs.writeJson(path.join(nested, 'package.json'), { name: 'nested' }, { spaces: 2 });
|
|
346
|
+
await fs.writeFile(path.join(root, 'yarn.lock'), '\n');
|
|
347
|
+
const found = await findProjectRoot(path.join(nested, 'deep'));
|
|
348
|
+
await assertEqual(found, root, 'lockfile at root should outrank nested package.json');
|
|
349
|
+
return { name: 'package-vs-lock-priority', ok: true };
|
|
404
350
|
}
|
|
405
351
|
|
|
406
352
|
async function run() {
|
|
@@ -439,22 +385,17 @@ async function run() {
|
|
|
439
385
|
try {
|
|
440
386
|
const r = await t();
|
|
441
387
|
results.push({ ...r, ok: true });
|
|
442
|
-
console.log(`✔ ${r.name}${r.skipped ?
|
|
388
|
+
console.log(`✔ ${r.name}${r.skipped ? ' (skipped)' : ''}`);
|
|
443
389
|
} catch (error) {
|
|
444
|
-
console.error(
|
|
445
|
-
`✖ ${t.name}:`,
|
|
446
|
-
error && error.message ? error.message : error,
|
|
447
|
-
);
|
|
390
|
+
console.error(`✖ ${t.name}:`, error && error.message ? error.message : error);
|
|
448
391
|
results.push({ name: t.name, ok: false, error: String(error) });
|
|
449
392
|
}
|
|
450
393
|
}
|
|
451
394
|
|
|
452
395
|
const failed = results.filter((r) => !r.ok);
|
|
453
|
-
console.log(
|
|
396
|
+
console.log('\nSummary:');
|
|
454
397
|
for (const r of results) {
|
|
455
|
-
console.log(
|
|
456
|
-
`- ${r.name}: ${r.ok ? "ok" : "FAIL"}${r.skipped ? " (skipped)" : ""}`,
|
|
457
|
-
);
|
|
398
|
+
console.log(`- ${r.name}: ${r.ok ? 'ok' : 'FAIL'}${r.skipped ? ' (skipped)' : ''}`);
|
|
458
399
|
}
|
|
459
400
|
|
|
460
401
|
if (failed.length > 0) {
|
|
@@ -463,6 +404,6 @@ async function run() {
|
|
|
463
404
|
}
|
|
464
405
|
|
|
465
406
|
run().catch((error) => {
|
|
466
|
-
console.error(
|
|
407
|
+
console.error('Fatal error:', error);
|
|
467
408
|
process.exit(1);
|
|
468
409
|
});
|