├── tsconfig.json ├── package.json ├── .gitignore ├── .devcontainer └── devcontainer.json ├── LICENSE ├── bun.lock ├── scripts ├── download_all_cursors.sh └── get_cursor_product_json.sh ├── .github └── workflows │ └── update-cursor-links.yml ├── src ├── update-readme-with-linux-links.ts ├── update-readme-from-history.ts ├── backfill-missing-linux-links.ts ├── backfill-linux-arm64.ts └── update-cursor-links.ts ├── buymeacoffee.svg └── cursor_products ├── 0.47.9 └── product.json └── 0.48.0 └── product.json /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2022", 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "esModuleInterop": true, 7 | "strict": true, 8 | "skipLibCheck": true, 9 | "isolatedModules": true, 10 | "outDir": "dist", 11 | "forceConsistentCasingInFileNames": true, 12 | "lib": ["esnext"], 13 | "types": ["node"] 14 | }, 15 | "include": ["src/**/*"], 16 | "exclude": ["node_modules", "dist"] 17 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cursor-downloads-tracker", 3 | "version": "1.0.0", 4 | "devDependencies": { 5 | "@types/node": "^18.18.0", 6 | "typescript": "^5.2.2", 7 | "bun-types": "latest" 8 | }, 9 | "description": "Automatically tracks and updates Cursor download links", 10 | "scripts": { 11 | "build": "tsc", 12 | "start": "bun src/update-cursor-links.ts", 13 | "update": "bun src/update-cursor-links.ts", 14 | "test": "echo \"No tests specified\" && exit 0" 15 | }, 16 | "type": "module" 17 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | node_modules/ 3 | .pnp 4 | .pnp.js 5 | 6 | # Build artifacts 7 | dist/ 8 | build/ 9 | out/ 10 | 11 | # Bun files 12 | bun.lockb 13 | 14 | # Logs 15 | logs 16 | *.log 17 | npm-debug.log* 18 | yarn-debug.log* 19 | yarn-error.log* 20 | 21 | # Editor directories and files 22 | .idea/ 23 | .vscode/* 24 | !.vscode/extensions.json 25 | !.vscode/settings.json 26 | *.suo 27 | *.ntvs* 28 | *.njsproj 29 | *.sln 30 | *.sw? 31 | 32 | # OS specific 33 | .DS_Store 34 | Thumbs.db 35 | *.backup 36 | squashfs-root 37 | *AppImage -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TypeScript + Bun Development", 3 | "image": "mcr.microsoft.com/devcontainers/javascript-node:18", 4 | "features": { 5 | "ghcr.io/devcontainers/features/node:1": { 6 | "version": "18" 7 | } 8 | }, 9 | "customizations": { 10 | "vscode": { 11 | "extensions": [ 12 | "dbaeumer.vscode-eslint", 13 | "esbenp.prettier-vscode", 14 | "bradlc.vscode-tailwindcss", 15 | "oven.bun-vscode" 16 | ] 17 | } 18 | }, 19 | "postCreateCommand": "curl -fsSL https://bun.sh/install | bash && npm install", 20 | "remoteUser": "node" 21 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 oslook 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /bun.lock: -------------------------------------------------------------------------------- 1 | { 2 | "lockfileVersion": 1, 3 | "workspaces": { 4 | "": { 5 | "name": "cursor-downloads-tracker", 6 | "devDependencies": { 7 | "@types/node": "^18.18.0", 8 | "bun-types": "latest", 9 | "typescript": "^5.2.2", 10 | }, 11 | }, 12 | }, 13 | "packages": { 14 | "@types/node": ["@types/node@18.19.76", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw=="], 15 | 16 | "@types/ws": ["@types/ws@8.5.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw=="], 17 | 18 | "bun-types": ["bun-types@1.2.4", "", { "dependencies": { "@types/node": "*", "@types/ws": "~8.5.10" } }, "sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q=="], 19 | 20 | "typescript": ["typescript@5.7.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw=="], 21 | 22 | "undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /scripts/download_all_cursors.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Check if a JSON file is provided 4 | if [ -z "$1" ]; then 5 | echo "Usage: $0 [force]" 6 | echo "Example: $0 versions.json" 7 | echo "Example (force mode): $0 versions.json force" 8 | exit 1 9 | fi 10 | 11 | JSON_FILE=$1 12 | FORCE_DOWNLOAD=false 13 | if [ "$2" == "force" ]; then 14 | FORCE_DOWNLOAD=true 15 | echo "Force mode enabled. Will re-download and process all found Linux versions." 16 | fi 17 | 18 | # Ensure the JSON file exists 19 | if [ ! -f "$JSON_FILE" ]; then 20 | echo "Error: JSON file '$JSON_FILE' does not exist." 21 | exit 1 22 | fi 23 | 24 | # Ensure the download script exists and is executable 25 | DOWNLOAD_SCRIPT="scripts/get_cursor_product_json.sh" 26 | if [ ! -f "$DOWNLOAD_SCRIPT" ] || [ ! -x "$DOWNLOAD_SCRIPT" ]; then 27 | echo "Error: The download script '$DOWNLOAD_SCRIPT' does not exist or is not executable." 28 | echo "Please ensure 'get_cursor_product_json.sh' is in the current directory and has execute permissions." 29 | exit 1 30 | fi 31 | 32 | echo "Parsing '$JSON_FILE' file..." 33 | echo "-----------------------------------" 34 | 35 | # Use jq to iterate through the versions in the JSON 36 | # Filter for objects that have a "linux-x64" platform 37 | jq -c '.versions[] | select(.platforms."linux-x64" != null)' "$JSON_FILE" | while read -r version_obj; do 38 | 39 | # Extract the version number and Linux URL from the JSON object 40 | VERSION=$(echo "$version_obj" | jq -r '.version') 41 | LINUX_URL=$(echo "$version_obj" | jq -r '.platforms."linux-x64"') 42 | 43 | OUTPUT_FILE="cursor_products/${VERSION}/product.json" 44 | 45 | # Check if the product.json file already exists, unless force mode is enabled 46 | if [ "$FORCE_DOWNLOAD" = false ] && [ -f "$OUTPUT_FILE" ]; then 47 | echo "Product.json for version $VERSION already exists. Skipping." 48 | continue 49 | fi 50 | 51 | echo "Processing version: $VERSION" 52 | echo "Download URL: $LINUX_URL" 53 | 54 | # Call the download script and check its exit status 55 | if ! "$DOWNLOAD_SCRIPT" "$LINUX_URL"; then 56 | echo "Failed to process version $VERSION. Please check the output of the download script." 57 | else 58 | echo "Successfully processed version $VERSION." 59 | fi 60 | echo "-----------------------------------" 61 | done 62 | 63 | echo "Finished processing all specified versions." -------------------------------------------------------------------------------- /.github/workflows/update-cursor-links.yml: -------------------------------------------------------------------------------- 1 | name: Update Cursor Download Links 2 | 3 | on: 4 | schedule: 5 | - cron: '0 * * * *' # Run hourly at minute 0 6 | workflow_dispatch: # Allow manual triggering 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | update-links: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout repository 16 | uses: actions/checkout@v3 17 | 18 | - name: Checkout repository 19 | uses: actions/checkout@v4 20 | with: 21 | repository: oslook/cursor-download-hub 22 | token: ${{ secrets.API_TOKEN_GITHUB }} 23 | ref: main 24 | path: output/cursor-download-hub 25 | 26 | - name: Set up Node.js 27 | uses: actions/setup-node@v3 28 | with: 29 | node-version: '18' 30 | 31 | - name: Setup Bun 32 | uses: oven-sh/setup-bun@v1 33 | with: 34 | bun-version: latest 35 | 36 | - name: Install dependencies 37 | run: bun install 38 | 39 | - name: Run update script 40 | run: bun src/update-cursor-links.ts 41 | 42 | - name: Run update script 43 | run: ./scripts/download_all_cursors.sh version-history.json 44 | 45 | - name: Check for changes 46 | id: git-check 47 | run: | 48 | git add README.md version-history.json cursor_products 49 | if ! git diff --staged --quiet; then 50 | echo "changes=true" >> $GITHUB_OUTPUT 51 | fi 52 | 53 | - name: Commit and push if changed 54 | if: steps.git-check.outputs.changes == 'true' 55 | run: | 56 | git config --global user.email "github-actions@github.com" 57 | git config --global user.name "GitHub Actions" 58 | git add README.md version-history.json cursor_products 59 | git commit -m "Update Cursor download links" 60 | git push 61 | 62 | - name: copy file 63 | run: cp -rf version-history.json output/cursor-download-hub/public/ 64 | 65 | - name: Pushes to another repository 66 | uses: cpina/github-action-push-to-another-repository@main 67 | env: 68 | API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} 69 | with: 70 | source-directory: 'output/cursor-download-hub' 71 | destination-github-username: "oslook" 72 | destination-repository-name: 'cursor-download-hub' 73 | user-email: 41898282+github-actions[bot]@users.noreply.github.com 74 | user-name: github-actions[bot] 75 | commit-message: 'Auto updated' 76 | target-branch: main 77 | -------------------------------------------------------------------------------- /scripts/get_cursor_product_json.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Check if a complete URL is provided 4 | if [ -z "$1" ]; then 5 | echo "Usage: $0 " 6 | echo "Example: $0 https://downloads.cursor.com/production/.../Cursor-1.5.9-x86_64.AppImage" 7 | exit 1 8 | fi 9 | 10 | DOWNLOAD_URL=$1 11 | OUTPUT_DIR="cursor_products" 12 | EXTRACT_DIR="temp_cursor_extract" 13 | 14 | # Extract the filename from the URL 15 | APPIMAGE_FILENAME=$(basename "$DOWNLOAD_URL") 16 | 17 | # Extract the version number from the filename using a regular expression 18 | VERSION=$(echo "$APPIMAGE_FILENAME" | sed -n 's/.*-\([0-9.]*\)-x86_64.AppImage/\1/p') 19 | 20 | # Check if the version was successfully extracted 21 | if [ -z "$VERSION" ]; then 22 | echo "Error: Could not parse version number from the filename. Please ensure the URL points to a valid AppImage file." 23 | exit 1 24 | fi 25 | 26 | echo "Attempting to download file: $APPIMAGE_FILENAME" 27 | echo "Download URL: $DOWNLOAD_URL" 28 | echo "Parsed Version: $VERSION" 29 | 30 | # 1. Download the AppImage file 31 | if ! wget --quiet --output-document="${APPIMAGE_FILENAME}" "$DOWNLOAD_URL"; then 32 | echo "Error: Download failed. Please check the URL or your network connection." 33 | rm -f "${APPIMAGE_FILENAME}" 34 | exit 1 35 | fi 36 | 37 | echo "Download complete." 38 | 39 | # 2. Create a temporary directory for extracted files 40 | mkdir -p "$EXTRACT_DIR" 41 | 42 | # 3. Extract the AppImage file contents 43 | echo "Extracting AppImage package..." 44 | chmod +x "$APPIMAGE_FILENAME" 45 | if ! ./"$APPIMAGE_FILENAME" --appimage-extract > /dev/null; then 46 | echo "Extraction failed. Attempting fallback with 'unsquashfs'." 47 | # Fallback method: using unsquashfs (requires squashfs-tools) 48 | if command -v unsquashfs &>/dev/null; then 49 | unsquashfs -f -d "$EXTRACT_DIR" "$APPIMAGE_FILENAME" 50 | else 51 | echo "Error: Fallback method 'unsquashfs' is not available. Please ensure 'squashfs-tools' is installed." 52 | rm -f "$APPIMAGE_FILENAME" 53 | rmdir "$EXTRACT_DIR" > /dev/null 2>&1 54 | exit 1 55 | fi 56 | fi 57 | 58 | # 4. Locate and copy the product.json file 59 | # The extracted files are typically in a 'squashfs-root' directory 60 | SOURCE_FILE="${EXTRACT_DIR}/squashfs-root/usr/share/cursor/resources/app/product.json" 61 | if [ ! -f "$SOURCE_FILE" ]; then 62 | # In some cases, files might be extracted to the root of the temp directory 63 | SOURCE_FILE="./squashfs-root/usr/share/cursor/resources/app/product.json" 64 | fi 65 | 66 | if [ -f "$SOURCE_FILE" ]; then 67 | mkdir -p "${OUTPUT_DIR}/${VERSION}" 68 | cp "$SOURCE_FILE" "${OUTPUT_DIR}/${VERSION}/product.json" 69 | echo "Successfully extracted and saved product.json for version ${VERSION}." 70 | echo "File location: ${OUTPUT_DIR}/${VERSION}/product.json" 71 | else 72 | echo "Error: product.json file not found in the expected path inside the extracted AppImage." 73 | fi 74 | 75 | # 5. Clean up temporary files 76 | rm -rf "$EXTRACT_DIR" "$APPIMAGE_FILENAME" 77 | echo "Cleanup complete." 78 | -------------------------------------------------------------------------------- /src/update-readme-with-linux-links.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import { fileURLToPath } from 'url'; 4 | 5 | // Get dirname in ESM 6 | const __filename = fileURLToPath(import.meta.url); 7 | const __dirname = path.dirname(__filename); 8 | 9 | // Interface for version history JSON 10 | interface VersionHistoryEntry { 11 | version: string; 12 | date: string; 13 | platforms: { 14 | [platform: string]: string; // platform -> download URL 15 | }; 16 | } 17 | 18 | interface VersionHistory { 19 | versions: VersionHistoryEntry[]; 20 | } 21 | 22 | /** 23 | * Read version history from JSON file 24 | */ 25 | function readVersionHistory(): VersionHistory { 26 | const historyPath = path.join(process.cwd(), 'version-history.json'); 27 | if (fs.existsSync(historyPath)) { 28 | try { 29 | const jsonData = fs.readFileSync(historyPath, 'utf8'); 30 | return JSON.parse(jsonData) as VersionHistory; 31 | } catch (error) { 32 | console.error('Error reading version history:', error instanceof Error ? error.message : 'Unknown error'); 33 | return { versions: [] }; 34 | } 35 | } else { 36 | console.log('version-history.json not found, creating a new file'); 37 | return { versions: [] }; 38 | } 39 | } 40 | 41 | /** 42 | * Update README.md with Linux links from version-history.json 43 | */ 44 | async function updateReadmeWithLinuxLinks(): Promise { 45 | console.log('Starting README.md update with Linux links...'); 46 | 47 | // Read version history 48 | const history = readVersionHistory(); 49 | 50 | // Read README.md content 51 | const readmePath = path.join(process.cwd(), 'README.md'); 52 | if (!fs.existsSync(readmePath)) { 53 | console.error('README.md file not found'); 54 | return; 55 | } 56 | 57 | // Create a backup of the README.md file 58 | const backupPath = path.join(process.cwd(), 'README.md.linux-update-backup'); 59 | fs.copyFileSync(readmePath, backupPath); 60 | console.log(`Created backup of README.md at ${backupPath}`); 61 | 62 | let readmeContent = fs.readFileSync(readmePath, 'utf8'); 63 | 64 | // First, fix duplicate entries for 0.46.10 65 | const duplicatePattern = /\| 0\.46\.10 \| 2025-03-06 \|.*?\| .*?linux-x64.*?\) \|\n/s; 66 | readmeContent = readmeContent.replace(duplicatePattern, ''); 67 | 68 | // Update 'Not Ready' entries 69 | // The pattern looks for lines like: 70 | // | 0.46.8 | 2025-03-01 | [darwin-universal](...)... | [win32-x64](...)... | Not Ready | 71 | const notReadyPattern = /\| ([\d\.]+) \| ([\d-]+) \| (.*?) \| (.*?) \| Not Ready \|/g; 72 | 73 | readmeContent = readmeContent.replace(notReadyPattern, (match, version, date, macLinks, winLinks) => { 74 | // Find this version in the history 75 | const versionEntry = history.versions.find(entry => entry.version === version); 76 | 77 | if (versionEntry && versionEntry.platforms['linux-x64'] && versionEntry.platforms['linux-arm64']) { 78 | // Create Linux links section 79 | const linuxLinks = `[linux-x64](${versionEntry.platforms['linux-x64']})
[linux-arm64](${versionEntry.platforms['linux-arm64']})`; 80 | 81 | console.log(`Updating Linux links for version ${version}`); 82 | return `| ${version} | ${date} | ${macLinks} | ${winLinks} | ${linuxLinks} |`; 83 | } 84 | 85 | // No Linux links found, keep the line as is 86 | console.log(`No Linux links found for version ${version}, keeping "Not Ready"`); 87 | return match; 88 | }); 89 | 90 | // Write updated content back to README.md 91 | fs.writeFileSync(readmePath, readmeContent); 92 | console.log('README.md has been updated with Linux links'); 93 | } 94 | 95 | // Run the update process 96 | updateReadmeWithLinuxLinks().catch(error => { 97 | console.error('Error updating README.md:', error instanceof Error ? error.message : 'Unknown error'); 98 | process.exit(1); 99 | }); -------------------------------------------------------------------------------- /src/update-readme-from-history.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import { fileURLToPath } from 'url'; 4 | 5 | // Get dirname in ESM 6 | const __filename = fileURLToPath(import.meta.url); 7 | const __dirname = path.dirname(__filename); 8 | 9 | // Interface for version history JSON 10 | interface VersionHistoryEntry { 11 | version: string; 12 | date: string; 13 | platforms: { 14 | [platform: string]: string; // platform -> download URL 15 | }; 16 | } 17 | 18 | interface VersionHistory { 19 | versions: VersionHistoryEntry[]; 20 | } 21 | 22 | /** 23 | * Read version history from JSON file 24 | */ 25 | function readVersionHistory(): VersionHistory { 26 | const historyPath = path.join(process.cwd(), 'version-history.json'); 27 | if (fs.existsSync(historyPath)) { 28 | try { 29 | const jsonData = fs.readFileSync(historyPath, 'utf8'); 30 | return JSON.parse(jsonData) as VersionHistory; 31 | } catch (error) { 32 | console.error('Error reading version history:', error instanceof Error ? error.message : 'Unknown error'); 33 | return { versions: [] }; 34 | } 35 | } else { 36 | console.log('version-history.json not found'); 37 | return { versions: [] }; 38 | } 39 | } 40 | 41 | /** 42 | * Update README.md file with linux-arm64 links from version history 43 | */ 44 | function updateReadmeFromHistory(): void { 45 | console.log('Starting README update process...'); 46 | 47 | // Read version history 48 | const history = readVersionHistory(); 49 | 50 | if (!history.versions || history.versions.length === 0) { 51 | console.log('No versions found in history file'); 52 | return; 53 | } 54 | 55 | // Read README.md 56 | const readmePath = path.join(process.cwd(), 'README.md'); 57 | if (!fs.existsSync(readmePath)) { 58 | console.error('README.md file not found'); 59 | return; 60 | } 61 | 62 | let readmeContent = fs.readFileSync(readmePath, 'utf8'); 63 | 64 | // Create a backup 65 | fs.writeFileSync(`${readmePath}.backup`, readmeContent, 'utf8'); 66 | console.log(`Created backup at ${readmePath}.backup`); 67 | 68 | let updatedCount = 0; 69 | 70 | // Process each version in history 71 | for (const entry of history.versions) { 72 | const version = entry.version; 73 | 74 | // Skip if no linux-arm64 URL 75 | if (!entry.platforms['linux-arm64']) { 76 | console.log(`Version ${version} has no linux-arm64 URL, skipping`); 77 | continue; 78 | } 79 | 80 | // Check if this version has only linux-x64 in README 81 | const linuxX64Only = new RegExp( 82 | `\\| ${version} \\| [\\d-]+ \\| .*? \\| .*? \\| \\[linux-x64\\]\\([^)]+\\) \\|` 83 | ); 84 | 85 | // Check if this version already has linux-arm64 in README 86 | const linuxArm64Present = new RegExp( 87 | `\\| ${version} \\| [\\d-]+ \\| .*? \\| .*? \\| .*?\\[linux-arm64\\]\\([^)]+\\).*? \\|` 88 | ); 89 | 90 | if (linuxArm64Present.test(readmeContent)) { 91 | console.log(`Version ${version} already has linux-arm64 in README, skipping`); 92 | continue; 93 | } 94 | 95 | if (linuxX64Only.test(readmeContent)) { 96 | // Replace the linux-x64 line with both linux-x64 and linux-arm64 97 | const oldLinuxSection = `[linux-x64](${entry.platforms['linux-x64']}) |`; 98 | const newLinuxSection = `[linux-x64](${entry.platforms['linux-x64']})
[linux-arm64](${entry.platforms['linux-arm64']}) |`; 99 | 100 | // Use string replacement to update the line for this version 101 | readmeContent = readmeContent.replace( 102 | new RegExp(`(\\| ${version} \\| [\\d-]+ \\| .*? \\| .*? \\| )\\[linux-x64\\]\\([^)]+\\) \\|`), 103 | `$1${newLinuxSection}` 104 | ); 105 | 106 | console.log(`Updated README for version ${version} with linux-arm64 URL`); 107 | updatedCount++; 108 | } else { 109 | console.log(`Version ${version} doesn't match expected pattern in README, skipping`); 110 | } 111 | } 112 | 113 | console.log(`README update summary: Updated ${updatedCount} versions`); 114 | 115 | // Save the updated README 116 | if (updatedCount > 0) { 117 | fs.writeFileSync(readmePath, readmeContent, 'utf8'); 118 | console.log('README.md updated successfully'); 119 | } else { 120 | console.log('No updates made to README.md'); 121 | } 122 | } 123 | 124 | // Run the update process 125 | updateReadmeFromHistory(); 126 | console.log('Process completed'); -------------------------------------------------------------------------------- /src/backfill-missing-linux-links.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import { fileURLToPath } from 'url'; 4 | 5 | // Get dirname in ESM 6 | const __filename = fileURLToPath(import.meta.url); 7 | const __dirname = path.dirname(__filename); 8 | 9 | // Interface for version history JSON 10 | interface VersionHistoryEntry { 11 | version: string; 12 | date: string; 13 | platforms: { 14 | [platform: string]: string; // platform -> download URL 15 | }; 16 | } 17 | 18 | interface VersionHistory { 19 | versions: VersionHistoryEntry[]; 20 | } 21 | 22 | /** 23 | * Read version history from JSON file 24 | */ 25 | function readVersionHistory(): VersionHistory { 26 | const historyPath = path.join(process.cwd(), 'version-history.json'); 27 | if (fs.existsSync(historyPath)) { 28 | try { 29 | const jsonData = fs.readFileSync(historyPath, 'utf8'); 30 | return JSON.parse(jsonData) as VersionHistory; 31 | } catch (error) { 32 | console.error('Error reading version history:', error instanceof Error ? error.message : 'Unknown error'); 33 | return { versions: [] }; 34 | } 35 | } else { 36 | console.log('version-history.json not found, creating a new file'); 37 | return { versions: [] }; 38 | } 39 | } 40 | 41 | /** 42 | * Save version history to JSON file 43 | */ 44 | function saveVersionHistory(history: VersionHistory): void { 45 | const historyPath = path.join(process.cwd(), 'version-history.json'); 46 | 47 | // Create a backup before saving 48 | if (fs.existsSync(historyPath)) { 49 | fs.copyFileSync(historyPath, `${historyPath}.backup`); 50 | console.log(`Created backup at ${historyPath}.backup`); 51 | } 52 | 53 | // Pretty print JSON with 2 spaces 54 | const jsonData = JSON.stringify(history, null, 2); 55 | fs.writeFileSync(historyPath, jsonData, 'utf8'); 56 | console.log('Version history saved to version-history.json'); 57 | } 58 | 59 | /** 60 | * Generate Linux links based on version patterns 61 | */ 62 | function generateLinuxLinks(version: string, date: string, platforms: Record): { x64: string | null, arm64: string | null } { 63 | // Extract build ID from any existing URL if possible 64 | let buildId = ''; 65 | let isAppImage = false; 66 | 67 | // First, try to extract buildId from darwin URLs 68 | if (platforms['darwin-universal']) { 69 | const darwinMatch = platforms['darwin-universal'].match(/\/production\/([^\/]+)\/darwin/); 70 | if (darwinMatch) { 71 | buildId = darwinMatch[1]; 72 | isAppImage = true; 73 | } 74 | } 75 | 76 | // If not found, try to extract from win32 URLs 77 | if (!buildId && platforms['win32-x64']) { 78 | const winMatch = platforms['win32-x64'].match(/\/production\/([^\/]+)\/win32/); 79 | if (winMatch) { 80 | buildId = winMatch[1]; 81 | isAppImage = true; 82 | } 83 | } 84 | 85 | // If we found a build ID, generate Linux URLs 86 | if (buildId && isAppImage) { 87 | console.log(`Found build ID ${buildId} for version ${version}`); 88 | const x64Url = `https://anysphere-binaries.s3.us-east-1.amazonaws.com/production/client/linux/x64/appimage/Cursor-${version}-${buildId}.deb.glibc2.25-x86_64.AppImage`; 89 | const arm64Url = `https://anysphere-binaries.s3.us-east-1.amazonaws.com/production/client/linux/arm64/appimage/Cursor-${version}-${buildId}.deb.glibc2.28-aarch64.AppImage`; 90 | 91 | return { x64: x64Url, arm64: arm64Url }; 92 | } 93 | 94 | // For newer versions, try the downloader.cursor.sh pattern 95 | const year = date.split('-')[0]; 96 | const month = date.split('-')[1]; 97 | const day = date.split('-')[2]; 98 | 99 | // Most URLs follow pattern like: https://downloader.cursor.sh/builds/250219jnihavxsz/linux/appImage/x64 100 | // But we can't derive the random code without external information 101 | 102 | console.log(`Could not generate Linux links for version ${version}`); 103 | return { x64: null, arm64: null }; 104 | } 105 | 106 | /** 107 | * Main function to backfill missing Linux links 108 | */ 109 | async function backfillMissingLinuxLinks(): Promise { 110 | console.log('Starting backfill for missing Linux links...'); 111 | 112 | // Read the version history 113 | const history = readVersionHistory(); 114 | 115 | if (!history.versions || history.versions.length === 0) { 116 | console.log('No versions found in history file'); 117 | return; 118 | } 119 | 120 | console.log(`Found ${history.versions.length} versions in history`); 121 | 122 | // Process versions missing Linux links 123 | let versionsToProcess = history.versions 124 | .filter(entry => 125 | (!entry.platforms['linux-x64'] || !entry.platforms['linux-arm64']) && 126 | (entry.platforms['darwin-universal'] || entry.platforms['win32-x64']) 127 | ); 128 | 129 | console.log(`Will process ${versionsToProcess.length} versions with missing Linux links`); 130 | 131 | if (versionsToProcess.length === 0) { 132 | console.log('No versions need processing, exiting'); 133 | return; 134 | } 135 | 136 | let updatedCount = 0; 137 | let skippedCount = 0; 138 | 139 | // Process each version 140 | for (const entry of versionsToProcess) { 141 | const version = entry.version; 142 | console.log(`Processing version ${version}...`); 143 | 144 | // Generate Linux links for this version 145 | const { x64, arm64 } = generateLinuxLinks(version, entry.date, entry.platforms); 146 | 147 | let updated = false; 148 | 149 | // Update linux-x64 if missing and generated 150 | if (!entry.platforms['linux-x64'] && x64) { 151 | console.log(`Adding linux-x64 link for version ${version}: ${x64}`); 152 | entry.platforms['linux-x64'] = x64; 153 | updated = true; 154 | } 155 | 156 | // Update linux-arm64 if missing and generated 157 | if (!entry.platforms['linux-arm64'] && arm64) { 158 | console.log(`Adding linux-arm64 link for version ${version}: ${arm64}`); 159 | entry.platforms['linux-arm64'] = arm64; 160 | updated = true; 161 | } 162 | 163 | if (updated) { 164 | updatedCount++; 165 | } else { 166 | skippedCount++; 167 | } 168 | } 169 | 170 | console.log(`Backfill summary: Updated ${updatedCount}, Skipped ${skippedCount}`); 171 | 172 | // Save the updated history 173 | if (updatedCount > 0) { 174 | console.log('Saving updated history with new Linux links...'); 175 | saveVersionHistory(history); 176 | console.log('Backfill process completed and saved'); 177 | } else { 178 | console.log('No updates made, skipping save'); 179 | } 180 | } 181 | 182 | // Run the backfill process 183 | backfillMissingLinuxLinks().catch(error => { 184 | console.error('Error in backfill process:', error instanceof Error ? error.message : 'Unknown error'); 185 | process.exit(1); 186 | }); -------------------------------------------------------------------------------- /src/backfill-linux-arm64.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import { fileURLToPath } from 'url'; 4 | 5 | // Get dirname in ESM 6 | const __filename = fileURLToPath(import.meta.url); 7 | const __dirname = path.dirname(__filename); 8 | 9 | // Interface for version history JSON 10 | interface VersionHistoryEntry { 11 | version: string; 12 | date: string; 13 | platforms: { 14 | [platform: string]: string; // platform -> download URL 15 | }; 16 | } 17 | 18 | interface VersionHistory { 19 | versions: VersionHistoryEntry[]; 20 | } 21 | 22 | interface DownloadResponse { 23 | downloadUrl: string; 24 | } 25 | 26 | /** 27 | * Fetch specific version download URL for a platform 28 | */ 29 | async function fetchVersionDownloadUrl(platform: string, version: string): Promise { 30 | try { 31 | console.log(`Fetching ${platform} URL for version ${version}...`); 32 | const response = await fetch(`https://www.cursor.com/api/download?platform=${platform}&releaseTrack=${version}`, { 33 | headers: { 34 | 'User-Agent': 'Cursor-Version-Checker', 35 | 'Cache-Control': 'no-cache', 36 | }, 37 | timeout: 10000, 38 | }); 39 | 40 | if (!response.ok) { 41 | console.warn(`HTTP error fetching ${platform} for ${version}: ${response.status}`); 42 | return null; 43 | } 44 | 45 | const data = await response.json() as DownloadResponse; 46 | return data.downloadUrl; 47 | } catch (error) { 48 | console.error(`Error fetching ${platform} URL for version ${version}:`, error instanceof Error ? error.message : 'Unknown error'); 49 | return null; 50 | } 51 | } 52 | 53 | /** 54 | * Try to generate linux-arm64 URL from linux-x64 URL using pattern matching 55 | */ 56 | function generateArm64UrlFromX64(x64Url: string): string | null { 57 | // Pattern 1: Recent builds with glibc in the URL 58 | const glibcPattern = /\/linux\/x64\/appimage\/Cursor-([^-]+)-([^.]+)\.deb\.glibc([^-]+)-x86_64\.AppImage/; 59 | const glibcMatch = x64Url.match(glibcPattern); 60 | 61 | if (glibcMatch) { 62 | // For these URLs, we just need to change x64 to arm64 and x86_64 to aarch64 63 | // The glibc version might be different (2.25 for x64, 2.28 for arm64) 64 | return x64Url 65 | .replace('/linux/x64/', '/linux/arm64/') 66 | .replace('x86_64', 'aarch64') 67 | .replace('glibc2.25', 'glibc2.28'); 68 | } 69 | 70 | // Pattern 2: Downloader.cursor.sh URLs (newer format) 71 | const downloaderPattern = /(https:\/\/downloader\.cursor\.sh\/builds\/[^\/]+)\/linux\/appImage\/x64/; 72 | const downloaderMatch = x64Url.match(downloaderPattern); 73 | 74 | if (downloaderMatch) { 75 | // For these URLs, we just need to change the end part 76 | return `${downloaderMatch[1]}/linux/appImage/arm64`; 77 | } 78 | 79 | // No pattern matched 80 | return null; 81 | } 82 | 83 | /** 84 | * Read version history from JSON file 85 | */ 86 | function readVersionHistory(): VersionHistory { 87 | const historyPath = path.join(process.cwd(), 'version-history.json'); 88 | if (fs.existsSync(historyPath)) { 89 | try { 90 | const jsonData = fs.readFileSync(historyPath, 'utf8'); 91 | return JSON.parse(jsonData) as VersionHistory; 92 | } catch (error) { 93 | console.error('Error reading version history:', error instanceof Error ? error.message : 'Unknown error'); 94 | return { versions: [] }; 95 | } 96 | } else { 97 | console.log('version-history.json not found, creating a new file'); 98 | return { versions: [] }; 99 | } 100 | } 101 | 102 | /** 103 | * Save version history to JSON file 104 | */ 105 | function saveVersionHistory(history: VersionHistory): void { 106 | const historyPath = path.join(process.cwd(), 'version-history.json'); 107 | 108 | // Create a backup before saving 109 | if (fs.existsSync(historyPath)) { 110 | fs.copyFileSync(historyPath, `${historyPath}.backup`); 111 | console.log(`Created backup at ${historyPath}.backup`); 112 | } 113 | 114 | // Pretty print JSON with 2 spaces 115 | const jsonData = JSON.stringify(history, null, 2); 116 | fs.writeFileSync(historyPath, jsonData, 'utf8'); 117 | console.log('Version history saved to version-history.json'); 118 | } 119 | 120 | /** 121 | * Main function to backfill linux-arm64 URLs 122 | */ 123 | async function backfillLinuxARM64(): Promise { 124 | console.log('Starting linux-arm64 backfill process...'); 125 | 126 | // Read the version history 127 | const history = readVersionHistory(); 128 | 129 | if (!history.versions || history.versions.length === 0) { 130 | console.log('No versions found in history file'); 131 | return; 132 | } 133 | 134 | console.log(`Found ${history.versions.length} versions in history`); 135 | 136 | // Process all versions that need updating (have linux-x64 but not linux-arm64) 137 | let versionsToProcess = history.versions 138 | .filter(entry => !entry.platforms['linux-arm64'] && entry.platforms['linux-x64']); 139 | 140 | console.log(`Will process ${versionsToProcess.length} versions in this run`); 141 | 142 | let updatedCount = 0; 143 | let skippedCount = 0; 144 | let errorCount = 0; 145 | 146 | // Process each version 147 | for (let i = 0; i < history.versions.length; i++) { 148 | const entry = history.versions[i]; 149 | const version = entry.version; 150 | 151 | // Skip if linux-arm64 already exists 152 | if (entry.platforms['linux-arm64']) { 153 | //console.log(`Version ${version} already has linux-arm64 URL, skipping`); 154 | skippedCount++; 155 | continue; 156 | } 157 | 158 | // Skip if no linux-x64 URL 159 | if (!entry.platforms['linux-x64']) { 160 | //console.log(`Version ${version} has no linux-x64 URL, skipping`); 161 | skippedCount++; 162 | continue; 163 | } 164 | 165 | // Skip if not in our list to process 166 | if (!versionsToProcess.some(v => v.version === version)) { 167 | console.log(`Version ${version} not in process list, skipping`); 168 | continue; 169 | } 170 | 171 | const x64Url = entry.platforms['linux-x64']; 172 | console.log(`Processing version ${version} with linux-x64 URL: ${x64Url}`); 173 | 174 | // Try different methods to get linux-arm64 URL 175 | 176 | // Method 1: Try to fetch from API 177 | let arm64Url = await fetchVersionDownloadUrl('linux-arm64', version); 178 | 179 | // Method 2: If API fetch failed, try pattern matching 180 | if (!arm64Url) { 181 | console.log(`Falling back to pattern matching for version ${version}`); 182 | arm64Url = generateArm64UrlFromX64(x64Url); 183 | } 184 | 185 | // Update the entry if we found a URL 186 | if (arm64Url) { 187 | console.log(`Found linux-arm64 URL for version ${version}: ${arm64Url}`); 188 | entry.platforms['linux-arm64'] = arm64Url; 189 | updatedCount++; 190 | 191 | // Save after each successful update to avoid losing progress 192 | if (updatedCount % 10 === 0) { 193 | console.log(`Saving intermediate progress after ${updatedCount} updates...`); 194 | saveVersionHistory(history); 195 | } 196 | } else { 197 | console.error(`Could not determine linux-arm64 URL for version ${version}`); 198 | errorCount++; 199 | } 200 | 201 | // Add a small delay to avoid rate limiting 202 | await new Promise(resolve => setTimeout(resolve, 500)); 203 | } 204 | 205 | console.log(`Backfill summary: Updated ${updatedCount}, Skipped ${skippedCount}, Errors ${errorCount}`); 206 | 207 | // Save the updated history 208 | if (updatedCount > 0) { 209 | console.log('Saving updated history with new linux-arm64 URLs...'); 210 | console.log(`Example updated entry: ${JSON.stringify(history.versions[0], null, 2)}`); 211 | saveVersionHistory(history); 212 | console.log('Backfill process completed and saved'); 213 | } else { 214 | console.log('No updates made, skipping save'); 215 | } 216 | } 217 | 218 | // Run the backfill process 219 | backfillLinuxARM64().catch(error => { 220 | console.error('Error in backfill process:', error instanceof Error ? error.message : 'Unknown error'); 221 | process.exit(1); 222 | }); -------------------------------------------------------------------------------- /buymeacoffee.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | buy me a coffee 19 | 20 | 21 | 2953 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/update-cursor-links.ts: -------------------------------------------------------------------------------- 1 | import * as fs from 'fs'; 2 | import * as path from 'path'; 3 | import { fileURLToPath } from 'url'; 4 | 5 | // Get dirname in ESM 6 | const __filename = fileURLToPath(import.meta.url); 7 | const __dirname = path.dirname(__filename); 8 | 9 | // Define types for Bun's fetch if needed 10 | declare global { 11 | interface Response { 12 | ok: boolean; 13 | status: number; 14 | json(): Promise; 15 | } 16 | } 17 | 18 | interface PlatformInfo { 19 | platforms: string[]; 20 | readableNames: string[]; 21 | section: string; 22 | } 23 | 24 | interface PlatformMap { 25 | [key: string]: PlatformInfo; 26 | } 27 | 28 | interface VersionInfo { 29 | url: string; 30 | version: string; 31 | } 32 | 33 | interface ResultMap { 34 | [os: string]: { 35 | [platform: string]: VersionInfo; 36 | }; 37 | } 38 | 39 | interface DownloadResponse { 40 | downloadUrl: string; 41 | } 42 | 43 | // Interface for version history JSON 44 | interface VersionHistoryEntry { 45 | version: string; 46 | date: string; 47 | platforms: { 48 | [platform: string]: string; // platform -> download URL 49 | }; 50 | } 51 | 52 | interface VersionHistory { 53 | versions: VersionHistoryEntry[]; 54 | } 55 | 56 | const PLATFORMS: PlatformMap = { 57 | windows: { 58 | platforms: ['win32-x64-user', 'win32-arm64-user', 'win32-x64-system', 'win32-arm64-system', 'win32-x64', 'win32-arm64'], 59 | readableNames: ['win32-x64-user', 'win32-arm64-user', 'win32-x64-system', 'win32-arm64-system', 'win32-x64', 'win32-arm64'], 60 | section: 'Windows Installer' 61 | }, 62 | mac: { 63 | platforms: ['darwin-universal', 'darwin-x64', 'darwin-arm64'], 64 | readableNames: ['darwin-universal', 'darwin-x64', 'darwin-arm64'], 65 | section: 'Mac Installer' 66 | }, 67 | linux: { 68 | platforms: ['linux-x64', 'linux-arm64'], 69 | readableNames: ['linux-x64', 'linux-arm64'], 70 | section: 'Linux Installer' 71 | } 72 | }; 73 | 74 | interface PlatformBadgeConfig { 75 | color: string; 76 | logo: string; 77 | label: string; 78 | } 79 | 80 | type PlatformType = 'darwin-universal' | 'darwin-x64' | 'darwin-arm64' | 81 | 'win32-x64-system' | 'win32-arm64-system' | 'win32-x64-user' | 'win32-arm64-user' | 82 | 'linux-x64' | 'linux-arm64' | 'win32-x64' | 'win32-arm64'; 83 | 84 | /** 85 | * Extract version from URL or filename 86 | */ 87 | function extractVersion(url: string): string { 88 | // For Windows 89 | const winMatch = url.match(/Cursor(User|)Setup-[^-]+-([0-9.]+)\.exe/); 90 | if (winMatch && winMatch[2]) return winMatch[2]; 91 | 92 | // For other URLs, try to find version pattern 93 | const versionMatch = url.match(/[0-9]+\.[0-9]+\.[0-9]+/); 94 | return versionMatch ? versionMatch[0] : 'Unknown'; 95 | } 96 | 97 | /** 98 | * Format date as YYYY-MM-DD 99 | */ 100 | function formatDate(date: Date): string { 101 | const year = date.getFullYear(); 102 | const month = String(date.getMonth() + 1).padStart(2, '0'); 103 | const day = String(date.getDate()).padStart(2, '0'); 104 | return `${year}-${month}-${day}`; 105 | } 106 | 107 | /** 108 | * Fetch latest download URL for a platform 109 | */ 110 | async function fetchLatestDownloadUrl(platform: string): Promise { 111 | try { 112 | let apiPlatform = platform; 113 | let isSystemVersion = false; 114 | 115 | // Handle system version URLs 116 | if (platform.endsWith('-system')) { 117 | apiPlatform = platform.replace('-system', ''); 118 | isSystemVersion = true; 119 | } 120 | 121 | // Simple fetch without complex retry logic 122 | const response = await fetch(`https://www.cursor.com/api/download?platform=${apiPlatform}&releaseTrack=latest`, { 123 | headers: { 124 | 'User-Agent': 'Cursor-Version-Checker', 125 | 'Cache-Control': 'no-cache', 126 | }, 127 | // Keep a reasonable timeout 128 | // timeout: 10000, 129 | }); 130 | 131 | if (!response.ok) { 132 | throw new Error(`HTTP error! status: ${response.status}`); 133 | } 134 | 135 | const data = await response.json() as DownloadResponse; 136 | let downloadUrl = data.downloadUrl; 137 | 138 | if (isSystemVersion) { 139 | downloadUrl = downloadUrl.replace('user-setup/CursorUserSetup', 'system-setup/CursorSetup'); 140 | } 141 | 142 | return downloadUrl; 143 | } catch (error) { 144 | console.error(`Error fetching download URL for platform ${platform}:`, error instanceof Error ? error.message : 'Unknown error'); 145 | return null; 146 | } 147 | } 148 | 149 | /** 150 | * Read version history from JSON file 151 | */ 152 | function readVersionHistory(): VersionHistory { 153 | const historyPath = path.join(process.cwd(), 'version-history.json'); 154 | if (fs.existsSync(historyPath)) { 155 | try { 156 | const jsonData = fs.readFileSync(historyPath, 'utf8'); 157 | return JSON.parse(jsonData) as VersionHistory; 158 | } catch (error) { 159 | console.error('Error reading version history:', error instanceof Error ? error.message : 'Unknown error'); 160 | return { versions: [] }; 161 | } 162 | } else { 163 | console.log('version-history.json not found, creating a new file'); 164 | return { versions: [] }; 165 | } 166 | } 167 | 168 | /** 169 | * Save version history to JSON file 170 | */ 171 | function saveVersionHistory(history: VersionHistory): void { 172 | if (!history || !Array.isArray(history.versions)) { 173 | console.error('Invalid version history object provided'); 174 | return; 175 | } 176 | 177 | const historyPath = path.join(process.cwd(), 'version-history.json'); 178 | 179 | // Keep backup - useful even for GitHub Actions 180 | if (fs.existsSync(historyPath)) { 181 | try { 182 | const backupPath = `${historyPath}.backup`; 183 | fs.copyFileSync(historyPath, backupPath); 184 | console.log(`Created backup at ${backupPath}`); 185 | } catch (error) { 186 | console.error('Failed to create backup of version history:', error instanceof Error ? error.message : 'Unknown error'); 187 | // Continue anyway, as creating backup is not critical 188 | } 189 | } 190 | 191 | try { 192 | const jsonData = JSON.stringify(history, null, 2); 193 | 194 | // Verify we have valid JSON before writing to file 195 | try { 196 | JSON.parse(jsonData); 197 | } catch (parseError) { 198 | console.error('Generated invalid JSON data, aborting save:', parseError instanceof Error ? parseError.message : 'Unknown error'); 199 | return; 200 | } 201 | 202 | // Write to a temporary file first, then rename to avoid partial writes 203 | const tempPath = `${historyPath}.tmp`; 204 | fs.writeFileSync(tempPath, jsonData, 'utf8'); 205 | fs.renameSync(tempPath, historyPath); 206 | 207 | // Verify file exists after writing 208 | if (fs.existsSync(historyPath)) { 209 | console.log('Version history saved to version-history.json'); 210 | } else { 211 | console.error('Failed to save version history: File does not exist after write'); 212 | } 213 | } catch (error) { 214 | console.error('Error saving version history:', error instanceof Error ? error.message : 'Unknown error'); 215 | throw error; // Rethrow to allow caller to handle 216 | } 217 | } 218 | 219 | /** 220 | * Generate a unified download badge for a platform 221 | */ 222 | function generateDownloadBadge(platform: PlatformType, url: string): string { 223 | // Platform configuration 224 | const platformConfig: Record = { 225 | 'darwin-universal': { color: '000000', logo: 'apple', label: 'macOS Universal' }, 226 | 'darwin-x64': { color: '000000', logo: 'apple', label: 'macOS Intel' }, 227 | 'darwin-arm64': { color: '000000', logo: 'apple', label: 'macOS Apple Silicon' }, 228 | 'win32-x64-system': { color: '0078D6', logo: 'windows', label: 'Windows x64 System' }, 229 | 'win32-arm64-system': { color: '0078D6', logo: 'windows', label: 'Windows ARM64 System' }, 230 | 'win32-x64-user': { color: '0078D6', logo: 'windows', label: 'Windows x64 User' }, 231 | 'win32-arm64-user': { color: '0078D6', logo: 'windows', label: 'Windows ARM64 User' }, 232 | 'win32-x64': { color: '0078D6', logo: 'windows', label: 'Windows x64' }, 233 | 'win32-arm64': { color: '0078D6', logo: 'windows', label: 'Windows ARM64' }, 234 | 'linux-x64': { color: 'FCC624', logo: 'linux', label: 'Linux x64' }, 235 | 'linux-arm64': { color: 'FCC624', logo: 'linux', label: 'Linux ARM64' } 236 | }; 237 | 238 | const config = platformConfig[platform]; 239 | if (!config) { 240 | return ''; 241 | } 242 | 243 | // Encode the label for URL safety 244 | const encodedLabel = config.label.replace(/\s+/g, '%20'); 245 | const encodedPlatform = platform.replace(/-/g, '%20'); 246 | 247 | return `${config.label}`; 248 | } 249 | 250 | function generateDownloadLink(platform: PlatformType, url: string): string { 251 | return `${platform}`; 252 | } 253 | 254 | /** 255 | * Generate the latest version card content 256 | */ 257 | function generateLatestVersionCard(version: string, date: string, results: ResultMap): string { 258 | let cardContent = ` 259 |
260 |
261 |

🚀 Cursor ${version}

262 |

Release Date: ${date}

263 | 264 | | Windows | macOS | Linux | 265 | |:---:|:---:|:---:| 266 | | ![Windows](https://img.shields.io/badge/Windows-0078D6?style=for-the-badge&logo=windows&logoColor=white) | ![macOS](https://img.shields.io/badge/macOS-000000?style=for-the-badge&logo=apple&logoColor=white) | ![Linux](https://img.shields.io/badge/Linux-FCC624?style=for-the-badge&logo=linux&logoColor=black) |`; 267 | 268 | // Add Windows downloads 269 | if (results.windows) { 270 | const x64Url = results.windows['win32-x64']?.url || results.windows['win32-x64-user']?.url; 271 | const arm64Url = results.windows['win32-arm64']?.url || results.windows['win32-arm64-user']?.url; 272 | cardContent += `\n| ${generateDownloadBadge('win32-x64-user', x64Url)} | ${generateDownloadBadge('darwin-universal', results.mac?.['darwin-universal']?.url || '')} | ${generateDownloadBadge('linux-x64', results.linux?.['linux-x64']?.url || '')} |`; 273 | cardContent += `\n| ${generateDownloadBadge('win32-arm64-user', arm64Url)} | ${generateDownloadBadge('darwin-x64', results.mac?.['darwin-x64']?.url || '')} | ${generateDownloadBadge('linux-arm64', results.linux?.['linux-arm64']?.url || '')} |`; 274 | } 275 | 276 | // Add macOS Apple Silicon download 277 | if (results.mac?.['darwin-arm64']?.url) { 278 | if (results.windows?.['win32-arm64-system']?.url) { 279 | cardContent += `\n| ${generateDownloadBadge('win32-arm64-system', results.windows['win32-arm64-system'].url)} | ${generateDownloadBadge('darwin-arm64', results.mac['darwin-arm64'].url)} | |`; 280 | } else { 281 | cardContent += `\n| | ${generateDownloadBadge('darwin-arm64', results.mac['darwin-arm64'].url)} | |`; 282 | } 283 | } 284 | 285 | // add windows x64 download 286 | if (results.windows['win32-x64-system']?.url) { 287 | cardContent += `\n| ${generateDownloadBadge('win32-x64-system', results.windows['win32-x64-system'].url)} | | |`; 288 | } 289 | 290 | cardContent += `\n\n
291 |
292 | `; 293 | 294 | return cardContent; 295 | } 296 | 297 | /** 298 | * Generate the detailed version card content for a single version 299 | */ 300 | function generateDetailedVersionCard(version: string, date: string, platforms: { [platform: string]: string }): string { 301 | let cardContent = `\n
302 | Version ${version} (${date}) 303 | 304 |
305 |

Cursor ${version} Download Links

306 | 307 | #### Windows`; 308 | 309 | // Add Windows downloads 310 | if (platforms['win32-x64-user'] ) { 311 | cardContent += `\n${generateDownloadBadge('win32-x64-user', platforms['win32-x64-user'] )}`; 312 | } 313 | if (platforms['win32-arm64-user'] ) { 314 | cardContent += `\n${generateDownloadBadge('win32-arm64-user', platforms['win32-arm64-user'] )}`; 315 | } 316 | if (platforms['win32-x64-system'] ) { 317 | cardContent += `\n${generateDownloadBadge('win32-x64-system', platforms['win32-x64-system'] )}`; 318 | } 319 | if (platforms['win32-arm64-system'] ) { 320 | cardContent += `\n${generateDownloadBadge('win32-arm64-system', platforms['win32-arm64-system'] )}`; 321 | } 322 | if (platforms['win32-x64'] ) { 323 | cardContent += `\n${generateDownloadBadge('win32-x64', platforms['win32-x64'] )}`; 324 | } 325 | if (platforms['win32-arm64'] ) { 326 | cardContent += `\n${generateDownloadBadge('win32-arm64', platforms['win32-arm64'] )}`; 327 | } 328 | 329 | // Add macOS downloads 330 | cardContent += `\n\n#### macOS`; 331 | if (platforms['darwin-universal']) { 332 | cardContent += `\n${generateDownloadBadge('darwin-universal', platforms['darwin-universal'])}`; 333 | } 334 | if (platforms['darwin-x64']) { 335 | cardContent += `\n${generateDownloadBadge('darwin-x64', platforms['darwin-x64'])}`; 336 | } 337 | if (platforms['darwin-arm64']) { 338 | cardContent += `\n${generateDownloadBadge('darwin-arm64', platforms['darwin-arm64'])}`; 339 | } 340 | 341 | // Add Linux downloads 342 | cardContent += `\n\n#### Linux`; 343 | if (platforms['linux-x64']) { 344 | cardContent += `\n${generateDownloadBadge('linux-x64', platforms['linux-x64'])}`; 345 | } 346 | if (platforms['linux-arm64']) { 347 | cardContent += `\n${generateDownloadBadge('linux-arm64', platforms['linux-arm64'])}`; 348 | } 349 | 350 | cardContent += `\n\n
351 |
`; 352 | 353 | return cardContent; 354 | } 355 | 356 | /** 357 | * Generate detailed cards for all versions 358 | */ 359 | function generateAllDetailedCards(history: VersionHistory): string { 360 | let allCards = ''; 361 | 362 | // Sort versions by version number (newest first) 363 | const sortedVersions = [...history.versions].sort((a, b) => { 364 | return b.version.localeCompare(a.version, undefined, { numeric: true }); 365 | }); 366 | 367 | // Generate cards for each version 368 | for (const entry of sortedVersions) { 369 | allCards += generateDetailedVersionCard(entry.version, entry.date, entry.platforms); 370 | } 371 | 372 | return allCards; 373 | } 374 | 375 | /** 376 | * Generate table row for a single version 377 | */ 378 | function generateTableRow(version: string, date: string, platforms: { [platform: string]: string }): string { 379 | // Generate Mac links 380 | let macLinks = ''; 381 | const macPlatforms = ['darwin-universal', 'darwin-x64', 'darwin-arm64']; 382 | const macLinksList = macPlatforms.map(platform => { 383 | if (platforms[platform]) { 384 | return generateDownloadLink(platform as PlatformType, platforms[platform]); 385 | } 386 | return null; 387 | }).filter(Boolean); 388 | macLinks = macLinksList.join('
'); 389 | 390 | // Generate Windows links 391 | let windowsLinks = ''; 392 | const winPlatforms = ['win32-x64-system', 'win32-arm64-system', 'win32-x64-user', 'win32-arm64-user', 'win32-x64', 'win32-arm64']; 393 | const winLinksList = winPlatforms.map(platform => { 394 | if (platforms[platform]) { 395 | return generateDownloadLink(platform as PlatformType, platforms[platform]); 396 | } 397 | return null; 398 | }).filter(Boolean); 399 | windowsLinks = winLinksList.join('
'); 400 | 401 | // Generate Linux links 402 | let linuxLinks = ''; 403 | const linuxPlatforms = ['linux-x64', 'linux-arm64']; 404 | const linuxLinksList = linuxPlatforms.map(platform => { 405 | if (platforms[platform]) { 406 | return generateDownloadLink(platform as PlatformType, platforms[platform]); 407 | } 408 | return null; 409 | }).filter(Boolean); 410 | linuxLinks = linuxLinksList.join('
') || 'Not Ready'; 411 | 412 | return `| ${version} | ${date} | ${windowsLinks} | ${macLinks} | ${linuxLinks} |`; 413 | } 414 | 415 | /** 416 | * Generate the complete versions table 417 | */ 418 | function generateVersionsTable(history: VersionHistory): string { 419 | let tableContent = ` 420 | | Version | Date | Windows Installer | Mac Installer | Linux Installer | 421 | | --- | --- | --- | --- | --- |`; 422 | 423 | // Sort versions by version number (newest first) 424 | const sortedVersions = [...history.versions].sort((a, b) => { 425 | return b.version.localeCompare(a.version, undefined, { numeric: true }); 426 | }); 427 | 428 | // Generate rows for each version 429 | for (const entry of sortedVersions) { 430 | tableContent += `\n${generateTableRow(entry.version, entry.date, entry.platforms)}`; 431 | } 432 | 433 | tableContent += `\n`; 434 | return tableContent; 435 | } 436 | 437 | /** 438 | * Update the README.md file with latest Cursor links 439 | */ 440 | async function updateReadme(): Promise { 441 | console.log(`Starting update check at ${new Date().toISOString()}`); 442 | 443 | // Collect all URLs and versions 444 | const results: ResultMap = {}; 445 | let latestVersion = '0.0.0'; 446 | const currentDate = formatDate(new Date()); 447 | 448 | // Fetch all platform download URLs 449 | for (const [osKey, osData] of Object.entries(PLATFORMS)) { 450 | results[osKey] = {}; 451 | 452 | for (let i = 0; i < osData.platforms.length; i++) { 453 | const platform = osData.platforms[i]; 454 | const url = await fetchLatestDownloadUrl(platform); 455 | 456 | if (url) { 457 | const version = extractVersion(url); 458 | results[osKey][platform] = { url, version }; 459 | 460 | // Track the highest version number 461 | if (version !== 'Unknown' && version > latestVersion) { 462 | latestVersion = version; 463 | } 464 | } 465 | } 466 | } 467 | 468 | if (latestVersion === '0.0.0') { 469 | console.error('Failed to retrieve any valid version information'); 470 | return false; 471 | } 472 | 473 | console.log(`Latest version detected: ${latestVersion}`); 474 | 475 | // Use version-history.json as the single source of truth for version checking 476 | const history = readVersionHistory(); 477 | 478 | // Check if this version already exists in the version history 479 | const existingVersionIndex = history.versions.findIndex(entry => entry.version === latestVersion); 480 | if (existingVersionIndex !== -1) { 481 | console.log(`Version ${latestVersion} already exists in version history, no update needed json`); 482 | // return false; 483 | } else { 484 | console.log(`Adding new version ${latestVersion} to version-history.json`); 485 | 486 | 487 | // New version found, update version-history.json first 488 | console.log(`Adding new version ${latestVersion} to version-history.json`); 489 | 490 | // Create a new platforms object for the history entry 491 | const platforms: { [platform: string]: string } = {}; 492 | 493 | // Add Mac platforms 494 | if (results.mac) { 495 | for (const [platform, info] of Object.entries(results.mac)) { 496 | platforms[platform] = info.url; 497 | } 498 | } 499 | 500 | // Add Windows platforms 501 | if (results.windows) { 502 | for (const [platform, info] of Object.entries(results.windows)) { 503 | platforms[platform] = info.url; 504 | } 505 | } 506 | 507 | // Add Linux platforms 508 | if (results.linux) { 509 | for (const [platform, info] of Object.entries(results.linux)) { 510 | platforms[platform] = info.url; 511 | } 512 | } 513 | 514 | // Create the new entry 515 | const newEntry: VersionHistoryEntry = { 516 | version: latestVersion, 517 | date: currentDate, 518 | platforms 519 | }; 520 | 521 | // Add to history and sort by version (newest first) 522 | history.versions.push(newEntry); 523 | history.versions.sort((a, b) => { 524 | return b.version.localeCompare(a.version, undefined, { numeric: true }); 525 | }); 526 | 527 | // Limit history size to 100 entries to prevent unlimited growth 528 | if (history.versions.length > 100) { 529 | history.versions = history.versions.slice(0, 100); 530 | console.log(`Truncated version history to 100 entries`); 531 | } 532 | 533 | // Save the updated history JSON 534 | try { 535 | saveVersionHistory(history); 536 | console.log(`Added version ${latestVersion} to version-history.json`); 537 | } catch (error) { 538 | console.error('Error saving version history:', error instanceof Error ? error.message : 'Unknown error'); 539 | return false; 540 | } 541 | } 542 | 543 | // Now update the README with the complete history 544 | const readmePath = path.join(process.cwd(), 'README.md'); 545 | if (!fs.existsSync(readmePath)) { 546 | console.error('README.md file not found'); 547 | return false; 548 | } 549 | 550 | let readmeContent = fs.readFileSync(readmePath, 'utf8'); 551 | 552 | // Update the versions table with complete history 553 | const versionsTableRegex = /[\s\S]*?/; 554 | const versionsTable = generateVersionsTable(history); 555 | readmeContent = readmeContent.replace(versionsTableRegex, versionsTable); 556 | 557 | // Update the latest version card with the latest version from history 558 | const latestVersionCardRegex = /[\s\S]*?/; 559 | const latestVersionCard = generateLatestVersionCard(history.versions[0].version, history.versions[0].date, results); 560 | readmeContent = readmeContent.replace(latestVersionCardRegex, latestVersionCard); 561 | 562 | // Update the detailed version cards with all versions from history 563 | const detailedCardsRegex = /[\s\S]*?/; 564 | const allDetailedCards = generateAllDetailedCards(history); 565 | readmeContent = readmeContent.replace(detailedCardsRegex, `${allDetailedCards}`); 566 | 567 | // Save the updated README 568 | try { 569 | fs.writeFileSync(readmePath, readmeContent); 570 | console.log(`README.md updated with complete version history`); 571 | } catch (error) { 572 | console.error('Error saving README:', error instanceof Error ? error.message : 'Unknown error'); 573 | return false; 574 | } 575 | 576 | return true; 577 | } 578 | 579 | /** 580 | * Update version history JSON with new version information - deprecated, now handled in updateReadme 581 | */ 582 | function updateVersionHistory(version: string, date: string, results: ResultMap): void { 583 | console.warn('updateVersionHistory is deprecated - version history is now updated directly in updateReadme'); 584 | 585 | // For backward compatibility, create and save a version history entry 586 | if (!version || !date || !results) { 587 | console.error('Invalid parameters provided to updateVersionHistory'); 588 | return; 589 | } 590 | 591 | try { 592 | // Read existing history 593 | const history = readVersionHistory(); 594 | 595 | // Check if this version already exists 596 | if (history.versions.some(v => v.version === version)) { 597 | console.log(`Version ${version} already exists in version history`); 598 | return; 599 | } 600 | 601 | // Prepare platforms data from results 602 | const platforms: { [platform: string]: string } = {}; 603 | 604 | // Extract platforms and URLs from results 605 | Object.entries(results).forEach(([osKey, osData]) => { 606 | Object.entries(osData).forEach(([platform, info]) => { 607 | platforms[platform] = info.url; 608 | }); 609 | }); 610 | 611 | // Create new entry 612 | const newEntry: VersionHistoryEntry = { 613 | version, 614 | date, 615 | platforms 616 | }; 617 | 618 | // Add to history and sort 619 | history.versions.push(newEntry); 620 | history.versions.sort((a, b) => { 621 | return b.version.localeCompare(a.version, undefined, { numeric: true }); 622 | }); 623 | 624 | // Save updated history 625 | saveVersionHistory(history); 626 | console.log(`Added version ${version} to version-history.json via deprecated method`); 627 | } catch (error) { 628 | console.error('Error in updateVersionHistory:', error instanceof Error ? error.message : 'Unknown error'); 629 | } 630 | } 631 | 632 | /** 633 | * Main function to run the update with proper error handling 634 | */ 635 | async function main(): Promise { 636 | try { 637 | const startTime = Date.now(); 638 | console.log(`Starting update process at ${new Date().toISOString()}`); 639 | 640 | // Run the update 641 | const updated = await updateReadme(); 642 | const elapsedTime = Date.now() - startTime; 643 | 644 | if (updated) { 645 | console.log(`Update completed successfully in ${elapsedTime}ms. Found new version.`); 646 | } else { 647 | console.log(`Update completed in ${elapsedTime}ms. No new version found.`); 648 | } 649 | 650 | // Double-check version history JSON file exists at the end 651 | const historyPath = path.join(process.cwd(), 'version-history.json'); 652 | if (!fs.existsSync(historyPath)) { 653 | console.warn('Warning: version-history.json does not exist after update. This might indicate an issue.'); 654 | } else { 655 | try { 656 | // Just checking that the file is valid JSON 657 | const content = fs.readFileSync(historyPath, 'utf8'); 658 | const historyJson = JSON.parse(content) as VersionHistory; 659 | console.log('Verified version-history.json exists and contains valid JSON.'); 660 | 661 | // Verify that the latest version from README is in version-history.json 662 | const readmePath = path.join(process.cwd(), 'README.md'); 663 | if (fs.existsSync(readmePath)) { 664 | const readmeContent = fs.readFileSync(readmePath, 'utf8'); 665 | 666 | // Extract the latest version from table - look for the first row after header 667 | const versionMatch = readmeContent.match(/\| (\d+\.\d+\.\d+) \| (\d{4}-\d{2}-\d{2}) \|/); 668 | if (versionMatch && versionMatch[1]) { 669 | const latestVersionInReadme = versionMatch[1]; 670 | const latestDateInReadme = versionMatch[2]; 671 | 672 | console.log(`Latest version in README.md: ${latestVersionInReadme} (${latestDateInReadme})`); 673 | 674 | // Check if this version exists in history 675 | const versionExists = historyJson.versions.some(v => v.version === latestVersionInReadme); 676 | if (!versionExists) { 677 | console.warn(`WARNING: Version ${latestVersionInReadme} is in README.md but not in version-history.json.`); 678 | console.log(`Attempting to extract data from README.md and update version-history.json...`); 679 | 680 | // Extract URLs for this version from README 681 | const sectionRegex = new RegExp(`\\| ${latestVersionInReadme} \\| ${latestDateInReadme} \\| (.*?) \\| (.*?) \\| (.*?) \\|`); 682 | const sectionMatch = readmeContent.match(sectionRegex); 683 | 684 | if (sectionMatch) { 685 | const macSection = sectionMatch[1]; 686 | const windowsSection = sectionMatch[2]; 687 | const linuxSection = sectionMatch[3]; 688 | 689 | const platforms: { [platform: string]: string } = {}; 690 | 691 | // Parse Mac links 692 | if (macSection) { 693 | const macLinks = macSection.match(/\[([^\]]+)\]\(([^)]+)\)/g); 694 | if (macLinks) { 695 | macLinks.forEach(link => { 696 | const parts = link.match(/\[([^\]]+)\]\(([^)]+)\)/); 697 | if (parts && parts[1] && parts[2]) { 698 | platforms[parts[1]] = parts[2]; 699 | } 700 | }); 701 | } 702 | } 703 | 704 | // Parse Windows links 705 | if (windowsSection) { 706 | const winLinks = windowsSection.match(/\[([^\]]+)\]\(([^)]+)\)/g); 707 | if (winLinks) { 708 | winLinks.forEach(link => { 709 | const parts = link.match(/\[([^\]]+)\]\(([^)]+)\)/); 710 | if (parts && parts[1] && parts[2]) { 711 | platforms[parts[1]] = parts[2]; 712 | } 713 | }); 714 | } 715 | } 716 | 717 | // Parse Linux links 718 | if (linuxSection && linuxSection !== 'Not Ready') { 719 | const linuxLinks = linuxSection.match(/\[([^\]]+)\]\(([^)]+)\)/g); 720 | if (linuxLinks) { 721 | linuxLinks.forEach(link => { 722 | const parts = link.match(/\[([^\]]+)\]\(([^)]+)\)/); 723 | if (parts && parts[1] && parts[2]) { 724 | platforms[parts[1]] = parts[2]; 725 | } 726 | }); 727 | } 728 | } 729 | 730 | // Add the entry to version history 731 | if (Object.keys(platforms).length > 0) { 732 | const newEntry: VersionHistoryEntry = { 733 | version: latestVersionInReadme, 734 | date: latestDateInReadme, 735 | platforms 736 | }; 737 | 738 | historyJson.versions.push(newEntry); 739 | 740 | // Sort and save 741 | historyJson.versions.sort((a, b) => { 742 | return b.version.localeCompare(a.version, undefined, { numeric: true }); 743 | }); 744 | 745 | // Save the updated history 746 | saveVersionHistory(historyJson); 747 | console.log(`Successfully added version ${latestVersionInReadme} from README.md to version-history.json`); 748 | } else { 749 | console.error(`Failed to extract platform links for version ${latestVersionInReadme}`); 750 | } 751 | } else { 752 | console.error(`Failed to find section for version ${latestVersionInReadme} in README.md`); 753 | } 754 | } 755 | } 756 | } 757 | } catch (err) { 758 | console.warn('Warning: version-history.json exists but contains invalid JSON:', 759 | err instanceof Error ? err.message : 'Unknown error'); 760 | } 761 | } 762 | } catch (error) { 763 | console.error('Critical error during update process:', error instanceof Error ? error.message : 'Unknown error'); 764 | // Any GitHub Action will mark the workflow as failed if the process exits with non-zero 765 | process.exit(1); 766 | } 767 | } 768 | 769 | // Export functions for testing 770 | export { 771 | fetchLatestDownloadUrl, 772 | updateReadme, 773 | readVersionHistory, 774 | saveVersionHistory, 775 | updateVersionHistory, 776 | extractVersion, 777 | formatDate, 778 | main 779 | }; 780 | 781 | // Run the update 782 | if (require.main === module) { 783 | main().catch(error => { 784 | console.error('Unhandled error:', error instanceof Error ? error.message : 'Unknown error'); 785 | process.exit(1); 786 | }); 787 | } -------------------------------------------------------------------------------- /cursor_products/0.47.9/product.json: -------------------------------------------------------------------------------- 1 | { 2 | "quality": "stable", 3 | "licenseName": "MIT", 4 | "licenseUrl": "https://cursor.com/license.txt", 5 | "serverGreeting": [], 6 | "serverLicense": [], 7 | "vscodeVersion": "1.96.2", 8 | "serverLicensePrompt": "", 9 | "serverApplicationName": "cursor-server", 10 | "serverDataFolderName": ".cursor-server", 11 | "tunnelApplicationName": "cursor-tunnel", 12 | "serverDownloadUrlTemplate": "https://cursor.blob.core.windows.net/remote-releases/${commit}/vscode-reh-${os}-${arch}.tar.gz", 13 | "nlsCoreBaseUrl": "https://www.vscode-unpkg.net/nls/", 14 | "win32x64AppId": "{{D7D7D7D7-7D7D-7D7D-7D7D-7D7D7D7D7D7D}}", 15 | "win32arm64AppId": "{{D8D8D8D8-8D8D-8D8D-8D8D-8D8D8D8D8D8D}}", 16 | "win32x64UserAppId": "{{DADADADA-ADAD-ADAD-ADAD-ADADADADADAD}}", 17 | "win32arm64UserAppId": "{{DBDBDBDB-BDBD-BDBD-BDBD-BDBDBDBDBDBD}}", 18 | "win32TunnelMutex": "cursor-tunnel-mutex", 19 | "win32TunnelServiceMutex": "cursor-tunnel-service-mutex", 20 | "licenseFileName": "LICENSE.txt", 21 | "reportIssueUrl": "https://github.com/getcursor/cursor/issues/new", 22 | "webviewContentExternalBaseUrlTemplate": "https://{{uuid}}.vscode-cdn.net/insider/ef65ac1ba57f57f2a3961bfe94aa20481caca4c6/out/vs/workbench/contrib/webview/browser/pre/", 23 | "aiConfig": { 24 | "ariaKey": "control-key" 25 | }, 26 | "updateUrl": "https://api2.cursor.sh/updates", 27 | "backupUpdateUrl": "http://cursorapi.com/updates", 28 | "releaseNotesUrl": "https://www.cursor.com/changelog", 29 | "nodejsRepository": "https://nodejs.org", 30 | "extensionMaxVersions": { 31 | "ms-python.python": { 32 | "maxVersion": "2024.12.3", 33 | "minVersion": "2024.4.1" 34 | }, 35 | "ms-python.vscode-pylance": { 36 | "maxVersion": "2024.8.1", 37 | "minVersion": "2024.4.1" 38 | }, 39 | "ms-python.debugpy": { 40 | "maxVersion": "2024.6.0" 41 | }, 42 | "ms-vscode-remote.remote-containers": { 43 | "maxVersion": "0.394.0", 44 | "minVersion": "0.394.0" 45 | }, 46 | "ms-vscode-remote.remote-wsl": { 47 | "maxVersion": "0.81.8", 48 | "minVersion": "0.81.8" 49 | }, 50 | "ms-vscode-remote.remote-ssh": { 51 | "maxVersion": "0.113.1", 52 | "minVersion": "0.113.1" 53 | }, 54 | "ms-vscode-remote.remote-server": { 55 | "maxVersion": "1.5.1", 56 | "minVersion": "1.5.1" 57 | } 58 | }, 59 | "skipPackagingLocalExtensions": ["cursor-experiments", "cursor-context-ast-typescript", "cursor-browser", "cursor-pyright"], 60 | "cannotImportExtensions": ["github.copilot-chat", "github.copilot"], 61 | "trustedExtensionAuthAccess": { 62 | "github": ["vscode.github", "github.remotehub", "ms-vscode.remote-server", "github.vscode-pull-request-github", "github.codespaces", "github.copilot", "github.copilot-chat", "ms-vsliveshare.vsliveshare"], 63 | "github-enterprise": ["vscode.github", "github.remotehub", "ms-vscode.remote-server", "github.vscode-pull-request-github", "github.codespaces", "github.copilot", "github.copilot-chat", "ms-vsliveshare.vsliveshare"], 64 | "microsoft": ["ms-vscode.azure-repos", "ms-vscode.remote-server", "ms-vsliveshare.vsliveshare", "ms-azuretools.vscode-azureresourcegroups", "ms-edu.vscode-learning", "ms-toolsai.vscode-ai", "ms-toolsai.vscode-ai-remote"], 65 | "microsoft-sovereign-cloud": ["ms-vscode.azure-repos", "ms-vscode.remote-server", "ms-vsliveshare.vsliveshare", "ms-azuretools.vscode-azureresourcegroups", "ms-edu.vscode-learning", "ms-toolsai.vscode-ai", "ms-toolsai.vscode-ai-remote"] 66 | }, 67 | "aiGeneratedWorkspaceTrust": { 68 | "title": "This workspace was generated by GitHub Copilot", 69 | "checkboxText": "Trust the contents of all files in this workspace", 70 | "trustOption": "Yes, I trust the contents", 71 | "dontTrustOption": "No, I don't trust the contents", 72 | "startupTrustRequestLearnMore": "If you don't trust the contents of the files generated by GitHub Copilot, we recommend continuing in restricted mode. See [our docs](https://aka.ms/vscode-workspace-trust) to learn more. " 73 | }, 74 | "gitHubEntitlement": { 75 | "providerId": "github", 76 | "command": { 77 | "title": "Install GitHub Copilot (Paid for by {{org}})...", 78 | "titleWithoutPlaceHolder": "Install GitHub Copilot", 79 | "action": "workbench.extensions.installExtension", 80 | "when": "workbench.accounts.experimental.showEntitlements" 81 | }, 82 | "entitlementUrl": "https://api.github.com/copilot_internal/user", 83 | "extensionId": "github.copilot", 84 | "enablementKey": "chat_enabled", 85 | "confirmationAction": "Install", 86 | "confirmationMessage": "Are you sure you want to install GitHub Copilot?" 87 | }, 88 | "defaultChatAgent": { 89 | "extensionId": "GitHub.copilot", 90 | "chatExtensionId": "GitHub.copilot-chat", 91 | "documentationUrl": "https://aka.ms/copilot-overview", 92 | "termsStatementUrl": "https://aka.ms/github-copilot-terms-statement", 93 | "privacyStatementUrl": "https://aka.ms/github-copilot-privacy-statement", 94 | "skusDocumentationUrl": "https://aka.ms/github-copilot-plans", 95 | "publicCodeMatchesUrl": "https://aka.ms/github-copilot-match-public-code", 96 | "manageSettingsUrl": "https://aka.ms/github-copilot-settings", 97 | "managePlanUrl": "https://aka.ms/github-copilot-manage-plan", 98 | "upgradePlanUrl": "https://aka.ms/github-copilot-upgrade-plan", 99 | "providerId": "github", 100 | "providerName": "GitHub", 101 | "providerScopes": [ 102 | ["user:email"], 103 | ["read:user"], 104 | ["read:user", "user:email", "repo", "workflow"] 105 | ], 106 | "entitlementUrl": "https://api.github.com/copilot_internal/user", 107 | "entitlementSignupLimitedUrl": "https://api.github.com/copilot_internal/subscribe_limited_user" 108 | }, 109 | "chatParticipantRegistry": "https://main.vscode-cdn.net/extensions/chat.json", 110 | "cursorTrustedExtensionAuthAccess": ["anysphere.cursor-retrieval"], 111 | "bannedExtensions": {}, 112 | "trustedExtensionProtocolHandlers": ["vscode.git", "vscode.github-authentication", "vscode.microsoft-authentication"], 113 | "linkProtectionTrustedDomains": ["https://marketplace.visualstudio.com", "https://marketplace.cursorapi.com", "https://cursor-cdn.com", "https://cursor-marketplace.com", "https://open-vsx.org", "https://cursor.so", "https://cursor.sh", "https://cursor.com", "https://www.cursor.so", "https://cursor.com", "https://www.cursor.com", "https://docs.cursor.com", "https://docs.cursor.sh", "https://www.cursor.sh", "https://changelog.cursor.sh", "https://changelog.cursor.com", "https://github.com", "https://www.github.com", "https://docs.github.com", "https://portal.azure.com", "https://portal.azure.com", "https://raw.githubusercontent.com", "https://private-user-images.githubusercontent.com", "https://avatars.githubusercontent.com"], 114 | "commonlyUsedSettings": ["files.autoSave", "editor.fontSize", "editor.fontFamily", "GitHub.copilot.manageExtension", "editor.tabSize", "editor.renderWhitespace", "editor.cursorStyle", "editor.multiCursorModifier", "editor.insertSpaces", "editor.wordWrap", "files.exclude", "files.associations", "workbench.editor.enablePreview"], 115 | "extensionsEnabledWithApiProposalVersion": ["GitHub.copilot-chat", "ms-vscode.vscode-commander", "ms-vscode.vscode-copilot-vision"], 116 | "extensionEnabledApiProposals": { 117 | "ms-vscode.vscode-selfhost-test-provider": ["testObserver", "testRelatedCode", "attributableCoverage"], 118 | "VisualStudioExptTeam.vscodeintellicode-completions": ["inlineCompletionsAdditions"], 119 | "ms-toolsai.datawrangler": ["debugFocus"], 120 | "ms-vscode.vscode-commander": [], 121 | "ms-vscode.vscode-websearchforcopilot": [], 122 | "ms-vscode.vscode-copilot-data-analysis": ["chatVariableResolver", "chatProvider"], 123 | "ms-vscode.vscode-copilot-vision": ["chatReferenceBinaryData", "codeActionAI"], 124 | "ms-vsliveshare.vsliveshare": ["contribMenuBarHome", "contribShareMenu", "contribStatusBarItems", "diffCommand", "documentFiltersExclusive", "fileSearchProvider", "findTextInFiles", "notebookCellExecutionState", "notebookLiveShare", "terminalDimensions", "terminalDataWriteEvent", "textSearchProvider"], 125 | "ms-vscode.js-debug": ["portsAttributes", "findTextInFiles", "workspaceTrust", "tunnels"], 126 | "ms-toolsai.vscode-ai-remote": ["resolvers"], 127 | "ms-python.python": ["contribEditorContentMenu", "quickPickSortByLabel", "portsAttributes", "testObserver", "quickPickItemTooltip", "terminalDataWriteEvent", "terminalExecuteCommandEvent", "contribIssueReporter", "notebookReplDocument"], 128 | "ms-dotnettools.dotnet-interactive-vscode": ["notebookMessaging"], 129 | "GitHub.codespaces": ["contribEditSessions", "contribMenuBarHome", "contribRemoteHelp", "contribViewsRemote", "resolvers", "tunnels", "terminalDataWriteEvent", "treeViewReveal", "notebookKernelSource"], 130 | "ms-vscode.azure-repos": ["extensionRuntime", "fileSearchProvider", "textSearchProvider"], 131 | "ms-vscode.remote-repositories": ["canonicalUriProvider", "contribEditSessions", "contribRemoteHelp", "contribMenuBarHome", "contribViewsRemote", "contribViewsWelcome", "contribShareMenu", "documentFiltersExclusive", "editSessionIdentityProvider", "extensionRuntime", "fileSearchProvider", "quickPickSortByLabel", "workspaceTrust", "shareProvider", "scmActionButton", "scmSelectedProvider", "scmValidation", "textSearchProvider", "timeline"], 132 | "ms-vscode-remote.remote-wsl": ["resolvers", "contribRemoteHelp", "contribViewsRemote", "telemetry"], 133 | "ms-vscode-remote.remote-ssh": ["resolvers", "tunnels", "terminalDataWriteEvent", "contribRemoteHelp", "contribViewsRemote", "telemetry"], 134 | "ms-vscode.remote-server": ["resolvers", "tunnels", "contribViewsWelcome"], 135 | "ms-vscode.remote-explorer": ["contribRemoteHelp", "contribViewsRemote", "extensionsAny"], 136 | "ms-vscode-remote.remote-containers": ["contribEditSessions", "resolvers", "portsAttributes", "tunnels", "workspaceTrust", "terminalDimensions", "contribRemoteHelp", "contribViewsRemote"], 137 | "ms-vscode.js-debug-nightly": ["portsAttributes", "findTextInFiles", "workspaceTrust", "tunnels"], 138 | "ms-vscode.lsif-browser": ["documentFiltersExclusive"], 139 | "ms-vscode.vscode-speech": ["speech"], 140 | "GitHub.vscode-pull-request-github": ["activeComment", "codiconDecoration", "codeActionRanges", "commentingRangeHint", "commentReactor", "commentReveal", "commentThreadApplicability", "contribAccessibilityHelpContent", "contribCommentEditorActionsMenu", "contribCommentPeekContext", "contribCommentThreadAdditionalMenu", "contribCommentsViewThreadMenus", "contribEditorContentMenu", "contribMultiDiffEditorMenus", "contribShareMenu", "diffCommand", "fileComments", "quickDiffProvider", "shareProvider", "tabInputTextMerge", "tokenInformation", "treeViewMarkdownMessage"], 141 | "GitHub.copilot": ["inlineCompletionsAdditions"], 142 | "GitHub.copilot-nightly": ["inlineCompletionsAdditions"], 143 | "GitHub.copilot-chat": ["interactive", "terminalDataWriteEvent", "terminalExecuteCommandEvent", "terminalSelection", "terminalQuickFixProvider", "chatParticipantAdditions", "defaultChatParticipant", "embeddings", "chatEditing", "chatVariableResolver", "chatProvider", "mappedEditsProvider", "aiRelatedInformation", "codeActionAI", "findTextInFiles", "textSearchProvider", "textSearchProvider2", "activeComment", "commentReveal", "contribSourceControlInputBoxMenu", "contribCommentEditorActionsMenu", "contribCommentThreadAdditionalMenu", "contribCommentsViewThreadMenus", "newSymbolNamesProvider", "findFiles2", "extensionsAny", "authLearnMore", "testObserver", "aiTextSearchProvider", "documentFiltersExclusive", "chatParticipantPrivate", "contribDebugCreateConfiguration", "inlineEdit"], 144 | "GitHub.remotehub": ["contribRemoteHelp", "contribMenuBarHome", "contribViewsRemote", "contribViewsWelcome", "documentFiltersExclusive", "extensionRuntime", "fileSearchProvider", "quickPickSortByLabel", "workspaceTrust", "scmSelectedProvider", "scmValidation", "textSearchProvider", "timeline"], 145 | "ms-python.gather": ["notebookCellExecutionState"], 146 | "ms-python.vscode-pylance": ["notebookCellExecutionState"], 147 | "ms-python.debugpy": ["contribIssueReporter", "contribViewsWelcome", "debugVisualization", "portsAttributes"], 148 | "ms-toolsai.jupyter-renderers": ["contribNotebookStaticPreloads"], 149 | "ms-toolsai.jupyter": ["notebookDeprecated", "notebookMessaging", "notebookMime", "notebookCellExecutionState", "portsAttributes", "quickPickSortByLabel", "notebookKernelSource", "interactiveWindow", "notebookControllerAffinityHidden", "contribNotebookStaticPreloads", "quickPickItemTooltip", "notebookExecution", "notebookCellExecution", "notebookVariableProvider", "notebookReplDocument"], 150 | "dbaeumer.vscode-eslint": ["notebookCellExecutionState"], 151 | "ms-vscode.azure-sphere-tools-ui": ["tunnels"], 152 | "ms-azuretools.vscode-azureappservice": ["terminalDataWriteEvent"], 153 | "ms-azuretools.vscode-azure-github-copilot": ["lmTools"], 154 | "ms-vscode.anycode": ["extensionsAny"], 155 | "ms-vscode.cpptools": ["terminalDataWriteEvent", "lmTools"], 156 | "redhat.java": ["documentPaste"], 157 | "vscjava.vscode-java-pack": ["lmTools"], 158 | "ms-dotnettools.csdevkit": ["inlineCompletionsAdditions"], 159 | "ms-dotnettools.vscodeintellicode-csharp": ["inlineCompletionsAdditions"], 160 | "microsoft-IsvExpTools.powerplatform-vscode": ["fileSearchProvider", "textSearchProvider"], 161 | "microsoft-IsvExpTools.powerplatform-vscode-preview": ["fileSearchProvider", "textSearchProvider"], 162 | "TeamsDevApp.ms-teams-vscode-extension": ["chatParticipantAdditions", "languageModelSystem"], 163 | "apidev.azure-api-center": ["chatParticipant", "languageModels"], 164 | "jeanp413.open-remote-ssh": ["resolvers", "tunnels", "terminalDataWriteEvent", "contribRemoteHelp", "contribViewsRemote", "telemetry", "cursor"] 165 | }, 166 | "builtInExtensions": [{ 167 | "name": "ms-vscode.js-debug-companion", 168 | "version": "1.1.3", 169 | "repo": "https://github.com/microsoft/vscode-js-debug-companion", 170 | "sha256": "7380a890787452f14b2db7835dfa94de538caf358ebc263f9d46dd68ac52de93", 171 | "metadata": { 172 | "id": "99cb0b7f-7354-4278-b8da-6cc79972169d", 173 | "publisherId": { 174 | "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", 175 | "publisherName": "ms-vscode", 176 | "displayName": "Microsoft", 177 | "flags": "verified" 178 | }, 179 | "publisherDisplayName": "Microsoft" 180 | } 181 | }, { 182 | "name": "ms-vscode.js-debug", 183 | "version": "1.93.0", 184 | "sha256": "9339cb8e6b77f554df54d79e71f533279cb76b0f9b04c207f633bfd507442b6a", 185 | "repo": "https://github.com/microsoft/vscode-js-debug", 186 | "metadata": { 187 | "id": "25629058-ddac-4e17-abba-74678e126c5d", 188 | "publisherId": { 189 | "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", 190 | "publisherName": "ms-vscode", 191 | "displayName": "Microsoft", 192 | "flags": "verified" 193 | }, 194 | "publisherDisplayName": "Microsoft" 195 | } 196 | }, { 197 | "name": "ms-vscode.vscode-js-profile-table", 198 | "version": "1.0.9", 199 | "sha256": "3b62ee4276a2bbea3fe230f94b1d5edd915b05966090ea56f882e1e0ab53e1a6", 200 | "repo": "https://github.com/microsoft/vscode-js-profile-visualizer", 201 | "metadata": { 202 | "id": "7e52b41b-71ad-457b-ab7e-0620f1fc4feb", 203 | "publisherId": { 204 | "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", 205 | "publisherName": "ms-vscode", 206 | "displayName": "Microsoft", 207 | "flags": "verified" 208 | }, 209 | "publisherDisplayName": "Microsoft" 210 | } 211 | }], 212 | "nameShort": "Cursor", 213 | "nameLong": "Cursor", 214 | "applicationName": "cursor", 215 | "dataFolderName": ".cursor", 216 | "win32MutexName": "cursor", 217 | "win32DirName": "cursor", 218 | "win32NameVersion": "Cursor", 219 | "win32RegValueName": "Cursor", 220 | "win32AppUserModelId": "Anysphere.Cursor", 221 | "win32ShellNameShort": "C&ursor", 222 | "darwinBundleIdentifier": "com.todesktop.230313mzl4w4u92", 223 | "linuxIconName": "co.anysphere.cursor", 224 | "todesktopId": "230313mzl4w4u92", 225 | "todesktopAppId": "com.todesktop.230313mzl4w4u92", 226 | "urlProtocol": "cursor", 227 | "commitLastCharacter": "0", 228 | "extensionsGallery": { 229 | "galleryId": "cursor", 230 | "serviceUrl": "https://marketplace.cursorapi.com/_apis/public/gallery", 231 | "itemUrl": "https://marketplace.cursorapi.com/items", 232 | "resourceUrlTemplate": "https://marketplace.cursorapi.com/{publisher}/{name}/{version}/{path}", 233 | "controlUrl": "", 234 | "extensionUrlTemplate": "https://www.vscode-unpkg.net/_gallery/{publisher}/{name}/latest", 235 | "recommendationsUrl": "", 236 | "nlsBaseUrl": "", 237 | "publisherUrl": "" 238 | }, 239 | "extensionRecommendations": { 240 | "ms-python.python": { 241 | "onFileOpen": [{ 242 | "pathGlob": "{**/*.py}", 243 | "important": true 244 | }, { 245 | "languages": ["python"], 246 | "important": true 247 | }, { 248 | "pathGlob": "{**/*.ipynb}" 249 | }] 250 | }, 251 | "ms-toolsai.jupyter": { 252 | "onFileOpen": [{ 253 | "pathGlob": "{**/*.py}", 254 | "contentPattern": "^#\\s*%%$", 255 | "important": true, 256 | "whenInstalled": ["ms-python.python"] 257 | }, { 258 | "pathGlob": "{**/*.ipynb}" 259 | }] 260 | }, 261 | "golang.Go": { 262 | "onFileOpen": [{ 263 | "pathGlob": "**/*.go", 264 | "important": true 265 | }, { 266 | "languages": ["go"], 267 | "important": true 268 | }] 269 | }, 270 | "vscjava.vscode-java-pack": { 271 | "onFileOpen": [{ 272 | "pathGlob": "{**/*.java}", 273 | "important": true, 274 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 275 | }, { 276 | "languages": ["java"], 277 | "important": true, 278 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 279 | }] 280 | }, 281 | "ms-vscode.PowerShell": { 282 | "onFileOpen": [{ 283 | "pathGlob": "{**/*.ps1,**/*.psd1,**/*.psm1}", 284 | "important": true 285 | }, { 286 | "languages": ["powershell"], 287 | "important": true 288 | }, { 289 | "pathGlob": "{**/*.ps.config,**/*.ps1.config}" 290 | }] 291 | }, 292 | "ms-toolsai.prompty": { 293 | "onFileOpen": [{ 294 | "pathGlob": "{**/*.prompty}", 295 | "important": false 296 | }] 297 | }, 298 | "ms-vscode.cpptools-extension-pack": { 299 | "onFileOpen": [{ 300 | "pathGlob": "{**/*.c,**/*.cpp,**/*.cc,**/.cxx,**/*.hh,**/*.hpp,**/*.hxx,**/*.h}", 301 | "important": true, 302 | "whenNotInstalled": ["llvm-vs-code-extensions.vscode-clangd"] 303 | }, { 304 | "languages": ["c", "cpp"], 305 | "important": true, 306 | "whenNotInstalled": ["llvm-vs-code-extensions.vscode-clangd"] 307 | }] 308 | }, 309 | "ms-azuretools.vscode-docker": { 310 | "onFileOpen": [{ 311 | "pathGlob": "{**/dockerfile,**/Dockerfile,**/docker-compose.yml,**/docker-compose.*.yml}", 312 | "important": true 313 | }, { 314 | "languages": ["dockerfile"], 315 | "important": true 316 | }, { 317 | "pathGlob": "{**/*.cs,**/project.json,**/global.json,**/*.csproj,**/*.cshtml,**/*.sln,**/appsettings.json,**/*.py,**/*.ipynb,**/*.js,**/*.ts,**/package.json}" 318 | }] 319 | }, 320 | "vue.volar": { 321 | "onFileOpen": [{ 322 | "pathGlob": "{**/*.vue}", 323 | "important": true 324 | }, { 325 | "languages": ["vue"], 326 | "important": true 327 | }] 328 | }, 329 | "ms-vscode.makefile-tools": { 330 | "onFileOpen": [{ 331 | "pathGlob": "{**/makefile,**/Makefile}", 332 | "important": true 333 | }, { 334 | "languages": ["makefile"], 335 | "important": true 336 | }] 337 | }, 338 | "ms-vscode.cmake-tools": { 339 | "onFileOpen": [{ 340 | "pathGlob": "{**/CMakeLists.txt}", 341 | "important": true 342 | }] 343 | }, 344 | "ms-azure-devops.azure-pipelines": { 345 | "onFileOpen": [{ 346 | "pathGlob": "{**/azure-pipelines.yaml}", 347 | "important": true 348 | }] 349 | }, 350 | "msazurermtools.azurerm-vscode-tools": { 351 | "onFileOpen": [{ 352 | "pathGlob": "{**/azuredeploy.json}", 353 | "important": true 354 | }] 355 | }, 356 | "ms-vscode-remote.remote-containers": { 357 | "onFileOpen": [{ 358 | "pathGlob": "{**/devcontainer.json}", 359 | "important": true 360 | }] 361 | }, 362 | "ms-azuretools.vscode-bicep": { 363 | "onFileOpen": [{ 364 | "pathGlob": "{**/*.bicep}", 365 | "important": true, 366 | "whenNotInstalled": ["ms-azuretools.rad-vscode-bicep"] 367 | }] 368 | }, 369 | "svelte.svelte-vscode": { 370 | "onFileOpen": [{ 371 | "pathGlob": "{**/*.svelte}", 372 | "important": true 373 | }] 374 | }, 375 | "ms-vscode.vscode-github-issue-notebooks": { 376 | "onFileOpen": [{ 377 | "pathGlob": "{**/*.github-issues}", 378 | "important": true 379 | }] 380 | }, 381 | "ms-playwright.playwright": { 382 | "onFileOpen": [{ 383 | "pathGlob": "{**/*playwright*.config.ts,**/*playwright*.config.js,**/*playwright*.config.mjs}", 384 | "important": true 385 | }] 386 | }, 387 | "vscjava.vscode-gradle": { 388 | "onFileOpen": [{ 389 | "pathGlob": "{**/gradlew,**/gradlew.bat,**/build.gradle,**/build.gradle.kts,**/settings.gradle,**/settings.gradle.kts}", 390 | "important": true 391 | }] 392 | }, 393 | "REditorSupport.r": { 394 | "onFileOpen": [{ 395 | "pathGlob": "{**/*.r}", 396 | "important": true 397 | }, { 398 | "languages": ["r"], 399 | "important": true 400 | }] 401 | }, 402 | "firefox-devtools.vscode-firefox-debug": { 403 | "onFileOpen": [{ 404 | "pathGlob": "{**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.es6,**/.babelrc}" 405 | }] 406 | }, 407 | "ms-edgedevtools.vscode-edge-devtools": { 408 | "onFileOpen": [{ 409 | "pathGlob": "{**/*.ts,**/*.tsx,**/*.js,**/*.css,**/*.html}" 410 | }] 411 | }, 412 | "Ionide.Ionide-fsharp": { 413 | "onFileOpen": [{ 414 | "pathGlob": "{**/*.fsx,**/*.fsi,**/*.fs,**/*.ml,**/*.mli}" 415 | }] 416 | }, 417 | "dbaeumer.vscode-eslint": { 418 | "onFileOpen": [{ 419 | "pathGlob": "{**/*.js,**/*.jsx,**/*.es6,**/.eslintrc.*,**/.eslintrc,**/.babelrc,**/jsconfig.json}" 420 | }] 421 | }, 422 | "bmewburn.vscode-intelephense-client": { 423 | "onFileOpen": [{ 424 | "pathGlob": "{**/*.php,**/php.ini}" 425 | }] 426 | }, 427 | "xdebug.php-debug": { 428 | "onFileOpen": [{ 429 | "pathGlob": "{**/*.php,**/php.ini}" 430 | }] 431 | }, 432 | "rust-lang.rust-analyzer": { 433 | "onFileOpen": [{ 434 | "pathGlob": "{**/*.rs,**/*.rslib}" 435 | }] 436 | }, 437 | "DavidAnson.vscode-markdownlint": { 438 | "onFileOpen": [{ 439 | "pathGlob": "{**/*.md}" 440 | }] 441 | }, 442 | "EditorConfig.EditorConfig": { 443 | "onFileOpen": [{ 444 | "pathGlob": "{**/.editorconfig}" 445 | }] 446 | }, 447 | "HookyQR.beautify": { 448 | "onFileOpen": [{ 449 | "pathGlob": "{**/.jsbeautifyrc}" 450 | }] 451 | }, 452 | "donjayamanne.githistory": { 453 | "onFileOpen": [{ 454 | "pathGlob": "{**/.gitignore,**/.git}" 455 | }] 456 | }, 457 | "eamodio.gitlens": { 458 | "onFileOpen": [{ 459 | "pathGlob": "{**/.gitignore,**/.git}" 460 | }] 461 | }, 462 | "Shopify.ruby-lsp": { 463 | "onFileOpen": [{ 464 | "pathGlob": "{**/*.rb,**/*.erb,**/*.reek,**/.fasterer.yml,**/ruby-lint.yml,**/.rubocop.yml}" 465 | }] 466 | }, 467 | "DotJoshJohnson.xml": { 468 | "onFileOpen": [{ 469 | "pathGlob": "{**/*.xml}" 470 | }] 471 | }, 472 | "stylelint.vscode-stylelint": { 473 | "onFileOpen": [{ 474 | "pathGlob": "{**/.stylelintrc,**/stylelint.config.js}" 475 | }] 476 | }, 477 | "ms-mssql.mssql": { 478 | "onFileOpen": [{ 479 | "pathGlob": "{**/*.sql}" 480 | }] 481 | }, 482 | "mtxr.sqltools": { 483 | "onFileOpen": [{ 484 | "pathGlob": "{**/*.sql}" 485 | }] 486 | }, 487 | "usqlextpublisher.usql-vscode-ext": { 488 | "onFileOpen": [{ 489 | "pathGlob": "{**/*.usql}" 490 | }] 491 | }, 492 | "ms-vscode.sublime-keybindings": { 493 | "onFileOpen": [{ 494 | "pathGlob": "{**/.sublime-project,**/.sublime-workspace}" 495 | }] 496 | }, 497 | "k--kato.intellij-idea-keybindings": { 498 | "onFileOpen": [{ 499 | "pathGlob": "{**/.idea}" 500 | }] 501 | }, 502 | "christian-kohler.npm-intellisense": { 503 | "onFileOpen": [{ 504 | "pathGlob": "{**/package.json}" 505 | }] 506 | }, 507 | "cake-build.cake-vscode": { 508 | "onFileOpen": [{ 509 | "pathGlob": "{**/build.cake}" 510 | }] 511 | }, 512 | "Angular.ng-template": { 513 | "onFileOpen": [{ 514 | "pathGlob": "{**/.angular-cli.json,**/angular.json,**/*.ng.html,**/*.ng,**/*.ngml}" 515 | }] 516 | }, 517 | "vscjava.vscode-maven": { 518 | "onFileOpen": [{ 519 | "pathGlob": "**/pom.xml" 520 | }] 521 | }, 522 | "ms-azuretools.vscode-azureterraform": { 523 | "onFileOpen": [{ 524 | "pathGlob": "**/*.tf" 525 | }] 526 | }, 527 | "HashiCorp.terraform": { 528 | "onFileOpen": [{ 529 | "pathGlob": "**/*.tf" 530 | }] 531 | }, 532 | "vsciot-vscode.vscode-arduino": { 533 | "onFileOpen": [{ 534 | "pathGlob": "**/*.ino" 535 | }] 536 | }, 537 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 538 | "onFileOpen": [{ 539 | "pathGlob": "{**/Chart.yaml}" 540 | }] 541 | }, 542 | "Oracle.oracledevtools": { 543 | "onFileOpen": [{ 544 | "pathGlob": "{**/*.sql}" 545 | }] 546 | }, 547 | "betterthantomorrow.calva": { 548 | "onFileOpen": [{ 549 | "pathGlob": "{**/*.clj,**/*.cljs}" 550 | }] 551 | }, 552 | "vmware.vscode-boot-dev-pack": { 553 | "onFileOpen": [{ 554 | "pathGlob": "{**/application.properties}" 555 | }] 556 | }, 557 | "GitHub.vscode-github-actions": { 558 | "onFileOpen": [{ 559 | "pathGlob": "{**/.github/workflows/*.yml}", 560 | "important": true 561 | }] 562 | }, 563 | "circleci.circleci": { 564 | "onFileOpen": [{ 565 | "pathGlob": "{**/.circleci/config.yml}" 566 | }] 567 | }, 568 | "mechatroner.rainbow-csv": { 569 | "onFileOpen": [{ 570 | "pathGlob": "**/*.csv", 571 | "important": true 572 | }] 573 | }, 574 | "tomoki1207.pdf": { 575 | "onFileOpen": [{ 576 | "pathGlob": "**/*.pdf", 577 | "important": true 578 | }] 579 | }, 580 | "Redis.redis-for-vscode": { 581 | "onFileOpen": [{ 582 | "pathGlob": "{**/redis.*,**/redis-server.*,**/redis_*,**/redisinsight.*}" 583 | }] 584 | } 585 | }, 586 | "extensionVirtualWorkspacesSupport": { 587 | "esbenp.prettier-vscode": { 588 | "default": false 589 | }, 590 | "msjsdiag.debugger-for-chrome": { 591 | "default": false 592 | }, 593 | "redhat.java": { 594 | "default": false 595 | }, 596 | "HookyQR.beautify": { 597 | "default": false 598 | }, 599 | "ritwickdey.LiveServer": { 600 | "default": false 601 | }, 602 | "VisualStudioExptTeam.vscodeintellicode": { 603 | "default": false 604 | }, 605 | "octref.vetur": { 606 | "default": false 607 | }, 608 | "formulahendry.code-runner": { 609 | "default": false 610 | }, 611 | "xdebug.php-debug": { 612 | "default": false 613 | }, 614 | "ms-mssql.mssql": { 615 | "default": false 616 | }, 617 | "christian-kohler.path-intellisense": { 618 | "default": false 619 | }, 620 | "eg2.tslint": { 621 | "default": false 622 | }, 623 | "eg2.vscode-npm-script": { 624 | "default": false 625 | }, 626 | "donjayamanne.githistory": { 627 | "default": false 628 | }, 629 | "Zignd.html-css-class-completion": { 630 | "default": false 631 | }, 632 | "christian-kohler.npm-intellisense": { 633 | "default": false 634 | }, 635 | "EditorConfig.EditorConfig": { 636 | "default": false 637 | }, 638 | "austin.code-gnu-global": { 639 | "default": false 640 | }, 641 | "johnpapa.Angular2": { 642 | "default": false 643 | }, 644 | "ms-vscode.vscode-typescript-tslint-plugin": { 645 | "default": false 646 | }, 647 | "DotJoshJohnson.xml": { 648 | "default": false 649 | }, 650 | "techer.open-in-browser": { 651 | "default": false 652 | }, 653 | "tht13.python": { 654 | "default": false 655 | }, 656 | "bmewburn.vscode-intelephense-client": { 657 | "default": false 658 | }, 659 | "Angular.ng-template": { 660 | "default": false 661 | }, 662 | "xdebug.php-pack": { 663 | "default": false 664 | }, 665 | "dbaeumer.jshint": { 666 | "default": false 667 | }, 668 | "yzhang.markdown-all-in-one": { 669 | "default": false 670 | }, 671 | "Dart-Code.flutter": { 672 | "default": false 673 | }, 674 | "streetsidesoftware.code-spell-checker": { 675 | "default": false 676 | }, 677 | "rebornix.Ruby": { 678 | "default": false 679 | }, 680 | "ms-vscode.sublime-keybindings": { 681 | "default": false 682 | }, 683 | "mitaki28.vscode-clang": { 684 | "default": false 685 | }, 686 | "steoates.autoimport": { 687 | "default": false 688 | }, 689 | "donjayamanne.python-extension-pack": { 690 | "default": false 691 | }, 692 | "shd101wyy.markdown-preview-enhanced": { 693 | "default": false 694 | }, 695 | "mikestead.dotenv": { 696 | "default": false 697 | }, 698 | "pranaygp.vscode-css-peek": { 699 | "default": false 700 | }, 701 | "ikappas.phpcs": { 702 | "default": false 703 | }, 704 | "platformio.platformio-ide": { 705 | "default": false 706 | }, 707 | "jchannon.csharpextensions": { 708 | "default": false 709 | }, 710 | "gruntfuggly.todo-tree": { 711 | "default": false 712 | } 713 | }, 714 | "extensionSyncedKeys": { 715 | "ritwickdey.liveserver": ["liveServer.setup.version"] 716 | }, 717 | "extensionKind": { 718 | "Shan.code-settings-sync": ["ui"], 719 | "shalldie.background": ["ui"], 720 | "techer.open-in-browser": ["ui"], 721 | "CoenraadS.bracket-pair-colorizer-2": ["ui"], 722 | "CoenraadS.bracket-pair-colorizer": ["ui", "workspace"], 723 | "hiro-sun.vscode-emacs": ["ui", "workspace"], 724 | "hnw.vscode-auto-open-markdown-preview": ["ui", "workspace"], 725 | "wayou.vscode-todo-highlight": ["ui", "workspace"], 726 | "aaron-bond.better-comments": ["ui", "workspace"], 727 | "vscodevim.vim": ["ui"], 728 | "ollyhayes.colmak-vim": ["ui"] 729 | }, 730 | "extensionPointExtensionKind": { 731 | "typescriptServerPlugins": ["workspace"] 732 | }, 733 | "extensionAllowedBadgeProvidersRegex": ["^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/(actions\\/)?workflows\\/.*badge\\.svg"], 734 | "extensionAllowedBadgeProviders": ["api.bintray.com", "api.travis-ci.com", "api.travis-ci.org", "app.fossa.io", "badge.buildkite.com", "badge.fury.io", "badge.waffle.io", "badgen.net", "badges.frapsoft.com", "badges.gitter.im", "badges.greenkeeper.io", "cdn.travis-ci.com", "cdn.travis-ci.org", "ci.appveyor.com", "circleci.com", "cla.opensource.microsoft.com", "codacy.com", "codeclimate.com", "codecov.io", "coveralls.io", "david-dm.org", "deepscan.io", "dev.azure.com", "docs.rs", "flat.badgen.net", "gemnasium.com", "githost.io", "gitlab.com", "godoc.org", "goreportcard.com", "img.shields.io", "isitmaintained.com", "marketplace.visualstudio.com", "nodesecurity.io", "opencollective.com", "snyk.io", "travis-ci.com", "travis-ci.org", "visualstudio.com", "vsmarketplacebadge.apphb.com", "www.bithound.io", "www.versioneye.com"], 735 | "extensionKeywords": { 736 | "md": ["Markdown"], 737 | "js": ["JavaScript"], 738 | "jsx": ["JavaScript"], 739 | "es6": ["JavaScript"], 740 | "html": ["Html"], 741 | "ts": ["TypeScript"], 742 | "tsx": ["TypeScript"], 743 | "css": ["CSS"], 744 | "scss": ["SASS"], 745 | "txt": ["Text"], 746 | "php": ["PHP"], 747 | "php3": ["PHP"], 748 | "php4": ["PHP"], 749 | "ph3": ["PHP"], 750 | "ph4": ["PHP"], 751 | "xml": ["XML"], 752 | "py": ["Python"], 753 | "pyc": ["Python"], 754 | "pyd": ["Python"], 755 | "pyo": ["Python"], 756 | "pyw": ["Python"], 757 | "pyz": ["Python"], 758 | "java": ["Java"], 759 | "class": ["Java"], 760 | "jar": ["Java"], 761 | "c": ["c", "objective c", "objective-c"], 762 | "m": ["objective c", "objective-c"], 763 | "mm": ["objective c", "objective-c"], 764 | "cpp": ["cpp", "c plus plus", "c", "c++"], 765 | "cc": ["cpp", "c plus plus", "c", "c++"], 766 | "cxx": ["cpp", "c plus plus", "c++"], 767 | "hh": ["cpp", "c plus plus", "c++"], 768 | "hpp": ["cpp", "c++"], 769 | "h": ["cpp", "c plus plus", "c++", "c", "objective c", "objective-c"], 770 | "sql": ["sql"], 771 | "sh": ["bash"], 772 | "bash": ["bash"], 773 | "zsh": ["bash", "zshell"], 774 | "cs": ["c#", "csharp"], 775 | "csproj": ["c#", "csharp"], 776 | "sln": ["c#", "csharp"], 777 | "go": ["go"], 778 | "sty": ["latex"], 779 | "tex": ["latex"], 780 | "ps": ["powershell"], 781 | "ps1": ["powershell"], 782 | "rs": ["rust"], 783 | "rslib": ["rust"], 784 | "hs": ["haskell"], 785 | "lhs": ["haskell"], 786 | "scm": ["scheme"], 787 | "ss": ["scheme"], 788 | "clj": ["clojure"], 789 | "cljs": ["clojure"], 790 | "cljc": ["clojure"], 791 | "edn": ["clojure"], 792 | "erl": ["erlang"], 793 | "hrl": ["erlang"], 794 | "scala": ["scala"], 795 | "sc": ["scala"], 796 | "pl": ["perl"], 797 | "pm": ["perl"], 798 | "t": ["perl"], 799 | "pod": ["perl"], 800 | "groovy": ["groovy"], 801 | "swift": ["swift"], 802 | "rb": ["ruby"], 803 | "rbw": ["ruby"], 804 | "jl": ["julia"], 805 | "f": ["fortran"], 806 | "for": ["fortran"], 807 | "f90": ["fortran"], 808 | "f95": ["fortran"], 809 | "coffee": ["CoffeeScript"], 810 | "litcoffee": ["CoffeeScript"], 811 | "yaml": ["yaml"], 812 | "yml": ["yaml"], 813 | "dart": ["dart"], 814 | "json": ["json"] 815 | }, 816 | "remoteExtensionTips": { 817 | "wsl": { 818 | "friendlyName": "WSL", 819 | "extensionId": "ms-vscode-remote.remote-wsl", 820 | "supportedPlatforms": ["Windows", "Web"], 821 | "startEntry": { 822 | "helpLink": "https://aka.ms/vscode-remote/wsl", 823 | "startConnectLabel": "WSL", 824 | "startCommand": "remote-wsl.connect", 825 | "priority": 3 826 | } 827 | }, 828 | "ssh-remote": { 829 | "friendlyName": "Remote - SSH", 830 | "extensionId": "ms-vscode-remote.remote-ssh", 831 | "supportedPlatforms": ["Windows", "Linux", "Mac"], 832 | "startEntry": { 833 | "helpLink": "https://aka.ms/vscode-remote/ssh", 834 | "startConnectLabel": "SSH ", 835 | "startCommand": "opensshremotes.openEmptyWindowInCurrentWindow", 836 | "priority": 1 837 | } 838 | }, 839 | "open-ssh-remote": { 840 | "friendlyName": "Open Remote SSH", 841 | "extensionId": "jeanp413.open-remote-ssh", 842 | "supportedPlatforms": ["Windows", "Linux", "Mac"], 843 | "startEntry": { 844 | "helpLink": "https://github.com/jeanp413/open-remote-ssh", 845 | "startConnectLabel": "Open Remote SSH", 846 | "startCommand": "openremotessh.openEmptyWindowInCurrentWindow", 847 | "priority": 0 848 | } 849 | }, 850 | "dev-container": { 851 | "friendlyName": "Dev Containers", 852 | "extensionId": "ms-vscode-remote.remote-containers", 853 | "supportedPlatforms": ["Windows", "Linux", "Mac"], 854 | "startEntry": { 855 | "helpLink": "https://aka.ms/vscode-remote/containers", 856 | "startConnectLabel": "Dev Container", 857 | "startCommand": "remote-containers.reopenInContainer", 858 | "priority": 2 859 | } 860 | }, 861 | "attached-container": { 862 | "friendlyName": "Dev Containers", 863 | "extensionId": "ms-vscode-remote.remote-containers" 864 | }, 865 | "codespaces": { 866 | "friendlyName": "GitHub Codespaces", 867 | "extensionId": "github.codespaces", 868 | "startEntry": { 869 | "helpLink": "https://aka.ms/vscode-remote-codespaces", 870 | "startConnectLabel": "GitHub Codespace ", 871 | "startCommand": "github.codespaces.connect", 872 | "priority": 4 873 | } 874 | }, 875 | "tunnel": { 876 | "friendlyName": "Remote - Tunnels", 877 | "extensionId": "ms-vscode.remote-server", 878 | "startEntry": { 879 | "helpLink": "https://aka.ms/remote-tunnels-doc", 880 | "startConnectLabel": "Tunnel", 881 | "startCommand": "remote-tunnels.connectCurrentWindowToTunnel", 882 | "priority": 0 883 | } 884 | } 885 | }, 886 | "virtualWorkspaceExtensionTips": { 887 | "vscode-vfs": { 888 | "friendlyName": "Remote Repositories", 889 | "extensionId": "ms-vscode.remote-repositories", 890 | "startEntry": { 891 | "helpLink": "https://aka.ms/vscode-remote/remote-repositories", 892 | "startConnectLabel": "Remote Repository", 893 | "startCommand": "remoteHub.continueOn.openRepository", 894 | "priority": 5 895 | } 896 | } 897 | }, 898 | "webExtensionTips": ["tyriar.luna-paint", "codespaces-contrib.codeswing", "ms-vscode.vscode-github-issue-notebooks", "esbenp.prettier-vscode", "hediet.vscode-drawio"], 899 | "configBasedExtensionTips": { 900 | "git": { 901 | "configPath": ".git/config", 902 | "configName": "Git", 903 | "recommendations": { 904 | "github.vscode-pull-request-github": { 905 | "name": "GitHub Pull Request", 906 | "contentPattern": "^\\s*url\\s*=\\s*https:\\/\\/github\\.com.*$" 907 | }, 908 | "eamodio.gitlens": { 909 | "name": "GitLens" 910 | } 911 | } 912 | }, 913 | "devContainer": { 914 | "configPath": ".devcontainer/devcontainer.json", 915 | "configName": "Dev Container", 916 | "recommendations": { 917 | "ms-vscode-remote.remote-containers": { 918 | "name": "Dev Containers", 919 | "important": true 920 | } 921 | } 922 | }, 923 | "maven": { 924 | "configPath": "pom.xml", 925 | "configName": "Maven", 926 | "recommendations": { 927 | "vscjava.vscode-java-pack": { 928 | "name": "Java", 929 | "important": true, 930 | "isExtensionPack": true, 931 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 932 | }, 933 | "vmware.vscode-boot-dev-pack": { 934 | "name": "Spring Boot Extension Pack", 935 | "isExtensionPack": true 936 | } 937 | } 938 | }, 939 | "gradle": { 940 | "configPath": "build.gradle", 941 | "configName": "Gradle", 942 | "recommendations": { 943 | "vscjava.vscode-java-pack": { 944 | "name": "Java", 945 | "important": true, 946 | "isExtensionPack": true, 947 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 948 | } 949 | } 950 | }, 951 | "github-pull-request": { 952 | "configPath": ".vscode/.github-pull-request.rec", 953 | "configName": "GitHub", 954 | "configScheme": "vscode-vfs", 955 | "recommendations": { 956 | "github.vscode-pull-request-github": { 957 | "name": "GitHub Pull Request", 958 | "important": true 959 | } 960 | } 961 | }, 962 | "pyproject-formatter": { 963 | "configPath": "pyproject.toml", 964 | "configName": "Python Formatter", 965 | "recommendations": { 966 | "ms-python.black-formatter": { 967 | "name": "Black Formatter", 968 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?black\"?\\s*[\\].])|(\"black\\s*[\"[(<=>!~;@])" 969 | }, 970 | "ms-python.autopep8": { 971 | "name": "Autopep8", 972 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?autopep8\"?\\s*[\\].])|(\"autopep8\\s*[\"[(<=>!~;@])" 973 | } 974 | } 975 | }, 976 | "pep8-formatter": { 977 | "configPath": ".pep8", 978 | "configName": "Python Formatter", 979 | "recommendations": { 980 | "ms-python.autopep8": { 981 | "name": "Autopep8" 982 | } 983 | } 984 | }, 985 | "python-setup-cgf-formatter": { 986 | "configPath": "setup.cfg", 987 | "configName": "Python Formatter", 988 | "recommendations": { 989 | "ms-python.autopep8": { 990 | "name": "Autopep8", 991 | "contentPattern": "^\\[pep8\\]" 992 | } 993 | } 994 | }, 995 | "tox-ini-formatter": { 996 | "configPath": "tox.ini", 997 | "configName": "Python Formatter", 998 | "recommendations": { 999 | "ms-python.autopep8": { 1000 | "name": "Autopep8", 1001 | "contentPattern": "^\\[pep8\\]" 1002 | } 1003 | } 1004 | }, 1005 | "pyproject-linter": { 1006 | "configPath": "pyproject.toml", 1007 | "configName": "Python Linter", 1008 | "recommendations": { 1009 | "ms-python.pylint": { 1010 | "name": "Pylint", 1011 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?pylint\"?\\s*[\\].])|(\"pylint\\s*[\"[(<=>!~;@])" 1012 | }, 1013 | "charliermarsh.ruff": { 1014 | "name": "Ruff", 1015 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?ruff\"?\\s*[\\].])|(\"ruff\\s*[\"[(<=>!~;@])" 1016 | }, 1017 | "ms-python.mypy-type-checker": { 1018 | "name": "Mypy Type Checker", 1019 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?mypy\"?\\s*[\\].])|(\"mypy\\s*[\"[(<=>!~;@])" 1020 | }, 1021 | "ms-python.flake8": { 1022 | "name": "Flake8", 1023 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?flake8\"?\\s*[\\].])|(\"flake8\\s*[\"[(<=>!~;@])" 1024 | } 1025 | } 1026 | }, 1027 | ".pylintrc-linter": { 1028 | "configPath": ".pylintrc", 1029 | "configName": "Python Linter", 1030 | "recommendations": { 1031 | "ms-python.pylint": { 1032 | "name": "Pylint" 1033 | } 1034 | } 1035 | }, 1036 | "pylintrc-linter": { 1037 | "configPath": "pylintrc", 1038 | "configName": "Python Linter", 1039 | "recommendations": { 1040 | "ms-python.pylint": { 1041 | "name": "Pylint" 1042 | } 1043 | } 1044 | }, 1045 | "mypy-ini-linter": { 1046 | "configPath": ".mypy.ini", 1047 | "configName": "Python Linter", 1048 | "recommendations": { 1049 | "ms-python.mypy-type-checker": { 1050 | "name": "Mypy Type Checker" 1051 | } 1052 | } 1053 | }, 1054 | "tox-ini-linter": { 1055 | "configPath": "tox.ini", 1056 | "configName": "Python Linter", 1057 | "recommendations": { 1058 | "ms-python.flake8": { 1059 | "name": "Flake8", 1060 | "contentPattern": "^\\[flake8\\]" 1061 | } 1062 | } 1063 | }, 1064 | ".flake8-linter": { 1065 | "configPath": ".flake8", 1066 | "configName": "Python Linter", 1067 | "recommendations": { 1068 | "ms-python.flake8": { 1069 | "name": "Flake8" 1070 | } 1071 | } 1072 | }, 1073 | "python-setup-cgf-linter": { 1074 | "configPath": "setup.cfg", 1075 | "configName": "Python Linter", 1076 | "recommendations": { 1077 | "ms-python.flake8": { 1078 | "name": "Flake8", 1079 | "contentPattern": "^\\[flake8\\]" 1080 | } 1081 | } 1082 | } 1083 | }, 1084 | "exeBasedExtensionTips": { 1085 | "az": { 1086 | "friendlyName": "Azure CLI", 1087 | "windowsPath": "%ProgramFiles(x86)%\\Microsoft SDKs\\Azure\\CLI2\\wbin\\az.cmd", 1088 | "recommendations": { 1089 | "ms-vscode.vscode-node-azure-pack": { 1090 | "name": "Azure Tools" 1091 | }, 1092 | "ms-azuretools.vscode-azure-github-copilot": { 1093 | "name": "GitHub Copilot for Azure" 1094 | } 1095 | } 1096 | }, 1097 | "azd": { 1098 | "friendlyName": "Azure Dev CLI", 1099 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Programs\\Azure Dev CLI\\azd.exe", 1100 | "recommendations": { 1101 | "ms-vscode.vscode-node-azure-pack": { 1102 | "name": "Azure Tools" 1103 | }, 1104 | "ms-azuretools.vscode-azure-github-copilot": { 1105 | "name": "GitHub Copilot for Azure" 1106 | } 1107 | } 1108 | }, 1109 | "azd-user": { 1110 | "friendlyName": "Azure Dev CLI", 1111 | "windowsPath": "%ProgramFiles%\\Azure Dev CLI\\azd.exe", 1112 | "recommendations": { 1113 | "ms-vscode.vscode-node-azure-pack": { 1114 | "name": "Azure Tools" 1115 | }, 1116 | "ms-azuretools.vscode-azure-github-copilot": { 1117 | "name": "GitHub Copilot for Azure" 1118 | } 1119 | } 1120 | }, 1121 | "heroku": { 1122 | "friendlyName": "Heroku CLI", 1123 | "windowsPath": "%ProgramFiles%\\Heroku\\bin\\heroku.cmd", 1124 | "recommendations": { 1125 | "ms-azuretools.vscode-azureappservice": { 1126 | "name": "Azure App Service" 1127 | }, 1128 | "pkosta2005.heroku-command": { 1129 | "name": "heroku-cli" 1130 | } 1131 | } 1132 | }, 1133 | "mongo": { 1134 | "friendlyName": "Mongo", 1135 | "windowsPath": "%ProgramFiles%\\MongoDB\\Server\\3.6\\bin\\mongod.exe", 1136 | "recommendations": { 1137 | "ms-azuretools.vscode-cosmosdb": { 1138 | "name": "Azure Databases" 1139 | } 1140 | } 1141 | }, 1142 | "serverless": { 1143 | "friendlyName": "Serverless framework", 1144 | "windowsPath": "%APPDATA%\\npm\\serverless.cmd", 1145 | "recommendations": { 1146 | "ms-azuretools.vscode-azurefunctions": { 1147 | "name": "Azure Functions" 1148 | } 1149 | } 1150 | }, 1151 | "func": { 1152 | "friendlyName": "Azure Function SDK", 1153 | "windowsPath": "%APPDATA%\\npm\\func.cmd", 1154 | "recommendations": { 1155 | "ms-azuretools.vscode-azurefunctions": { 1156 | "name": "Azure Functions" 1157 | } 1158 | } 1159 | }, 1160 | "mysql": { 1161 | "friendlyName": "MySQL", 1162 | "windowsPath": "%ProgramFiles%\\MySQL\\MySQL Server 8.0\\bin\\mysqld.exe", 1163 | "recommendations": { 1164 | "mtxr.sqltools": { 1165 | "name": "SQLTools" 1166 | } 1167 | } 1168 | }, 1169 | "postgres": { 1170 | "friendlyName": "PostgreSQL", 1171 | "windowsPath": "%ProgramFiles%\\PostgreSQL\\11\\bin\\psql.exe", 1172 | "recommendations": { 1173 | "ms-ossdata.vscode-postgresql": { 1174 | "name": "PostgreSQL" 1175 | }, 1176 | "mtxr.sqltools": { 1177 | "name": "SQLTools" 1178 | } 1179 | } 1180 | }, 1181 | "sqlcmd": { 1182 | "friendlyName": "SQL CLI", 1183 | "recommendations": { 1184 | "ms-mssql.mssql": { 1185 | "name": "SQL Server (mssql)" 1186 | } 1187 | } 1188 | }, 1189 | "now": { 1190 | "friendlyName": "Now CLI", 1191 | "windowsPath": "%APPDATA%\\npm\\now.cmd", 1192 | "recommendations": { 1193 | "ms-azuretools.vscode-azureappservice": { 1194 | "name": "Azure App Service" 1195 | }, 1196 | "ms-azuretools.vscode-docker": { 1197 | "name": "Docker" 1198 | } 1199 | } 1200 | }, 1201 | "docker": { 1202 | "friendlyName": "Docker", 1203 | "windowsPath": "%ProgramFiles%\\Docker\\Docker\\Resources\\bin\\docker.exe", 1204 | "recommendations": { 1205 | "ms-azuretools.vscode-docker": { 1206 | "name": "Docker", 1207 | "important": true 1208 | }, 1209 | "ms-vscode-remote.remote-containers": { 1210 | "name": "Dev Containers", 1211 | "important": true 1212 | }, 1213 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1214 | "name": "Kubernetes" 1215 | } 1216 | } 1217 | }, 1218 | "kubectl": { 1219 | "friendlyName": "Kubernetes", 1220 | "windowsPath": "%ProgramFiles%\\Docker\\Docker\\Resources\\bin\\kubectl.exe", 1221 | "recommendations": { 1222 | "ms-azuretools.vscode-docker": { 1223 | "name": "Docker" 1224 | }, 1225 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1226 | "name": "Kubernetes" 1227 | }, 1228 | "ms-vscode-remote.remote-containers": { 1229 | "name": "Dev Containers" 1230 | } 1231 | } 1232 | }, 1233 | "ng": { 1234 | "friendlyName": "Angular CLI", 1235 | "windowsPath": "%APPDATA%\\npmexit\\ng.cmd", 1236 | "recommendations": { 1237 | "johnpapa.Angular2": { 1238 | "name": "Angular Snippets" 1239 | } 1240 | } 1241 | }, 1242 | "create-react-app": { 1243 | "friendlyName": "Create React App", 1244 | "windowsPath": "%APPDATA%\\npm\\create-react-app.cmd", 1245 | "recommendations": { 1246 | "msjsdiag.vscode-react-native": { 1247 | "name": "React Native Tools" 1248 | } 1249 | } 1250 | }, 1251 | "react-native": { 1252 | "friendlyName": "React Native", 1253 | "windowsPath": "%APPDATA%\\npm\\react-native-cli", 1254 | "recommendations": { 1255 | "msjsdiag.vscode-react-native": { 1256 | "name": "React Native Tools" 1257 | } 1258 | } 1259 | }, 1260 | "p4": { 1261 | "friendlyName": "Perforce", 1262 | "recommendations": { 1263 | "slevesque.perforce": { 1264 | "name": "Perforce for VS Code" 1265 | } 1266 | } 1267 | }, 1268 | "hg": { 1269 | "friendlyName": "Mercurial", 1270 | "recommendations": { 1271 | "mrcrowl.hg": { 1272 | "name": "Hg" 1273 | } 1274 | } 1275 | }, 1276 | "git": { 1277 | "friendlyName": "Git", 1278 | "windowsPath": "%ProgramFiles%\\Git\\git-bash.exe", 1279 | "recommendations": { 1280 | "eamodio.gitlens": { 1281 | "name": "GitLens" 1282 | } 1283 | } 1284 | }, 1285 | "svn": { 1286 | "friendlyName": "Subversion", 1287 | "windowsPath": "%ProgramFiles%\\TortoiseSVN\\bin\\TortoiseProc.exe", 1288 | "recommendations": { 1289 | "johnstoncode.svn-scm": { 1290 | "name": "SVN" 1291 | } 1292 | } 1293 | }, 1294 | "subl": { 1295 | "friendlyName": "Sublime", 1296 | "windowsPath": "%ProgramFiles%\\Sublime Text3\\sublime_text.exe", 1297 | "recommendations": { 1298 | "ms-vscode.sublime-keybindings": { 1299 | "name": "Sublime Text Keymap and Settings Importer" 1300 | } 1301 | } 1302 | }, 1303 | "atom": { 1304 | "friendlyName": "Atom", 1305 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\atom\\bin\\atom.cmd", 1306 | "recommendations": { 1307 | "ms-vscode.atom-keybindings": { 1308 | "name": "Atom Keymap" 1309 | } 1310 | } 1311 | }, 1312 | "brackets": { 1313 | "friendlyName": "Brackets", 1314 | "windowsPath": "%ProgramFiles(x86)%\\Brackets\\Brackets.exe", 1315 | "recommendations": { 1316 | "ms-vscode.brackets-keybindings": { 1317 | "name": "Brackets Keymap" 1318 | } 1319 | } 1320 | }, 1321 | "notepadplusplus": { 1322 | "friendlyName": "Notepad++", 1323 | "windowsPath": "%ProgramFiles%\\Notepad++\\Notepad++.exe", 1324 | "recommendations": { 1325 | "ms-vscode.notepadplusplus-keybindings": { 1326 | "name": "Notepad++ keymap" 1327 | } 1328 | } 1329 | }, 1330 | "vi": { 1331 | "friendlyName": "VIM", 1332 | "windowsPath": "%ProgramFiles(x86)%\\Vim\\vim80\\gvim.exe", 1333 | "recommendations": { 1334 | "vscodevim.vim": { 1335 | "name": "Vim" 1336 | } 1337 | } 1338 | }, 1339 | "mvn": { 1340 | "friendlyName": "Maven", 1341 | "recommendations": { 1342 | "vscjava.vscode-java-pack": { 1343 | "name": "Java", 1344 | "important": true, 1345 | "isExtensionPack": true, 1346 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 1347 | } 1348 | } 1349 | }, 1350 | "gradle": { 1351 | "friendlyName": "Gradle", 1352 | "recommendations": { 1353 | "vscjava.vscode-java-pack": { 1354 | "name": "Java", 1355 | "important": true, 1356 | "isExtensionPack": true, 1357 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 1358 | } 1359 | } 1360 | }, 1361 | "Microsoft Edge": { 1362 | "friendlyName": "Microsoft Edge", 1363 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge\\Application\\msedge.exe", 1364 | "recommendations": { 1365 | "ms-edgedevtools.vscode-edge-devtools": { 1366 | "name": "Microsoft Edge Developer Tools" 1367 | } 1368 | } 1369 | }, 1370 | "Microsoft Edge Dev": { 1371 | "friendlyName": "Microsoft Edge Dev", 1372 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge Dev\\Application\\msedge.exe", 1373 | "recommendations": { 1374 | "ms-edgedevtools.vscode-edge-devtools": { 1375 | "name": "Microsoft Edge Developer Tools" 1376 | } 1377 | } 1378 | }, 1379 | "Microsoft Edge Beta": { 1380 | "friendlyName": "Microsoft Edge Beta", 1381 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge Beta\\Application\\msedge.exe", 1382 | "recommendations": { 1383 | "ms-edgedevtools.vscode-edge-devtools": { 1384 | "name": "Microsoft Edge Developer Tools" 1385 | } 1386 | } 1387 | }, 1388 | "Microsoft Edge Canary": { 1389 | "friendlyName": "Microsoft Edge Canary", 1390 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge SxS\\Application\\msedge.exe", 1391 | "recommendations": { 1392 | "ms-edgedevtools.vscode-edge-devtools": { 1393 | "name": "Microsoft Edge Developer Tools" 1394 | } 1395 | } 1396 | }, 1397 | "Mozilla Firefox (x86)": { 1398 | "friendlyName": "Mozilla Firefox", 1399 | "windowsPath": "%ProgramFiles(x86)%\\Mozilla Firefox\\firefox.exe", 1400 | "recommendations": { 1401 | "firefox-devtools.vscode-firefox-debug": { 1402 | "name": "Debugger for Firefox" 1403 | } 1404 | } 1405 | }, 1406 | "Mozilla Firefox Developer Edition (x86)": { 1407 | "friendlyName": "Mozilla Firefox Developer Edition", 1408 | "windowsPath": "%ProgramFiles(x86)%\\Firefox Developer Edition\\firefox.exe", 1409 | "recommendations": { 1410 | "firefox-devtools.vscode-firefox-debug": { 1411 | "name": "Debugger for Firefox" 1412 | } 1413 | } 1414 | }, 1415 | "Mozilla Firefox": { 1416 | "friendlyName": "Mozilla Firefox", 1417 | "windowsPath": "%ProgramFiles%\\Mozilla Firefox\\firefox.exe", 1418 | "recommendations": { 1419 | "firefox-devtools.vscode-firefox-debug": { 1420 | "name": "Debugger for Firefox" 1421 | } 1422 | } 1423 | }, 1424 | "Mozilla Firefox Developer Edition": { 1425 | "friendlyName": "Mozilla Firefox Developer Edition", 1426 | "windowsPath": "%ProgramFiles%\\Firefox Developer Edition\\firefox.exe", 1427 | "recommendations": { 1428 | "firefox-devtools.vscode-firefox-debug": { 1429 | "name": "Debugger for Firefox" 1430 | } 1431 | } 1432 | }, 1433 | "cordova": { 1434 | "friendlyName": "Cordova", 1435 | "windowsPath": "%APPDATA%\\npm\\cordova", 1436 | "recommendations": { 1437 | "msjsdiag.cordova-tools": { 1438 | "name": "Cordova Tools" 1439 | } 1440 | } 1441 | }, 1442 | "gcloud": { 1443 | "friendlyName": "Google GCloud CLI", 1444 | "windowsPath": "%ProgramFiles(x86)%\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\gcloud.cmd", 1445 | "recommendations": { 1446 | "GoogleCloudTools.cloudcode": { 1447 | "name": "Cloud Code" 1448 | } 1449 | } 1450 | }, 1451 | "skaffold": { 1452 | "friendlyName": "Skaffold Code to Cluster", 1453 | "recommendations": { 1454 | "ms-azuretools.vscode-docker": { 1455 | "name": "Docker" 1456 | }, 1457 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1458 | "name": "Kubernetes" 1459 | } 1460 | } 1461 | }, 1462 | "minikube": { 1463 | "friendlyName": "MiniKube Local Kubernetes Cluster", 1464 | "recommendations": { 1465 | "ms-azuretools.vscode-docker": { 1466 | "name": "Docker" 1467 | }, 1468 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1469 | "name": "Kubernetes" 1470 | }, 1471 | "ms-vscode-remote.remote-containers": { 1472 | "name": "Dev Containers" 1473 | } 1474 | } 1475 | }, 1476 | "podman": { 1477 | "friendlyName": "Podman", 1478 | "recommendations": { 1479 | "ms-vscode-remote.remote-containers": { 1480 | "name": "Dev Containers" 1481 | } 1482 | } 1483 | }, 1484 | "wsl": { 1485 | "friendlyName": "Windows Subsystem for Linux (WSL)", 1486 | "windowsPath": "%WINDIR%\\system32\\lxss\\LxssManager.dll", 1487 | "important": true, 1488 | "recommendations": { 1489 | "ms-vscode-remote.remote-wsl": { 1490 | "name": "WSL", 1491 | "important": true 1492 | } 1493 | } 1494 | } 1495 | }, 1496 | "keymapExtensionTips": ["vscodevim.vim", "ms-vscode.sublime-keybindings", "ms-vscode.atom-keybindings", "ms-vscode.brackets-keybindings", "ms-vscode.vs-keybindings", "ms-vscode.notepadplusplus-keybindings", "k--kato.intellij-idea-keybindings", "lfs.vscode-emacs-friendly", "alphabotsec.vscode-eclipse-keybindings", "alefragnani.delphi-keybindings"], 1497 | "languageExtensionTips": ["ms-python.python", "ms-vscode.cpptools-extension-pack", "ms-dotnettools.csdevkit", "ms-toolsai.jupyter", "vscjava.vscode-java-pack", "ecmel.vscode-html-css", "vue.volar", "bmewburn.vscode-intelephense-client", "dsznajder.es7-react-js-snippets", "golang.go", "ms-vscode.powershell", "dart-code.dart-code", "rust-lang.rust-analyzer", "Shopify.ruby-lsp"], 1498 | "version": "0.47.9", 1499 | "removeTelemetryMachineId": true, 1500 | "enabledTelemetryLevels": { 1501 | "error": true, 1502 | "usage": true 1503 | }, 1504 | "enableTelemetry": true, 1505 | "openToWelcomeMainPage": true, 1506 | "removeLinesBeforeCompilingIfTheyContainTheseWords": ["__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_chat_experiments__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_beta_deprecated_settings__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____EXTENSION_IS_DEV__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_documentagent__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_hyper_mode__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cmd_k_diff_history__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_context_graph_treesitter__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_context_config__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_development_tooling__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_separate_product_json_for_remote_ssh__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_handle_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____include_todesktop_runtime__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_backend_selection_keyboard_shortcuts__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_aitasks_view__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_recrusive_context__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____remove_to_default_use_prod_backend__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_console_log__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_auto_refactor__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_background_composer__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_instruct_cpp__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_filesync__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_control_token__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cursoreval__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_assert__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_linter_by_default__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____dont_print_all_stack_traces_when_listener_leak__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_watcher__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_this_is_set_in_prod_and_nightly__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_toggle_reranker__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_linter__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_instant_search__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cursor_motion__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_extension_rewrite_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_debugger__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_shadow_workspace_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_hold_cpp__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_context_ast_typescript_fork__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_hacky_context_service__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_fullfileEdits__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_eval__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_dev_flush_logs__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_deepseek_7b__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_deepseek_33b__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_multi_file_applies__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_embedding_model_switch__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cursor_prediction_options__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_long_context_stickiness__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_debugger_mode__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_debugger_stickiness__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____bugbot_dev__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_eval_mode__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_background_cmdk_eval__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ttft_logging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_always_on_fast_apply_chunk_speculation__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_runnable_code_blocks__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_auto_import_experiments__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_warning_on_too_many_update_locks__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_dev_only_prompt_quality_link__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_loud_logging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_capabilities__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_embeddings_quick_access__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_potential_locs__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____enable_dev_tab__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_menubar_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_multiple_embeddings__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_unification__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_hmr__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_resume__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_web_viewer__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_planner_tool__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_implementer_tool__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_auto_context__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_leak_finder__"], 1507 | "commit": "b6fb41b5f36bda05cab7109606e7404a65d1ff30", 1508 | "date": "2025-03-21T20:17:02.110Z", 1509 | "checksums": { 1510 | "vs/base/parts/sandbox/electron-sandbox/preload.js": "8p+TiaG5zd4O+0hVlON59xRIYjyn7m1W1Fynp0uVJ1E", 1511 | "vs/workbench/workbench.desktop.main.js": "IZY5D5uw+Sk0wSLKAVebeUVNdai3aLalG8y49Kees6k", 1512 | "vs/workbench/workbench.desktop.main.css": "QZ/oFQWfueooYfLuISbD9UrvLQ7qf1+WI/sAG/2s0hc", 1513 | "vs/workbench/api/node/extensionHostProcess.js": "BQuxvUApV0hY+kZ680hLiteVBvdzYc/dmnFabfsrAPo", 1514 | "vs/code/electron-sandbox/workbench/workbench.html": "2hltXxAMilDOjpDrn98p19rFk+RdcAJLmsmdt3zzSuM", 1515 | "vs/code/electron-sandbox/workbench/workbench.js": "cDL4iUw4y6Kd+j3Giy5udiSpV9lNbQb9nhzT1lpnglU" 1516 | } 1517 | } -------------------------------------------------------------------------------- /cursor_products/0.48.0/product.json: -------------------------------------------------------------------------------- 1 | { 2 | "quality": "stable", 3 | "licenseName": "MIT", 4 | "licenseUrl": "https://cursor.com/license.txt", 5 | "serverGreeting": [], 6 | "serverLicense": [], 7 | "vscodeVersion": "1.96.2", 8 | "serverLicensePrompt": "", 9 | "serverApplicationName": "cursor-server", 10 | "serverDataFolderName": ".cursor-server", 11 | "tunnelApplicationName": "cursor-tunnel", 12 | "serverDownloadUrlTemplate": "https://cursor.blob.core.windows.net/remote-releases/${commit}/vscode-reh-${os}-${arch}.tar.gz", 13 | "nlsCoreBaseUrl": "https://www.vscode-unpkg.net/nls/", 14 | "win32x64AppId": "{{D7D7D7D7-7D7D-7D7D-7D7D-7D7D7D7D7D7D}}", 15 | "win32arm64AppId": "{{D8D8D8D8-8D8D-8D8D-8D8D-8D8D8D8D8D8D}}", 16 | "win32x64UserAppId": "{{DADADADA-ADAD-ADAD-ADAD-ADADADADADAD}}", 17 | "win32arm64UserAppId": "{{DBDBDBDB-BDBD-BDBD-BDBD-BDBDBDBDBDBD}}", 18 | "win32TunnelMutex": "cursor-tunnel-mutex", 19 | "win32TunnelServiceMutex": "cursor-tunnel-service-mutex", 20 | "licenseFileName": "LICENSE.txt", 21 | "reportIssueUrl": "https://github.com/getcursor/cursor/issues/new", 22 | "webviewContentExternalBaseUrlTemplate": "https://{{uuid}}.vscode-cdn.net/insider/ef65ac1ba57f57f2a3961bfe94aa20481caca4c6/out/vs/workbench/contrib/webview/browser/pre/", 23 | "aiConfig": { 24 | "ariaKey": "control-key" 25 | }, 26 | "updateUrl": "https://api2.cursor.sh/updates", 27 | "backupUpdateUrl": "http://cursorapi.com/updates", 28 | "releaseNotesUrl": "https://www.cursor.com/changelog", 29 | "nodejsRepository": "https://nodejs.org", 30 | "extensionMaxVersions": { 31 | "ms-python.python": { 32 | "maxVersion": "2024.12.3", 33 | "minVersion": "2024.4.1" 34 | }, 35 | "ms-python.vscode-pylance": { 36 | "maxVersion": "2024.8.1", 37 | "minVersion": "2024.4.1" 38 | }, 39 | "ms-python.debugpy": { 40 | "maxVersion": "2024.6.0" 41 | }, 42 | "ms-vscode-remote.remote-containers": { 43 | "maxVersion": "0.394.0", 44 | "minVersion": "0.394.0" 45 | }, 46 | "ms-vscode-remote.remote-wsl": { 47 | "maxVersion": "0.81.8", 48 | "minVersion": "0.81.8" 49 | }, 50 | "ms-vscode-remote.remote-ssh": { 51 | "maxVersion": "0.113.1", 52 | "minVersion": "0.113.1" 53 | }, 54 | "ms-vscode-remote.remote-server": { 55 | "maxVersion": "1.5.1", 56 | "minVersion": "1.5.1" 57 | } 58 | }, 59 | "skipPackagingLocalExtensions": ["cursor-experiments", "cursor-context-ast-typescript", "cursor-browser", "cursor-pyright"], 60 | "cannotImportExtensions": ["github.copilot-chat", "github.copilot"], 61 | "trustedExtensionAuthAccess": { 62 | "github": ["vscode.github", "github.remotehub", "ms-vscode.remote-server", "github.vscode-pull-request-github", "github.codespaces", "github.copilot", "github.copilot-chat", "ms-vsliveshare.vsliveshare"], 63 | "github-enterprise": ["vscode.github", "github.remotehub", "ms-vscode.remote-server", "github.vscode-pull-request-github", "github.codespaces", "github.copilot", "github.copilot-chat", "ms-vsliveshare.vsliveshare"], 64 | "microsoft": ["ms-vscode.azure-repos", "ms-vscode.remote-server", "ms-vsliveshare.vsliveshare", "ms-azuretools.vscode-azureresourcegroups", "ms-edu.vscode-learning", "ms-toolsai.vscode-ai", "ms-toolsai.vscode-ai-remote"], 65 | "microsoft-sovereign-cloud": ["ms-vscode.azure-repos", "ms-vscode.remote-server", "ms-vsliveshare.vsliveshare", "ms-azuretools.vscode-azureresourcegroups", "ms-edu.vscode-learning", "ms-toolsai.vscode-ai", "ms-toolsai.vscode-ai-remote"] 66 | }, 67 | "aiGeneratedWorkspaceTrust": { 68 | "title": "This workspace was generated by GitHub Copilot", 69 | "checkboxText": "Trust the contents of all files in this workspace", 70 | "trustOption": "Yes, I trust the contents", 71 | "dontTrustOption": "No, I don't trust the contents", 72 | "startupTrustRequestLearnMore": "If you don't trust the contents of the files generated by GitHub Copilot, we recommend continuing in restricted mode. See [our docs](https://aka.ms/vscode-workspace-trust) to learn more. " 73 | }, 74 | "gitHubEntitlement": { 75 | "providerId": "github", 76 | "command": { 77 | "title": "Install GitHub Copilot (Paid for by {{org}})...", 78 | "titleWithoutPlaceHolder": "Install GitHub Copilot", 79 | "action": "workbench.extensions.installExtension", 80 | "when": "workbench.accounts.experimental.showEntitlements" 81 | }, 82 | "entitlementUrl": "https://api.github.com/copilot_internal/user", 83 | "extensionId": "github.copilot", 84 | "enablementKey": "chat_enabled", 85 | "confirmationAction": "Install", 86 | "confirmationMessage": "Are you sure you want to install GitHub Copilot?" 87 | }, 88 | "defaultChatAgent": { 89 | "extensionId": "GitHub.copilot", 90 | "chatExtensionId": "GitHub.copilot-chat", 91 | "documentationUrl": "https://aka.ms/copilot-overview", 92 | "termsStatementUrl": "https://aka.ms/github-copilot-terms-statement", 93 | "privacyStatementUrl": "https://aka.ms/github-copilot-privacy-statement", 94 | "skusDocumentationUrl": "https://aka.ms/github-copilot-plans", 95 | "publicCodeMatchesUrl": "https://aka.ms/github-copilot-match-public-code", 96 | "manageSettingsUrl": "https://aka.ms/github-copilot-settings", 97 | "managePlanUrl": "https://aka.ms/github-copilot-manage-plan", 98 | "upgradePlanUrl": "https://aka.ms/github-copilot-upgrade-plan", 99 | "providerId": "github", 100 | "providerName": "GitHub", 101 | "providerScopes": [ 102 | ["user:email"], 103 | ["read:user"], 104 | ["read:user", "user:email", "repo", "workflow"] 105 | ], 106 | "entitlementUrl": "https://api.github.com/copilot_internal/user", 107 | "entitlementSignupLimitedUrl": "https://api.github.com/copilot_internal/subscribe_limited_user" 108 | }, 109 | "chatParticipantRegistry": "https://main.vscode-cdn.net/extensions/chat.json", 110 | "cursorTrustedExtensionAuthAccess": ["anysphere.cursor-retrieval"], 111 | "bannedExtensions": {}, 112 | "trustedExtensionProtocolHandlers": ["vscode.git", "vscode.github-authentication", "vscode.microsoft-authentication"], 113 | "linkProtectionTrustedDomains": ["https://marketplace.visualstudio.com", "https://marketplace.cursorapi.com", "https://cursor-cdn.com", "https://cursor-marketplace.com", "https://open-vsx.org", "https://cursor.so", "https://cursor.sh", "https://cursor.com", "https://www.cursor.so", "https://cursor.com", "https://www.cursor.com", "https://docs.cursor.com", "https://docs.cursor.sh", "https://www.cursor.sh", "https://changelog.cursor.sh", "https://changelog.cursor.com", "https://github.com", "https://www.github.com", "https://docs.github.com", "https://portal.azure.com", "https://portal.azure.com", "https://raw.githubusercontent.com", "https://private-user-images.githubusercontent.com", "https://avatars.githubusercontent.com"], 114 | "commonlyUsedSettings": ["files.autoSave", "editor.fontSize", "editor.fontFamily", "GitHub.copilot.manageExtension", "editor.tabSize", "editor.renderWhitespace", "editor.cursorStyle", "editor.multiCursorModifier", "editor.insertSpaces", "editor.wordWrap", "files.exclude", "files.associations", "workbench.editor.enablePreview"], 115 | "extensionsEnabledWithApiProposalVersion": ["GitHub.copilot-chat", "ms-vscode.vscode-commander", "ms-vscode.vscode-copilot-vision"], 116 | "extensionEnabledApiProposals": { 117 | "ms-vscode.vscode-selfhost-test-provider": ["testObserver", "testRelatedCode", "attributableCoverage"], 118 | "VisualStudioExptTeam.vscodeintellicode-completions": ["inlineCompletionsAdditions"], 119 | "ms-toolsai.datawrangler": ["debugFocus"], 120 | "ms-vscode.vscode-commander": [], 121 | "ms-vscode.vscode-websearchforcopilot": [], 122 | "ms-vscode.vscode-copilot-data-analysis": ["chatVariableResolver", "chatProvider"], 123 | "ms-vscode.vscode-copilot-vision": ["chatReferenceBinaryData", "codeActionAI"], 124 | "ms-vsliveshare.vsliveshare": ["contribMenuBarHome", "contribShareMenu", "contribStatusBarItems", "diffCommand", "documentFiltersExclusive", "fileSearchProvider", "findTextInFiles", "notebookCellExecutionState", "notebookLiveShare", "terminalDimensions", "terminalDataWriteEvent", "textSearchProvider"], 125 | "ms-vscode.js-debug": ["portsAttributes", "findTextInFiles", "workspaceTrust", "tunnels"], 126 | "ms-toolsai.vscode-ai-remote": ["resolvers"], 127 | "ms-python.python": ["contribEditorContentMenu", "quickPickSortByLabel", "portsAttributes", "testObserver", "quickPickItemTooltip", "terminalDataWriteEvent", "terminalExecuteCommandEvent", "contribIssueReporter", "notebookReplDocument"], 128 | "ms-dotnettools.dotnet-interactive-vscode": ["notebookMessaging"], 129 | "GitHub.codespaces": ["contribEditSessions", "contribMenuBarHome", "contribRemoteHelp", "contribViewsRemote", "resolvers", "tunnels", "terminalDataWriteEvent", "treeViewReveal", "notebookKernelSource"], 130 | "ms-vscode.azure-repos": ["extensionRuntime", "fileSearchProvider", "textSearchProvider"], 131 | "ms-vscode.remote-repositories": ["canonicalUriProvider", "contribEditSessions", "contribRemoteHelp", "contribMenuBarHome", "contribViewsRemote", "contribViewsWelcome", "contribShareMenu", "documentFiltersExclusive", "editSessionIdentityProvider", "extensionRuntime", "fileSearchProvider", "quickPickSortByLabel", "workspaceTrust", "shareProvider", "scmActionButton", "scmSelectedProvider", "scmValidation", "textSearchProvider", "timeline"], 132 | "ms-vscode-remote.remote-wsl": ["resolvers", "contribRemoteHelp", "contribViewsRemote", "telemetry"], 133 | "ms-vscode-remote.remote-ssh": ["resolvers", "tunnels", "terminalDataWriteEvent", "contribRemoteHelp", "contribViewsRemote", "telemetry"], 134 | "ms-vscode.remote-server": ["resolvers", "tunnels", "contribViewsWelcome"], 135 | "ms-vscode.remote-explorer": ["contribRemoteHelp", "contribViewsRemote", "extensionsAny"], 136 | "ms-vscode-remote.remote-containers": ["contribEditSessions", "resolvers", "portsAttributes", "tunnels", "workspaceTrust", "terminalDimensions", "contribRemoteHelp", "contribViewsRemote"], 137 | "ms-vscode.js-debug-nightly": ["portsAttributes", "findTextInFiles", "workspaceTrust", "tunnels"], 138 | "ms-vscode.lsif-browser": ["documentFiltersExclusive"], 139 | "ms-vscode.vscode-speech": ["speech"], 140 | "GitHub.vscode-pull-request-github": ["activeComment", "codiconDecoration", "codeActionRanges", "commentingRangeHint", "commentReactor", "commentReveal", "commentThreadApplicability", "contribAccessibilityHelpContent", "contribCommentEditorActionsMenu", "contribCommentPeekContext", "contribCommentThreadAdditionalMenu", "contribCommentsViewThreadMenus", "contribEditorContentMenu", "contribMultiDiffEditorMenus", "contribShareMenu", "diffCommand", "fileComments", "quickDiffProvider", "shareProvider", "tabInputTextMerge", "tokenInformation", "treeViewMarkdownMessage"], 141 | "GitHub.copilot": ["inlineCompletionsAdditions"], 142 | "GitHub.copilot-nightly": ["inlineCompletionsAdditions"], 143 | "GitHub.copilot-chat": ["interactive", "terminalDataWriteEvent", "terminalExecuteCommandEvent", "terminalSelection", "terminalQuickFixProvider", "chatParticipantAdditions", "defaultChatParticipant", "embeddings", "chatEditing", "chatVariableResolver", "chatProvider", "mappedEditsProvider", "aiRelatedInformation", "codeActionAI", "findTextInFiles", "textSearchProvider", "textSearchProvider2", "activeComment", "commentReveal", "contribSourceControlInputBoxMenu", "contribCommentEditorActionsMenu", "contribCommentThreadAdditionalMenu", "contribCommentsViewThreadMenus", "newSymbolNamesProvider", "findFiles2", "extensionsAny", "authLearnMore", "testObserver", "aiTextSearchProvider", "documentFiltersExclusive", "chatParticipantPrivate", "contribDebugCreateConfiguration", "inlineEdit"], 144 | "GitHub.remotehub": ["contribRemoteHelp", "contribMenuBarHome", "contribViewsRemote", "contribViewsWelcome", "documentFiltersExclusive", "extensionRuntime", "fileSearchProvider", "quickPickSortByLabel", "workspaceTrust", "scmSelectedProvider", "scmValidation", "textSearchProvider", "timeline"], 145 | "ms-python.gather": ["notebookCellExecutionState"], 146 | "ms-python.vscode-pylance": ["notebookCellExecutionState"], 147 | "ms-python.debugpy": ["contribIssueReporter", "contribViewsWelcome", "debugVisualization", "portsAttributes"], 148 | "ms-toolsai.jupyter-renderers": ["contribNotebookStaticPreloads"], 149 | "ms-toolsai.jupyter": ["notebookDeprecated", "notebookMessaging", "notebookMime", "notebookCellExecutionState", "portsAttributes", "quickPickSortByLabel", "notebookKernelSource", "interactiveWindow", "notebookControllerAffinityHidden", "contribNotebookStaticPreloads", "quickPickItemTooltip", "notebookExecution", "notebookCellExecution", "notebookVariableProvider", "notebookReplDocument"], 150 | "dbaeumer.vscode-eslint": ["notebookCellExecutionState"], 151 | "ms-vscode.azure-sphere-tools-ui": ["tunnels"], 152 | "ms-azuretools.vscode-azureappservice": ["terminalDataWriteEvent"], 153 | "ms-azuretools.vscode-azure-github-copilot": ["lmTools"], 154 | "ms-vscode.anycode": ["extensionsAny"], 155 | "ms-vscode.cpptools": ["terminalDataWriteEvent", "lmTools"], 156 | "redhat.java": ["documentPaste"], 157 | "vscjava.vscode-java-pack": ["lmTools"], 158 | "ms-dotnettools.csdevkit": ["inlineCompletionsAdditions"], 159 | "ms-dotnettools.vscodeintellicode-csharp": ["inlineCompletionsAdditions"], 160 | "microsoft-IsvExpTools.powerplatform-vscode": ["fileSearchProvider", "textSearchProvider"], 161 | "microsoft-IsvExpTools.powerplatform-vscode-preview": ["fileSearchProvider", "textSearchProvider"], 162 | "TeamsDevApp.ms-teams-vscode-extension": ["chatParticipantAdditions", "languageModelSystem"], 163 | "apidev.azure-api-center": ["chatParticipant", "languageModels"], 164 | "jeanp413.open-remote-ssh": ["resolvers", "tunnels", "terminalDataWriteEvent", "contribRemoteHelp", "contribViewsRemote", "telemetry", "cursor"] 165 | }, 166 | "builtInExtensions": [{ 167 | "name": "ms-vscode.js-debug-companion", 168 | "version": "1.1.3", 169 | "repo": "https://github.com/microsoft/vscode-js-debug-companion", 170 | "sha256": "7380a890787452f14b2db7835dfa94de538caf358ebc263f9d46dd68ac52de93", 171 | "metadata": { 172 | "id": "99cb0b7f-7354-4278-b8da-6cc79972169d", 173 | "publisherId": { 174 | "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", 175 | "publisherName": "ms-vscode", 176 | "displayName": "Microsoft", 177 | "flags": "verified" 178 | }, 179 | "publisherDisplayName": "Microsoft" 180 | } 181 | }, { 182 | "name": "ms-vscode.js-debug", 183 | "version": "1.93.0", 184 | "sha256": "9339cb8e6b77f554df54d79e71f533279cb76b0f9b04c207f633bfd507442b6a", 185 | "repo": "https://github.com/microsoft/vscode-js-debug", 186 | "metadata": { 187 | "id": "25629058-ddac-4e17-abba-74678e126c5d", 188 | "publisherId": { 189 | "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", 190 | "publisherName": "ms-vscode", 191 | "displayName": "Microsoft", 192 | "flags": "verified" 193 | }, 194 | "publisherDisplayName": "Microsoft" 195 | } 196 | }, { 197 | "name": "ms-vscode.vscode-js-profile-table", 198 | "version": "1.0.9", 199 | "sha256": "3b62ee4276a2bbea3fe230f94b1d5edd915b05966090ea56f882e1e0ab53e1a6", 200 | "repo": "https://github.com/microsoft/vscode-js-profile-visualizer", 201 | "metadata": { 202 | "id": "7e52b41b-71ad-457b-ab7e-0620f1fc4feb", 203 | "publisherId": { 204 | "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee", 205 | "publisherName": "ms-vscode", 206 | "displayName": "Microsoft", 207 | "flags": "verified" 208 | }, 209 | "publisherDisplayName": "Microsoft" 210 | } 211 | }], 212 | "nameShort": "Cursor", 213 | "nameLong": "Cursor", 214 | "applicationName": "cursor", 215 | "dataFolderName": ".cursor", 216 | "win32MutexName": "cursor", 217 | "win32DirName": "cursor", 218 | "win32NameVersion": "Cursor", 219 | "win32RegValueName": "Cursor", 220 | "win32AppUserModelId": "Anysphere.Cursor", 221 | "win32ShellNameShort": "C&ursor", 222 | "darwinBundleIdentifier": "com.todesktop.230313mzl4w4u92", 223 | "linuxIconName": "co.anysphere.cursor", 224 | "todesktopId": "230313mzl4w4u92", 225 | "todesktopAppId": "com.todesktop.230313mzl4w4u92", 226 | "urlProtocol": "cursor", 227 | "commitLastCharacter": "0", 228 | "extensionsGallery": { 229 | "galleryId": "cursor", 230 | "serviceUrl": "https://marketplace.cursorapi.com/_apis/public/gallery", 231 | "itemUrl": "https://marketplace.cursorapi.com/items", 232 | "resourceUrlTemplate": "https://marketplace.cursorapi.com/{publisher}/{name}/{version}/{path}", 233 | "controlUrl": "https://api2.cursor.sh/extensions-control", 234 | "extensionUrlTemplate": "https://www.vscode-unpkg.net/_gallery/{publisher}/{name}/latest", 235 | "recommendationsUrl": "", 236 | "nlsBaseUrl": "", 237 | "publisherUrl": "" 238 | }, 239 | "extensionRecommendations": { 240 | "ms-python.python": { 241 | "onFileOpen": [{ 242 | "pathGlob": "{**/*.py}", 243 | "important": true 244 | }, { 245 | "languages": ["python"], 246 | "important": true 247 | }, { 248 | "pathGlob": "{**/*.ipynb}" 249 | }] 250 | }, 251 | "ms-toolsai.jupyter": { 252 | "onFileOpen": [{ 253 | "pathGlob": "{**/*.py}", 254 | "contentPattern": "^#\\s*%%$", 255 | "important": true, 256 | "whenInstalled": ["ms-python.python"] 257 | }, { 258 | "pathGlob": "{**/*.ipynb}" 259 | }] 260 | }, 261 | "golang.Go": { 262 | "onFileOpen": [{ 263 | "pathGlob": "**/*.go", 264 | "important": true 265 | }, { 266 | "languages": ["go"], 267 | "important": true 268 | }] 269 | }, 270 | "vscjava.vscode-java-pack": { 271 | "onFileOpen": [{ 272 | "pathGlob": "{**/*.java}", 273 | "important": true, 274 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 275 | }, { 276 | "languages": ["java"], 277 | "important": true, 278 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 279 | }] 280 | }, 281 | "ms-vscode.PowerShell": { 282 | "onFileOpen": [{ 283 | "pathGlob": "{**/*.ps1,**/*.psd1,**/*.psm1}", 284 | "important": true 285 | }, { 286 | "languages": ["powershell"], 287 | "important": true 288 | }, { 289 | "pathGlob": "{**/*.ps.config,**/*.ps1.config}" 290 | }] 291 | }, 292 | "ms-toolsai.prompty": { 293 | "onFileOpen": [{ 294 | "pathGlob": "{**/*.prompty}", 295 | "important": false 296 | }] 297 | }, 298 | "ms-vscode.cpptools-extension-pack": { 299 | "onFileOpen": [{ 300 | "pathGlob": "{**/*.c,**/*.cpp,**/*.cc,**/.cxx,**/*.hh,**/*.hpp,**/*.hxx,**/*.h}", 301 | "important": true, 302 | "whenNotInstalled": ["llvm-vs-code-extensions.vscode-clangd"] 303 | }, { 304 | "languages": ["c", "cpp"], 305 | "important": true, 306 | "whenNotInstalled": ["llvm-vs-code-extensions.vscode-clangd"] 307 | }] 308 | }, 309 | "ms-azuretools.vscode-docker": { 310 | "onFileOpen": [{ 311 | "pathGlob": "{**/dockerfile,**/Dockerfile,**/docker-compose.yml,**/docker-compose.*.yml}", 312 | "important": true 313 | }, { 314 | "languages": ["dockerfile"], 315 | "important": true 316 | }, { 317 | "pathGlob": "{**/*.cs,**/project.json,**/global.json,**/*.csproj,**/*.cshtml,**/*.sln,**/appsettings.json,**/*.py,**/*.ipynb,**/*.js,**/*.ts,**/package.json}" 318 | }] 319 | }, 320 | "vue.volar": { 321 | "onFileOpen": [{ 322 | "pathGlob": "{**/*.vue}", 323 | "important": true 324 | }, { 325 | "languages": ["vue"], 326 | "important": true 327 | }] 328 | }, 329 | "ms-vscode.makefile-tools": { 330 | "onFileOpen": [{ 331 | "pathGlob": "{**/makefile,**/Makefile}", 332 | "important": true 333 | }, { 334 | "languages": ["makefile"], 335 | "important": true 336 | }] 337 | }, 338 | "ms-vscode.cmake-tools": { 339 | "onFileOpen": [{ 340 | "pathGlob": "{**/CMakeLists.txt}", 341 | "important": true 342 | }] 343 | }, 344 | "ms-azure-devops.azure-pipelines": { 345 | "onFileOpen": [{ 346 | "pathGlob": "{**/azure-pipelines.yaml}", 347 | "important": true 348 | }] 349 | }, 350 | "msazurermtools.azurerm-vscode-tools": { 351 | "onFileOpen": [{ 352 | "pathGlob": "{**/azuredeploy.json}", 353 | "important": true 354 | }] 355 | }, 356 | "ms-vscode-remote.remote-containers": { 357 | "onFileOpen": [{ 358 | "pathGlob": "{**/devcontainer.json}", 359 | "important": true 360 | }] 361 | }, 362 | "ms-azuretools.vscode-bicep": { 363 | "onFileOpen": [{ 364 | "pathGlob": "{**/*.bicep}", 365 | "important": true, 366 | "whenNotInstalled": ["ms-azuretools.rad-vscode-bicep"] 367 | }] 368 | }, 369 | "svelte.svelte-vscode": { 370 | "onFileOpen": [{ 371 | "pathGlob": "{**/*.svelte}", 372 | "important": true 373 | }] 374 | }, 375 | "ms-vscode.vscode-github-issue-notebooks": { 376 | "onFileOpen": [{ 377 | "pathGlob": "{**/*.github-issues}", 378 | "important": true 379 | }] 380 | }, 381 | "ms-playwright.playwright": { 382 | "onFileOpen": [{ 383 | "pathGlob": "{**/*playwright*.config.ts,**/*playwright*.config.js,**/*playwright*.config.mjs}", 384 | "important": true 385 | }] 386 | }, 387 | "vscjava.vscode-gradle": { 388 | "onFileOpen": [{ 389 | "pathGlob": "{**/gradlew,**/gradlew.bat,**/build.gradle,**/build.gradle.kts,**/settings.gradle,**/settings.gradle.kts}", 390 | "important": true 391 | }] 392 | }, 393 | "REditorSupport.r": { 394 | "onFileOpen": [{ 395 | "pathGlob": "{**/*.r}", 396 | "important": true 397 | }, { 398 | "languages": ["r"], 399 | "important": true 400 | }] 401 | }, 402 | "firefox-devtools.vscode-firefox-debug": { 403 | "onFileOpen": [{ 404 | "pathGlob": "{**/*.ts,**/*.tsx,**/*.js,**/*.jsx,**/*.es6,**/.babelrc}" 405 | }] 406 | }, 407 | "ms-edgedevtools.vscode-edge-devtools": { 408 | "onFileOpen": [{ 409 | "pathGlob": "{**/*.ts,**/*.tsx,**/*.js,**/*.css,**/*.html}" 410 | }] 411 | }, 412 | "Ionide.Ionide-fsharp": { 413 | "onFileOpen": [{ 414 | "pathGlob": "{**/*.fsx,**/*.fsi,**/*.fs,**/*.ml,**/*.mli}" 415 | }] 416 | }, 417 | "dbaeumer.vscode-eslint": { 418 | "onFileOpen": [{ 419 | "pathGlob": "{**/*.js,**/*.jsx,**/*.es6,**/.eslintrc.*,**/.eslintrc,**/.babelrc,**/jsconfig.json}" 420 | }] 421 | }, 422 | "bmewburn.vscode-intelephense-client": { 423 | "onFileOpen": [{ 424 | "pathGlob": "{**/*.php,**/php.ini}" 425 | }] 426 | }, 427 | "xdebug.php-debug": { 428 | "onFileOpen": [{ 429 | "pathGlob": "{**/*.php,**/php.ini}" 430 | }] 431 | }, 432 | "rust-lang.rust-analyzer": { 433 | "onFileOpen": [{ 434 | "pathGlob": "{**/*.rs,**/*.rslib}" 435 | }] 436 | }, 437 | "DavidAnson.vscode-markdownlint": { 438 | "onFileOpen": [{ 439 | "pathGlob": "{**/*.md}" 440 | }] 441 | }, 442 | "EditorConfig.EditorConfig": { 443 | "onFileOpen": [{ 444 | "pathGlob": "{**/.editorconfig}" 445 | }] 446 | }, 447 | "HookyQR.beautify": { 448 | "onFileOpen": [{ 449 | "pathGlob": "{**/.jsbeautifyrc}" 450 | }] 451 | }, 452 | "donjayamanne.githistory": { 453 | "onFileOpen": [{ 454 | "pathGlob": "{**/.gitignore,**/.git}" 455 | }] 456 | }, 457 | "eamodio.gitlens": { 458 | "onFileOpen": [{ 459 | "pathGlob": "{**/.gitignore,**/.git}" 460 | }] 461 | }, 462 | "Shopify.ruby-lsp": { 463 | "onFileOpen": [{ 464 | "pathGlob": "{**/*.rb,**/*.erb,**/*.reek,**/.fasterer.yml,**/ruby-lint.yml,**/.rubocop.yml}" 465 | }] 466 | }, 467 | "DotJoshJohnson.xml": { 468 | "onFileOpen": [{ 469 | "pathGlob": "{**/*.xml}" 470 | }] 471 | }, 472 | "stylelint.vscode-stylelint": { 473 | "onFileOpen": [{ 474 | "pathGlob": "{**/.stylelintrc,**/stylelint.config.js}" 475 | }] 476 | }, 477 | "ms-mssql.mssql": { 478 | "onFileOpen": [{ 479 | "pathGlob": "{**/*.sql}" 480 | }] 481 | }, 482 | "mtxr.sqltools": { 483 | "onFileOpen": [{ 484 | "pathGlob": "{**/*.sql}" 485 | }] 486 | }, 487 | "usqlextpublisher.usql-vscode-ext": { 488 | "onFileOpen": [{ 489 | "pathGlob": "{**/*.usql}" 490 | }] 491 | }, 492 | "ms-vscode.sublime-keybindings": { 493 | "onFileOpen": [{ 494 | "pathGlob": "{**/.sublime-project,**/.sublime-workspace}" 495 | }] 496 | }, 497 | "k--kato.intellij-idea-keybindings": { 498 | "onFileOpen": [{ 499 | "pathGlob": "{**/.idea}" 500 | }] 501 | }, 502 | "christian-kohler.npm-intellisense": { 503 | "onFileOpen": [{ 504 | "pathGlob": "{**/package.json}" 505 | }] 506 | }, 507 | "cake-build.cake-vscode": { 508 | "onFileOpen": [{ 509 | "pathGlob": "{**/build.cake}" 510 | }] 511 | }, 512 | "Angular.ng-template": { 513 | "onFileOpen": [{ 514 | "pathGlob": "{**/.angular-cli.json,**/angular.json,**/*.ng.html,**/*.ng,**/*.ngml}" 515 | }] 516 | }, 517 | "vscjava.vscode-maven": { 518 | "onFileOpen": [{ 519 | "pathGlob": "**/pom.xml" 520 | }] 521 | }, 522 | "ms-azuretools.vscode-azureterraform": { 523 | "onFileOpen": [{ 524 | "pathGlob": "**/*.tf" 525 | }] 526 | }, 527 | "HashiCorp.terraform": { 528 | "onFileOpen": [{ 529 | "pathGlob": "**/*.tf" 530 | }] 531 | }, 532 | "vsciot-vscode.vscode-arduino": { 533 | "onFileOpen": [{ 534 | "pathGlob": "**/*.ino" 535 | }] 536 | }, 537 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 538 | "onFileOpen": [{ 539 | "pathGlob": "{**/Chart.yaml}" 540 | }] 541 | }, 542 | "Oracle.oracledevtools": { 543 | "onFileOpen": [{ 544 | "pathGlob": "{**/*.sql}" 545 | }] 546 | }, 547 | "betterthantomorrow.calva": { 548 | "onFileOpen": [{ 549 | "pathGlob": "{**/*.clj,**/*.cljs}" 550 | }] 551 | }, 552 | "vmware.vscode-boot-dev-pack": { 553 | "onFileOpen": [{ 554 | "pathGlob": "{**/application.properties}" 555 | }] 556 | }, 557 | "GitHub.vscode-github-actions": { 558 | "onFileOpen": [{ 559 | "pathGlob": "{**/.github/workflows/*.yml}", 560 | "important": true 561 | }] 562 | }, 563 | "circleci.circleci": { 564 | "onFileOpen": [{ 565 | "pathGlob": "{**/.circleci/config.yml}" 566 | }] 567 | }, 568 | "mechatroner.rainbow-csv": { 569 | "onFileOpen": [{ 570 | "pathGlob": "**/*.csv", 571 | "important": true 572 | }] 573 | }, 574 | "tomoki1207.pdf": { 575 | "onFileOpen": [{ 576 | "pathGlob": "**/*.pdf", 577 | "important": true 578 | }] 579 | }, 580 | "Redis.redis-for-vscode": { 581 | "onFileOpen": [{ 582 | "pathGlob": "{**/redis.*,**/redis-server.*,**/redis_*,**/redisinsight.*}" 583 | }] 584 | } 585 | }, 586 | "extensionVirtualWorkspacesSupport": { 587 | "esbenp.prettier-vscode": { 588 | "default": false 589 | }, 590 | "msjsdiag.debugger-for-chrome": { 591 | "default": false 592 | }, 593 | "redhat.java": { 594 | "default": false 595 | }, 596 | "HookyQR.beautify": { 597 | "default": false 598 | }, 599 | "ritwickdey.LiveServer": { 600 | "default": false 601 | }, 602 | "VisualStudioExptTeam.vscodeintellicode": { 603 | "default": false 604 | }, 605 | "octref.vetur": { 606 | "default": false 607 | }, 608 | "formulahendry.code-runner": { 609 | "default": false 610 | }, 611 | "xdebug.php-debug": { 612 | "default": false 613 | }, 614 | "ms-mssql.mssql": { 615 | "default": false 616 | }, 617 | "christian-kohler.path-intellisense": { 618 | "default": false 619 | }, 620 | "eg2.tslint": { 621 | "default": false 622 | }, 623 | "eg2.vscode-npm-script": { 624 | "default": false 625 | }, 626 | "donjayamanne.githistory": { 627 | "default": false 628 | }, 629 | "Zignd.html-css-class-completion": { 630 | "default": false 631 | }, 632 | "christian-kohler.npm-intellisense": { 633 | "default": false 634 | }, 635 | "EditorConfig.EditorConfig": { 636 | "default": false 637 | }, 638 | "austin.code-gnu-global": { 639 | "default": false 640 | }, 641 | "johnpapa.Angular2": { 642 | "default": false 643 | }, 644 | "ms-vscode.vscode-typescript-tslint-plugin": { 645 | "default": false 646 | }, 647 | "DotJoshJohnson.xml": { 648 | "default": false 649 | }, 650 | "techer.open-in-browser": { 651 | "default": false 652 | }, 653 | "tht13.python": { 654 | "default": false 655 | }, 656 | "bmewburn.vscode-intelephense-client": { 657 | "default": false 658 | }, 659 | "Angular.ng-template": { 660 | "default": false 661 | }, 662 | "xdebug.php-pack": { 663 | "default": false 664 | }, 665 | "dbaeumer.jshint": { 666 | "default": false 667 | }, 668 | "yzhang.markdown-all-in-one": { 669 | "default": false 670 | }, 671 | "Dart-Code.flutter": { 672 | "default": false 673 | }, 674 | "streetsidesoftware.code-spell-checker": { 675 | "default": false 676 | }, 677 | "rebornix.Ruby": { 678 | "default": false 679 | }, 680 | "ms-vscode.sublime-keybindings": { 681 | "default": false 682 | }, 683 | "mitaki28.vscode-clang": { 684 | "default": false 685 | }, 686 | "steoates.autoimport": { 687 | "default": false 688 | }, 689 | "donjayamanne.python-extension-pack": { 690 | "default": false 691 | }, 692 | "shd101wyy.markdown-preview-enhanced": { 693 | "default": false 694 | }, 695 | "mikestead.dotenv": { 696 | "default": false 697 | }, 698 | "pranaygp.vscode-css-peek": { 699 | "default": false 700 | }, 701 | "ikappas.phpcs": { 702 | "default": false 703 | }, 704 | "platformio.platformio-ide": { 705 | "default": false 706 | }, 707 | "jchannon.csharpextensions": { 708 | "default": false 709 | }, 710 | "gruntfuggly.todo-tree": { 711 | "default": false 712 | } 713 | }, 714 | "extensionSyncedKeys": { 715 | "ritwickdey.liveserver": ["liveServer.setup.version"] 716 | }, 717 | "extensionKind": { 718 | "Shan.code-settings-sync": ["ui"], 719 | "shalldie.background": ["ui"], 720 | "techer.open-in-browser": ["ui"], 721 | "CoenraadS.bracket-pair-colorizer-2": ["ui"], 722 | "CoenraadS.bracket-pair-colorizer": ["ui", "workspace"], 723 | "hiro-sun.vscode-emacs": ["ui", "workspace"], 724 | "hnw.vscode-auto-open-markdown-preview": ["ui", "workspace"], 725 | "wayou.vscode-todo-highlight": ["ui", "workspace"], 726 | "aaron-bond.better-comments": ["ui", "workspace"], 727 | "vscodevim.vim": ["ui"], 728 | "ollyhayes.colmak-vim": ["ui"] 729 | }, 730 | "extensionPointExtensionKind": { 731 | "typescriptServerPlugins": ["workspace"] 732 | }, 733 | "extensionAllowedBadgeProvidersRegex": ["^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/(actions\\/)?workflows\\/.*badge\\.svg"], 734 | "extensionAllowedBadgeProviders": ["api.bintray.com", "api.travis-ci.com", "api.travis-ci.org", "app.fossa.io", "badge.buildkite.com", "badge.fury.io", "badge.waffle.io", "badgen.net", "badges.frapsoft.com", "badges.gitter.im", "badges.greenkeeper.io", "cdn.travis-ci.com", "cdn.travis-ci.org", "ci.appveyor.com", "circleci.com", "cla.opensource.microsoft.com", "codacy.com", "codeclimate.com", "codecov.io", "coveralls.io", "david-dm.org", "deepscan.io", "dev.azure.com", "docs.rs", "flat.badgen.net", "gemnasium.com", "githost.io", "gitlab.com", "godoc.org", "goreportcard.com", "img.shields.io", "isitmaintained.com", "marketplace.visualstudio.com", "nodesecurity.io", "opencollective.com", "snyk.io", "travis-ci.com", "travis-ci.org", "visualstudio.com", "vsmarketplacebadge.apphb.com", "www.bithound.io", "www.versioneye.com"], 735 | "extensionKeywords": { 736 | "md": ["Markdown"], 737 | "js": ["JavaScript"], 738 | "jsx": ["JavaScript"], 739 | "es6": ["JavaScript"], 740 | "html": ["Html"], 741 | "ts": ["TypeScript"], 742 | "tsx": ["TypeScript"], 743 | "css": ["CSS"], 744 | "scss": ["SASS"], 745 | "txt": ["Text"], 746 | "php": ["PHP"], 747 | "php3": ["PHP"], 748 | "php4": ["PHP"], 749 | "ph3": ["PHP"], 750 | "ph4": ["PHP"], 751 | "xml": ["XML"], 752 | "py": ["Python"], 753 | "pyc": ["Python"], 754 | "pyd": ["Python"], 755 | "pyo": ["Python"], 756 | "pyw": ["Python"], 757 | "pyz": ["Python"], 758 | "java": ["Java"], 759 | "class": ["Java"], 760 | "jar": ["Java"], 761 | "c": ["c", "objective c", "objective-c"], 762 | "m": ["objective c", "objective-c"], 763 | "mm": ["objective c", "objective-c"], 764 | "cpp": ["cpp", "c plus plus", "c", "c++"], 765 | "cc": ["cpp", "c plus plus", "c", "c++"], 766 | "cxx": ["cpp", "c plus plus", "c++"], 767 | "hh": ["cpp", "c plus plus", "c++"], 768 | "hpp": ["cpp", "c++"], 769 | "h": ["cpp", "c plus plus", "c++", "c", "objective c", "objective-c"], 770 | "sql": ["sql"], 771 | "sh": ["bash"], 772 | "bash": ["bash"], 773 | "zsh": ["bash", "zshell"], 774 | "cs": ["c#", "csharp"], 775 | "csproj": ["c#", "csharp"], 776 | "sln": ["c#", "csharp"], 777 | "go": ["go"], 778 | "sty": ["latex"], 779 | "tex": ["latex"], 780 | "ps": ["powershell"], 781 | "ps1": ["powershell"], 782 | "rs": ["rust"], 783 | "rslib": ["rust"], 784 | "hs": ["haskell"], 785 | "lhs": ["haskell"], 786 | "scm": ["scheme"], 787 | "ss": ["scheme"], 788 | "clj": ["clojure"], 789 | "cljs": ["clojure"], 790 | "cljc": ["clojure"], 791 | "edn": ["clojure"], 792 | "erl": ["erlang"], 793 | "hrl": ["erlang"], 794 | "scala": ["scala"], 795 | "sc": ["scala"], 796 | "pl": ["perl"], 797 | "pm": ["perl"], 798 | "t": ["perl"], 799 | "pod": ["perl"], 800 | "groovy": ["groovy"], 801 | "swift": ["swift"], 802 | "rb": ["ruby"], 803 | "rbw": ["ruby"], 804 | "jl": ["julia"], 805 | "f": ["fortran"], 806 | "for": ["fortran"], 807 | "f90": ["fortran"], 808 | "f95": ["fortran"], 809 | "coffee": ["CoffeeScript"], 810 | "litcoffee": ["CoffeeScript"], 811 | "yaml": ["yaml"], 812 | "yml": ["yaml"], 813 | "dart": ["dart"], 814 | "json": ["json"] 815 | }, 816 | "remoteExtensionTips": { 817 | "wsl": { 818 | "friendlyName": "WSL", 819 | "extensionId": "ms-vscode-remote.remote-wsl", 820 | "supportedPlatforms": ["Windows", "Web"], 821 | "startEntry": { 822 | "helpLink": "https://aka.ms/vscode-remote/wsl", 823 | "startConnectLabel": "WSL", 824 | "startCommand": "remote-wsl.connect", 825 | "priority": 3 826 | } 827 | }, 828 | "ssh-remote": { 829 | "friendlyName": "Remote - SSH", 830 | "extensionId": "ms-vscode-remote.remote-ssh", 831 | "supportedPlatforms": ["Windows", "Linux", "Mac"], 832 | "startEntry": { 833 | "helpLink": "https://aka.ms/vscode-remote/ssh", 834 | "startConnectLabel": "SSH ", 835 | "startCommand": "opensshremotes.openEmptyWindowInCurrentWindow", 836 | "priority": 1 837 | } 838 | }, 839 | "open-ssh-remote": { 840 | "friendlyName": "Open Remote SSH", 841 | "extensionId": "jeanp413.open-remote-ssh", 842 | "supportedPlatforms": ["Windows", "Linux", "Mac"], 843 | "startEntry": { 844 | "helpLink": "https://github.com/jeanp413/open-remote-ssh", 845 | "startConnectLabel": "Open Remote SSH", 846 | "startCommand": "openremotessh.openEmptyWindowInCurrentWindow", 847 | "priority": 0 848 | } 849 | }, 850 | "dev-container": { 851 | "friendlyName": "Dev Containers", 852 | "extensionId": "ms-vscode-remote.remote-containers", 853 | "supportedPlatforms": ["Windows", "Linux", "Mac"], 854 | "startEntry": { 855 | "helpLink": "https://aka.ms/vscode-remote/containers", 856 | "startConnectLabel": "Dev Container", 857 | "startCommand": "remote-containers.reopenInContainer", 858 | "priority": 2 859 | } 860 | }, 861 | "attached-container": { 862 | "friendlyName": "Dev Containers", 863 | "extensionId": "ms-vscode-remote.remote-containers" 864 | }, 865 | "codespaces": { 866 | "friendlyName": "GitHub Codespaces", 867 | "extensionId": "github.codespaces", 868 | "startEntry": { 869 | "helpLink": "https://aka.ms/vscode-remote-codespaces", 870 | "startConnectLabel": "GitHub Codespace ", 871 | "startCommand": "github.codespaces.connect", 872 | "priority": 4 873 | } 874 | }, 875 | "tunnel": { 876 | "friendlyName": "Remote - Tunnels", 877 | "extensionId": "ms-vscode.remote-server", 878 | "startEntry": { 879 | "helpLink": "https://aka.ms/remote-tunnels-doc", 880 | "startConnectLabel": "Tunnel", 881 | "startCommand": "remote-tunnels.connectCurrentWindowToTunnel", 882 | "priority": 0 883 | } 884 | } 885 | }, 886 | "virtualWorkspaceExtensionTips": { 887 | "vscode-vfs": { 888 | "friendlyName": "Remote Repositories", 889 | "extensionId": "ms-vscode.remote-repositories", 890 | "startEntry": { 891 | "helpLink": "https://aka.ms/vscode-remote/remote-repositories", 892 | "startConnectLabel": "Remote Repository", 893 | "startCommand": "remoteHub.continueOn.openRepository", 894 | "priority": 5 895 | } 896 | } 897 | }, 898 | "webExtensionTips": ["tyriar.luna-paint", "codespaces-contrib.codeswing", "ms-vscode.vscode-github-issue-notebooks", "esbenp.prettier-vscode", "hediet.vscode-drawio"], 899 | "configBasedExtensionTips": { 900 | "git": { 901 | "configPath": ".git/config", 902 | "configName": "Git", 903 | "recommendations": { 904 | "github.vscode-pull-request-github": { 905 | "name": "GitHub Pull Request", 906 | "contentPattern": "^\\s*url\\s*=\\s*https:\\/\\/github\\.com.*$" 907 | }, 908 | "eamodio.gitlens": { 909 | "name": "GitLens" 910 | } 911 | } 912 | }, 913 | "devContainer": { 914 | "configPath": ".devcontainer/devcontainer.json", 915 | "configName": "Dev Container", 916 | "recommendations": { 917 | "ms-vscode-remote.remote-containers": { 918 | "name": "Dev Containers", 919 | "important": true 920 | } 921 | } 922 | }, 923 | "maven": { 924 | "configPath": "pom.xml", 925 | "configName": "Maven", 926 | "recommendations": { 927 | "vscjava.vscode-java-pack": { 928 | "name": "Java", 929 | "important": true, 930 | "isExtensionPack": true, 931 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 932 | }, 933 | "vmware.vscode-boot-dev-pack": { 934 | "name": "Spring Boot Extension Pack", 935 | "isExtensionPack": true 936 | } 937 | } 938 | }, 939 | "gradle": { 940 | "configPath": "build.gradle", 941 | "configName": "Gradle", 942 | "recommendations": { 943 | "vscjava.vscode-java-pack": { 944 | "name": "Java", 945 | "important": true, 946 | "isExtensionPack": true, 947 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 948 | } 949 | } 950 | }, 951 | "github-pull-request": { 952 | "configPath": ".vscode/.github-pull-request.rec", 953 | "configName": "GitHub", 954 | "configScheme": "vscode-vfs", 955 | "recommendations": { 956 | "github.vscode-pull-request-github": { 957 | "name": "GitHub Pull Request", 958 | "important": true 959 | } 960 | } 961 | }, 962 | "pyproject-formatter": { 963 | "configPath": "pyproject.toml", 964 | "configName": "Python Formatter", 965 | "recommendations": { 966 | "ms-python.black-formatter": { 967 | "name": "Black Formatter", 968 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?black\"?\\s*[\\].])|(\"black\\s*[\"[(<=>!~;@])" 969 | }, 970 | "ms-python.autopep8": { 971 | "name": "Autopep8", 972 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?autopep8\"?\\s*[\\].])|(\"autopep8\\s*[\"[(<=>!~;@])" 973 | } 974 | } 975 | }, 976 | "pep8-formatter": { 977 | "configPath": ".pep8", 978 | "configName": "Python Formatter", 979 | "recommendations": { 980 | "ms-python.autopep8": { 981 | "name": "Autopep8" 982 | } 983 | } 984 | }, 985 | "python-setup-cgf-formatter": { 986 | "configPath": "setup.cfg", 987 | "configName": "Python Formatter", 988 | "recommendations": { 989 | "ms-python.autopep8": { 990 | "name": "Autopep8", 991 | "contentPattern": "^\\[pep8\\]" 992 | } 993 | } 994 | }, 995 | "tox-ini-formatter": { 996 | "configPath": "tox.ini", 997 | "configName": "Python Formatter", 998 | "recommendations": { 999 | "ms-python.autopep8": { 1000 | "name": "Autopep8", 1001 | "contentPattern": "^\\[pep8\\]" 1002 | } 1003 | } 1004 | }, 1005 | "pyproject-linter": { 1006 | "configPath": "pyproject.toml", 1007 | "configName": "Python Linter", 1008 | "recommendations": { 1009 | "ms-python.pylint": { 1010 | "name": "Pylint", 1011 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?pylint\"?\\s*[\\].])|(\"pylint\\s*[\"[(<=>!~;@])" 1012 | }, 1013 | "charliermarsh.ruff": { 1014 | "name": "Ruff", 1015 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?ruff\"?\\s*[\\].])|(\"ruff\\s*[\"[(<=>!~;@])" 1016 | }, 1017 | "ms-python.mypy-type-checker": { 1018 | "name": "Mypy Type Checker", 1019 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?mypy\"?\\s*[\\].])|(\"mypy\\s*[\"[(<=>!~;@])" 1020 | }, 1021 | "ms-python.flake8": { 1022 | "name": "Flake8", 1023 | "contentPattern": "(^\\s*\\[\\[?\\s*\"?tool\"?\\s*\\.\\s*\"?flake8\"?\\s*[\\].])|(\"flake8\\s*[\"[(<=>!~;@])" 1024 | } 1025 | } 1026 | }, 1027 | ".pylintrc-linter": { 1028 | "configPath": ".pylintrc", 1029 | "configName": "Python Linter", 1030 | "recommendations": { 1031 | "ms-python.pylint": { 1032 | "name": "Pylint" 1033 | } 1034 | } 1035 | }, 1036 | "pylintrc-linter": { 1037 | "configPath": "pylintrc", 1038 | "configName": "Python Linter", 1039 | "recommendations": { 1040 | "ms-python.pylint": { 1041 | "name": "Pylint" 1042 | } 1043 | } 1044 | }, 1045 | "mypy-ini-linter": { 1046 | "configPath": ".mypy.ini", 1047 | "configName": "Python Linter", 1048 | "recommendations": { 1049 | "ms-python.mypy-type-checker": { 1050 | "name": "Mypy Type Checker" 1051 | } 1052 | } 1053 | }, 1054 | "tox-ini-linter": { 1055 | "configPath": "tox.ini", 1056 | "configName": "Python Linter", 1057 | "recommendations": { 1058 | "ms-python.flake8": { 1059 | "name": "Flake8", 1060 | "contentPattern": "^\\[flake8\\]" 1061 | } 1062 | } 1063 | }, 1064 | ".flake8-linter": { 1065 | "configPath": ".flake8", 1066 | "configName": "Python Linter", 1067 | "recommendations": { 1068 | "ms-python.flake8": { 1069 | "name": "Flake8" 1070 | } 1071 | } 1072 | }, 1073 | "python-setup-cgf-linter": { 1074 | "configPath": "setup.cfg", 1075 | "configName": "Python Linter", 1076 | "recommendations": { 1077 | "ms-python.flake8": { 1078 | "name": "Flake8", 1079 | "contentPattern": "^\\[flake8\\]" 1080 | } 1081 | } 1082 | } 1083 | }, 1084 | "exeBasedExtensionTips": { 1085 | "az": { 1086 | "friendlyName": "Azure CLI", 1087 | "windowsPath": "%ProgramFiles(x86)%\\Microsoft SDKs\\Azure\\CLI2\\wbin\\az.cmd", 1088 | "recommendations": { 1089 | "ms-vscode.vscode-node-azure-pack": { 1090 | "name": "Azure Tools" 1091 | }, 1092 | "ms-azuretools.vscode-azure-github-copilot": { 1093 | "name": "GitHub Copilot for Azure" 1094 | } 1095 | } 1096 | }, 1097 | "azd": { 1098 | "friendlyName": "Azure Dev CLI", 1099 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Programs\\Azure Dev CLI\\azd.exe", 1100 | "recommendations": { 1101 | "ms-vscode.vscode-node-azure-pack": { 1102 | "name": "Azure Tools" 1103 | }, 1104 | "ms-azuretools.vscode-azure-github-copilot": { 1105 | "name": "GitHub Copilot for Azure" 1106 | } 1107 | } 1108 | }, 1109 | "azd-user": { 1110 | "friendlyName": "Azure Dev CLI", 1111 | "windowsPath": "%ProgramFiles%\\Azure Dev CLI\\azd.exe", 1112 | "recommendations": { 1113 | "ms-vscode.vscode-node-azure-pack": { 1114 | "name": "Azure Tools" 1115 | }, 1116 | "ms-azuretools.vscode-azure-github-copilot": { 1117 | "name": "GitHub Copilot for Azure" 1118 | } 1119 | } 1120 | }, 1121 | "heroku": { 1122 | "friendlyName": "Heroku CLI", 1123 | "windowsPath": "%ProgramFiles%\\Heroku\\bin\\heroku.cmd", 1124 | "recommendations": { 1125 | "ms-azuretools.vscode-azureappservice": { 1126 | "name": "Azure App Service" 1127 | }, 1128 | "pkosta2005.heroku-command": { 1129 | "name": "heroku-cli" 1130 | } 1131 | } 1132 | }, 1133 | "mongo": { 1134 | "friendlyName": "Mongo", 1135 | "windowsPath": "%ProgramFiles%\\MongoDB\\Server\\3.6\\bin\\mongod.exe", 1136 | "recommendations": { 1137 | "ms-azuretools.vscode-cosmosdb": { 1138 | "name": "Azure Databases" 1139 | } 1140 | } 1141 | }, 1142 | "serverless": { 1143 | "friendlyName": "Serverless framework", 1144 | "windowsPath": "%APPDATA%\\npm\\serverless.cmd", 1145 | "recommendations": { 1146 | "ms-azuretools.vscode-azurefunctions": { 1147 | "name": "Azure Functions" 1148 | } 1149 | } 1150 | }, 1151 | "func": { 1152 | "friendlyName": "Azure Function SDK", 1153 | "windowsPath": "%APPDATA%\\npm\\func.cmd", 1154 | "recommendations": { 1155 | "ms-azuretools.vscode-azurefunctions": { 1156 | "name": "Azure Functions" 1157 | } 1158 | } 1159 | }, 1160 | "mysql": { 1161 | "friendlyName": "MySQL", 1162 | "windowsPath": "%ProgramFiles%\\MySQL\\MySQL Server 8.0\\bin\\mysqld.exe", 1163 | "recommendations": { 1164 | "mtxr.sqltools": { 1165 | "name": "SQLTools" 1166 | } 1167 | } 1168 | }, 1169 | "postgres": { 1170 | "friendlyName": "PostgreSQL", 1171 | "windowsPath": "%ProgramFiles%\\PostgreSQL\\11\\bin\\psql.exe", 1172 | "recommendations": { 1173 | "ms-ossdata.vscode-postgresql": { 1174 | "name": "PostgreSQL" 1175 | }, 1176 | "mtxr.sqltools": { 1177 | "name": "SQLTools" 1178 | } 1179 | } 1180 | }, 1181 | "sqlcmd": { 1182 | "friendlyName": "SQL CLI", 1183 | "recommendations": { 1184 | "ms-mssql.mssql": { 1185 | "name": "SQL Server (mssql)" 1186 | } 1187 | } 1188 | }, 1189 | "now": { 1190 | "friendlyName": "Now CLI", 1191 | "windowsPath": "%APPDATA%\\npm\\now.cmd", 1192 | "recommendations": { 1193 | "ms-azuretools.vscode-azureappservice": { 1194 | "name": "Azure App Service" 1195 | }, 1196 | "ms-azuretools.vscode-docker": { 1197 | "name": "Docker" 1198 | } 1199 | } 1200 | }, 1201 | "docker": { 1202 | "friendlyName": "Docker", 1203 | "windowsPath": "%ProgramFiles%\\Docker\\Docker\\Resources\\bin\\docker.exe", 1204 | "recommendations": { 1205 | "ms-azuretools.vscode-docker": { 1206 | "name": "Docker", 1207 | "important": true 1208 | }, 1209 | "ms-vscode-remote.remote-containers": { 1210 | "name": "Dev Containers", 1211 | "important": true 1212 | }, 1213 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1214 | "name": "Kubernetes" 1215 | } 1216 | } 1217 | }, 1218 | "kubectl": { 1219 | "friendlyName": "Kubernetes", 1220 | "windowsPath": "%ProgramFiles%\\Docker\\Docker\\Resources\\bin\\kubectl.exe", 1221 | "recommendations": { 1222 | "ms-azuretools.vscode-docker": { 1223 | "name": "Docker" 1224 | }, 1225 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1226 | "name": "Kubernetes" 1227 | }, 1228 | "ms-vscode-remote.remote-containers": { 1229 | "name": "Dev Containers" 1230 | } 1231 | } 1232 | }, 1233 | "ng": { 1234 | "friendlyName": "Angular CLI", 1235 | "windowsPath": "%APPDATA%\\npmexit\\ng.cmd", 1236 | "recommendations": { 1237 | "johnpapa.Angular2": { 1238 | "name": "Angular Snippets" 1239 | } 1240 | } 1241 | }, 1242 | "create-react-app": { 1243 | "friendlyName": "Create React App", 1244 | "windowsPath": "%APPDATA%\\npm\\create-react-app.cmd", 1245 | "recommendations": { 1246 | "msjsdiag.vscode-react-native": { 1247 | "name": "React Native Tools" 1248 | } 1249 | } 1250 | }, 1251 | "react-native": { 1252 | "friendlyName": "React Native", 1253 | "windowsPath": "%APPDATA%\\npm\\react-native-cli", 1254 | "recommendations": { 1255 | "msjsdiag.vscode-react-native": { 1256 | "name": "React Native Tools" 1257 | } 1258 | } 1259 | }, 1260 | "p4": { 1261 | "friendlyName": "Perforce", 1262 | "recommendations": { 1263 | "slevesque.perforce": { 1264 | "name": "Perforce for VS Code" 1265 | } 1266 | } 1267 | }, 1268 | "hg": { 1269 | "friendlyName": "Mercurial", 1270 | "recommendations": { 1271 | "mrcrowl.hg": { 1272 | "name": "Hg" 1273 | } 1274 | } 1275 | }, 1276 | "git": { 1277 | "friendlyName": "Git", 1278 | "windowsPath": "%ProgramFiles%\\Git\\git-bash.exe", 1279 | "recommendations": { 1280 | "eamodio.gitlens": { 1281 | "name": "GitLens" 1282 | } 1283 | } 1284 | }, 1285 | "svn": { 1286 | "friendlyName": "Subversion", 1287 | "windowsPath": "%ProgramFiles%\\TortoiseSVN\\bin\\TortoiseProc.exe", 1288 | "recommendations": { 1289 | "johnstoncode.svn-scm": { 1290 | "name": "SVN" 1291 | } 1292 | } 1293 | }, 1294 | "subl": { 1295 | "friendlyName": "Sublime", 1296 | "windowsPath": "%ProgramFiles%\\Sublime Text3\\sublime_text.exe", 1297 | "recommendations": { 1298 | "ms-vscode.sublime-keybindings": { 1299 | "name": "Sublime Text Keymap and Settings Importer" 1300 | } 1301 | } 1302 | }, 1303 | "atom": { 1304 | "friendlyName": "Atom", 1305 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\atom\\bin\\atom.cmd", 1306 | "recommendations": { 1307 | "ms-vscode.atom-keybindings": { 1308 | "name": "Atom Keymap" 1309 | } 1310 | } 1311 | }, 1312 | "brackets": { 1313 | "friendlyName": "Brackets", 1314 | "windowsPath": "%ProgramFiles(x86)%\\Brackets\\Brackets.exe", 1315 | "recommendations": { 1316 | "ms-vscode.brackets-keybindings": { 1317 | "name": "Brackets Keymap" 1318 | } 1319 | } 1320 | }, 1321 | "notepadplusplus": { 1322 | "friendlyName": "Notepad++", 1323 | "windowsPath": "%ProgramFiles%\\Notepad++\\Notepad++.exe", 1324 | "recommendations": { 1325 | "ms-vscode.notepadplusplus-keybindings": { 1326 | "name": "Notepad++ keymap" 1327 | } 1328 | } 1329 | }, 1330 | "vi": { 1331 | "friendlyName": "VIM", 1332 | "windowsPath": "%ProgramFiles(x86)%\\Vim\\vim80\\gvim.exe", 1333 | "recommendations": { 1334 | "vscodevim.vim": { 1335 | "name": "Vim" 1336 | } 1337 | } 1338 | }, 1339 | "mvn": { 1340 | "friendlyName": "Maven", 1341 | "recommendations": { 1342 | "vscjava.vscode-java-pack": { 1343 | "name": "Java", 1344 | "important": true, 1345 | "isExtensionPack": true, 1346 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 1347 | } 1348 | } 1349 | }, 1350 | "gradle": { 1351 | "friendlyName": "Gradle", 1352 | "recommendations": { 1353 | "vscjava.vscode-java-pack": { 1354 | "name": "Java", 1355 | "important": true, 1356 | "isExtensionPack": true, 1357 | "whenNotInstalled": ["ASF.apache-netbeans-java", "Oracle.oracle-java"] 1358 | } 1359 | } 1360 | }, 1361 | "Microsoft Edge": { 1362 | "friendlyName": "Microsoft Edge", 1363 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge\\Application\\msedge.exe", 1364 | "recommendations": { 1365 | "ms-edgedevtools.vscode-edge-devtools": { 1366 | "name": "Microsoft Edge Developer Tools" 1367 | } 1368 | } 1369 | }, 1370 | "Microsoft Edge Dev": { 1371 | "friendlyName": "Microsoft Edge Dev", 1372 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge Dev\\Application\\msedge.exe", 1373 | "recommendations": { 1374 | "ms-edgedevtools.vscode-edge-devtools": { 1375 | "name": "Microsoft Edge Developer Tools" 1376 | } 1377 | } 1378 | }, 1379 | "Microsoft Edge Beta": { 1380 | "friendlyName": "Microsoft Edge Beta", 1381 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge Beta\\Application\\msedge.exe", 1382 | "recommendations": { 1383 | "ms-edgedevtools.vscode-edge-devtools": { 1384 | "name": "Microsoft Edge Developer Tools" 1385 | } 1386 | } 1387 | }, 1388 | "Microsoft Edge Canary": { 1389 | "friendlyName": "Microsoft Edge Canary", 1390 | "windowsPath": "%USERPROFILE%\\AppData\\Local\\Microsoft\\Edge SxS\\Application\\msedge.exe", 1391 | "recommendations": { 1392 | "ms-edgedevtools.vscode-edge-devtools": { 1393 | "name": "Microsoft Edge Developer Tools" 1394 | } 1395 | } 1396 | }, 1397 | "Mozilla Firefox (x86)": { 1398 | "friendlyName": "Mozilla Firefox", 1399 | "windowsPath": "%ProgramFiles(x86)%\\Mozilla Firefox\\firefox.exe", 1400 | "recommendations": { 1401 | "firefox-devtools.vscode-firefox-debug": { 1402 | "name": "Debugger for Firefox" 1403 | } 1404 | } 1405 | }, 1406 | "Mozilla Firefox Developer Edition (x86)": { 1407 | "friendlyName": "Mozilla Firefox Developer Edition", 1408 | "windowsPath": "%ProgramFiles(x86)%\\Firefox Developer Edition\\firefox.exe", 1409 | "recommendations": { 1410 | "firefox-devtools.vscode-firefox-debug": { 1411 | "name": "Debugger for Firefox" 1412 | } 1413 | } 1414 | }, 1415 | "Mozilla Firefox": { 1416 | "friendlyName": "Mozilla Firefox", 1417 | "windowsPath": "%ProgramFiles%\\Mozilla Firefox\\firefox.exe", 1418 | "recommendations": { 1419 | "firefox-devtools.vscode-firefox-debug": { 1420 | "name": "Debugger for Firefox" 1421 | } 1422 | } 1423 | }, 1424 | "Mozilla Firefox Developer Edition": { 1425 | "friendlyName": "Mozilla Firefox Developer Edition", 1426 | "windowsPath": "%ProgramFiles%\\Firefox Developer Edition\\firefox.exe", 1427 | "recommendations": { 1428 | "firefox-devtools.vscode-firefox-debug": { 1429 | "name": "Debugger for Firefox" 1430 | } 1431 | } 1432 | }, 1433 | "cordova": { 1434 | "friendlyName": "Cordova", 1435 | "windowsPath": "%APPDATA%\\npm\\cordova", 1436 | "recommendations": { 1437 | "msjsdiag.cordova-tools": { 1438 | "name": "Cordova Tools" 1439 | } 1440 | } 1441 | }, 1442 | "gcloud": { 1443 | "friendlyName": "Google GCloud CLI", 1444 | "windowsPath": "%ProgramFiles(x86)%\\Google\\Cloud SDK\\google-cloud-sdk\\bin\\gcloud.cmd", 1445 | "recommendations": { 1446 | "GoogleCloudTools.cloudcode": { 1447 | "name": "Cloud Code" 1448 | } 1449 | } 1450 | }, 1451 | "skaffold": { 1452 | "friendlyName": "Skaffold Code to Cluster", 1453 | "recommendations": { 1454 | "ms-azuretools.vscode-docker": { 1455 | "name": "Docker" 1456 | }, 1457 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1458 | "name": "Kubernetes" 1459 | } 1460 | } 1461 | }, 1462 | "minikube": { 1463 | "friendlyName": "MiniKube Local Kubernetes Cluster", 1464 | "recommendations": { 1465 | "ms-azuretools.vscode-docker": { 1466 | "name": "Docker" 1467 | }, 1468 | "ms-kubernetes-tools.vscode-kubernetes-tools": { 1469 | "name": "Kubernetes" 1470 | }, 1471 | "ms-vscode-remote.remote-containers": { 1472 | "name": "Dev Containers" 1473 | } 1474 | } 1475 | }, 1476 | "podman": { 1477 | "friendlyName": "Podman", 1478 | "recommendations": { 1479 | "ms-vscode-remote.remote-containers": { 1480 | "name": "Dev Containers" 1481 | } 1482 | } 1483 | }, 1484 | "wsl": { 1485 | "friendlyName": "Windows Subsystem for Linux (WSL)", 1486 | "windowsPath": "%WINDIR%\\system32\\lxss\\LxssManager.dll", 1487 | "important": true, 1488 | "recommendations": { 1489 | "ms-vscode-remote.remote-wsl": { 1490 | "name": "WSL", 1491 | "important": true 1492 | } 1493 | } 1494 | } 1495 | }, 1496 | "keymapExtensionTips": ["vscodevim.vim", "ms-vscode.sublime-keybindings", "ms-vscode.atom-keybindings", "ms-vscode.brackets-keybindings", "ms-vscode.vs-keybindings", "ms-vscode.notepadplusplus-keybindings", "k--kato.intellij-idea-keybindings", "lfs.vscode-emacs-friendly", "alphabotsec.vscode-eclipse-keybindings", "alefragnani.delphi-keybindings"], 1497 | "languageExtensionTips": ["ms-python.python", "ms-vscode.cpptools-extension-pack", "ms-dotnettools.csdevkit", "ms-toolsai.jupyter", "vscjava.vscode-java-pack", "ecmel.vscode-html-css", "vue.volar", "bmewburn.vscode-intelephense-client", "dsznajder.es7-react-js-snippets", "golang.go", "ms-vscode.powershell", "dart-code.dart-code", "rust-lang.rust-analyzer", "Shopify.ruby-lsp"], 1498 | "version": "0.48.0", 1499 | "removeTelemetryMachineId": true, 1500 | "enabledTelemetryLevels": { 1501 | "error": true, 1502 | "usage": true 1503 | }, 1504 | "enableTelemetry": true, 1505 | "openToWelcomeMainPage": true, 1506 | "removeLinesBeforeCompilingIfTheyContainTheseWords": ["__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_chat_experiments__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_beta_deprecated_settings__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____EXTENSION_IS_DEV__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_hyper_mode__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cmd_k_diff_history__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_context_graph_treesitter__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_context_config__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_development_tooling__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_separate_product_json_for_remote_ssh__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_handle_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____include_todesktop_runtime__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_backend_selection_keyboard_shortcuts__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_aitasks_view__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_recrusive_context__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____remove_to_default_use_prod_backend__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_console_log__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_auto_refactor__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_background_composer__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_instruct_cpp__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_filesync__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_control_token__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cursoreval__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_assert__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_linter_by_default__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____dont_print_all_stack_traces_when_listener_leak__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_watcher__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_this_is_set_in_prod_and_nightly__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_toggle_reranker__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_linter__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_instant_search__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cursor_motion__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_window_in_window__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_extension_rewrite_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ai_debugger__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_shadow_workspace_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_hold_cpp__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_context_ast_typescript_fork__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_hacky_context_service__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_fullfileEdits__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cpp_eval__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_dev_flush_logs__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_deepseek_7b__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_deepseek_33b__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_multi_file_applies__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_embedding_model_switch__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_cursor_prediction_options__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_long_context_stickiness__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_debugger_stickiness__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____bugbot_dev__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_eval_mode__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_background_cmdk_eval__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_ttft_logging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_always_on_fast_apply_chunk_speculation__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_runnable_code_blocks__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_auto_import_experiments__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_warning_on_too_many_update_locks__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_dev_only_prompt_quality_link__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_loud_logging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_capabilities__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_embeddings_quick_access__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_composer_potential_locs__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____enable_dev_tab__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_menubar_debugging__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_multiple_embeddings__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_unification__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_hmr__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_resume__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_web_viewer__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_planner_tool__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_implementer_tool__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_auto_context__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_leak_finder__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_console_error__", "__GULPFILE_REMOVE_LINE_BEFORE_COMPILING____disable_code_decay_tracker__"], 1507 | "commit": "3def0c1e43c375c98c36c3e60d2304e1c465bd50", 1508 | "date": "2025-03-24T01:05:17.227Z", 1509 | "checksums": { 1510 | "vs/base/parts/sandbox/electron-sandbox/preload.js": "ULXDoMbanHn/0xK8bHYCt3asWEfqXt9rsHNTIl12vf8", 1511 | "vs/workbench/workbench.desktop.main.js": "jEVVOcXY5BHJn5VxqWjIcNWzraSohP3qXN7A37RSxpk", 1512 | "vs/workbench/workbench.desktop.main.css": "ngYHDGdEEfidxuOUP7gW0FwJ0JlNVrJ5hZpAIL0tT7c", 1513 | "vs/workbench/api/node/extensionHostProcess.js": "y367+bBJfXaQoNvxupc5JohHFaAtSZ3pv8sXqHSnvng", 1514 | "vs/code/electron-sandbox/workbench/workbench.html": "2hltXxAMilDOjpDrn98p19rFk+RdcAJLmsmdt3zzSuM", 1515 | "vs/code/electron-sandbox/workbench/workbench.js": "w1FsZjBrSKfqHqAUdZT0oG74pye6HfK2YYOye+iQT88" 1516 | } 1517 | } --------------------------------------------------------------------------------