{"owner":"microsoft","repo":"rushstack","hasSkills":true,"totalSkillsCount":69,"totalTokensCount":37763,"categories":["cursor-rule","copilot-instructions","plugin-manifest","anthropic-skill"],"hasMcp":false,"mcpConfig":null,"found":[".cursor/rules/rush.mdc",".github/copilot-instructions.md","apps/heft/heft-plugin.json","build-tests/heft-example-lifecycle-plugin/heft-plugin.json","build-tests/heft-example-plugin-01/heft-plugin.json","build-tests/heft-example-plugin-02/heft-plugin.json","build-tests/heft-parameter-plugin/heft-plugin.json","build-tests/rush-mcp-example-plugin/rush-mcp-plugin.json","build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json","build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/sharded-repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json","common/config/rush-plugins/rush-serve-plugin.json","heft-plugins/heft-api-extractor-plugin/README.md","heft-plugins/heft-api-extractor-plugin/heft-plugin.json","heft-plugins/heft-dev-cert-plugin/README.md","heft-plugins/heft-dev-cert-plugin/heft-plugin.json","heft-plugins/heft-isolated-typescript-transpile-plugin/README.md","heft-plugins/heft-isolated-typescript-transpile-plugin/heft-plugin.json","heft-plugins/heft-jest-plugin/README.md","heft-plugins/heft-jest-plugin/heft-plugin.json","heft-plugins/heft-json-schema-typings-plugin/README.md","heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json","heft-plugins/heft-lint-plugin/README.md","heft-plugins/heft-lint-plugin/heft-plugin.json","heft-plugins/heft-localization-typings-plugin/README.md","heft-plugins/heft-localization-typings-plugin/heft-plugin.json","heft-plugins/heft-rspack-plugin/README.md","heft-plugins/heft-rspack-plugin/heft-plugin.json","heft-plugins/heft-sass-load-themed-styles-plugin/README.md","heft-plugins/heft-sass-load-themed-styles-plugin/heft-plugin.json","heft-plugins/heft-sass-plugin/README.md","heft-plugins/heft-sass-plugin/heft-plugin.json","heft-plugins/heft-serverless-stack-plugin/README.md","heft-plugins/heft-serverless-stack-plugin/heft-plugin.json","heft-plugins/heft-static-asset-typings-plugin/README.md","heft-plugins/heft-static-asset-typings-plugin/heft-plugin.json","heft-plugins/heft-storybook-plugin/README.md","heft-plugins/heft-storybook-plugin/heft-plugin.json","heft-plugins/heft-typescript-plugin/README.md","heft-plugins/heft-typescript-plugin/heft-plugin.json","heft-plugins/heft-vscode-extension-plugin/README.md","heft-plugins/heft-vscode-extension-plugin/heft-plugin.json","heft-plugins/heft-webpack4-plugin/README.md","heft-plugins/heft-webpack4-plugin/heft-plugin.json","heft-plugins/heft-webpack5-plugin/README.md","heft-plugins/heft-webpack5-plugin/heft-plugin.json","rush-plugins/rush-amazon-s3-build-cache-plugin/README.md","rush-plugins/rush-azure-storage-build-cache-plugin/README.md","rush-plugins/rush-bridge-cache-plugin/README.md","rush-plugins/rush-buildxl-graph-plugin/README.md","rush-plugins/rush-http-build-cache-plugin/README.md","rush-plugins/rush-litewatch-plugin/README.md","rush-plugins/rush-mcp-docs-plugin/README.md","rush-plugins/rush-mcp-docs-plugin/rush-mcp-plugin.json","rush-plugins/rush-published-versions-json-plugin/README.md","rush-plugins/rush-redis-cobuild-plugin/README.md","rush-plugins/rush-resolver-cache-plugin/README.md","rush-plugins/rush-serve-plugin/README.md","skills/rushstack-best-practices/CHANGELOG.md","skills/rushstack-best-practices/SKILL.md","skills/rushstack-best-practices/references/build-system.md","skills/rushstack-best-practices/references/core-commands.md","skills/rushstack-best-practices/references/dependency-management.md","skills/rushstack-best-practices/references/project-configuration.md","skills/rushstack-best-practices/references/subspace.md","vscode-extensions/debug-certificate-manager-vscode-extension/README.md","vscode-extensions/playwright-local-browser-server-vscode-extension/README.md","vscode-extensions/rush-vscode-command-webview/README.md","vscode-extensions/rush-vscode-extension/README.md","vscode-extensions/vscode-shared/README.md"],"skills":{".cursor/rules/rush.mdc":"---\ndescription:\nglobs:\nalwaysApply: true\n---\nYou are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness",".github/copilot-instructions.md":"You are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness\n","apps/heft/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"copy-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/CopyFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/copy-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"delete-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/DeleteFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/delete-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"node-service-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/NodeServicePlugin\",\n      \"parameterScope\": \"node-service\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes. This parameter is only available when running in watch mode.\"\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"run-script-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/RunScriptPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/run-script-options.schema.json\"\n    },\n    {\n      \"entryPoint\": \"./lib-commonjs/plugins/SetEnvironmentVariablesPlugin\",\n      \"pluginName\": \"set-environment-variables-plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/set-environment-variables-plugin.schema.json\"\n    }\n  ]\n}\n","build-tests/heft-example-lifecycle-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [\n    {\n      \"pluginName\": \"example-lifecycle-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","build-tests/heft-example-plugin-01/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-01\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","build-tests/heft-example-plugin-02/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-02\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","build-tests/heft-parameter-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"heft-parameter-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\",\n      \"parameterScope\": \"heft-parameter-plugin\",\n      \"parameters\": [\n        {\n          \"longName\": \"--custom-parameter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Test running a custom flag parameter\"\n        },\n        {\n          \"longName\": \"--custom-integer-parameter\",\n          \"parameterKind\": \"integer\",\n          \"description\": \"Test running a custom integer parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-integer-list-parameter\",\n          \"parameterKind\": \"integerList\",\n          \"description\": \"Test running a custom integer list parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-string-parameter\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"TEXT\",\n          \"description\": \"Test running a custom string parameter\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--custom-string-list-parameter\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"LIST_ITEM\",\n          \"description\": \"Test running a custom string list parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-parameter\",\n          \"parameterKind\": \"choice\",\n          \"alternatives\": [\n            {\n              \"name\": \"red\",\n              \"description\": \"The red choice\"\n            },\n            {\n              \"name\": \"blue\",\n              \"description\": \"The blue choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-list-parameter\",\n          \"parameterKind\": \"choiceList\",\n          \"alternatives\": [\n            {\n              \"name\": \"totodile\",\n              \"description\": \"The totodile choice\"\n            },\n            {\n              \"name\": \"jynx\",\n              \"description\": \"The jynx choice\"\n            },\n            {\n              \"name\": \"gudetama\",\n              \"description\": \"The gudetama choice\"\n            },\n            {\n              \"name\": \"impidimp\",\n              \"description\": \"The impidimp choice\"\n            },\n            {\n              \"name\": \"wobbuffet\",\n              \"description\": \"The wobbuffet choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice list parameter\"\n        }\n      ]\n    }\n  ]\n}\n","build-tests/rush-mcp-example-plugin/rush-mcp-plugin.json":"/**\n * Every plugin package must contain a \"rush-mcp-plugin.json\" manifest in the top-level folder\n * (next to package.json).\n */\n{\n  /**\n   * A name that uniquely identifies your plugin.  Generally this should be the same name as\n   * the NPM package.  If two NPM packages have the same pluginName, they cannot be loaded together.\n   */\n  \"pluginName\": \"rush-mcp-example-plugin\",\n\n  /**\n   * (OPTIONAL) Indicates that your plugin accepts a config file.  The MCP server will load this\n   * file and provide it to the plugin.\n   *\n   * The config file path will be `<rush-repo>/common/config/rush-mcp/<plugin-name>.json`.\n   */\n  \"configFileSchema\": \"./lib-commonjs/rush-mcp-example-plugin.schema.json\",\n\n  /**\n   * The entry point, whose default export should be a class that implements\n   */\n  \"entryPoint\": \"./lib-commonjs/index.js\"\n}\n","build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json":"{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n","build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/sharded-repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json":"{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n","common/config/rush-plugins/rush-serve-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-serve-plugin-options.schema.json\",\n  \"phasedCommands\": [\"start\"],\n  \"portParameterLongName\": \"--port\",\n  \"buildStatusWebSocketPath\": \"/ws\",\n  \"logServePath\": \"/logs\",\n  \"globalRouting\": [\n    {\n      \"workspaceRelativeFolder\": \"rush-plugins/rush-serve-plugin/lib-esm/dashboard\",\n      \"servePath\": \"/dashboard\",\n      \"immutable\": false\n    }\n  ]\n}\n","heft-plugins/heft-api-extractor-plugin/README.md":"# @rushstack/heft-api-extractor-plugin\n\nThis is a Heft plugin for running API Extractor.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md) - Find\nout what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-api-extractor-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"api-extractor-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ApiExtractorPlugin\"\n    }\n  ]\n}\n","heft-plugins/heft-dev-cert-plugin/README.md":"# @rushstack/heft-dev-cert-plugin\n\nThis is a Heft plugin to manage development certificates for local serve.\nAutomatically configures webpack-dev-server to use https in serve mode.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-dev-cert-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"trust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TrustDevCertificatePlugin\"\n    },\n    {\n      \"pluginName\": \"untrust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/UntrustDevCertificatePlugin\"\n    }\n  ]\n}\n","heft-plugins/heft-isolated-typescript-transpile-plugin/README.md":"# @rushstack/heft-isolated-typescript-transpile-plugin\n\nThis is a Heft plugin for using swc as an isolated module transpiler\nduring the \"build\" stage.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-isolated-typescript-transpile-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"swc-isolated-transpile-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SwcIsolatedTranspilePlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/swc-isolated-transpile-plugin.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-jest-plugin/README.md":"# @rushstack/heft-jest-plugin\n\nThis is a Heft plugin for running Jest.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-jest-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-jest-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"jest-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JestPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-jest-plugin.schema.json\",\n\n      \"parameterScope\": \"jest\",\n      \"parameters\": [\n        {\n          \"longName\": \"--config\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which Jest configuration file will be used to run Jest tests.  If not specified, it will default to \\\"config/jest.config.json\\\".  This corresponds to the \\\"--config\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--debug-heft-reporter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Normally Heft installs a custom Jest reporter so that test results are presented consistently with other task logging.  If you suspect a problem with the HeftJestReporter, specify \\\"--debug-heft-reporter\\\" to temporarily disable it so that you can compare with how Jest's default reporter would have presented it.  Include this output in your bug report.  Do not use \\\"--debug-heft-reporter\\\" in production.\"\n        },\n        {\n          \"longName\": \"--detect-open-handles\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Attempt to collect and print open handles preventing Jest from exiting cleanly.  This option has a significant performance penalty and should only be used for debugging.  This corresponds to the \\\"--detectOpenHandles\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--disable-code-coverage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Disable any configured code coverage.  If code coverage is not configured, this parameter has no effect.\"\n        },\n        {\n          \"longName\": \"--find-related-tests\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"SOURCE_FILE\",\n          \"description\": \"Find and run the tests that cover a source file that was passed in as an argument.  This corresponds to the \\\"--findRelatedTests\\\" parameter in Jest's documentation. This parameter is not compatible with watch mode.\"\n        },\n        {\n          \"longName\": \"--log-heap-usage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Logs the heap usage after every test. Useful to debug memory leaks. Use together with --expose-gc in node.\"\n        },\n        {\n          \"longName\": \"--max-workers\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"COUNT_OR_PERCENTAGE\",\n          \"description\": \"Use this parameter to control maximum number of worker processes tests are allowed to use.  This parameter is similar to the parameter noted in the Jest documentation, and can either be an integer representing the number of workers to spawn when running tests, or can be a string representing a percentage of the available CPUs on the machine to utilize. Example values: \\\"3\\\", \\\"25%%\\\"\"\n        },\n        {\n          \"longName\": \"--silent\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Prevent tests from printing messages through the console.  This corresponds to the \\\"--silent\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-name-pattern\",\n          \"shortName\": \"-t\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a name that matches a regular expression.  The REGEXP is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.  This corresponds to the \\\"--testNamePattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-ignore-patterns\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Avoid running tests with a source file path that matches one ore more regular expressions.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathIgnorePatterns\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-pattern\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a source file path that matches a regular expression.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathPattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-timeout-ms\",\n          \"parameterKind\": \"integer\",\n          \"argumentName\": \"TIMEOUT\",\n          \"description\": \"Change the default timeout for tests; if a test doesn't complete within this many milliseconds, it will fail.  Individual tests can override the default.  If unspecified, the default is normally 5000 ms.  This corresponds to the \\\"--testTimeout\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--update-snapshots\",\n          \"shortName\": \"-u\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Update Jest snapshots while running the tests.  This corresponds to the \\\"--updateSnapshots\\\" parameter in Jest.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-json-schema-typings-plugin/README.md":"# @rushstack/heft-json-schema-typings-plugin\n\nThis is a Heft plugin that generates TypeScript `.d.ts` typings from JSON Schema files\n(files matching `*.schema.json`). It uses the\n[json-schema-to-typescript](https://www.npmjs.com/package/json-schema-to-typescript) library\nto produce type declarations that can be imported alongside the schema at build time.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-json-schema-typings-plugin --dev\n   ```\n\n2. Load the plugin in your project's **heft.json** configuration:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"json-schema-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-json-schema-typings-plugin\",\n               \"options\": {\n                 // (Optional) Defaults shown below\n                 // \"srcFolder\": \"src\",\n                 // \"generatedTsFolders\": [\"temp/schemas-ts\"],\n                 // \"formatWithPrettier\": false\n               }\n             }\n           }\n         }\n       }\n     }\n   }\n   ```\n\n3. Place your `*.schema.json` files under the source folder (default: `src/`).\n   The plugin will generate a corresponding `.d.ts` file for each schema.\n\n## Plugin options\n\n| Option               | Type       | Default              | Description                                                                      |\n| -------------------- | ---------- | -------------------- | -------------------------------------------------------------------------------- |\n| `srcFolder`          | `string`   | `\"src\"`              | Source directory to scan for `*.schema.json` files.                              |\n| `generatedTsFolders` | `string[]` | `[\"temp/schemas-ts\"]`| Output directories for the generated `.d.ts` files.                             |\n| `formatWithPrettier` | `boolean`  | `false`              | When `true`, format generated typings with [prettier](https://prettier.io/). Requires `prettier` as an installed dependency. |\n\n## Vendor extension: `x-tsdoc-release-tag`\n\nThe plugin recognises a custom vendor extension property called **`x-tsdoc-release-tag`** in\nyour JSON Schema files. When present at the top level of a schema, its value (a\n[TSDoc release tag](https://tsdoc.org/pages/spec/tag_kinds/#release-tags) such as `@public`,\n`@beta`, `@alpha`, or `@internal`) is injected into JSDoc comments of every exported\ndeclaration in the generated `.d.ts` file.\n\nThis is useful when the generated types are re-exported from a package entry point that is\nprocessed by [API Extractor](https://api-extractor.com/), which uses release tags to\ndetermine the API surface visibility.\n\n### Example\n\n**my-config.schema.json**\n\n```json\n{\n  \"x-tsdoc-release-tag\": \"@public\",\n  \"title\": \"My Config\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" }\n  },\n  \"additionalProperties\": false\n}\n```\n\n**Generated output (my-config.schema.json.d.ts)**\n\n```ts\n/**\n * @public\n */\nexport interface MyConfig {\n  name?: string;\n}\n```\n\nThe `x-tsdoc-release-tag` property is stripped from the schema before type generation, so it\ndoes not affect the shape of the emitted types. The value must be a single lowercase word\nstarting with `@` (for example `@public` or `@beta`); invalid values cause a build error.\n\n> **Note:** `@rushstack/node-core-library`'s `JsonSchema` class accepts vendor extension\n> keywords matching the `x-<vendor>-<keyword>` pattern by default, so schema files containing\n> `x-tsdoc-release-tag` will validate without any additional configuration.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"json-schema-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JsonSchemaTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-json-schema-typings-plugin.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-lint-plugin/README.md":"# @rushstack/heft-lint-plugin\n\nThis is a Heft plugin to run ESLint or TSLint. Intended for use with @rushstack/heft-typescript-plugin.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-lint-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-lint-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"lint-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LintPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-lint-plugin.schema.json\",\n\n      \"parameterScope\": \"lint\",\n      \"parameters\": [\n        {\n          \"longName\": \"--fix\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Fix all encountered rule violations where the violated rule provides a fixer. When running in production mode, fixes will be disabled regardless of this parameter.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-localization-typings-plugin/README.md":"# @rushstack/heft-localization-typings-plugin\n\nHeft plugin for generating types for localization files.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-localization-typings-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"localization-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LocalizationTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-localization-typings-plugin.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-rspack-plugin/README.md":"# @rushstack/heft-rspack-plugin\n\nThis is a Heft plugin for using Rspack.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-rspack-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-rspack-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"rspack-plugin\",\n      \"entryPoint\": \"./lib-commonjs/RspackPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-rspack-plugin.schema.json\",\n\n      \"parameterScope\": \"rspack\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes using @rspack/dev-server.  This parameter is only available when running in watch mode.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-sass-load-themed-styles-plugin/README.md":"# @rushstack/heft-sass-load-themed-styles-plugin\n\nThis is a Heft plugin to augment SASS processing with functionality to replace load-themed-styles theme expressions of the form\n```\n[theme:<tokenName>, default:<default>]\n```\ne.g.\n```\n[theme:someColor, default:#fc0]\n```\n\nWith css variable references of the form:\n```css\nvar(--<tokenName>, <default>)\n```\ne.g.\n```css\nvar(--someColor, #fc0>)\n```\n\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-sass-load-themed-styles-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"sass-load-themed-styles-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SassLoadThemedStylesPlugin.js\"\n    }\n  ]\n}\n","heft-plugins/heft-sass-plugin/README.md":"# @rushstack/heft-sass-plugin\n\nA [Heft](https://heft.rushstack.io/) plugin that compiles SCSS/Sass files during the build phase. It uses [`sass-embedded`](https://www.npmjs.com/package/sass-embedded) under the hood and produces:\n\n- **TypeScript type definitions** (`.d.ts`) for CSS modules, giving you typed access to class names and `:export` values\n- **Compiled CSS files** (optional) in one or more output folders\n- **JavaScript shims** (optional) that re-export the CSS for consumption in CommonJS or ESM environments\n\n> If `sass-embedded` is not supported on your platform, you can substitute it with the [`sass`](https://www.npmjs.com/package/sass) package using an npm alias.\n\n## Links\n\n- [CHANGELOG.md](https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-sass-plugin/CHANGELOG.md) - Find out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n---\n\n## Setup\n\n### 1. Add the plugin to your project\n\nIn your project's `package.json`:\n\n```json\n{\n  \"devDependencies\": {\n    \"@rushstack/heft\": \"...\",\n    \"@rushstack/heft-sass-plugin\": \"...\"\n  }\n}\n```\n\n### 2. Register the plugin in `config/heft.json`\n\nThe `sass` task must run before `typescript` so that the generated `.d.ts` files are available when TypeScript compiles your project.\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n  \"phasesByName\": {\n    \"build\": {\n      \"tasksByName\": {\n        \"sass\": {\n          \"taskPlugin\": {\n            \"pluginPackage\": \"@rushstack/heft-sass-plugin\"\n          }\n        },\n\n        \"typescript\": {\n          \"taskDependencies\": [\"sass\"],\n          \"taskPlugin\": {\n            \"pluginPackage\": \"@rushstack/heft-typescript-plugin\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n### 3. Create `config/sass.json`\n\nA minimal config uses all defaults:\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json\"\n}\n```\n\nA more complete setup that emits CSS and shims for both ESM and CommonJS:\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json\",\n  \"cssOutputFolders\": [\n    { \"folder\": \"lib-esm\", \"shimModuleFormat\": \"esnext\" },\n    { \"folder\": \"lib-commonjs\", \"shimModuleFormat\": \"commonjs\" }\n  ],\n  \"fileExtensions\": [\".module.scss\", \".module.sass\"],\n  \"nonModuleFileExtensions\": [\".global.scss\", \".global.sass\"],\n  \"silenceDeprecations\": [\"mixed-decls\", \"import\", \"global-builtin\", \"color-functions\"]\n}\n```\n\n### 4. Add generated files to `tsconfig.json`\n\nPoint TypeScript at the generated type definitions by including the `generatedTsFolder` in your `tsconfig.json`:\n\n```json\n{\n  \"compilerOptions\": {\n    \"paths\": {}\n  },\n  \"include\": [\"src\", \"temp/sass-ts\"]\n}\n```\n\n## CSS Modules vs. global stylesheets\n\nThe plugin distinguishes between two kinds of files based on their extension:\n\n**CSS modules** (extensions listed in `fileExtensions`, default: `.sass`, `.scss`, `.css`):\n- Processed with [`postcss-modules`](https://www.npmjs.com/package/postcss-modules)\n- Class names and `:export` values become properties in a generated TypeScript interface\n- The generated `.d.ts` exports a typed `styles` object as its default export\n\n**Global stylesheets** (extensions listed in `nonModuleFileExtensions`, default: `.global.sass`, `.global.scss`, `.global.css`):\n- Compiled to plain CSS with no module scoping\n- The generated `.d.ts` is a side-effect-only module (`export {}`)\n- Useful for resets, themes, and base styles\n\n**Partials** (filenames starting with `_`):\n- Never compiled to output files; they are only meant to be `@use`d or `@forward`ed by other files\n\n### Example: CSS module\n\n```scss\n// src/Button.module.scss\n.root {\n  background: blue;\n}\n.label {\n  font-size: 14px;\n}\n:export {\n  brandColor: #0078d4;\n}\n```\n\nGenerated `temp/sass-ts/Button.module.scss.d.ts`:\n\n```typescript\ninterface IStyles {\n  root: string;\n  label: string;\n  brandColor: string;\n}\ndeclare const styles: IStyles;\nexport default styles;\n```\n\nIn your TypeScript source:\n\n```typescript\nimport styles from './Button.module.scss';\n// styles.root, styles.label, styles.brandColor are all typed strings\n```\n\n## Configuration reference\n\nAll options are set in `config/sass.json`. Every option is optional.\n\n| Option | Default | Description |\n|---|---|---|\n| `srcFolder` | `\"src/\"` | Root directory that is scanned for SCSS files |\n| `generatedTsFolder` | `\"temp/sass-ts/\"` | Output directory for generated `.d.ts` files |\n| `secondaryGeneratedTsFolders` | `[]` | Additional directories to also write `.d.ts` files to (e.g. `\"lib-esm\"` when publishing typings alongside compiled output) |\n| `exportAsDefault` | `true` | When `true`, wraps exports in a typed default interface. When `false`, generates individual named exports (`export const className: string`). Note: `false` is incompatible with `cssOutputFolders`. |\n| `cssOutputFolders` | _(none)_ | Folders where compiled `.css` files are written. Each entry is either a plain folder path string, or an object with `folder` and optional `shimModuleFormat` (see below). |\n| `fileExtensions` | `[\".sass\", \".scss\", \".css\"]` | File extensions to treat as CSS modules |\n| `nonModuleFileExtensions` | `[\".global.sass\", \".global.scss\", \".global.css\"]` | File extensions to treat as global (non-module) stylesheets |\n| `excludeFiles` | `[]` | Paths relative to `srcFolder` to skip entirely |\n| `loadPaths` | `[]` | Folders, relative to the project folder, to search when a bare specifier such as `@use \"theme/colors\"` cannot be resolved relative to the importing file. Analogous to the Sass compiler's `loadPaths` option. |\n| `resolveBareSpecifiersAsPackages` | `false` | When `true`, a bare specifier that resolves neither relative to the importing file nor from `loadPaths` is additionally resolved as a package via Node module resolution. See [Bare specifiers](#bare-specifiers). |\n| `doNotTrimOriginalFileExtension` | `false` | When `true`, preserves the original extension in the CSS output filename. E.g. `styles.scss` → `styles.scss.css` instead of `styles.css`. Useful when downstream tooling needs to distinguish the source format. |\n| `preserveIcssExports` | `false` | When `true`, keeps the `:export { }` block in the emitted CSS. This is needed when a webpack loader (e.g. `css-loader`'s `icssParser`) must extract `:export` values at bundle time. Has no effect on the generated `.d.ts`. |\n| `silenceDeprecations` | `[]` | List of Sass deprecation codes to suppress (e.g. `\"mixed-decls\"`, `\"import\"`, `\"global-builtin\"`, `\"color-functions\"`) |\n| `ignoreDeprecationsInDependencies` | `false` | Suppresses deprecation warnings that originate from `node_modules` dependencies |\n| `extends` | _(none)_ | Path to another `sass.json` config file to inherit settings from |\n\n### CSS output folders and JS shims\n\nEach entry in `cssOutputFolders` can be a plain string (folder path only) or an object:\n\n```json\n{\n  \"folder\": \"lib-esm\",\n  \"shimModuleFormat\": \"esnext\"\n}\n```\n\nWhen `shimModuleFormat` is set, the plugin writes a `.js` shim alongside each `.css` file. For a CSS module, the shim re-exports the CSS:\n\n```js\n// ESM shim (shimModuleFormat: \"esnext\")\nexport { default } from \"./Button.module.css\";\n\n// CommonJS shim (shimModuleFormat: \"commonjs\")\nmodule.exports = require(\"./Button.module.css\");\nmodule.exports.default = module.exports;\n```\n\nFor a global stylesheet, the shim is a side-effect-only import:\n\n```js\n// ESM shim\nimport \"./global.global.css\";\nexport {};\n\n// CommonJS shim\nrequire(\"./global.global.css\");\n```\n\n## Sass import resolution\n\nA load specifier is resolved in this order:\n\n1. Relative to the importing file.\n2. Each folder in the `loadPaths` option, in order (bare specifiers only).\n3. As a package, via Node module resolution — only when `resolveBareSpecifiersAsPackages` is enabled\n   (bare specifiers only).\n\nThe plugin supports the modern `pkg:` protocol for importing from npm packages:\n\n```scss\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nThe legacy `~` prefix is automatically converted to `pkg:` for compatibility with older stylesheets:\n\n```scss\n// These are equivalent:\n@use \"~@fluentui/react/dist/sass/variables\";\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nThis also applies to specifiers that are not part of an `@use`/`@import`/`@forward` rule, such as\n`@include meta.load-css(\"~@fluentui/react/dist/sass/variables\")`.\n\n### Bare specifiers\n\nA \"bare\" specifier is one that does not start with `.`, `/`, or a URL scheme, for example\n`@use \"@fluentui/react/dist/sass/variables\"`.\n\nPer the Sass specification the target of `@use`, `@import` and `@forward` is a **URL**, so a bare\nspecifier is a *relative path*, not a reference to a package. That is how this plugin treats it by\ndefault, and `pkg:` is the supported way to reference a package:\n\n```scss\n// Preferred: unambiguous, and always enabled\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nSome other Sass toolchains (the Dart Sass CLI's `--load-path`, `sass-loader`, Vite, the Angular CLI)\ninstead resolve bare specifiers from `node_modules`. Stylesheets authored for those toolchains — most\ncommonly inside third-party packages, where a consuming project cannot rewrite the import — depend on\nthat behavior. Two opt-in options support them:\n\n```json\n{\n  \"loadPaths\": [\"src/styles\"],\n  \"resolveBareSpecifiersAsPackages\": true\n}\n```\n\n`loadPaths` resolves a bare specifier against a list of folders. `resolveBareSpecifiersAsPackages`\nadditionally resolves it as a package using Node module resolution, which honors the package's\n`exports` field. Both apply only after relative resolution has failed, so enabling them cannot change\nthe meaning of a specifier that already resolves.\n\n## Incremental builds\n\nThe plugin tracks inter-file dependencies (via `@use`, `@forward`, and `@import`) and only recompiles files that changed or whose dependencies changed. This makes `heft build --watch` fast even in large projects.\n\n## Plugin accessor API\n\nOther Heft plugins can hook into the Sass compilation pipeline via the `ISassPluginAccessor` interface:\n\n```typescript\nimport { ISassPluginAccessor } from '@rushstack/heft-sass-plugin';\n\n// In your plugin's apply() method:\nconst sassAccessor = session.requestAccessToPlugin<ISassPluginAccessor>(\n  '@rushstack/heft-sass-plugin',\n  'sass-plugin',\n  '@rushstack/heft-sass-plugin'\n);\n\nsassAccessor.hooks.postProcessCss.tapPromise('my-plugin', async (css, filePath) => {\n  // Transform CSS after Sass compilation but before it is written to cssOutputFolders\n  return transformedCss;\n});\n```\n\nThe `postProcessCss` hook is an `AsyncSeriesWaterfallHook` that passes the compiled CSS string and source file path through each tap in sequence.\n","heft-plugins/heft-sass-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"sass-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SassPlugin.js\"\n    }\n  ]\n}\n","heft-plugins/heft-serverless-stack-plugin/README.md":"# @rushstack/heft-serverless-stack-plugin\n\nThis is a Heft plugin for building apps using the [Serverless Stack (SST)](https://serverless-stack.com/) framework.\nWith this approach, the [SST toolchain](https://docs.serverless-stack.com/packages/cli) is only used for\nsynthesizing CloudFormation stacks and deploying the app, and Heft takes over the role of compiling, linting,\ntesting your TypeScript project.\n\nThe plugin accepts two command-line parameters:\n\n- `--sst` can be appended to `heft build` or `heft start`, causing the corresponding SST operation to be invoked\n\n- `--sst-stage STAGE_NAME` allows you to customize the stage.  It is equivalent to the `--stage` parameter\n  for the SST command-line tool.\n\n\nThe plugin has no effect without the `--sst` parameter.  When the parameter is provided:\n\n- `heft build --sst` will behave similar to `sst build`, which synthesizes CloudFormation stacks\n  in the `build/cdk.out/` directory.  See [this documentation](https://docs.serverless-stack.com/packages/cli#build)\n  for details.  Heft's `--watch` mode is also supported.\n\n- `heft start --sst` will behave similar to `sst start`, which deploys a\n  [stub lambda](https://docs.serverless-stack.com/live-lambda-development#sst-start) to AWS\n  and then launches the WebSocket client locally for debugging.  See\n  [this documentation](https://docs.serverless-stack.com/packages/cli#start) for details.\n\n\n> Note that `heft build --sst` currently requires AWS credentials, which limits the ability to perform this\n> validation in a monorepo environment where we can't assume that every developer works on AWS.\n> Issue [serverless-stack#1537](https://github.com/serverless-stack/serverless-stack/issues/1537)\n> is tracking a possible improvement.\n\n","heft-plugins/heft-serverless-stack-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"serverless-stack-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ServerlessStackPlugin\",\n\n      \"parameterScope\": \"serverless-stack\",\n      \"parameters\": [\n        {\n          \"longName\": \"--sst\",\n          \"description\": \"(EXPERIMENTAL) Invokes the SST postprocessing. Requires AWS credentials.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--sst-stage\",\n          \"argumentName\": \"STAGE_NAME\",\n          \"description\": \"Specifies the Serverless Stack stage; equivalent to to the \\\"--stage\\\" parameter from the \\\"sst\\\" CLI\",\n          \"parameterKind\": \"string\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-static-asset-typings-plugin/README.md":"# @rushstack/heft-static-asset-typings-plugin\n\nThis Heft plugin generates TypeScript `.d.ts` typings for static asset files, enabling type-safe\n`import` statements for non-TypeScript files. It provides two task plugins:\n\n- **`resource-assets-plugin`** - Generates `.d.ts` typings for _resource_ files such as images (`.png`,\n  `.jpg`, `.svg`, etc.) and fonts. These are opaque binary blobs whose content is not meaningful to\n  JavaScript; the generated typing simply exports a default `string` representing the asset URL\n  (e.g. as resolved by a bundler's asset loader).\n\n- **`source-assets-plugin`** - Generates `.d.ts` typings _and_ JavaScript module output for _source_\n  files (`.html`, `.css`, `.txt`, `.md`, etc.) whose textual content is consumed at runtime. The\n  generated JS modules read the file and re-export its content as a default `string`, making these\n  assets importable as ES modules.\n\nThe terminology follows the [webpack convention](https://webpack.js.org/guides/asset-modules/)\nwhere _resource_ assets are emitted as separate files referenced by URL, while _source_ assets are\ninlined as strings.\n\nBoth plugins support incremental and watch-mode builds.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-static-asset-typings-plugin --dev\n   ```\n\n2. Load the appropriate plugin(s) in your project's **config/heft.json**:\n\n   ### Resource assets (images, fonts, etc.)\n\n   **Inline configuration** - specify options directly in heft.json:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"image-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"resource-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"inline\",\n                 \"config\": {\n                   \"fileExtensions\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".avif\"],\n                   \"generatedTsFolders\": [\"temp/image-typings\"]\n                 }\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"image-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   **File configuration** - load settings from a riggable config file:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"image-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"resource-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"file\",\n                 \"configFileName\": \"resource-assets.json\"\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"image-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   And create a **config/resource-assets.json** file (which can be provided by a rig):\n\n   ```jsonc\n   {\n     \"fileExtensions\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".avif\"],\n     \"generatedTsFolders\": [\"temp/image-typings\"]\n   }\n   ```\n\n   ### Source assets\n\n   **Inline configuration:**\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"text-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"source-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"inline\",\n                 \"config\": {\n                   \"fileExtensions\": [\".html\"],\n                   \"cjsOutputFolders\": [\"lib-commonjs\"],\n                   \"esmOutputFolders\": [\"lib-esm\"],\n                   \"generatedTsFolders\": [\"temp/text-typings\"]\n                 }\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"text-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   **File configuration:**\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"text-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"source-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"file\",\n                 \"configFileName\": \"source-assets.json\"\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"text-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   And create a **config/source-assets.json** file (which can be provided by a rig):\n\n   ```jsonc\n   {\n     \"fileExtensions\": [\".html\"],\n     \"cjsOutputFolders\": [\"lib-commonjs\"],\n     \"esmOutputFolders\": [\"lib-esm\"],\n     \"generatedTsFolders\": [\"temp/text-typings\"]\n   }\n   ```\n\n3. Add the generated typings folder to your **tsconfig.json** `rootDirs` so that\n   TypeScript can resolve the declarations:\n\n   ```jsonc\n   {\n     \"compilerOptions\": {\n       \"rootDirs\": [\"src\", \"temp/image-typings\"]\n     }\n   }\n   ```\n\n## Plugin options\n\nBoth plugins support two configuration modes via the `configType` option:\n\n### Inline mode (`configType: \"inline\"`)\n\nProvide configuration directly in heft.json under `options.config`:\n\n#### `resource-assets-plugin` inline config\n\n| Option              | Type       | Default                  | Description                                     |\n| ------------------- | ---------- | ------------------------ | ----------------------------------------------- |\n| `fileExtensions`    | `string[]` | -                        | **(required)** File extensions to generate typings for. |\n| `generatedTsFolders`| `string[]` | `[\"temp/static-asset-ts\"]` | Folders where generated `.d.ts` files are written. The first entry should be listed in `rootDirs` so TypeScript can resolve the asset imports during type-checking. Additional entries are typically your project's published typings folder(s). |\n| `sourceFolderPath`  | `string`   | `\"src\"`                  | Source folder to scan for asset files.           |\n\n#### `source-assets-plugin` inline config\n\nIncludes all the above, plus:\n\n| Option              | Type       | Default                  | Description                                          |\n| ------------------- | ---------- | ------------------------ | ---------------------------------------------------- |\n| `cjsOutputFolders`  | `string[]` | -                        | **(required)** Output folders for generated CommonJS `.js` modules. |\n| `esmOutputFolders`   | `string[]` | `[]`                    | Output folders for generated ESM `.js` modules.      |\n\n### File mode (`configType: \"file\"`)\n\nLoad configuration from a riggable JSON config file in the project's `config/` folder:\n\n| Option           | Type     | Description                                                            |\n| ---------------- | -------- | ---------------------------------------------------------------------- |\n| `configFileName` | `string` | **(required)** Name of the JSON config file in the `config/` folder.   |\n\nThe config file supports the same properties as inline mode (see tables above). Config files\ncan be provided by a rig, making file mode ideal for shared build configurations.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-static-asset-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-static-asset-typings-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"resource-assets-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ResourceAssetsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/resource-assets-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"source-assets-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SourceAssetsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/source-assets-options.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-storybook-plugin/README.md":"# @rushstack/heft-storybook-plugin\n\nThis is a Heft plugin for using the [Storybook](https://storybook.js.org/) tool for developing and testing\nUI components.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-storybook-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-storybook-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"storybook-plugin\",\n      \"entryPoint\": \"./lib-commonjs/StorybookPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/storybook.schema.json\",\n\n      \"parameterScope\": \"storybook\",\n      \"parameters\": [\n        {\n          \"longName\": \"--storybook\",\n          \"description\": \"(EXPERIMENTAL) Used by the \\\"@rushstack/heft-storybook-plugin\\\" package to launch Storybook.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--storybook-test\",\n          \"description\": \"Executes a stripped down build-storybook for testing purposes.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--docs\",\n          \"description\": \"Execute storybook in docs mode.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--no-open\",\n          \"description\": \"Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--port\",\n          \"description\": \"Pass --port to the storybook CLI to bind the dev server to a specific port in serve mode.\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"PORT\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-typescript-plugin/README.md":"# @rushstack/heft-typescript-plugin\n\nThis is a Heft plugin for compiling TypeScript.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-typescript-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-typescript-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"typescript-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TypeScriptPlugin\"\n    }\n  ]\n}\n","heft-plugins/heft-vscode-extension-plugin/README.md":"# @rushstack/heft-vscode-extension-plugin\n\nThis is a Heft plugin for packaging Visual Studio Code extensions using the `vsce` tool.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-vscode-extension-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"vscode-extension-package-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionPackagePlugin.js\",\n      \"parameterScope\": \"package\"\n    },\n    {\n      \"pluginName\": \"vscode-extension-verify-signature-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionVerifySignaturePlugin.js\",\n      \"parameterScope\": \"verify-signature\",\n      \"parameters\": [\n        {\n          \"longName\": \"--vsix-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which VSIX file will be used for verifying signature.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--manifest-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which manifest file will be used for verifying signature.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--signature-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which signature file will be used for verifying signature.\",\n          \"required\": true\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"vscode-extension-publish-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionPublishPlugin.js\",\n      \"parameterScope\": \"publish-vsix\",\n      \"parameters\": [\n        {\n          \"longName\": \"--vsix-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which VSIX file will be used for publishing.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--manifest-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which manifest file will be used for publishing.\",\n          \"required\": false\n        },\n        {\n          \"longName\": \"--signature-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which signature file will be used for publishing.\",\n          \"required\": false\n        },\n        {\n          \"longName\": \"--publish-unsigned\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Use this parameter to control whether to publish unsigned.\",\n          \"required\": false\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-webpack4-plugin/README.md":"# @rushstack/heft-webpack4-plugin\n\nThis is a Heft plugin for using Webpack 4.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-webpack4-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-webpack4-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"webpack4-plugin\",\n      \"entryPoint\": \"./lib-commonjs/Webpack4Plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-webpack4-plugin.schema.json\",\n\n      \"parameterScope\": \"webpack4\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes using webpack-dev-server.  This parameter is only available when running in watch mode.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-webpack5-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=heft-plugins%2Fheft-webpack5-plugin%2FREADME.md -->","heft-plugins/heft-webpack5-plugin/heft-plugin.json":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=heft-plugins%2Fheft-webpack5-plugin%2Fheft-plugin.json -->","rush-plugins/rush-amazon-s3-build-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-amazon-s3-build-cache-plugin%2FREADME.md -->","rush-plugins/rush-azure-storage-build-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-azure-storage-build-cache-plugin%2FREADME.md -->","rush-plugins/rush-bridge-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-bridge-cache-plugin%2FREADME.md -->","rush-plugins/rush-buildxl-graph-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-buildxl-graph-plugin%2FREADME.md -->","rush-plugins/rush-http-build-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-http-build-cache-plugin%2FREADME.md -->","rush-plugins/rush-litewatch-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-litewatch-plugin%2FREADME.md -->","rush-plugins/rush-mcp-docs-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-mcp-docs-plugin%2FREADME.md -->","rush-plugins/rush-mcp-docs-plugin/rush-mcp-plugin.json":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-mcp-docs-plugin%2Frush-mcp-plugin.json -->","rush-plugins/rush-published-versions-json-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-published-versions-json-plugin%2FREADME.md -->","rush-plugins/rush-redis-cobuild-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-redis-cobuild-plugin%2FREADME.md -->","rush-plugins/rush-resolver-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-resolver-cache-plugin%2FREADME.md -->","rush-plugins/rush-serve-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-serve-plugin%2FREADME.md -->","skills/rushstack-best-practices/CHANGELOG.md":"# Change Log - Rush Stack Skills\n\nThis log was last generated on Tue, 11 Feb 2026 00:00:00 GMT and should not be manually modified.\n\n## 1.0.0\nTue, 11 Feb 2026 00:00:00 GMT\n\n### Minor changes\n\n- Initial release of Rush Stack skills collection\n- `rushstack-best-practices` skill providing guidance for:\n  - Configuring Rush in a monorepo\n  - Common configuration patterns\n  - Package management best practices\n  - Build and toolchain recommendations\n\n","skills/rushstack-best-practices/SKILL.md":"---\nname: rushstack-best-practices\ndescription: Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.\nlicense: MIT\nmetadata:\n  author: rushstack\n  version: \"1.0.0\"\n---\n\n# Rushstack Best Practices\n\nThis skill provides essential best practices for working with Rush monorepos. Following these guidelines ensures efficient dependency management, optimal build performance, and proper command usage.\n\n## Important Guidelines\n\n**When encountering unclear issues or questions:**\n\n1. **Never make assumptions** - If unsure about Rush behavior, configuration, or commands\n2. **Search official resources first** - Check documentation and existing issues before guessing\n3. **Provide accurate information** - Base responses on verified sources, not assumptions\n4. **Ask for clarification** - When the problem description is ambiguous or incomplete\n\n## Core Principles\n\n1. **Always use Rush commands** - Avoid npm/pnpm/yarn directly in a Rush monorepo\n2. **Use rushx for single projects** - Like npm run, but Rush-aware\n3. **rush install vs update** - install for CI, update after changes\n4. **rush build vs rebuild** - build for incremental, rebuild for clean\n5. **Projects at 2 levels** - Standard: apps/, libraries/, tools/\n6. **Selection flags reduce scope** - Use --to, --from, --impacted-by\n7. **Build cache is automatic** - Configure output folders to enable\n8. **Subspace for large repos** - Isolate dependencies when needed\n\n## Project Selection Best Practices\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. Use these selection flags to improve efficiency:\n\n### --to <PROJECT>\nSelect specified project and all its dependencies.\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project  # If project name is unique\nrush build --to .            # Use current directory's project\n```\n\n### --to-except <PROJECT>\nSelect all dependencies of specified project, but not the project itself.\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\nSelect specified project and all its downstream dependencies.\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\nSelect projects that might be affected by specified project changes, excluding dependencies.\n- Quick test of project change impacts\n- Use when dependency status is already correct\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\nSimilar to `--impacted-by`, but excludes specified project itself.\n- Project itself has been manually built\n- Only need to test downstream impacts\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\nOnly select specified project, completely ignore dependency relationships.\n- Dependency status is known to be correct\n- Combine with other selection parameters\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n\n## Command Usage Guidelines\n\n### Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. **`rush` command** - Execute operations affecting the entire repository or multiple projects\n   - Strict parameter validation and documentation\n   - Support for global and batch commands\n   - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing\n\n2. **`rushx` command** - Execute specific scripts for a single project\n   - Similar to `npm run` or `pnpm run`\n   - Uses Rush version selector for toolchain consistency\n   - Prepares shell environment based on Rush configuration\n   - Use cases: Running project-specific build scripts, tests, dev servers\n\n3. **`rush-pnpm` command** - Replace direct use of pnpm in Rush repository\n   - Sets correct PNPM workspace context\n   - Supports Rush-specific enhancements\n   - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n### Install vs Update\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush update` | Updates shrinkwrap, installs new dependencies | After cloning, after git pull, after modifying package.json |\n| `rush install` | Read-only install from existing shrinkwrap | CI/CD pipelines, ensuring version consistency |\n\n### Build vs Rebuild\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush build` | Incremental build, only changed projects | Daily development, quick validation |\n| `rush rebuild` | Clean build all projects | Complete rebuild needed, investigating issues |\n\n## Dependency Management\n\n### Package Manager Selection\nChoose in `rush.json`:\n```json\n{\n  \"pnpmVersion\": \"8.x.x\"     // Preferred - efficient, strict\n  // \"npmVersion\": \"8.x.x\"   // Alternative\n  // \"yarnVersion\": \"1.x.x\"  // Alternative\n}\n```\n\n### Version Constraints\nConfigure in `common/config/subspaces/<subspace>/common-versions.json`:\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n### Adding/Removing Dependencies\nAlways use Rush commands, not npm/pnpm directly:\n```bash\nrush add -p lodash --dev      # Add dev dependency\nrush add -p react --exact     # Add exact version\nrush remove -p lodash         # Remove dependency\n```\n\n## Build Cache Configuration\n\nConfigure in `<project>/config/rush-project.json`:\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\"]\n    }\n  ]\n}\n```\n\n**Cache Behavior:**\n- Cache stored in `common/temp/build-cache`\n- Invalidated by: source changes, dependency changes, env vars, command params\n- Parallel builds supported via `enableParallelism`\n\n## Troubleshooting\n\n### Dependency Issues\n- Avoid `npm`, `pnpm`, `yarn` - use Rush commands\n- Run `rush purge` to clean environment\n- Run `rush update --recheck` to force dependency check\n\n### Build Issues\n- Use `rush rebuild` to skip cache\n- Check `rushx build` output for specific errors\n- Use `--verbose` for detailed logs\n\n### Performance Issues\n- Use selection flags (`--to`, `--from`, etc.) to reduce scope\n- Enable build cache in rush-project.json\n- Consider subspace for very large monorepos\n\n## Subspace for Large Monorepos\n\n**What is Subspace:**\n- Allows multiple PNPM lock files in one Rush monorepo\n- Enables independent dependency management per team/project group\n- Reduces risk from dependency updates\n- Improves install/update performance\n\n**When to Use:**\n- Large monorepos (50+ projects)\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Need for faster dependency operations\n\n## Official Resources\n\n### Documentation & References\n\n**Official Websites:**\n- [RushStack.io](https://rushstack.io/) - Main documentation site\n- [Rush.js.io](https://rushjs.io/) - Rush build orchestrator documentation\n- [Heft.rushstack.io](https://heft.rushstack.io/) - Heft build tool documentation\n- [API Extractor](https://api-extractor.com/) - API documentation and rollups\n\n**Search Existing Issues:**\n- Before creating new issues, search [rush-stack-builds issues](https://github.com/microsoft/rushstack/issues)\n\n### When to Search vs. Ask\n\n**Search these resources first when:**\n- Encountering error messages\n- Unsure about configuration options\n- Looking for examples or tutorials\n- Need to understand Rush behavior\n\n**Ask the user for clarification when:**\n- The specific use case is unclear\n- Multiple approaches are possible\n- Context is missing to provide accurate guidance\n- The issue might be environment-specific\n\n## Detailed References\n\nFor expanded information on specific domains, see:\n- `references/core-commands.md` - Detailed command reference\n- `references/project-configuration.md` - Configuration file specifications\n- `references/dependency-management.md` - Advanced dependency patterns\n- `references/build-system.md` - Build optimization and caching\n- `references/subspace.md` - Subspace setup and usage\n","skills/rushstack-best-practices/references/build-system.md":"# Build System Reference\n\n## Build vs Rebuild\n\n### rush build (Incremental Build)\n\n**Purpose:** Build only changed projects and dependencies\n\n**Behavior:**\n- Analyzes project dependency graph\n- Builds only projects that changed\n- Builds downstream dependents\n- Uses build cache when available\n- Supports parallel execution\n\n**Use Cases:**\n- Daily development\n- Quick iteration\n- Testing changes\n\n**Examples:**\n```bash\n# Build all changed projects\nrush build\n\n# Build specific project and dependencies\nrush build --to @my-scope/my-app\n\n# Build project and downstream dependents\nrush build --from @my-scope/my-lib\n\n# Parallel build (default for bulk commands)\nrush build --parallel\n```\n\n### rush rebuild (Clean Build)\n\n**Purpose:** Complete clean build of all projects\n\n**Behavior:**\n- Cleans previous build artifacts\n- Builds all projects (even unchanged)\n- Skips build cache\n- Takes longer than incremental build\n\n**Use Cases:**\n- After major dependency updates\n- When investigating build issues\n- Before releases\n- Complete validation\n\n**Examples:**\n```bash\n# Rebuild everything\nrush rebuild\n\n# Rebuild specific project and dependencies\nrush rebuild --to @my-scope/my-app\n```\n\n## Build Selection Flags\n\n### Flag Comparison\n\n| Flag | Selects | Dependencies Built | Dependents Built | Use Case |\n|------|---------|-------------------|------------------|----------|\n| `--to <proj>` | Project + dependencies | Yes | No | Build with full chain |\n| `--to-except <proj>` | Dependencies only | Yes | No | Pre-build dependencies |\n| `--from <proj>` | Project + dependents | No | Yes | Test downstream impact |\n| `--impacted-by <proj>` | Affected projects | No | Yes (only impacted) | Quick validation |\n| `--impacted-by-except <proj>` | Dependents only | No | Yes (only impacted) | Skip built project |\n| `--only <proj>` | Just the project | No | No | When deps are good |\n\n### --to (Project + Dependencies)\n\nBuild project and all dependencies recursively:\n\n```bash\nrush build --to @my-scope/my-app\n```\n\n**Use When:**\n- Building an application for testing\n- Need complete dependency chain\n- Publishing a package\n\n**Dependency Graph Example:**\n```\nmy-app\n├── ui-lib\n│   └── utils\n└── api-lib\n    └── utils\n\nrush build --to my-app builds: utils, ui-lib, api-lib, my-app\n```\n\n### --to-except (Dependencies Only)\n\nBuild all dependencies, but not the project itself:\n\n```bash\nrush build --to-except @my-scope/my-app\n```\n\n**Use When:**\n- Pre-building dependencies\n- Project will be built separately\n- Validating dependency chain\n\n### --from (Project + Dependents)\n\nBuild project and all downstream dependents:\n\n```bash\nrush build --from @my-scope/utils\n```\n\n**Use When:**\n- After library changes\n- Testing impact on dependents\n- Ensuring downstream compatibility\n\n**Dependency Graph Example:**\n```\nutils (changed)\n├── ui-lib\n│   └── my-app\n└── api-lib\n    └── my-app\n\nrush build --from utils builds: utils, ui-lib, api-lib, my-app\n```\n\n### --impacted-by (Affected Projects)\n\nBuild projects that might be affected by changes:\n\n```bash\nrush build --impacted-by @my-scope/utils\n```\n\n**Use When:**\n- Quick change validation\n- Dependencies are already built\n- Faster than `--from`\n\n**Note:** Assumes dependencies are up-to-date\n\n### --impacted-by-except (Dependents Only)\n\nLike `--impacted-by` but excludes the project itself:\n\n```bash\nrush build --impacted-by-except @my-scope/utils\n```\n\n**Use When:**\n- Project already built\n- Only need to test dependents\n- Saving time\n\n### --only (Just the Project)\n\nBuild only specified project, ignore dependency relationships:\n\n```bash\nrush build --only @my-scope/my-app\n```\n\n**Use When:**\n- Dependencies known to be correct\n- Combining with other flags\n- Quick single-project rebuild\n\n**Combined Example:**\n```bash\n# Build downstream dependents, but only rebuild utils\nrush build --from utils --only utils\n```\n\n## Build Cache\n\n### Cache Principles\n\nRush build cache accelerates builds by caching project outputs:\n\n**Cache Storage:** `common/temp/build-cache/`\n\n**Cache Key Based On:**\n- Source file contents\n- Dependency versions\n- Environment variables\n- Command line parameters\n- Rush configuration\n\n**Behavior:**\n- If cache key matches → Extract cached output\n- If cache key differs → Rebuild and update cache\n\n### Cache Configuration\n\n**File:** `<project>/config/rush-project.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\", \"API_KEY\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Script name in package.json\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n### Environment Variables\n\n**Caching with Environment Variables:**\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\", \"API_ENDPOINT\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Cache key includes `NODE_ENV` and `API_ENDPOINT` values\n- Changing these values invalidates cache\n- Different values have different caches\n\n**Use Cases:**\n- Production vs development builds\n- Region-specific builds\n- Feature flag configurations\n\n### Disabling Cache\n\n**Per Operation:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": true  // Disable\n    }\n  ]\n}\n```\n\n**Per Command:**\n```bash\n# Rush rebuild always skips cache\nrush rebuild\n\n# Rush build uses cache (unless disabled)\nrush build\n```\n\n## Parallel Execution\n\n### Enabling Parallelism\n\nIn `command-line.json`:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build projects\",\n  \"enableParallelism\": true\n}\n```\n\n**Effect:**\n- Builds independent projects simultaneously\n- Respects dependency order\n- Faster builds on multi-core machines\n\n### Parallel Build Behavior\n\n**Dependency Graph:**\n```\napp1 depends on lib1 and lib2\napp2 depends on lib2\nlib1 and lib2 are independent\n```\n\n**Parallel Build Order:**\n```\nPhase 1 (parallel): lib1, lib2\nPhase 2 (parallel): app1, app2\n```\n\n### Limiting Parallelism\n\n```bash\n# Limit concurrent build jobs\nrush build --parallelism 4\n```\n\n**Use Cases:**\n- Resource-constrained machines\n- Preventing memory issues\n- CI environment limits\n\n## Build Best Practices\n\n### 1. Use Incremental Builds for Development\n\n**Incorrect:**\n```bash\n# Always rebuild everything\nrush rebuild\n```\n\n**Correct:**\n```bash\n# Incremental build for development\nrush build\n```\n\n### 2. Use Selection Flags to Reduce Scope\n\n**Incorrect:**\n```bash\n# Build everything when only one project changed\nrush build\n```\n\n**Correct:**\n```bash\n# Build only affected projects\nrush build --to @my-scope/changed-project\n```\n\n### 3. Configure Build Cache\n\n**Incorrect:**\n```json\n// No cache configuration\n// Builds are always slow\n```\n\n**Correct:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n\n### 4. Enable Parallelism\n\n**Incorrect:**\n```json\n{\n  \"enableParallelism\": false\n}\n```\n\n**Correct:**\n```json\n{\n  \"enableParallelism\": true\n}\n```\n\n## Build Troubleshooting\n\n### Cache Issues\n\n**Symptom:** Build output seems stale\n\n**Solutions:**\n```bash\n# Clear cache and rebuild\nrush rebuild\n\n# Or use purge\nrush purge\nrush build\n```\n\n### Dependency Build Order\n\n**Symptom:** Projects build in wrong order\n\n**Solutions:**\n```bash\n# Let Rush determine order\nrush build  # Automatic dependency order\n\n# Verify dependency graph\nrush list --json\n```\n\n### Slow Builds\n\n**Symptom:** Builds take too long\n\n**Solutions:**\n```bash\n# Use selection flags\nrush build --to @my-scope/target-project\n\n# Enable parallelism\n# Check command-line.json has \"enableParallelism\": true\n\n# Configure cache\n# Check rush-project.json has cache configured\n```\n\n## Build Scripts\n\n### package.json Scripts\n\n**Recommended Setup:**\n```json\n{\n  \"scripts\": {\n    \"build\": \"heft build\",\n    \"build:production\": \"heft build --production\",\n    \"clean\": \"heft clean\",\n    \"test\": \"heft test\"\n  }\n}\n```\n\n**Corresponding rush-project.json:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"]\n    },\n    {\n      \"operationName\": \"build:production\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\"]\n    }\n  ]\n}\n```\n\n**Usage:**\n```bash\n# Run project script directly\ncd apps/my-app\nrushx build\n\n# Or via Rush bulk command\nrush build\n```\n","skills/rushstack-best-practices/references/core-commands.md":"# Core Commands Reference\n\n## Command Tool Selection\n\n### rush (Repository-wide Operations)\n\n**Purpose:** Execute operations affecting the entire repository or multiple projects\n\n**Features:**\n- Strict parameter validation and documentation\n- Support for global and batch commands\n- Suitable for standardized workflows\n\n**Use Cases:**\n- Dependency installation (`rush install`, `rush update`)\n- Building (`rush build`, `rush rebuild`)\n- Publishing (`rush publish`)\n- Version management (`rush change`, `rush version`)\n\n### rushx (Single Project Scripts)\n\n**Purpose:** Execute specific scripts for a single project\n\n**Features:**\n- Similar to `npm run` or `pnpm run`\n- Uses Rush version selector for toolchain consistency\n- Prepares shell environment based on Rush configuration\n\n**Use Cases:**\n- Running project-specific build scripts\n- Executing tests for a single project\n- Running development servers\n\n**Example:**\n```bash\ncd apps/my-app\nrushx build      # Equivalent to npm run build\nrushx test       # Equivalent to npm run test\nrushx start      # Equivalent to npm run start\n```\n\n### rush-pnpm (Direct PNPM with Rush Context)\n\n**Purpose:** Replace direct use of pnpm in Rush repository\n\n**Features:**\n- Sets correct PNPM workspace context\n- Supports Rush-specific enhancements\n- Provides compatibility checks with Rush\n\n**Use Cases:**\n- When direct PNPM commands are needed\n- Troubleshooting PNPM-specific issues\n- PNPM operations that Rush doesn't wrap\n\n**Example:**\n```bash\nrush-pnpm list         # List packages in Rush context\nrush-pnpm why <pkg>    # Check why a package is included\n```\n\n## Common Commands\n\n### rush update\n\n**Function:** Install and update dependencies, update shrinkwrap file\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n- `--network-concurrency COUNT` - Limit concurrent network requests\n\n**Use Cases:**\n- After first cloning repository\n- After pulling new Git changes\n- After modifying package.json\n- When dependencies need updating\n\n**Example:**\n```bash\nrush update                  # Standard update\nrush update --purge          # Clean then update\nrush update --to @my/app     # Update specific project and deps\n```\n\n### rush install\n\n**Function:** Install dependencies based on existing shrinkwrap file (read-only)\n\n**Features:**\n- Won't modify shrinkwrap file\n- Suitable for CI environment\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n\n**Use Cases:**\n- CI/CD pipelines\n- Ensuring dependency version consistency\n- Avoiding accidental shrinkwrap file updates\n\n**Example:**\n```bash\nrush install                  # Standard install\nrush install --production     # Install only production deps\n```\n\n### rush build\n\n**Function:** Incremental project build\n\n**Features:**\n- Only builds changed projects and dependencies\n- Supports parallel building\n- Uses build cache when available\n\n**Use Cases:**\n- Daily development builds\n- Quick change validation\n\n**Example:**\n```bash\nrush build                    # Build all changed projects\nrush build --to @my/app       # Build app and dependencies\nrush build --from @my/lib     # Build lib and dependents\n```\n\n### rush rebuild\n\n**Function:** Complete clean build\n\n**Features:**\n- Builds all projects\n- Cleans previous build artifacts\n- Skips build cache\n\n**Use Cases:**\n- When complete build cleaning is needed\n- When investigating build issues\n\n**Example:**\n```bash\nrush rebuild                  # Rebuild everything\nrush rebuild --to @my/app     # Rebuild app and dependencies\n```\n\n### rush add\n\n**Function:** Add dependencies to project\n\n**Usage:** `rush add -p <package> [--dev] [--exact]`\n\n**Important Parameters:**\n- `-p, --package` - Package name\n- `--dev` - Add as development dependency\n- `--exact` - Use exact version (no semver range)\n- `--peer` - Add as peer dependency\n\n**Important:** Must be run in corresponding project directory\n\n**Example:**\n```bash\ncd apps/my-app\nrush add -p lodash --dev        # Add dev dependency\nrush add -p react --exact       # Add exact version\nrush add -p typescript -D       # Short for --dev\n```\n\n### rush remove\n\n**Function:** Remove project dependencies\n\n**Usage:** `rush remove -p <package>`\n\n**Example:**\n```bash\ncd apps/my-app\nrush remove -p lodash           # Remove lodash\n```\n\n### rush purge\n\n**Function:** Clean temporary files and installation files\n\n**Use Cases:**\n- Clean build environment\n- Resolve dependency issues\n- Free up disk space\n\n**Example:**\n```bash\nrush purge                      # Clean all temp files\n```\n\n## Project Selection Flags\n\n### --to <PROJECT>\n\n**Function:** Select specified project and all its dependencies\n\n**Use Cases:**\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n\n**Example:**\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project      # Omit scope if unique\nrush build --to .               # Use current directory's project\n```\n\n### --to-except <PROJECT>\n\n**Function:** Select all dependencies of specified project, but not the project itself\n\n**Use Cases:**\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n\n**Example:**\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\n\n**Function:** Select specified project and all its downstream dependencies\n\n**Use Cases:**\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n\n**Example:**\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\n\n**Function:** Select projects that might be affected by specified project changes, excluding dependencies\n\n**Use Cases:**\n- Quick test of project change impacts\n- Use when dependency status is already correct\n\n**Example:**\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\n\n**Function:** Similar to `--impacted-by`, but excludes specified project itself\n\n**Use Cases:**\n- Project itself has been manually built\n- Only need to test downstream impacts\n\n**Example:**\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\n\n**Function:** Only select specified project, completely ignore dependency relationships\n\n**Use Cases:**\n- Dependency status is known to be correct\n- Combine with other selection parameters\n\n**Example:**\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n","skills/rushstack-best-practices/references/dependency-management.md":"# Dependency Management Reference\n\n## Package Manager Selection\n\n### Choosing a Package Manager\n\nConfigure in `rush.json`:\n\n```json\n{\n  // PNPM (Recommended)\n  \"pnpmVersion\": \"8.x.x\",\n\n  // Or NPM\n  // \"npmVersion\": \"8.x.x\",\n\n  // Or Yarn\n  // \"yarnVersion\": \"1.x.x\"\n}\n```\n\n**Recommendations:**\n- **PNPM** - Preferred: Efficient, strict, handles large monorepos well\n- **NPM** - Standard: Good compatibility, widely supported\n- **Yarn** - Legacy: Supported, but consider PNPM for new projects\n\n## Workspace Linking\n\n### Automatic Local Linking\n\nRush automatically creates symlinks for local project dependencies:\n\n**In project A package.json:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/project-b\": \"^1.0.0\"\n  }\n}\n```\n\nRush automatically:\n1. Detects `@my-scope/project-b` is a local project\n2. Creates symlink in `node_modules/@my-scope/project-b`\n3. Links to the actual project folder\n4. Updates during each `rush install` or `rush update`\n\n**Benefits:**\n- Live changes to dependencies immediately visible\n- No need for npm link / pnpm link\n- Automatic dependency resolution\n\n### Workspace Linking Behavior\n\n```bash\n# After running\nrush install\n\n# Rush creates\napps/my-app/node_modules/@my-scope/\n  ├── my-lib -> ../../libraries/my-lib\n  └── other-lib -> ../../libraries/other-lib\n```\n\n## Version Management\n\n### common-versions.json\n\n**Purpose:** Configure NPM dependency versions affecting all projects in a subspace\n\n**Location:** `common/config/subspaces/<subspace>/common-versions.json`\n\n### Preferred Versions\n\nRestrict specific package versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"react-dom\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\",\n    \"eslint\": \"^8.0.0\"\n  }\n}\n```\n\n**Use Cases:**\n- Force consistent versions across projects\n- Prevent version drift\n- Ensure compatibility\n\n### Implicit Preferred Versions\n\nAutomatically add all dependencies to preferredVersions:\n\n```json\n{\n  \"implicitlyPreferredVersions\": true\n}\n```\n\n**Effect:**\n- Every dependency used in any project becomes constrained to that version\n- Prevents accidental version updates\n- **Caution:** Can make dependency updates difficult\n\n**Recommendation:** Use `false` for active development, `true` for stable maintenance\n\n### Allowed Alternative Versions\n\nAllow certain dependencies to use multiple different versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  },\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n**Use Cases:**\n- Gradual migration between major versions\n- Testing new versions without full commitment\n- Teams need different versions temporarily\n\n## Adding Dependencies\n\n### Using rush add\n\n**Always use Rush commands**, not npm/pnpm directly:\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Add dependency\nrush add -p lodash\n\n# Add dev dependency\nrush add -p typescript --dev\n\n# Add exact version\nrush add -p react --exact\n\n# Add peer dependency\nrush add -p react-dom --peer\n\n# Add multiple\nrush add -p lodash -p axios -p moment\n```\n\n**Important:**\n- Must run in project directory\n- Rush updates both package.json and shrinkwrap\n- Automatically handles workspace dependencies\n\n###rush add Options\n\n| Option | Description |\n|--------|-------------|\n| `-p, --package <name>` | Package name |\n| `-D, --dev` | Add as devDependency |\n| `-E, --exact` | Use exact version |\n| `--peer` | Add as peerDependency |\n| `--caret` | Use caret range (default for dependencies) |\n| `--tilde` | Use tilde range |\n\n## Removing Dependencies\n\n### Using rush remove\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Remove dependency\nrush remove -p lodash\n\n# Remove multiple\nrush remove -p lodash -p axios\n```\n\n## Decoupled Local Dependencies\n\n### Handling Cyclic Dependencies\n\nWhen two projects depend on each other:\n\n```json\n// In apps/my-app/rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"decoupledLocalDependencies\": [\"@my-scope/shared-lib\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Rush won't create symlink for `@my-scope/shared-lib`\n- Project uses version from npm (or registry)\n- Breaks cycle at build time\n\n**When to Use:**\n- Circular dependency detected\n- Temporary workaround during refactoring\n- Runtime dependency only (not build-time)\n\n**Caution:** Should be used sparingly - indicates architecture issue\n\n## Dependency Best Practices\n\n### 1. Always Use Rush Commands\n\n**Incorrect:**\n```bash\nnpm install lodash\npnpm add typescript\n```\n\n**Correct:**\n```bash\nrush add -p lodash\nrush add -p typescript\n```\n\n### 2. Use Workspace References\n\n**Incorrect:**\n```json\n{\n  \"dependencies\": {\n    \"my-lib\": \"file:../libraries/my-lib\"\n  }\n}\n```\n\n**Correct:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/my-lib\": \"^1.0.0\"\n  }\n}\n```\n\n### 3. Centralize Version Constraints\n\nUse `common-versions.json` instead of duplicating in each project:\n\n**Incorrect:**\n- Every project has `\"typescript\": \"~4.5.0\"` in package.json\n\n**Correct:**\n```json\n// common/config/subspaces/default/common-versions.json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  }\n}\n```\n\n### 4. Careful with implicitlyPreferredVersions\n\n**Good for:**\n- Stable maintenance branches\n- Released products\n- Teams that want strict version control\n\n**Bad for:**\n- Active development\n- Libraries\n- Frequent dependency updates\n\n## Troubleshooting Dependencies\n\n### Dependency Conflicts\n\n**Symptom:** Version conflicts or peer dependency warnings\n\n**Solutions:**\n```bash\n# Clean slate\nrush purge\nrush update --recheck\n\n# Check what depends on a package\nrush-pnpm why <package>\n\n# View dependency tree\nrush-pnpm list --depth 0\n```\n\n### Workspace Linking Issues\n\n**Symptom:** Local changes not reflected\n\n**Solutions:**\n```bash\n# Reinstall to recreate links\nrush install\n\n# Check links are correct\nls -la node_modules/@my-scope/\n```\n\n### Version Drift\n\n**Symptom:** Different projects using different versions\n\n**Solution:**\n```json\n// common-versions.json\n{\n  \"preferredVersions\": {\n    \"problematic-package\": \"exact-version\"\n  },\n  \"implicitlyPreferredVersions\": false  // Start with false\n}\n```\n\n## Subspace Dependency Isolation\n\nWhen using subspaces, each has its own:\n- `pnpm-lock.yaml` - Independent lock file\n- `common-versions.json` - Independent version constraints\n- Dependency tree - Isolated from other subspaces\n\n**Benefits:**\n- Team A can use React 17 while Team B uses React 18\n- Dependency updates in one subspace don't affect others\n- Faster installs (only affected subspace updated)\n\n**See:** `references/subspace.md` for detailed subspace configuration\n","skills/rushstack-best-practices/references/project-configuration.md":"# Project Configuration Reference\n\n## Standard Directory Structure\n\n```\n/\n├── common/                          # Rush common files directory\n│   ├── autoinstallers/              # Autoinstaller tool configuration\n│   ├── config/                      # Configuration files directory\n│   │   ├── rush/                    # Rush core configuration\n│   │   │   ├── command-line.json    # Command line configuration\n│   │   │   ├── build-cache.json     # Build cache configuration\n│   │   │   ├── experiments.json     # Feature experiments\n│   │   │   └── subspaces.json       # Subspace configuration\n│   │   └── subspaces/               # Subspace configuration\n│   │       └── <subspace-name>/     # Specific Subspace\n│   │           ├── pnpm-lock.yaml   # Subspace dependency lock file\n│   │           ├── .pnpmfile.cjs    # PNPM hook script\n│   │           ├── common-versions.json  # Subspace version configuration\n│   │           ├── pnpm-config.json # PNPM configuration\n│   │           └── repo-state.json  # Subspace state hash value\n│   ├── scripts/                     # Common scripts\n│   └── temp/                        # Temporary files\n├── apps/                            # Application projects\n│   └── <app-name>/                  # 2 levels deep required\n├── libraries/                       # Library projects\n│   └── <lib-name>/                  # 2 levels deep required\n├── tools/                           # Tool projects\n│   └── <tool-name>/                 # 2 levels deep required\n├── rush.json                        # Rush main configuration file\n└── pnpm-lock.yaml                   # Root lock file (if not using subspaces)\n```\n\n**Important:** Projects must be exactly 2 levels deep (`projectFolderMinDepth: 2`, `projectFolderMaxDepth: 2`)\n\n## rush.json\n\n**Purpose:** Main Rush configuration file\n\n**Location:** Repository root\n\n### Basic Structure\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.x.x\",\n\n  // Package Manager Selection (choose one)\n  \"pnpmVersion\": \"8.x.x\",\n  // \"npmVersion\": \"8.x.x\",\n  // \"yarnVersion\": \"1.x.x\",\n\n  // Project Folder Depth\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n\n  // Node.js Version Requirement\n  \"nodeSupportedVersionRange\": \">=14.15.0\",\n\n  // Projects Array\n  \"projects\": []\n}\n```\n\n### Project Configuration\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-project\",     // npm package name\n      \"projectFolder\": \"libraries/my-project\",    // Path from repo root\n      \"shouldPublish\": true,                      // Should this be published?\n      \"decoupledLocalDependencies\": [],           // For cyclic dependencies\n      \"subspaceName\": \"my-subspace\",              // Optional: subspace assignment\n      \"reviewCategory\": \"production\"              // Optional: review category\n    }\n  ]\n}\n```\n\n**Project Fields:**\n- `packageName` - The npm package name (must match package.json)\n- `projectFolder` - Relative path from repository root\n- `shouldPublish` - Whether package should be published to npm\n- `decoupledLocalDependencies` - Array of local packages to exclude from link (for cyclic deps)\n- `subspaceName` - Which subspace this project belongs to\n- `reviewCategory` - Category for review purposes\n\n### Git Policy\n\n```json\n{\n  \"gitPolicy\": {\n    \"allowedBranchRegExps\": [\n      \"main\",\n      \"release/*\",\n      \"hotfix/*\"\n    ],\n    \"sampleEmail\": \"example@example.com\"\n  }\n}\n```\n\n## command-line.json\n\n**Purpose:** Define custom Rush commands\n\n**Location:** `common/config/rush/command-line.json`\n\n### Bulk Commands\n\nExecute separately for each project:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build all projects\",\n  \"description\": \"Builds all projects in dependency order\",\n  \"enableParallelism\": true,\n  \"ignoreMissingScript\": false,\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n**Bulk Command Fields:**\n- `commandKind` - Must be \"bulk\"\n- `name` - Command name\n- `summary` - Short description\n- `description` - Long description\n- `enableParallelism` - Allow parallel execution\n- `ignoreMissingScript` - Don't fail if project lacks this script\n- `safeForSimultaneousRushProcesses` - Can multiple Rush instances run this?\n\n### Global Commands\n\nExecute once for entire repository:\n\n```json\n{\n  \"commandKind\": \"global\",\n  \"name\": \"deploy\",\n  \"summary\": \"Deploy application\",\n  \"description\": \"Deploys the application to production\",\n  \"shellCommand\": \"node common/scripts/deploy.js\",\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n### Parameters\n\nSix parameter types supported:\n\n**Flag Parameter:**\n```json\n{\n  \"parameterKind\": \"flag\",\n  \"longName\": \"--production\",\n  \"shortName\": \"-p\",\n  \"description\": \"Production mode\",\n  \"required\": false\n}\n```\n\n**String Parameter:**\n```json\n{\n  \"parameterKind\": \"string\",\n  \"longName\": \"--environment\",\n  \"shortName\": \"-e\",\n  \"description\": \"Environment name\",\n  \"required\": false,\n  \"defaultValue\": \"development\"\n}\n```\n\n**String List Parameter:**\n```json\n{\n  \"parameterKind\": \"stringList\",\n  \"longName\": \"--tag\",\n  \"description\": \"Tags for the build\",\n  \"required\": false\n}\n```\n\n**Choice Parameter:**\n```json\n{\n  \"parameterKind\": \"choice\",\n  \"longName\": \"--locale\",\n  \"description\": \"Locale for the build\",\n  \"alternatives\": [\"en-us\", \"zh-cn\", \"ja-jp\"],\n  \"required\": false,\n  \"defaultValue\": \"en-us\"\n}\n```\n\n**Integer Parameter:**\n```json\n{\n  \"parameterKind\": \"integer\",\n  \"longName\": \"--timeout\",\n  \"description\": \"Timeout in milliseconds\",\n  \"required\": false\n}\n```\n\n**Integer List Parameter:**\n```json\n{\n  \"parameterKind\": \"integerList\",\n  \"longName\": \"--pr\",\n  \"description\": \"Pull request numbers\",\n  \"required\": false\n}\n```\n\n## rush-project.json\n\n**Purpose:** Project-specific Rush configuration\n\n**Location:** `<project>/config/rush-project.json`\n\n### Build Cache Configuration\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Name of the operation (matches package.json script)\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n## Example Complete Configuration\n\n### rush.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.109.0\",\n  \"pnpmVersion\": \"8.15.0\",\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n  \"nodeSupportedVersionRange\": \">=20.9.0 <21.0.0\",\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    },\n    {\n      \"packageName\": \"@my-scope/my-lib\",\n      \"projectFolder\": \"libraries/my-lib\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    }\n  ]\n}\n```\n\n### command-line.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json\",\n  \"commands\": [\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"build\",\n      \"summary\": \"Build projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"test\",\n      \"summary\": \"Test projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"global\",\n      \"name\": \"clean\",\n      \"summary\": \"Clean build outputs\",\n      \"shellCommand\": \"node common/scripts/clean.js\"\n    }\n  ],\n  \"parameters\": [\n    {\n      \"parameterKind\": \"flag\",\n      \"longName\": \"--production\",\n      \"shortName\": \"-p\",\n      \"description\": \"Production mode\"\n    }\n  ]\n}\n```\n\n### Project config/rush-project.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n","skills/rushstack-best-practices/references/subspace.md":"# Subspace Reference\n\n## What is Subspace?\n\nSubspace is a Rush feature that allows multiple PNPM lock files in a single Rush monorepo.\n\n### Benefits\n\n**Dependency Isolation:**\n- Different teams can use different dependency versions\n- Team A can use React 17 while Team B uses React 18\n- Reduce risk from dependency updates\n\n**Performance:**\n- Only affected subspaces update during `rush install`\n- Faster dependency operations\n- Smaller lock files to manage\n\n**Team Autonomy:**\n- Teams manage their own dependencies\n- Less coordination needed\n- Independent release cycles\n\n### When to Use Subspace\n\n**Consider using subspace when:**\n- Repository has 50+ projects\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Performance issues with dependency operations\n- Teams want autonomy for dependency choices\n\n**Avoid subspace when:**\n- Small monorepo (< 20 projects)\n- Single team or unified dependencies\n- Simplicity is preferred\n- Just starting with Rush\n\n## Subspace Configuration\n\n### Step 1: Enable Subspaces\n\n**File:** `common/config/rush/subspaces.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/subspaces.schema.json\",\n  \"subspacesEnabled\": true,\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n```\n\n**Fields:**\n- `subspacesEnabled` - Enable/disable subspace feature\n- `subspaceNames` - List of subspace names\n\n### Step 2: Assign Projects to Subspaces\n\n**File:** `rush.json`\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@team-a/app-1\",\n      \"projectFolder\": \"apps/team-a/app-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-a/lib-1\",\n      \"projectFolder\": \"libraries/team-a/lib-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-b/app-1\",\n      \"projectFolder\": \"apps/team-b/app-1\",\n      \"subspaceName\": \"team-b\"\n    },\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    }\n  ]\n}\n```\n\n**Important:** Each project must belong to exactly one subspace\n\n### Step 3: Subspace Configuration Files\n\nEach subspace has its own configuration directory:\n\n```\ncommon/config/subspaces/\n├── team-a/\n│   ├── pnpm-lock.yaml          # Subspace lock file\n│   ├── common-versions.json    # Version constraints\n│   ├── pnpm-config.json        # PNPM settings\n│   └── repo-state.json         # State hash\n├── team-b/\n│   ├── pnpm-lock.yaml\n│   ├── common-versions.json\n│   ├── pnpm-config.json\n│   └── repo-state.json\n└── shared/\n    ├── pnpm-lock.yaml\n    ├── common-versions.json\n    ├── pnpm-config.json\n    └── repo-state.json\n```\n\n### Subspace common-versions.json\n\n**File:** `common/config/subspaces/<subspace>/common-versions.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json\",\n  \"preferredVersions\": {\n    // Subspace-specific versions\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {}\n}\n```\n\n**Each subspace can have:**\n- Different preferred versions\n- Different implicit preferences\n- Different allowed alternatives\n\n## Subspace Workflows\n\n### Initial Setup\n\n```bash\n# 1. Create subspace configuration\nmkdir -p common/config/subspaces/team-a\n\n# 2. Enable subspaces in subspaces.json\n# Edit: common/config/rush/subspaces.json\n\n# 3. Assign projects in rush.json\n# Edit: rush.json - add subspaceName to projects\n\n# 4. Run update to generate lock files\nrush update\n```\n\n### Adding Projects to Subspace\n\n```bash\n# 1. Create project directory\nmkdir -p apps/team-a/new-app\n\n# 2. Add to rush.json\n{\n  \"packageName\": \"@team-a/new-app\",\n  \"projectFolder\": \"apps/team-a/new-app\",\n  \"subspaceName\": \"team-a\"\n}\n\n# 3. Run update\nrush update\n```\n\n### Updating Dependencies\n\n**Update specific subspace:**\n```bash\n# Only updates team-a subspace\nrush update --to @team-a/app-1\n```\n\n**Update all subspaces:**\n```bash\n# Updates all subspaces\nrush update\n```\n\n## Subspace Isolation\n\n### Dependency Isolation\n\nEach subspace has its own dependency tree:\n\n**team-a subspace:**\n```\nteam-a/app-1/\n└── node_modules/\n    ├── react@17.0.2\n    └── typescript@4.5.0\n```\n\n**team-b subspace:**\n```\nteam-b/app-1/\n└── node_modules/\n    ├── react@18.2.0\n    └── typescript@5.0.0\n```\n\n### Cross-Subspace Dependencies\n\nProjects can depend on projects in other subspaces:\n\n```json\n// team-a/app-1 depends on shared/utils\n{\n  \"dependencies\": {\n    \"@shared/utils\": \"^1.0.0\"\n  }\n}\n```\n\n**Rush handles:**\n- Workspace linking across subspaces\n- Build order across subspaces\n- Version compatibility\n\n### Shared Dependencies\n\n**Pattern:** Create a \"shared\" subspace for common libraries\n\n```json\n// subspaces.json\n{\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n\n// rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    },\n    {\n      \"packageName\": \"@team-a/app\",\n      \"projectFolder\": \"apps/team-a/app\",\n      \"subspaceName\": \"team-a\"\n    }\n  ]\n}\n```\n\n## Subspace Best Practices\n\n### 1. Organize by Team or Domain\n\n**Good:**\n```\nsubspaceNames: [\"platform\", \"backend\", \"frontend\", \"shared\"]\n```\n\n**Bad:**\n```\nsubspaceNames: [\"subspace1\", \"subspace2\", \"subspace3\"]\n```\n\n### 2. Use Shared Subspace for Common Code\n\n**Pattern:**\n```\n- team-a: Team A's apps and libs\n- team-b: Team B's apps and libs\n- shared: Common libraries used by both teams\n```\n\n### 3. Minimize Cross-Subspace Dependencies\n\n**Good:**\n```\nteam-a/app → team-a/lib → shared/utils\nteam-b/app → team-b/lib → shared/utils\n```\n\n**Avoid:**\n```\nteam-a/app → team-b/lib  # Creates coupling\n```\n\n### 4. Keep Subspace Sizes Balanced\n\n**Good:**\n```\nteam-a: 20 projects\nteam-b: 18 projects\nshared: 10 projects\n```\n\n**Bad:**\n```\nteam-a: 2 projects\nteam-b: 50 projects  # Imbalanced\n```\n\n## Subspace Troubleshooting\n\n### Lock File Conflicts\n\n**Symptom:** Subspace lock files out of sync\n\n**Solution:**\n```bash\n# Regenerate all lock files\nrush update --purge\n```\n\n### Cross-Subspace Build Issues\n\n**Symptom:** Projects build in wrong order\n\n**Solution:**\n```bash\n# Verify dependency graph\nrush list --json\n\n# Force rebuild across subspaces\nrush rebuild\n```\n\n### Version Conflicts Across Subspaces\n\n**Symptom:** Different subspaces require different versions\n\n**Solution:**\n```bash\n# Update specific subspace\nrush update --to @team-a/app-1\n\n# Or use allowedAlternativeVersions\n```\n\n## Subspace vs No Subspace\n\n### No Subspace (Default)\n\n**Structure:**\n```\ncommon/\n├── config/rush/\n└── temp/\npnpm-lock.yaml (single lock file)\nrush.json\n```\n\n**Pros:**\n- Simpler setup\n- Easier to understand\n- Single source of truth for versions\n\n**Cons:**\n- All projects share same dependency tree\n- Dependency updates affect all projects\n- Slower installs for large repos\n\n### With Subspace\n\n**Structure:**\n```\ncommon/\n├── config/\n│   ├── rush/\n│   └── subspaces/\n│       ├── team-a/\n│       │   └── pnpm-lock.yaml\n│       └── team-b/\n│           └── pnpm-lock.yaml\n└── temp/\nrush.json\n```\n\n**Pros:**\n- Independent dependency trees\n- Faster installs (only affected subspaces)\n- Team autonomy\n\n**Cons:**\n- More complex setup\n- More files to manage\n- Potential for duplication\n\n## Migration to Subspace\n\n### Step-by-Step Migration\n\n1. **Plan your subspaces:**\n   ```json\n   {\n     \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n   }\n   ```\n\n2. **Enable subspaces:**\n   ```bash\n   # Edit common/config/rush/subspaces.json\n   ```\n\n3. **Assign projects:**\n   ```bash\n   # Edit rush.json - add subspaceName to each project\n   ```\n\n4. **Generate lock files:**\n   ```bash\n   rush update\n   ```\n\n5. **Verify:**\n   ```bash\n   # Check lock files created\n   ls common/config/subspaces/*/pnpm-lock.yaml\n   ```\n\n6. **Commit changes:**\n   ```bash\n   git add .\n   git commit -m \"Enable Rush subspaces\"\n   ```\n","vscode-extensions/debug-certificate-manager-vscode-extension/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fdebug-certificate-manager-vscode-extension%2FREADME.md -->","vscode-extensions/playwright-local-browser-server-vscode-extension/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fplaywright-local-browser-server-vscode-extension%2FREADME.md -->","vscode-extensions/rush-vscode-command-webview/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Frush-vscode-command-webview%2FREADME.md -->","vscode-extensions/rush-vscode-extension/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Frush-vscode-extension%2FREADME.md -->","vscode-extensions/vscode-shared/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fvscode-shared%2FREADME.md -->"},"files":{".cursor/rules/rush.mdc":"---\ndescription:\nglobs:\nalwaysApply: true\n---\nYou are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness",".github/copilot-instructions.md":"You are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness\n","apps/heft/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"copy-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/CopyFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/copy-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"delete-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/DeleteFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/delete-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"node-service-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/NodeServicePlugin\",\n      \"parameterScope\": \"node-service\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes. This parameter is only available when running in watch mode.\"\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"run-script-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/RunScriptPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/run-script-options.schema.json\"\n    },\n    {\n      \"entryPoint\": \"./lib-commonjs/plugins/SetEnvironmentVariablesPlugin\",\n      \"pluginName\": \"set-environment-variables-plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/set-environment-variables-plugin.schema.json\"\n    }\n  ]\n}\n","build-tests/heft-example-lifecycle-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [\n    {\n      \"pluginName\": \"example-lifecycle-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","build-tests/heft-example-plugin-01/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-01\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","build-tests/heft-example-plugin-02/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-02\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","build-tests/heft-parameter-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"heft-parameter-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\",\n      \"parameterScope\": \"heft-parameter-plugin\",\n      \"parameters\": [\n        {\n          \"longName\": \"--custom-parameter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Test running a custom flag parameter\"\n        },\n        {\n          \"longName\": \"--custom-integer-parameter\",\n          \"parameterKind\": \"integer\",\n          \"description\": \"Test running a custom integer parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-integer-list-parameter\",\n          \"parameterKind\": \"integerList\",\n          \"description\": \"Test running a custom integer list parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-string-parameter\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"TEXT\",\n          \"description\": \"Test running a custom string parameter\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--custom-string-list-parameter\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"LIST_ITEM\",\n          \"description\": \"Test running a custom string list parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-parameter\",\n          \"parameterKind\": \"choice\",\n          \"alternatives\": [\n            {\n              \"name\": \"red\",\n              \"description\": \"The red choice\"\n            },\n            {\n              \"name\": \"blue\",\n              \"description\": \"The blue choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-list-parameter\",\n          \"parameterKind\": \"choiceList\",\n          \"alternatives\": [\n            {\n              \"name\": \"totodile\",\n              \"description\": \"The totodile choice\"\n            },\n            {\n              \"name\": \"jynx\",\n              \"description\": \"The jynx choice\"\n            },\n            {\n              \"name\": \"gudetama\",\n              \"description\": \"The gudetama choice\"\n            },\n            {\n              \"name\": \"impidimp\",\n              \"description\": \"The impidimp choice\"\n            },\n            {\n              \"name\": \"wobbuffet\",\n              \"description\": \"The wobbuffet choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice list parameter\"\n        }\n      ]\n    }\n  ]\n}\n","build-tests/rush-mcp-example-plugin/rush-mcp-plugin.json":"/**\n * Every plugin package must contain a \"rush-mcp-plugin.json\" manifest in the top-level folder\n * (next to package.json).\n */\n{\n  /**\n   * A name that uniquely identifies your plugin.  Generally this should be the same name as\n   * the NPM package.  If two NPM packages have the same pluginName, they cannot be loaded together.\n   */\n  \"pluginName\": \"rush-mcp-example-plugin\",\n\n  /**\n   * (OPTIONAL) Indicates that your plugin accepts a config file.  The MCP server will load this\n   * file and provide it to the plugin.\n   *\n   * The config file path will be `<rush-repo>/common/config/rush-mcp/<plugin-name>.json`.\n   */\n  \"configFileSchema\": \"./lib-commonjs/rush-mcp-example-plugin.schema.json\",\n\n  /**\n   * The entry point, whose default export should be a class that implements\n   */\n  \"entryPoint\": \"./lib-commonjs/index.js\"\n}\n","build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json":"{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n","build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/sharded-repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json":"{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n","common/config/rush-plugins/rush-serve-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-serve-plugin-options.schema.json\",\n  \"phasedCommands\": [\"start\"],\n  \"portParameterLongName\": \"--port\",\n  \"buildStatusWebSocketPath\": \"/ws\",\n  \"logServePath\": \"/logs\",\n  \"globalRouting\": [\n    {\n      \"workspaceRelativeFolder\": \"rush-plugins/rush-serve-plugin/lib-esm/dashboard\",\n      \"servePath\": \"/dashboard\",\n      \"immutable\": false\n    }\n  ]\n}\n","heft-plugins/heft-api-extractor-plugin/README.md":"# @rushstack/heft-api-extractor-plugin\n\nThis is a Heft plugin for running API Extractor.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md) - Find\nout what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-api-extractor-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"api-extractor-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ApiExtractorPlugin\"\n    }\n  ]\n}\n","heft-plugins/heft-dev-cert-plugin/README.md":"# @rushstack/heft-dev-cert-plugin\n\nThis is a Heft plugin to manage development certificates for local serve.\nAutomatically configures webpack-dev-server to use https in serve mode.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-dev-cert-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"trust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TrustDevCertificatePlugin\"\n    },\n    {\n      \"pluginName\": \"untrust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/UntrustDevCertificatePlugin\"\n    }\n  ]\n}\n","heft-plugins/heft-isolated-typescript-transpile-plugin/README.md":"# @rushstack/heft-isolated-typescript-transpile-plugin\n\nThis is a Heft plugin for using swc as an isolated module transpiler\nduring the \"build\" stage.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-isolated-typescript-transpile-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"swc-isolated-transpile-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SwcIsolatedTranspilePlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/swc-isolated-transpile-plugin.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-jest-plugin/README.md":"# @rushstack/heft-jest-plugin\n\nThis is a Heft plugin for running Jest.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-jest-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-jest-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"jest-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JestPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-jest-plugin.schema.json\",\n\n      \"parameterScope\": \"jest\",\n      \"parameters\": [\n        {\n          \"longName\": \"--config\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which Jest configuration file will be used to run Jest tests.  If not specified, it will default to \\\"config/jest.config.json\\\".  This corresponds to the \\\"--config\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--debug-heft-reporter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Normally Heft installs a custom Jest reporter so that test results are presented consistently with other task logging.  If you suspect a problem with the HeftJestReporter, specify \\\"--debug-heft-reporter\\\" to temporarily disable it so that you can compare with how Jest's default reporter would have presented it.  Include this output in your bug report.  Do not use \\\"--debug-heft-reporter\\\" in production.\"\n        },\n        {\n          \"longName\": \"--detect-open-handles\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Attempt to collect and print open handles preventing Jest from exiting cleanly.  This option has a significant performance penalty and should only be used for debugging.  This corresponds to the \\\"--detectOpenHandles\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--disable-code-coverage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Disable any configured code coverage.  If code coverage is not configured, this parameter has no effect.\"\n        },\n        {\n          \"longName\": \"--find-related-tests\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"SOURCE_FILE\",\n          \"description\": \"Find and run the tests that cover a source file that was passed in as an argument.  This corresponds to the \\\"--findRelatedTests\\\" parameter in Jest's documentation. This parameter is not compatible with watch mode.\"\n        },\n        {\n          \"longName\": \"--log-heap-usage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Logs the heap usage after every test. Useful to debug memory leaks. Use together with --expose-gc in node.\"\n        },\n        {\n          \"longName\": \"--max-workers\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"COUNT_OR_PERCENTAGE\",\n          \"description\": \"Use this parameter to control maximum number of worker processes tests are allowed to use.  This parameter is similar to the parameter noted in the Jest documentation, and can either be an integer representing the number of workers to spawn when running tests, or can be a string representing a percentage of the available CPUs on the machine to utilize. Example values: \\\"3\\\", \\\"25%%\\\"\"\n        },\n        {\n          \"longName\": \"--silent\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Prevent tests from printing messages through the console.  This corresponds to the \\\"--silent\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-name-pattern\",\n          \"shortName\": \"-t\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a name that matches a regular expression.  The REGEXP is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.  This corresponds to the \\\"--testNamePattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-ignore-patterns\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Avoid running tests with a source file path that matches one ore more regular expressions.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathIgnorePatterns\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-pattern\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a source file path that matches a regular expression.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathPattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-timeout-ms\",\n          \"parameterKind\": \"integer\",\n          \"argumentName\": \"TIMEOUT\",\n          \"description\": \"Change the default timeout for tests; if a test doesn't complete within this many milliseconds, it will fail.  Individual tests can override the default.  If unspecified, the default is normally 5000 ms.  This corresponds to the \\\"--testTimeout\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--update-snapshots\",\n          \"shortName\": \"-u\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Update Jest snapshots while running the tests.  This corresponds to the \\\"--updateSnapshots\\\" parameter in Jest.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-json-schema-typings-plugin/README.md":"# @rushstack/heft-json-schema-typings-plugin\n\nThis is a Heft plugin that generates TypeScript `.d.ts` typings from JSON Schema files\n(files matching `*.schema.json`). It uses the\n[json-schema-to-typescript](https://www.npmjs.com/package/json-schema-to-typescript) library\nto produce type declarations that can be imported alongside the schema at build time.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-json-schema-typings-plugin --dev\n   ```\n\n2. Load the plugin in your project's **heft.json** configuration:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"json-schema-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-json-schema-typings-plugin\",\n               \"options\": {\n                 // (Optional) Defaults shown below\n                 // \"srcFolder\": \"src\",\n                 // \"generatedTsFolders\": [\"temp/schemas-ts\"],\n                 // \"formatWithPrettier\": false\n               }\n             }\n           }\n         }\n       }\n     }\n   }\n   ```\n\n3. Place your `*.schema.json` files under the source folder (default: `src/`).\n   The plugin will generate a corresponding `.d.ts` file for each schema.\n\n## Plugin options\n\n| Option               | Type       | Default              | Description                                                                      |\n| -------------------- | ---------- | -------------------- | -------------------------------------------------------------------------------- |\n| `srcFolder`          | `string`   | `\"src\"`              | Source directory to scan for `*.schema.json` files.                              |\n| `generatedTsFolders` | `string[]` | `[\"temp/schemas-ts\"]`| Output directories for the generated `.d.ts` files.                             |\n| `formatWithPrettier` | `boolean`  | `false`              | When `true`, format generated typings with [prettier](https://prettier.io/). Requires `prettier` as an installed dependency. |\n\n## Vendor extension: `x-tsdoc-release-tag`\n\nThe plugin recognises a custom vendor extension property called **`x-tsdoc-release-tag`** in\nyour JSON Schema files. When present at the top level of a schema, its value (a\n[TSDoc release tag](https://tsdoc.org/pages/spec/tag_kinds/#release-tags) such as `@public`,\n`@beta`, `@alpha`, or `@internal`) is injected into JSDoc comments of every exported\ndeclaration in the generated `.d.ts` file.\n\nThis is useful when the generated types are re-exported from a package entry point that is\nprocessed by [API Extractor](https://api-extractor.com/), which uses release tags to\ndetermine the API surface visibility.\n\n### Example\n\n**my-config.schema.json**\n\n```json\n{\n  \"x-tsdoc-release-tag\": \"@public\",\n  \"title\": \"My Config\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" }\n  },\n  \"additionalProperties\": false\n}\n```\n\n**Generated output (my-config.schema.json.d.ts)**\n\n```ts\n/**\n * @public\n */\nexport interface MyConfig {\n  name?: string;\n}\n```\n\nThe `x-tsdoc-release-tag` property is stripped from the schema before type generation, so it\ndoes not affect the shape of the emitted types. The value must be a single lowercase word\nstarting with `@` (for example `@public` or `@beta`); invalid values cause a build error.\n\n> **Note:** `@rushstack/node-core-library`'s `JsonSchema` class accepts vendor extension\n> keywords matching the `x-<vendor>-<keyword>` pattern by default, so schema files containing\n> `x-tsdoc-release-tag` will validate without any additional configuration.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"json-schema-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JsonSchemaTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-json-schema-typings-plugin.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-lint-plugin/README.md":"# @rushstack/heft-lint-plugin\n\nThis is a Heft plugin to run ESLint or TSLint. Intended for use with @rushstack/heft-typescript-plugin.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-lint-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-lint-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"lint-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LintPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-lint-plugin.schema.json\",\n\n      \"parameterScope\": \"lint\",\n      \"parameters\": [\n        {\n          \"longName\": \"--fix\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Fix all encountered rule violations where the violated rule provides a fixer. When running in production mode, fixes will be disabled regardless of this parameter.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-localization-typings-plugin/README.md":"# @rushstack/heft-localization-typings-plugin\n\nHeft plugin for generating types for localization files.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-localization-typings-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"localization-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LocalizationTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-localization-typings-plugin.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-rspack-plugin/README.md":"# @rushstack/heft-rspack-plugin\n\nThis is a Heft plugin for using Rspack.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-rspack-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-rspack-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"rspack-plugin\",\n      \"entryPoint\": \"./lib-commonjs/RspackPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-rspack-plugin.schema.json\",\n\n      \"parameterScope\": \"rspack\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes using @rspack/dev-server.  This parameter is only available when running in watch mode.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-sass-load-themed-styles-plugin/README.md":"# @rushstack/heft-sass-load-themed-styles-plugin\n\nThis is a Heft plugin to augment SASS processing with functionality to replace load-themed-styles theme expressions of the form\n```\n[theme:<tokenName>, default:<default>]\n```\ne.g.\n```\n[theme:someColor, default:#fc0]\n```\n\nWith css variable references of the form:\n```css\nvar(--<tokenName>, <default>)\n```\ne.g.\n```css\nvar(--someColor, #fc0>)\n```\n\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-sass-load-themed-styles-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"sass-load-themed-styles-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SassLoadThemedStylesPlugin.js\"\n    }\n  ]\n}\n","heft-plugins/heft-sass-plugin/README.md":"# @rushstack/heft-sass-plugin\n\nA [Heft](https://heft.rushstack.io/) plugin that compiles SCSS/Sass files during the build phase. It uses [`sass-embedded`](https://www.npmjs.com/package/sass-embedded) under the hood and produces:\n\n- **TypeScript type definitions** (`.d.ts`) for CSS modules, giving you typed access to class names and `:export` values\n- **Compiled CSS files** (optional) in one or more output folders\n- **JavaScript shims** (optional) that re-export the CSS for consumption in CommonJS or ESM environments\n\n> If `sass-embedded` is not supported on your platform, you can substitute it with the [`sass`](https://www.npmjs.com/package/sass) package using an npm alias.\n\n## Links\n\n- [CHANGELOG.md](https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-sass-plugin/CHANGELOG.md) - Find out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n---\n\n## Setup\n\n### 1. Add the plugin to your project\n\nIn your project's `package.json`:\n\n```json\n{\n  \"devDependencies\": {\n    \"@rushstack/heft\": \"...\",\n    \"@rushstack/heft-sass-plugin\": \"...\"\n  }\n}\n```\n\n### 2. Register the plugin in `config/heft.json`\n\nThe `sass` task must run before `typescript` so that the generated `.d.ts` files are available when TypeScript compiles your project.\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n  \"phasesByName\": {\n    \"build\": {\n      \"tasksByName\": {\n        \"sass\": {\n          \"taskPlugin\": {\n            \"pluginPackage\": \"@rushstack/heft-sass-plugin\"\n          }\n        },\n\n        \"typescript\": {\n          \"taskDependencies\": [\"sass\"],\n          \"taskPlugin\": {\n            \"pluginPackage\": \"@rushstack/heft-typescript-plugin\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n### 3. Create `config/sass.json`\n\nA minimal config uses all defaults:\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json\"\n}\n```\n\nA more complete setup that emits CSS and shims for both ESM and CommonJS:\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json\",\n  \"cssOutputFolders\": [\n    { \"folder\": \"lib-esm\", \"shimModuleFormat\": \"esnext\" },\n    { \"folder\": \"lib-commonjs\", \"shimModuleFormat\": \"commonjs\" }\n  ],\n  \"fileExtensions\": [\".module.scss\", \".module.sass\"],\n  \"nonModuleFileExtensions\": [\".global.scss\", \".global.sass\"],\n  \"silenceDeprecations\": [\"mixed-decls\", \"import\", \"global-builtin\", \"color-functions\"]\n}\n```\n\n### 4. Add generated files to `tsconfig.json`\n\nPoint TypeScript at the generated type definitions by including the `generatedTsFolder` in your `tsconfig.json`:\n\n```json\n{\n  \"compilerOptions\": {\n    \"paths\": {}\n  },\n  \"include\": [\"src\", \"temp/sass-ts\"]\n}\n```\n\n## CSS Modules vs. global stylesheets\n\nThe plugin distinguishes between two kinds of files based on their extension:\n\n**CSS modules** (extensions listed in `fileExtensions`, default: `.sass`, `.scss`, `.css`):\n- Processed with [`postcss-modules`](https://www.npmjs.com/package/postcss-modules)\n- Class names and `:export` values become properties in a generated TypeScript interface\n- The generated `.d.ts` exports a typed `styles` object as its default export\n\n**Global stylesheets** (extensions listed in `nonModuleFileExtensions`, default: `.global.sass`, `.global.scss`, `.global.css`):\n- Compiled to plain CSS with no module scoping\n- The generated `.d.ts` is a side-effect-only module (`export {}`)\n- Useful for resets, themes, and base styles\n\n**Partials** (filenames starting with `_`):\n- Never compiled to output files; they are only meant to be `@use`d or `@forward`ed by other files\n\n### Example: CSS module\n\n```scss\n// src/Button.module.scss\n.root {\n  background: blue;\n}\n.label {\n  font-size: 14px;\n}\n:export {\n  brandColor: #0078d4;\n}\n```\n\nGenerated `temp/sass-ts/Button.module.scss.d.ts`:\n\n```typescript\ninterface IStyles {\n  root: string;\n  label: string;\n  brandColor: string;\n}\ndeclare const styles: IStyles;\nexport default styles;\n```\n\nIn your TypeScript source:\n\n```typescript\nimport styles from './Button.module.scss';\n// styles.root, styles.label, styles.brandColor are all typed strings\n```\n\n## Configuration reference\n\nAll options are set in `config/sass.json`. Every option is optional.\n\n| Option | Default | Description |\n|---|---|---|\n| `srcFolder` | `\"src/\"` | Root directory that is scanned for SCSS files |\n| `generatedTsFolder` | `\"temp/sass-ts/\"` | Output directory for generated `.d.ts` files |\n| `secondaryGeneratedTsFolders` | `[]` | Additional directories to also write `.d.ts` files to (e.g. `\"lib-esm\"` when publishing typings alongside compiled output) |\n| `exportAsDefault` | `true` | When `true`, wraps exports in a typed default interface. When `false`, generates individual named exports (`export const className: string`). Note: `false` is incompatible with `cssOutputFolders`. |\n| `cssOutputFolders` | _(none)_ | Folders where compiled `.css` files are written. Each entry is either a plain folder path string, or an object with `folder` and optional `shimModuleFormat` (see below). |\n| `fileExtensions` | `[\".sass\", \".scss\", \".css\"]` | File extensions to treat as CSS modules |\n| `nonModuleFileExtensions` | `[\".global.sass\", \".global.scss\", \".global.css\"]` | File extensions to treat as global (non-module) stylesheets |\n| `excludeFiles` | `[]` | Paths relative to `srcFolder` to skip entirely |\n| `loadPaths` | `[]` | Folders, relative to the project folder, to search when a bare specifier such as `@use \"theme/colors\"` cannot be resolved relative to the importing file. Analogous to the Sass compiler's `loadPaths` option. |\n| `resolveBareSpecifiersAsPackages` | `false` | When `true`, a bare specifier that resolves neither relative to the importing file nor from `loadPaths` is additionally resolved as a package via Node module resolution. See [Bare specifiers](#bare-specifiers). |\n| `doNotTrimOriginalFileExtension` | `false` | When `true`, preserves the original extension in the CSS output filename. E.g. `styles.scss` → `styles.scss.css` instead of `styles.css`. Useful when downstream tooling needs to distinguish the source format. |\n| `preserveIcssExports` | `false` | When `true`, keeps the `:export { }` block in the emitted CSS. This is needed when a webpack loader (e.g. `css-loader`'s `icssParser`) must extract `:export` values at bundle time. Has no effect on the generated `.d.ts`. |\n| `silenceDeprecations` | `[]` | List of Sass deprecation codes to suppress (e.g. `\"mixed-decls\"`, `\"import\"`, `\"global-builtin\"`, `\"color-functions\"`) |\n| `ignoreDeprecationsInDependencies` | `false` | Suppresses deprecation warnings that originate from `node_modules` dependencies |\n| `extends` | _(none)_ | Path to another `sass.json` config file to inherit settings from |\n\n### CSS output folders and JS shims\n\nEach entry in `cssOutputFolders` can be a plain string (folder path only) or an object:\n\n```json\n{\n  \"folder\": \"lib-esm\",\n  \"shimModuleFormat\": \"esnext\"\n}\n```\n\nWhen `shimModuleFormat` is set, the plugin writes a `.js` shim alongside each `.css` file. For a CSS module, the shim re-exports the CSS:\n\n```js\n// ESM shim (shimModuleFormat: \"esnext\")\nexport { default } from \"./Button.module.css\";\n\n// CommonJS shim (shimModuleFormat: \"commonjs\")\nmodule.exports = require(\"./Button.module.css\");\nmodule.exports.default = module.exports;\n```\n\nFor a global stylesheet, the shim is a side-effect-only import:\n\n```js\n// ESM shim\nimport \"./global.global.css\";\nexport {};\n\n// CommonJS shim\nrequire(\"./global.global.css\");\n```\n\n## Sass import resolution\n\nA load specifier is resolved in this order:\n\n1. Relative to the importing file.\n2. Each folder in the `loadPaths` option, in order (bare specifiers only).\n3. As a package, via Node module resolution — only when `resolveBareSpecifiersAsPackages` is enabled\n   (bare specifiers only).\n\nThe plugin supports the modern `pkg:` protocol for importing from npm packages:\n\n```scss\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nThe legacy `~` prefix is automatically converted to `pkg:` for compatibility with older stylesheets:\n\n```scss\n// These are equivalent:\n@use \"~@fluentui/react/dist/sass/variables\";\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nThis also applies to specifiers that are not part of an `@use`/`@import`/`@forward` rule, such as\n`@include meta.load-css(\"~@fluentui/react/dist/sass/variables\")`.\n\n### Bare specifiers\n\nA \"bare\" specifier is one that does not start with `.`, `/`, or a URL scheme, for example\n`@use \"@fluentui/react/dist/sass/variables\"`.\n\nPer the Sass specification the target of `@use`, `@import` and `@forward` is a **URL**, so a bare\nspecifier is a *relative path*, not a reference to a package. That is how this plugin treats it by\ndefault, and `pkg:` is the supported way to reference a package:\n\n```scss\n// Preferred: unambiguous, and always enabled\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nSome other Sass toolchains (the Dart Sass CLI's `--load-path`, `sass-loader`, Vite, the Angular CLI)\ninstead resolve bare specifiers from `node_modules`. Stylesheets authored for those toolchains — most\ncommonly inside third-party packages, where a consuming project cannot rewrite the import — depend on\nthat behavior. Two opt-in options support them:\n\n```json\n{\n  \"loadPaths\": [\"src/styles\"],\n  \"resolveBareSpecifiersAsPackages\": true\n}\n```\n\n`loadPaths` resolves a bare specifier against a list of folders. `resolveBareSpecifiersAsPackages`\nadditionally resolves it as a package using Node module resolution, which honors the package's\n`exports` field. Both apply only after relative resolution has failed, so enabling them cannot change\nthe meaning of a specifier that already resolves.\n\n## Incremental builds\n\nThe plugin tracks inter-file dependencies (via `@use`, `@forward`, and `@import`) and only recompiles files that changed or whose dependencies changed. This makes `heft build --watch` fast even in large projects.\n\n## Plugin accessor API\n\nOther Heft plugins can hook into the Sass compilation pipeline via the `ISassPluginAccessor` interface:\n\n```typescript\nimport { ISassPluginAccessor } from '@rushstack/heft-sass-plugin';\n\n// In your plugin's apply() method:\nconst sassAccessor = session.requestAccessToPlugin<ISassPluginAccessor>(\n  '@rushstack/heft-sass-plugin',\n  'sass-plugin',\n  '@rushstack/heft-sass-plugin'\n);\n\nsassAccessor.hooks.postProcessCss.tapPromise('my-plugin', async (css, filePath) => {\n  // Transform CSS after Sass compilation but before it is written to cssOutputFolders\n  return transformedCss;\n});\n```\n\nThe `postProcessCss` hook is an `AsyncSeriesWaterfallHook` that passes the compiled CSS string and source file path through each tap in sequence.\n","heft-plugins/heft-sass-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"sass-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SassPlugin.js\"\n    }\n  ]\n}\n","heft-plugins/heft-serverless-stack-plugin/README.md":"# @rushstack/heft-serverless-stack-plugin\n\nThis is a Heft plugin for building apps using the [Serverless Stack (SST)](https://serverless-stack.com/) framework.\nWith this approach, the [SST toolchain](https://docs.serverless-stack.com/packages/cli) is only used for\nsynthesizing CloudFormation stacks and deploying the app, and Heft takes over the role of compiling, linting,\ntesting your TypeScript project.\n\nThe plugin accepts two command-line parameters:\n\n- `--sst` can be appended to `heft build` or `heft start`, causing the corresponding SST operation to be invoked\n\n- `--sst-stage STAGE_NAME` allows you to customize the stage.  It is equivalent to the `--stage` parameter\n  for the SST command-line tool.\n\n\nThe plugin has no effect without the `--sst` parameter.  When the parameter is provided:\n\n- `heft build --sst` will behave similar to `sst build`, which synthesizes CloudFormation stacks\n  in the `build/cdk.out/` directory.  See [this documentation](https://docs.serverless-stack.com/packages/cli#build)\n  for details.  Heft's `--watch` mode is also supported.\n\n- `heft start --sst` will behave similar to `sst start`, which deploys a\n  [stub lambda](https://docs.serverless-stack.com/live-lambda-development#sst-start) to AWS\n  and then launches the WebSocket client locally for debugging.  See\n  [this documentation](https://docs.serverless-stack.com/packages/cli#start) for details.\n\n\n> Note that `heft build --sst` currently requires AWS credentials, which limits the ability to perform this\n> validation in a monorepo environment where we can't assume that every developer works on AWS.\n> Issue [serverless-stack#1537](https://github.com/serverless-stack/serverless-stack/issues/1537)\n> is tracking a possible improvement.\n\n","heft-plugins/heft-serverless-stack-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"serverless-stack-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ServerlessStackPlugin\",\n\n      \"parameterScope\": \"serverless-stack\",\n      \"parameters\": [\n        {\n          \"longName\": \"--sst\",\n          \"description\": \"(EXPERIMENTAL) Invokes the SST postprocessing. Requires AWS credentials.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--sst-stage\",\n          \"argumentName\": \"STAGE_NAME\",\n          \"description\": \"Specifies the Serverless Stack stage; equivalent to to the \\\"--stage\\\" parameter from the \\\"sst\\\" CLI\",\n          \"parameterKind\": \"string\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-static-asset-typings-plugin/README.md":"# @rushstack/heft-static-asset-typings-plugin\n\nThis Heft plugin generates TypeScript `.d.ts` typings for static asset files, enabling type-safe\n`import` statements for non-TypeScript files. It provides two task plugins:\n\n- **`resource-assets-plugin`** - Generates `.d.ts` typings for _resource_ files such as images (`.png`,\n  `.jpg`, `.svg`, etc.) and fonts. These are opaque binary blobs whose content is not meaningful to\n  JavaScript; the generated typing simply exports a default `string` representing the asset URL\n  (e.g. as resolved by a bundler's asset loader).\n\n- **`source-assets-plugin`** - Generates `.d.ts` typings _and_ JavaScript module output for _source_\n  files (`.html`, `.css`, `.txt`, `.md`, etc.) whose textual content is consumed at runtime. The\n  generated JS modules read the file and re-export its content as a default `string`, making these\n  assets importable as ES modules.\n\nThe terminology follows the [webpack convention](https://webpack.js.org/guides/asset-modules/)\nwhere _resource_ assets are emitted as separate files referenced by URL, while _source_ assets are\ninlined as strings.\n\nBoth plugins support incremental and watch-mode builds.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-static-asset-typings-plugin --dev\n   ```\n\n2. Load the appropriate plugin(s) in your project's **config/heft.json**:\n\n   ### Resource assets (images, fonts, etc.)\n\n   **Inline configuration** - specify options directly in heft.json:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"image-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"resource-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"inline\",\n                 \"config\": {\n                   \"fileExtensions\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".avif\"],\n                   \"generatedTsFolders\": [\"temp/image-typings\"]\n                 }\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"image-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   **File configuration** - load settings from a riggable config file:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"image-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"resource-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"file\",\n                 \"configFileName\": \"resource-assets.json\"\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"image-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   And create a **config/resource-assets.json** file (which can be provided by a rig):\n\n   ```jsonc\n   {\n     \"fileExtensions\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".avif\"],\n     \"generatedTsFolders\": [\"temp/image-typings\"]\n   }\n   ```\n\n   ### Source assets\n\n   **Inline configuration:**\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"text-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"source-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"inline\",\n                 \"config\": {\n                   \"fileExtensions\": [\".html\"],\n                   \"cjsOutputFolders\": [\"lib-commonjs\"],\n                   \"esmOutputFolders\": [\"lib-esm\"],\n                   \"generatedTsFolders\": [\"temp/text-typings\"]\n                 }\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"text-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   **File configuration:**\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"text-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"source-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"file\",\n                 \"configFileName\": \"source-assets.json\"\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"text-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   And create a **config/source-assets.json** file (which can be provided by a rig):\n\n   ```jsonc\n   {\n     \"fileExtensions\": [\".html\"],\n     \"cjsOutputFolders\": [\"lib-commonjs\"],\n     \"esmOutputFolders\": [\"lib-esm\"],\n     \"generatedTsFolders\": [\"temp/text-typings\"]\n   }\n   ```\n\n3. Add the generated typings folder to your **tsconfig.json** `rootDirs` so that\n   TypeScript can resolve the declarations:\n\n   ```jsonc\n   {\n     \"compilerOptions\": {\n       \"rootDirs\": [\"src\", \"temp/image-typings\"]\n     }\n   }\n   ```\n\n## Plugin options\n\nBoth plugins support two configuration modes via the `configType` option:\n\n### Inline mode (`configType: \"inline\"`)\n\nProvide configuration directly in heft.json under `options.config`:\n\n#### `resource-assets-plugin` inline config\n\n| Option              | Type       | Default                  | Description                                     |\n| ------------------- | ---------- | ------------------------ | ----------------------------------------------- |\n| `fileExtensions`    | `string[]` | -                        | **(required)** File extensions to generate typings for. |\n| `generatedTsFolders`| `string[]` | `[\"temp/static-asset-ts\"]` | Folders where generated `.d.ts` files are written. The first entry should be listed in `rootDirs` so TypeScript can resolve the asset imports during type-checking. Additional entries are typically your project's published typings folder(s). |\n| `sourceFolderPath`  | `string`   | `\"src\"`                  | Source folder to scan for asset files.           |\n\n#### `source-assets-plugin` inline config\n\nIncludes all the above, plus:\n\n| Option              | Type       | Default                  | Description                                          |\n| ------------------- | ---------- | ------------------------ | ---------------------------------------------------- |\n| `cjsOutputFolders`  | `string[]` | -                        | **(required)** Output folders for generated CommonJS `.js` modules. |\n| `esmOutputFolders`   | `string[]` | `[]`                    | Output folders for generated ESM `.js` modules.      |\n\n### File mode (`configType: \"file\"`)\n\nLoad configuration from a riggable JSON config file in the project's `config/` folder:\n\n| Option           | Type     | Description                                                            |\n| ---------------- | -------- | ---------------------------------------------------------------------- |\n| `configFileName` | `string` | **(required)** Name of the JSON config file in the `config/` folder.   |\n\nThe config file supports the same properties as inline mode (see tables above). Config files\ncan be provided by a rig, making file mode ideal for shared build configurations.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-static-asset-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-static-asset-typings-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"resource-assets-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ResourceAssetsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/resource-assets-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"source-assets-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SourceAssetsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/source-assets-options.schema.json\"\n    }\n  ]\n}\n","heft-plugins/heft-storybook-plugin/README.md":"# @rushstack/heft-storybook-plugin\n\nThis is a Heft plugin for using the [Storybook](https://storybook.js.org/) tool for developing and testing\nUI components.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-storybook-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-storybook-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"storybook-plugin\",\n      \"entryPoint\": \"./lib-commonjs/StorybookPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/storybook.schema.json\",\n\n      \"parameterScope\": \"storybook\",\n      \"parameters\": [\n        {\n          \"longName\": \"--storybook\",\n          \"description\": \"(EXPERIMENTAL) Used by the \\\"@rushstack/heft-storybook-plugin\\\" package to launch Storybook.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--storybook-test\",\n          \"description\": \"Executes a stripped down build-storybook for testing purposes.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--docs\",\n          \"description\": \"Execute storybook in docs mode.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--no-open\",\n          \"description\": \"Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--port\",\n          \"description\": \"Pass --port to the storybook CLI to bind the dev server to a specific port in serve mode.\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"PORT\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-typescript-plugin/README.md":"# @rushstack/heft-typescript-plugin\n\nThis is a Heft plugin for compiling TypeScript.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-typescript-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-typescript-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"typescript-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TypeScriptPlugin\"\n    }\n  ]\n}\n","heft-plugins/heft-vscode-extension-plugin/README.md":"# @rushstack/heft-vscode-extension-plugin\n\nThis is a Heft plugin for packaging Visual Studio Code extensions using the `vsce` tool.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-vscode-extension-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"vscode-extension-package-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionPackagePlugin.js\",\n      \"parameterScope\": \"package\"\n    },\n    {\n      \"pluginName\": \"vscode-extension-verify-signature-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionVerifySignaturePlugin.js\",\n      \"parameterScope\": \"verify-signature\",\n      \"parameters\": [\n        {\n          \"longName\": \"--vsix-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which VSIX file will be used for verifying signature.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--manifest-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which manifest file will be used for verifying signature.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--signature-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which signature file will be used for verifying signature.\",\n          \"required\": true\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"vscode-extension-publish-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionPublishPlugin.js\",\n      \"parameterScope\": \"publish-vsix\",\n      \"parameters\": [\n        {\n          \"longName\": \"--vsix-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which VSIX file will be used for publishing.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--manifest-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which manifest file will be used for publishing.\",\n          \"required\": false\n        },\n        {\n          \"longName\": \"--signature-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which signature file will be used for publishing.\",\n          \"required\": false\n        },\n        {\n          \"longName\": \"--publish-unsigned\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Use this parameter to control whether to publish unsigned.\",\n          \"required\": false\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-webpack4-plugin/README.md":"# @rushstack/heft-webpack4-plugin\n\nThis is a Heft plugin for using Webpack 4.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-webpack4-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","heft-plugins/heft-webpack4-plugin/heft-plugin.json":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"webpack4-plugin\",\n      \"entryPoint\": \"./lib-commonjs/Webpack4Plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-webpack4-plugin.schema.json\",\n\n      \"parameterScope\": \"webpack4\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes using webpack-dev-server.  This parameter is only available when running in watch mode.\"\n        }\n      ]\n    }\n  ]\n}\n","heft-plugins/heft-webpack5-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=heft-plugins%2Fheft-webpack5-plugin%2FREADME.md -->","heft-plugins/heft-webpack5-plugin/heft-plugin.json":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=heft-plugins%2Fheft-webpack5-plugin%2Fheft-plugin.json -->","rush-plugins/rush-amazon-s3-build-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-amazon-s3-build-cache-plugin%2FREADME.md -->","rush-plugins/rush-azure-storage-build-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-azure-storage-build-cache-plugin%2FREADME.md -->","rush-plugins/rush-bridge-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-bridge-cache-plugin%2FREADME.md -->","rush-plugins/rush-buildxl-graph-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-buildxl-graph-plugin%2FREADME.md -->","rush-plugins/rush-http-build-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-http-build-cache-plugin%2FREADME.md -->","rush-plugins/rush-litewatch-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-litewatch-plugin%2FREADME.md -->","rush-plugins/rush-mcp-docs-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-mcp-docs-plugin%2FREADME.md -->","rush-plugins/rush-mcp-docs-plugin/rush-mcp-plugin.json":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-mcp-docs-plugin%2Frush-mcp-plugin.json -->","rush-plugins/rush-published-versions-json-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-published-versions-json-plugin%2FREADME.md -->","rush-plugins/rush-redis-cobuild-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-redis-cobuild-plugin%2FREADME.md -->","rush-plugins/rush-resolver-cache-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-resolver-cache-plugin%2FREADME.md -->","rush-plugins/rush-serve-plugin/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-serve-plugin%2FREADME.md -->","skills/rushstack-best-practices/CHANGELOG.md":"# Change Log - Rush Stack Skills\n\nThis log was last generated on Tue, 11 Feb 2026 00:00:00 GMT and should not be manually modified.\n\n## 1.0.0\nTue, 11 Feb 2026 00:00:00 GMT\n\n### Minor changes\n\n- Initial release of Rush Stack skills collection\n- `rushstack-best-practices` skill providing guidance for:\n  - Configuring Rush in a monorepo\n  - Common configuration patterns\n  - Package management best practices\n  - Build and toolchain recommendations\n\n","skills/rushstack-best-practices/SKILL.md":"---\nname: rushstack-best-practices\ndescription: Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.\nlicense: MIT\nmetadata:\n  author: rushstack\n  version: \"1.0.0\"\n---\n\n# Rushstack Best Practices\n\nThis skill provides essential best practices for working with Rush monorepos. Following these guidelines ensures efficient dependency management, optimal build performance, and proper command usage.\n\n## Important Guidelines\n\n**When encountering unclear issues or questions:**\n\n1. **Never make assumptions** - If unsure about Rush behavior, configuration, or commands\n2. **Search official resources first** - Check documentation and existing issues before guessing\n3. **Provide accurate information** - Base responses on verified sources, not assumptions\n4. **Ask for clarification** - When the problem description is ambiguous or incomplete\n\n## Core Principles\n\n1. **Always use Rush commands** - Avoid npm/pnpm/yarn directly in a Rush monorepo\n2. **Use rushx for single projects** - Like npm run, but Rush-aware\n3. **rush install vs update** - install for CI, update after changes\n4. **rush build vs rebuild** - build for incremental, rebuild for clean\n5. **Projects at 2 levels** - Standard: apps/, libraries/, tools/\n6. **Selection flags reduce scope** - Use --to, --from, --impacted-by\n7. **Build cache is automatic** - Configure output folders to enable\n8. **Subspace for large repos** - Isolate dependencies when needed\n\n## Project Selection Best Practices\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. Use these selection flags to improve efficiency:\n\n### --to <PROJECT>\nSelect specified project and all its dependencies.\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project  # If project name is unique\nrush build --to .            # Use current directory's project\n```\n\n### --to-except <PROJECT>\nSelect all dependencies of specified project, but not the project itself.\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\nSelect specified project and all its downstream dependencies.\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\nSelect projects that might be affected by specified project changes, excluding dependencies.\n- Quick test of project change impacts\n- Use when dependency status is already correct\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\nSimilar to `--impacted-by`, but excludes specified project itself.\n- Project itself has been manually built\n- Only need to test downstream impacts\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\nOnly select specified project, completely ignore dependency relationships.\n- Dependency status is known to be correct\n- Combine with other selection parameters\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n\n## Command Usage Guidelines\n\n### Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. **`rush` command** - Execute operations affecting the entire repository or multiple projects\n   - Strict parameter validation and documentation\n   - Support for global and batch commands\n   - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing\n\n2. **`rushx` command** - Execute specific scripts for a single project\n   - Similar to `npm run` or `pnpm run`\n   - Uses Rush version selector for toolchain consistency\n   - Prepares shell environment based on Rush configuration\n   - Use cases: Running project-specific build scripts, tests, dev servers\n\n3. **`rush-pnpm` command** - Replace direct use of pnpm in Rush repository\n   - Sets correct PNPM workspace context\n   - Supports Rush-specific enhancements\n   - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n### Install vs Update\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush update` | Updates shrinkwrap, installs new dependencies | After cloning, after git pull, after modifying package.json |\n| `rush install` | Read-only install from existing shrinkwrap | CI/CD pipelines, ensuring version consistency |\n\n### Build vs Rebuild\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush build` | Incremental build, only changed projects | Daily development, quick validation |\n| `rush rebuild` | Clean build all projects | Complete rebuild needed, investigating issues |\n\n## Dependency Management\n\n### Package Manager Selection\nChoose in `rush.json`:\n```json\n{\n  \"pnpmVersion\": \"8.x.x\"     // Preferred - efficient, strict\n  // \"npmVersion\": \"8.x.x\"   // Alternative\n  // \"yarnVersion\": \"1.x.x\"  // Alternative\n}\n```\n\n### Version Constraints\nConfigure in `common/config/subspaces/<subspace>/common-versions.json`:\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n### Adding/Removing Dependencies\nAlways use Rush commands, not npm/pnpm directly:\n```bash\nrush add -p lodash --dev      # Add dev dependency\nrush add -p react --exact     # Add exact version\nrush remove -p lodash         # Remove dependency\n```\n\n## Build Cache Configuration\n\nConfigure in `<project>/config/rush-project.json`:\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\"]\n    }\n  ]\n}\n```\n\n**Cache Behavior:**\n- Cache stored in `common/temp/build-cache`\n- Invalidated by: source changes, dependency changes, env vars, command params\n- Parallel builds supported via `enableParallelism`\n\n## Troubleshooting\n\n### Dependency Issues\n- Avoid `npm`, `pnpm`, `yarn` - use Rush commands\n- Run `rush purge` to clean environment\n- Run `rush update --recheck` to force dependency check\n\n### Build Issues\n- Use `rush rebuild` to skip cache\n- Check `rushx build` output for specific errors\n- Use `--verbose` for detailed logs\n\n### Performance Issues\n- Use selection flags (`--to`, `--from`, etc.) to reduce scope\n- Enable build cache in rush-project.json\n- Consider subspace for very large monorepos\n\n## Subspace for Large Monorepos\n\n**What is Subspace:**\n- Allows multiple PNPM lock files in one Rush monorepo\n- Enables independent dependency management per team/project group\n- Reduces risk from dependency updates\n- Improves install/update performance\n\n**When to Use:**\n- Large monorepos (50+ projects)\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Need for faster dependency operations\n\n## Official Resources\n\n### Documentation & References\n\n**Official Websites:**\n- [RushStack.io](https://rushstack.io/) - Main documentation site\n- [Rush.js.io](https://rushjs.io/) - Rush build orchestrator documentation\n- [Heft.rushstack.io](https://heft.rushstack.io/) - Heft build tool documentation\n- [API Extractor](https://api-extractor.com/) - API documentation and rollups\n\n**Search Existing Issues:**\n- Before creating new issues, search [rush-stack-builds issues](https://github.com/microsoft/rushstack/issues)\n\n### When to Search vs. Ask\n\n**Search these resources first when:**\n- Encountering error messages\n- Unsure about configuration options\n- Looking for examples or tutorials\n- Need to understand Rush behavior\n\n**Ask the user for clarification when:**\n- The specific use case is unclear\n- Multiple approaches are possible\n- Context is missing to provide accurate guidance\n- The issue might be environment-specific\n\n## Detailed References\n\nFor expanded information on specific domains, see:\n- `references/core-commands.md` - Detailed command reference\n- `references/project-configuration.md` - Configuration file specifications\n- `references/dependency-management.md` - Advanced dependency patterns\n- `references/build-system.md` - Build optimization and caching\n- `references/subspace.md` - Subspace setup and usage\n","skills/rushstack-best-practices/references/build-system.md":"# Build System Reference\n\n## Build vs Rebuild\n\n### rush build (Incremental Build)\n\n**Purpose:** Build only changed projects and dependencies\n\n**Behavior:**\n- Analyzes project dependency graph\n- Builds only projects that changed\n- Builds downstream dependents\n- Uses build cache when available\n- Supports parallel execution\n\n**Use Cases:**\n- Daily development\n- Quick iteration\n- Testing changes\n\n**Examples:**\n```bash\n# Build all changed projects\nrush build\n\n# Build specific project and dependencies\nrush build --to @my-scope/my-app\n\n# Build project and downstream dependents\nrush build --from @my-scope/my-lib\n\n# Parallel build (default for bulk commands)\nrush build --parallel\n```\n\n### rush rebuild (Clean Build)\n\n**Purpose:** Complete clean build of all projects\n\n**Behavior:**\n- Cleans previous build artifacts\n- Builds all projects (even unchanged)\n- Skips build cache\n- Takes longer than incremental build\n\n**Use Cases:**\n- After major dependency updates\n- When investigating build issues\n- Before releases\n- Complete validation\n\n**Examples:**\n```bash\n# Rebuild everything\nrush rebuild\n\n# Rebuild specific project and dependencies\nrush rebuild --to @my-scope/my-app\n```\n\n## Build Selection Flags\n\n### Flag Comparison\n\n| Flag | Selects | Dependencies Built | Dependents Built | Use Case |\n|------|---------|-------------------|------------------|----------|\n| `--to <proj>` | Project + dependencies | Yes | No | Build with full chain |\n| `--to-except <proj>` | Dependencies only | Yes | No | Pre-build dependencies |\n| `--from <proj>` | Project + dependents | No | Yes | Test downstream impact |\n| `--impacted-by <proj>` | Affected projects | No | Yes (only impacted) | Quick validation |\n| `--impacted-by-except <proj>` | Dependents only | No | Yes (only impacted) | Skip built project |\n| `--only <proj>` | Just the project | No | No | When deps are good |\n\n### --to (Project + Dependencies)\n\nBuild project and all dependencies recursively:\n\n```bash\nrush build --to @my-scope/my-app\n```\n\n**Use When:**\n- Building an application for testing\n- Need complete dependency chain\n- Publishing a package\n\n**Dependency Graph Example:**\n```\nmy-app\n├── ui-lib\n│   └── utils\n└── api-lib\n    └── utils\n\nrush build --to my-app builds: utils, ui-lib, api-lib, my-app\n```\n\n### --to-except (Dependencies Only)\n\nBuild all dependencies, but not the project itself:\n\n```bash\nrush build --to-except @my-scope/my-app\n```\n\n**Use When:**\n- Pre-building dependencies\n- Project will be built separately\n- Validating dependency chain\n\n### --from (Project + Dependents)\n\nBuild project and all downstream dependents:\n\n```bash\nrush build --from @my-scope/utils\n```\n\n**Use When:**\n- After library changes\n- Testing impact on dependents\n- Ensuring downstream compatibility\n\n**Dependency Graph Example:**\n```\nutils (changed)\n├── ui-lib\n│   └── my-app\n└── api-lib\n    └── my-app\n\nrush build --from utils builds: utils, ui-lib, api-lib, my-app\n```\n\n### --impacted-by (Affected Projects)\n\nBuild projects that might be affected by changes:\n\n```bash\nrush build --impacted-by @my-scope/utils\n```\n\n**Use When:**\n- Quick change validation\n- Dependencies are already built\n- Faster than `--from`\n\n**Note:** Assumes dependencies are up-to-date\n\n### --impacted-by-except (Dependents Only)\n\nLike `--impacted-by` but excludes the project itself:\n\n```bash\nrush build --impacted-by-except @my-scope/utils\n```\n\n**Use When:**\n- Project already built\n- Only need to test dependents\n- Saving time\n\n### --only (Just the Project)\n\nBuild only specified project, ignore dependency relationships:\n\n```bash\nrush build --only @my-scope/my-app\n```\n\n**Use When:**\n- Dependencies known to be correct\n- Combining with other flags\n- Quick single-project rebuild\n\n**Combined Example:**\n```bash\n# Build downstream dependents, but only rebuild utils\nrush build --from utils --only utils\n```\n\n## Build Cache\n\n### Cache Principles\n\nRush build cache accelerates builds by caching project outputs:\n\n**Cache Storage:** `common/temp/build-cache/`\n\n**Cache Key Based On:**\n- Source file contents\n- Dependency versions\n- Environment variables\n- Command line parameters\n- Rush configuration\n\n**Behavior:**\n- If cache key matches → Extract cached output\n- If cache key differs → Rebuild and update cache\n\n### Cache Configuration\n\n**File:** `<project>/config/rush-project.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\", \"API_KEY\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Script name in package.json\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n### Environment Variables\n\n**Caching with Environment Variables:**\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\", \"API_ENDPOINT\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Cache key includes `NODE_ENV` and `API_ENDPOINT` values\n- Changing these values invalidates cache\n- Different values have different caches\n\n**Use Cases:**\n- Production vs development builds\n- Region-specific builds\n- Feature flag configurations\n\n### Disabling Cache\n\n**Per Operation:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": true  // Disable\n    }\n  ]\n}\n```\n\n**Per Command:**\n```bash\n# Rush rebuild always skips cache\nrush rebuild\n\n# Rush build uses cache (unless disabled)\nrush build\n```\n\n## Parallel Execution\n\n### Enabling Parallelism\n\nIn `command-line.json`:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build projects\",\n  \"enableParallelism\": true\n}\n```\n\n**Effect:**\n- Builds independent projects simultaneously\n- Respects dependency order\n- Faster builds on multi-core machines\n\n### Parallel Build Behavior\n\n**Dependency Graph:**\n```\napp1 depends on lib1 and lib2\napp2 depends on lib2\nlib1 and lib2 are independent\n```\n\n**Parallel Build Order:**\n```\nPhase 1 (parallel): lib1, lib2\nPhase 2 (parallel): app1, app2\n```\n\n### Limiting Parallelism\n\n```bash\n# Limit concurrent build jobs\nrush build --parallelism 4\n```\n\n**Use Cases:**\n- Resource-constrained machines\n- Preventing memory issues\n- CI environment limits\n\n## Build Best Practices\n\n### 1. Use Incremental Builds for Development\n\n**Incorrect:**\n```bash\n# Always rebuild everything\nrush rebuild\n```\n\n**Correct:**\n```bash\n# Incremental build for development\nrush build\n```\n\n### 2. Use Selection Flags to Reduce Scope\n\n**Incorrect:**\n```bash\n# Build everything when only one project changed\nrush build\n```\n\n**Correct:**\n```bash\n# Build only affected projects\nrush build --to @my-scope/changed-project\n```\n\n### 3. Configure Build Cache\n\n**Incorrect:**\n```json\n// No cache configuration\n// Builds are always slow\n```\n\n**Correct:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n\n### 4. Enable Parallelism\n\n**Incorrect:**\n```json\n{\n  \"enableParallelism\": false\n}\n```\n\n**Correct:**\n```json\n{\n  \"enableParallelism\": true\n}\n```\n\n## Build Troubleshooting\n\n### Cache Issues\n\n**Symptom:** Build output seems stale\n\n**Solutions:**\n```bash\n# Clear cache and rebuild\nrush rebuild\n\n# Or use purge\nrush purge\nrush build\n```\n\n### Dependency Build Order\n\n**Symptom:** Projects build in wrong order\n\n**Solutions:**\n```bash\n# Let Rush determine order\nrush build  # Automatic dependency order\n\n# Verify dependency graph\nrush list --json\n```\n\n### Slow Builds\n\n**Symptom:** Builds take too long\n\n**Solutions:**\n```bash\n# Use selection flags\nrush build --to @my-scope/target-project\n\n# Enable parallelism\n# Check command-line.json has \"enableParallelism\": true\n\n# Configure cache\n# Check rush-project.json has cache configured\n```\n\n## Build Scripts\n\n### package.json Scripts\n\n**Recommended Setup:**\n```json\n{\n  \"scripts\": {\n    \"build\": \"heft build\",\n    \"build:production\": \"heft build --production\",\n    \"clean\": \"heft clean\",\n    \"test\": \"heft test\"\n  }\n}\n```\n\n**Corresponding rush-project.json:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"]\n    },\n    {\n      \"operationName\": \"build:production\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\"]\n    }\n  ]\n}\n```\n\n**Usage:**\n```bash\n# Run project script directly\ncd apps/my-app\nrushx build\n\n# Or via Rush bulk command\nrush build\n```\n","skills/rushstack-best-practices/references/core-commands.md":"# Core Commands Reference\n\n## Command Tool Selection\n\n### rush (Repository-wide Operations)\n\n**Purpose:** Execute operations affecting the entire repository or multiple projects\n\n**Features:**\n- Strict parameter validation and documentation\n- Support for global and batch commands\n- Suitable for standardized workflows\n\n**Use Cases:**\n- Dependency installation (`rush install`, `rush update`)\n- Building (`rush build`, `rush rebuild`)\n- Publishing (`rush publish`)\n- Version management (`rush change`, `rush version`)\n\n### rushx (Single Project Scripts)\n\n**Purpose:** Execute specific scripts for a single project\n\n**Features:**\n- Similar to `npm run` or `pnpm run`\n- Uses Rush version selector for toolchain consistency\n- Prepares shell environment based on Rush configuration\n\n**Use Cases:**\n- Running project-specific build scripts\n- Executing tests for a single project\n- Running development servers\n\n**Example:**\n```bash\ncd apps/my-app\nrushx build      # Equivalent to npm run build\nrushx test       # Equivalent to npm run test\nrushx start      # Equivalent to npm run start\n```\n\n### rush-pnpm (Direct PNPM with Rush Context)\n\n**Purpose:** Replace direct use of pnpm in Rush repository\n\n**Features:**\n- Sets correct PNPM workspace context\n- Supports Rush-specific enhancements\n- Provides compatibility checks with Rush\n\n**Use Cases:**\n- When direct PNPM commands are needed\n- Troubleshooting PNPM-specific issues\n- PNPM operations that Rush doesn't wrap\n\n**Example:**\n```bash\nrush-pnpm list         # List packages in Rush context\nrush-pnpm why <pkg>    # Check why a package is included\n```\n\n## Common Commands\n\n### rush update\n\n**Function:** Install and update dependencies, update shrinkwrap file\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n- `--network-concurrency COUNT` - Limit concurrent network requests\n\n**Use Cases:**\n- After first cloning repository\n- After pulling new Git changes\n- After modifying package.json\n- When dependencies need updating\n\n**Example:**\n```bash\nrush update                  # Standard update\nrush update --purge          # Clean then update\nrush update --to @my/app     # Update specific project and deps\n```\n\n### rush install\n\n**Function:** Install dependencies based on existing shrinkwrap file (read-only)\n\n**Features:**\n- Won't modify shrinkwrap file\n- Suitable for CI environment\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n\n**Use Cases:**\n- CI/CD pipelines\n- Ensuring dependency version consistency\n- Avoiding accidental shrinkwrap file updates\n\n**Example:**\n```bash\nrush install                  # Standard install\nrush install --production     # Install only production deps\n```\n\n### rush build\n\n**Function:** Incremental project build\n\n**Features:**\n- Only builds changed projects and dependencies\n- Supports parallel building\n- Uses build cache when available\n\n**Use Cases:**\n- Daily development builds\n- Quick change validation\n\n**Example:**\n```bash\nrush build                    # Build all changed projects\nrush build --to @my/app       # Build app and dependencies\nrush build --from @my/lib     # Build lib and dependents\n```\n\n### rush rebuild\n\n**Function:** Complete clean build\n\n**Features:**\n- Builds all projects\n- Cleans previous build artifacts\n- Skips build cache\n\n**Use Cases:**\n- When complete build cleaning is needed\n- When investigating build issues\n\n**Example:**\n```bash\nrush rebuild                  # Rebuild everything\nrush rebuild --to @my/app     # Rebuild app and dependencies\n```\n\n### rush add\n\n**Function:** Add dependencies to project\n\n**Usage:** `rush add -p <package> [--dev] [--exact]`\n\n**Important Parameters:**\n- `-p, --package` - Package name\n- `--dev` - Add as development dependency\n- `--exact` - Use exact version (no semver range)\n- `--peer` - Add as peer dependency\n\n**Important:** Must be run in corresponding project directory\n\n**Example:**\n```bash\ncd apps/my-app\nrush add -p lodash --dev        # Add dev dependency\nrush add -p react --exact       # Add exact version\nrush add -p typescript -D       # Short for --dev\n```\n\n### rush remove\n\n**Function:** Remove project dependencies\n\n**Usage:** `rush remove -p <package>`\n\n**Example:**\n```bash\ncd apps/my-app\nrush remove -p lodash           # Remove lodash\n```\n\n### rush purge\n\n**Function:** Clean temporary files and installation files\n\n**Use Cases:**\n- Clean build environment\n- Resolve dependency issues\n- Free up disk space\n\n**Example:**\n```bash\nrush purge                      # Clean all temp files\n```\n\n## Project Selection Flags\n\n### --to <PROJECT>\n\n**Function:** Select specified project and all its dependencies\n\n**Use Cases:**\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n\n**Example:**\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project      # Omit scope if unique\nrush build --to .               # Use current directory's project\n```\n\n### --to-except <PROJECT>\n\n**Function:** Select all dependencies of specified project, but not the project itself\n\n**Use Cases:**\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n\n**Example:**\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\n\n**Function:** Select specified project and all its downstream dependencies\n\n**Use Cases:**\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n\n**Example:**\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\n\n**Function:** Select projects that might be affected by specified project changes, excluding dependencies\n\n**Use Cases:**\n- Quick test of project change impacts\n- Use when dependency status is already correct\n\n**Example:**\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\n\n**Function:** Similar to `--impacted-by`, but excludes specified project itself\n\n**Use Cases:**\n- Project itself has been manually built\n- Only need to test downstream impacts\n\n**Example:**\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\n\n**Function:** Only select specified project, completely ignore dependency relationships\n\n**Use Cases:**\n- Dependency status is known to be correct\n- Combine with other selection parameters\n\n**Example:**\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n","skills/rushstack-best-practices/references/dependency-management.md":"# Dependency Management Reference\n\n## Package Manager Selection\n\n### Choosing a Package Manager\n\nConfigure in `rush.json`:\n\n```json\n{\n  // PNPM (Recommended)\n  \"pnpmVersion\": \"8.x.x\",\n\n  // Or NPM\n  // \"npmVersion\": \"8.x.x\",\n\n  // Or Yarn\n  // \"yarnVersion\": \"1.x.x\"\n}\n```\n\n**Recommendations:**\n- **PNPM** - Preferred: Efficient, strict, handles large monorepos well\n- **NPM** - Standard: Good compatibility, widely supported\n- **Yarn** - Legacy: Supported, but consider PNPM for new projects\n\n## Workspace Linking\n\n### Automatic Local Linking\n\nRush automatically creates symlinks for local project dependencies:\n\n**In project A package.json:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/project-b\": \"^1.0.0\"\n  }\n}\n```\n\nRush automatically:\n1. Detects `@my-scope/project-b` is a local project\n2. Creates symlink in `node_modules/@my-scope/project-b`\n3. Links to the actual project folder\n4. Updates during each `rush install` or `rush update`\n\n**Benefits:**\n- Live changes to dependencies immediately visible\n- No need for npm link / pnpm link\n- Automatic dependency resolution\n\n### Workspace Linking Behavior\n\n```bash\n# After running\nrush install\n\n# Rush creates\napps/my-app/node_modules/@my-scope/\n  ├── my-lib -> ../../libraries/my-lib\n  └── other-lib -> ../../libraries/other-lib\n```\n\n## Version Management\n\n### common-versions.json\n\n**Purpose:** Configure NPM dependency versions affecting all projects in a subspace\n\n**Location:** `common/config/subspaces/<subspace>/common-versions.json`\n\n### Preferred Versions\n\nRestrict specific package versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"react-dom\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\",\n    \"eslint\": \"^8.0.0\"\n  }\n}\n```\n\n**Use Cases:**\n- Force consistent versions across projects\n- Prevent version drift\n- Ensure compatibility\n\n### Implicit Preferred Versions\n\nAutomatically add all dependencies to preferredVersions:\n\n```json\n{\n  \"implicitlyPreferredVersions\": true\n}\n```\n\n**Effect:**\n- Every dependency used in any project becomes constrained to that version\n- Prevents accidental version updates\n- **Caution:** Can make dependency updates difficult\n\n**Recommendation:** Use `false` for active development, `true` for stable maintenance\n\n### Allowed Alternative Versions\n\nAllow certain dependencies to use multiple different versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  },\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n**Use Cases:**\n- Gradual migration between major versions\n- Testing new versions without full commitment\n- Teams need different versions temporarily\n\n## Adding Dependencies\n\n### Using rush add\n\n**Always use Rush commands**, not npm/pnpm directly:\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Add dependency\nrush add -p lodash\n\n# Add dev dependency\nrush add -p typescript --dev\n\n# Add exact version\nrush add -p react --exact\n\n# Add peer dependency\nrush add -p react-dom --peer\n\n# Add multiple\nrush add -p lodash -p axios -p moment\n```\n\n**Important:**\n- Must run in project directory\n- Rush updates both package.json and shrinkwrap\n- Automatically handles workspace dependencies\n\n###rush add Options\n\n| Option | Description |\n|--------|-------------|\n| `-p, --package <name>` | Package name |\n| `-D, --dev` | Add as devDependency |\n| `-E, --exact` | Use exact version |\n| `--peer` | Add as peerDependency |\n| `--caret` | Use caret range (default for dependencies) |\n| `--tilde` | Use tilde range |\n\n## Removing Dependencies\n\n### Using rush remove\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Remove dependency\nrush remove -p lodash\n\n# Remove multiple\nrush remove -p lodash -p axios\n```\n\n## Decoupled Local Dependencies\n\n### Handling Cyclic Dependencies\n\nWhen two projects depend on each other:\n\n```json\n// In apps/my-app/rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"decoupledLocalDependencies\": [\"@my-scope/shared-lib\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Rush won't create symlink for `@my-scope/shared-lib`\n- Project uses version from npm (or registry)\n- Breaks cycle at build time\n\n**When to Use:**\n- Circular dependency detected\n- Temporary workaround during refactoring\n- Runtime dependency only (not build-time)\n\n**Caution:** Should be used sparingly - indicates architecture issue\n\n## Dependency Best Practices\n\n### 1. Always Use Rush Commands\n\n**Incorrect:**\n```bash\nnpm install lodash\npnpm add typescript\n```\n\n**Correct:**\n```bash\nrush add -p lodash\nrush add -p typescript\n```\n\n### 2. Use Workspace References\n\n**Incorrect:**\n```json\n{\n  \"dependencies\": {\n    \"my-lib\": \"file:../libraries/my-lib\"\n  }\n}\n```\n\n**Correct:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/my-lib\": \"^1.0.0\"\n  }\n}\n```\n\n### 3. Centralize Version Constraints\n\nUse `common-versions.json` instead of duplicating in each project:\n\n**Incorrect:**\n- Every project has `\"typescript\": \"~4.5.0\"` in package.json\n\n**Correct:**\n```json\n// common/config/subspaces/default/common-versions.json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  }\n}\n```\n\n### 4. Careful with implicitlyPreferredVersions\n\n**Good for:**\n- Stable maintenance branches\n- Released products\n- Teams that want strict version control\n\n**Bad for:**\n- Active development\n- Libraries\n- Frequent dependency updates\n\n## Troubleshooting Dependencies\n\n### Dependency Conflicts\n\n**Symptom:** Version conflicts or peer dependency warnings\n\n**Solutions:**\n```bash\n# Clean slate\nrush purge\nrush update --recheck\n\n# Check what depends on a package\nrush-pnpm why <package>\n\n# View dependency tree\nrush-pnpm list --depth 0\n```\n\n### Workspace Linking Issues\n\n**Symptom:** Local changes not reflected\n\n**Solutions:**\n```bash\n# Reinstall to recreate links\nrush install\n\n# Check links are correct\nls -la node_modules/@my-scope/\n```\n\n### Version Drift\n\n**Symptom:** Different projects using different versions\n\n**Solution:**\n```json\n// common-versions.json\n{\n  \"preferredVersions\": {\n    \"problematic-package\": \"exact-version\"\n  },\n  \"implicitlyPreferredVersions\": false  // Start with false\n}\n```\n\n## Subspace Dependency Isolation\n\nWhen using subspaces, each has its own:\n- `pnpm-lock.yaml` - Independent lock file\n- `common-versions.json` - Independent version constraints\n- Dependency tree - Isolated from other subspaces\n\n**Benefits:**\n- Team A can use React 17 while Team B uses React 18\n- Dependency updates in one subspace don't affect others\n- Faster installs (only affected subspace updated)\n\n**See:** `references/subspace.md` for detailed subspace configuration\n","skills/rushstack-best-practices/references/project-configuration.md":"# Project Configuration Reference\n\n## Standard Directory Structure\n\n```\n/\n├── common/                          # Rush common files directory\n│   ├── autoinstallers/              # Autoinstaller tool configuration\n│   ├── config/                      # Configuration files directory\n│   │   ├── rush/                    # Rush core configuration\n│   │   │   ├── command-line.json    # Command line configuration\n│   │   │   ├── build-cache.json     # Build cache configuration\n│   │   │   ├── experiments.json     # Feature experiments\n│   │   │   └── subspaces.json       # Subspace configuration\n│   │   └── subspaces/               # Subspace configuration\n│   │       └── <subspace-name>/     # Specific Subspace\n│   │           ├── pnpm-lock.yaml   # Subspace dependency lock file\n│   │           ├── .pnpmfile.cjs    # PNPM hook script\n│   │           ├── common-versions.json  # Subspace version configuration\n│   │           ├── pnpm-config.json # PNPM configuration\n│   │           └── repo-state.json  # Subspace state hash value\n│   ├── scripts/                     # Common scripts\n│   └── temp/                        # Temporary files\n├── apps/                            # Application projects\n│   └── <app-name>/                  # 2 levels deep required\n├── libraries/                       # Library projects\n│   └── <lib-name>/                  # 2 levels deep required\n├── tools/                           # Tool projects\n│   └── <tool-name>/                 # 2 levels deep required\n├── rush.json                        # Rush main configuration file\n└── pnpm-lock.yaml                   # Root lock file (if not using subspaces)\n```\n\n**Important:** Projects must be exactly 2 levels deep (`projectFolderMinDepth: 2`, `projectFolderMaxDepth: 2`)\n\n## rush.json\n\n**Purpose:** Main Rush configuration file\n\n**Location:** Repository root\n\n### Basic Structure\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.x.x\",\n\n  // Package Manager Selection (choose one)\n  \"pnpmVersion\": \"8.x.x\",\n  // \"npmVersion\": \"8.x.x\",\n  // \"yarnVersion\": \"1.x.x\",\n\n  // Project Folder Depth\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n\n  // Node.js Version Requirement\n  \"nodeSupportedVersionRange\": \">=14.15.0\",\n\n  // Projects Array\n  \"projects\": []\n}\n```\n\n### Project Configuration\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-project\",     // npm package name\n      \"projectFolder\": \"libraries/my-project\",    // Path from repo root\n      \"shouldPublish\": true,                      // Should this be published?\n      \"decoupledLocalDependencies\": [],           // For cyclic dependencies\n      \"subspaceName\": \"my-subspace\",              // Optional: subspace assignment\n      \"reviewCategory\": \"production\"              // Optional: review category\n    }\n  ]\n}\n```\n\n**Project Fields:**\n- `packageName` - The npm package name (must match package.json)\n- `projectFolder` - Relative path from repository root\n- `shouldPublish` - Whether package should be published to npm\n- `decoupledLocalDependencies` - Array of local packages to exclude from link (for cyclic deps)\n- `subspaceName` - Which subspace this project belongs to\n- `reviewCategory` - Category for review purposes\n\n### Git Policy\n\n```json\n{\n  \"gitPolicy\": {\n    \"allowedBranchRegExps\": [\n      \"main\",\n      \"release/*\",\n      \"hotfix/*\"\n    ],\n    \"sampleEmail\": \"example@example.com\"\n  }\n}\n```\n\n## command-line.json\n\n**Purpose:** Define custom Rush commands\n\n**Location:** `common/config/rush/command-line.json`\n\n### Bulk Commands\n\nExecute separately for each project:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build all projects\",\n  \"description\": \"Builds all projects in dependency order\",\n  \"enableParallelism\": true,\n  \"ignoreMissingScript\": false,\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n**Bulk Command Fields:**\n- `commandKind` - Must be \"bulk\"\n- `name` - Command name\n- `summary` - Short description\n- `description` - Long description\n- `enableParallelism` - Allow parallel execution\n- `ignoreMissingScript` - Don't fail if project lacks this script\n- `safeForSimultaneousRushProcesses` - Can multiple Rush instances run this?\n\n### Global Commands\n\nExecute once for entire repository:\n\n```json\n{\n  \"commandKind\": \"global\",\n  \"name\": \"deploy\",\n  \"summary\": \"Deploy application\",\n  \"description\": \"Deploys the application to production\",\n  \"shellCommand\": \"node common/scripts/deploy.js\",\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n### Parameters\n\nSix parameter types supported:\n\n**Flag Parameter:**\n```json\n{\n  \"parameterKind\": \"flag\",\n  \"longName\": \"--production\",\n  \"shortName\": \"-p\",\n  \"description\": \"Production mode\",\n  \"required\": false\n}\n```\n\n**String Parameter:**\n```json\n{\n  \"parameterKind\": \"string\",\n  \"longName\": \"--environment\",\n  \"shortName\": \"-e\",\n  \"description\": \"Environment name\",\n  \"required\": false,\n  \"defaultValue\": \"development\"\n}\n```\n\n**String List Parameter:**\n```json\n{\n  \"parameterKind\": \"stringList\",\n  \"longName\": \"--tag\",\n  \"description\": \"Tags for the build\",\n  \"required\": false\n}\n```\n\n**Choice Parameter:**\n```json\n{\n  \"parameterKind\": \"choice\",\n  \"longName\": \"--locale\",\n  \"description\": \"Locale for the build\",\n  \"alternatives\": [\"en-us\", \"zh-cn\", \"ja-jp\"],\n  \"required\": false,\n  \"defaultValue\": \"en-us\"\n}\n```\n\n**Integer Parameter:**\n```json\n{\n  \"parameterKind\": \"integer\",\n  \"longName\": \"--timeout\",\n  \"description\": \"Timeout in milliseconds\",\n  \"required\": false\n}\n```\n\n**Integer List Parameter:**\n```json\n{\n  \"parameterKind\": \"integerList\",\n  \"longName\": \"--pr\",\n  \"description\": \"Pull request numbers\",\n  \"required\": false\n}\n```\n\n## rush-project.json\n\n**Purpose:** Project-specific Rush configuration\n\n**Location:** `<project>/config/rush-project.json`\n\n### Build Cache Configuration\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Name of the operation (matches package.json script)\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n## Example Complete Configuration\n\n### rush.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.109.0\",\n  \"pnpmVersion\": \"8.15.0\",\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n  \"nodeSupportedVersionRange\": \">=20.9.0 <21.0.0\",\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    },\n    {\n      \"packageName\": \"@my-scope/my-lib\",\n      \"projectFolder\": \"libraries/my-lib\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    }\n  ]\n}\n```\n\n### command-line.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json\",\n  \"commands\": [\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"build\",\n      \"summary\": \"Build projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"test\",\n      \"summary\": \"Test projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"global\",\n      \"name\": \"clean\",\n      \"summary\": \"Clean build outputs\",\n      \"shellCommand\": \"node common/scripts/clean.js\"\n    }\n  ],\n  \"parameters\": [\n    {\n      \"parameterKind\": \"flag\",\n      \"longName\": \"--production\",\n      \"shortName\": \"-p\",\n      \"description\": \"Production mode\"\n    }\n  ]\n}\n```\n\n### Project config/rush-project.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n","skills/rushstack-best-practices/references/subspace.md":"# Subspace Reference\n\n## What is Subspace?\n\nSubspace is a Rush feature that allows multiple PNPM lock files in a single Rush monorepo.\n\n### Benefits\n\n**Dependency Isolation:**\n- Different teams can use different dependency versions\n- Team A can use React 17 while Team B uses React 18\n- Reduce risk from dependency updates\n\n**Performance:**\n- Only affected subspaces update during `rush install`\n- Faster dependency operations\n- Smaller lock files to manage\n\n**Team Autonomy:**\n- Teams manage their own dependencies\n- Less coordination needed\n- Independent release cycles\n\n### When to Use Subspace\n\n**Consider using subspace when:**\n- Repository has 50+ projects\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Performance issues with dependency operations\n- Teams want autonomy for dependency choices\n\n**Avoid subspace when:**\n- Small monorepo (< 20 projects)\n- Single team or unified dependencies\n- Simplicity is preferred\n- Just starting with Rush\n\n## Subspace Configuration\n\n### Step 1: Enable Subspaces\n\n**File:** `common/config/rush/subspaces.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/subspaces.schema.json\",\n  \"subspacesEnabled\": true,\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n```\n\n**Fields:**\n- `subspacesEnabled` - Enable/disable subspace feature\n- `subspaceNames` - List of subspace names\n\n### Step 2: Assign Projects to Subspaces\n\n**File:** `rush.json`\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@team-a/app-1\",\n      \"projectFolder\": \"apps/team-a/app-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-a/lib-1\",\n      \"projectFolder\": \"libraries/team-a/lib-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-b/app-1\",\n      \"projectFolder\": \"apps/team-b/app-1\",\n      \"subspaceName\": \"team-b\"\n    },\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    }\n  ]\n}\n```\n\n**Important:** Each project must belong to exactly one subspace\n\n### Step 3: Subspace Configuration Files\n\nEach subspace has its own configuration directory:\n\n```\ncommon/config/subspaces/\n├── team-a/\n│   ├── pnpm-lock.yaml          # Subspace lock file\n│   ├── common-versions.json    # Version constraints\n│   ├── pnpm-config.json        # PNPM settings\n│   └── repo-state.json         # State hash\n├── team-b/\n│   ├── pnpm-lock.yaml\n│   ├── common-versions.json\n│   ├── pnpm-config.json\n│   └── repo-state.json\n└── shared/\n    ├── pnpm-lock.yaml\n    ├── common-versions.json\n    ├── pnpm-config.json\n    └── repo-state.json\n```\n\n### Subspace common-versions.json\n\n**File:** `common/config/subspaces/<subspace>/common-versions.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json\",\n  \"preferredVersions\": {\n    // Subspace-specific versions\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {}\n}\n```\n\n**Each subspace can have:**\n- Different preferred versions\n- Different implicit preferences\n- Different allowed alternatives\n\n## Subspace Workflows\n\n### Initial Setup\n\n```bash\n# 1. Create subspace configuration\nmkdir -p common/config/subspaces/team-a\n\n# 2. Enable subspaces in subspaces.json\n# Edit: common/config/rush/subspaces.json\n\n# 3. Assign projects in rush.json\n# Edit: rush.json - add subspaceName to projects\n\n# 4. Run update to generate lock files\nrush update\n```\n\n### Adding Projects to Subspace\n\n```bash\n# 1. Create project directory\nmkdir -p apps/team-a/new-app\n\n# 2. Add to rush.json\n{\n  \"packageName\": \"@team-a/new-app\",\n  \"projectFolder\": \"apps/team-a/new-app\",\n  \"subspaceName\": \"team-a\"\n}\n\n# 3. Run update\nrush update\n```\n\n### Updating Dependencies\n\n**Update specific subspace:**\n```bash\n# Only updates team-a subspace\nrush update --to @team-a/app-1\n```\n\n**Update all subspaces:**\n```bash\n# Updates all subspaces\nrush update\n```\n\n## Subspace Isolation\n\n### Dependency Isolation\n\nEach subspace has its own dependency tree:\n\n**team-a subspace:**\n```\nteam-a/app-1/\n└── node_modules/\n    ├── react@17.0.2\n    └── typescript@4.5.0\n```\n\n**team-b subspace:**\n```\nteam-b/app-1/\n└── node_modules/\n    ├── react@18.2.0\n    └── typescript@5.0.0\n```\n\n### Cross-Subspace Dependencies\n\nProjects can depend on projects in other subspaces:\n\n```json\n// team-a/app-1 depends on shared/utils\n{\n  \"dependencies\": {\n    \"@shared/utils\": \"^1.0.0\"\n  }\n}\n```\n\n**Rush handles:**\n- Workspace linking across subspaces\n- Build order across subspaces\n- Version compatibility\n\n### Shared Dependencies\n\n**Pattern:** Create a \"shared\" subspace for common libraries\n\n```json\n// subspaces.json\n{\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n\n// rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    },\n    {\n      \"packageName\": \"@team-a/app\",\n      \"projectFolder\": \"apps/team-a/app\",\n      \"subspaceName\": \"team-a\"\n    }\n  ]\n}\n```\n\n## Subspace Best Practices\n\n### 1. Organize by Team or Domain\n\n**Good:**\n```\nsubspaceNames: [\"platform\", \"backend\", \"frontend\", \"shared\"]\n```\n\n**Bad:**\n```\nsubspaceNames: [\"subspace1\", \"subspace2\", \"subspace3\"]\n```\n\n### 2. Use Shared Subspace for Common Code\n\n**Pattern:**\n```\n- team-a: Team A's apps and libs\n- team-b: Team B's apps and libs\n- shared: Common libraries used by both teams\n```\n\n### 3. Minimize Cross-Subspace Dependencies\n\n**Good:**\n```\nteam-a/app → team-a/lib → shared/utils\nteam-b/app → team-b/lib → shared/utils\n```\n\n**Avoid:**\n```\nteam-a/app → team-b/lib  # Creates coupling\n```\n\n### 4. Keep Subspace Sizes Balanced\n\n**Good:**\n```\nteam-a: 20 projects\nteam-b: 18 projects\nshared: 10 projects\n```\n\n**Bad:**\n```\nteam-a: 2 projects\nteam-b: 50 projects  # Imbalanced\n```\n\n## Subspace Troubleshooting\n\n### Lock File Conflicts\n\n**Symptom:** Subspace lock files out of sync\n\n**Solution:**\n```bash\n# Regenerate all lock files\nrush update --purge\n```\n\n### Cross-Subspace Build Issues\n\n**Symptom:** Projects build in wrong order\n\n**Solution:**\n```bash\n# Verify dependency graph\nrush list --json\n\n# Force rebuild across subspaces\nrush rebuild\n```\n\n### Version Conflicts Across Subspaces\n\n**Symptom:** Different subspaces require different versions\n\n**Solution:**\n```bash\n# Update specific subspace\nrush update --to @team-a/app-1\n\n# Or use allowedAlternativeVersions\n```\n\n## Subspace vs No Subspace\n\n### No Subspace (Default)\n\n**Structure:**\n```\ncommon/\n├── config/rush/\n└── temp/\npnpm-lock.yaml (single lock file)\nrush.json\n```\n\n**Pros:**\n- Simpler setup\n- Easier to understand\n- Single source of truth for versions\n\n**Cons:**\n- All projects share same dependency tree\n- Dependency updates affect all projects\n- Slower installs for large repos\n\n### With Subspace\n\n**Structure:**\n```\ncommon/\n├── config/\n│   ├── rush/\n│   └── subspaces/\n│       ├── team-a/\n│       │   └── pnpm-lock.yaml\n│       └── team-b/\n│           └── pnpm-lock.yaml\n└── temp/\nrush.json\n```\n\n**Pros:**\n- Independent dependency trees\n- Faster installs (only affected subspaces)\n- Team autonomy\n\n**Cons:**\n- More complex setup\n- More files to manage\n- Potential for duplication\n\n## Migration to Subspace\n\n### Step-by-Step Migration\n\n1. **Plan your subspaces:**\n   ```json\n   {\n     \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n   }\n   ```\n\n2. **Enable subspaces:**\n   ```bash\n   # Edit common/config/rush/subspaces.json\n   ```\n\n3. **Assign projects:**\n   ```bash\n   # Edit rush.json - add subspaceName to each project\n   ```\n\n4. **Generate lock files:**\n   ```bash\n   rush update\n   ```\n\n5. **Verify:**\n   ```bash\n   # Check lock files created\n   ls common/config/subspaces/*/pnpm-lock.yaml\n   ```\n\n6. **Commit changes:**\n   ```bash\n   git add .\n   git commit -m \"Enable Rush subspaces\"\n   ```\n","vscode-extensions/debug-certificate-manager-vscode-extension/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fdebug-certificate-manager-vscode-extension%2FREADME.md -->","vscode-extensions/playwright-local-browser-server-vscode-extension/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fplaywright-local-browser-server-vscode-extension%2FREADME.md -->","vscode-extensions/rush-vscode-command-webview/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Frush-vscode-command-webview%2FREADME.md -->","vscode-extensions/rush-vscode-extension/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Frush-vscode-extension%2FREADME.md -->","vscode-extensions/vscode-shared/README.md":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fvscode-shared%2FREADME.md -->"},"items":[{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"You are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness\n","isInternal":false,"tokens":3154,"sizeBytes":13652},{"name":"rush.mdc","path":".cursor/rules/rush.mdc","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/.cursor/rules/rush.mdc","title":"Cursor Rule: rush","category":"cursor-rule","format":"mdc","content":"---\ndescription:\nglobs:\nalwaysApply: true\n---\nYou are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness","frontmatter":{"description":null,"globs":null,"alwaysApply":true},"isInternal":false,"tokens":3165,"sizeBytes":13697},{"name":"CHANGELOG.md","path":"skills/rushstack-best-practices/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/CHANGELOG.md","title":"Rushstack-best-practices Skill","category":"anthropic-skill","format":"markdown","content":"# Change Log - Rush Stack Skills\n\nThis log was last generated on Tue, 11 Feb 2026 00:00:00 GMT and should not be manually modified.\n\n## 1.0.0\nTue, 11 Feb 2026 00:00:00 GMT\n\n### Minor changes\n\n- Initial release of Rush Stack skills collection\n- `rushstack-best-practices` skill providing guidance for:\n  - Configuring Rush in a monorepo\n  - Common configuration patterns\n  - Package management best practices\n  - Build and toolchain recommendations\n\n","isInternal":false,"tokens":118,"sizeBytes":449},{"name":"build-system.md","path":"skills/rushstack-best-practices/references/build-system.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/references/build-system.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# Build System Reference\n\n## Build vs Rebuild\n\n### rush build (Incremental Build)\n\n**Purpose:** Build only changed projects and dependencies\n\n**Behavior:**\n- Analyzes project dependency graph\n- Builds only projects that changed\n- Builds downstream dependents\n- Uses build cache when available\n- Supports parallel execution\n\n**Use Cases:**\n- Daily development\n- Quick iteration\n- Testing changes\n\n**Examples:**\n```bash\n# Build all changed projects\nrush build\n\n# Build specific project and dependencies\nrush build --to @my-scope/my-app\n\n# Build project and downstream dependents\nrush build --from @my-scope/my-lib\n\n# Parallel build (default for bulk commands)\nrush build --parallel\n```\n\n### rush rebuild (Clean Build)\n\n**Purpose:** Complete clean build of all projects\n\n**Behavior:**\n- Cleans previous build artifacts\n- Builds all projects (even unchanged)\n- Skips build cache\n- Takes longer than incremental build\n\n**Use Cases:**\n- After major dependency updates\n- When investigating build issues\n- Before releases\n- Complete validation\n\n**Examples:**\n```bash\n# Rebuild everything\nrush rebuild\n\n# Rebuild specific project and dependencies\nrush rebuild --to @my-scope/my-app\n```\n\n## Build Selection Flags\n\n### Flag Comparison\n\n| Flag | Selects | Dependencies Built | Dependents Built | Use Case |\n|------|---------|-------------------|------------------|----------|\n| `--to <proj>` | Project + dependencies | Yes | No | Build with full chain |\n| `--to-except <proj>` | Dependencies only | Yes | No | Pre-build dependencies |\n| `--from <proj>` | Project + dependents | No | Yes | Test downstream impact |\n| `--impacted-by <proj>` | Affected projects | No | Yes (only impacted) | Quick validation |\n| `--impacted-by-except <proj>` | Dependents only | No | Yes (only impacted) | Skip built project |\n| `--only <proj>` | Just the project | No | No | When deps are good |\n\n### --to (Project + Dependencies)\n\nBuild project and all dependencies recursively:\n\n```bash\nrush build --to @my-scope/my-app\n```\n\n**Use When:**\n- Building an application for testing\n- Need complete dependency chain\n- Publishing a package\n\n**Dependency Graph Example:**\n```\nmy-app\n├── ui-lib\n│   └── utils\n└── api-lib\n    └── utils\n\nrush build --to my-app builds: utils, ui-lib, api-lib, my-app\n```\n\n### --to-except (Dependencies Only)\n\nBuild all dependencies, but not the project itself:\n\n```bash\nrush build --to-except @my-scope/my-app\n```\n\n**Use When:**\n- Pre-building dependencies\n- Project will be built separately\n- Validating dependency chain\n\n### --from (Project + Dependents)\n\nBuild project and all downstream dependents:\n\n```bash\nrush build --from @my-scope/utils\n```\n\n**Use When:**\n- After library changes\n- Testing impact on dependents\n- Ensuring downstream compatibility\n\n**Dependency Graph Example:**\n```\nutils (changed)\n├── ui-lib\n│   └── my-app\n└── api-lib\n    └── my-app\n\nrush build --from utils builds: utils, ui-lib, api-lib, my-app\n```\n\n### --impacted-by (Affected Projects)\n\nBuild projects that might be affected by changes:\n\n```bash\nrush build --impacted-by @my-scope/utils\n```\n\n**Use When:**\n- Quick change validation\n- Dependencies are already built\n- Faster than `--from`\n\n**Note:** Assumes dependencies are up-to-date\n\n### --impacted-by-except (Dependents Only)\n\nLike `--impacted-by` but excludes the project itself:\n\n```bash\nrush build --impacted-by-except @my-scope/utils\n```\n\n**Use When:**\n- Project already built\n- Only need to test dependents\n- Saving time\n\n### --only (Just the Project)\n\nBuild only specified project, ignore dependency relationships:\n\n```bash\nrush build --only @my-scope/my-app\n```\n\n**Use When:**\n- Dependencies known to be correct\n- Combining with other flags\n- Quick single-project rebuild\n\n**Combined Example:**\n```bash\n# Build downstream dependents, but only rebuild utils\nrush build --from utils --only utils\n```\n\n## Build Cache\n\n### Cache Principles\n\nRush build cache accelerates builds by caching project outputs:\n\n**Cache Storage:** `common/temp/build-cache/`\n\n**Cache Key Based On:**\n- Source file contents\n- Dependency versions\n- Environment variables\n- Command line parameters\n- Rush configuration\n\n**Behavior:**\n- If cache key matches → Extract cached output\n- If cache key differs → Rebuild and update cache\n\n### Cache Configuration\n\n**File:** `<project>/config/rush-project.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\", \"API_KEY\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Script name in package.json\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n### Environment Variables\n\n**Caching with Environment Variables:**\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\", \"API_ENDPOINT\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Cache key includes `NODE_ENV` and `API_ENDPOINT` values\n- Changing these values invalidates cache\n- Different values have different caches\n\n**Use Cases:**\n- Production vs development builds\n- Region-specific builds\n- Feature flag configurations\n\n### Disabling Cache\n\n**Per Operation:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": true  // Disable\n    }\n  ]\n}\n```\n\n**Per Command:**\n```bash\n# Rush rebuild always skips cache\nrush rebuild\n\n# Rush build uses cache (unless disabled)\nrush build\n```\n\n## Parallel Execution\n\n### Enabling Parallelism\n\nIn `command-line.json`:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build projects\",\n  \"enableParallelism\": true\n}\n```\n\n**Effect:**\n- Builds independent projects simultaneously\n- Respects dependency order\n- Faster builds on multi-core machines\n\n### Parallel Build Behavior\n\n**Dependency Graph:**\n```\napp1 depends on lib1 and lib2\napp2 depends on lib2\nlib1 and lib2 are independent\n```\n\n**Parallel Build Order:**\n```\nPhase 1 (parallel): lib1, lib2\nPhase 2 (parallel): app1, app2\n```\n\n### Limiting Parallelism\n\n```bash\n# Limit concurrent build jobs\nrush build --parallelism 4\n```\n\n**Use Cases:**\n- Resource-constrained machines\n- Preventing memory issues\n- CI environment limits\n\n## Build Best Practices\n\n### 1. Use Incremental Builds for Development\n\n**Incorrect:**\n```bash\n# Always rebuild everything\nrush rebuild\n```\n\n**Correct:**\n```bash\n# Incremental build for development\nrush build\n```\n\n### 2. Use Selection Flags to Reduce Scope\n\n**Incorrect:**\n```bash\n# Build everything when only one project changed\nrush build\n```\n\n**Correct:**\n```bash\n# Build only affected projects\nrush build --to @my-scope/changed-project\n```\n\n### 3. Configure Build Cache\n\n**Incorrect:**\n```json\n// No cache configuration\n// Builds are always slow\n```\n\n**Correct:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n\n### 4. Enable Parallelism\n\n**Incorrect:**\n```json\n{\n  \"enableParallelism\": false\n}\n```\n\n**Correct:**\n```json\n{\n  \"enableParallelism\": true\n}\n```\n\n## Build Troubleshooting\n\n### Cache Issues\n\n**Symptom:** Build output seems stale\n\n**Solutions:**\n```bash\n# Clear cache and rebuild\nrush rebuild\n\n# Or use purge\nrush purge\nrush build\n```\n\n### Dependency Build Order\n\n**Symptom:** Projects build in wrong order\n\n**Solutions:**\n```bash\n# Let Rush determine order\nrush build  # Automatic dependency order\n\n# Verify dependency graph\nrush list --json\n```\n\n### Slow Builds\n\n**Symptom:** Builds take too long\n\n**Solutions:**\n```bash\n# Use selection flags\nrush build --to @my-scope/target-project\n\n# Enable parallelism\n# Check command-line.json has \"enableParallelism\": true\n\n# Configure cache\n# Check rush-project.json has cache configured\n```\n\n## Build Scripts\n\n### package.json Scripts\n\n**Recommended Setup:**\n```json\n{\n  \"scripts\": {\n    \"build\": \"heft build\",\n    \"build:production\": \"heft build --production\",\n    \"clean\": \"heft clean\",\n    \"test\": \"heft test\"\n  }\n}\n```\n\n**Corresponding rush-project.json:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"]\n    },\n    {\n      \"operationName\": \"build:production\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\"]\n    }\n  ]\n}\n```\n\n**Usage:**\n```bash\n# Run project script directly\ncd apps/my-app\nrushx build\n\n# Or via Rush bulk command\nrush build\n```\n","isInternal":false,"tokens":2185,"sizeBytes":8769},{"name":"core-commands.md","path":"skills/rushstack-best-practices/references/core-commands.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/references/core-commands.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# Core Commands Reference\n\n## Command Tool Selection\n\n### rush (Repository-wide Operations)\n\n**Purpose:** Execute operations affecting the entire repository or multiple projects\n\n**Features:**\n- Strict parameter validation and documentation\n- Support for global and batch commands\n- Suitable for standardized workflows\n\n**Use Cases:**\n- Dependency installation (`rush install`, `rush update`)\n- Building (`rush build`, `rush rebuild`)\n- Publishing (`rush publish`)\n- Version management (`rush change`, `rush version`)\n\n### rushx (Single Project Scripts)\n\n**Purpose:** Execute specific scripts for a single project\n\n**Features:**\n- Similar to `npm run` or `pnpm run`\n- Uses Rush version selector for toolchain consistency\n- Prepares shell environment based on Rush configuration\n\n**Use Cases:**\n- Running project-specific build scripts\n- Executing tests for a single project\n- Running development servers\n\n**Example:**\n```bash\ncd apps/my-app\nrushx build      # Equivalent to npm run build\nrushx test       # Equivalent to npm run test\nrushx start      # Equivalent to npm run start\n```\n\n### rush-pnpm (Direct PNPM with Rush Context)\n\n**Purpose:** Replace direct use of pnpm in Rush repository\n\n**Features:**\n- Sets correct PNPM workspace context\n- Supports Rush-specific enhancements\n- Provides compatibility checks with Rush\n\n**Use Cases:**\n- When direct PNPM commands are needed\n- Troubleshooting PNPM-specific issues\n- PNPM operations that Rush doesn't wrap\n\n**Example:**\n```bash\nrush-pnpm list         # List packages in Rush context\nrush-pnpm why <pkg>    # Check why a package is included\n```\n\n## Common Commands\n\n### rush update\n\n**Function:** Install and update dependencies, update shrinkwrap file\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n- `--network-concurrency COUNT` - Limit concurrent network requests\n\n**Use Cases:**\n- After first cloning repository\n- After pulling new Git changes\n- After modifying package.json\n- When dependencies need updating\n\n**Example:**\n```bash\nrush update                  # Standard update\nrush update --purge          # Clean then update\nrush update --to @my/app     # Update specific project and deps\n```\n\n### rush install\n\n**Function:** Install dependencies based on existing shrinkwrap file (read-only)\n\n**Features:**\n- Won't modify shrinkwrap file\n- Suitable for CI environment\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n\n**Use Cases:**\n- CI/CD pipelines\n- Ensuring dependency version consistency\n- Avoiding accidental shrinkwrap file updates\n\n**Example:**\n```bash\nrush install                  # Standard install\nrush install --production     # Install only production deps\n```\n\n### rush build\n\n**Function:** Incremental project build\n\n**Features:**\n- Only builds changed projects and dependencies\n- Supports parallel building\n- Uses build cache when available\n\n**Use Cases:**\n- Daily development builds\n- Quick change validation\n\n**Example:**\n```bash\nrush build                    # Build all changed projects\nrush build --to @my/app       # Build app and dependencies\nrush build --from @my/lib     # Build lib and dependents\n```\n\n### rush rebuild\n\n**Function:** Complete clean build\n\n**Features:**\n- Builds all projects\n- Cleans previous build artifacts\n- Skips build cache\n\n**Use Cases:**\n- When complete build cleaning is needed\n- When investigating build issues\n\n**Example:**\n```bash\nrush rebuild                  # Rebuild everything\nrush rebuild --to @my/app     # Rebuild app and dependencies\n```\n\n### rush add\n\n**Function:** Add dependencies to project\n\n**Usage:** `rush add -p <package> [--dev] [--exact]`\n\n**Important Parameters:**\n- `-p, --package` - Package name\n- `--dev` - Add as development dependency\n- `--exact` - Use exact version (no semver range)\n- `--peer` - Add as peer dependency\n\n**Important:** Must be run in corresponding project directory\n\n**Example:**\n```bash\ncd apps/my-app\nrush add -p lodash --dev        # Add dev dependency\nrush add -p react --exact       # Add exact version\nrush add -p typescript -D       # Short for --dev\n```\n\n### rush remove\n\n**Function:** Remove project dependencies\n\n**Usage:** `rush remove -p <package>`\n\n**Example:**\n```bash\ncd apps/my-app\nrush remove -p lodash           # Remove lodash\n```\n\n### rush purge\n\n**Function:** Clean temporary files and installation files\n\n**Use Cases:**\n- Clean build environment\n- Resolve dependency issues\n- Free up disk space\n\n**Example:**\n```bash\nrush purge                      # Clean all temp files\n```\n\n## Project Selection Flags\n\n### --to <PROJECT>\n\n**Function:** Select specified project and all its dependencies\n\n**Use Cases:**\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n\n**Example:**\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project      # Omit scope if unique\nrush build --to .               # Use current directory's project\n```\n\n### --to-except <PROJECT>\n\n**Function:** Select all dependencies of specified project, but not the project itself\n\n**Use Cases:**\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n\n**Example:**\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\n\n**Function:** Select specified project and all its downstream dependencies\n\n**Use Cases:**\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n\n**Example:**\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\n\n**Function:** Select projects that might be affected by specified project changes, excluding dependencies\n\n**Use Cases:**\n- Quick test of project change impacts\n- Use when dependency status is already correct\n\n**Example:**\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\n\n**Function:** Similar to `--impacted-by`, but excludes specified project itself\n\n**Use Cases:**\n- Project itself has been manually built\n- Only need to test downstream impacts\n\n**Example:**\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\n\n**Function:** Only select specified project, completely ignore dependency relationships\n\n**Use Cases:**\n- Dependency status is known to be correct\n- Combine with other selection parameters\n\n**Example:**\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n","isInternal":false,"tokens":1493,"sizeBytes":6596},{"name":"dependency-management.md","path":"skills/rushstack-best-practices/references/dependency-management.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/references/dependency-management.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# Dependency Management Reference\n\n## Package Manager Selection\n\n### Choosing a Package Manager\n\nConfigure in `rush.json`:\n\n```json\n{\n  // PNPM (Recommended)\n  \"pnpmVersion\": \"8.x.x\",\n\n  // Or NPM\n  // \"npmVersion\": \"8.x.x\",\n\n  // Or Yarn\n  // \"yarnVersion\": \"1.x.x\"\n}\n```\n\n**Recommendations:**\n- **PNPM** - Preferred: Efficient, strict, handles large monorepos well\n- **NPM** - Standard: Good compatibility, widely supported\n- **Yarn** - Legacy: Supported, but consider PNPM for new projects\n\n## Workspace Linking\n\n### Automatic Local Linking\n\nRush automatically creates symlinks for local project dependencies:\n\n**In project A package.json:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/project-b\": \"^1.0.0\"\n  }\n}\n```\n\nRush automatically:\n1. Detects `@my-scope/project-b` is a local project\n2. Creates symlink in `node_modules/@my-scope/project-b`\n3. Links to the actual project folder\n4. Updates during each `rush install` or `rush update`\n\n**Benefits:**\n- Live changes to dependencies immediately visible\n- No need for npm link / pnpm link\n- Automatic dependency resolution\n\n### Workspace Linking Behavior\n\n```bash\n# After running\nrush install\n\n# Rush creates\napps/my-app/node_modules/@my-scope/\n  ├── my-lib -> ../../libraries/my-lib\n  └── other-lib -> ../../libraries/other-lib\n```\n\n## Version Management\n\n### common-versions.json\n\n**Purpose:** Configure NPM dependency versions affecting all projects in a subspace\n\n**Location:** `common/config/subspaces/<subspace>/common-versions.json`\n\n### Preferred Versions\n\nRestrict specific package versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"react-dom\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\",\n    \"eslint\": \"^8.0.0\"\n  }\n}\n```\n\n**Use Cases:**\n- Force consistent versions across projects\n- Prevent version drift\n- Ensure compatibility\n\n### Implicit Preferred Versions\n\nAutomatically add all dependencies to preferredVersions:\n\n```json\n{\n  \"implicitlyPreferredVersions\": true\n}\n```\n\n**Effect:**\n- Every dependency used in any project becomes constrained to that version\n- Prevents accidental version updates\n- **Caution:** Can make dependency updates difficult\n\n**Recommendation:** Use `false` for active development, `true` for stable maintenance\n\n### Allowed Alternative Versions\n\nAllow certain dependencies to use multiple different versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  },\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n**Use Cases:**\n- Gradual migration between major versions\n- Testing new versions without full commitment\n- Teams need different versions temporarily\n\n## Adding Dependencies\n\n### Using rush add\n\n**Always use Rush commands**, not npm/pnpm directly:\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Add dependency\nrush add -p lodash\n\n# Add dev dependency\nrush add -p typescript --dev\n\n# Add exact version\nrush add -p react --exact\n\n# Add peer dependency\nrush add -p react-dom --peer\n\n# Add multiple\nrush add -p lodash -p axios -p moment\n```\n\n**Important:**\n- Must run in project directory\n- Rush updates both package.json and shrinkwrap\n- Automatically handles workspace dependencies\n\n###rush add Options\n\n| Option | Description |\n|--------|-------------|\n| `-p, --package <name>` | Package name |\n| `-D, --dev` | Add as devDependency |\n| `-E, --exact` | Use exact version |\n| `--peer` | Add as peerDependency |\n| `--caret` | Use caret range (default for dependencies) |\n| `--tilde` | Use tilde range |\n\n## Removing Dependencies\n\n### Using rush remove\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Remove dependency\nrush remove -p lodash\n\n# Remove multiple\nrush remove -p lodash -p axios\n```\n\n## Decoupled Local Dependencies\n\n### Handling Cyclic Dependencies\n\nWhen two projects depend on each other:\n\n```json\n// In apps/my-app/rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"decoupledLocalDependencies\": [\"@my-scope/shared-lib\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Rush won't create symlink for `@my-scope/shared-lib`\n- Project uses version from npm (or registry)\n- Breaks cycle at build time\n\n**When to Use:**\n- Circular dependency detected\n- Temporary workaround during refactoring\n- Runtime dependency only (not build-time)\n\n**Caution:** Should be used sparingly - indicates architecture issue\n\n## Dependency Best Practices\n\n### 1. Always Use Rush Commands\n\n**Incorrect:**\n```bash\nnpm install lodash\npnpm add typescript\n```\n\n**Correct:**\n```bash\nrush add -p lodash\nrush add -p typescript\n```\n\n### 2. Use Workspace References\n\n**Incorrect:**\n```json\n{\n  \"dependencies\": {\n    \"my-lib\": \"file:../libraries/my-lib\"\n  }\n}\n```\n\n**Correct:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/my-lib\": \"^1.0.0\"\n  }\n}\n```\n\n### 3. Centralize Version Constraints\n\nUse `common-versions.json` instead of duplicating in each project:\n\n**Incorrect:**\n- Every project has `\"typescript\": \"~4.5.0\"` in package.json\n\n**Correct:**\n```json\n// common/config/subspaces/default/common-versions.json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  }\n}\n```\n\n### 4. Careful with implicitlyPreferredVersions\n\n**Good for:**\n- Stable maintenance branches\n- Released products\n- Teams that want strict version control\n\n**Bad for:**\n- Active development\n- Libraries\n- Frequent dependency updates\n\n## Troubleshooting Dependencies\n\n### Dependency Conflicts\n\n**Symptom:** Version conflicts or peer dependency warnings\n\n**Solutions:**\n```bash\n# Clean slate\nrush purge\nrush update --recheck\n\n# Check what depends on a package\nrush-pnpm why <package>\n\n# View dependency tree\nrush-pnpm list --depth 0\n```\n\n### Workspace Linking Issues\n\n**Symptom:** Local changes not reflected\n\n**Solutions:**\n```bash\n# Reinstall to recreate links\nrush install\n\n# Check links are correct\nls -la node_modules/@my-scope/\n```\n\n### Version Drift\n\n**Symptom:** Different projects using different versions\n\n**Solution:**\n```json\n// common-versions.json\n{\n  \"preferredVersions\": {\n    \"problematic-package\": \"exact-version\"\n  },\n  \"implicitlyPreferredVersions\": false  // Start with false\n}\n```\n\n## Subspace Dependency Isolation\n\nWhen using subspaces, each has its own:\n- `pnpm-lock.yaml` - Independent lock file\n- `common-versions.json` - Independent version constraints\n- Dependency tree - Isolated from other subspaces\n\n**Benefits:**\n- Team A can use React 17 while Team B uses React 18\n- Dependency updates in one subspace don't affect others\n- Faster installs (only affected subspace updated)\n\n**See:** `references/subspace.md` for detailed subspace configuration\n","isInternal":false,"tokens":1649,"sizeBytes":6584},{"name":"project-configuration.md","path":"skills/rushstack-best-practices/references/project-configuration.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/references/project-configuration.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# Project Configuration Reference\n\n## Standard Directory Structure\n\n```\n/\n├── common/                          # Rush common files directory\n│   ├── autoinstallers/              # Autoinstaller tool configuration\n│   ├── config/                      # Configuration files directory\n│   │   ├── rush/                    # Rush core configuration\n│   │   │   ├── command-line.json    # Command line configuration\n│   │   │   ├── build-cache.json     # Build cache configuration\n│   │   │   ├── experiments.json     # Feature experiments\n│   │   │   └── subspaces.json       # Subspace configuration\n│   │   └── subspaces/               # Subspace configuration\n│   │       └── <subspace-name>/     # Specific Subspace\n│   │           ├── pnpm-lock.yaml   # Subspace dependency lock file\n│   │           ├── .pnpmfile.cjs    # PNPM hook script\n│   │           ├── common-versions.json  # Subspace version configuration\n│   │           ├── pnpm-config.json # PNPM configuration\n│   │           └── repo-state.json  # Subspace state hash value\n│   ├── scripts/                     # Common scripts\n│   └── temp/                        # Temporary files\n├── apps/                            # Application projects\n│   └── <app-name>/                  # 2 levels deep required\n├── libraries/                       # Library projects\n│   └── <lib-name>/                  # 2 levels deep required\n├── tools/                           # Tool projects\n│   └── <tool-name>/                 # 2 levels deep required\n├── rush.json                        # Rush main configuration file\n└── pnpm-lock.yaml                   # Root lock file (if not using subspaces)\n```\n\n**Important:** Projects must be exactly 2 levels deep (`projectFolderMinDepth: 2`, `projectFolderMaxDepth: 2`)\n\n## rush.json\n\n**Purpose:** Main Rush configuration file\n\n**Location:** Repository root\n\n### Basic Structure\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.x.x\",\n\n  // Package Manager Selection (choose one)\n  \"pnpmVersion\": \"8.x.x\",\n  // \"npmVersion\": \"8.x.x\",\n  // \"yarnVersion\": \"1.x.x\",\n\n  // Project Folder Depth\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n\n  // Node.js Version Requirement\n  \"nodeSupportedVersionRange\": \">=14.15.0\",\n\n  // Projects Array\n  \"projects\": []\n}\n```\n\n### Project Configuration\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-project\",     // npm package name\n      \"projectFolder\": \"libraries/my-project\",    // Path from repo root\n      \"shouldPublish\": true,                      // Should this be published?\n      \"decoupledLocalDependencies\": [],           // For cyclic dependencies\n      \"subspaceName\": \"my-subspace\",              // Optional: subspace assignment\n      \"reviewCategory\": \"production\"              // Optional: review category\n    }\n  ]\n}\n```\n\n**Project Fields:**\n- `packageName` - The npm package name (must match package.json)\n- `projectFolder` - Relative path from repository root\n- `shouldPublish` - Whether package should be published to npm\n- `decoupledLocalDependencies` - Array of local packages to exclude from link (for cyclic deps)\n- `subspaceName` - Which subspace this project belongs to\n- `reviewCategory` - Category for review purposes\n\n### Git Policy\n\n```json\n{\n  \"gitPolicy\": {\n    \"allowedBranchRegExps\": [\n      \"main\",\n      \"release/*\",\n      \"hotfix/*\"\n    ],\n    \"sampleEmail\": \"example@example.com\"\n  }\n}\n```\n\n## command-line.json\n\n**Purpose:** Define custom Rush commands\n\n**Location:** `common/config/rush/command-line.json`\n\n### Bulk Commands\n\nExecute separately for each project:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build all projects\",\n  \"description\": \"Builds all projects in dependency order\",\n  \"enableParallelism\": true,\n  \"ignoreMissingScript\": false,\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n**Bulk Command Fields:**\n- `commandKind` - Must be \"bulk\"\n- `name` - Command name\n- `summary` - Short description\n- `description` - Long description\n- `enableParallelism` - Allow parallel execution\n- `ignoreMissingScript` - Don't fail if project lacks this script\n- `safeForSimultaneousRushProcesses` - Can multiple Rush instances run this?\n\n### Global Commands\n\nExecute once for entire repository:\n\n```json\n{\n  \"commandKind\": \"global\",\n  \"name\": \"deploy\",\n  \"summary\": \"Deploy application\",\n  \"description\": \"Deploys the application to production\",\n  \"shellCommand\": \"node common/scripts/deploy.js\",\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n### Parameters\n\nSix parameter types supported:\n\n**Flag Parameter:**\n```json\n{\n  \"parameterKind\": \"flag\",\n  \"longName\": \"--production\",\n  \"shortName\": \"-p\",\n  \"description\": \"Production mode\",\n  \"required\": false\n}\n```\n\n**String Parameter:**\n```json\n{\n  \"parameterKind\": \"string\",\n  \"longName\": \"--environment\",\n  \"shortName\": \"-e\",\n  \"description\": \"Environment name\",\n  \"required\": false,\n  \"defaultValue\": \"development\"\n}\n```\n\n**String List Parameter:**\n```json\n{\n  \"parameterKind\": \"stringList\",\n  \"longName\": \"--tag\",\n  \"description\": \"Tags for the build\",\n  \"required\": false\n}\n```\n\n**Choice Parameter:**\n```json\n{\n  \"parameterKind\": \"choice\",\n  \"longName\": \"--locale\",\n  \"description\": \"Locale for the build\",\n  \"alternatives\": [\"en-us\", \"zh-cn\", \"ja-jp\"],\n  \"required\": false,\n  \"defaultValue\": \"en-us\"\n}\n```\n\n**Integer Parameter:**\n```json\n{\n  \"parameterKind\": \"integer\",\n  \"longName\": \"--timeout\",\n  \"description\": \"Timeout in milliseconds\",\n  \"required\": false\n}\n```\n\n**Integer List Parameter:**\n```json\n{\n  \"parameterKind\": \"integerList\",\n  \"longName\": \"--pr\",\n  \"description\": \"Pull request numbers\",\n  \"required\": false\n}\n```\n\n## rush-project.json\n\n**Purpose:** Project-specific Rush configuration\n\n**Location:** `<project>/config/rush-project.json`\n\n### Build Cache Configuration\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Name of the operation (matches package.json script)\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n## Example Complete Configuration\n\n### rush.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.109.0\",\n  \"pnpmVersion\": \"8.15.0\",\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n  \"nodeSupportedVersionRange\": \">=20.9.0 <21.0.0\",\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    },\n    {\n      \"packageName\": \"@my-scope/my-lib\",\n      \"projectFolder\": \"libraries/my-lib\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    }\n  ]\n}\n```\n\n### command-line.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json\",\n  \"commands\": [\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"build\",\n      \"summary\": \"Build projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"test\",\n      \"summary\": \"Test projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"global\",\n      \"name\": \"clean\",\n      \"summary\": \"Clean build outputs\",\n      \"shellCommand\": \"node common/scripts/clean.js\"\n    }\n  ],\n  \"parameters\": [\n    {\n      \"parameterKind\": \"flag\",\n      \"longName\": \"--production\",\n      \"shortName\": \"-p\",\n      \"description\": \"Production mode\"\n    }\n  ]\n}\n```\n\n### Project config/rush-project.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n","isInternal":false,"tokens":2073,"sizeBytes":8341},{"name":"subspace.md","path":"skills/rushstack-best-practices/references/subspace.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/references/subspace.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# Subspace Reference\n\n## What is Subspace?\n\nSubspace is a Rush feature that allows multiple PNPM lock files in a single Rush monorepo.\n\n### Benefits\n\n**Dependency Isolation:**\n- Different teams can use different dependency versions\n- Team A can use React 17 while Team B uses React 18\n- Reduce risk from dependency updates\n\n**Performance:**\n- Only affected subspaces update during `rush install`\n- Faster dependency operations\n- Smaller lock files to manage\n\n**Team Autonomy:**\n- Teams manage their own dependencies\n- Less coordination needed\n- Independent release cycles\n\n### When to Use Subspace\n\n**Consider using subspace when:**\n- Repository has 50+ projects\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Performance issues with dependency operations\n- Teams want autonomy for dependency choices\n\n**Avoid subspace when:**\n- Small monorepo (< 20 projects)\n- Single team or unified dependencies\n- Simplicity is preferred\n- Just starting with Rush\n\n## Subspace Configuration\n\n### Step 1: Enable Subspaces\n\n**File:** `common/config/rush/subspaces.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/subspaces.schema.json\",\n  \"subspacesEnabled\": true,\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n```\n\n**Fields:**\n- `subspacesEnabled` - Enable/disable subspace feature\n- `subspaceNames` - List of subspace names\n\n### Step 2: Assign Projects to Subspaces\n\n**File:** `rush.json`\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@team-a/app-1\",\n      \"projectFolder\": \"apps/team-a/app-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-a/lib-1\",\n      \"projectFolder\": \"libraries/team-a/lib-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-b/app-1\",\n      \"projectFolder\": \"apps/team-b/app-1\",\n      \"subspaceName\": \"team-b\"\n    },\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    }\n  ]\n}\n```\n\n**Important:** Each project must belong to exactly one subspace\n\n### Step 3: Subspace Configuration Files\n\nEach subspace has its own configuration directory:\n\n```\ncommon/config/subspaces/\n├── team-a/\n│   ├── pnpm-lock.yaml          # Subspace lock file\n│   ├── common-versions.json    # Version constraints\n│   ├── pnpm-config.json        # PNPM settings\n│   └── repo-state.json         # State hash\n├── team-b/\n│   ├── pnpm-lock.yaml\n│   ├── common-versions.json\n│   ├── pnpm-config.json\n│   └── repo-state.json\n└── shared/\n    ├── pnpm-lock.yaml\n    ├── common-versions.json\n    ├── pnpm-config.json\n    └── repo-state.json\n```\n\n### Subspace common-versions.json\n\n**File:** `common/config/subspaces/<subspace>/common-versions.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json\",\n  \"preferredVersions\": {\n    // Subspace-specific versions\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {}\n}\n```\n\n**Each subspace can have:**\n- Different preferred versions\n- Different implicit preferences\n- Different allowed alternatives\n\n## Subspace Workflows\n\n### Initial Setup\n\n```bash\n# 1. Create subspace configuration\nmkdir -p common/config/subspaces/team-a\n\n# 2. Enable subspaces in subspaces.json\n# Edit: common/config/rush/subspaces.json\n\n# 3. Assign projects in rush.json\n# Edit: rush.json - add subspaceName to projects\n\n# 4. Run update to generate lock files\nrush update\n```\n\n### Adding Projects to Subspace\n\n```bash\n# 1. Create project directory\nmkdir -p apps/team-a/new-app\n\n# 2. Add to rush.json\n{\n  \"packageName\": \"@team-a/new-app\",\n  \"projectFolder\": \"apps/team-a/new-app\",\n  \"subspaceName\": \"team-a\"\n}\n\n# 3. Run update\nrush update\n```\n\n### Updating Dependencies\n\n**Update specific subspace:**\n```bash\n# Only updates team-a subspace\nrush update --to @team-a/app-1\n```\n\n**Update all subspaces:**\n```bash\n# Updates all subspaces\nrush update\n```\n\n## Subspace Isolation\n\n### Dependency Isolation\n\nEach subspace has its own dependency tree:\n\n**team-a subspace:**\n```\nteam-a/app-1/\n└── node_modules/\n    ├── react@17.0.2\n    └── typescript@4.5.0\n```\n\n**team-b subspace:**\n```\nteam-b/app-1/\n└── node_modules/\n    ├── react@18.2.0\n    └── typescript@5.0.0\n```\n\n### Cross-Subspace Dependencies\n\nProjects can depend on projects in other subspaces:\n\n```json\n// team-a/app-1 depends on shared/utils\n{\n  \"dependencies\": {\n    \"@shared/utils\": \"^1.0.0\"\n  }\n}\n```\n\n**Rush handles:**\n- Workspace linking across subspaces\n- Build order across subspaces\n- Version compatibility\n\n### Shared Dependencies\n\n**Pattern:** Create a \"shared\" subspace for common libraries\n\n```json\n// subspaces.json\n{\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n\n// rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    },\n    {\n      \"packageName\": \"@team-a/app\",\n      \"projectFolder\": \"apps/team-a/app\",\n      \"subspaceName\": \"team-a\"\n    }\n  ]\n}\n```\n\n## Subspace Best Practices\n\n### 1. Organize by Team or Domain\n\n**Good:**\n```\nsubspaceNames: [\"platform\", \"backend\", \"frontend\", \"shared\"]\n```\n\n**Bad:**\n```\nsubspaceNames: [\"subspace1\", \"subspace2\", \"subspace3\"]\n```\n\n### 2. Use Shared Subspace for Common Code\n\n**Pattern:**\n```\n- team-a: Team A's apps and libs\n- team-b: Team B's apps and libs\n- shared: Common libraries used by both teams\n```\n\n### 3. Minimize Cross-Subspace Dependencies\n\n**Good:**\n```\nteam-a/app → team-a/lib → shared/utils\nteam-b/app → team-b/lib → shared/utils\n```\n\n**Avoid:**\n```\nteam-a/app → team-b/lib  # Creates coupling\n```\n\n### 4. Keep Subspace Sizes Balanced\n\n**Good:**\n```\nteam-a: 20 projects\nteam-b: 18 projects\nshared: 10 projects\n```\n\n**Bad:**\n```\nteam-a: 2 projects\nteam-b: 50 projects  # Imbalanced\n```\n\n## Subspace Troubleshooting\n\n### Lock File Conflicts\n\n**Symptom:** Subspace lock files out of sync\n\n**Solution:**\n```bash\n# Regenerate all lock files\nrush update --purge\n```\n\n### Cross-Subspace Build Issues\n\n**Symptom:** Projects build in wrong order\n\n**Solution:**\n```bash\n# Verify dependency graph\nrush list --json\n\n# Force rebuild across subspaces\nrush rebuild\n```\n\n### Version Conflicts Across Subspaces\n\n**Symptom:** Different subspaces require different versions\n\n**Solution:**\n```bash\n# Update specific subspace\nrush update --to @team-a/app-1\n\n# Or use allowedAlternativeVersions\n```\n\n## Subspace vs No Subspace\n\n### No Subspace (Default)\n\n**Structure:**\n```\ncommon/\n├── config/rush/\n└── temp/\npnpm-lock.yaml (single lock file)\nrush.json\n```\n\n**Pros:**\n- Simpler setup\n- Easier to understand\n- Single source of truth for versions\n\n**Cons:**\n- All projects share same dependency tree\n- Dependency updates affect all projects\n- Slower installs for large repos\n\n### With Subspace\n\n**Structure:**\n```\ncommon/\n├── config/\n│   ├── rush/\n│   └── subspaces/\n│       ├── team-a/\n│       │   └── pnpm-lock.yaml\n│       └── team-b/\n│           └── pnpm-lock.yaml\n└── temp/\nrush.json\n```\n\n**Pros:**\n- Independent dependency trees\n- Faster installs (only affected subspaces)\n- Team autonomy\n\n**Cons:**\n- More complex setup\n- More files to manage\n- Potential for duplication\n\n## Migration to Subspace\n\n### Step-by-Step Migration\n\n1. **Plan your subspaces:**\n   ```json\n   {\n     \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n   }\n   ```\n\n2. **Enable subspaces:**\n   ```bash\n   # Edit common/config/rush/subspaces.json\n   ```\n\n3. **Assign projects:**\n   ```bash\n   # Edit rush.json - add subspaceName to each project\n   ```\n\n4. **Generate lock files:**\n   ```bash\n   rush update\n   ```\n\n5. **Verify:**\n   ```bash\n   # Check lock files created\n   ls common/config/subspaces/*/pnpm-lock.yaml\n   ```\n\n6. **Commit changes:**\n   ```bash\n   git add .\n   git commit -m \"Enable Rush subspaces\"\n   ```\n","isInternal":false,"tokens":2142,"sizeBytes":8070},{"name":"SKILL.md","path":"skills/rushstack-best-practices/SKILL.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/skills/rushstack-best-practices/SKILL.md","title":"rushstack-best-practices","category":"anthropic-skill","format":"markdown","content":"---\nname: rushstack-best-practices\ndescription: Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.\nlicense: MIT\nmetadata:\n  author: rushstack\n  version: \"1.0.0\"\n---\n\n# Rushstack Best Practices\n\nThis skill provides essential best practices for working with Rush monorepos. Following these guidelines ensures efficient dependency management, optimal build performance, and proper command usage.\n\n## Important Guidelines\n\n**When encountering unclear issues or questions:**\n\n1. **Never make assumptions** - If unsure about Rush behavior, configuration, or commands\n2. **Search official resources first** - Check documentation and existing issues before guessing\n3. **Provide accurate information** - Base responses on verified sources, not assumptions\n4. **Ask for clarification** - When the problem description is ambiguous or incomplete\n\n## Core Principles\n\n1. **Always use Rush commands** - Avoid npm/pnpm/yarn directly in a Rush monorepo\n2. **Use rushx for single projects** - Like npm run, but Rush-aware\n3. **rush install vs update** - install for CI, update after changes\n4. **rush build vs rebuild** - build for incremental, rebuild for clean\n5. **Projects at 2 levels** - Standard: apps/, libraries/, tools/\n6. **Selection flags reduce scope** - Use --to, --from, --impacted-by\n7. **Build cache is automatic** - Configure output folders to enable\n8. **Subspace for large repos** - Isolate dependencies when needed\n\n## Project Selection Best Practices\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. Use these selection flags to improve efficiency:\n\n### --to <PROJECT>\nSelect specified project and all its dependencies.\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project  # If project name is unique\nrush build --to .            # Use current directory's project\n```\n\n### --to-except <PROJECT>\nSelect all dependencies of specified project, but not the project itself.\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\nSelect specified project and all its downstream dependencies.\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\nSelect projects that might be affected by specified project changes, excluding dependencies.\n- Quick test of project change impacts\n- Use when dependency status is already correct\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\nSimilar to `--impacted-by`, but excludes specified project itself.\n- Project itself has been manually built\n- Only need to test downstream impacts\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\nOnly select specified project, completely ignore dependency relationships.\n- Dependency status is known to be correct\n- Combine with other selection parameters\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n\n## Command Usage Guidelines\n\n### Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. **`rush` command** - Execute operations affecting the entire repository or multiple projects\n   - Strict parameter validation and documentation\n   - Support for global and batch commands\n   - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing\n\n2. **`rushx` command** - Execute specific scripts for a single project\n   - Similar to `npm run` or `pnpm run`\n   - Uses Rush version selector for toolchain consistency\n   - Prepares shell environment based on Rush configuration\n   - Use cases: Running project-specific build scripts, tests, dev servers\n\n3. **`rush-pnpm` command** - Replace direct use of pnpm in Rush repository\n   - Sets correct PNPM workspace context\n   - Supports Rush-specific enhancements\n   - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n### Install vs Update\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush update` | Updates shrinkwrap, installs new dependencies | After cloning, after git pull, after modifying package.json |\n| `rush install` | Read-only install from existing shrinkwrap | CI/CD pipelines, ensuring version consistency |\n\n### Build vs Rebuild\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush build` | Incremental build, only changed projects | Daily development, quick validation |\n| `rush rebuild` | Clean build all projects | Complete rebuild needed, investigating issues |\n\n## Dependency Management\n\n### Package Manager Selection\nChoose in `rush.json`:\n```json\n{\n  \"pnpmVersion\": \"8.x.x\"     // Preferred - efficient, strict\n  // \"npmVersion\": \"8.x.x\"   // Alternative\n  // \"yarnVersion\": \"1.x.x\"  // Alternative\n}\n```\n\n### Version Constraints\nConfigure in `common/config/subspaces/<subspace>/common-versions.json`:\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n### Adding/Removing Dependencies\nAlways use Rush commands, not npm/pnpm directly:\n```bash\nrush add -p lodash --dev      # Add dev dependency\nrush add -p react --exact     # Add exact version\nrush remove -p lodash         # Remove dependency\n```\n\n## Build Cache Configuration\n\nConfigure in `<project>/config/rush-project.json`:\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\"]\n    }\n  ]\n}\n```\n\n**Cache Behavior:**\n- Cache stored in `common/temp/build-cache`\n- Invalidated by: source changes, dependency changes, env vars, command params\n- Parallel builds supported via `enableParallelism`\n\n## Troubleshooting\n\n### Dependency Issues\n- Avoid `npm`, `pnpm`, `yarn` - use Rush commands\n- Run `rush purge` to clean environment\n- Run `rush update --recheck` to force dependency check\n\n### Build Issues\n- Use `rush rebuild` to skip cache\n- Check `rushx build` output for specific errors\n- Use `--verbose` for detailed logs\n\n### Performance Issues\n- Use selection flags (`--to`, `--from`, etc.) to reduce scope\n- Enable build cache in rush-project.json\n- Consider subspace for very large monorepos\n\n## Subspace for Large Monorepos\n\n**What is Subspace:**\n- Allows multiple PNPM lock files in one Rush monorepo\n- Enables independent dependency management per team/project group\n- Reduces risk from dependency updates\n- Improves install/update performance\n\n**When to Use:**\n- Large monorepos (50+ projects)\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Need for faster dependency operations\n\n## Official Resources\n\n### Documentation & References\n\n**Official Websites:**\n- [RushStack.io](https://rushstack.io/) - Main documentation site\n- [Rush.js.io](https://rushjs.io/) - Rush build orchestrator documentation\n- [Heft.rushstack.io](https://heft.rushstack.io/) - Heft build tool documentation\n- [API Extractor](https://api-extractor.com/) - API documentation and rollups\n\n**Search Existing Issues:**\n- Before creating new issues, search [rush-stack-builds issues](https://github.com/microsoft/rushstack/issues)\n\n### When to Search vs. Ask\n\n**Search these resources first when:**\n- Encountering error messages\n- Unsure about configuration options\n- Looking for examples or tutorials\n- Need to understand Rush behavior\n\n**Ask the user for clarification when:**\n- The specific use case is unclear\n- Multiple approaches are possible\n- Context is missing to provide accurate guidance\n- The issue might be environment-specific\n\n## Detailed References\n\nFor expanded information on specific domains, see:\n- `references/core-commands.md` - Detailed command reference\n- `references/project-configuration.md` - Configuration file specifications\n- `references/dependency-management.md` - Advanced dependency patterns\n- `references/build-system.md` - Build optimization and caching\n- `references/subspace.md` - Subspace setup and usage\n","frontmatter":{"name":"rushstack-best-practices","description":"Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.","license":"MIT","metadata":{"author":"rushstack","version":"1.0.0"}},"isInternal":false,"tokens":1943,"sizeBytes":8702},{"name":"heft-plugin.json","path":"apps/heft/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/apps/heft/heft-plugin.json","title":"heft Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"copy-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/CopyFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/copy-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"delete-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/DeleteFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/delete-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"node-service-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/NodeServicePlugin\",\n      \"parameterScope\": \"node-service\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes. This parameter is only available when running in watch mode.\"\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"run-script-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/RunScriptPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/run-script-options.schema.json\"\n    },\n    {\n      \"entryPoint\": \"./lib-commonjs/plugins/SetEnvironmentVariablesPlugin\",\n      \"pluginName\": \"set-environment-variables-plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/set-environment-variables-plugin.schema.json\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","lifecyclePlugins":[],"taskPlugins":[{"pluginName":"copy-files-plugin","entryPoint":"./lib-commonjs/plugins/CopyFilesPlugin","optionsSchema":"./lib-commonjs/schemas/copy-files-options.schema.json"},{"pluginName":"delete-files-plugin","entryPoint":"./lib-commonjs/plugins/DeleteFilesPlugin","optionsSchema":"./lib-commonjs/schemas/delete-files-options.schema.json"},{"pluginName":"node-service-plugin","entryPoint":"./lib-commonjs/plugins/NodeServicePlugin","parameterScope":"node-service","parameters":[{"longName":"--serve","parameterKind":"flag","description":"Start a local web server for testing purposes. This parameter is only available when running in watch mode."}]},{"pluginName":"run-script-plugin","entryPoint":"./lib-commonjs/plugins/RunScriptPlugin","optionsSchema":"./lib-commonjs/schemas/run-script-options.schema.json"},{"entryPoint":"./lib-commonjs/plugins/SetEnvironmentVariablesPlugin","pluginName":"set-environment-variables-plugin","optionsSchema":"./lib-commonjs/schemas/set-environment-variables-plugin.schema.json"}]},"isInternal":false,"tokens":321,"sizeBytes":1389},{"name":"heft-plugin.json","path":"build-tests/heft-example-lifecycle-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/heft-example-lifecycle-plugin/heft-plugin.json","title":"heft-example-lifecycle-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [\n    {\n      \"pluginName\": \"example-lifecycle-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","lifecyclePlugins":[{"pluginName":"example-lifecycle-plugin","entryPoint":"./lib-commonjs/index"}]},"isInternal":false,"tokens":60,"sizeBytes":229},{"name":"heft-plugin.json","path":"build-tests/heft-example-plugin-01/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/heft-example-plugin-01/heft-plugin.json","title":"heft-example-plugin-01 Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-01\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"example-plugin-01","entryPoint":"./lib-commonjs/index"}]},"isInternal":false,"tokens":59,"sizeBytes":217},{"name":"heft-plugin.json","path":"build-tests/heft-example-plugin-02/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/heft-example-plugin-02/heft-plugin.json","title":"heft-example-plugin-02 Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-02\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"example-plugin-02","entryPoint":"./lib-commonjs/index"}]},"isInternal":false,"tokens":59,"sizeBytes":217},{"name":"heft-plugin.json","path":"build-tests/heft-parameter-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/heft-parameter-plugin/heft-plugin.json","title":"heft-parameter-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"heft-parameter-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\",\n      \"parameterScope\": \"heft-parameter-plugin\",\n      \"parameters\": [\n        {\n          \"longName\": \"--custom-parameter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Test running a custom flag parameter\"\n        },\n        {\n          \"longName\": \"--custom-integer-parameter\",\n          \"parameterKind\": \"integer\",\n          \"description\": \"Test running a custom integer parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-integer-list-parameter\",\n          \"parameterKind\": \"integerList\",\n          \"description\": \"Test running a custom integer list parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-string-parameter\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"TEXT\",\n          \"description\": \"Test running a custom string parameter\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--custom-string-list-parameter\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"LIST_ITEM\",\n          \"description\": \"Test running a custom string list parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-parameter\",\n          \"parameterKind\": \"choice\",\n          \"alternatives\": [\n            {\n              \"name\": \"red\",\n              \"description\": \"The red choice\"\n            },\n            {\n              \"name\": \"blue\",\n              \"description\": \"The blue choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-list-parameter\",\n          \"parameterKind\": \"choiceList\",\n          \"alternatives\": [\n            {\n              \"name\": \"totodile\",\n              \"description\": \"The totodile choice\"\n            },\n            {\n              \"name\": \"jynx\",\n              \"description\": \"The jynx choice\"\n            },\n            {\n              \"name\": \"gudetama\",\n              \"description\": \"The gudetama choice\"\n            },\n            {\n              \"name\": \"impidimp\",\n              \"description\": \"The impidimp choice\"\n            },\n            {\n              \"name\": \"wobbuffet\",\n              \"description\": \"The wobbuffet choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice list parameter\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"heft-parameter-plugin","entryPoint":"./lib-commonjs/index","parameterScope":"heft-parameter-plugin","parameters":[{"longName":"--custom-parameter","parameterKind":"flag","description":"Test running a custom flag parameter"},{"longName":"--custom-integer-parameter","parameterKind":"integer","description":"Test running a custom integer parameter","argumentName":"INTEGER"},{"longName":"--custom-integer-list-parameter","parameterKind":"integerList","description":"Test running a custom integer list parameter","argumentName":"INTEGER"},{"longName":"--custom-string-parameter","parameterKind":"string","argumentName":"TEXT","description":"Test running a custom string parameter","required":true},{"longName":"--custom-string-list-parameter","parameterKind":"stringList","argumentName":"LIST_ITEM","description":"Test running a custom string list parameter"},{"longName":"--custom-choice-parameter","parameterKind":"choice","alternatives":[{"name":"red","description":"The red choice"},{"name":"blue","description":"The blue choice"}],"description":"Test running a custom choice parameter"},{"longName":"--custom-choice-list-parameter","parameterKind":"choiceList","alternatives":[{"name":"totodile","description":"The totodile choice"},{"name":"jynx","description":"The jynx choice"},{"name":"gudetama","description":"The gudetama choice"},{"name":"impidimp","description":"The impidimp choice"},{"name":"wobbuffet","description":"The wobbuffet choice"}],"description":"Test running a custom choice list parameter"}]}]},"isInternal":false,"tokens":544,"sizeBytes":2591},{"name":"rush-mcp-plugin.json","path":"build-tests/rush-mcp-example-plugin/rush-mcp-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/rush-mcp-example-plugin/rush-mcp-plugin.json","title":"rush-mcp-example-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"/**\n * Every plugin package must contain a \"rush-mcp-plugin.json\" manifest in the top-level folder\n * (next to package.json).\n */\n{\n  /**\n   * A name that uniquely identifies your plugin.  Generally this should be the same name as\n   * the NPM package.  If two NPM packages have the same pluginName, they cannot be loaded together.\n   */\n  \"pluginName\": \"rush-mcp-example-plugin\",\n\n  /**\n   * (OPTIONAL) Indicates that your plugin accepts a config file.  The MCP server will load this\n   * file and provide it to the plugin.\n   *\n   * The config file path will be `<rush-repo>/common/config/rush-mcp/<plugin-name>.json`.\n   */\n  \"configFileSchema\": \"./lib-commonjs/rush-mcp-example-plugin.schema.json\",\n\n  /**\n   * The entry point, whose default export should be a class that implements\n   */\n  \"entryPoint\": \"./lib-commonjs/index.js\"\n}\n","isInternal":false,"tokens":208,"sizeBytes":837},{"name":"rush-redis-cobuild-plugin.json","path":"build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json","title":"rush-plugins Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n","frontmatter":{"url":"redis://localhost:6379","passwordEnvironmentVariable":"REDIS_PASS"},"isInternal":false,"tokens":24,"sizeBytes":85},{"name":"rush-redis-cobuild-plugin.json","path":"build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/sharded-repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/sharded-repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json","title":"rush-plugins Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n","frontmatter":{"url":"redis://localhost:6379","passwordEnvironmentVariable":"REDIS_PASS"},"isInternal":false,"tokens":24,"sizeBytes":85},{"name":"rush-serve-plugin.json","path":"common/config/rush-plugins/rush-serve-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/common/config/rush-plugins/rush-serve-plugin.json","title":"rush-plugins Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-serve-plugin-options.schema.json\",\n  \"phasedCommands\": [\"start\"],\n  \"portParameterLongName\": \"--port\",\n  \"buildStatusWebSocketPath\": \"/ws\",\n  \"logServePath\": \"/logs\",\n  \"globalRouting\": [\n    {\n      \"workspaceRelativeFolder\": \"rush-plugins/rush-serve-plugin/lib-esm/dashboard\",\n      \"servePath\": \"/dashboard\",\n      \"immutable\": false\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/rush/v5/rush-serve-plugin-options.schema.json","phasedCommands":["start"],"portParameterLongName":"--port","buildStatusWebSocketPath":"/ws","logServePath":"/logs","globalRouting":[{"workspaceRelativeFolder":"rush-plugins/rush-serve-plugin/lib-esm/dashboard","servePath":"/dashboard","immutable":false}]},"isInternal":false,"tokens":111,"sizeBytes":423},{"name":"heft-plugin.json","path":"heft-plugins/heft-api-extractor-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-api-extractor-plugin/heft-plugin.json","title":"heft-api-extractor-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"api-extractor-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ApiExtractorPlugin\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"api-extractor-plugin","entryPoint":"./lib-commonjs/ApiExtractorPlugin"}]},"isInternal":false,"tokens":62,"sizeBytes":233},{"name":"README.md","path":"heft-plugins/heft-api-extractor-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-api-extractor-plugin/README.md","title":"heft-api-extractor-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-api-extractor-plugin\n\nThis is a Heft plugin for running API Extractor.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md) - Find\nout what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":142,"sizeBytes":535},{"name":"heft-plugin.json","path":"heft-plugins/heft-dev-cert-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-dev-cert-plugin/heft-plugin.json","title":"heft-dev-cert-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"trust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TrustDevCertificatePlugin\"\n    },\n    {\n      \"pluginName\": \"untrust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/UntrustDevCertificatePlugin\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","lifecyclePlugins":[],"taskPlugins":[{"pluginName":"trust-dev-certificate-plugin","entryPoint":"./lib-commonjs/TrustDevCertificatePlugin"},{"pluginName":"untrust-dev-certificate-plugin","entryPoint":"./lib-commonjs/UntrustDevCertificatePlugin"}]},"isInternal":false,"tokens":105,"sizeBytes":407},{"name":"README.md","path":"heft-plugins/heft-dev-cert-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-dev-cert-plugin/README.md","title":"heft-dev-cert-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-dev-cert-plugin\n\nThis is a Heft plugin to manage development certificates for local serve.\nAutomatically configures webpack-dev-server to use https in serve mode.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":106,"sizeBytes":432},{"name":"heft-plugin.json","path":"heft-plugins/heft-isolated-typescript-transpile-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-isolated-typescript-transpile-plugin/heft-plugin.json","title":"heft-isolated-typescript-transpile-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"swc-isolated-transpile-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SwcIsolatedTranspilePlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/swc-isolated-transpile-plugin.schema.json\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"swc-isolated-transpile-plugin","entryPoint":"./lib-commonjs/SwcIsolatedTranspilePlugin","optionsSchema":"./lib-commonjs/schemas/swc-isolated-transpile-plugin.schema.json"}]},"isInternal":false,"tokens":89,"sizeBytes":341},{"name":"README.md","path":"heft-plugins/heft-isolated-typescript-transpile-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-isolated-typescript-transpile-plugin/README.md","title":"heft-isolated-typescript-transpile-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-isolated-typescript-transpile-plugin\n\nThis is a Heft plugin for using swc as an isolated module transpiler\nduring the \"build\" stage.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":110,"sizeBytes":423},{"name":"heft-plugin.json","path":"heft-plugins/heft-jest-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-jest-plugin/heft-plugin.json","title":"heft-jest-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"jest-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JestPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-jest-plugin.schema.json\",\n\n      \"parameterScope\": \"jest\",\n      \"parameters\": [\n        {\n          \"longName\": \"--config\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which Jest configuration file will be used to run Jest tests.  If not specified, it will default to \\\"config/jest.config.json\\\".  This corresponds to the \\\"--config\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--debug-heft-reporter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Normally Heft installs a custom Jest reporter so that test results are presented consistently with other task logging.  If you suspect a problem with the HeftJestReporter, specify \\\"--debug-heft-reporter\\\" to temporarily disable it so that you can compare with how Jest's default reporter would have presented it.  Include this output in your bug report.  Do not use \\\"--debug-heft-reporter\\\" in production.\"\n        },\n        {\n          \"longName\": \"--detect-open-handles\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Attempt to collect and print open handles preventing Jest from exiting cleanly.  This option has a significant performance penalty and should only be used for debugging.  This corresponds to the \\\"--detectOpenHandles\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--disable-code-coverage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Disable any configured code coverage.  If code coverage is not configured, this parameter has no effect.\"\n        },\n        {\n          \"longName\": \"--find-related-tests\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"SOURCE_FILE\",\n          \"description\": \"Find and run the tests that cover a source file that was passed in as an argument.  This corresponds to the \\\"--findRelatedTests\\\" parameter in Jest's documentation. This parameter is not compatible with watch mode.\"\n        },\n        {\n          \"longName\": \"--log-heap-usage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Logs the heap usage after every test. Useful to debug memory leaks. Use together with --expose-gc in node.\"\n        },\n        {\n          \"longName\": \"--max-workers\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"COUNT_OR_PERCENTAGE\",\n          \"description\": \"Use this parameter to control maximum number of worker processes tests are allowed to use.  This parameter is similar to the parameter noted in the Jest documentation, and can either be an integer representing the number of workers to spawn when running tests, or can be a string representing a percentage of the available CPUs on the machine to utilize. Example values: \\\"3\\\", \\\"25%%\\\"\"\n        },\n        {\n          \"longName\": \"--silent\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Prevent tests from printing messages through the console.  This corresponds to the \\\"--silent\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-name-pattern\",\n          \"shortName\": \"-t\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a name that matches a regular expression.  The REGEXP is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.  This corresponds to the \\\"--testNamePattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-ignore-patterns\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Avoid running tests with a source file path that matches one ore more regular expressions.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathIgnorePatterns\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-pattern\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a source file path that matches a regular expression.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathPattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-timeout-ms\",\n          \"parameterKind\": \"integer\",\n          \"argumentName\": \"TIMEOUT\",\n          \"description\": \"Change the default timeout for tests; if a test doesn't complete within this many milliseconds, it will fail.  Individual tests can override the default.  If unspecified, the default is normally 5000 ms.  This corresponds to the \\\"--testTimeout\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--update-snapshots\",\n          \"shortName\": \"-u\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Update Jest snapshots while running the tests.  This corresponds to the \\\"--updateSnapshots\\\" parameter in Jest.\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"jest-plugin","entryPoint":"./lib-commonjs/JestPlugin","optionsSchema":"./lib-commonjs/schemas/heft-jest-plugin.schema.json","parameterScope":"jest","parameters":[{"longName":"--config","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which Jest configuration file will be used to run Jest tests.  If not specified, it will default to \"config/jest.config.json\".  This corresponds to the \"--config\" parameter in Jest's documentation."},{"longName":"--debug-heft-reporter","parameterKind":"flag","description":"Normally Heft installs a custom Jest reporter so that test results are presented consistently with other task logging.  If you suspect a problem with the HeftJestReporter, specify \"--debug-heft-reporter\" to temporarily disable it so that you can compare with how Jest's default reporter would have presented it.  Include this output in your bug report.  Do not use \"--debug-heft-reporter\" in production."},{"longName":"--detect-open-handles","parameterKind":"flag","description":"Attempt to collect and print open handles preventing Jest from exiting cleanly.  This option has a significant performance penalty and should only be used for debugging.  This corresponds to the \"--detectOpenHandles\" parameter in Jest's documentation."},{"longName":"--disable-code-coverage","parameterKind":"flag","description":"Disable any configured code coverage.  If code coverage is not configured, this parameter has no effect."},{"longName":"--find-related-tests","parameterKind":"stringList","argumentName":"SOURCE_FILE","description":"Find and run the tests that cover a source file that was passed in as an argument.  This corresponds to the \"--findRelatedTests\" parameter in Jest's documentation. This parameter is not compatible with watch mode."},{"longName":"--log-heap-usage","parameterKind":"flag","description":"Logs the heap usage after every test. Useful to debug memory leaks. Use together with --expose-gc in node."},{"longName":"--max-workers","parameterKind":"string","argumentName":"COUNT_OR_PERCENTAGE","description":"Use this parameter to control maximum number of worker processes tests are allowed to use.  This parameter is similar to the parameter noted in the Jest documentation, and can either be an integer representing the number of workers to spawn when running tests, or can be a string representing a percentage of the available CPUs on the machine to utilize. Example values: \"3\", \"25%%\""},{"longName":"--silent","parameterKind":"flag","description":"Prevent tests from printing messages through the console.  This corresponds to the \"--silent\" parameter in Jest's documentation."},{"longName":"--test-name-pattern","shortName":"-t","parameterKind":"string","argumentName":"REGEXP","description":"Run only tests with a name that matches a regular expression.  The REGEXP is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.  This corresponds to the \"--testNamePattern\" parameter in Jest's documentation."},{"longName":"--test-path-ignore-patterns","parameterKind":"string","argumentName":"REGEXP","description":"Avoid running tests with a source file path that matches one ore more regular expressions.  On Windows you will need to use \"/\" instead of \"\\\".  This corresponds to the \"--testPathIgnorePatterns\" parameter in Jest's documentation."},{"longName":"--test-path-pattern","parameterKind":"string","argumentName":"REGEXP","description":"Run only tests with a source file path that matches a regular expression.  On Windows you will need to use \"/\" instead of \"\\\".  This corresponds to the \"--testPathPattern\" parameter in Jest's documentation."},{"longName":"--test-timeout-ms","parameterKind":"integer","argumentName":"TIMEOUT","description":"Change the default timeout for tests; if a test doesn't complete within this many milliseconds, it will fail.  Individual tests can override the default.  If unspecified, the default is normally 5000 ms.  This corresponds to the \"--testTimeout\" parameter in Jest's documentation."},{"longName":"--update-snapshots","shortName":"-u","parameterKind":"flag","description":"Update Jest snapshots while running the tests.  This corresponds to the \"--updateSnapshots\" parameter in Jest."}]}]},"isInternal":false,"tokens":1140,"sizeBytes":5317},{"name":"README.md","path":"heft-plugins/heft-jest-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-jest-plugin/README.md","title":"heft-jest-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-jest-plugin\n\nThis is a Heft plugin for running Jest.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-jest-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":139,"sizeBytes":510},{"name":"heft-plugin.json","path":"heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json","title":"heft-json-schema-typings-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"json-schema-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JsonSchemaTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-json-schema-typings-plugin.schema.json\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"json-schema-typings-plugin","entryPoint":"./lib-commonjs/JsonSchemaTypingsPlugin","optionsSchema":"./lib-commonjs/schemas/heft-json-schema-typings-plugin.schema.json"}]},"isInternal":false,"tokens":88,"sizeBytes":337},{"name":"README.md","path":"heft-plugins/heft-json-schema-typings-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-json-schema-typings-plugin/README.md","title":"heft-json-schema-typings-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-json-schema-typings-plugin\n\nThis is a Heft plugin that generates TypeScript `.d.ts` typings from JSON Schema files\n(files matching `*.schema.json`). It uses the\n[json-schema-to-typescript](https://www.npmjs.com/package/json-schema-to-typescript) library\nto produce type declarations that can be imported alongside the schema at build time.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-json-schema-typings-plugin --dev\n   ```\n\n2. Load the plugin in your project's **heft.json** configuration:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"json-schema-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-json-schema-typings-plugin\",\n               \"options\": {\n                 // (Optional) Defaults shown below\n                 // \"srcFolder\": \"src\",\n                 // \"generatedTsFolders\": [\"temp/schemas-ts\"],\n                 // \"formatWithPrettier\": false\n               }\n             }\n           }\n         }\n       }\n     }\n   }\n   ```\n\n3. Place your `*.schema.json` files under the source folder (default: `src/`).\n   The plugin will generate a corresponding `.d.ts` file for each schema.\n\n## Plugin options\n\n| Option               | Type       | Default              | Description                                                                      |\n| -------------------- | ---------- | -------------------- | -------------------------------------------------------------------------------- |\n| `srcFolder`          | `string`   | `\"src\"`              | Source directory to scan for `*.schema.json` files.                              |\n| `generatedTsFolders` | `string[]` | `[\"temp/schemas-ts\"]`| Output directories for the generated `.d.ts` files.                             |\n| `formatWithPrettier` | `boolean`  | `false`              | When `true`, format generated typings with [prettier](https://prettier.io/). Requires `prettier` as an installed dependency. |\n\n## Vendor extension: `x-tsdoc-release-tag`\n\nThe plugin recognises a custom vendor extension property called **`x-tsdoc-release-tag`** in\nyour JSON Schema files. When present at the top level of a schema, its value (a\n[TSDoc release tag](https://tsdoc.org/pages/spec/tag_kinds/#release-tags) such as `@public`,\n`@beta`, `@alpha`, or `@internal`) is injected into JSDoc comments of every exported\ndeclaration in the generated `.d.ts` file.\n\nThis is useful when the generated types are re-exported from a package entry point that is\nprocessed by [API Extractor](https://api-extractor.com/), which uses release tags to\ndetermine the API surface visibility.\n\n### Example\n\n**my-config.schema.json**\n\n```json\n{\n  \"x-tsdoc-release-tag\": \"@public\",\n  \"title\": \"My Config\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" }\n  },\n  \"additionalProperties\": false\n}\n```\n\n**Generated output (my-config.schema.json.d.ts)**\n\n```ts\n/**\n * @public\n */\nexport interface MyConfig {\n  name?: string;\n}\n```\n\nThe `x-tsdoc-release-tag` property is stripped from the schema before type generation, so it\ndoes not affect the shape of the emitted types. The value must be a single lowercase word\nstarting with `@` (for example `@public` or `@beta`); invalid values cause a build error.\n\n> **Note:** `@rushstack/node-core-library`'s `JsonSchema` class accepts vendor extension\n> keywords matching the `x-<vendor>-<keyword>` pattern by default, so schema files containing\n> `x-tsdoc-release-tag` will validate without any additional configuration.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":973,"sizeBytes":4139},{"name":"heft-plugin.json","path":"heft-plugins/heft-lint-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-lint-plugin/heft-plugin.json","title":"heft-lint-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"lint-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LintPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-lint-plugin.schema.json\",\n\n      \"parameterScope\": \"lint\",\n      \"parameters\": [\n        {\n          \"longName\": \"--fix\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Fix all encountered rule violations where the violated rule provides a fixer. When running in production mode, fixes will be disabled regardless of this parameter.\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"lint-plugin","entryPoint":"./lib-commonjs/LintPlugin","optionsSchema":"./lib-commonjs/schemas/heft-lint-plugin.schema.json","parameterScope":"lint","parameters":[{"longName":"--fix","parameterKind":"flag","description":"Fix all encountered rule violations where the violated rule provides a fixer. When running in production mode, fixes will be disabled regardless of this parameter."}]}]},"isInternal":false,"tokens":147,"sizeBytes":635},{"name":"README.md","path":"heft-plugins/heft-lint-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-lint-plugin/README.md","title":"heft-lint-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-lint-plugin\n\nThis is a Heft plugin to run ESLint or TSLint. Intended for use with @rushstack/heft-typescript-plugin.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-lint-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":158,"sizeBytes":574},{"name":"heft-plugin.json","path":"heft-plugins/heft-localization-typings-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-localization-typings-plugin/heft-plugin.json","title":"heft-localization-typings-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"localization-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LocalizationTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-localization-typings-plugin.schema.json\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"localization-typings-plugin","entryPoint":"./lib-commonjs/LocalizationTypingsPlugin","optionsSchema":"./lib-commonjs/schemas/heft-localization-typings-plugin.schema.json"}]},"isInternal":false,"tokens":87,"sizeBytes":341},{"name":"README.md","path":"heft-plugins/heft-localization-typings-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-localization-typings-plugin/README.md","title":"heft-localization-typings-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-localization-typings-plugin\n\nHeft plugin for generating types for localization files.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-localization-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":94,"sizeBytes":367},{"name":"heft-plugin.json","path":"heft-plugins/heft-rspack-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-rspack-plugin/heft-plugin.json","title":"heft-rspack-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"rspack-plugin\",\n      \"entryPoint\": \"./lib-commonjs/RspackPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-rspack-plugin.schema.json\",\n\n      \"parameterScope\": \"rspack\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes using @rspack/dev-server.  This parameter is only available when running in watch mode.\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"rspack-plugin","entryPoint":"./lib-commonjs/RspackPlugin","optionsSchema":"./lib-commonjs/schemas/heft-rspack-plugin.schema.json","parameterScope":"rspack","parameters":[{"longName":"--serve","parameterKind":"flag","description":"Start a local web server for testing purposes using @rspack/dev-server.  This parameter is only available when running in watch mode."}]}]},"isInternal":false,"tokens":149,"sizeBytes":615},{"name":"README.md","path":"heft-plugins/heft-rspack-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-rspack-plugin/README.md","title":"heft-rspack-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-rspack-plugin\n\nThis is a Heft plugin for using Rspack.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-rspack-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":143,"sizeBytes":514},{"name":"heft-plugin.json","path":"heft-plugins/heft-sass-load-themed-styles-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-sass-load-themed-styles-plugin/heft-plugin.json","title":"heft-sass-load-themed-styles-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"sass-load-themed-styles-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SassLoadThemedStylesPlugin.js\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"sass-load-themed-styles-plugin","entryPoint":"./lib-commonjs/SassLoadThemedStylesPlugin.js"}]},"isInternal":false,"tokens":68,"sizeBytes":254},{"name":"README.md","path":"heft-plugins/heft-sass-load-themed-styles-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-sass-load-themed-styles-plugin/README.md","title":"heft-sass-load-themed-styles-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-sass-load-themed-styles-plugin\n\nThis is a Heft plugin to augment SASS processing with functionality to replace load-themed-styles theme expressions of the form\n```\n[theme:<tokenName>, default:<default>]\n```\ne.g.\n```\n[theme:someColor, default:#fc0]\n```\n\nWith css variable references of the form:\n```css\nvar(--<tokenName>, <default>)\n```\ne.g.\n```css\nvar(--someColor, #fc0>)\n```\n\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-sass-load-themed-styles-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":183,"sizeBytes":661},{"name":"heft-plugin.json","path":"heft-plugins/heft-sass-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-sass-plugin/heft-plugin.json","title":"heft-sass-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"sass-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SassPlugin.js\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"sass-plugin","entryPoint":"./lib-commonjs/SassPlugin.js"}]},"isInternal":false,"tokens":60,"sizeBytes":219},{"name":"README.md","path":"heft-plugins/heft-sass-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-sass-plugin/README.md","title":"heft-sass-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-sass-plugin\n\nA [Heft](https://heft.rushstack.io/) plugin that compiles SCSS/Sass files during the build phase. It uses [`sass-embedded`](https://www.npmjs.com/package/sass-embedded) under the hood and produces:\n\n- **TypeScript type definitions** (`.d.ts`) for CSS modules, giving you typed access to class names and `:export` values\n- **Compiled CSS files** (optional) in one or more output folders\n- **JavaScript shims** (optional) that re-export the CSS for consumption in CommonJS or ESM environments\n\n> If `sass-embedded` is not supported on your platform, you can substitute it with the [`sass`](https://www.npmjs.com/package/sass) package using an npm alias.\n\n## Links\n\n- [CHANGELOG.md](https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-sass-plugin/CHANGELOG.md) - Find out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n---\n\n## Setup\n\n### 1. Add the plugin to your project\n\nIn your project's `package.json`:\n\n```json\n{\n  \"devDependencies\": {\n    \"@rushstack/heft\": \"...\",\n    \"@rushstack/heft-sass-plugin\": \"...\"\n  }\n}\n```\n\n### 2. Register the plugin in `config/heft.json`\n\nThe `sass` task must run before `typescript` so that the generated `.d.ts` files are available when TypeScript compiles your project.\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n  \"phasesByName\": {\n    \"build\": {\n      \"tasksByName\": {\n        \"sass\": {\n          \"taskPlugin\": {\n            \"pluginPackage\": \"@rushstack/heft-sass-plugin\"\n          }\n        },\n\n        \"typescript\": {\n          \"taskDependencies\": [\"sass\"],\n          \"taskPlugin\": {\n            \"pluginPackage\": \"@rushstack/heft-typescript-plugin\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\n### 3. Create `config/sass.json`\n\nA minimal config uses all defaults:\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json\"\n}\n```\n\nA more complete setup that emits CSS and shims for both ESM and CommonJS:\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-sass-plugin.schema.json\",\n  \"cssOutputFolders\": [\n    { \"folder\": \"lib-esm\", \"shimModuleFormat\": \"esnext\" },\n    { \"folder\": \"lib-commonjs\", \"shimModuleFormat\": \"commonjs\" }\n  ],\n  \"fileExtensions\": [\".module.scss\", \".module.sass\"],\n  \"nonModuleFileExtensions\": [\".global.scss\", \".global.sass\"],\n  \"silenceDeprecations\": [\"mixed-decls\", \"import\", \"global-builtin\", \"color-functions\"]\n}\n```\n\n### 4. Add generated files to `tsconfig.json`\n\nPoint TypeScript at the generated type definitions by including the `generatedTsFolder` in your `tsconfig.json`:\n\n```json\n{\n  \"compilerOptions\": {\n    \"paths\": {}\n  },\n  \"include\": [\"src\", \"temp/sass-ts\"]\n}\n```\n\n## CSS Modules vs. global stylesheets\n\nThe plugin distinguishes between two kinds of files based on their extension:\n\n**CSS modules** (extensions listed in `fileExtensions`, default: `.sass`, `.scss`, `.css`):\n- Processed with [`postcss-modules`](https://www.npmjs.com/package/postcss-modules)\n- Class names and `:export` values become properties in a generated TypeScript interface\n- The generated `.d.ts` exports a typed `styles` object as its default export\n\n**Global stylesheets** (extensions listed in `nonModuleFileExtensions`, default: `.global.sass`, `.global.scss`, `.global.css`):\n- Compiled to plain CSS with no module scoping\n- The generated `.d.ts` is a side-effect-only module (`export {}`)\n- Useful for resets, themes, and base styles\n\n**Partials** (filenames starting with `_`):\n- Never compiled to output files; they are only meant to be `@use`d or `@forward`ed by other files\n\n### Example: CSS module\n\n```scss\n// src/Button.module.scss\n.root {\n  background: blue;\n}\n.label {\n  font-size: 14px;\n}\n:export {\n  brandColor: #0078d4;\n}\n```\n\nGenerated `temp/sass-ts/Button.module.scss.d.ts`:\n\n```typescript\ninterface IStyles {\n  root: string;\n  label: string;\n  brandColor: string;\n}\ndeclare const styles: IStyles;\nexport default styles;\n```\n\nIn your TypeScript source:\n\n```typescript\nimport styles from './Button.module.scss';\n// styles.root, styles.label, styles.brandColor are all typed strings\n```\n\n## Configuration reference\n\nAll options are set in `config/sass.json`. Every option is optional.\n\n| Option | Default | Description |\n|---|---|---|\n| `srcFolder` | `\"src/\"` | Root directory that is scanned for SCSS files |\n| `generatedTsFolder` | `\"temp/sass-ts/\"` | Output directory for generated `.d.ts` files |\n| `secondaryGeneratedTsFolders` | `[]` | Additional directories to also write `.d.ts` files to (e.g. `\"lib-esm\"` when publishing typings alongside compiled output) |\n| `exportAsDefault` | `true` | When `true`, wraps exports in a typed default interface. When `false`, generates individual named exports (`export const className: string`). Note: `false` is incompatible with `cssOutputFolders`. |\n| `cssOutputFolders` | _(none)_ | Folders where compiled `.css` files are written. Each entry is either a plain folder path string, or an object with `folder` and optional `shimModuleFormat` (see below). |\n| `fileExtensions` | `[\".sass\", \".scss\", \".css\"]` | File extensions to treat as CSS modules |\n| `nonModuleFileExtensions` | `[\".global.sass\", \".global.scss\", \".global.css\"]` | File extensions to treat as global (non-module) stylesheets |\n| `excludeFiles` | `[]` | Paths relative to `srcFolder` to skip entirely |\n| `loadPaths` | `[]` | Folders, relative to the project folder, to search when a bare specifier such as `@use \"theme/colors\"` cannot be resolved relative to the importing file. Analogous to the Sass compiler's `loadPaths` option. |\n| `resolveBareSpecifiersAsPackages` | `false` | When `true`, a bare specifier that resolves neither relative to the importing file nor from `loadPaths` is additionally resolved as a package via Node module resolution. See [Bare specifiers](#bare-specifiers). |\n| `doNotTrimOriginalFileExtension` | `false` | When `true`, preserves the original extension in the CSS output filename. E.g. `styles.scss` → `styles.scss.css` instead of `styles.css`. Useful when downstream tooling needs to distinguish the source format. |\n| `preserveIcssExports` | `false` | When `true`, keeps the `:export { }` block in the emitted CSS. This is needed when a webpack loader (e.g. `css-loader`'s `icssParser`) must extract `:export` values at bundle time. Has no effect on the generated `.d.ts`. |\n| `silenceDeprecations` | `[]` | List of Sass deprecation codes to suppress (e.g. `\"mixed-decls\"`, `\"import\"`, `\"global-builtin\"`, `\"color-functions\"`) |\n| `ignoreDeprecationsInDependencies` | `false` | Suppresses deprecation warnings that originate from `node_modules` dependencies |\n| `extends` | _(none)_ | Path to another `sass.json` config file to inherit settings from |\n\n### CSS output folders and JS shims\n\nEach entry in `cssOutputFolders` can be a plain string (folder path only) or an object:\n\n```json\n{\n  \"folder\": \"lib-esm\",\n  \"shimModuleFormat\": \"esnext\"\n}\n```\n\nWhen `shimModuleFormat` is set, the plugin writes a `.js` shim alongside each `.css` file. For a CSS module, the shim re-exports the CSS:\n\n```js\n// ESM shim (shimModuleFormat: \"esnext\")\nexport { default } from \"./Button.module.css\";\n\n// CommonJS shim (shimModuleFormat: \"commonjs\")\nmodule.exports = require(\"./Button.module.css\");\nmodule.exports.default = module.exports;\n```\n\nFor a global stylesheet, the shim is a side-effect-only import:\n\n```js\n// ESM shim\nimport \"./global.global.css\";\nexport {};\n\n// CommonJS shim\nrequire(\"./global.global.css\");\n```\n\n## Sass import resolution\n\nA load specifier is resolved in this order:\n\n1. Relative to the importing file.\n2. Each folder in the `loadPaths` option, in order (bare specifiers only).\n3. As a package, via Node module resolution — only when `resolveBareSpecifiersAsPackages` is enabled\n   (bare specifiers only).\n\nThe plugin supports the modern `pkg:` protocol for importing from npm packages:\n\n```scss\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nThe legacy `~` prefix is automatically converted to `pkg:` for compatibility with older stylesheets:\n\n```scss\n// These are equivalent:\n@use \"~@fluentui/react/dist/sass/variables\";\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nThis also applies to specifiers that are not part of an `@use`/`@import`/`@forward` rule, such as\n`@include meta.load-css(\"~@fluentui/react/dist/sass/variables\")`.\n\n### Bare specifiers\n\nA \"bare\" specifier is one that does not start with `.`, `/`, or a URL scheme, for example\n`@use \"@fluentui/react/dist/sass/variables\"`.\n\nPer the Sass specification the target of `@use`, `@import` and `@forward` is a **URL**, so a bare\nspecifier is a *relative path*, not a reference to a package. That is how this plugin treats it by\ndefault, and `pkg:` is the supported way to reference a package:\n\n```scss\n// Preferred: unambiguous, and always enabled\n@use \"pkg:@fluentui/react/dist/sass/variables\";\n```\n\nSome other Sass toolchains (the Dart Sass CLI's `--load-path`, `sass-loader`, Vite, the Angular CLI)\ninstead resolve bare specifiers from `node_modules`. Stylesheets authored for those toolchains — most\ncommonly inside third-party packages, where a consuming project cannot rewrite the import — depend on\nthat behavior. Two opt-in options support them:\n\n```json\n{\n  \"loadPaths\": [\"src/styles\"],\n  \"resolveBareSpecifiersAsPackages\": true\n}\n```\n\n`loadPaths` resolves a bare specifier against a list of folders. `resolveBareSpecifiersAsPackages`\nadditionally resolves it as a package using Node module resolution, which honors the package's\n`exports` field. Both apply only after relative resolution has failed, so enabling them cannot change\nthe meaning of a specifier that already resolves.\n\n## Incremental builds\n\nThe plugin tracks inter-file dependencies (via `@use`, `@forward`, and `@import`) and only recompiles files that changed or whose dependencies changed. This makes `heft build --watch` fast even in large projects.\n\n## Plugin accessor API\n\nOther Heft plugins can hook into the Sass compilation pipeline via the `ISassPluginAccessor` interface:\n\n```typescript\nimport { ISassPluginAccessor } from '@rushstack/heft-sass-plugin';\n\n// In your plugin's apply() method:\nconst sassAccessor = session.requestAccessToPlugin<ISassPluginAccessor>(\n  '@rushstack/heft-sass-plugin',\n  'sass-plugin',\n  '@rushstack/heft-sass-plugin'\n);\n\nsassAccessor.hooks.postProcessCss.tapPromise('my-plugin', async (css, filePath) => {\n  // Transform CSS after Sass compilation but before it is written to cssOutputFolders\n  return transformedCss;\n});\n```\n\nThe `postProcessCss` hook is an `AsyncSeriesWaterfallHook` that passes the compiled CSS string and source file path through each tap in sequence.\n","isInternal":false,"tokens":2701,"sizeBytes":10747},{"name":"heft-plugin.json","path":"heft-plugins/heft-serverless-stack-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-serverless-stack-plugin/heft-plugin.json","title":"heft-serverless-stack-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"serverless-stack-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ServerlessStackPlugin\",\n\n      \"parameterScope\": \"serverless-stack\",\n      \"parameters\": [\n        {\n          \"longName\": \"--sst\",\n          \"description\": \"(EXPERIMENTAL) Invokes the SST postprocessing. Requires AWS credentials.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--sst-stage\",\n          \"argumentName\": \"STAGE_NAME\",\n          \"description\": \"Specifies the Serverless Stack stage; equivalent to to the \\\"--stage\\\" parameter from the \\\"sst\\\" CLI\",\n          \"parameterKind\": \"string\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"serverless-stack-plugin","entryPoint":"./lib-commonjs/ServerlessStackPlugin","parameterScope":"serverless-stack","parameters":[{"longName":"--sst","description":"(EXPERIMENTAL) Invokes the SST postprocessing. Requires AWS credentials.","parameterKind":"flag"},{"longName":"--sst-stage","argumentName":"STAGE_NAME","description":"Specifies the Serverless Stack stage; equivalent to to the \"--stage\" parameter from the \"sst\" CLI","parameterKind":"string"}]}]},"isInternal":false,"tokens":180,"sizeBytes":765},{"name":"README.md","path":"heft-plugins/heft-serverless-stack-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-serverless-stack-plugin/README.md","title":"heft-serverless-stack-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-serverless-stack-plugin\n\nThis is a Heft plugin for building apps using the [Serverless Stack (SST)](https://serverless-stack.com/) framework.\nWith this approach, the [SST toolchain](https://docs.serverless-stack.com/packages/cli) is only used for\nsynthesizing CloudFormation stacks and deploying the app, and Heft takes over the role of compiling, linting,\ntesting your TypeScript project.\n\nThe plugin accepts two command-line parameters:\n\n- `--sst` can be appended to `heft build` or `heft start`, causing the corresponding SST operation to be invoked\n\n- `--sst-stage STAGE_NAME` allows you to customize the stage.  It is equivalent to the `--stage` parameter\n  for the SST command-line tool.\n\n\nThe plugin has no effect without the `--sst` parameter.  When the parameter is provided:\n\n- `heft build --sst` will behave similar to `sst build`, which synthesizes CloudFormation stacks\n  in the `build/cdk.out/` directory.  See [this documentation](https://docs.serverless-stack.com/packages/cli#build)\n  for details.  Heft's `--watch` mode is also supported.\n\n- `heft start --sst` will behave similar to `sst start`, which deploys a\n  [stub lambda](https://docs.serverless-stack.com/live-lambda-development#sst-start) to AWS\n  and then launches the WebSocket client locally for debugging.  See\n  [this documentation](https://docs.serverless-stack.com/packages/cli#start) for details.\n\n\n> Note that `heft build --sst` currently requires AWS credentials, which limits the ability to perform this\n> validation in a monorepo environment where we can't assume that every developer works on AWS.\n> Issue [serverless-stack#1537](https://github.com/serverless-stack/serverless-stack/issues/1537)\n> is tracking a possible improvement.\n\n","isInternal":false,"tokens":411,"sizeBytes":1743},{"name":"heft-plugin.json","path":"heft-plugins/heft-static-asset-typings-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-static-asset-typings-plugin/heft-plugin.json","title":"heft-static-asset-typings-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"resource-assets-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ResourceAssetsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/resource-assets-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"source-assets-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SourceAssetsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/source-assets-options.schema.json\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"resource-assets-plugin","entryPoint":"./lib-commonjs/ResourceAssetsPlugin","optionsSchema":"./lib-commonjs/schemas/resource-assets-options.schema.json"},{"pluginName":"source-assets-plugin","entryPoint":"./lib-commonjs/SourceAssetsPlugin","optionsSchema":"./lib-commonjs/schemas/source-assets-options.schema.json"}]},"isInternal":false,"tokens":123,"sizeBytes":518},{"name":"README.md","path":"heft-plugins/heft-static-asset-typings-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-static-asset-typings-plugin/README.md","title":"heft-static-asset-typings-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-static-asset-typings-plugin\n\nThis Heft plugin generates TypeScript `.d.ts` typings for static asset files, enabling type-safe\n`import` statements for non-TypeScript files. It provides two task plugins:\n\n- **`resource-assets-plugin`** - Generates `.d.ts` typings for _resource_ files such as images (`.png`,\n  `.jpg`, `.svg`, etc.) and fonts. These are opaque binary blobs whose content is not meaningful to\n  JavaScript; the generated typing simply exports a default `string` representing the asset URL\n  (e.g. as resolved by a bundler's asset loader).\n\n- **`source-assets-plugin`** - Generates `.d.ts` typings _and_ JavaScript module output for _source_\n  files (`.html`, `.css`, `.txt`, `.md`, etc.) whose textual content is consumed at runtime. The\n  generated JS modules read the file and re-export its content as a default `string`, making these\n  assets importable as ES modules.\n\nThe terminology follows the [webpack convention](https://webpack.js.org/guides/asset-modules/)\nwhere _resource_ assets are emitted as separate files referenced by URL, while _source_ assets are\ninlined as strings.\n\nBoth plugins support incremental and watch-mode builds.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-static-asset-typings-plugin --dev\n   ```\n\n2. Load the appropriate plugin(s) in your project's **config/heft.json**:\n\n   ### Resource assets (images, fonts, etc.)\n\n   **Inline configuration** - specify options directly in heft.json:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"image-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"resource-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"inline\",\n                 \"config\": {\n                   \"fileExtensions\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".avif\"],\n                   \"generatedTsFolders\": [\"temp/image-typings\"]\n                 }\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"image-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   **File configuration** - load settings from a riggable config file:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"image-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"resource-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"file\",\n                 \"configFileName\": \"resource-assets.json\"\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"image-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   And create a **config/resource-assets.json** file (which can be provided by a rig):\n\n   ```jsonc\n   {\n     \"fileExtensions\": [\".png\", \".jpg\", \".jpeg\", \".gif\", \".svg\", \".ico\", \".webp\", \".avif\"],\n     \"generatedTsFolders\": [\"temp/image-typings\"]\n   }\n   ```\n\n   ### Source assets\n\n   **Inline configuration:**\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"text-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"source-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"inline\",\n                 \"config\": {\n                   \"fileExtensions\": [\".html\"],\n                   \"cjsOutputFolders\": [\"lib-commonjs\"],\n                   \"esmOutputFolders\": [\"lib-esm\"],\n                   \"generatedTsFolders\": [\"temp/text-typings\"]\n                 }\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"text-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   **File configuration:**\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"text-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-static-asset-typings-plugin\",\n               \"pluginName\": \"source-assets-plugin\",\n               \"options\": {\n                 \"configType\": \"file\",\n                 \"configFileName\": \"source-assets.json\"\n               }\n             }\n           },\n           \"typescript\": {\n             \"taskDependencies\": [\"text-typings\"]\n             // ...\n           }\n         }\n       }\n     }\n   }\n   ```\n\n   And create a **config/source-assets.json** file (which can be provided by a rig):\n\n   ```jsonc\n   {\n     \"fileExtensions\": [\".html\"],\n     \"cjsOutputFolders\": [\"lib-commonjs\"],\n     \"esmOutputFolders\": [\"lib-esm\"],\n     \"generatedTsFolders\": [\"temp/text-typings\"]\n   }\n   ```\n\n3. Add the generated typings folder to your **tsconfig.json** `rootDirs` so that\n   TypeScript can resolve the declarations:\n\n   ```jsonc\n   {\n     \"compilerOptions\": {\n       \"rootDirs\": [\"src\", \"temp/image-typings\"]\n     }\n   }\n   ```\n\n## Plugin options\n\nBoth plugins support two configuration modes via the `configType` option:\n\n### Inline mode (`configType: \"inline\"`)\n\nProvide configuration directly in heft.json under `options.config`:\n\n#### `resource-assets-plugin` inline config\n\n| Option              | Type       | Default                  | Description                                     |\n| ------------------- | ---------- | ------------------------ | ----------------------------------------------- |\n| `fileExtensions`    | `string[]` | -                        | **(required)** File extensions to generate typings for. |\n| `generatedTsFolders`| `string[]` | `[\"temp/static-asset-ts\"]` | Folders where generated `.d.ts` files are written. The first entry should be listed in `rootDirs` so TypeScript can resolve the asset imports during type-checking. Additional entries are typically your project's published typings folder(s). |\n| `sourceFolderPath`  | `string`   | `\"src\"`                  | Source folder to scan for asset files.           |\n\n#### `source-assets-plugin` inline config\n\nIncludes all the above, plus:\n\n| Option              | Type       | Default                  | Description                                          |\n| ------------------- | ---------- | ------------------------ | ---------------------------------------------------- |\n| `cjsOutputFolders`  | `string[]` | -                        | **(required)** Output folders for generated CommonJS `.js` modules. |\n| `esmOutputFolders`   | `string[]` | `[]`                    | Output folders for generated ESM `.js` modules.      |\n\n### File mode (`configType: \"file\"`)\n\nLoad configuration from a riggable JSON config file in the project's `config/` folder:\n\n| Option           | Type     | Description                                                            |\n| ---------------- | -------- | ---------------------------------------------------------------------- |\n| `configFileName` | `string` | **(required)** Name of the JSON config file in the `config/` folder.   |\n\nThe config file supports the same properties as inline mode (see tables above). Config files\ncan be provided by a rig, making file mode ideal for shared build configurations.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-static-asset-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":1835,"sizeBytes":8228},{"name":"heft-plugin.json","path":"heft-plugins/heft-storybook-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-storybook-plugin/heft-plugin.json","title":"heft-storybook-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"storybook-plugin\",\n      \"entryPoint\": \"./lib-commonjs/StorybookPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/storybook.schema.json\",\n\n      \"parameterScope\": \"storybook\",\n      \"parameters\": [\n        {\n          \"longName\": \"--storybook\",\n          \"description\": \"(EXPERIMENTAL) Used by the \\\"@rushstack/heft-storybook-plugin\\\" package to launch Storybook.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--storybook-test\",\n          \"description\": \"Executes a stripped down build-storybook for testing purposes.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--docs\",\n          \"description\": \"Execute storybook in docs mode.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--no-open\",\n          \"description\": \"Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.\",\n          \"parameterKind\": \"flag\"\n        },\n        {\n          \"longName\": \"--port\",\n          \"description\": \"Pass --port to the storybook CLI to bind the dev server to a specific port in serve mode.\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"PORT\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"storybook-plugin","entryPoint":"./lib-commonjs/StorybookPlugin","optionsSchema":"./lib-commonjs/schemas/storybook.schema.json","parameterScope":"storybook","parameters":[{"longName":"--storybook","description":"(EXPERIMENTAL) Used by the \"@rushstack/heft-storybook-plugin\" package to launch Storybook.","parameterKind":"flag"},{"longName":"--storybook-test","description":"Executes a stripped down build-storybook for testing purposes.","parameterKind":"flag"},{"longName":"--docs","description":"Execute storybook in docs mode.","parameterKind":"flag"},{"longName":"--no-open","description":"Pass --no-open to the storybook CLI so it does not automatically open a browser window in serve mode.","parameterKind":"flag"},{"longName":"--port","description":"Pass --port to the storybook CLI to bind the dev server to a specific port in serve mode.","parameterKind":"string","argumentName":"PORT"}]}]},"isInternal":false,"tokens":312,"sizeBytes":1374},{"name":"README.md","path":"heft-plugins/heft-storybook-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-storybook-plugin/README.md","title":"heft-storybook-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-storybook-plugin\n\nThis is a Heft plugin for using the [Storybook](https://storybook.js.org/) tool for developing and testing\nUI components.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-storybook-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":157,"sizeBytes":602},{"name":"heft-plugin.json","path":"heft-plugins/heft-typescript-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-typescript-plugin/heft-plugin.json","title":"heft-typescript-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"typescript-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TypeScriptPlugin\"\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"typescript-plugin","entryPoint":"./lib-commonjs/TypeScriptPlugin"}]},"isInternal":false,"tokens":60,"sizeBytes":228},{"name":"README.md","path":"heft-plugins/heft-typescript-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-typescript-plugin/README.md","title":"heft-typescript-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-typescript-plugin\n\nThis is a Heft plugin for compiling TypeScript.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-typescript-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":139,"sizeBytes":530},{"name":"heft-plugin.json","path":"heft-plugins/heft-vscode-extension-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-vscode-extension-plugin/heft-plugin.json","title":"heft-vscode-extension-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"vscode-extension-package-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionPackagePlugin.js\",\n      \"parameterScope\": \"package\"\n    },\n    {\n      \"pluginName\": \"vscode-extension-verify-signature-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionVerifySignaturePlugin.js\",\n      \"parameterScope\": \"verify-signature\",\n      \"parameters\": [\n        {\n          \"longName\": \"--vsix-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which VSIX file will be used for verifying signature.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--manifest-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which manifest file will be used for verifying signature.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--signature-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which signature file will be used for verifying signature.\",\n          \"required\": true\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"vscode-extension-publish-plugin\",\n      \"entryPoint\": \"./lib-commonjs/VSCodeExtensionPublishPlugin.js\",\n      \"parameterScope\": \"publish-vsix\",\n      \"parameters\": [\n        {\n          \"longName\": \"--vsix-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which VSIX file will be used for publishing.\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--manifest-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which manifest file will be used for publishing.\",\n          \"required\": false\n        },\n        {\n          \"longName\": \"--signature-path\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which signature file will be used for publishing.\",\n          \"required\": false\n        },\n        {\n          \"longName\": \"--publish-unsigned\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Use this parameter to control whether to publish unsigned.\",\n          \"required\": false\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"vscode-extension-package-plugin","entryPoint":"./lib-commonjs/VSCodeExtensionPackagePlugin.js","parameterScope":"package"},{"pluginName":"vscode-extension-verify-signature-plugin","entryPoint":"./lib-commonjs/VSCodeExtensionVerifySignaturePlugin.js","parameterScope":"verify-signature","parameters":[{"longName":"--vsix-path","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which VSIX file will be used for verifying signature.","required":true},{"longName":"--manifest-path","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which manifest file will be used for verifying signature.","required":true},{"longName":"--signature-path","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which signature file will be used for verifying signature.","required":true}]},{"pluginName":"vscode-extension-publish-plugin","entryPoint":"./lib-commonjs/VSCodeExtensionPublishPlugin.js","parameterScope":"publish-vsix","parameters":[{"longName":"--vsix-path","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which VSIX file will be used for publishing.","required":true},{"longName":"--manifest-path","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which manifest file will be used for publishing.","required":false},{"longName":"--signature-path","parameterKind":"string","argumentName":"RELATIVE_PATH","description":"Use this parameter to control which signature file will be used for publishing.","required":false},{"longName":"--publish-unsigned","parameterKind":"flag","description":"Use this parameter to control whether to publish unsigned.","required":false}]}]},"isInternal":false,"tokens":564,"sizeBytes":2614},{"name":"README.md","path":"heft-plugins/heft-vscode-extension-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-vscode-extension-plugin/README.md","title":"heft-vscode-extension-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-vscode-extension-plugin\n\nThis is a Heft plugin for packaging Visual Studio Code extensions using the `vsce` tool.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-vscode-extension-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":151,"sizeBytes":583},{"name":"heft-plugin.json","path":"heft-plugins/heft-webpack4-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-webpack4-plugin/heft-plugin.json","title":"heft-webpack4-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"webpack4-plugin\",\n      \"entryPoint\": \"./lib-commonjs/Webpack4Plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-webpack4-plugin.schema.json\",\n\n      \"parameterScope\": \"webpack4\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes using webpack-dev-server.  This parameter is only available when running in watch mode.\"\n        }\n      ]\n    }\n  ]\n}\n","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"webpack4-plugin","entryPoint":"./lib-commonjs/Webpack4Plugin","optionsSchema":"./lib-commonjs/schemas/heft-webpack4-plugin.schema.json","parameterScope":"webpack4","parameters":[{"longName":"--serve","parameterKind":"flag","description":"Start a local web server for testing purposes using webpack-dev-server.  This parameter is only available when running in watch mode."}]}]},"isInternal":false,"tokens":146,"sizeBytes":623},{"name":"README.md","path":"heft-plugins/heft-webpack4-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-webpack4-plugin/README.md","title":"heft-webpack4-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"# @rushstack/heft-webpack4-plugin\n\nThis is a Heft plugin for using Webpack 4.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-webpack4-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n","isInternal":false,"tokens":142,"sizeBytes":521},{"name":"heft-plugin.json","path":"heft-plugins/heft-webpack5-plugin/heft-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-webpack5-plugin/heft-plugin.json","title":"heft-webpack5-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=heft-plugins%2Fheft-webpack5-plugin%2Fheft-plugin.json -->","frontmatter":{"$schema":"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json","taskPlugins":[{"pluginName":"webpack5-plugin","entryPoint":"./lib-commonjs/Webpack5Plugin","optionsSchema":"./lib-commonjs/schemas/heft-webpack5-plugin.schema.json","parameterScope":"webpack5","parameters":[{"longName":"--serve","parameterKind":"flag","description":"Start a local web server for testing purposes using webpack-dev-server.  This parameter is only available when running in watch mode."}]}]},"isInternal":false,"tokens":146,"sizeBytes":623},{"name":"README.md","path":"heft-plugins/heft-webpack5-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/heft-plugins/heft-webpack5-plugin/README.md","title":"heft-webpack5-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=heft-plugins%2Fheft-webpack5-plugin%2FREADME.md -->","isInternal":false,"tokens":142,"sizeBytes":521},{"name":"README.md","path":"rush-plugins/rush-amazon-s3-build-cache-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-amazon-s3-build-cache-plugin/README.md","title":"rush-amazon-s3-build-cache-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-amazon-s3-build-cache-plugin%2FREADME.md -->","isInternal":false,"tokens":92,"sizeBytes":349},{"name":"README.md","path":"rush-plugins/rush-azure-storage-build-cache-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-azure-storage-build-cache-plugin/README.md","title":"rush-azure-storage-build-cache-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-azure-storage-build-cache-plugin%2FREADME.md -->","isInternal":false,"tokens":73,"sizeBytes":292},{"name":"README.md","path":"rush-plugins/rush-bridge-cache-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-bridge-cache-plugin/README.md","title":"rush-bridge-cache-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-bridge-cache-plugin%2FREADME.md -->","isInternal":false,"tokens":1115,"sizeBytes":5090},{"name":"README.md","path":"rush-plugins/rush-buildxl-graph-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-buildxl-graph-plugin/README.md","title":"rush-buildxl-graph-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-buildxl-graph-plugin%2FREADME.md -->","isInternal":false,"tokens":69,"sizeBytes":263},{"name":"README.md","path":"rush-plugins/rush-http-build-cache-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-http-build-cache-plugin/README.md","title":"rush-http-build-cache-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-http-build-cache-plugin%2FREADME.md -->","isInternal":false,"tokens":1082,"sizeBytes":5125},{"name":"README.md","path":"rush-plugins/rush-litewatch-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-litewatch-plugin/README.md","title":"rush-litewatch-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-litewatch-plugin%2FREADME.md -->","isInternal":false,"tokens":121,"sizeBytes":495},{"name":"README.md","path":"rush-plugins/rush-mcp-docs-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-mcp-docs-plugin/README.md","title":"rush-mcp-docs-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-mcp-docs-plugin%2FREADME.md -->","isInternal":false,"tokens":32,"sizeBytes":125},{"name":"rush-mcp-plugin.json","path":"rush-plugins/rush-mcp-docs-plugin/rush-mcp-plugin.json","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-mcp-docs-plugin/rush-mcp-plugin.json","title":"rush-mcp-docs-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-mcp-docs-plugin%2Frush-mcp-plugin.json -->","isInternal":false,"tokens":210,"sizeBytes":837},{"name":"README.md","path":"rush-plugins/rush-published-versions-json-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-published-versions-json-plugin/README.md","title":"rush-published-versions-json-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-published-versions-json-plugin%2FREADME.md -->","isInternal":false,"tokens":460,"sizeBytes":1810},{"name":"README.md","path":"rush-plugins/rush-redis-cobuild-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-redis-cobuild-plugin/README.md","title":"rush-redis-cobuild-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-redis-cobuild-plugin%2FREADME.md -->","isInternal":false,"tokens":81,"sizeBytes":301},{"name":"README.md","path":"rush-plugins/rush-resolver-cache-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-resolver-cache-plugin/README.md","title":"rush-resolver-cache-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-resolver-cache-plugin%2FREADME.md -->","isInternal":false,"tokens":116,"sizeBytes":540},{"name":"README.md","path":"rush-plugins/rush-serve-plugin/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/rush-plugins/rush-serve-plugin/README.md","title":"rush-serve-plugin Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=rush-plugins%2Frush-serve-plugin%2FREADME.md -->","isInternal":false,"tokens":1360,"sizeBytes":6355},{"name":"README.md","path":"vscode-extensions/debug-certificate-manager-vscode-extension/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/vscode-extensions/debug-certificate-manager-vscode-extension/README.md","title":"debug-certificate-manager-vscode-extension Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fdebug-certificate-manager-vscode-extension%2FREADME.md -->","isInternal":false,"tokens":310,"sizeBytes":1415},{"name":"README.md","path":"vscode-extensions/playwright-local-browser-server-vscode-extension/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md","title":"playwright-local-browser-server-vscode-extension Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fplaywright-local-browser-server-vscode-extension%2FREADME.md -->","isInternal":false,"tokens":1710,"sizeBytes":7508},{"name":"README.md","path":"vscode-extensions/rush-vscode-command-webview/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/vscode-extensions/rush-vscode-command-webview/README.md","title":"rush-vscode-command-webview Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Frush-vscode-command-webview%2FREADME.md -->","isInternal":false,"tokens":102,"sizeBytes":445},{"name":"README.md","path":"vscode-extensions/rush-vscode-extension/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/vscode-extensions/rush-vscode-extension/README.md","title":"rush-vscode-extension Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Frush-vscode-extension%2FREADME.md -->","isInternal":false,"tokens":225,"sizeBytes":917},{"name":"README.md","path":"vscode-extensions/vscode-shared/README.md","rawUrl":"https://raw.githubusercontent.com/microsoft/rushstack/HEAD/vscode-extensions/vscode-shared/README.md","title":"vscode-shared Documentation","category":"plugin-manifest","format":"markdown","content":"<!-- Skill available on-demand via /api/skills/microsoft/rushstack?path=vscode-extensions%2Fvscode-shared%2FREADME.md -->","isInternal":false,"tokens":21,"sizeBytes":93}],"systemPromptSnippet":"<yakaai_skills repo=\"microsoft/rushstack\">\n<!-- File: .github/copilot-instructions.md (Tokens: ~3154 | Category: copilot-instructions) -->\nYou are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness\n\n<!-- File: .cursor/rules/rush.mdc (Tokens: ~3165 | Category: cursor-rule) -->\n---\ndescription:\nglobs:\nalwaysApply: true\n---\nYou are a Rush monorepo development and management expert. Your role is to assist with Rush-related tasks while following these key principles and best practices:\n\n# 1. Core Principles\n\n- Follow Monorepo best practices\n- Adhere to Rush's project isolation principles\n- Maintain clear dependency management\n- Use standardized versioning and change management\n- Implement efficient build processes\n\n# 2. Project Structure and Organization\n\n## 2.1 Standard Directory Structure\n\nThe standard directory structure for a Rush monorepo is as follows:\n\n  ```\n  /\n  ├── common/ # Rush common files directory\n  |   ├── autoinstallers # Autoinstaller tool configuration\n  │   ├── config/ # Configuration files directory\n  │   │   ├── rush/ # Rush core configuration\n  │   │   │   ├── command-line.json # Command line configuration\n  │   │   │   ├── build-cache.json # Build cache configuration\n  │   │   │   └── subspaces.json # Subspace configuration\n  │   │   └── subspaces/ # Subspace configuration\n  │   │       └── <subspace-name> # Specific Subspace\n  │   │           ├── pnpm-lock.yaml # Subspace dependency lock file\n  │   │           ├── .pnpmfile.cjs # PNPM hook script\n  │   │           ├── common-versions.json # Subspace version configuration\n  │   │           ├── pnpm-config.json # PNPM configuration\n  │   │           └── repo-state.json # subspace state hash value\n  │   ├── scripts/ # Common scripts\n  │   └── temp/ # Temporary files\n  └── rush.json # Rush main configuration file\n  ```\n\n## 2.2 Important Configuration Files\n\n1. `rush.json` (Root Directory)\n\n   - Rush's main configuration file\n   - Key configuration items:\n     ```json\n     {\n       \"rushVersion\": \"5.x.x\",        // Rush version\n       // Choose PNPM as package manager\n       \"pnpmVersion\": \"8.x.x\",\n       // Or use NPM\n       // \"npmVersion\": \"8.x.x\",\n       // Or use Yarn\n       // \"yarnVersion\": \"1.x.x\",\n       \"projectFolderMinDepth\": 1,    // Minimum project depth\n       \"projectFolderMaxDepth\": 3,    // Maximum project depth\n       \"projects\": [],                // Project list\n       \"nodeSupportedVersionRange\": \">=14.15.0\", // Node.js version requirement\n\n       // Project configuration\n       \"projects\": [\n         {\n           \"packageName\": \"@scope/project-a\", // Project package name\n           \"projectFolder\": \"packages/project-a\", // Project path\n           \"shouldPublish\": true, // Whether to publish\n           \"decoupledLocalDependencies\": [], // Cyclic dependency projects\n           \"subspaceName\": \"subspaceA\", // Which Subspace it belongs to\n         }\n       ],\n     }\n     ```\n\n2. `common/config/rush/command-line.json`\n\n   - Custom commands and parameter configuration\n   - Command types:\n     1. `bulk`: Batch commands, executed separately for each project\n        ```json\n        {\n          \"commandKind\": \"bulk\",\n          \"name\": \"build\",\n          \"summary\": \"Build projects\",\n          \"enableParallelism\": true,    // Whether to allow parallelism\n          \"ignoreMissingScript\": false  // Whether to ignore missing scripts\n        }\n        ```\n     2. `global`: Global commands, executed once for the entire repository\n        ```json\n        {\n          \"commandKind\": \"global\",\n          \"name\": \"deploy\",\n          \"summary\": \"Deploy application\",\n          \"shellCommand\": \"node common/scripts/deploy.js\"\n        }\n        ```\n\n   - Parameter types:\n     ```json\n     \"parameters\": [\n       {\n         \"parameterKind\": \"flag\",      // Switch parameter --production\n         \"longName\": \"--production\"\n       },\n       {\n         \"parameterKind\": \"string\",    // String parameter --env dev\n         \"longName\": \"--env\"\n       },\n       {\n         \"parameterKind\": \"stringList\", // String list --tag a --tag b\n         \"longName\": \"--tag\"\n       },\n       {\n         \"parameterKind\": \"choice\",    // Choice parameter --locale en-us\n         \"longName\": \"--locale\",\n         \"alternatives\": [\"en-us\", \"zh-cn\"]\n       },\n       {\n         \"parameterKind\": \"integer\",   // Integer parameter --timeout 30\n         \"longName\": \"--timeout\"\n       },\n       {\n         \"parameterKind\": \"integerList\" // Integer list --pr 1 --pr 2\n         \"longName\": \"--pr\"\n       }\n     ]\n     ```\n\n3. `common/config/subspaces/<subspace-name>/common-versions.json`\n\n   - Configure NPM dependency versions affecting all projects\n   - Key configuration items:\n     ```json\n     {\n       // Specify preferred versions for specific packages\n       \"preferredVersions\": {\n         \"react\": \"17.0.2\",        // Restrict react version\n         \"typescript\": \"~4.5.0\"    // Restrict typescript version\n       },\n\n       // Whether to automatically add all dependencies to preferredVersions\n       \"implicitlyPreferredVersions\": true,\n\n       // Allow certain dependencies to use multiple different versions\n       \"allowedAlternativeVersions\": {\n         \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n       }\n     }\n     ```\n\n4. `common/config/rush/subspaces.json`\n   - Purpose: Configure Rush Subspace functionality\n   - Key configuration items:\n     ```json\n     {\n       // Whether to enable Subspace functionality\n       \"subspacesEnabled\": false,\n\n       // Subspace name list\n       \"subspaceNames\": [\"team-a\", \"team-b\"],\n     }\n     ```\n\n# 3. Command Usage\n\n## 3.1 Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. `rush` command\n   - Purpose: Execute operations affecting the entire repository or multiple projects\n   - Features:\n     - Strict parameter validation and documentation\n     - Support for global and batch commands\n     - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing, and other standard operations\n\n2. `rushx` command\n   - Purpose: Execute specific scripts for a single project\n   - Features:\n     - Similar to `npm run` or `pnpm run`\n     - Uses Rush version selector to ensure toolchain consistency\n     - Prepares shell environment based on Rush configuration\n   - Use cases:\n     - Running project-specific build scripts\n     - Executing tests\n     - Running development servers\n\n3. `rush-pnpm` command\n   - Purpose: Replace direct use of pnpm in Rush repository\n   - Features:\n     - Sets correct PNPM workspace context\n     - Supports Rush-specific enhancements\n     - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n## 3.2 Common Commands Explained\n\n1. `rush update`\n   - Function: Install and update dependencies\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n     - `--network-concurrency COUNT`: Limit concurrent network requests\n   - Use cases:\n     - After first cloning repository\n     - After pulling new Git changes\n     - After modifying package.json\n     - When dependencies need updating\n\n2. `rush install`\n   - Function: Install dependencies based on existing shrinkwrap file\n   - Features:\n     - Read-only operation, won't modify shrinkwrap file\n     - Suitable for CI environment\n   - Important parameters:\n     - `-p, --purge`: Clean before installation\n     - `--bypass-policy`: Bypass gitPolicy rules\n     - `--no-link`: Don't create project symlinks\n   - Use cases:\n     - CI/CD pipeline\n     - Ensuring dependency version consistency\n     - Avoiding accidental shrinkwrap file updates\n\n3. `rush build`\n   - Function: Incremental project build\n   - Features:\n     - Only builds changed projects\n     - Supports parallel building\n   - Use cases:\n     - Daily development builds\n     - Quick change validation\n\n4. `rush rebuild`\n   - Function: Complete clean build\n   - Features:\n     - Builds all projects\n     - Cleans previous build artifacts\n   - Use cases:\n     - When complete build cleaning is needed\n     - When investigating build issues\n\n5. `rush add`\n   - Function: Add dependencies to project\n   - Usage: `rush add -p <package> [--dev] [--exact]`\n   - Important parameters:\n     - `-p, --package`: Package name\n     - `--dev`: Add as development dependency\n     - `--exact`: Use exact version\n   - Use cases: Adding new dependency packages\n   - Note: Must be run in corresponding project directory\n\n6. `rush remove`\n   - Function: Remove project dependencies\n   - Usage: `rush remove -p <package>`\n   - Use cases: Clean up unnecessary dependencies\n\n7. `rush purge`\n   - Function: Clean temporary files and installation files\n   - Use cases:\n     - Clean build environment\n     - Resolve dependency issues\n     - Free up disk space\n\n# 4. Dependency Management\n\n## 4.1 Package Manager Selection\n\nSpecify in `rush.json`:\n  ```json\n  {\n    // Choose PNPM as package manager\n    \"pnpmVersion\": \"8.x.x\",\n    // Or use NPM\n    // \"npmVersion\": \"8.x.x\",\n    // Or use Yarn\n    // \"yarnVersion\": \"1.x.x\",\n  }\n  ```\n\n## 4.2 Version Management\n\n- Location: `common/config/subspaces/<subspace-name>/common-versions.json`\n- Configuration example:\n  ```json\n  {\n    // Specify preferred versions for packages\n    \"preferredVersions\": {\n      \"react\": \"17.0.2\",\n      \"typescript\": \"~4.5.0\"\n    },\n\n    // Allow certain dependencies to use multiple versions\n    \"allowedAlternativeVersions\": {\n      \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n    }\n  }\n  ```\n\n## 4.3 Subspace\n\nUsing Subspace technology allows organizing related projects together, meaning multiple PNPM lock files can be used in a Rush Monorepo. Different project groups can have their own independent dependency version management without affecting each other, thus isolating projects, reducing risks from dependency updates, and significantly improving dependency installation and update speed.\n\nDeclare which Subspaces exist in `common/config/rush/subspaces.json`, and declare which Subspace each project belongs to in `rush.json`'s `subspaceName`.\n\n# 5. Caching Capabilities\n\n## 5.1 Cache Principles\n\nRush cache is a build caching system that accelerates the build process by caching project build outputs. Build results are cached in `common/temp/build-cache`, and when project source files, dependencies, environment variables, command line parameters, etc., haven't changed, the cache is directly extracted instead of rebuilding.\n\n## 5.2 Core Configuration\n\nConfiguration file: `<project>/config/rush-project.json`\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",   // Operation name\n      \"outputFolderNames\": [\"lib\", \"dist\"], // Output directories\n      \"disableBuildCacheForOperation\": false, // Whether to disable cache\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"], // Dependent environment variables\n    }\n  ]\n}\n```\n\n# 6. Best Practices\n\n## 6.1 Selecting Specific Projects\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. To improve efficiency, Rush provides various project selection parameters that can be chosen based on different scenarios:\n\n1. `--to <PROJECT>`\n   - Function: Select specified project and all its dependencies\n   - Use cases:\n     - Build specific project and its dependencies\n     - Ensure complete dependency chain build\n   - Example:\n     ```bash\n     rush build --to @my-company/my-project\n     rush build --to my-project  # If project name is unique, scope can be omitted\n     rush build --to .  # Use current directory's project\n     ```\n\n2. `--to-except <PROJECT>`\n   - Function: Select all dependencies of specified project, but not the project itself\n   - Use cases:\n     - Update project dependencies without processing project itself\n     - Pre-build dependencies\n   - Example:\n     ```bash\n     rush build --to-except @my-company/my-project\n     ```\n\n3. `--from <PROJECT>`\n   - Function: Select specified project and all its downstream dependencies\n   - Use cases:\n     - Validate changes' impact on downstream projects\n     - Build all projects affected by specific project\n   - Example:\n     ```bash\n     rush build --from @my-company/my-project\n     ```\n\n4. `--impacted-by <PROJECT>`\n   - Function: Select projects that might be affected by specified project changes, excluding dependencies\n   - Use cases:\n     - Quick test of project change impacts\n     - Use when dependency status is already correct\n   - Example:\n     ```bash\n     rush build --impacted-by @my-company/my-project\n     ```\n\n5. `--impacted-by-except <PROJECT>`\n   - Function: Similar to `--impacted-by`, but excludes specified project itself\n   - Use cases:\n     - Project itself has been manually built\n     - Only need to test downstream impacts\n   - Example:\n     ```bash\n     rush build --impacted-by-except @my-company/my-project\n     ```\n\n6. `--only <PROJECT>`\n   - Function: Only select specified project, completely ignore dependency relationships\n   - Use cases:\n     - Clearly know dependency status is correct\n     - Combine with other selection parameters\n   - Example:\n     ```bash\n     rush build --only @my-company/my-project\n     rush build --impacted-by projectA --only projectB\n     ```\n\n## 6.2 Troubleshooting\n\n1. Dependency Issue Handling\n   - Avoid directly using `npm`, `pnpm`, `yarn` package managers\n   - Use `rush purge` to clean all temporary files\n   - Run `rush update --recheck` to force check all dependencies\n\n2. Build Issue Handling\n   - Use `rush rebuild` to skip cache and perform complete build\n   - Check project's `rushx build` command output\n\n3. Logging and Diagnostics\n   - Use `--verbose` parameter for detailed logs\n   - Verify command parameter correctness\n\n<!-- File: skills/rushstack-best-practices/CHANGELOG.md (Tokens: ~118 | Category: anthropic-skill) -->\n# Change Log - Rush Stack Skills\n\nThis log was last generated on Tue, 11 Feb 2026 00:00:00 GMT and should not be manually modified.\n\n## 1.0.0\nTue, 11 Feb 2026 00:00:00 GMT\n\n### Minor changes\n\n- Initial release of Rush Stack skills collection\n- `rushstack-best-practices` skill providing guidance for:\n  - Configuring Rush in a monorepo\n  - Common configuration patterns\n  - Package management best practices\n  - Build and toolchain recommendations\n\n<!-- File: skills/rushstack-best-practices/references/build-system.md (Tokens: ~2185 | Category: anthropic-skill) -->\n# Build System Reference\n\n## Build vs Rebuild\n\n### rush build (Incremental Build)\n\n**Purpose:** Build only changed projects and dependencies\n\n**Behavior:**\n- Analyzes project dependency graph\n- Builds only projects that changed\n- Builds downstream dependents\n- Uses build cache when available\n- Supports parallel execution\n\n**Use Cases:**\n- Daily development\n- Quick iteration\n- Testing changes\n\n**Examples:**\n```bash\n# Build all changed projects\nrush build\n\n# Build specific project and dependencies\nrush build --to @my-scope/my-app\n\n# Build project and downstream dependents\nrush build --from @my-scope/my-lib\n\n# Parallel build (default for bulk commands)\nrush build --parallel\n```\n\n### rush rebuild (Clean Build)\n\n**Purpose:** Complete clean build of all projects\n\n**Behavior:**\n- Cleans previous build artifacts\n- Builds all projects (even unchanged)\n- Skips build cache\n- Takes longer than incremental build\n\n**Use Cases:**\n- After major dependency updates\n- When investigating build issues\n- Before releases\n- Complete validation\n\n**Examples:**\n```bash\n# Rebuild everything\nrush rebuild\n\n# Rebuild specific project and dependencies\nrush rebuild --to @my-scope/my-app\n```\n\n## Build Selection Flags\n\n### Flag Comparison\n\n| Flag | Selects | Dependencies Built | Dependents Built | Use Case |\n|------|---------|-------------------|------------------|----------|\n| `--to <proj>` | Project + dependencies | Yes | No | Build with full chain |\n| `--to-except <proj>` | Dependencies only | Yes | No | Pre-build dependencies |\n| `--from <proj>` | Project + dependents | No | Yes | Test downstream impact |\n| `--impacted-by <proj>` | Affected projects | No | Yes (only impacted) | Quick validation |\n| `--impacted-by-except <proj>` | Dependents only | No | Yes (only impacted) | Skip built project |\n| `--only <proj>` | Just the project | No | No | When deps are good |\n\n### --to (Project + Dependencies)\n\nBuild project and all dependencies recursively:\n\n```bash\nrush build --to @my-scope/my-app\n```\n\n**Use When:**\n- Building an application for testing\n- Need complete dependency chain\n- Publishing a package\n\n**Dependency Graph Example:**\n```\nmy-app\n├── ui-lib\n│   └── utils\n└── api-lib\n    └── utils\n\nrush build --to my-app builds: utils, ui-lib, api-lib, my-app\n```\n\n### --to-except (Dependencies Only)\n\nBuild all dependencies, but not the project itself:\n\n```bash\nrush build --to-except @my-scope/my-app\n```\n\n**Use When:**\n- Pre-building dependencies\n- Project will be built separately\n- Validating dependency chain\n\n### --from (Project + Dependents)\n\nBuild project and all downstream dependents:\n\n```bash\nrush build --from @my-scope/utils\n```\n\n**Use When:**\n- After library changes\n- Testing impact on dependents\n- Ensuring downstream compatibility\n\n**Dependency Graph Example:**\n```\nutils (changed)\n├── ui-lib\n│   └── my-app\n└── api-lib\n    └── my-app\n\nrush build --from utils builds: utils, ui-lib, api-lib, my-app\n```\n\n### --impacted-by (Affected Projects)\n\nBuild projects that might be affected by changes:\n\n```bash\nrush build --impacted-by @my-scope/utils\n```\n\n**Use When:**\n- Quick change validation\n- Dependencies are already built\n- Faster than `--from`\n\n**Note:** Assumes dependencies are up-to-date\n\n### --impacted-by-except (Dependents Only)\n\nLike `--impacted-by` but excludes the project itself:\n\n```bash\nrush build --impacted-by-except @my-scope/utils\n```\n\n**Use When:**\n- Project already built\n- Only need to test dependents\n- Saving time\n\n### --only (Just the Project)\n\nBuild only specified project, ignore dependency relationships:\n\n```bash\nrush build --only @my-scope/my-app\n```\n\n**Use When:**\n- Dependencies known to be correct\n- Combining with other flags\n- Quick single-project rebuild\n\n**Combined Example:**\n```bash\n# Build downstream dependents, but only rebuild utils\nrush build --from utils --only utils\n```\n\n## Build Cache\n\n### Cache Principles\n\nRush build cache accelerates builds by caching project outputs:\n\n**Cache Storage:** `common/temp/build-cache/`\n\n**Cache Key Based On:**\n- Source file contents\n- Dependency versions\n- Environment variables\n- Command line parameters\n- Rush configuration\n\n**Behavior:**\n- If cache key matches → Extract cached output\n- If cache key differs → Rebuild and update cache\n\n### Cache Configuration\n\n**File:** `<project>/config/rush-project.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\", \"API_KEY\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Script name in package.json\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n### Environment Variables\n\n**Caching with Environment Variables:**\n\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\", \"API_ENDPOINT\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Cache key includes `NODE_ENV` and `API_ENDPOINT` values\n- Changing these values invalidates cache\n- Different values have different caches\n\n**Use Cases:**\n- Production vs development builds\n- Region-specific builds\n- Feature flag configurations\n\n### Disabling Cache\n\n**Per Operation:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": true  // Disable\n    }\n  ]\n}\n```\n\n**Per Command:**\n```bash\n# Rush rebuild always skips cache\nrush rebuild\n\n# Rush build uses cache (unless disabled)\nrush build\n```\n\n## Parallel Execution\n\n### Enabling Parallelism\n\nIn `command-line.json`:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build projects\",\n  \"enableParallelism\": true\n}\n```\n\n**Effect:**\n- Builds independent projects simultaneously\n- Respects dependency order\n- Faster builds on multi-core machines\n\n### Parallel Build Behavior\n\n**Dependency Graph:**\n```\napp1 depends on lib1 and lib2\napp2 depends on lib2\nlib1 and lib2 are independent\n```\n\n**Parallel Build Order:**\n```\nPhase 1 (parallel): lib1, lib2\nPhase 2 (parallel): app1, app2\n```\n\n### Limiting Parallelism\n\n```bash\n# Limit concurrent build jobs\nrush build --parallelism 4\n```\n\n**Use Cases:**\n- Resource-constrained machines\n- Preventing memory issues\n- CI environment limits\n\n## Build Best Practices\n\n### 1. Use Incremental Builds for Development\n\n**Incorrect:**\n```bash\n# Always rebuild everything\nrush rebuild\n```\n\n**Correct:**\n```bash\n# Incremental build for development\nrush build\n```\n\n### 2. Use Selection Flags to Reduce Scope\n\n**Incorrect:**\n```bash\n# Build everything when only one project changed\nrush build\n```\n\n**Correct:**\n```bash\n# Build only affected projects\nrush build --to @my-scope/changed-project\n```\n\n### 3. Configure Build Cache\n\n**Incorrect:**\n```json\n// No cache configuration\n// Builds are always slow\n```\n\n**Correct:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n\n### 4. Enable Parallelism\n\n**Incorrect:**\n```json\n{\n  \"enableParallelism\": false\n}\n```\n\n**Correct:**\n```json\n{\n  \"enableParallelism\": true\n}\n```\n\n## Build Troubleshooting\n\n### Cache Issues\n\n**Symptom:** Build output seems stale\n\n**Solutions:**\n```bash\n# Clear cache and rebuild\nrush rebuild\n\n# Or use purge\nrush purge\nrush build\n```\n\n### Dependency Build Order\n\n**Symptom:** Projects build in wrong order\n\n**Solutions:**\n```bash\n# Let Rush determine order\nrush build  # Automatic dependency order\n\n# Verify dependency graph\nrush list --json\n```\n\n### Slow Builds\n\n**Symptom:** Builds take too long\n\n**Solutions:**\n```bash\n# Use selection flags\nrush build --to @my-scope/target-project\n\n# Enable parallelism\n# Check command-line.json has \"enableParallelism\": true\n\n# Configure cache\n# Check rush-project.json has cache configured\n```\n\n## Build Scripts\n\n### package.json Scripts\n\n**Recommended Setup:**\n```json\n{\n  \"scripts\": {\n    \"build\": \"heft build\",\n    \"build:production\": \"heft build --production\",\n    \"clean\": \"heft clean\",\n    \"test\": \"heft test\"\n  }\n}\n```\n\n**Corresponding rush-project.json:**\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"]\n    },\n    {\n      \"operationName\": \"build:production\",\n      \"outputFolderNames\": [\"dist\"],\n      \"dependsOnEnvVars\": [\"NODE_ENV\"]\n    }\n  ]\n}\n```\n\n**Usage:**\n```bash\n# Run project script directly\ncd apps/my-app\nrushx build\n\n# Or via Rush bulk command\nrush build\n```\n\n<!-- File: skills/rushstack-best-practices/references/core-commands.md (Tokens: ~1493 | Category: anthropic-skill) -->\n# Core Commands Reference\n\n## Command Tool Selection\n\n### rush (Repository-wide Operations)\n\n**Purpose:** Execute operations affecting the entire repository or multiple projects\n\n**Features:**\n- Strict parameter validation and documentation\n- Support for global and batch commands\n- Suitable for standardized workflows\n\n**Use Cases:**\n- Dependency installation (`rush install`, `rush update`)\n- Building (`rush build`, `rush rebuild`)\n- Publishing (`rush publish`)\n- Version management (`rush change`, `rush version`)\n\n### rushx (Single Project Scripts)\n\n**Purpose:** Execute specific scripts for a single project\n\n**Features:**\n- Similar to `npm run` or `pnpm run`\n- Uses Rush version selector for toolchain consistency\n- Prepares shell environment based on Rush configuration\n\n**Use Cases:**\n- Running project-specific build scripts\n- Executing tests for a single project\n- Running development servers\n\n**Example:**\n```bash\ncd apps/my-app\nrushx build      # Equivalent to npm run build\nrushx test       # Equivalent to npm run test\nrushx start      # Equivalent to npm run start\n```\n\n### rush-pnpm (Direct PNPM with Rush Context)\n\n**Purpose:** Replace direct use of pnpm in Rush repository\n\n**Features:**\n- Sets correct PNPM workspace context\n- Supports Rush-specific enhancements\n- Provides compatibility checks with Rush\n\n**Use Cases:**\n- When direct PNPM commands are needed\n- Troubleshooting PNPM-specific issues\n- PNPM operations that Rush doesn't wrap\n\n**Example:**\n```bash\nrush-pnpm list         # List packages in Rush context\nrush-pnpm why <pkg>    # Check why a package is included\n```\n\n## Common Commands\n\n### rush update\n\n**Function:** Install and update dependencies, update shrinkwrap file\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n- `--network-concurrency COUNT` - Limit concurrent network requests\n\n**Use Cases:**\n- After first cloning repository\n- After pulling new Git changes\n- After modifying package.json\n- When dependencies need updating\n\n**Example:**\n```bash\nrush update                  # Standard update\nrush update --purge          # Clean then update\nrush update --to @my/app     # Update specific project and deps\n```\n\n### rush install\n\n**Function:** Install dependencies based on existing shrinkwrap file (read-only)\n\n**Features:**\n- Won't modify shrinkwrap file\n- Suitable for CI environment\n\n**Important Parameters:**\n- `-p, --purge` - Clean before installation\n- `--bypass-policy` - Bypass gitPolicy rules\n- `--no-link` - Don't create project symlinks\n\n**Use Cases:**\n- CI/CD pipelines\n- Ensuring dependency version consistency\n- Avoiding accidental shrinkwrap file updates\n\n**Example:**\n```bash\nrush install                  # Standard install\nrush install --production     # Install only production deps\n```\n\n### rush build\n\n**Function:** Incremental project build\n\n**Features:**\n- Only builds changed projects and dependencies\n- Supports parallel building\n- Uses build cache when available\n\n**Use Cases:**\n- Daily development builds\n- Quick change validation\n\n**Example:**\n```bash\nrush build                    # Build all changed projects\nrush build --to @my/app       # Build app and dependencies\nrush build --from @my/lib     # Build lib and dependents\n```\n\n### rush rebuild\n\n**Function:** Complete clean build\n\n**Features:**\n- Builds all projects\n- Cleans previous build artifacts\n- Skips build cache\n\n**Use Cases:**\n- When complete build cleaning is needed\n- When investigating build issues\n\n**Example:**\n```bash\nrush rebuild                  # Rebuild everything\nrush rebuild --to @my/app     # Rebuild app and dependencies\n```\n\n### rush add\n\n**Function:** Add dependencies to project\n\n**Usage:** `rush add -p <package> [--dev] [--exact]`\n\n**Important Parameters:**\n- `-p, --package` - Package name\n- `--dev` - Add as development dependency\n- `--exact` - Use exact version (no semver range)\n- `--peer` - Add as peer dependency\n\n**Important:** Must be run in corresponding project directory\n\n**Example:**\n```bash\ncd apps/my-app\nrush add -p lodash --dev        # Add dev dependency\nrush add -p react --exact       # Add exact version\nrush add -p typescript -D       # Short for --dev\n```\n\n### rush remove\n\n**Function:** Remove project dependencies\n\n**Usage:** `rush remove -p <package>`\n\n**Example:**\n```bash\ncd apps/my-app\nrush remove -p lodash           # Remove lodash\n```\n\n### rush purge\n\n**Function:** Clean temporary files and installation files\n\n**Use Cases:**\n- Clean build environment\n- Resolve dependency issues\n- Free up disk space\n\n**Example:**\n```bash\nrush purge                      # Clean all temp files\n```\n\n## Project Selection Flags\n\n### --to <PROJECT>\n\n**Function:** Select specified project and all its dependencies\n\n**Use Cases:**\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n\n**Example:**\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project      # Omit scope if unique\nrush build --to .               # Use current directory's project\n```\n\n### --to-except <PROJECT>\n\n**Function:** Select all dependencies of specified project, but not the project itself\n\n**Use Cases:**\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n\n**Example:**\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\n\n**Function:** Select specified project and all its downstream dependencies\n\n**Use Cases:**\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n\n**Example:**\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\n\n**Function:** Select projects that might be affected by specified project changes, excluding dependencies\n\n**Use Cases:**\n- Quick test of project change impacts\n- Use when dependency status is already correct\n\n**Example:**\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\n\n**Function:** Similar to `--impacted-by`, but excludes specified project itself\n\n**Use Cases:**\n- Project itself has been manually built\n- Only need to test downstream impacts\n\n**Example:**\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\n\n**Function:** Only select specified project, completely ignore dependency relationships\n\n**Use Cases:**\n- Dependency status is known to be correct\n- Combine with other selection parameters\n\n**Example:**\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n\n<!-- File: skills/rushstack-best-practices/references/dependency-management.md (Tokens: ~1649 | Category: anthropic-skill) -->\n# Dependency Management Reference\n\n## Package Manager Selection\n\n### Choosing a Package Manager\n\nConfigure in `rush.json`:\n\n```json\n{\n  // PNPM (Recommended)\n  \"pnpmVersion\": \"8.x.x\",\n\n  // Or NPM\n  // \"npmVersion\": \"8.x.x\",\n\n  // Or Yarn\n  // \"yarnVersion\": \"1.x.x\"\n}\n```\n\n**Recommendations:**\n- **PNPM** - Preferred: Efficient, strict, handles large monorepos well\n- **NPM** - Standard: Good compatibility, widely supported\n- **Yarn** - Legacy: Supported, but consider PNPM for new projects\n\n## Workspace Linking\n\n### Automatic Local Linking\n\nRush automatically creates symlinks for local project dependencies:\n\n**In project A package.json:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/project-b\": \"^1.0.0\"\n  }\n}\n```\n\nRush automatically:\n1. Detects `@my-scope/project-b` is a local project\n2. Creates symlink in `node_modules/@my-scope/project-b`\n3. Links to the actual project folder\n4. Updates during each `rush install` or `rush update`\n\n**Benefits:**\n- Live changes to dependencies immediately visible\n- No need for npm link / pnpm link\n- Automatic dependency resolution\n\n### Workspace Linking Behavior\n\n```bash\n# After running\nrush install\n\n# Rush creates\napps/my-app/node_modules/@my-scope/\n  ├── my-lib -> ../../libraries/my-lib\n  └── other-lib -> ../../libraries/other-lib\n```\n\n## Version Management\n\n### common-versions.json\n\n**Purpose:** Configure NPM dependency versions affecting all projects in a subspace\n\n**Location:** `common/config/subspaces/<subspace>/common-versions.json`\n\n### Preferred Versions\n\nRestrict specific package versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"react-dom\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\",\n    \"eslint\": \"^8.0.0\"\n  }\n}\n```\n\n**Use Cases:**\n- Force consistent versions across projects\n- Prevent version drift\n- Ensure compatibility\n\n### Implicit Preferred Versions\n\nAutomatically add all dependencies to preferredVersions:\n\n```json\n{\n  \"implicitlyPreferredVersions\": true\n}\n```\n\n**Effect:**\n- Every dependency used in any project becomes constrained to that version\n- Prevents accidental version updates\n- **Caution:** Can make dependency updates difficult\n\n**Recommendation:** Use `false` for active development, `true` for stable maintenance\n\n### Allowed Alternative Versions\n\nAllow certain dependencies to use multiple different versions:\n\n```json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  },\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n**Use Cases:**\n- Gradual migration between major versions\n- Testing new versions without full commitment\n- Teams need different versions temporarily\n\n## Adding Dependencies\n\n### Using rush add\n\n**Always use Rush commands**, not npm/pnpm directly:\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Add dependency\nrush add -p lodash\n\n# Add dev dependency\nrush add -p typescript --dev\n\n# Add exact version\nrush add -p react --exact\n\n# Add peer dependency\nrush add -p react-dom --peer\n\n# Add multiple\nrush add -p lodash -p axios -p moment\n```\n\n**Important:**\n- Must run in project directory\n- Rush updates both package.json and shrinkwrap\n- Automatically handles workspace dependencies\n\n###rush add Options\n\n| Option | Description |\n|--------|-------------|\n| `-p, --package <name>` | Package name |\n| `-D, --dev` | Add as devDependency |\n| `-E, --exact` | Use exact version |\n| `--peer` | Add as peerDependency |\n| `--caret` | Use caret range (default for dependencies) |\n| `--tilde` | Use tilde range |\n\n## Removing Dependencies\n\n### Using rush remove\n\n```bash\n# Navigate to project directory\ncd apps/my-app\n\n# Remove dependency\nrush remove -p lodash\n\n# Remove multiple\nrush remove -p lodash -p axios\n```\n\n## Decoupled Local Dependencies\n\n### Handling Cyclic Dependencies\n\nWhen two projects depend on each other:\n\n```json\n// In apps/my-app/rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"decoupledLocalDependencies\": [\"@my-scope/shared-lib\"]\n    }\n  ]\n}\n```\n\n**Effect:**\n- Rush won't create symlink for `@my-scope/shared-lib`\n- Project uses version from npm (or registry)\n- Breaks cycle at build time\n\n**When to Use:**\n- Circular dependency detected\n- Temporary workaround during refactoring\n- Runtime dependency only (not build-time)\n\n**Caution:** Should be used sparingly - indicates architecture issue\n\n## Dependency Best Practices\n\n### 1. Always Use Rush Commands\n\n**Incorrect:**\n```bash\nnpm install lodash\npnpm add typescript\n```\n\n**Correct:**\n```bash\nrush add -p lodash\nrush add -p typescript\n```\n\n### 2. Use Workspace References\n\n**Incorrect:**\n```json\n{\n  \"dependencies\": {\n    \"my-lib\": \"file:../libraries/my-lib\"\n  }\n}\n```\n\n**Correct:**\n```json\n{\n  \"dependencies\": {\n    \"@my-scope/my-lib\": \"^1.0.0\"\n  }\n}\n```\n\n### 3. Centralize Version Constraints\n\nUse `common-versions.json` instead of duplicating in each project:\n\n**Incorrect:**\n- Every project has `\"typescript\": \"~4.5.0\"` in package.json\n\n**Correct:**\n```json\n// common/config/subspaces/default/common-versions.json\n{\n  \"preferredVersions\": {\n    \"typescript\": \"~4.5.0\"\n  }\n}\n```\n\n### 4. Careful with implicitlyPreferredVersions\n\n**Good for:**\n- Stable maintenance branches\n- Released products\n- Teams that want strict version control\n\n**Bad for:**\n- Active development\n- Libraries\n- Frequent dependency updates\n\n## Troubleshooting Dependencies\n\n### Dependency Conflicts\n\n**Symptom:** Version conflicts or peer dependency warnings\n\n**Solutions:**\n```bash\n# Clean slate\nrush purge\nrush update --recheck\n\n# Check what depends on a package\nrush-pnpm why <package>\n\n# View dependency tree\nrush-pnpm list --depth 0\n```\n\n### Workspace Linking Issues\n\n**Symptom:** Local changes not reflected\n\n**Solutions:**\n```bash\n# Reinstall to recreate links\nrush install\n\n# Check links are correct\nls -la node_modules/@my-scope/\n```\n\n### Version Drift\n\n**Symptom:** Different projects using different versions\n\n**Solution:**\n```json\n// common-versions.json\n{\n  \"preferredVersions\": {\n    \"problematic-package\": \"exact-version\"\n  },\n  \"implicitlyPreferredVersions\": false  // Start with false\n}\n```\n\n## Subspace Dependency Isolation\n\nWhen using subspaces, each has its own:\n- `pnpm-lock.yaml` - Independent lock file\n- `common-versions.json` - Independent version constraints\n- Dependency tree - Isolated from other subspaces\n\n**Benefits:**\n- Team A can use React 17 while Team B uses React 18\n- Dependency updates in one subspace don't affect others\n- Faster installs (only affected subspace updated)\n\n**See:** `references/subspace.md` for detailed subspace configuration\n\n<!-- File: skills/rushstack-best-practices/references/project-configuration.md (Tokens: ~2073 | Category: anthropic-skill) -->\n# Project Configuration Reference\n\n## Standard Directory Structure\n\n```\n/\n├── common/                          # Rush common files directory\n│   ├── autoinstallers/              # Autoinstaller tool configuration\n│   ├── config/                      # Configuration files directory\n│   │   ├── rush/                    # Rush core configuration\n│   │   │   ├── command-line.json    # Command line configuration\n│   │   │   ├── build-cache.json     # Build cache configuration\n│   │   │   ├── experiments.json     # Feature experiments\n│   │   │   └── subspaces.json       # Subspace configuration\n│   │   └── subspaces/               # Subspace configuration\n│   │       └── <subspace-name>/     # Specific Subspace\n│   │           ├── pnpm-lock.yaml   # Subspace dependency lock file\n│   │           ├── .pnpmfile.cjs    # PNPM hook script\n│   │           ├── common-versions.json  # Subspace version configuration\n│   │           ├── pnpm-config.json # PNPM configuration\n│   │           └── repo-state.json  # Subspace state hash value\n│   ├── scripts/                     # Common scripts\n│   └── temp/                        # Temporary files\n├── apps/                            # Application projects\n│   └── <app-name>/                  # 2 levels deep required\n├── libraries/                       # Library projects\n│   └── <lib-name>/                  # 2 levels deep required\n├── tools/                           # Tool projects\n│   └── <tool-name>/                 # 2 levels deep required\n├── rush.json                        # Rush main configuration file\n└── pnpm-lock.yaml                   # Root lock file (if not using subspaces)\n```\n\n**Important:** Projects must be exactly 2 levels deep (`projectFolderMinDepth: 2`, `projectFolderMaxDepth: 2`)\n\n## rush.json\n\n**Purpose:** Main Rush configuration file\n\n**Location:** Repository root\n\n### Basic Structure\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.x.x\",\n\n  // Package Manager Selection (choose one)\n  \"pnpmVersion\": \"8.x.x\",\n  // \"npmVersion\": \"8.x.x\",\n  // \"yarnVersion\": \"1.x.x\",\n\n  // Project Folder Depth\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n\n  // Node.js Version Requirement\n  \"nodeSupportedVersionRange\": \">=14.15.0\",\n\n  // Projects Array\n  \"projects\": []\n}\n```\n\n### Project Configuration\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-project\",     // npm package name\n      \"projectFolder\": \"libraries/my-project\",    // Path from repo root\n      \"shouldPublish\": true,                      // Should this be published?\n      \"decoupledLocalDependencies\": [],           // For cyclic dependencies\n      \"subspaceName\": \"my-subspace\",              // Optional: subspace assignment\n      \"reviewCategory\": \"production\"              // Optional: review category\n    }\n  ]\n}\n```\n\n**Project Fields:**\n- `packageName` - The npm package name (must match package.json)\n- `projectFolder` - Relative path from repository root\n- `shouldPublish` - Whether package should be published to npm\n- `decoupledLocalDependencies` - Array of local packages to exclude from link (for cyclic deps)\n- `subspaceName` - Which subspace this project belongs to\n- `reviewCategory` - Category for review purposes\n\n### Git Policy\n\n```json\n{\n  \"gitPolicy\": {\n    \"allowedBranchRegExps\": [\n      \"main\",\n      \"release/*\",\n      \"hotfix/*\"\n    ],\n    \"sampleEmail\": \"example@example.com\"\n  }\n}\n```\n\n## command-line.json\n\n**Purpose:** Define custom Rush commands\n\n**Location:** `common/config/rush/command-line.json`\n\n### Bulk Commands\n\nExecute separately for each project:\n\n```json\n{\n  \"commandKind\": \"bulk\",\n  \"name\": \"build\",\n  \"summary\": \"Build all projects\",\n  \"description\": \"Builds all projects in dependency order\",\n  \"enableParallelism\": true,\n  \"ignoreMissingScript\": false,\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n**Bulk Command Fields:**\n- `commandKind` - Must be \"bulk\"\n- `name` - Command name\n- `summary` - Short description\n- `description` - Long description\n- `enableParallelism` - Allow parallel execution\n- `ignoreMissingScript` - Don't fail if project lacks this script\n- `safeForSimultaneousRushProcesses` - Can multiple Rush instances run this?\n\n### Global Commands\n\nExecute once for entire repository:\n\n```json\n{\n  \"commandKind\": \"global\",\n  \"name\": \"deploy\",\n  \"summary\": \"Deploy application\",\n  \"description\": \"Deploys the application to production\",\n  \"shellCommand\": \"node common/scripts/deploy.js\",\n  \"safeForSimultaneousRushProcesses\": false\n}\n```\n\n### Parameters\n\nSix parameter types supported:\n\n**Flag Parameter:**\n```json\n{\n  \"parameterKind\": \"flag\",\n  \"longName\": \"--production\",\n  \"shortName\": \"-p\",\n  \"description\": \"Production mode\",\n  \"required\": false\n}\n```\n\n**String Parameter:**\n```json\n{\n  \"parameterKind\": \"string\",\n  \"longName\": \"--environment\",\n  \"shortName\": \"-e\",\n  \"description\": \"Environment name\",\n  \"required\": false,\n  \"defaultValue\": \"development\"\n}\n```\n\n**String List Parameter:**\n```json\n{\n  \"parameterKind\": \"stringList\",\n  \"longName\": \"--tag\",\n  \"description\": \"Tags for the build\",\n  \"required\": false\n}\n```\n\n**Choice Parameter:**\n```json\n{\n  \"parameterKind\": \"choice\",\n  \"longName\": \"--locale\",\n  \"description\": \"Locale for the build\",\n  \"alternatives\": [\"en-us\", \"zh-cn\", \"ja-jp\"],\n  \"required\": false,\n  \"defaultValue\": \"en-us\"\n}\n```\n\n**Integer Parameter:**\n```json\n{\n  \"parameterKind\": \"integer\",\n  \"longName\": \"--timeout\",\n  \"description\": \"Timeout in milliseconds\",\n  \"required\": false\n}\n```\n\n**Integer List Parameter:**\n```json\n{\n  \"parameterKind\": \"integerList\",\n  \"longName\": \"--pr\",\n  \"description\": \"Pull request numbers\",\n  \"required\": false\n}\n```\n\n## rush-project.json\n\n**Purpose:** Project-specific Rush configuration\n\n**Location:** `<project>/config/rush-project.json`\n\n### Build Cache Configuration\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENVIRONMENT_VARIABLE\"]\n    }\n  ]\n}\n```\n\n**Fields:**\n- `operationName` - Name of the operation (matches package.json script)\n- `outputFolderNames` - Folders to cache\n- `disableBuildCacheForOperation` - Disable caching for this operation\n- `dependsOnEnvVars` - Environment variables that affect build\n\n## Example Complete Configuration\n\n### rush.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush.schema.json\",\n  \"rushVersion\": \"5.109.0\",\n  \"pnpmVersion\": \"8.15.0\",\n  \"projectFolderMinDepth\": 2,\n  \"projectFolderMaxDepth\": 2,\n  \"nodeSupportedVersionRange\": \">=20.9.0 <21.0.0\",\n  \"projects\": [\n    {\n      \"packageName\": \"@my-scope/my-app\",\n      \"projectFolder\": \"apps/my-app\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    },\n    {\n      \"packageName\": \"@my-scope/my-lib\",\n      \"projectFolder\": \"libraries/my-lib\",\n      \"shouldPublish\": true,\n      \"subspaceName\": \"default\"\n    }\n  ]\n}\n```\n\n### command-line.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json\",\n  \"commands\": [\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"build\",\n      \"summary\": \"Build projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"bulk\",\n      \"name\": \"test\",\n      \"summary\": \"Test projects\",\n      \"enableParallelism\": true\n    },\n    {\n      \"commandKind\": \"global\",\n      \"name\": \"clean\",\n      \"summary\": \"Clean build outputs\",\n      \"shellCommand\": \"node common/scripts/clean.js\"\n    }\n  ],\n  \"parameters\": [\n    {\n      \"parameterKind\": \"flag\",\n      \"longName\": \"--production\",\n      \"shortName\": \"-p\",\n      \"description\": \"Production mode\"\n    }\n  ]\n}\n```\n\n### Project config/rush-project.json\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json\",\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"dist\"],\n      \"disableBuildCacheForOperation\": false\n    }\n  ]\n}\n```\n\n<!-- File: skills/rushstack-best-practices/references/subspace.md (Tokens: ~2142 | Category: anthropic-skill) -->\n# Subspace Reference\n\n## What is Subspace?\n\nSubspace is a Rush feature that allows multiple PNPM lock files in a single Rush monorepo.\n\n### Benefits\n\n**Dependency Isolation:**\n- Different teams can use different dependency versions\n- Team A can use React 17 while Team B uses React 18\n- Reduce risk from dependency updates\n\n**Performance:**\n- Only affected subspaces update during `rush install`\n- Faster dependency operations\n- Smaller lock files to manage\n\n**Team Autonomy:**\n- Teams manage their own dependencies\n- Less coordination needed\n- Independent release cycles\n\n### When to Use Subspace\n\n**Consider using subspace when:**\n- Repository has 50+ projects\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Performance issues with dependency operations\n- Teams want autonomy for dependency choices\n\n**Avoid subspace when:**\n- Small monorepo (< 20 projects)\n- Single team or unified dependencies\n- Simplicity is preferred\n- Just starting with Rush\n\n## Subspace Configuration\n\n### Step 1: Enable Subspaces\n\n**File:** `common/config/rush/subspaces.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/subspaces.schema.json\",\n  \"subspacesEnabled\": true,\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n```\n\n**Fields:**\n- `subspacesEnabled` - Enable/disable subspace feature\n- `subspaceNames` - List of subspace names\n\n### Step 2: Assign Projects to Subspaces\n\n**File:** `rush.json`\n\n```json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@team-a/app-1\",\n      \"projectFolder\": \"apps/team-a/app-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-a/lib-1\",\n      \"projectFolder\": \"libraries/team-a/lib-1\",\n      \"subspaceName\": \"team-a\"\n    },\n    {\n      \"packageName\": \"@team-b/app-1\",\n      \"projectFolder\": \"apps/team-b/app-1\",\n      \"subspaceName\": \"team-b\"\n    },\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    }\n  ]\n}\n```\n\n**Important:** Each project must belong to exactly one subspace\n\n### Step 3: Subspace Configuration Files\n\nEach subspace has its own configuration directory:\n\n```\ncommon/config/subspaces/\n├── team-a/\n│   ├── pnpm-lock.yaml          # Subspace lock file\n│   ├── common-versions.json    # Version constraints\n│   ├── pnpm-config.json        # PNPM settings\n│   └── repo-state.json         # State hash\n├── team-b/\n│   ├── pnpm-lock.yaml\n│   ├── common-versions.json\n│   ├── pnpm-config.json\n│   └── repo-state.json\n└── shared/\n    ├── pnpm-lock.yaml\n    ├── common-versions.json\n    ├── pnpm-config.json\n    └── repo-state.json\n```\n\n### Subspace common-versions.json\n\n**File:** `common/config/subspaces/<subspace>/common-versions.json`\n\n```json\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/common-versions.schema.json\",\n  \"preferredVersions\": {\n    // Subspace-specific versions\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {}\n}\n```\n\n**Each subspace can have:**\n- Different preferred versions\n- Different implicit preferences\n- Different allowed alternatives\n\n## Subspace Workflows\n\n### Initial Setup\n\n```bash\n# 1. Create subspace configuration\nmkdir -p common/config/subspaces/team-a\n\n# 2. Enable subspaces in subspaces.json\n# Edit: common/config/rush/subspaces.json\n\n# 3. Assign projects in rush.json\n# Edit: rush.json - add subspaceName to projects\n\n# 4. Run update to generate lock files\nrush update\n```\n\n### Adding Projects to Subspace\n\n```bash\n# 1. Create project directory\nmkdir -p apps/team-a/new-app\n\n# 2. Add to rush.json\n{\n  \"packageName\": \"@team-a/new-app\",\n  \"projectFolder\": \"apps/team-a/new-app\",\n  \"subspaceName\": \"team-a\"\n}\n\n# 3. Run update\nrush update\n```\n\n### Updating Dependencies\n\n**Update specific subspace:**\n```bash\n# Only updates team-a subspace\nrush update --to @team-a/app-1\n```\n\n**Update all subspaces:**\n```bash\n# Updates all subspaces\nrush update\n```\n\n## Subspace Isolation\n\n### Dependency Isolation\n\nEach subspace has its own dependency tree:\n\n**team-a subspace:**\n```\nteam-a/app-1/\n└── node_modules/\n    ├── react@17.0.2\n    └── typescript@4.5.0\n```\n\n**team-b subspace:**\n```\nteam-b/app-1/\n└── node_modules/\n    ├── react@18.2.0\n    └── typescript@5.0.0\n```\n\n### Cross-Subspace Dependencies\n\nProjects can depend on projects in other subspaces:\n\n```json\n// team-a/app-1 depends on shared/utils\n{\n  \"dependencies\": {\n    \"@shared/utils\": \"^1.0.0\"\n  }\n}\n```\n\n**Rush handles:**\n- Workspace linking across subspaces\n- Build order across subspaces\n- Version compatibility\n\n### Shared Dependencies\n\n**Pattern:** Create a \"shared\" subspace for common libraries\n\n```json\n// subspaces.json\n{\n  \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n}\n\n// rush.json\n{\n  \"projects\": [\n    {\n      \"packageName\": \"@shared/utils\",\n      \"projectFolder\": \"libraries/shared/utils\",\n      \"subspaceName\": \"shared\"\n    },\n    {\n      \"packageName\": \"@team-a/app\",\n      \"projectFolder\": \"apps/team-a/app\",\n      \"subspaceName\": \"team-a\"\n    }\n  ]\n}\n```\n\n## Subspace Best Practices\n\n### 1. Organize by Team or Domain\n\n**Good:**\n```\nsubspaceNames: [\"platform\", \"backend\", \"frontend\", \"shared\"]\n```\n\n**Bad:**\n```\nsubspaceNames: [\"subspace1\", \"subspace2\", \"subspace3\"]\n```\n\n### 2. Use Shared Subspace for Common Code\n\n**Pattern:**\n```\n- team-a: Team A's apps and libs\n- team-b: Team B's apps and libs\n- shared: Common libraries used by both teams\n```\n\n### 3. Minimize Cross-Subspace Dependencies\n\n**Good:**\n```\nteam-a/app → team-a/lib → shared/utils\nteam-b/app → team-b/lib → shared/utils\n```\n\n**Avoid:**\n```\nteam-a/app → team-b/lib  # Creates coupling\n```\n\n### 4. Keep Subspace Sizes Balanced\n\n**Good:**\n```\nteam-a: 20 projects\nteam-b: 18 projects\nshared: 10 projects\n```\n\n**Bad:**\n```\nteam-a: 2 projects\nteam-b: 50 projects  # Imbalanced\n```\n\n## Subspace Troubleshooting\n\n### Lock File Conflicts\n\n**Symptom:** Subspace lock files out of sync\n\n**Solution:**\n```bash\n# Regenerate all lock files\nrush update --purge\n```\n\n### Cross-Subspace Build Issues\n\n**Symptom:** Projects build in wrong order\n\n**Solution:**\n```bash\n# Verify dependency graph\nrush list --json\n\n# Force rebuild across subspaces\nrush rebuild\n```\n\n### Version Conflicts Across Subspaces\n\n**Symptom:** Different subspaces require different versions\n\n**Solution:**\n```bash\n# Update specific subspace\nrush update --to @team-a/app-1\n\n# Or use allowedAlternativeVersions\n```\n\n## Subspace vs No Subspace\n\n### No Subspace (Default)\n\n**Structure:**\n```\ncommon/\n├── config/rush/\n└── temp/\npnpm-lock.yaml (single lock file)\nrush.json\n```\n\n**Pros:**\n- Simpler setup\n- Easier to understand\n- Single source of truth for versions\n\n**Cons:**\n- All projects share same dependency tree\n- Dependency updates affect all projects\n- Slower installs for large repos\n\n### With Subspace\n\n**Structure:**\n```\ncommon/\n├── config/\n│   ├── rush/\n│   └── subspaces/\n│       ├── team-a/\n│       │   └── pnpm-lock.yaml\n│       └── team-b/\n│           └── pnpm-lock.yaml\n└── temp/\nrush.json\n```\n\n**Pros:**\n- Independent dependency trees\n- Faster installs (only affected subspaces)\n- Team autonomy\n\n**Cons:**\n- More complex setup\n- More files to manage\n- Potential for duplication\n\n## Migration to Subspace\n\n### Step-by-Step Migration\n\n1. **Plan your subspaces:**\n   ```json\n   {\n     \"subspaceNames\": [\"team-a\", \"team-b\", \"shared\"]\n   }\n   ```\n\n2. **Enable subspaces:**\n   ```bash\n   # Edit common/config/rush/subspaces.json\n   ```\n\n3. **Assign projects:**\n   ```bash\n   # Edit rush.json - add subspaceName to each project\n   ```\n\n4. **Generate lock files:**\n   ```bash\n   rush update\n   ```\n\n5. **Verify:**\n   ```bash\n   # Check lock files created\n   ls common/config/subspaces/*/pnpm-lock.yaml\n   ```\n\n6. **Commit changes:**\n   ```bash\n   git add .\n   git commit -m \"Enable Rush subspaces\"\n   ```\n\n<!-- File: skills/rushstack-best-practices/SKILL.md (Tokens: ~1943 | Category: anthropic-skill) -->\n---\nname: rushstack-best-practices\ndescription: Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.\nlicense: MIT\nmetadata:\n  author: rushstack\n  version: \"1.0.0\"\n---\n\n# Rushstack Best Practices\n\nThis skill provides essential best practices for working with Rush monorepos. Following these guidelines ensures efficient dependency management, optimal build performance, and proper command usage.\n\n## Important Guidelines\n\n**When encountering unclear issues or questions:**\n\n1. **Never make assumptions** - If unsure about Rush behavior, configuration, or commands\n2. **Search official resources first** - Check documentation and existing issues before guessing\n3. **Provide accurate information** - Base responses on verified sources, not assumptions\n4. **Ask for clarification** - When the problem description is ambiguous or incomplete\n\n## Core Principles\n\n1. **Always use Rush commands** - Avoid npm/pnpm/yarn directly in a Rush monorepo\n2. **Use rushx for single projects** - Like npm run, but Rush-aware\n3. **rush install vs update** - install for CI, update after changes\n4. **rush build vs rebuild** - build for incremental, rebuild for clean\n5. **Projects at 2 levels** - Standard: apps/, libraries/, tools/\n6. **Selection flags reduce scope** - Use --to, --from, --impacted-by\n7. **Build cache is automatic** - Configure output folders to enable\n8. **Subspace for large repos** - Isolate dependencies when needed\n\n## Project Selection Best Practices\n\nWhen running commands like `install`, `update`, `build`, `rebuild`, etc., by default all projects under the entire repository are processed. Use these selection flags to improve efficiency:\n\n### --to <PROJECT>\nSelect specified project and all its dependencies.\n- Build specific project and its dependencies\n- Ensure complete dependency chain build\n```bash\nrush build --to @my-company/my-project\nrush build --to my-project  # If project name is unique\nrush build --to .            # Use current directory's project\n```\n\n### --to-except <PROJECT>\nSelect all dependencies of specified project, but not the project itself.\n- Update project dependencies without processing project itself\n- Pre-build dependencies\n```bash\nrush build --to-except @my-company/my-project\n```\n\n### --from <PROJECT>\nSelect specified project and all its downstream dependencies.\n- Validate changes' impact on downstream projects\n- Build all projects affected by specific project\n```bash\nrush build --from @my-company/my-library\n```\n\n### --impacted-by <PROJECT>\nSelect projects that might be affected by specified project changes, excluding dependencies.\n- Quick test of project change impacts\n- Use when dependency status is already correct\n```bash\nrush build --impacted-by @my-company/my-library\n```\n\n### --impacted-by-except <PROJECT>\nSimilar to `--impacted-by`, but excludes specified project itself.\n- Project itself has been manually built\n- Only need to test downstream impacts\n```bash\nrush build --impacted-by-except @my-company/my-library\n```\n\n### --only <PROJECT>\nOnly select specified project, completely ignore dependency relationships.\n- Dependency status is known to be correct\n- Combine with other selection parameters\n```bash\nrush build --only @my-company/my-project\nrush build --impacted-by projectA --only projectB\n```\n\n## Command Usage Guidelines\n\n### Command Tool Selection\n\nChoose the correct command tool based on different scenarios:\n\n1. **`rush` command** - Execute operations affecting the entire repository or multiple projects\n   - Strict parameter validation and documentation\n   - Support for global and batch commands\n   - Suitable for standardized workflows\n   - Use cases: Dependency installation, building, publishing\n\n2. **`rushx` command** - Execute specific scripts for a single project\n   - Similar to `npm run` or `pnpm run`\n   - Uses Rush version selector for toolchain consistency\n   - Prepares shell environment based on Rush configuration\n   - Use cases: Running project-specific build scripts, tests, dev servers\n\n3. **`rush-pnpm` command** - Replace direct use of pnpm in Rush repository\n   - Sets correct PNPM workspace context\n   - Supports Rush-specific enhancements\n   - Provides compatibility checks with Rush\n   - Use cases: When direct PNPM commands are needed\n\n### Install vs Update\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush update` | Updates shrinkwrap, installs new dependencies | After cloning, after git pull, after modifying package.json |\n| `rush install` | Read-only install from existing shrinkwrap | CI/CD pipelines, ensuring version consistency |\n\n### Build vs Rebuild\n\n| Command | Behavior | When to Use |\n|---------|----------|-------------|\n| `rush build` | Incremental build, only changed projects | Daily development, quick validation |\n| `rush rebuild` | Clean build all projects | Complete rebuild needed, investigating issues |\n\n## Dependency Management\n\n### Package Manager Selection\nChoose in `rush.json`:\n```json\n{\n  \"pnpmVersion\": \"8.x.x\"     // Preferred - efficient, strict\n  // \"npmVersion\": \"8.x.x\"   // Alternative\n  // \"yarnVersion\": \"1.x.x\"  // Alternative\n}\n```\n\n### Version Constraints\nConfigure in `common/config/subspaces/<subspace>/common-versions.json`:\n```json\n{\n  \"preferredVersions\": {\n    \"react\": \"17.0.2\",\n    \"typescript\": \"~4.5.0\"\n  },\n  \"implicitlyPreferredVersions\": true,\n  \"allowedAlternativeVersions\": {\n    \"typescript\": [\"~4.5.0\", \"~4.6.0\"]\n  }\n}\n```\n\n### Adding/Removing Dependencies\nAlways use Rush commands, not npm/pnpm directly:\n```bash\nrush add -p lodash --dev      # Add dev dependency\nrush add -p react --exact     # Add exact version\nrush remove -p lodash         # Remove dependency\n```\n\n## Build Cache Configuration\n\nConfigure in `<project>/config/rush-project.json`:\n```json\n{\n  \"operationSettings\": [\n    {\n      \"operationName\": \"build\",\n      \"outputFolderNames\": [\"lib\", \"dist\"],\n      \"disableBuildCacheForOperation\": false,\n      \"dependsOnEnvVars\": [\"MY_ENV_VAR\"]\n    }\n  ]\n}\n```\n\n**Cache Behavior:**\n- Cache stored in `common/temp/build-cache`\n- Invalidated by: source changes, dependency changes, env vars, command params\n- Parallel builds supported via `enableParallelism`\n\n## Troubleshooting\n\n### Dependency Issues\n- Avoid `npm`, `pnpm`, `yarn` - use Rush commands\n- Run `rush purge` to clean environment\n- Run `rush update --recheck` to force dependency check\n\n### Build Issues\n- Use `rush rebuild` to skip cache\n- Check `rushx build` output for specific errors\n- Use `--verbose` for detailed logs\n\n### Performance Issues\n- Use selection flags (`--to`, `--from`, etc.) to reduce scope\n- Enable build cache in rush-project.json\n- Consider subspace for very large monorepos\n\n## Subspace for Large Monorepos\n\n**What is Subspace:**\n- Allows multiple PNPM lock files in one Rush monorepo\n- Enables independent dependency management per team/project group\n- Reduces risk from dependency updates\n- Improves install/update performance\n\n**When to Use:**\n- Large monorepos (50+ projects)\n- Multiple teams with different dependency needs\n- Conflicting version requirements\n- Need for faster dependency operations\n\n## Official Resources\n\n### Documentation & References\n\n**Official Websites:**\n- [RushStack.io](https://rushstack.io/) - Main documentation site\n- [Rush.js.io](https://rushjs.io/) - Rush build orchestrator documentation\n- [Heft.rushstack.io](https://heft.rushstack.io/) - Heft build tool documentation\n- [API Extractor](https://api-extractor.com/) - API documentation and rollups\n\n**Search Existing Issues:**\n- Before creating new issues, search [rush-stack-builds issues](https://github.com/microsoft/rushstack/issues)\n\n### When to Search vs. Ask\n\n**Search these resources first when:**\n- Encountering error messages\n- Unsure about configuration options\n- Looking for examples or tutorials\n- Need to understand Rush behavior\n\n**Ask the user for clarification when:**\n- The specific use case is unclear\n- Multiple approaches are possible\n- Context is missing to provide accurate guidance\n- The issue might be environment-specific\n\n## Detailed References\n\nFor expanded information on specific domains, see:\n- `references/core-commands.md` - Detailed command reference\n- `references/project-configuration.md` - Configuration file specifications\n- `references/dependency-management.md` - Advanced dependency patterns\n- `references/build-system.md` - Build optimization and caching\n- `references/subspace.md` - Subspace setup and usage\n\n<!-- File: apps/heft/heft-plugin.json (Tokens: ~321 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"copy-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/CopyFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/copy-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"delete-files-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/DeleteFilesPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/delete-files-options.schema.json\"\n    },\n    {\n      \"pluginName\": \"node-service-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/NodeServicePlugin\",\n      \"parameterScope\": \"node-service\",\n      \"parameters\": [\n        {\n          \"longName\": \"--serve\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Start a local web server for testing purposes. This parameter is only available when running in watch mode.\"\n        }\n      ]\n    },\n    {\n      \"pluginName\": \"run-script-plugin\",\n      \"entryPoint\": \"./lib-commonjs/plugins/RunScriptPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/run-script-options.schema.json\"\n    },\n    {\n      \"entryPoint\": \"./lib-commonjs/plugins/SetEnvironmentVariablesPlugin\",\n      \"pluginName\": \"set-environment-variables-plugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/set-environment-variables-plugin.schema.json\"\n    }\n  ]\n}\n\n<!-- File: build-tests/heft-example-lifecycle-plugin/heft-plugin.json (Tokens: ~60 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [\n    {\n      \"pluginName\": \"example-lifecycle-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n\n<!-- File: build-tests/heft-example-plugin-01/heft-plugin.json (Tokens: ~59 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-01\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n\n<!-- File: build-tests/heft-example-plugin-02/heft-plugin.json (Tokens: ~59 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"example-plugin-02\",\n      \"entryPoint\": \"./lib-commonjs/index\"\n    }\n  ]\n}\n\n<!-- File: build-tests/heft-parameter-plugin/heft-plugin.json (Tokens: ~544 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"heft-parameter-plugin\",\n      \"entryPoint\": \"./lib-commonjs/index\",\n      \"parameterScope\": \"heft-parameter-plugin\",\n      \"parameters\": [\n        {\n          \"longName\": \"--custom-parameter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Test running a custom flag parameter\"\n        },\n        {\n          \"longName\": \"--custom-integer-parameter\",\n          \"parameterKind\": \"integer\",\n          \"description\": \"Test running a custom integer parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-integer-list-parameter\",\n          \"parameterKind\": \"integerList\",\n          \"description\": \"Test running a custom integer list parameter\",\n          \"argumentName\": \"INTEGER\"\n        },\n        {\n          \"longName\": \"--custom-string-parameter\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"TEXT\",\n          \"description\": \"Test running a custom string parameter\",\n          \"required\": true\n        },\n        {\n          \"longName\": \"--custom-string-list-parameter\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"LIST_ITEM\",\n          \"description\": \"Test running a custom string list parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-parameter\",\n          \"parameterKind\": \"choice\",\n          \"alternatives\": [\n            {\n              \"name\": \"red\",\n              \"description\": \"The red choice\"\n            },\n            {\n              \"name\": \"blue\",\n              \"description\": \"The blue choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice parameter\"\n        },\n        {\n          \"longName\": \"--custom-choice-list-parameter\",\n          \"parameterKind\": \"choiceList\",\n          \"alternatives\": [\n            {\n              \"name\": \"totodile\",\n              \"description\": \"The totodile choice\"\n            },\n            {\n              \"name\": \"jynx\",\n              \"description\": \"The jynx choice\"\n            },\n            {\n              \"name\": \"gudetama\",\n              \"description\": \"The gudetama choice\"\n            },\n            {\n              \"name\": \"impidimp\",\n              \"description\": \"The impidimp choice\"\n            },\n            {\n              \"name\": \"wobbuffet\",\n              \"description\": \"The wobbuffet choice\"\n            }\n          ],\n          \"description\": \"Test running a custom choice list parameter\"\n        }\n      ]\n    }\n  ]\n}\n\n<!-- File: build-tests/rush-mcp-example-plugin/rush-mcp-plugin.json (Tokens: ~208 | Category: plugin-manifest) -->\n/**\n * Every plugin package must contain a \"rush-mcp-plugin.json\" manifest in the top-level folder\n * (next to package.json).\n */\n{\n  /**\n   * A name that uniquely identifies your plugin.  Generally this should be the same name as\n   * the NPM package.  If two NPM packages have the same pluginName, they cannot be loaded together.\n   */\n  \"pluginName\": \"rush-mcp-example-plugin\",\n\n  /**\n   * (OPTIONAL) Indicates that your plugin accepts a config file.  The MCP server will load this\n   * file and provide it to the plugin.\n   *\n   * The config file path will be `<rush-repo>/common/config/rush-mcp/<plugin-name>.json`.\n   */\n  \"configFileSchema\": \"./lib-commonjs/rush-mcp-example-plugin.schema.json\",\n\n  /**\n   * The entry point, whose default export should be a class that implements\n   */\n  \"entryPoint\": \"./lib-commonjs/index.js\"\n}\n\n<!-- File: build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json (Tokens: ~24 | Category: plugin-manifest) -->\n{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n\n<!-- File: build-tests/rush-redis-cobuild-plugin-integration-test/sandbox/sharded-repo/common/config/rush-plugins/rush-redis-cobuild-plugin.json (Tokens: ~24 | Category: plugin-manifest) -->\n{\n  \"url\": \"redis://localhost:6379\",\n  \"passwordEnvironmentVariable\": \"REDIS_PASS\"\n}\n\n<!-- File: common/config/rush-plugins/rush-serve-plugin.json (Tokens: ~111 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/rush/v5/rush-serve-plugin-options.schema.json\",\n  \"phasedCommands\": [\"start\"],\n  \"portParameterLongName\": \"--port\",\n  \"buildStatusWebSocketPath\": \"/ws\",\n  \"logServePath\": \"/logs\",\n  \"globalRouting\": [\n    {\n      \"workspaceRelativeFolder\": \"rush-plugins/rush-serve-plugin/lib-esm/dashboard\",\n      \"servePath\": \"/dashboard\",\n      \"immutable\": false\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-api-extractor-plugin/heft-plugin.json (Tokens: ~62 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"api-extractor-plugin\",\n      \"entryPoint\": \"./lib-commonjs/ApiExtractorPlugin\"\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-api-extractor-plugin/README.md (Tokens: ~142 | Category: plugin-manifest) -->\n# @rushstack/heft-api-extractor-plugin\n\nThis is a Heft plugin for running API Extractor.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-api-extractor-plugin/CHANGELOG.md) - Find\nout what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n<!-- File: heft-plugins/heft-dev-cert-plugin/heft-plugin.json (Tokens: ~105 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"lifecyclePlugins\": [],\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"trust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/TrustDevCertificatePlugin\"\n    },\n    {\n      \"pluginName\": \"untrust-dev-certificate-plugin\",\n      \"entryPoint\": \"./lib-commonjs/UntrustDevCertificatePlugin\"\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-dev-cert-plugin/README.md (Tokens: ~106 | Category: plugin-manifest) -->\n# @rushstack/heft-dev-cert-plugin\n\nThis is a Heft plugin to manage development certificates for local serve.\nAutomatically configures webpack-dev-server to use https in serve mode.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-dev-cert-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n<!-- File: heft-plugins/heft-isolated-typescript-transpile-plugin/heft-plugin.json (Tokens: ~89 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"swc-isolated-transpile-plugin\",\n      \"entryPoint\": \"./lib-commonjs/SwcIsolatedTranspilePlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/swc-isolated-transpile-plugin.schema.json\"\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-isolated-typescript-transpile-plugin/README.md (Tokens: ~110 | Category: plugin-manifest) -->\n# @rushstack/heft-isolated-typescript-transpile-plugin\n\nThis is a Heft plugin for using swc as an isolated module transpiler\nduring the \"build\" stage.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-isolated-typescript-transpile-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n<!-- File: heft-plugins/heft-jest-plugin/heft-plugin.json (Tokens: ~1140 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"jest-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JestPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-jest-plugin.schema.json\",\n\n      \"parameterScope\": \"jest\",\n      \"parameters\": [\n        {\n          \"longName\": \"--config\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"RELATIVE_PATH\",\n          \"description\": \"Use this parameter to control which Jest configuration file will be used to run Jest tests.  If not specified, it will default to \\\"config/jest.config.json\\\".  This corresponds to the \\\"--config\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--debug-heft-reporter\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Normally Heft installs a custom Jest reporter so that test results are presented consistently with other task logging.  If you suspect a problem with the HeftJestReporter, specify \\\"--debug-heft-reporter\\\" to temporarily disable it so that you can compare with how Jest's default reporter would have presented it.  Include this output in your bug report.  Do not use \\\"--debug-heft-reporter\\\" in production.\"\n        },\n        {\n          \"longName\": \"--detect-open-handles\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Attempt to collect and print open handles preventing Jest from exiting cleanly.  This option has a significant performance penalty and should only be used for debugging.  This corresponds to the \\\"--detectOpenHandles\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--disable-code-coverage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Disable any configured code coverage.  If code coverage is not configured, this parameter has no effect.\"\n        },\n        {\n          \"longName\": \"--find-related-tests\",\n          \"parameterKind\": \"stringList\",\n          \"argumentName\": \"SOURCE_FILE\",\n          \"description\": \"Find and run the tests that cover a source file that was passed in as an argument.  This corresponds to the \\\"--findRelatedTests\\\" parameter in Jest's documentation. This parameter is not compatible with watch mode.\"\n        },\n        {\n          \"longName\": \"--log-heap-usage\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Logs the heap usage after every test. Useful to debug memory leaks. Use together with --expose-gc in node.\"\n        },\n        {\n          \"longName\": \"--max-workers\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"COUNT_OR_PERCENTAGE\",\n          \"description\": \"Use this parameter to control maximum number of worker processes tests are allowed to use.  This parameter is similar to the parameter noted in the Jest documentation, and can either be an integer representing the number of workers to spawn when running tests, or can be a string representing a percentage of the available CPUs on the machine to utilize. Example values: \\\"3\\\", \\\"25%%\\\"\"\n        },\n        {\n          \"longName\": \"--silent\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Prevent tests from printing messages through the console.  This corresponds to the \\\"--silent\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-name-pattern\",\n          \"shortName\": \"-t\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a name that matches a regular expression.  The REGEXP is matched against the full name, which is a combination of the test name and all its surrounding describe blocks.  This corresponds to the \\\"--testNamePattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-ignore-patterns\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Avoid running tests with a source file path that matches one ore more regular expressions.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathIgnorePatterns\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-path-pattern\",\n          \"parameterKind\": \"string\",\n          \"argumentName\": \"REGEXP\",\n          \"description\": \"Run only tests with a source file path that matches a regular expression.  On Windows you will need to use \\\"/\\\" instead of \\\"\\\\\\\".  This corresponds to the \\\"--testPathPattern\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--test-timeout-ms\",\n          \"parameterKind\": \"integer\",\n          \"argumentName\": \"TIMEOUT\",\n          \"description\": \"Change the default timeout for tests; if a test doesn't complete within this many milliseconds, it will fail.  Individual tests can override the default.  If unspecified, the default is normally 5000 ms.  This corresponds to the \\\"--testTimeout\\\" parameter in Jest's documentation.\"\n        },\n        {\n          \"longName\": \"--update-snapshots\",\n          \"shortName\": \"-u\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Update Jest snapshots while running the tests.  This corresponds to the \\\"--updateSnapshots\\\" parameter in Jest.\"\n        }\n      ]\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-jest-plugin/README.md (Tokens: ~139 | Category: plugin-manifest) -->\n# @rushstack/heft-jest-plugin\n\nThis is a Heft plugin for running Jest.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-jest-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n<!-- File: heft-plugins/heft-json-schema-typings-plugin/heft-plugin.json (Tokens: ~88 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"json-schema-typings-plugin\",\n      \"entryPoint\": \"./lib-commonjs/JsonSchemaTypingsPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-json-schema-typings-plugin.schema.json\"\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-json-schema-typings-plugin/README.md (Tokens: ~973 | Category: plugin-manifest) -->\n# @rushstack/heft-json-schema-typings-plugin\n\nThis is a Heft plugin that generates TypeScript `.d.ts` typings from JSON Schema files\n(files matching `*.schema.json`). It uses the\n[json-schema-to-typescript](https://www.npmjs.com/package/json-schema-to-typescript) library\nto produce type declarations that can be imported alongside the schema at build time.\n\n## Setup\n\n1. Add the plugin as a `devDependency` of your project:\n\n   ```bash\n   rush add -p @rushstack/heft-json-schema-typings-plugin --dev\n   ```\n\n2. Load the plugin in your project's **heft.json** configuration:\n\n   ```jsonc\n   {\n     \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json\",\n     \"phasesByName\": {\n       \"build\": {\n         \"tasksByName\": {\n           \"json-schema-typings\": {\n             \"taskPlugin\": {\n               \"pluginPackage\": \"@rushstack/heft-json-schema-typings-plugin\",\n               \"options\": {\n                 // (Optional) Defaults shown below\n                 // \"srcFolder\": \"src\",\n                 // \"generatedTsFolders\": [\"temp/schemas-ts\"],\n                 // \"formatWithPrettier\": false\n               }\n             }\n           }\n         }\n       }\n     }\n   }\n   ```\n\n3. Place your `*.schema.json` files under the source folder (default: `src/`).\n   The plugin will generate a corresponding `.d.ts` file for each schema.\n\n## Plugin options\n\n| Option               | Type       | Default              | Description                                                                      |\n| -------------------- | ---------- | -------------------- | -------------------------------------------------------------------------------- |\n| `srcFolder`          | `string`   | `\"src\"`              | Source directory to scan for `*.schema.json` files.                              |\n| `generatedTsFolders` | `string[]` | `[\"temp/schemas-ts\"]`| Output directories for the generated `.d.ts` files.                             |\n| `formatWithPrettier` | `boolean`  | `false`              | When `true`, format generated typings with [prettier](https://prettier.io/). Requires `prettier` as an installed dependency. |\n\n## Vendor extension: `x-tsdoc-release-tag`\n\nThe plugin recognises a custom vendor extension property called **`x-tsdoc-release-tag`** in\nyour JSON Schema files. When present at the top level of a schema, its value (a\n[TSDoc release tag](https://tsdoc.org/pages/spec/tag_kinds/#release-tags) such as `@public`,\n`@beta`, `@alpha`, or `@internal`) is injected into JSDoc comments of every exported\ndeclaration in the generated `.d.ts` file.\n\nThis is useful when the generated types are re-exported from a package entry point that is\nprocessed by [API Extractor](https://api-extractor.com/), which uses release tags to\ndetermine the API surface visibility.\n\n### Example\n\n**my-config.schema.json**\n\n```json\n{\n  \"x-tsdoc-release-tag\": \"@public\",\n  \"title\": \"My Config\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": { \"type\": \"string\" }\n  },\n  \"additionalProperties\": false\n}\n```\n\n**Generated output (my-config.schema.json.d.ts)**\n\n```ts\n/**\n * @public\n */\nexport interface MyConfig {\n  name?: string;\n}\n```\n\nThe `x-tsdoc-release-tag` property is stripped from the schema before type generation, so it\ndoes not affect the shape of the emitted types. The value must be a single lowercase word\nstarting with `@` (for example `@public` or `@beta`); invalid values cause a build error.\n\n> **Note:** `@rushstack/node-core-library`'s `JsonSchema` class accepts vendor extension\n> keywords matching the `x-<vendor>-<keyword>` pattern by default, so schema files containing\n> `x-tsdoc-release-tag` will validate without any additional configuration.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-json-schema-typings-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n<!-- File: heft-plugins/heft-lint-plugin/heft-plugin.json (Tokens: ~147 | Category: plugin-manifest) -->\n{\n  \"$schema\": \"https://developer.microsoft.com/json-schemas/heft/v0/heft-plugin.schema.json\",\n\n  \"taskPlugins\": [\n    {\n      \"pluginName\": \"lint-plugin\",\n      \"entryPoint\": \"./lib-commonjs/LintPlugin\",\n      \"optionsSchema\": \"./lib-commonjs/schemas/heft-lint-plugin.schema.json\",\n\n      \"parameterScope\": \"lint\",\n      \"parameters\": [\n        {\n          \"longName\": \"--fix\",\n          \"parameterKind\": \"flag\",\n          \"description\": \"Fix all encountered rule violations where the violated rule provides a fixer. When running in production mode, fixes will be disabled regardless of this parameter.\"\n        }\n      ]\n    }\n  ]\n}\n\n<!-- File: heft-plugins/heft-lint-plugin/README.md (Tokens: ~158 | Category: plugin-manifest) -->\n# @rushstack/heft-lint-plugin\n\nThis is a Heft plugin to run ESLint or TSLint. Intended for use with @rushstack/heft-typescript-plugin.\n\n## Links\n\n- [CHANGELOG.md](\n  https://github.com/microsoft/rushstack/blob/main/heft-plugins/heft-lint-plugin/CHANGELOG.md) - Find\n  out what's new in the latest version\n- [@rushstack/heft](https://www.npmjs.com/package/@rushstack/heft) - Heft is a config-driven toolchain that invokes popular tools such as TypeScript, ESLint, Jest, Webpack, and API Extractor.\n\nHeft is part of the [Rush Stack](https://rushstack.io/) family of projects.\n\n<!-- ... +39 more modular skills available via /api/skills/microsoft/rushstack?path={path} -->\n</yakaai_skills>"}