Sfoglia il codice sorgente

feat(1.107): update patches and build (#2618)

Baptiste Augrain 2 giorni fa
parent
commit
895ada1ac1
55 ha cambiato i file con 2468 aggiunte e 4846 eliminazioni
  1. 5 0
      .github/workflows/insider-linux.yml
  2. 1 1
      .github/workflows/insider-macos.yml
  3. 12 9
      .github/workflows/insider-windows.yml
  4. 1 1
      .github/workflows/stable-macos.yml
  5. 10 4
      build.sh
  6. 1 1
      build/alpine/package_reh.sh
  7. 1 1
      build/linux/loong64/electron.sh
  8. 9 11
      build/linux/loong64/electron.sha256sums
  9. 9 2
      build/linux/package_bin.sh
  10. 30 24
      build/linux/package_reh.sh
  11. 1 1
      build/linux/riscv64/electron.sh
  12. 11 11
      build/linux/riscv64/electron.sha256sums
  13. 8 1
      build/windows/package.sh
  14. 2 0
      build_cli.sh
  15. 4 0
      dev/build.sh
  16. 35 17
      dev/patch.sh
  17. 9 3
      dev/update_api.sh
  18. 97 3
      dev/update_patches.sh
  19. 14 14
      patches/add-remote-url.patch
  20. 7 7
      patches/alpine/reh/fix-node-docker.patch
  21. 8 8
      patches/binary-name.patch
  22. 263 82
      patches/brand.patch
  23. 21 19
      patches/cli.patch
  24. 25 84
      patches/disable-copilot.patch
  25. 1 11
      patches/ext-from-gh.patch
  26. 5 5
      patches/feat-user-product.patch
  27. 280 0
      patches/fix-build-vsce.patch
  28. 135 0
      patches/fix-keymap.patch
  29. 14 0
      patches/fix-npm-preinstall.patch
  30. 20 16
      patches/fix-policies.patch
  31. 5 9
      patches/fix-remote-libs.patch
  32. 6 33
      patches/helper/settings.patch
  33. 23 48
      patches/linux/arch-0-support.patch
  34. 52 246
      patches/linux/arch-1-ppc64le.patch
  35. 48 136
      patches/linux/arch-2-riscv64.patch
  36. 43 27
      patches/linux/arch-3-loong64.patch
  37. 45 133
      patches/linux/arch-4-s390x.patch
  38. 26 0
      patches/linux/cli.patch
  39. 6 6
      patches/linux/client/disable-remote.patch
  40. 1089 17
      patches/linux/fix-build.patch
  41. 0 3640
      patches/linux/fix-dependencies.patch
  42. 7 9
      patches/linux/fix-npm-postinstall.patch
  43. 0 0
      patches/linux/reh/s390x/package.json.patch
  44. 3 37
      patches/remove-mangle.patch
  45. 9 85
      patches/sourcemaps.patch
  46. 3 3
      patches/update-cache-path.patch
  47. 0 0
      patches/update-electron.patch.no
  48. 11 16
      patches/version-0-release.patch
  49. 14 14
      patches/version-1-update.patch
  50. 16 35
      patches/windows/appx.patch
  51. 3 3
      patches/windows/cli.patch
  52. 2 2
      prepare_vscode.sh
  53. 14 7
      product.json
  54. 2 2
      release_notes.md
  55. 2 2
      upstream/insider.json

+ 5 - 0
.github/workflows/insider-linux.yml

@@ -425,6 +425,11 @@ jobs:
           version: 10
           platform: x64
 
+      - name: Setup Node.js environment
+        uses: actions/setup-node@v6
+        with:
+          node-version-file: '.nvmrc'
+
       - name: Install GH
         run: ./build/linux/install_gh.sh
         if: env.SHOULD_DEPLOY == 'yes'

+ 1 - 1
.github/workflows/insider-macos.yml

@@ -44,7 +44,7 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - runner: macos-13
+          - runner: macos-14
             vscode_arch: x64
           - runner: [self-hosted, macOS, ARM64]
             vscode_arch: arm64

+ 12 - 9
.github/workflows/insider-windows.yml

@@ -72,7 +72,10 @@ jobs:
   compile:
     needs:
       - check
-    runs-on: ubuntu-22.04
+    runs-on: windows-2022
+    defaults:
+      run:
+        shell: bash
     env:
       MS_COMMIT: ${{ needs.check.outputs.MS_COMMIT }}
       MS_TAG: ${{ needs.check.outputs.MS_TAG }}
@@ -93,11 +96,11 @@ jobs:
           PULL_REQUEST_ID: ${{ github.event.inputs.checkout_pr }}
         run: ./get_pr.sh
 
-      - name: Setup GCC
-        uses: egor-tensin/setup-gcc@v1
-        with:
-          version: 10
-          platform: x64
+      # - name: Setup GCC
+      #   uses: egor-tensin/setup-gcc@v1
+      #   with:
+      #     version: 10
+      #     platform: x64
 
       - name: Setup Node.js environment
         uses: actions/setup-node@v6
@@ -111,9 +114,9 @@ jobs:
           python-version: '3.11'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install libkrb5-dev
-        run: sudo apt-get update -y && sudo apt-get install -y libkrb5-dev
-        if: env.SHOULD_BUILD == 'yes'
+      # - name: Install libkrb5-dev
+      #   run: sudo apt-get update -y && sudo apt-get install -y libkrb5-dev
+      #   if: env.SHOULD_BUILD == 'yes'
 
       - name: Clone VSCode repo
         run: ./get_repo.sh

+ 1 - 1
.github/workflows/stable-macos.yml

@@ -43,7 +43,7 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - runner: macos-13
+          - runner: macos-14
             vscode_arch: x64
           - runner: [self-hosted, macOS, ARM64]
             vscode_arch: arm64

+ 10 - 4
build.sh

@@ -27,7 +27,8 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then
     rm -f .build/extensions/ms-vscode.js-debug/src/win32-app-container-tokens.*.node
 
     # generate Group Policy definitions
-    node build/lib/policies/policyGenerator build/lib/policies/policyData.jsonc darwin
+    npm run copy-policy-dto --prefix build
+    node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc darwin
 
     npm run gulp "vscode-darwin-${VSCODE_ARCH}-min-ci"
 
@@ -37,13 +38,14 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then
 
     VSCODE_PLATFORM="darwin"
   elif [[ "${OS_NAME}" == "windows" ]]; then
-    # generate Group Policy definitions
-    node build/lib/policies/policyGenerator build/lib/policies/policyData.jsonc win32
-
     # in CI, packaging will be done by a different job
     if [[ "${CI_BUILD}" == "no" ]]; then
       . ../build/windows/rtf/make.sh
 
+      # generate Group Policy definitions
+      npm run copy-policy-dto --prefix build
+      node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc win32
+
       npm run gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
 
       if [[ "${VSCODE_ARCH}" != "x64" ]]; then
@@ -61,6 +63,10 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then
 
     # in CI, packaging will be done by a different job
     if [[ "${CI_BUILD}" == "no" ]]; then
+      # generate Group Policy definitions
+      npm run copy-policy-dto --prefix build
+      node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc linux
+
       npm run gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
 
       find "../VSCode-linux-${VSCODE_ARCH}" -print0 | xargs -0 touch -c

+ 1 - 1
build/alpine/package_reh.sh

@@ -41,7 +41,7 @@ for i in {1..5}; do # try 5 times
   echo "Npm install failed $i, trying again..."
 done
 
-node build/azure-pipelines/distro/mixin-npm
+node build/azure-pipelines/distro/mixin-npm.ts
 
 if [[ "${VSCODE_ARCH}" == "x64" ]]; then
   PA_NAME="linux-alpine"

+ 1 - 1
build/linux/loong64/electron.sh

@@ -2,5 +2,5 @@
 
 set -ex
 
-export ELECTRON_VERSION="37.2.5"
+export ELECTRON_VERSION="39.2.3"
 export VSCODE_ELECTRON_TAG="v${ELECTRON_VERSION}"

+ 9 - 11
build/linux/loong64/electron.sha256sums

@@ -1,11 +1,9 @@
-0bc435a6989f120b1f748cd2f8d3fa7ed731c54a0ad797271e479539dca5c4fe *chromedriver-v37.2.5-linux-loong64.zip
-6a355cac6c8b02deb413d024ff3224f03717cc0790e3f5a872891ecf79ade20e *electron-v37.2.5-linux-loong64-debug.zip
-c091db1993b2bda5426a678c428c5ffc71af9228abc4891a493a1d318e250b0a *electron-v37.2.5-linux-loong64-symbols.zip
-d3f615c3ec265a2adbc0ed9088a65e96aa90b392ecd1ea17e8e4dc82728f4a5d *electron-v37.2.5-linux-loong64.zip
-17e05db81f5b0cff1327ac153bd20838b3332b78de1b2ffa235e27a30a15024d *ffmpeg-v37.2.5-linux-loong64.zip
-eaf1efb230cd9bfee7acd8b553c602ff396c2f667837e968b4c1d5542448b0b3 *hunspell-dictionaries.zip
-3eb8b3199f764c63f82960cb1e1945f70af348873133bf9fd70daeefa3ca1bfb *libcxx-headers.zip
-2a5ad06e845d59d89b74a97cd2befcfad02f951f8083f02645a9edbb4e7fdcb7 *libcxx-objects-v37.2.5-linux-loong64.zip
-24eec3c74d5a05eba53524866a009e257e52e65257caa8e6fda07b82321885eb *libcxxabi-headers.zip
-a4015814d6651cf5511b04307aeef51b739d05eed7ff8ab819739dabd0047309 *mksnapshot-v37.2.5-linux-loong64.zip
-d1ed2413e007d7adbcd7291158647cfd4908739b034d021c123ca3d11513c31a *node-v37.2.5-headers.tar.gz
+d26b2189e7466a08c73861d0225c9b28730fdfc30918f3ea70853b43a2581dc4 *chromedriver-v39.2.3-linux-loong64.zip
+8cc36f7468f5b2d98cde3f73c10c535555754c54be43e45c320a382c35b8e466 *electron-v39.2.3-linux-loong64.zip
+f6e7462d6fd795ae2b08344ee0fdca817eba148b62a62717b3f512c845d96a64 *ffmpeg-v39.2.3-linux-loong64.zip
+b122599dc84b81526ba4eecbca4794f3a2d25300242ad3829d1445cb6948f470 *hunspell-dictionaries.zip
+76ef17d2810df5e77c5071863e2a375df914cfb7a362ad0582ee0eedca2441b9 *libcxx-headers.zip
+9b61ba9f0780a57ee2749f7963759395784eadcaccc54af313de1a540240298e *libcxx-objects-v39.2.3-linux-loong64.zip
+9ae64aff9e391eae401142e55654b5b8cf54d0611b1ecb540f2f4e89a2b4f772 *libcxxabi-headers.zip
+7d7e6e08c84aa38b74037f5910534918bc792ffbe2ca6d667067f587f27f5118 *mksnapshot-v39.2.3-linux-loong64.zip
+db48f8a9d2271e8b3a1c3f26ea1ae9bd489deb1b464b6ae424a15d5df7529fdc *node-v39.2.3-headers.tar.gz

+ 9 - 2
build/linux/package_bin.sh

@@ -22,7 +22,7 @@ export VSCODE_SYSROOT_PREFIX='-glibc-2.28-gcc-10.5.0'
 
 if [[ "${VSCODE_ARCH}" == "arm64" || "${VSCODE_ARCH}" == "armhf" ]]; then
   export VSCODE_SKIP_SYSROOT=1
-  export USE_GNUPP2A=1
+  # export USE_GNUPP2A=1
 elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
   export VSCODE_SYSROOT_REPOSITORY='VSCodium/vscode-linux-build-agent'
   export VSCODE_SYSROOT_VERSION='20240129-253798'
@@ -125,7 +125,14 @@ for i in {1..5}; do # try 5 times
   echo "Npm install failed $i, trying again..."
 done
 
-node build/azure-pipelines/distro/mixin-npm
+node build/azure-pipelines/distro/mixin-npm.ts
+
+# delete native files built in the `compile` step
+find .build/extensions -type f -name '*.node' -print -delete
+
+# generate Group Policy definitions
+npm run copy-policy-dto --prefix build
+node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc linux
 
 npm run gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
 

+ 30 - 24
build/linux/package_reh.sh

@@ -18,14 +18,14 @@ cd vscode || { echo "'vscode' dir not found"; exit 1; }
 
 GLIBC_VERSION="2.28"
 GLIBCXX_VERSION="3.4.26"
-NODE_VERSION="22.15.1"
+NODE_VERSION="22.20.0"
 
 export VSCODE_NODEJS_URLROOT='/download/release'
 export VSCODE_NODEJS_URLSUFFIX=''
 
 if [[ "${VSCODE_ARCH}" == "x64" ]]; then
   GLIBC_VERSION="2.17"
-  GLIBCXX_VERSION="3.4.22"
+  GLIBCXX_VERSION="3.4.30"
 
   VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-x64"
 
@@ -48,6 +48,8 @@ elif [[ "${VSCODE_ARCH}" == "armhf" ]]; then
   export VSCODE_SKIP_SYSROOT=1
   export USE_GNUPP2A=1
 elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
+  GLIBC_VERSION="2.28"
+
   VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-ppc64le"
   VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}"
 
@@ -66,6 +68,8 @@ elif [[ "${VSCODE_ARCH}" == "loong64" ]]; then
   export VSCODE_SKIP_SETUPENV=1
   export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org'
 elif [[ "${VSCODE_ARCH}" == "s390x" ]]; then
+  GLIBC_VERSION="2.28"
+
   VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-s390x"
   VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}"
 
@@ -130,9 +134,6 @@ EOF
   echo "${INCLUDES}" > "${HOME}/.gyp/include.gypi"
 fi
 
-mv .npmrc .npmrc.bak
-cp ../npmrc .npmrc
-
 for i in {1..5}; do # try 5 times
   npm ci --prefix build && break
   if [[ $i == 5 ]]; then
@@ -158,6 +159,11 @@ else
   export VSCODE_SYSROOT_DIR=".build"
 fi
 
+node build/npm/preinstall.ts
+
+mv .npmrc .npmrc.bak
+cp ../npmrc .npmrc
+
 for i in {1..5}; do # try 5 times
   npm ci && break
   if [[ $i == 5 ]]; then
@@ -170,26 +176,26 @@ for i in {1..5}; do # try 5 times
   rm -rf node_modules/@vscode node_modules/node-pty
 done
 
-if [[ "${VSCODE_ARCH}" == "x64" ]]; then
-  pushd "remote"
+# if [[ "${VSCODE_ARCH}" == "x64" ]]; then
+#   pushd "remote"
 
-  for LIB in @parcel/watcher @vscode/spdlog kerberos node-pty
-  do
-    pushd "node_modules/${LIB}"
+#   for LIB in @parcel/watcher @vscode/spdlog kerberos node-pty
+#   do
+#     pushd "node_modules/${LIB}"
 
-    CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" npx node-gyp rebuild
+#     CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" npx node-gyp rebuild
 
-    popd
-  done
+#     popd
+#   done
 
-  popd
-  
-  VERIFY_CXX11=1
-fi
+#   popd
+
+#   VERIFY_CXX11=1
+# fi
 
 mv .npmrc.bak .npmrc
 
-node build/azure-pipelines/distro/mixin-npm
+node build/azure-pipelines/distro/mixin-npm.ts
 
 export VSCODE_NODE_GLIBC="-glibc-${GLIBC_VERSION}"
 
@@ -200,9 +206,9 @@ if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
 
   EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh
 
-  if [[ -n "${VERIFY_CXX11}" ]]; then
-    SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh
-  fi
+  # if [[ -n "${VERIFY_CXX11}" ]]; then
+  #   SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh
+  # fi
 
   pushd "../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}"
 
@@ -223,9 +229,9 @@ if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then
 
   EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh
 
-  if [[ -n "${VERIFY_CXX11}" ]]; then
-    SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh
-  fi
+  # if [[ -n "${VERIFY_CXX11}" ]]; then
+  #   SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh
+  # fi
 
   pushd "../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}"
 

+ 1 - 1
build/linux/riscv64/electron.sh

@@ -2,5 +2,5 @@
 
 set -ex
 
-export ELECTRON_VERSION="37.2.3"
+export ELECTRON_VERSION="39.2.7"
 export VSCODE_ELECTRON_TAG="v${ELECTRON_VERSION}.riscv1"

+ 11 - 11
build/linux/riscv64/electron.sha256sums

@@ -1,11 +1,11 @@
-bec3076d684af4ab7700f13861c3257dc17198970eb498ff2e388db71f61898e *chromedriver-v37.2.3-linux-riscv64.zip
-c670aba1b907ef9cbcdb2dccd742604f897eef4719f7ad46f34925197f7ae208 *electron-v37.2.3-linux-riscv64-debug.tar.zst
-3ee5a9d29c611a6c685caa291698c3b5f1041bd11b3726137d41931457d6a113 *electron-v37.2.3-linux-riscv64-symbols.tar.zst
-33f16380975b2087308f096e4329639f839c58aa1b9cccbee0a915bf3ed7b976 *electron-v37.2.3-linux-riscv64.zip
-0ef484d10dd15bb4b44e5862ff8070ec09d94ca0b7c6b062e88c64fa343e2408 *ffmpeg-v37.2.3-linux-riscv64.zip
-218a633300feb50ed57ab751374bac8693615ff192c2437067a4bceef84c9cf8 *hunspell-dictionaries.zip
-abe24654e394d057dc2bdea9533fcd1790becb822b53d543165c74470694e818 *libcxx-headers.zip
-1e6972b9125d1864f32d0f5d1084cf4ea56f7dd2227505271dde15439942c0e4 *libcxx-objects-v37.2.3-linux-riscv64.zip
-55fdbc0fc65e176e50c3492dd50a18c9d23e2bd0e45a00a34118d46ed583a8d0 *libcxxabi-headers.zip
-b017a16c8f0d8c8076ec71fba5a043951dd88e4fc7d8e8720906a0b9b4a141aa *mksnapshot-v37.2.3-linux-riscv64.zip
-0259b1abf0bc8aedb114bac75aadcbb1860fd13ae32a876702ca8e722581f8b2 *node-v37.2.3-headers.tar.gz
+6759ef2bd69a2e31a3f0e17c4e4c0bf239b54f08525572201ae7760851168487 *chromedriver-v39.2.7-linux-riscv64.zip
+89562e30982d8ac71fbc1e0f549a4a6e19abd5cb98ea904d5f3cfceb7c61e582 *electron-v39.2.7-linux-riscv64-debug.tar.zst
+71c6f265a2ef065f478ef910a06466a21009c02783dcb7053767549a6dbeb80d *electron-v39.2.7-linux-riscv64-symbols.tar.zst
+136804dbd04f1c6b9a6047c4e7bb648876214ff453b62fb3bdc81505b6f5aab2 *electron-v39.2.7-linux-riscv64.zip
+1059d6cb97b87464b3bd415bb5f96fceaf91d6e3af1c9733724ab9f2e14e2a08 *ffmpeg-v39.2.7-linux-riscv64.zip
+224a84d4aaceb5ed8be3c4f65f8404d492dc86ded8ab336c2562dfdd21752068 *hunspell-dictionaries.zip
+b6cb4f8902aad5de811efd106ddbdbca79e43cb7c8fa67f7eeddaedf2efd82d5 *libcxx-headers.zip
+0664e200ec1eab1ce1957bc6e17ad89f6c0d4d904a9492d64fcf4175cd81e537 *libcxx-objects-v39.2.7-linux-riscv64.zip
+96f9b66be7ff11e79ec2e781a0025938eb5ef97cbab429c05e9b45d24d421abf *libcxxabi-headers.zip
+be0774857454f81b9407f6b941200f8843a0b3ecb86e2bb072209ef9f9bfe74a *mksnapshot-v39.2.7-linux-riscv64.zip
+a8fca541e8f9a18de73c78f6862cbf439723c80c5eb60fe50405dfb751d2ee13 *node-v39.2.7-headers.tar.gz

+ 8 - 1
build/windows/package.sh

@@ -20,10 +20,17 @@ for i in {1..5}; do # try 5 times
   echo "Npm install failed $i, trying again..."
 done
 
-node build/azure-pipelines/distro/mixin-npm
+node build/azure-pipelines/distro/mixin-npm.ts
+
+# delete native files built in the `compile` step
+find .build/extensions -type f -name '*.node' -print -delete
 
 . ../build/windows/rtf/make.sh
 
+# generate Group Policy definitions
+npm run copy-policy-dto --prefix build
+node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc win32
+
 npm run gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
 
 . ../build_cli.sh

+ 2 - 0
build_cli.sh

@@ -32,6 +32,8 @@ if [[ "${OS_NAME}" == "osx" ]]; then
   export OPENSSL_LIB_DIR="$( pwd )/openssl/out/${VSCODE_ARCH}-osx/lib"
   export OPENSSL_INCLUDE_DIR="$( pwd )/openssl/out/${VSCODE_ARCH}-osx/include"
 
+  rustup target add "${VSCODE_CLI_TARGET}"
+
   cargo build --release --target "${VSCODE_CLI_TARGET}" --bin=code
 
   cp "target/${VSCODE_CLI_TARGET}/release/code" "../../VSCode-darwin-${VSCODE_ARCH}/${NAME_SHORT}.app/Contents/Resources/app/bin/${TUNNEL_APPLICATION_NAME}"

+ 4 - 0
dev/build.sh

@@ -112,6 +112,10 @@ if [[ "${SKIP_BUILD}" == "no" ]]; then
     git add .
     git reset -q --hard HEAD
 
+    while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do
+      git reset -q --hard HEAD~
+    done
+
     rm -rf .build out*
 
     cd ..

+ 35 - 17
dev/patch.sh

@@ -13,28 +13,36 @@ while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do
   git reset -q --hard HEAD~
 done
 
-git apply --reject "../patches/helper/settings.patch"
+if [[ "${1}" == *patch ]]; then
+  FILE="../patches/${1}"
+else
+  FILE="../patches/${1}.patch"
+fi
+
+if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then
+  git apply --reject "../patches/helper/settings.patch"
+
+  while [ $# -gt 1 ]; do
+    echo "Parameter: $1"
+    if [[ "${1}" == *patch ]]; then
+      FILE="../patches/${1}"
+    else
+      FILE="../patches/${1}.patch"
+    fi
+
+    git apply --reject "${FILE}"
+
+    shift
+  done
+
+  git add .
+  git commit --no-verify -q -m "VSCODIUM HELPER"
 
-while [ $# -gt 1 ]; do
-  echo "Parameter: $1"
   if [[ "${1}" == *patch ]]; then
     FILE="../patches/${1}"
   else
     FILE="../patches/${1}.patch"
   fi
-
-  git apply --reject "${FILE}"
-
-  shift
-done
-
-git add .
-git commit --no-verify -q -m "VSCODIUM HELPER"
-
-if [[ "${1}" == *patch ]]; then
-  FILE="../patches/${1}"
-else
-  FILE="../patches/${1}.patch"
 fi
 
 if [[ -f "${FILE}" ]]; then
@@ -47,8 +55,18 @@ fi
 
 read -rp "Press any key when the conflict have been resolved..." -n1 -s
 
+while [[ -n "$( find . -name '*.rej' -print )" ]]; do
+  echo
+  read -rp "Press any key when the conflict have been resolved..." -n1 -s
+done
+
 git add .
 git diff --staged -U1 > "${FILE}"
-git reset -q --hard HEAD~
+
+if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then
+  git reset -q --hard HEAD
+else
+  git reset -q --hard HEAD~
+fi
 
 echo "The patch has been generated."

+ 9 - 3
dev/update_api.sh

@@ -14,7 +14,6 @@ while getopts ":i" opt; do
   esac
 done
 
-
 URL=$( curl -s "https://update.code.visualstudio.com/api/update/win32-x64-archive/${VSCODE_QUALITY}/0000000000000000000000000000000000000000" | jq -c '.url' | sed -E 's/.*"([^"]+)".*/\1/' )
 # echo "url: ${URL}"
 FILE="${URL##*/}"
@@ -30,10 +29,17 @@ if [[ ! -d "${DIRECTORY}" ]]; then
   unzip "${FILE}" -d "${DIRECTORY}"
 fi
 
-APIS=$( jq -r '.extensionEnabledApiProposals' "${DIRECTORY}/resources/app/product.json" )
+BIN_PATH=$(find "${DIRECTORY}/bin" -type f ! -name "*.*")
+
+LINE="$( grep -E '^[[:space:]]*(export[[:space:]]+)?VERSIONFOLDER[[:space:]]*=' "$BIN_PATH" | tail -n1 )"
+VERSIONFOLDER="${LINE#*=}"
+VERSIONFOLDER="${VERSIONFOLDER#\"}"
+VERSIONFOLDER="${VERSIONFOLDER%\"}"
+
+APIS=$( jq -r '.extensionEnabledApiProposals' "${DIRECTORY}/${VERSIONFOLDER}/resources/app/product.json" )
 APIS=$( echo "${APIS}" | jq '. += {"jeanp413.open-remote-ssh": ["resolvers", "tunnels", "terminalDataWriteEvent", "contribRemoteHelp", "contribViewsRemote"]}' )
 APIS=$( echo "${APIS}" | jq '. += {"jeanp413.open-remote-wsl": ["resolvers", "contribRemoteHelp", "contribViewsRemote"]}' )
 echo "$( jq --argjson v "${APIS}" 'setpath(["extensionEnabledApiProposals"]; $v)' product.json )" > product.json
 
-APIS=$( jq -r '.extensionsEnabledWithApiProposalVersion' "${DIRECTORY}/resources/app/product.json" )
+APIS=$( jq -r '.extensionsEnabledWithApiProposalVersion' "${DIRECTORY}/${VERSIONFOLDER}/resources/app/product.json" )
 echo "$( jq --argjson v "${APIS}" 'setpath(["extensionsEnabledWithApiProposalVersion"]; $v)' product.json )" > product.json

+ 97 - 3
dev/update_patches.sh

@@ -12,6 +12,75 @@ while getopts ":i" opt; do
   esac
 done
 
+generate_rejects() {
+  local PATCH_FILE="$1"
+
+  if ! command -v python3 >/dev/null 2>&1; then
+    echo "python3 not found; cannot create reject files for ${PATCH_FILE}"
+    return 1
+  fi
+
+  PATCH_FOR_REJECT="${PATCH_FILE}" python3 <<'PY'
+import os
+import pathlib
+import re
+import subprocess
+
+
+def chunk_needs_reject(raw_chunk: str) -> bool:
+    """Return True when a patch chunk cannot be applied nor reversed."""
+
+    chunk = raw_chunk if raw_chunk.endswith("\n") else raw_chunk + "\n"
+
+    def _run_git(extra_args):
+        return subprocess.run(
+            ["git", "apply", "--check", "--ignore-whitespace", *extra_args],
+            input=chunk,
+            text=True,
+            capture_output=True,
+        )
+
+    forward = _run_git([])
+    if forward.returncode == 0:
+        return False
+
+    reverse = _run_git(["--reverse"])
+    if reverse.returncode == 0:
+        return False
+
+    return True
+
+patch_path = os.environ["PATCH_FOR_REJECT"]
+with open(patch_path, "r", encoding="utf-8", errors="ignore") as src:
+    content = src.read()
+
+chunks = re.split(r'(?m)^diff --git ', content)
+for chunk in chunks:
+    chunk = chunk.strip()
+    if not chunk:
+        continue
+    chunk = "diff --git " + chunk
+    match = re.search(r'^diff --git a/(.*?) b/(.*?)$', chunk, re.MULTILINE)
+    if not match:
+        continue
+    a_path, b_path = match.groups()
+    candidate = b_path if b_path != "/dev/null" else a_path
+    if candidate in ("/dev/null", ""):
+        continue
+    if candidate.startswith("../") or candidate.startswith("..\\") or candidate.startswith("/"):
+        continue
+    dest = pathlib.Path(candidate + ".rej")
+    if not chunk_needs_reject(chunk):
+      continue
+    dest.parent.mkdir(parents=True, exist_ok=True)
+    with dest.open("w", encoding="utf-8") as fh:
+      fh.write(chunk)
+      if not chunk.endswith("\n"):
+        fh.write("\n")
+    print(f"generated reject: {dest}")
+PY
+}
+
 check_file() {
   while [ $# -gt 1 ]; do
     git apply --reject "${1}"
@@ -33,9 +102,26 @@ check_file() {
     if ! git apply --ignore-whitespace "${1}"; then
       echo failed to apply patch "${1}"
 
-      git apply --reject "${1}"
+      git apply --reject --verbose "${1}"
+
+      if [[ -z "$( find . -name '*.rej' -print )" ]]; then
+        echo "no .rej generated by git; creating fallback rejects for ${1}"
 
-      read -rp "Press any key when the conflict have been resolved..." -n1 -s
+        if ! generate_rejects "${1}"; then
+          echo "failed to generate reject files for ${1}"
+          exit 1
+        fi
+
+        if [[ -z "$( find . -name '*.rej' -print )" ]]; then
+          echo "still no .rej after attempting to create them for ${1}"
+          exit 1
+        fi
+      fi
+
+      while [[ -n "$( find . -name '*.rej' -print )" ]]; do
+        read -rp "Press any key when the conflict have been resolved..." -n1 -s
+        echo
+      done
 
       git restore .vscode/settings.json
       git add .
@@ -52,8 +138,16 @@ cd vscode || { echo "'vscode' dir not found"; exit 1; }
 git add .
 git reset -q --hard HEAD
 
+while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do
+  git reset -q --hard HEAD~
+done
+
 for FILE in ../patches/*.patch; do
-  check_file "${FILE}"
+  if [[ "${FILE}" == *"/fix-policies.patch" ]]; then
+    check_file "../patches/fix-keymap.patch" "../patches/fix-policies.patch"
+  else
+    check_file "${FILE}"
+  fi
 done
 
 if [[ "${VSCODE_QUALITY}" == "insider" ]]; then

+ 14 - 14
patches/add-remote-url.patch

@@ -1,18 +1,18 @@
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index c1d64c0..3e60e80 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -321,3 +321,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index cb1a0a5..dacedc3 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -323,3 +323,3 @@ function packageTask(type: string, platform: string, arch: string, sourceFolderN
  		const productJsonStream = gulp.src(['product.json'], { base: '.' })
--			.pipe(json({ commit, date: readISODate('out-build'), version }))
-+			.pipe(json({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' }))
+-			.pipe(jsonEditor({ commit, date: readISODate('out-build'), version }))
++			.pipe(jsonEditor({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' }))
  			.pipe(es.through(function (file) {
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 7046ee0..9aa7bb0 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -288,3 +288,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index d3ab651..1000abc 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -272,3 +272,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d
  		const productJsonStream = gulp.src(['product.json'], { base: '.' })
--			.pipe(json({ commit, date: readISODate('out-build'), checksums, version }))
-+			.pipe(json({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' }))
+-			.pipe(jsonEditor({ commit, date: readISODate('out-build'), checksums, version }))
++			.pipe(jsonEditor({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' }))
  			.pipe(es.through(function (file) {

+ 7 - 7
patches/alpine/reh/fix-node-docker.patch

@@ -1,9 +1,9 @@
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index e12a33e..9300d62 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -188,5 +188,16 @@ function getNodeChecksum(expectedName) {
- function extractAlpinefromDocker(nodeVersion, platform, arch) {
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index cb1a0a5..375851e 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -159,5 +159,16 @@ function getNodeChecksum(expectedName: string): string | undefined {
+ function extractAlpinefromDocker(nodeVersion: string, platform: string, arch: string) {
 -	const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node';
 +	let imageName = 'node';
 +	let dockerPlatform = '';
@@ -20,4 +20,4 @@ index e12a33e..9300d62 100644
  	log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`);
 -	const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' });
 +	const contents = cp.execSync(`docker run --rm ${dockerPlatform} ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 200 * 1024 * 1024, encoding: 'buffer' });
- 	return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]);
+ 	// eslint-disable-next-line local/code-no-dangerous-type-assertions

+ 8 - 8
patches/binary-name.patch

@@ -1,22 +1,22 @@
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 7046ee0..faca888 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -376,3 +376,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index d3ab651..63cd71f 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -369,3 +369,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d
  				.pipe(replace('@@APPNAME@@', product.applicationName))
 -				.pipe(rename('bin/code'));
 +				.pipe(rename('bin/' + product.applicationName));
  			const policyDest = gulp.src('.build/policies/darwin/**', { base: '.build/policies/darwin' })
 diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts
-index 6324e98..3d2fba3 100644
+index 2c3b710..8041f08 100644
 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts
 +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts
-@@ -445,3 +445,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
+@@ -503,3 +503,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
  	private async getShellCommandLink(): Promise<{ readonly source: string; readonly target: string }> {
 -		const target = resolve(this.environmentMainService.appRoot, 'bin', 'code');
 +		const target = resolve(this.environmentMainService.appRoot, 'bin', this.productService.applicationName);
  		const source = `/usr/local/bin/${this.productService.applicationName}`;
-@@ -680,3 +680,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
+@@ -772,3 +772,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
  		if (this.environmentMainService.isBuilt) {
 -			return join(this.environmentMainService.appRoot, 'bin', 'code');
 +			return join(this.environmentMainService.appRoot, 'bin', `${this.productService.applicationName}`);

+ 263 - 82
patches/brand.patch

@@ -73,37 +73,37 @@ index 187100b..7514367 100644
 +const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75.0 as !!APP_NAME!! will generate these automatically from your package.json contribution declarations.");
  const starActivation = l10n.t("Using '*' activation is usually a bad idea as it impacts performance.");
 diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json
-index 4d037b4..7d0a991 100644
+index b216764..abc245d 100644
 --- a/extensions/git/package.nls.json
 +++ b/extensions/git/package.nls.json
-@@ -244,3 +244,3 @@
+@@ -245,3 +245,3 @@
  			"{Locked='](command:git.showOutput'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -272,4 +272,4 @@
+@@ -273,4 +273,4 @@
  	"config.showCommitInput": "Controls whether to show the commit input in the Git source control panel.",
 -	"config.terminalAuthentication": "Controls whether to enable VS Code to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.",
 -	"config.terminalGitEditor": "Controls whether to enable VS Code to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.",
 +	"config.terminalAuthentication": "Controls whether to enable !!APP_NAME!! to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.",
 +	"config.terminalGitEditor": "Controls whether to enable !!APP_NAME!! to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.",
  	"config.timeline.showAuthor": "Controls whether to show the commit author in the Timeline view.",
-@@ -341,3 +341,3 @@
+@@ -342,3 +342,3 @@
  			"{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -351,3 +351,3 @@
+@@ -352,3 +352,3 @@
  			"{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -361,3 +361,3 @@
+@@ -362,3 +362,3 @@
  			"{Locked='](command:workbench.extensions.search?%22%40category%3A%5C%22scm%20providers%5C%22%22'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -373,6 +373,6 @@
+@@ -374,6 +374,6 @@
  	"view.workbench.scm.disabled": {
 -		"message": "If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "If you would like to use Git features, please enable Git in your [settings](command:workbench.action.openSettings?%5B%22git.enabled%22%5D).\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -112,7 +112,7 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -381,6 +381,6 @@
+@@ -382,6 +382,6 @@
  	"view.workbench.scm.empty": {
 -		"message": "In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.cloneRecursive)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "In order to use Git features, you can open a folder containing a Git repository or clone from a URL.\n[Open Folder](command:vscode.openFolder)\n[Clone Repository](command:git.cloneRecursive)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -121,7 +121,7 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -389,6 +389,6 @@
+@@ -390,6 +390,6 @@
  	"view.workbench.scm.folder": {
 -		"message": "The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\n[Initialize Repository](command:git.init?%5Btrue%5D)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "The folder currently open doesn't have a Git repository. You can initialize a repository which will enable source control features powered by Git.\n[Initialize Repository](command:git.init?%5Btrue%5D)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -130,7 +130,7 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -397,6 +397,6 @@
+@@ -398,6 +398,6 @@
  	"view.workbench.scm.workspace": {
 -		"message": "The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\n[Initialize Repository](command:git.init)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "The workspace currently open doesn't have any folders containing Git repositories. You can initialize a repository on a folder which will enable source control features powered by Git.\n[Initialize Repository](command:git.init)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -139,7 +139,7 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -405,6 +405,6 @@
+@@ -406,6 +406,6 @@
  	"view.workbench.scm.emptyWorkspace": {
 -		"message": "The workspace currently open doesn't have any folders containing Git repositories.\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "The workspace currently open doesn't have any folders containing Git repositories.\n[Add Folder to Workspace](command:workbench.action.addRootFolder)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -148,27 +148,27 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -423,3 +423,3 @@
+@@ -424,3 +424,3 @@
  			"{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -432,3 +432,3 @@
+@@ -433,3 +433,3 @@
  			"{Locked='](command:workbench.action.openSettings?%5B%22git.openRepositoryInParentFolders%22%5D'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -440,3 +440,3 @@
+@@ -441,3 +441,3 @@
  			"{Locked='](command:git.manageUnsafeRepositories'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -448,3 +448,3 @@
+@@ -449,3 +449,3 @@
  			"{Locked='](command:git.manageUnsafeRepositories'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -453,6 +453,6 @@
+@@ -454,6 +454,6 @@
  	"view.workbench.scm.closedRepository": {
 -		"message": "A Git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "A Git repository was found that was previously closed.\n[Reopen Closed Repository](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -177,7 +177,7 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -461,6 +461,6 @@
+@@ -462,6 +462,6 @@
  	"view.workbench.scm.closedRepositories": {
 -		"message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm).",
 +		"message": "Git repositories were found that were previously closed.\n[Reopen Closed Repositories](command:git.reopenClosedRepositories)\nTo learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm).",
@@ -186,12 +186,12 @@ index 4d037b4..7d0a991 100644
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -472,3 +472,3 @@
+@@ -473,3 +473,3 @@
  			"{Locked='](command:git.clone'}",
 -			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code",
 +			"Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!",
  			"Please make sure there is no space between the right bracket and left parenthesis:  ]( this is an internal syntax for links"
-@@ -476,3 +476,3 @@
+@@ -477,3 +477,3 @@
  	},
 -	"view.workbench.learnMore": "To learn more about how to use Git and source control in VS Code [read our docs](https://aka.ms/vscode-scm)."
 +	"view.workbench.learnMore": "To learn more about how to use Git and source control in !!APP_NAME!! [read our docs](https://aka.ms/vscode-scm)."
@@ -361,22 +361,22 @@ index a8bbe5d..00694dc 100644
 +					"comment": "The simpler (?<=\\bProcess\\.|\\bCommandLine\\.) breaks !!APP_NAME!! / Atom, see https://github.com/textmate/swift.tmbundle/issues/29",
  					"name": "support.variable.swift",
 diff --git a/extensions/typescript-language-features/package.nls.json b/extensions/typescript-language-features/package.nls.json
-index ceb221b..09fb65f 100644
+index fb28b2a..788780a 100644
 --- a/extensions/typescript-language-features/package.nls.json
 +++ b/extensions/typescript-language-features/package.nls.json
-@@ -80,4 +80,4 @@
+@@ -82,4 +82,4 @@
  	"configuration.tsserver.experimental.enableProjectDiagnostics": "Enables project wide error reporting.",
 -	"typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use VS Code's locale.",
 -	"typescript.locale.auto": "Use VS Code's configured display language.",
 +	"typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use !!APP_NAME!!'s locale.",
 +	"typescript.locale.auto": "Use !!APP_NAME!!'s configured display language.",
  	"configuration.implicitProjectConfig.module": "Sets the module system for the program. See more: https://www.typescriptlang.org/tsconfig#module.",
-@@ -164,3 +164,3 @@
+@@ -166,3 +166,3 @@
  	"typescript.workspaceSymbols.excludeLibrarySymbols": "Exclude symbols that come from library files in `Go to Symbol in Workspace` results. Requires using TypeScript 5.3+ in the workspace.",
 -	"typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in VS Code.",
 +	"typescript.updateImportsOnFileMove.enabled": "Enable/disable automatic updating of import paths when you rename or move a file in !!APP_NAME!!.",
  	"typescript.updateImportsOnFileMove.enabled.prompt": "Prompt on each rename.",
-@@ -171,5 +171,5 @@
+@@ -173,5 +173,5 @@
  	"configuration.suggest.completeJSDocs": "Enable/disable suggestion to complete JSDoc comments.",
 -	"configuration.tsserver.useVsCodeWatcher": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.",
 +	"configuration.tsserver.useVsCodeWatcher": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.",
@@ -384,7 +384,7 @@ index ceb221b..09fb65f 100644
 -	"configuration.tsserver.watchOptions.vscode": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.",
 +	"configuration.tsserver.watchOptions.vscode": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.",
  	"configuration.tsserver.watchOptions.watchFile": "Strategy for how individual files are watched.",
-@@ -223,6 +223,6 @@
+@@ -225,6 +225,6 @@
  	"configuration.suggest.objectLiteralMethodSnippets.enabled": "Enable/disable snippet completions for methods in object literals.",
 -	"configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that VS Code is running in a trusted context.",
 +	"configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that !!APP_NAME!! is running in a trusted context.",
@@ -393,7 +393,7 @@ index ceb221b..09fb65f 100644
 -	"configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want VS Code to detect a Node installation.",
 +	"configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want !!APP_NAME!! to detect a Node installation.",
  	"configuration.updateImportsOnPaste": "Automatically update imports when pasting code. Requires TypeScript 5.6+.",
-@@ -238,7 +238,7 @@
+@@ -240,7 +240,7 @@
  	"walkthroughs.nodejsWelcome.debugJsFile.title": "Run and Debug your JavaScript",
 -	"walkthroughs.nodejsWelcome.debugJsFile.description": "Once you've installed Node.js, you can run JavaScript programs at a terminal by entering ``node your-file-name.js``\nAnother easy way to run Node.js programs is by using VS Code's debugger which lets you run your code, pause at different points, and help you understand what's going on step-by-step.\n[Start Debugging](command:javascript-walkthrough.commands.debugJsFile)",
 -	"walkthroughs.nodejsWelcome.debugJsFile.altText": "Debug and run your JavaScript code in Node.js with Visual Studio Code.",
@@ -406,10 +406,10 @@ index ceb221b..09fb65f 100644
 +	"walkthroughs.nodejsWelcome.learnMoreAboutJs.altText": "Learn more about JavaScript and Node.js in !!APP_NAME!!."
  }
 diff --git a/extensions/typescript-language-features/src/tsServer/versionManager.ts b/extensions/typescript-language-features/src/tsServer/versionManager.ts
-index 43a2413..ba7934f 100644
+index dcfee49..35e9ef3 100644
 --- a/extensions/typescript-language-features/src/tsServer/versionManager.ts
 +++ b/extensions/typescript-language-features/src/tsServer/versionManager.ts
-@@ -100,3 +100,3 @@ export class TypeScriptVersionManager extends Disposable {
+@@ -111,3 +111,3 @@ export class TypeScriptVersionManager extends Disposable {
  				? '• '
 -				: '') + vscode.l10n.t("Use VS Code's Version"),
 +				: '') + vscode.l10n.t("Use !!APP_NAME!!'s Version"),
@@ -452,7 +452,7 @@ index 207698d..9948527 100644
 +							vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList));
  					} else {
 diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json
-index 10eb7e6..10c5a19 100644
+index f18cecc..e8b10ae 100644
 --- a/extensions/vscode-api-tests/package.json
 +++ b/extensions/vscode-api-tests/package.json
 @@ -2,3 +2,3 @@
@@ -461,7 +461,7 @@ index 10eb7e6..10c5a19 100644
 +  "description": "API tests for !!APP_NAME!!",
    "version": "0.0.1",
 diff --git a/extensions/vscode-colorize-tests/package.json b/extensions/vscode-colorize-tests/package.json
-index 4959276..41d5ae7 100644
+index 1abff3d..5d87461 100644
 --- a/extensions/vscode-colorize-tests/package.json
 +++ b/extensions/vscode-colorize-tests/package.json
 @@ -2,3 +2,3 @@
@@ -487,7 +487,7 @@ index 6680753..da1795a 100644
 +		"c": "broken highlighting in !!APP_NAME!!",
  		"t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less",
 diff --git a/extensions/vscode-test-resolver/package.json b/extensions/vscode-test-resolver/package.json
-index c96c1d5..3288347 100644
+index 0990d7c..e34d7c4 100644
 --- a/extensions/vscode-test-resolver/package.json
 +++ b/extensions/vscode-test-resolver/package.json
 @@ -2,3 +2,3 @@
@@ -539,15 +539,15 @@ index 74d25c6..878e228 100644
 +					progress.report({ message: 'Installing !!APP_NAME!! Server' });
  					serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin, m => outputChannel.appendLine(m));
 diff --git a/src/main.ts b/src/main.ts
-index 7b7e1da..f0a4f6c 100644
+index ec188d0..bb0f727 100644
 --- a/src/main.ts
 +++ b/src/main.ts
-@@ -409,3 +409,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void {
+@@ -408,3 +408,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void {
  		const defaultArgvConfigContent = [
 -			'// This configuration file allows you to pass permanent command line arguments to VS Code.',
 +			'// This configuration file allows you to pass permanent command line arguments to !!APP_NAME!!.',
  			'// Only a subset of arguments is currently supported to reduce the likelihood of breaking',
-@@ -415,6 +415,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void {
+@@ -414,6 +414,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void {
  			'//',
 -			'// NOTE: Changing this file requires a restart of VS Code.',
 +			'// NOTE: Changing this file requires a restart of !!APP_NAME!!.',
@@ -584,7 +584,7 @@ index c256dba..10a79c8 100644
 +export const ProductQualityContext = new RawContextKey<string>('productQualityType', '', localize('productQualityType', "Quality type of !!APP_NAME!!"));
  
 diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
-index 0b2e320..a6a37d1 100644
+index cdf0c67..d567815 100644
 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts
 +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
 @@ -153,3 +153,3 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi
@@ -603,10 +603,10 @@ index 0b2e320..a6a37d1 100644
 +					throw new Error(nls.localize('restartCode', "Please restart !!APP_NAME!! before reinstalling {0}.", this.manifest.displayName || this.manifest.name));
  				}
 diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts
-index 0683f68..7e27873 100644
+index 8740151..dfa35a5 100644
 --- a/src/vs/platform/extensions/common/extensionValidator.ts
 +++ b/src/vs/platform/extensions/common/extensionValidator.ts
-@@ -374,5 +374,5 @@ export function areApiProposalsCompatible(apiProposals: string[], arg1?: any): b
+@@ -374,5 +374,5 @@ export function areApiProposalsCompatible(apiProposals: string[], arg1?: string[
  			if (incompatibleProposals.length === 1) {
 -				notices.push(nls.localize('apiProposalMismatch1', "This extension is using the API proposal '{0}' that is not compatible with the current version of VS Code.", incompatibleProposals[0]));
 +				notices.push(nls.localize('apiProposalMismatch1', "This extension is using the API proposal '{0}' that is not compatible with the current version of !!APP_NAME!!.", incompatibleProposals[0]));
@@ -615,7 +615,7 @@ index 0683f68..7e27873 100644
 +				notices.push(nls.localize('apiProposalMismatch2', "This extension is using the API proposals {0} and '{1}' that are not compatible with the current version of !!APP_NAME!!.",
  					incompatibleProposals.slice(0, incompatibleProposals.length - 1).map(p => `'${p}'`).join(', '),
 diff --git a/src/vs/platform/externalTerminal/node/externalTerminalService.ts b/src/vs/platform/externalTerminal/node/externalTerminalService.ts
-index ca6c82b..56fab2c 100644
+index 4813da4..9f8fd41 100644
 --- a/src/vs/platform/externalTerminal/node/externalTerminalService.ts
 +++ b/src/vs/platform/externalTerminal/node/externalTerminalService.ts
 @@ -17,3 +17,3 @@ import { ITerminalEnvironment } from '../../terminal/common/terminal.js';
@@ -624,10 +624,10 @@ index ca6c82b..56fab2c 100644
 +const TERMINAL_TITLE = nls.localize('console.title', "!!APP_NAME!! Console");
  
 diff --git a/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts b/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts
-index bbd4bee..ba81c21 100644
+index 30339af..da4d704 100644
 --- a/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts
 +++ b/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts
-@@ -338,3 +338,3 @@ const terminalPlatformConfiguration: IConfigurationNode = {
+@@ -339,3 +339,3 @@ const terminalPlatformConfiguration: IConfigurationNode = {
  			scope: ConfigurationScope.APPLICATION,
 -			description: localize('terminal.integrated.inheritEnv', "Whether new shells should inherit their environment from VS Code, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows."),
 +			description: localize('terminal.integrated.inheritEnv', "Whether new shells should inherit their environment from !!APP_NAME!!, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows."),
@@ -642,7 +642,7 @@ index e5fb1ab..bd4740b 100644
 +			description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new !!APP_NAME!! versions in the background on Windows."),
  			included: isWindows && !isWeb
 diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts
-index 48d0d86..cbd5a33 100644
+index ed8043f..ca7a4dc 100644
 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts
 +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts
 @@ -23,3 +23,3 @@ export type UpdateErrorClassification = {
@@ -662,25 +662,25 @@ index b78ebc5..9b0eb56 100644
 +			comment: 'This is used to know how often !!APP_NAME!! has successfully downloaded the update.';
  		};
 diff --git a/src/vs/server/node/server.cli.ts b/src/vs/server/node/server.cli.ts
-index 69b17e1..eaf400a 100644
+index 6a0eacf..2959dad 100644
 --- a/src/vs/server/node/server.cli.ts
 +++ b/src/vs/server/node/server.cli.ts
-@@ -469,3 +469,3 @@ function asExtensionIdOrVSIX(inputs: string[] | undefined) {
+@@ -474,3 +474,3 @@ function asExtensionIdOrVSIX(inputs: string[] | undefined) {
  function fatal(message: string, err: unknown): void {
 -	console.error('Unable to connect to VS Code server: ' + message);
 +	console.error('Unable to connect to !!APP_NAME!! server: ' + message);
  	console.error(err);
 diff --git a/src/vs/workbench/api/browser/mainThreadAuthentication.ts b/src/vs/workbench/api/browser/mainThreadAuthentication.ts
-index af3845c..0f75728 100644
+index c982088..5e3d33e 100644
 --- a/src/vs/workbench/api/browser/mainThreadAuthentication.ts
 +++ b/src/vs/workbench/api/browser/mainThreadAuthentication.ts
-@@ -504,3 +504,3 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu
+@@ -529,3 +529,3 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu
  				owner: 'TylerLeonhardt';
 -				comment: 'Used to see which extensions are using the VSCode client id override';
 +				comment: 'Used to see which extensions are using the !!APP_NAME!! client id override';
  				extensionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The extension id.' };
 diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts
-index c0ff40a..5b508f3 100644
+index ed0d099..0acc7b0 100644
 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts
 +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts
 @@ -45,3 +45,3 @@ const viewsContainerSchema: IJSONSchema = {
@@ -717,6 +717,15 @@ index 0d71384..ae8d169 100644
 -	test('Opening a notebook results in VS Code firing the event onDidChangeActiveNotebookEditor twice #118470', function () {
 +	test('Opening a notebook results in !!APP_NAME!! firing the event onDidChangeActiveNotebookEditor twice #118470', function () {
  		let count = 0;
+diff --git a/src/vs/workbench/browser/actions/developerActions.ts b/src/vs/workbench/browser/actions/developerActions.ts
+index 1fda3db..bbadf28 100644
+--- a/src/vs/workbench/browser/actions/developerActions.ts
++++ b/src/vs/workbench/browser/actions/developerActions.ts
+@@ -688,3 +688,3 @@ class PolicyDiagnosticsAction extends Action2 {
+ 
+-		let content = '# VS Code Policy Diagnostics\n\n';
++		let content = '# !!APP_NAME!! Policy Diagnostics\n\n';
+ 		content += '*WARNING: This file may contain sensitive information.*\n\n';
 diff --git a/src/vs/workbench/browser/actions/helpActions.ts b/src/vs/workbench/browser/actions/helpActions.ts
 index 2487213..a22b4d1 100644
 --- a/src/vs/workbench/browser/actions/helpActions.ts
@@ -736,7 +745,7 @@ index e342f83..7c314e6 100644
 +		throw new Error('Unable to create the !!APP_NAME!! workbench more than once.');
  	} else {
 diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts
-index d049eee..d1c4265 100644
+index 8715c5e..9070d95 100644
 --- a/src/vs/workbench/browser/workbench.contribution.ts
 +++ b/src/vs/workbench/browser/workbench.contribution.ts
 @@ -724,3 +724,3 @@ const registry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Con
@@ -744,22 +753,85 @@ index d049eee..d1c4265 100644
 -		localize('appName', "`${appName}`: e.g. VS Code."),
 +		localize('appName', "`${appName}`: e.g. !!APP_NAME!!."),
  		localize('remoteName', "`${remoteName}`: e.g. SSH"),
-diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup.ts b/src/vs/workbench/contrib/chat/browser/chatSetup.ts
-index 45215b1..431716c 100644
---- a/src/vs/workbench/contrib/chat/browser/chatSetup.ts
-+++ b/src/vs/workbench/contrib/chat/browser/chatSetup.ts
-@@ -158,3 +158,3 @@ class SetupAgent extends Disposable implements IChatAgentImplementation {
+diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts
+index c0528fe..d1fd07f 100644
+--- a/src/vs/workbench/common/contextkeys.ts
++++ b/src/vs/workbench/common/contextkeys.ts
+@@ -39,3 +39,3 @@ export const EmbedderIdentifierContext = new RawContextKey<string | undefined>('
+ 
+-export const InAutomationContext = new RawContextKey<boolean>('inAutomation', false, localize('inAutomation', "Whether VS Code is running under automation/smoke test"));
++export const InAutomationContext = new RawContextKey<boolean>('inAutomation', false, localize('inAutomation', "Whether !!APP_NAME!! is running under automation/smoke test"));
+ 
+diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts
+index ee0b4a4..38040b2 100644
+--- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts
++++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts
+@@ -409,3 +409,3 @@ configurationRegistry.registerConfiguration({
+ 				nls.localize('chat.mcp.access.none', "No access to MCP servers."),
+-				nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."),
++				nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."),
+ 				nls.localize('chat.mcp.access.any', "Allow access to any installed MCP server.")
+@@ -436,3 +436,3 @@ configurationRegistry.registerConfiguration({
+ 						{
+-							key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."),
++							key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."),
+ 						},
+diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts
+index 7e6f2a9..00be07b 100644
+--- a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts
++++ b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts
+@@ -104,3 +104,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation {
  			// Register VSCode agent
 -			const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Chat, undefined, context, controller);
 +			const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Chat, undefined, context, controller);
  			disposables.add(vscodeDisposable);
-@@ -175,4 +175,4 @@ class SetupAgent extends Disposable implements IChatAgentImplementation {
+@@ -121,4 +121,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation {
  				displayName: localize('setupToolDisplayName', "New Workspace"),
--				modelDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"),
+-				modelDescription: 'Scaffold a new workspace in VS Code',
 -				userDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"),
-+				modelDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"),
++				modelDescription: 'Scaffold a new workspace in !!APP_NAME!!',
 +				userDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"),
  				canBeReferencedInPrompt: true,
+diff --git a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts
+index 8823457..9beb9a7 100644
+--- a/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts
++++ b/src/vs/workbench/contrib/chat/browser/languageModelToolsService.ts
+@@ -142,3 +142,3 @@ export class LanguageModelToolsService extends Disposable implements ILanguageMo
+ 				icon: ThemeIcon.fromId(Codicon.vscode.id),
+-				description: localize('copilot.toolSet.vscode.description', 'Use VS Code features'),
++				description: localize('copilot.toolSet.vscode.description', 'Use !!APP_NAME!! features'),
+ 			}
+diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts
+index cb05edd..9d91520 100644
+--- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts
++++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts
+@@ -179,5 +179,5 @@ export class PromptValidator {
+ 							if (validGithubCopilotAttributeNames.value.has(attribute.key)) {
+-								report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in VS Code.", attribute.key), attribute.range, MarkerSeverity.Info));
++								report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in !!APP_NAME!!.", attribute.key), attribute.range, MarkerSeverity.Info));
+ 							} else {
+-								report(toMarker(localize('promptValidator.unknownAttribute.vscode-agent', "Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.", attribute.key, supportedNames.value), attribute.range, MarkerSeverity.Warning));
++								report(toMarker(localize('promptValidator.unknownAttribute.vscode-agent', "Attribute '{0}' is not supported in !!APP_NAME!! agent files. Supported: {1}.", attribute.key, supportedNames.value), attribute.range, MarkerSeverity.Warning));
+ 							}
+diff --git a/src/vs/workbench/contrib/chat/test/browser/languageModelToolsService.test.ts b/src/vs/workbench/contrib/chat/test/browser/languageModelToolsService.test.ts
+index 0fcdd88..55ac444 100644
+--- a/src/vs/workbench/contrib/chat/test/browser/languageModelToolsService.test.ts
++++ b/src/vs/workbench/contrib/chat/test/browser/languageModelToolsService.test.ts
+@@ -1072,3 +1072,3 @@ suite('LanguageModelToolsService', () => {
+ 			const fullReferenceNames = service.toFullReferenceNames(result).sort();
+-			assert.deepStrictEqual(fullReferenceNames, [SpecedToolAliases.agent, SpecedToolAliases.execute].sort(), 'toFullReferenceNames should return the VS Code tool names');
++			assert.deepStrictEqual(fullReferenceNames, [SpecedToolAliases.agent, SpecedToolAliases.execute].sort(), 'toFullReferenceNames should return the !!APP_NAME!! tool names');
+ 
+@@ -1086,3 +1086,3 @@ suite('LanguageModelToolsService', () => {
+ 			const fullReferenceNames = service.toFullReferenceNames(result).sort();
+-			assert.deepStrictEqual(fullReferenceNames, ['github/*', 'playwright/*'], 'toFullReferenceNames should return the VS Code tool names');
++			assert.deepStrictEqual(fullReferenceNames, ['github/*', 'playwright/*'], 'toFullReferenceNames should return the !!APP_NAME!! tool names');
+ 
+@@ -1180,3 +1180,3 @@ suite('LanguageModelToolsService', () => {
+ 			const fullReferenceNames = service.toFullReferenceNames(result).sort();
+-			assert.deepStrictEqual(fullReferenceNames, ['github/create_branch'], 'toFullReferenceNames should return the VS Code tool names');
++			assert.deepStrictEqual(fullReferenceNames, ['github/create_branch'], 'toFullReferenceNames should return the !!APP_NAME!! tool names');
+ 
 diff --git a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts
 index 7504a9c..2e485bb 100644
 --- a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts
@@ -770,30 +842,30 @@ index 7504a9c..2e485bb 100644
 +						description: nls.localize('debugServer', "For debug extension development only: if a port is specified !!APP_NAME!! tries to connect to a debug adapter running in server mode"),
  						default: 4711
 diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
-index 012c4d3..39dcb1b 100644
+index 147d30b..8a23398 100644
 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
 +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
-@@ -346,3 +346,3 @@ CommandsRegistry.registerCommand({
+@@ -353,3 +353,3 @@ CommandsRegistry.registerCommand({
  				description: '(optional) Options for installing the extension. Object with the following properties: ' +
 -					'`installOnlyNewlyAddedFromExtensionPackVSIX`: When enabled, VS Code installs only newly added extensions from the extension pack VSIX. This option is considered only when installing VSIX. ',
 +					'`installOnlyNewlyAddedFromExtensionPackVSIX`: When enabled, !!APP_NAME!! installs only newly added extensions from the extension pack VSIX. This option is considered only when installing VSIX. ',
  				isOptional: true,
-@@ -353,3 +353,3 @@ CommandsRegistry.registerCommand({
+@@ -360,3 +360,3 @@ CommandsRegistry.registerCommand({
  							'type': 'boolean',
 -							'description': localize('workbench.extensions.installExtension.option.installOnlyNewlyAddedFromExtensionPackVSIX', "When enabled, VS Code installs only newly added extensions from the extension pack VSIX. This option is considered only while installing a VSIX."),
 +							'description': localize('workbench.extensions.installExtension.option.installOnlyNewlyAddedFromExtensionPackVSIX', "When enabled, !!APP_NAME!! installs only newly added extensions from the extension pack VSIX. This option is considered only while installing a VSIX."),
  							default: false
-@@ -358,3 +358,3 @@ CommandsRegistry.registerCommand({
+@@ -365,3 +365,3 @@ CommandsRegistry.registerCommand({
  							'type': 'boolean',
 -							'description': localize('workbench.extensions.installExtension.option.installPreReleaseVersion', "When enabled, VS Code installs the pre-release version of the extension if available."),
 +							'description': localize('workbench.extensions.installExtension.option.installPreReleaseVersion', "When enabled, !!APP_NAME!! installs the pre-release version of the extension if available."),
  							default: false
-@@ -363,3 +363,3 @@ CommandsRegistry.registerCommand({
+@@ -370,3 +370,3 @@ CommandsRegistry.registerCommand({
  							'type': 'boolean',
 -							'description': localize('workbench.extensions.installExtension.option.donotSync', "When enabled, VS Code do not sync this extension when Settings Sync is on."),
 +							'description': localize('workbench.extensions.installExtension.option.donotSync', "When enabled, !!APP_NAME!! do not sync this extension when Settings Sync is on."),
  							default: false
-@@ -888,4 +888,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
+@@ -895,4 +895,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
  						Severity.Info,
 -						vsixs.length > 1 ? localize('InstallVSIXs.successReload', "Completed installing extensions. Please reload Visual Studio Code to enable them.")
 -							: localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload Visual Studio Code to enable it."),
@@ -801,7 +873,7 @@ index 012c4d3..39dcb1b 100644
 +							: localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload VSCodium to enable it."),
  						[{
 diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
-index 96c8434..cfb1836 100644
+index 8daf558..583136a 100644
 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
 +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
 @@ -109,3 +109,3 @@ export class PromptExtensionInstallFailureAction extends Action {
@@ -852,6 +924,15 @@ index 818e662..2d2ead7 100644
 -	'\t// List of extensions recommended by VS Code that should not be recommended for users of this workspace.',
 +	'\t// List of extensions recommended by !!APP_NAME!! that should not be recommended for users of this workspace.',
  	'\t"unwantedRecommendations": [',
+diff --git a/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts b/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts
+index 2d86eda..35e8703 100644
+--- a/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts
++++ b/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts
+@@ -23,3 +23,3 @@ export const SearchExtensionsToolData: IToolData = {
+ 	modelDescription: 'This is a tool for browsing Visual Studio Code Extensions Marketplace. It allows the model to search for extensions and retrieve detailed information about them. The model should use this tool whenever it needs to discover extensions or resolve information about known ones. To use the tool, the model has to provide the category of the extensions, relevant search keywords, or known extension IDs. Note that search results may include false positives, so reviewing and filtering is recommended.',
+-	userDescription: localize('searchExtensionsTool.userDescription', 'Search for VS Code extensions'),
++	userDescription: localize('searchExtensionsTool.userDescription', 'Search for !!APP_NAME!! extensions'),
+ 	source: ToolDataSource.Internal,
 diff --git a/src/vs/workbench/contrib/externalUriOpener/common/configuration.ts b/src/vs/workbench/contrib/externalUriOpener/common/configuration.ts
 index f54ddfe..946de6b 100644
 --- a/src/vs/workbench/contrib/externalUriOpener/common/configuration.ts
@@ -882,6 +963,15 @@ index 050dde4..a8a61bd 100644
 -				description: localize2('configureLocaleDescription', "Changes the locale of VS Code based on installed language packs. Common languages include French, Chinese, Spanish, Japanese, German, Korean, and more.")
 +				description: localize2('configureLocaleDescription', "Changes the locale of !!APP_NAME!! based on installed language packs. Common languages include French, Chinese, Spanish, Japanese, German, Korean, and more.")
  			}
+diff --git a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts
+index d8ddc37..3875647 100644
+--- a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts
++++ b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts
+@@ -262,3 +262,3 @@ export class McpServersListView extends AbstractExtensionsListView<IWorkbenchMcp
+ 			new MarkdownString(
+-				localize('mcp.welcome.descriptionWithLink', "Browse and install [Model Context Protocol (MCP) servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) directly from VS Code to extend agent mode with extra tools for connecting to databases, invoking APIs and performing specialized tasks."),
++				localize('mcp.welcome.descriptionWithLink', "Browse and install [Model Context Protocol (MCP) servers](https://code.visualstudio.com/docs/copilot/customization/mcp-servers) directly from !!APP_NAME!! to extend agent mode with extra tools for connecting to databases, invoking APIs and performing specialized tasks."),
+ 				{ isTrusted: { enabledCommands: ['workbench.action.openSettings'] } },
 diff --git a/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts b/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts
 index b533feb..112d695 100644
 --- a/src/vs/workbench/contrib/preferences/browser/keyboardLayoutPicker.ts
@@ -894,10 +984,10 @@ index b533feb..112d695 100644
 +	`// ${nls.localize('doc', 'Open !!APP_NAME!! and run "Developer: Inspect Key Mappings (JSON)" from Command Palette.')}`,
  	``,
 diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
-index d08a8ee..eb50690 100644
+index 30fce10..0e2e883 100644
 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
 +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
-@@ -3470,3 +3470,3 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
+@@ -3488,3 +3488,3 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
  						if (response.code && response.code === TerminateResponseCode.ProcessNotFound) {
 -							this._notificationService.error(nls.localize('TerminateAction.noProcess', 'The launched process doesn\'t exist anymore. If the task spawned background tasks exiting VS Code might result in orphaned processes.'));
 +							this._notificationService.error(nls.localize('TerminateAction.noProcess', 'The launched process doesn\'t exist anymore. If the task spawned background tasks exiting !!APP_NAME!! might result in orphaned processes.'));
@@ -926,59 +1016,100 @@ index d917ab2..bb39d83 100644
 +			description: nls.localize('JsonSchema.tasks.promptOnClose', 'Whether the user is prompted when !!APP_NAME!! closes with a running task.'),
  			default: false
 diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts
-index 7c0f6ba..953be85 100644
+index 628e131..9de7081 100644
 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts
 +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts
-@@ -212,3 +212,3 @@ export class TerminalViewPane extends ViewPane {
+@@ -210,3 +210,3 @@ export class TerminalViewPane extends ViewPane {
  					}];
 -					this._notificationService.prompt(Severity.Warning, nls.localize('terminal.monospaceOnly', "The terminal only supports monospace fonts. Be sure to restart VS Code if this is a newly installed font."), choices);
 +					this._notificationService.prompt(Severity.Warning, nls.localize('terminal.monospaceOnly', "The terminal only supports monospace fonts. Be sure to restart !!APP_NAME!! if this is a newly installed font."), choices);
  				}
+diff --git a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh
+index 8ec742e..dbf1ebf 100644
+--- a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh
++++ b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh
+@@ -101,3 +101,3 @@ if [ -z "${VSCODE_PYTHON_AUTOACTIVATE_GUARD:-}" ]; then
+ 			__vsc_activation_status=$?
+-			builtin printf '\x1b[0m\x1b[7m * \x1b[0;103m VS Code Python bash activation failed with exit code %d \x1b[0m' "$__vsc_activation_status"
++			builtin printf '\x1b[0m\x1b[7m * \x1b[0;103m !!APP_NAME!! Python bash activation failed with exit code %d \x1b[0m' "$__vsc_activation_status"
+ 		fi
+diff --git a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh
+index f32b74f..34cf51f 100644
+--- a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh
++++ b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh
+@@ -78,3 +78,3 @@ if [ -z "${VSCODE_PYTHON_AUTOACTIVATE_GUARD:-}" ]; then
+ 			__vsc_activation_status=$?
+-			builtin printf '\x1b[0m\x1b[7m * \x1b[0;103m VS Code Python zsh activation failed with exit code %d \x1b[0m' "$__vsc_activation_status"
++			builtin printf '\x1b[0m\x1b[7m * \x1b[0;103m !!APP_NAME!! Python zsh activation failed with exit code %d \x1b[0m' "$__vsc_activation_status"
+ 		fi
+diff --git a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.fish b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.fish
+index 51e0d3a..4bbf793 100644
+--- a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.fish
++++ b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.fish
+@@ -87,3 +87,3 @@ if not set -q VSCODE_PYTHON_AUTOACTIVATE_GUARD
+ 		if test $__vsc_activation_status -ne 0
+-			builtin printf '\x1b[0m\x1b[7m * \x1b[0;103m VS Code Python fish activation failed with exit code %d \x1b[0m \n' "$__vsc_activation_status"
++			builtin printf '\x1b[0m\x1b[7m * \x1b[0;103m !!APP_NAME!! Python fish activation failed with exit code %d \x1b[0m \n' "$__vsc_activation_status"
+ 		end
+@@ -99,3 +99,3 @@ end
+ # Helper function
+-function __vsc_esc -d "Emit escape sequences for VS Code shell integration"
++function __vsc_esc -d "Emit escape sequences for !!APP_NAME!! shell integration"
+ 	builtin printf "\e]633;%s\a" (string join ";" -- $argv)
+diff --git a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1 b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1
+index 3c37def..739b560 100644
+--- a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1
++++ b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1
+@@ -88,3 +88,3 @@ if (-not $env:VSCODE_PYTHON_AUTOACTIVATE_GUARD) {
+ 			$activationError = $_
+-			Write-Host "`e[0m`e[7m * `e[0;103m VS Code Python powershell activation failed with exit code $($activationError.Exception.Message) `e[0m"
++			Write-Host "`e[0m`e[7m * `e[0;103m !!APP_NAME!! Python powershell activation failed with exit code $($activationError.Exception.Message) `e[0m"
+ 		}
 diff --git a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
-index bd3ef39..2524d95 100644
+index 215f976..e9f73df 100644
 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
 +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
-@@ -310,3 +310,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -311,3 +311,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  	[TerminalSettingId.DetectLocale]: {
 -		markdownDescription: localize('terminal.integrated.detectLocale', "Controls whether to detect and set the `$LANG` environment variable to a UTF-8 compliant option since VS Code's terminal only supports UTF-8 encoded data coming from the shell."),
 +		markdownDescription: localize('terminal.integrated.detectLocale', "Controls whether to detect and set the `$LANG` environment variable to a UTF-8 compliant option since !!APP_NAME!!'s terminal only supports UTF-8 encoded data coming from the shell."),
  		type: 'string',
-@@ -324,3 +324,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -325,3 +325,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  		markdownEnumDescriptions: [
 -			localize('terminal.integrated.gpuAcceleration.auto', "Let VS Code detect which renderer will give the best experience."),
 +			localize('terminal.integrated.gpuAcceleration.auto', "Let !!APP_NAME!! detect which renderer will give the best experience."),
  			localize('terminal.integrated.gpuAcceleration.on', "Enable GPU acceleration within the terminal."),
-@@ -412,3 +412,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -413,3 +413,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  			'terminal.integrated.commandsToSkipShell',
 -			"A set of command IDs whose keybindings will not be sent to the shell but instead always be handled by VS Code. This allows keybindings that would normally be consumed by the shell to act instead the same as when the terminal is not focused, for example `Ctrl+P` to launch Quick Open.\n\n&nbsp;\n\nMany commands are skipped by default. To override a default and pass that command's keybinding to the shell instead, add the command prefixed with the `-` character. For example add `-workbench.action.quickOpen` to allow `Ctrl+P` to reach the shell.\n\n&nbsp;\n\nThe following list of default skipped commands is truncated when viewed in Settings Editor. To see the full list, {1} and search for the first command from the list below.\n\n&nbsp;\n\nDefault Skipped Commands:\n\n{0}",
 +			"A set of command IDs whose keybindings will not be sent to the shell but instead always be handled by !!APP_NAME!!. This allows keybindings that would normally be consumed by the shell to act instead the same as when the terminal is not focused, for example `Ctrl+P` to launch Quick Open.\n\n&nbsp;\n\nMany commands are skipped by default. To override a default and pass that command's keybinding to the shell instead, add the command prefixed with the `-` character. For example add `-workbench.action.quickOpen` to allow `Ctrl+P` to reach the shell.\n\n&nbsp;\n\nThe following list of default skipped commands is truncated when viewed in Settings Editor. To see the full list, {1} and search for the first command from the list below.\n\n&nbsp;\n\nDefault Skipped Commands:\n\n{0}",
  			DEFAULT_COMMANDS_TO_SKIP_SHELL.sort().map(command => `- ${command}`).join('\n'),
-@@ -424,3 +424,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -425,3 +425,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  	[TerminalSettingId.AllowChords]: {
 -		markdownDescription: localize('terminal.integrated.allowChords', "Whether or not to allow chord keybindings in the terminal. Note that when this is true and the keystroke results in a chord it will bypass {0}, setting this to false is particularly useful when you want ctrl+k to go to your shell (not VS Code).", '`#terminal.integrated.commandsToSkipShell#`'),
 +		markdownDescription: localize('terminal.integrated.allowChords', "Whether or not to allow chord keybindings in the terminal. Note that when this is true and the keystroke results in a chord it will bypass {0}, setting this to false is particularly useful when you want ctrl+k to go to your shell (not !!APP_NAME!!).", '`#terminal.integrated.commandsToSkipShell#`'),
  		type: 'boolean',
-@@ -435,3 +435,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -436,3 +436,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  		restricted: true,
 -		markdownDescription: localize('terminal.integrated.env.osx', "Object with environment variables that will be added to the VS Code process to be used by the terminal on macOS. Set to `null` to delete the environment variable."),
 +		markdownDescription: localize('terminal.integrated.env.osx', "Object with environment variables that will be added to the !!APP_NAME!! process to be used by the terminal on macOS. Set to `null` to delete the environment variable."),
  		type: 'object',
-@@ -444,3 +444,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -445,3 +445,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  		restricted: true,
 -		markdownDescription: localize('terminal.integrated.env.linux', "Object with environment variables that will be added to the VS Code process to be used by the terminal on Linux. Set to `null` to delete the environment variable."),
 +		markdownDescription: localize('terminal.integrated.env.linux', "Object with environment variables that will be added to the !!APP_NAME!! process to be used by the terminal on Linux. Set to `null` to delete the environment variable."),
  		type: 'object',
-@@ -453,3 +453,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -454,3 +454,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  		restricted: true,
 -		markdownDescription: localize('terminal.integrated.env.windows', "Object with environment variables that will be added to the VS Code process to be used by the terminal on Windows. Set to `null` to delete the environment variable."),
 +		markdownDescription: localize('terminal.integrated.env.windows', "Object with environment variables that will be added to the !!APP_NAME!! process to be used by the terminal on Windows. Set to `null` to delete the environment variable."),
  		type: 'object',
-@@ -471,3 +471,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -472,3 +472,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  	[TerminalSettingId.WindowsUseConptyDll]: {
 -		markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.22.250204002) shipped with VS Code, instead of the one bundled with Windows."),
 +		markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.22.250204002) shipped with !!APP_NAME!!, instead of the one bundled with Windows."),
  		type: 'boolean',
-@@ -578,3 +578,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
+@@ -579,3 +579,3 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
  		restricted: true,
 -		markdownDescription: localize('terminal.integrated.shellIntegration.enabled', "Determines whether or not shell integration is auto-injected to support features like enhanced command tracking and current working directory detection. \n\nShell integration works by injecting the shell with a startup script. The script gives VS Code insight into what is happening within the terminal.\n\nSupported shells:\n\n- Linux/macOS: bash, fish, pwsh, zsh\n - Windows: pwsh, git bash\n\nThis setting applies only when terminals are created, so you will need to restart your terminals for it to take effect.\n\n Note that the script injection may not work if you have custom arguments defined in the terminal profile, have enabled {1}, have a [complex bash `PROMPT_COMMAND`](https://code.visualstudio.com/docs/editor/integrated-terminal#_complex-bash-promptcommand), or other unsupported setup. To disable decorations, see {0}", '`#terminal.integrated.shellIntegration.decorationsEnabled#`', '`#editor.accessibilitySupport#`'),
 +		markdownDescription: localize('terminal.integrated.shellIntegration.enabled', "Determines whether or not shell integration is auto-injected to support features like enhanced command tracking and current working directory detection. \n\nShell integration works by injecting the shell with a startup script. The script gives !!APP_NAME!! insight into what is happening within the terminal.\n\nSupported shells:\n\n- Linux/macOS: bash, fish, pwsh, zsh\n - Windows: pwsh, git bash\n\nThis setting applies only when terminals are created, so you will need to restart your terminals for it to take effect.\n\n Note that the script injection may not work if you have custom arguments defined in the terminal profile, have enabled {1}, have a [complex bash `PROMPT_COMMAND`](https://code.visualstudio.com/docs/editor/integrated-terminal#_complex-bash-promptcommand), or other unsupported setup. To disable decorations, see {0}", '`#terminal.integrated.shellIntegration.decorationsEnabled#`', '`#editor.accessibilitySupport#`'),
@@ -992,8 +1123,35 @@ index 4979520..30ae11b 100644
 -		markdownDescription: localize('terminal.integrated.autoReplies', "A set of messages that, when encountered in the terminal, will be automatically responded to. Provided the message is specific enough, this can help automate away common responses.\n\nRemarks:\n\n- Use {0} to automatically respond to the terminate batch job prompt on Windows.\n- The message includes escape sequences so the reply might not happen with styled text.\n- Each reply can only happen once every second.\n- Use {1} in the reply to mean the enter key.\n- To unset a default key, set the value to null.\n- Restart VS Code if new don't apply.", '`"Terminate batch job (Y/N)": "Y\\r"`', '`"\\r"`'),
 +		markdownDescription: localize('terminal.integrated.autoReplies', "A set of messages that, when encountered in the terminal, will be automatically responded to. Provided the message is specific enough, this can help automate away common responses.\n\nRemarks:\n\n- Use {0} to automatically respond to the terminate batch job prompt on Windows.\n- The message includes escape sequences so the reply might not happen with styled text.\n- Each reply can only happen once every second.\n- Use {1} in the reply to mean the enter key.\n- To unset a default key, set the value to null.\n- Restart !!APP_NAME!! if new don't apply.", '`"Terminate batch job (Y/N)": "Y\\r"`', '`"\\r"`'),
  		type: 'object',
+diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts
+index acc753f..8e791ff 100644
+--- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts
++++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts
+@@ -240,3 +240,3 @@ export const CreateAndRunTaskToolData: IToolData = {
+ 						'type': 'array',
+-						'description': `The problem matcher to use to parse task output for errors and warnings. Can be a predefined matcher like '$tsc' (TypeScript), '$eslint - stylish', '$gcc', etc., or a custom pattern defined in tasks.json. This helps VS Code display errors in the Problems panel and enables quick navigation to error locations.`,
++						'description': `The problem matcher to use to parse task output for errors and warnings. Can be a predefined matcher like '$tsc' (TypeScript), '$eslint - stylish', '$gcc', etc., or a custom pattern defined in tasks.json. This helps !!APP_NAME!! display errors in the Problems panel and enables quick navigation to error locations.`,
+ 						'items': {
+diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts
+index e04ec3a..f72ed53 100644
+--- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts
++++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts
+@@ -152,3 +152,3 @@ export const RunTaskToolData: IToolData = {
+ 	displayName: localize('runInTerminalTool.displayName', 'Run Task'),
+-	modelDescription: 'Runs a VS Code task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the run_in_terminal tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.',
++	modelDescription: 'Runs a !!APP_NAME!! task.\n\n- If you see that an appropriate task exists for building or running code, prefer to use this tool to run the task instead of using the run_in_terminal tool.\n- Make sure that any appropriate build or watch task is running before trying to run tests or execute code.\n- If the user asks to run a task, use this tool to do so.',
+ 	userDescription: localize('runInTerminalTool.userDescription', 'Run tasks in the workspace'),
+diff --git a/src/vs/workbench/contrib/terminalContrib/voice/browser/terminalVoiceActions.ts b/src/vs/workbench/contrib/terminalContrib/voice/browser/terminalVoiceActions.ts
+index 3e185e3..e855bef 100644
+--- a/src/vs/workbench/contrib/terminalContrib/voice/browser/terminalVoiceActions.ts
++++ b/src/vs/workbench/contrib/terminalContrib/voice/browser/terminalVoiceActions.ts
+@@ -51,3 +51,3 @@ export function registerTerminalVoiceActions() {
+ 			} else {
+-				message = localize('terminal.voice.installSpeechExtension', "Would you like to install 'VS Code Speech' extension from 'Microsoft'?");
++				message = localize('terminal.voice.installSpeechExtension', "Would you like to install '!!APP_NAME!! Speech' extension from 'Microsoft'?");
+ 				run = () => commandService.executeCommand('workbench.extensions.installExtension', 'ms-vscode.vscode-speech');
 diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts
-index a20d7ae..6861b35 100644
+index cc12ca6..056d2d8 100644
 --- a/src/vs/workbench/contrib/update/browser/update.ts
 +++ b/src/vs/workbench/contrib/update/browser/update.ts
 @@ -583,4 +583,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor
@@ -1023,7 +1181,7 @@ index 393c8c3..9268a6c 100644
 +		content += `// By default, !!APP_NAME!! trusts "localhost".\n`;
  	}
 diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
-index 17258bd..6d4a638 100644
+index b63e894..2798ab1 100644
 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
 +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
 @@ -49,3 +49,3 @@ registerAction2(class extends Action2 {
@@ -1031,7 +1189,7 @@ index 17258bd..6d4a638 100644
 -				description: localize2('minWelcomeDescription', 'Opens a Walkthrough to help you get started in VS Code.')
 +				description: localize2('minWelcomeDescription', 'Opens a Walkthrough to help you get started in !!APP_NAME!!.')
  			}
-@@ -310,3 +310,3 @@ configurationRegistry.registerConfiguration({
+@@ -311,3 +311,3 @@ configurationRegistry.registerConfiguration({
  				localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."),
 -				localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with VS Code and extensions."),
 +				localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with !!APP_NAME!! and extensions."),
@@ -1228,6 +1386,20 @@ index c512b64..dfa2150 100644
 -				markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within VS Code. When used with `#{0}#`, you can enable the full functionality of VS Code without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES),
 +				markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within !!APP_NAME!!. When used with `#{0}#`, you can enable the full functionality of !!APP_NAME!! without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES),
  				tags: [WORKSPACE_TRUST_SETTING_TAG],
+diff --git a/src/vs/workbench/electron-browser/desktop.contribution.ts b/src/vs/workbench/electron-browser/desktop.contribution.ts
+index 5fad6f9..4edfd81 100644
+--- a/src/vs/workbench/electron-browser/desktop.contribution.ts
++++ b/src/vs/workbench/electron-browser/desktop.contribution.ts
+@@ -447,3 +447,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-b
+ 				type: 'boolean',
+-				description: localize('argv.disableChromiumSandbox', "Disables the Chromium sandbox. This is useful when running VS Code as elevated on Linux and running under Applocker on Windows.")
++				description: localize('argv.disableChromiumSandbox', "Disables the Chromium sandbox. This is useful when running !!APP_NAME!! as elevated on Linux and running under Applocker on Windows.")
+ 			},
+@@ -451,3 +451,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-b
+ 				type: 'boolean',
+-				description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running VS Code extension tests or when you're experiencing difficulties with the credential store.")
++				description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running !!APP_NAME!! extension tests or when you're experiencing difficulties with the credential store.")
+ 			},
 diff --git a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
 index df1a6e3..14db691 100644
 --- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
@@ -1238,7 +1410,7 @@ index df1a6e3..14db691 100644
 +		const productName = localize('!!APP_NAME!! for Web', "{0} for the Web", this.productService.nameLong);
  		const virtualWorkspaceSupport = this.extensionManifestPropertiesService.getExtensionVirtualWorkspaceSupportType(manifest);
 diff --git a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts
-index c1fc3e3..1a6ff88 100644
+index f6c18c6..6d6b39c 100644
 --- a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts
 +++ b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts
 @@ -181,3 +181,3 @@ export const schema: IJSONSchema = {
@@ -1280,21 +1452,30 @@ index c1fc3e3..1a6ff88 100644
 -			description: nls.localize('vscode.extension.activationEvents', 'Activation events for the VS Code extension.'),
 +			description: nls.localize('vscode.extension.activationEvents', 'Activation events for the !!APP_NAME!! extension.'),
  			type: 'array',
-@@ -428,3 +428,3 @@ export const schema: IJSONSchema = {
+@@ -423,3 +423,3 @@ export const schema: IJSONSchema = {
  						label: '*',
 -						description: nls.localize('vscode.extension.activationEvents.star', 'An activation event emitted on VS Code startup. To ensure a great end user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.'),
 +						description: nls.localize('vscode.extension.activationEvents.star', 'An activation event emitted on !!APP_NAME!! startup. To ensure a great end user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.'),
  						body: '*'
-@@ -600,3 +600,3 @@ export const schema: IJSONSchema = {
+@@ -595,3 +595,3 @@ export const schema: IJSONSchema = {
  				'vscode:prepublish': {
 -					description: nls.localize('vscode.extension.scripts.prepublish', 'Script executed before the package is published as a VS Code extension.'),
 +					description: nls.localize('vscode.extension.scripts.prepublish', 'Script executed before the package is published as a !!APP_NAME!! extension.'),
  					type: 'string'
-@@ -604,3 +604,3 @@ export const schema: IJSONSchema = {
+@@ -599,3 +599,3 @@ export const schema: IJSONSchema = {
  				'vscode:uninstall': {
 -					description: nls.localize('vscode.extension.scripts.uninstall', 'Uninstall hook for VS Code extension. Script that gets executed when the extension is completely uninstalled from VS Code which is when VS Code is restarted (shutdown and start) after the extension is uninstalled. Only Node scripts are supported.'),
 +					description: nls.localize('vscode.extension.scripts.uninstall', 'Uninstall hook for !!APP_NAME!! extension. Script that gets executed when the extension is completely uninstalled from !!APP_NAME!! which is when !!APP_NAME!! is restarted (shutdown and start) after the extension is uninstalled. Only Node scripts are supported.'),
  					type: 'string'
+diff --git a/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts b/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts
+index 3080657..ca30404 100644
+--- a/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts
++++ b/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts
+@@ -167,3 +167,3 @@ export class NativeExtensionService extends AbstractExtensionService implements
+ 					[{
+-						label: nls.localize('relaunch', "Relaunch VS Code"),
++						label: nls.localize('relaunch', "Relaunch !!APP_NAME!!"),
+ 						run: () => {
 diff --git a/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts b/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts
 index cc56d9a..f446b8e 100644
 --- a/src/vs/workbench/services/userDataProfile/browser/userDataProfileManagement.ts

+ 21 - 19
patches/cli.patch

@@ -58,10 +58,10 @@ index 7d152c0..c0f2fb2 100644
 +		Ok(server_name)
  	}
 diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs
-index cf00bc4..b564330 100644
+index bbabadc..b454d0e 100644
 --- a/cli/src/tunnels/code_server.rs
 +++ b/cli/src/tunnels/code_server.rs
-@@ -457,3 +457,3 @@ impl<'a> ServerBuilder<'a> {
+@@ -462,3 +462,3 @@ impl<'a> ServerBuilder<'a> {
  							.join("bin")
 -							.join(self.server_params.release.quality.server_entrypoint()),
 +							.join(self.server_params.release.quality.server_entrypoint().unwrap()),
@@ -76,7 +76,7 @@ index 3d7d718..98529bc 100644
 +					.join(self.quality.server_entrypoint().unwrap())
  			},
 diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs
-index 9033914..a39bbf7 100644
+index 55f1dad..3b7ef5c 100644
 --- a/cli/src/update_service.rs
 +++ b/cli/src/update_service.rs
 @@ -10,3 +10,3 @@ use serde::{Deserialize, Serialize};
@@ -89,7 +89,7 @@ index 9033914..a39bbf7 100644
 -	},
 +	}
  };
-@@ -58,4 +58,12 @@ fn quality_download_segment(quality: options::Quality) -> &'static str {
+@@ -58,2 +58,10 @@ fn quality_download_segment(quality: options::Quality) -> &'static str {
  
 +fn get_app_name() -> Result<&'static str, CodeError> {
 +	VSCODE_CLI_APP_NAME.ok_or_else(|| CodeError::UpdatesNotConfigured("no app name"))
@@ -99,17 +99,19 @@ index 9033914..a39bbf7 100644
 +	VSCODE_CLI_DOWNLOAD_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured("no download url"))
 +}
 +
- fn get_update_endpoint() -> Result<&'static str, CodeError> {
--	VSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured("no service url"))
-+	VSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured("no update url"))
+ fn get_update_endpoint() -> Result<String, CodeError> {
+@@ -66,3 +74,3 @@ fn get_update_endpoint() -> Result<String, CodeError> {
+ 		.map(|s| s.to_string())
+-		.ok_or_else(|| CodeError::UpdatesNotConfigured("no service url"))
++		.ok_or_else(|| CodeError::UpdatesNotConfigured("no update url"))
  }
-@@ -67,3 +75,4 @@ impl UpdateService {
+@@ -74,3 +82,4 @@ impl UpdateService {
  
 -	pub async fn get_release_by_semver_version(
 +	/// Gets the latest commit for the target of the given quality.
 +	pub async fn get_latest_commit(
  		&self,
-@@ -72,14 +81,10 @@ impl UpdateService {
+@@ -79,14 +88,10 @@ impl UpdateService {
  		quality: options::Quality,
 -		version: &str,
  	) -> Result<Release, AnyError> {
@@ -120,19 +122,19 @@ index 9033914..a39bbf7 100644
  		let download_url = format!(
 -			"{}/api/versions/{}/{}/{}",
 +			"{}/{}/{}/{}/latest.json",
- 			update_endpoint,
+ 			&update_endpoint,
 -			version,
 -			download_segment,
  			quality_download_segment(quality),
 +			platform.os(),
 +			platform.arch(),
  		);
-@@ -97,3 +102,3 @@ impl UpdateService {
+@@ -104,3 +109,3 @@ impl UpdateService {
  		let res = response.json::<UpdateServerVersion>().await?;
 -		debug!(self.log, "Resolved version {} to {}", version, res.version);
 +		debug!(self.log, "Resolved quality {} to {}", quality, res.version);
  
-@@ -108,40 +113,17 @@ impl UpdateService {
+@@ -115,40 +120,17 @@ impl UpdateService {
  
 -	/// Gets the latest commit for the target of the given quality.
 -	pub async fn get_latest_commit(
@@ -151,7 +153,7 @@ index 9033914..a39bbf7 100644
 +
  		let download_url = format!(
 -			"{}/api/latest/{}/{}",
--			update_endpoint,
+-			&update_endpoint,
 -			download_segment,
 -			quality_download_segment(quality),
 +			"{}/download/{}/{}-reh-web-{}-{}-{}.tar.gz",
@@ -185,7 +187,7 @@ index 9033914..a39bbf7 100644
 -		})
 +		Ok(download_url)
  	}
-@@ -150,15 +132,3 @@ impl UpdateService {
+@@ -157,15 +139,3 @@ impl UpdateService {
  	pub async fn get_download_stream(&self, release: &Release) -> Result<SimpleResponse, AnyError> {
 -		let update_endpoint = get_update_endpoint()?;
 -		let download_segment = release
@@ -195,14 +197,14 @@ index 9033914..a39bbf7 100644
 -
 -		let download_url = format!(
 -			"{}/commit:{}/{}/{}",
--			update_endpoint,
+-			&update_endpoint,
 -			release.commit,
 -			download_segment,
 -			quality_download_segment(release.quality),
 -		);
 +		let download_url = self.get_download_url(release)?;
  
-@@ -196,13 +166,2 @@ pub enum TargetKind {
+@@ -203,13 +173,2 @@ pub enum TargetKind {
  
 -impl TargetKind {
 -	fn download_segment(&self, platform: Platform) -> Option<String> {
@@ -216,7 +218,7 @@ index 9033914..a39bbf7 100644
 -}
 -
  #[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)]
-@@ -225,30 +184,17 @@ pub enum Platform {
+@@ -232,30 +191,17 @@ pub enum Platform {
  impl Platform {
 -	pub fn archive(&self) -> Option<String> {
 -		match self {
@@ -261,7 +263,7 @@ index 9033914..a39bbf7 100644
 +			Platform::WindowsX86 => "ia42",
 +			Platform::WindowsARM64 => "arm64",
  		}
-@@ -257,17 +203,17 @@ impl Platform {
+@@ -264,17 +210,17 @@ impl Platform {
  
 -	pub fn cli(&self) -> String {
 +	pub fn os(&self) -> String {
@@ -293,7 +295,7 @@ index 9033914..a39bbf7 100644
 +			Platform::WindowsX86 => "win32",
 +			Platform::WindowsARM64 => "win32",
  		}
-@@ -276,6 +222,2 @@ impl Platform {
+@@ -283,6 +229,2 @@ impl Platform {
  
 -	pub fn web(&self) -> String {
 -		format!("{}-web", self.headless())

+ 25 - 84
patches/disable-copilot.patch

@@ -1,5 +1,5 @@
 diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts
-index f425d24..ef3ba1f 100644
+index 43eea51..4ce6918 100644
 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts
 +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts
 @@ -181,3 +181,4 @@ abstract class OpenChatGlobalAction extends Action2 {
@@ -8,135 +8,76 @@ index f425d24..ef3ba1f 100644
 +				ChatContextKeys.Setup.disabled.negate(),
 +				ContextKeyExpr.has('config.chat.disableAIFeatures').negate()
  			)
-@@ -1416,3 +1417,3 @@ export function registerChatActions() {
+@@ -1395,3 +1396,3 @@ export function registerChatActions() {
  				precondition: ContextKeyExpr.and(
 -					ChatContextKeys.Setup.installed,
 +					ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
  					ChatContextKeys.Setup.disabled.negate(),
-@@ -1629,3 +1630,4 @@ MenuRegistry.appendMenuItem(MenuId.CommandCenter, {
+@@ -1608,3 +1609,4 @@ MenuRegistry.appendMenuItem(MenuId.CommandCenter, {
  			ChatContextKeys.Setup.hidden.negate(),
 -			ChatContextKeys.Setup.disabled.negate()
 +			ChatContextKeys.Setup.disabled.negate(),
 +			ContextKeyExpr.has('config.chat.disableAIFeatures').negate()
  		),
-@@ -1646,3 +1648,4 @@ MenuRegistry.appendMenuItem(MenuId.TitleBar, {
+@@ -1625,3 +1627,4 @@ MenuRegistry.appendMenuItem(MenuId.TitleBar, {
  			ChatContextKeys.Setup.hidden.negate(),
 -			ChatContextKeys.Setup.disabled.negate()
 +			ChatContextKeys.Setup.disabled.negate(),
 +			ContextKeyExpr.has('config.chat.disableAIFeatures').negate()
  		),
-@@ -1663,3 +1666,4 @@ registerAction2(class ToggleCopilotControl extends ToggleTitleBarConfigAction {
+@@ -1642,3 +1645,4 @@ registerAction2(class ToggleCopilotControl extends ToggleTitleBarConfigAction {
  					ChatContextKeys.Setup.hidden.negate(),
 -					ChatContextKeys.Setup.disabled.negate()
 +					ChatContextKeys.Setup.disabled.negate(),
 +					ContextKeyExpr.has('config.chat.disableAIFeatures').negate()
  				),
-@@ -1804,3 +1808,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, {
+@@ -1779,3 +1783,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, {
  		ChatContextKeys.Setup.hidden.negate(),
 -		ChatContextKeys.Setup.disabled.negate()
 +		ChatContextKeys.Setup.disabled.negate(),
 +		ContextKeyExpr.has('config.chat.disableAIFeatures').negate()
  	)
-@@ -1837,3 +1842,3 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, {
- 		ChatContextKeys.Setup.disabled.negate(),
--		ChatContextKeys.Setup.installed.negate(),
-+		ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
- 	);
 diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts
-index bfcab77..f0013a4 100644
+index ee0b4a4..c6243b8 100644
 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts
 +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts
-@@ -179,3 +179,3 @@ configurationRegistry.registerConfiguration({
+@@ -187,3 +187,3 @@ configurationRegistry.registerConfiguration({
  			markdownDescription: nls.localize('chat.commandCenter.enabled', "Controls whether the command center shows a menu for actions to control chat (requires {0}).", '`#window.commandCenter#`'),
 -			default: true
 +			default: false
  		},
-@@ -701,3 +701,3 @@ configurationRegistry.registerConfiguration({
+@@ -801,3 +801,3 @@ configurationRegistry.registerConfiguration({
  			description: nls.localize('chat.disableAIFeatures', "Disable and hide built-in AI features provided by GitHub Copilot, including chat and inline suggestions."),
 -			default: false,
 +			default: true,
  			scope: ConfigurationScope.WINDOW
 diff --git a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts
-index a1c2acb..e41068d 100644
+index 9573667..f71e066 100644
 --- a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts
 +++ b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts
-@@ -67,9 +67,8 @@ const chatViewDescriptor: IViewDescriptor = {
- 	ctorDescriptor: new SyncDescriptor(ChatViewPane, [{ location: ChatAgentLocation.Chat }]),
+@@ -67,10 +67,9 @@ const chatViewDescriptor: IViewDescriptor = {
+ 	ctorDescriptor: new SyncDescriptor(ChatViewPane),
 -	when: ContextKeyExpr.or(
 -		ContextKeyExpr.or(
 -			ChatContextKeys.Setup.hidden,
 -			ChatContextKeys.Setup.disabled
 -		)?.negate(),
+-		ChatContextKeys.panelParticipantRegistered,
+-		ChatContextKeys.extensionInvalid
+-	)
 +	when: ContextKeyExpr.and(
 +		ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
 +		ChatContextKeys.Setup.disabled.negate(),
 +		ChatContextKeys.Setup.hidden.negate(),
- 		ChatContextKeys.panelParticipantRegistered,
--		ChatContextKeys.extensionInvalid
++ 		ChatContextKeys.panelParticipantRegistered,
 +		ChatContextKeys.extensionInvalid.negate()
- 	)
-diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup.ts b/src/vs/workbench/contrib/chat/browser/chatSetup.ts
-index 1053f71..586705d 100644
---- a/src/vs/workbench/contrib/chat/browser/chatSetup.ts
-+++ b/src/vs/workbench/contrib/chat/browser/chatSetup.ts
-@@ -1020,7 +1020,9 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr
- 					f1: true,
--					precondition: ContextKeyExpr.or(
--						ChatContextKeys.Setup.hidden,
--						ChatContextKeys.Setup.disabled,
--						ChatContextKeys.Setup.untrusted,
--						ChatContextKeys.Setup.installed.negate(),
-+					precondition: ContextKeyExpr.and(
-+						ContextKeyExpr.or(
-+							ChatContextKeys.Setup.hidden,
-+							ChatContextKeys.Setup.disabled,
-+							ChatContextKeys.Setup.untrusted,
-+						),
-+						ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
- 						ChatContextKeys.Entitlement.canSignUp
-@@ -1136,3 +1138,3 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr
- 							ChatContextKeys.Setup.hidden.negate(),
--							ChatContextKeys.Setup.installed.negate(),
-+							ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
- 							ChatContextKeys.Entitlement.signedOut
-@@ -1163,2 +1165,3 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr
- 						ChatContextKeys.Setup.hidden.negate(),
-+						ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
- 						ContextKeyExpr.or(
-@@ -1219,2 +1222,3 @@ export class ChatSetupContribution extends Disposable implements IWorkbenchContr
- 						ChatContextKeys.Setup.hidden.negate(),
-+						ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
- 						ContextKeyExpr.or(
-@@ -1435,3 +1439,3 @@ export class ChatTeardownContribution extends Disposable implements IWorkbenchCo
- 						order: 1,
--						when: ChatContextKeys.Setup.installed.negate()
-+						when: ContextKeyExpr.has('config.chat.disableAIFeatures').negate()
- 					}
-diff --git a/src/vs/workbench/contrib/chat/browser/chatStatus.ts b/src/vs/workbench/contrib/chat/browser/chatStatus.ts
-index 1a4419a..eaa7466 100644
---- a/src/vs/workbench/contrib/chat/browser/chatStatus.ts
-+++ b/src/vs/workbench/contrib/chat/browser/chatStatus.ts
-@@ -49,2 +49,3 @@ import { MarkdownString } from '../../../../base/common/htmlContent.js';
- import { AGENT_SESSIONS_VIEWLET_ID } from '../common/constants.js';
-+import { ContextKeyExpr, IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';
- 
-@@ -129,2 +130,3 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
- 		@IChatSessionsService private readonly chatSessionsService: IChatSessionsService,
-+		@IContextKeyService private readonly contextKeyService: IContextKeyService,
- 	) {
-@@ -132,2 +134,7 @@ export class ChatStatusBarEntry extends Disposable implements IWorkbenchContribu
- 
-+		const rule = ContextKeyExpr.has('config.chat.disableAIFeatures');
-+		if (this.contextKeyService.contextMatchesRules(rule)) {
-+			return; // disabled
-+		}
-+
- 		this.update();
++ 	)
+ };
 diff --git a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts
-index f51121a..db21afb 100644
+index 09aef7e..daf6437 100644
 --- a/src/vs/workbench/contrib/chat/common/chatContextKeys.ts
 +++ b/src/vs/workbench/contrib/chat/common/chatContextKeys.ts
-@@ -108,4 +108,4 @@ export namespace ChatContextKeyExprs {
+@@ -113,4 +113,4 @@ export namespace ChatContextKeyExprs {
  	 */
 -	export const chatSetupTriggerContext = ContextKeyExpr.or(
 -		ChatContextKeys.Setup.installed.negate(),
@@ -144,7 +85,7 @@ index f51121a..db21afb 100644
 +		ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
  		ChatContextKeys.Entitlement.canSignUp
 diff --git a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts
-index 7eb3689..be00ca2 100644
+index d8ddc37..f48fd86 100644
 --- a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts
 +++ b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts
 @@ -540,3 +540,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc
@@ -158,19 +99,19 @@ index 7eb3689..be00ca2 100644
 +				when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()),
  				weight: 40,
 diff --git a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts
-index 606bda0..191df32 100644
+index fe12782..06b1b76 100644
 --- a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts
 +++ b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts
 @@ -685,3 +685,3 @@ registerAction2(class extends Action2 {
  					ChatContextKeys.Setup.disabled.negate(),
 -					ChatContextKeys.Setup.installed.negate(),
 +					ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),
- 					ContextKeyExpr.equals('git.activeResourceHasMergeConflicts', true)
+ 					ContextKeyExpr.in(ResourceContextKey.Resource.key, 'git.mergeChanges'),
 diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts
-index 4d8907e..7df25af 100644
+index 4260a28..6ac55b6 100644
 --- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts
 +++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts
-@@ -1361,3 +1361,3 @@ registerAction2(class extends Action2 {
+@@ -1383,3 +1383,3 @@ registerAction2(class extends Action2 {
  					ChatContextKeys.Setup.disabled.negate(),
 -					ChatContextKeys.Setup.installed.negate(),
 +					ContextKeyExpr.has('config.chat.disableAIFeatures').negate(),

+ 1 - 11
patches/ext-from-gh.patch

@@ -1,15 +1,5 @@
-diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js
-index 249777c..129af8a 100644
---- a/build/lib/builtInExtensions.js
-+++ b/build/lib/builtInExtensions.js
-@@ -87,5 +87,2 @@ function getExtensionDownloadStream(extension) {
-     }
--    else if (productjson.extensionsGallery?.serviceUrl) {
--        input = ext.fromMarketplace(productjson.extensionsGallery.serviceUrl, extension);
--    }
-     else {
 diff --git a/build/lib/builtInExtensions.ts b/build/lib/builtInExtensions.ts
-index e9a1180..b8348e3 100644
+index d52567b..fe5b988 100644
 --- a/build/lib/builtInExtensions.ts
 +++ b/build/lib/builtInExtensions.ts
 @@ -75,4 +75,2 @@ function getExtensionDownloadStream(extension: IExtensionDefinition) {

+ 5 - 5
patches/feat-user-product.patch

@@ -35,7 +35,7 @@ index b643e34..2f228ef 100644
 +}
 \ No newline at end of file
 diff --git a/src/main.ts b/src/main.ts
-index 7b7e1da..f07b015 100644
+index ec188d0..0160be6 100644
 --- a/src/main.ts
 +++ b/src/main.ts
 @@ -8,2 +8,3 @@ import * as fs from 'original-fs';
@@ -67,13 +67,13 @@ index 7b7e1da..f07b015 100644
 +	resolveUserProduct();
  
 diff --git a/src/typings/vscode-globals-product.d.ts b/src/typings/vscode-globals-product.d.ts
-index 2cd632e..dbb25e3 100644
+index ab169bd..2155f5c 100644
 --- a/src/typings/vscode-globals-product.d.ts
 +++ b/src/typings/vscode-globals-product.d.ts
-@@ -29,2 +29,4 @@ declare global {
- 
-+	var _VSCODE_USER_PRODUCT_JSON: Record<string, any>;
+@@ -43,2 +43,4 @@ declare global {
+ 	var _VSCODE_USE_RELATIVE_IMPORTS: boolean | undefined;
 +
++	var _VSCODE_USER_PRODUCT_JSON: Record<string, any>;
  }
 diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts
 index 6f093e9..b63af55 100644

+ 280 - 0
patches/fix-build-vsce.patch

@@ -0,0 +1,280 @@
+diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
+index 24462a3..ecb43fd 100644
+--- a/build/lib/extensions.ts
++++ b/build/lib/extensions.ts
+@@ -94,3 +94,3 @@ function fromLocal(extensionPath: string, forWeb: boolean, disableMangle: boolea
+ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, disableMangle: boolean): Stream {
+-	const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce');
++	const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce');
+ 	const webpack = require('webpack');
+@@ -208,3 +208,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string,
+ function fromLocalNormal(extensionPath: string): Stream {
+-	const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce');
++	const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce');
+ 	const result = es.through();
+diff --git a/build/package-lock.json b/build/package-lock.json
+index fe9be0c..9747dca 100644
+--- a/build/package-lock.json
++++ b/build/package-lock.json
+@@ -51,3 +51,3 @@
+         "@vscode/ripgrep": "^1.15.13",
+-        "@vscode/vsce": "3.6.1",
++        "@vscodium/vsce": "3.6.1-258428",
+         "ansi-colors": "^3.2.3",
+@@ -1944,6 +1944,6 @@
+     },
+-    "node_modules/@vscode/vsce": {
+-      "version": "3.6.1",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.6.1.tgz",
+-      "integrity": "sha512-UXtMgeCBl/t5zjn1TX1v1sl5L/oIv3Xc3pkKPGzaqeFCIkp5+wfFFDBXTWDt3d5uUulHnZKORHkMIsKNe9+k5A==",
++    "node_modules/@vscodium/vsce": {
++      "version": "3.6.1-258428",
++      "resolved": "https://registry.npmjs.org/@vscodium/vsce/-/vsce-3.6.1-258428.tgz",
++      "integrity": "sha512-B2uys5YU5MGNmzQPHsMsRXxzlQvZanhxE8Sfkd4Sr/LBN9BaV5yhMCppV7jyLUOQajj9K3YZThLqUYm4CCBy3A==",
+       "dev": true,
+@@ -1956,3 +1956,2 @@
+         "@secretlint/secretlint-rule-preset-recommend": "^10.1.2",
+-        "@vscode/vsce-sign": "^2.0.0",
+         "azure-devops-node-api": "^12.5.0",
+@@ -1991,148 +1990,3 @@
+     },
+-    "node_modules/@vscode/vsce-sign": {
+-      "version": "2.0.7",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.7.tgz",
+-      "integrity": "sha512-cz0GFW8qCxpypOy3y509u26K1FIPMlDIHBwGmDyvEbgoma2v3y5YIHHuijr8zCYBp9kzCCOJd28s/0PG7cA7ew==",
+-      "dev": true,
+-      "hasInstallScript": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optionalDependencies": {
+-        "@vscode/vsce-sign-alpine-arm64": "2.0.6",
+-        "@vscode/vsce-sign-alpine-x64": "2.0.6",
+-        "@vscode/vsce-sign-darwin-arm64": "2.0.6",
+-        "@vscode/vsce-sign-darwin-x64": "2.0.6",
+-        "@vscode/vsce-sign-linux-arm": "2.0.6",
+-        "@vscode/vsce-sign-linux-arm64": "2.0.6",
+-        "@vscode/vsce-sign-linux-x64": "2.0.6",
+-        "@vscode/vsce-sign-win32-arm64": "2.0.6",
+-        "@vscode/vsce-sign-win32-x64": "2.0.6"
+-      }
+-    },
+-    "node_modules/@vscode/vsce-sign-alpine-arm64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz",
+-      "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==",
+-      "cpu": [
+-        "arm64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "alpine"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-alpine-x64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz",
+-      "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==",
+-      "cpu": [
+-        "x64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "alpine"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-darwin-arm64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz",
+-      "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==",
+-      "cpu": [
+-        "arm64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "darwin"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-darwin-x64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz",
+-      "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==",
+-      "cpu": [
+-        "x64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "darwin"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-linux-arm": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz",
+-      "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==",
+-      "cpu": [
+-        "arm"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "linux"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-linux-arm64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz",
+-      "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==",
+-      "cpu": [
+-        "arm64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "linux"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-linux-x64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz",
+-      "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==",
+-      "cpu": [
+-        "x64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "linux"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-win32-arm64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz",
+-      "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==",
+-      "cpu": [
+-        "arm64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "win32"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce-sign-win32-x64": {
+-      "version": "2.0.6",
+-      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz",
+-      "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==",
+-      "cpu": [
+-        "x64"
+-      ],
+-      "dev": true,
+-      "license": "SEE LICENSE IN LICENSE.txt",
+-      "optional": true,
+-      "os": [
+-        "win32"
+-      ]
+-    },
+-    "node_modules/@vscode/vsce/node_modules/ansi-styles": {
++    "node_modules/@vscodium/vsce/node_modules/ansi-styles": {
+       "version": "4.3.0",
+@@ -2152,3 +2006,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/chalk": {
++    "node_modules/@vscodium/vsce/node_modules/chalk": {
+       "version": "4.1.2",
+@@ -2169,3 +2023,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/color-convert": {
++    "node_modules/@vscodium/vsce/node_modules/color-convert": {
+       "version": "2.0.1",
+@@ -2182,3 +2036,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/color-name": {
++    "node_modules/@vscodium/vsce/node_modules/color-name": {
+       "version": "1.1.4",
+@@ -2189,3 +2043,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/glob": {
++    "node_modules/@vscodium/vsce/node_modules/glob": {
+       "version": "11.1.0",
+@@ -2213,3 +2067,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": {
++    "node_modules/@vscodium/vsce/node_modules/glob/node_modules/minimatch": {
+       "version": "10.1.1",
+@@ -2229,3 +2083,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/has-flag": {
++    "node_modules/@vscodium/vsce/node_modules/has-flag": {
+       "version": "4.0.0",
+@@ -2239,3 +2093,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/jsonc-parser": {
++    "node_modules/@vscodium/vsce/node_modules/jsonc-parser": {
+       "version": "3.3.1",
+@@ -2243,9 +2097,11 @@
+       "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+-      "dev": true
++      "dev": true,
++      "license": "MIT"
+     },
+-    "node_modules/@vscode/vsce/node_modules/semver": {
+-      "version": "7.6.3",
+-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
++    "node_modules/@vscodium/vsce/node_modules/semver": {
++      "version": "7.7.3",
++      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
++      "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+       "dev": true,
++      "license": "ISC",
+       "bin": {
+@@ -2257,3 +2113,3 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/supports-color": {
++    "node_modules/@vscodium/vsce/node_modules/supports-color": {
+       "version": "7.2.0",
+@@ -2270,12 +2126,2 @@
+     },
+-    "node_modules/@vscode/vsce/node_modules/yazl": {
+-      "version": "2.5.1",
+-      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
+-      "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "buffer-crc32": "~0.2.3"
+-      }
+-    },
+     "node_modules/@xmldom/xmldom": {
+@@ -6955,2 +6801,12 @@
+     },
++    "node_modules/yazl": {
++      "version": "2.5.1",
++      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
++      "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "buffer-crc32": "~0.2.3"
++      }
++    },
+     "node_modules/yocto-queue": {
+diff --git a/build/package.json b/build/package.json
+index 39db6b7..55beb4a 100644
+--- a/build/package.json
++++ b/build/package.json
+@@ -45,3 +45,3 @@
+     "@vscode/ripgrep": "^1.15.13",
+-    "@vscode/vsce": "3.6.1",
++    "@vscodium/vsce": "3.6.1-258428",
+     "ansi-colors": "^3.2.3",

+ 135 - 0
patches/fix-keymap.patch

@@ -0,0 +1,135 @@
+diff --git a/.npmrc b/.npmrc
+index c58ce2e..a1f42cd 100644
+--- a/.npmrc
++++ b/.npmrc
+@@ -5,2 +5,3 @@ runtime="electron"
+ build_from_source="true"
++build_from_source_native_keymap="no"
+ legacy-peer-deps="true"
+diff --git a/build/.moduleignore b/build/.moduleignore
+index 0459b46..cd99c71 100644
+--- a/build/.moduleignore
++++ b/build/.moduleignore
+@@ -65,7 +65,7 @@ fsevents/test/**
+ 
+-native-keymap/binding.gyp
+-native-keymap/build/**
+-native-keymap/src/**
+-native-keymap/deps/**
+-!native-keymap/build/Release/*.node
++@vscodium/native-keymap/binding.gyp
++@vscodium/native-keymap/build/**
++@vscodium/native-keymap/src/**
++@vscodium/native-keymap/deps/**
++!@vscodium/native-keymap/build/Release/*.node
+ 
+diff --git a/eslint.config.js b/eslint.config.js
+index 8fda673..967ae23 100644
+--- a/eslint.config.js
++++ b/eslint.config.js
+@@ -1475,3 +1475,3 @@ export default tseslint.config(
+ 						'node:module',
+-						'native-keymap',
++						'@vscodium/native-keymap',
+ 						'native-watchdog',
+diff --git a/package-lock.json b/package-lock.json
+index 4d43f38..7334f04 100644
+--- a/package-lock.json
++++ b/package-lock.json
+@@ -9,3 +9,2 @@
+       "version": "1.107.0",
+-      "hasInstallScript": true,
+       "license": "MIT",
+@@ -29,2 +28,3 @@
+         "@vscode/windows-registry": "^1.1.0",
++        "@vscodium/native-keymap": "3.3.7-258424",
+         "@xterm/addon-clipboard": "^0.2.0-beta.119",
+@@ -46,3 +46,2 @@
+         "native-is-elevated": "0.8.0",
+-        "native-keymap": "^3.3.5",
+         "native-watchdog": "^1.4.1",
+@@ -3300,2 +3299,9 @@
+     },
++    "node_modules/@vscodium/native-keymap": {
++      "version": "3.3.7-258424",
++      "resolved": "https://registry.npmjs.org/@vscodium/native-keymap/-/native-keymap-3.3.7-258424.tgz",
++      "integrity": "sha512-HZ20QfExV0kE2l939yE3wn0LezSV7BcpxOFmlUMUHBQbdANMSLkwzo6Zw1xOEZDoYm3VTDHt8/+WwLBR2MpA3A==",
++      "hasInstallScript": true,
++      "license": "MIT"
++    },
+     "node_modules/@webassemblyjs/ast": {
+@@ -12662,5 +12668,6 @@
+     "node_modules/napi-build-utils": {
+-      "version": "1.0.2",
+-      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+-      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
++      "version": "2.0.0",
++      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
++      "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
++      "license": "MIT"
+     },
+@@ -12673,9 +12680,2 @@
+     },
+-    "node_modules/native-keymap": {
+-      "version": "3.3.7",
+-      "resolved": "https://registry.npmjs.org/native-keymap/-/native-keymap-3.3.7.tgz",
+-      "integrity": "sha512-07n5kF0L9ERC9pilqEFucnhs1XG4WttbHAMWhhOSqQYXhB8mMNTSCzP4psTaVgDSp6si2HbIPhTIHuxSia6NPQ==",
+-      "hasInstallScript": true,
+-      "license": "MIT"
+-    },
+     "node_modules/native-watchdog": {
+@@ -14180,5 +14180,6 @@
+     "node_modules/prebuild-install": {
+-      "version": "7.1.2",
+-      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz",
+-      "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==",
++      "version": "7.1.3",
++      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
++      "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
++      "license": "MIT",
+       "dependencies": {
+@@ -14189,3 +14190,3 @@
+         "mkdirp-classic": "^0.5.3",
+-        "napi-build-utils": "^1.0.1",
++        "napi-build-utils": "^2.0.0",
+         "node-abi": "^3.3.0",
+diff --git a/package.json b/package.json
+index 18b9a35..afa9c72 100644
+--- a/package.json
++++ b/package.json
+@@ -108,3 +108,3 @@
+     "native-is-elevated": "0.8.0",
+-    "native-keymap": "^3.3.5",
++    "@vscodium/native-keymap": "3.3.7-258424",
+     "native-watchdog": "^1.4.1",
+diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts
+index 5099915..aa1b0b8 100644
+--- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts
++++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts
+@@ -44,8 +44,8 @@ flakySuite('Native Modules (all platforms)', () => {
+ 	test('native-keymap', async () => {
+-		const keyMap = await import('native-keymap');
+-		assert.ok(typeof keyMap.onDidChangeKeyboardLayout === 'function', testErrorMessage('native-keymap'));
+-		assert.ok(typeof keyMap.getCurrentKeyboardLayout === 'function', testErrorMessage('native-keymap'));
++		const keyMap = await import('@vscodium/native-keymap');
++		assert.ok(typeof keyMap.onDidChangeKeyboardLayout === 'function', testErrorMessage('@vscodium/native-keymap'));
++		assert.ok(typeof keyMap.getCurrentKeyboardLayout === 'function', testErrorMessage('@vscodium/native-keymap'));
+ 
+ 		const result = keyMap.getCurrentKeyboardLayout();
+-		assert.ok(result, testErrorMessage('native-keymap'));
++		assert.ok(result, testErrorMessage('@vscodium/native-keymap'));
+ 	});
+diff --git a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts
+index 8950ce2..f31cea6 100644
+--- a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts
++++ b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts
+@@ -5,3 +5,3 @@
+ 
+-import type * as nativeKeymap from 'native-keymap';
++import type * as nativeKeymap from '@vscodium/native-keymap';
+ import * as platform from '../../../base/common/platform.js';
+@@ -48,3 +48,3 @@ export class KeyboardLayoutMainService extends Disposable implements INativeKeyb
+ 	private async _doInitialize(): Promise<void> {
+-		const nativeKeymapMod = await import('native-keymap');
++		const nativeKeymapMod = await import('@vscodium/native-keymap');
+ 

+ 14 - 0
patches/fix-npm-preinstall.patch

@@ -0,0 +1,14 @@
+diff --git a/build/npm/preinstall.ts b/build/npm/preinstall.ts
+index 3476fca..e23329f 100644
+--- a/build/npm/preinstall.ts
++++ b/build/npm/preinstall.ts
+@@ -129,3 +129,3 @@ function installHeaders() {
+ 	// Refs https://chromium-review.googlesource.com/c/v8/v8/+/6879784
+-	if (process.platform === 'linux') {
++	if (process.platform === 'linux' && local) {
+ 		const homedir = os.homedir();
+@@ -133,3 +133,3 @@ function installHeaders() {
+ 		const nodeGypCache = path.join(cachePath, 'node-gyp');
+-		const localHeaderPath = path.join(nodeGypCache, local!.target, 'include', 'node');
++		const localHeaderPath = path.join(nodeGypCache, local.target, 'include', 'node');
+ 		if (fs.existsSync(localHeaderPath)) {

+ 20 - 16
patches/policies.patch → patches/fix-policies.patch

@@ -1,5 +1,5 @@
 diff --git a/build/.moduleignore b/build/.moduleignore
-index 0459b46..49f3c66 100644
+index cd99c71..9d14923 100644
 --- a/build/.moduleignore
 +++ b/build/.moduleignore
 @@ -128,9 +128,11 @@ vsda/**
@@ -22,32 +22,36 @@ index 0459b46..49f3c66 100644
 +!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node
  
 diff --git a/eslint.config.js b/eslint.config.js
-index 69a9a69..9a3d7ed 100644
+index 967ae23..16580ab 100644
 --- a/eslint.config.js
 +++ b/eslint.config.js
-@@ -1724,3 +1724,3 @@ export default tseslint.config(
+@@ -1458,3 +1458,3 @@ export default tseslint.config(
  						'@vscode/iconv-lite-umd',
 -						'@vscode/policy-watcher',
 +						'@vscodium/policy-watcher',
  						'@vscode/proxy-agent',
 diff --git a/package-lock.json b/package-lock.json
-index 2ffd231..70d78f7 100644
+index 7334f04..2453188 100644
 --- a/package-lock.json
 +++ b/package-lock.json
-@@ -18,3 +18,2 @@
+@@ -9,2 +9,3 @@
+       "version": "1.107.0",
++      "hasInstallScript": true,
+       "license": "MIT",
+@@ -17,3 +18,2 @@
          "@vscode/iconv-lite-umd": "0.7.1",
 -        "@vscode/policy-watcher": "^1.3.2",
          "@vscode/proxy-agent": "^0.36.0",
-@@ -29,2 +28,3 @@
-         "@vscode/windows-registry": "^1.1.0",
+@@ -29,2 +29,3 @@
+         "@vscodium/native-keymap": "3.3.7-258424",
 +        "@vscodium/policy-watcher": "^1.3.2-252465",
          "@xterm/addon-clipboard": "^0.2.0-beta.119",
-@@ -2997,22 +2997,2 @@
+@@ -2971,22 +2972,2 @@
      },
 -    "node_modules/@vscode/policy-watcher": {
--      "version": "1.3.2",
--      "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.2.tgz",
--      "integrity": "sha512-fmNPYysU2ioH99uCaBPiRblEZSnir5cTmc7w91hAxAoYoGpHt2PZPxT5eIOn7FGmPOsjLdQcd6fduFJGYVD4Mw==",
+-      "version": "1.3.5",
+-      "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.5.tgz",
+-      "integrity": "sha512-k1n9gaDBjyVRy5yJLABbZCnyFwgQ8OA4sR3vXmXnmB+mO9JA0nsl/XOXQfVCoLasBu3UHCOfAnDWGn2sRzCR+A==",
 -      "hasInstallScript": true,
 -      "license": "MIT",
 -      "dependencies": {
@@ -65,7 +69,7 @@ index 2ffd231..70d78f7 100644
 -      }
 -    },
      "node_modules/@vscode/proxy-agent": {
-@@ -3412,2 +3392,22 @@
+@@ -3306,2 +3287,22 @@
      },
 +    "node_modules/@vscodium/policy-watcher": {
 +      "version": "1.3.2-252465",
@@ -89,7 +93,7 @@ index 2ffd231..70d78f7 100644
 +    },
      "node_modules/@webassemblyjs/ast": {
 diff --git a/package.json b/package.json
-index 32047ab..ecbce6b 100644
+index afa9c72..6599a7c 100644
 --- a/package.json
 +++ b/package.json
 @@ -80,3 +80,3 @@
@@ -197,7 +201,7 @@ index ee0a24b..881ce36 100644
 +/Users/example/node_modules/@vscodium/policy-watcher/src/windows/NumberPolicy.hh
  /Users/example/node_modules/@vscode/vscode-languagedetection/CODE_OF_CONDUCT.md
 diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts
-index 5099915..98a2041 100644
+index aa1b0b8..c56e16e 100644
 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts
 +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts
 @@ -62,5 +62,5 @@ flakySuite('Native Modules (all platforms)', () => {
@@ -210,7 +214,7 @@ index 5099915..98a2041 100644
 +		assert.ok(typeof watcher.createWatcher === 'function', testErrorMessage('@vscodium/policy-watcher'));
  	});
 diff --git a/src/vs/platform/policy/node/nativePolicyService.ts b/src/vs/platform/policy/node/nativePolicyService.ts
-index 21bb9c4..6a85d60 100644
+index 5b08cd9..728d7bd 100644
 --- a/src/vs/platform/policy/node/nativePolicyService.ts
 +++ b/src/vs/platform/policy/node/nativePolicyService.ts
 @@ -8,3 +8,3 @@ import { IStringDictionary } from '../../../base/common/collections.js';
@@ -226,5 +230,5 @@ index 21bb9c4..6a85d60 100644
 @@ -31,3 +31,3 @@ export class NativePolicyService extends AbstractPolicyService implements IPolic
  			try {
 -				this.watcher.value = createWatcher(this.productName, policyDefinitions, update => {
-+				this.watcher.value = createWatcher('!!ORG_NAME!!', this.productName, policyDefinitions, update => {
++				this.watcher.value = createWatcher('VSCodium', this.productName, policyDefinitions, update => {
  					this._onDidPolicyChange(update);

+ 5 - 9
patches/fix-remote-libs.patch

@@ -1,12 +1,8 @@
 diff --git a/remote/package-lock.json b/remote/package-lock.json
-index f0ed1cc..a973af3 100644
+index 30a7391..94f839a 100644
 --- a/remote/package-lock.json
 +++ b/remote/package-lock.json
-@@ -40,2 +40,3 @@
-         "tas-client-umd": "0.2.0",
-+        "tslib": "^2.6.3",
-         "vscode-oniguruma": "1.7.0",
-@@ -1109,2 +1110,8 @@
+@@ -1155,2 +1155,8 @@
      },
 +    "node_modules/tslib": {
 +      "version": "2.7.0",
@@ -16,10 +12,10 @@ index f0ed1cc..a973af3 100644
 +    },
      "node_modules/tunnel-agent": {
 diff --git a/remote/package.json b/remote/package.json
-index 33afee9..525ed07 100644
+index 119d62c..9ef9624 100644
 --- a/remote/package.json
 +++ b/remote/package.json
-@@ -35,2 +35,3 @@
-     "tas-client-umd": "0.2.0",
+@@ -37,2 +37,3 @@
+     "tas-client": "0.3.1",
 +    "tslib": "^2.6.3",
      "vscode-oniguruma": "1.7.0",

+ 6 - 33
patches/helper/settings.patch

@@ -1,38 +1,30 @@
 diff --git a/.vscode/settings.json b/.vscode/settings.json
-index f394c8a..c615121 100644
+index 514edcd..9aa6920 100644
 --- a/.vscode/settings.json
 +++ b/.vscode/settings.json
-@@ -23,22 +23,22 @@
- 	},
- 	"[typescript]": {
+@@ -26,3 +26,3 @@
  		"editor.defaultFormatter": "vscode.typescript-language-features",
 -		"editor.formatOnSave": true
 +		// "editor.formatOnSave": true
  	},
- 	"[javascript]": {
+@@ -30,3 +30,3 @@
  		"editor.defaultFormatter": "vscode.typescript-language-features",
 -		"editor.formatOnSave": true
 +		// "editor.formatOnSave": true
  	},
- 	"[rust]": {
+@@ -34,3 +34,3 @@
  		"editor.defaultFormatter": "rust-lang.rust-analyzer",
 -		"editor.formatOnSave": true,
 +		// "editor.formatOnSave": true,
  	},
- 	"[github-issues]": {
- 		"editor.wordWrap": "on"
- 	},
+@@ -41,4 +41,4 @@
  	// --- Files ---
 -	"files.trimTrailingWhitespace": true,
 -	"files.insertFinalNewline": true,
 +	// "files.trimTrailingWhitespace": true,
 +	// "files.insertFinalNewline": true,
  	"files.exclude": {
- 		".git": true,
- 		".build": true,
-@@ -47,9 +47,9 @@
- 		".vscode-test": true,
- 		"cli/target": true,
+@@ -51,5 +51,5 @@
  		"build/**/*.js.map": true,
 -		"build/**/*.js": {
 -			"when": "$(basename).ts"
@@ -41,22 +33,3 @@ index f394c8a..c615121 100644
 +		// 	"when": "$(basename).ts"
 +		// }
  	},
- 	"files.associations": {
- 		"cglicenses.json": "jsonc",
-@@ -60,7 +60,7 @@
- 		"**/yarn.lock": true,
- 		"**/package-lock.json": true,
- 		"**/Cargo.lock": true,
--		"build/**/*.js": true,
-+		// "build/**/*.js": true,
- 		"out/**": true,
- 		"out-build/**": true,
- 		"out-vscode/**": true,
-@@ -76,6 +76,7 @@
- 		"build/builtin/*.js": true,
- 		"build/monaco/*.js": true,
- 		"build/npm/*.js": true,
-+		"build/**/*.js": true,
- 		"build/*.js": true
- 	},
- 	// --- Search ---

+ 23 - 48
patches/linux/arch-0-support.patch

@@ -1,5 +1,5 @@
 diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh
-index 6805633..9d4b59f 100755
+index 2f25764..742aaef 100755
 --- a/build/azure-pipelines/linux/setup-env.sh
 +++ b/build/azure-pipelines/linux/setup-env.sh
 @@ -2,3 +2,3 @@
@@ -9,17 +9,17 @@ index 6805633..9d4b59f 100755
  
 @@ -22,3 +22,3 @@ else
    echo "Downloading remote sysroot"
--  SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" VSCODE_SYSROOT_PREFIX="-glibc-2.28-gcc-8.5.0" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
-+  SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
+-  SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" VSCODE_SYSROOT_PREFIX="-glibc-2.28-gcc-8.5.0" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
++  SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
  fi
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index 10b7b44..0ad7550 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -233,9 +233,23 @@ function nodejs(platform, arch) {
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index cb1a0a5..6c21dd2 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -235,9 +235,23 @@ function nodejs(platform: string, arch: string): NodeJS.ReadWriteStream | undefi
  		case 'linux':
 -			return (product.nodejsRepository !== 'https://nodejs.org' ?
--				fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) :
+-				fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName!, checksumSha256 }) :
 -				fetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 })
 -			).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))
 -				.pipe(filter('**/node'))
@@ -33,7 +33,7 @@ index 10b7b44..0ad7550 100644
 +					.pipe(rename('node'));
 +			}
 +			if (product.nodejsRepository !== 'https://nodejs.org') {
-+				return fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 })
++				return fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName!, checksumSha256 })
 +					.pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar())))
 +					.pipe(filter('**/node'))
 +					.pipe(util.setExecutableBit('**'))
@@ -47,13 +47,13 @@ index 10b7b44..0ad7550 100644
 +					.pipe(rename('node'));
 +			}
  		case 'alpine':
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 25d8916..250ba7c 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -366,2 +366,12 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index d3ab651..9dbe6f3 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -375,2 +375,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d
  
-+		const electronOverride = {};
++		const electronOverride: { repo?: string; tag?: string } = {};
 +		if (process.env.VSCODE_ELECTRON_REPOSITORY) {
 +			// official electron doesn't support all arch, override the repo with `VSCODE_ELECTRON_REPOSITORY`.
 +			electronOverride.repo = process.env.VSCODE_ELECTRON_REPOSITORY;
@@ -63,48 +63,23 @@ index 25d8916..250ba7c 100644
 +			electronOverride.tag = process.env.VSCODE_ELECTRON_TAG;
 +		}
 +
- 		let result = all
-@@ -370,3 +380,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+ 		let result: NodeJS.ReadWriteStream = all
+@@ -379,3 +389,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d
  			.pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523
--			.pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false }))
-+			.pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false }))
+-			.pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false, ...customElectronConfig }))
++			.pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false, ...customElectronConfig }))
  			.pipe(filter(['**', '!LICENSE', '!version'], { dot: true }));
-diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
-index f58d0f8..4edb371 100644
---- a/build/linux/debian/dep-lists.js
-+++ b/build/linux/debian/dep-lists.js
-@@ -140,3 +140,3 @@ exports.referenceGeneratedDepsByArch = {
-         'xdg-utils (>= 1.0.2)'
--    ]
-+    ],
- };
 diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
-index 5b7ccd5..707129f 100644
+index d00eb59..34ecdf1 100644
 --- a/build/linux/debian/dep-lists.ts
 +++ b/build/linux/debian/dep-lists.ts
-@@ -140,3 +140,3 @@ export const referenceGeneratedDepsByArch = {
+@@ -141,3 +141,3 @@ export const referenceGeneratedDepsByArch = {
  		'xdg-utils (>= 1.0.2)'
 -	]
 +	],
  };
-diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
-index d16e13b..18e409a 100644
---- a/build/linux/debian/install-sysroot.js
-+++ b/build/linux/debian/install-sysroot.js
-@@ -73,3 +73,5 @@ async function fetchUrl(options, retries = 10, retryDelay = 1000) {
-         try {
--            const response = await fetch(`https://api.github.com/repos/Microsoft/vscode-linux-build-agent/releases/tags/v${version}`, {
-+            const repository = process.env['VSCODE_SYSROOT_REPOSITORY'] ?? 'Microsoft/vscode-linux-build-agent';
-+            const actualVersion = process.env['VSCODE_SYSROOT_VERSION'] ?? version;
-+            const response = await fetch(`https://api.github.com/repos/${repository}/releases/tags/v${actualVersion}`, {
-                 headers: ghApiHeaders,
-@@ -82,3 +84,3 @@ async function fetchUrl(options, retries = 10, retryDelay = 1000) {
-                 if (!asset) {
--                    throw new Error(`Could not find asset in release of Microsoft/vscode-linux-build-agent @ ${version}`);
-+                    throw new Error(`Could not find asset in release of ${repository} @ ${actualVersion}`);
-                 }
 diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
-index 670fb68..092fc68 100644
+index 2cab657..0d9dc55 100644
 --- a/build/linux/debian/install-sysroot.ts
 +++ b/build/linux/debian/install-sysroot.ts
 @@ -82,3 +82,5 @@ async function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000)

+ 52 - 246
patches/linux/arch-1-ppc64le.patch

@@ -1,5 +1,5 @@
 diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh
-index c27358a..3e33f75 100755
+index 742aaef..b98ce1e 100755
 --- a/build/azure-pipelines/linux/setup-env.sh
 +++ b/build/azure-pipelines/linux/setup-env.sh
 @@ -76,2 +76,14 @@ elif [ "$npm_config_arch" == "arm" ]; then
@@ -33,60 +33,48 @@ index 5744a5f..3fedbe9 100644
 @@ -7 +7,2 @@ f82c8dacbb9dd85819e4801909eb4e842ac12c899632aa75b4839383a18c7501  arm-rpi-linux-
  84acc5a15566c98ddf80631731d672e0ce9febcf3f2e969101e0dfd7ef2405e3  x86_64-linux-gnu-glibc-2.28-gcc-8.5.0.tar.gz
 +fa8176d27be18bb0eeb7f55b0fa22255050b430ef68c29136599f02976eb0b1b  powerpc64le-linux-gnu-glibc-2.28.tar.gz
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index 5ac9f95..cd04bdf 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -50,2 +50,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index cb1a0a5..83ab52b 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -52,2 +52,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'arm64' },
 +	{ platform: 'linux', arch: 'ppc64le' },
  	{ platform: 'alpine', arch: 'arm64' },
-diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js
-index aafc64e..484d5f4 100644
---- a/build/gulpfile.scan.js
-+++ b/build/gulpfile.scan.js
-@@ -26,2 +26,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts
+index 19e50c0..47b25cf 100644
+--- a/build/gulpfile.scan.ts
++++ b/build/gulpfile.scan.ts
+@@ -24,2 +24,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'arm64' },
 +	{ platform: 'linux', arch: 'ppc64le' },
  ];
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 004417f..c38fc1a 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -475,2 +475,3 @@ const BUILD_TARGETS = [
- 	{ platform: 'linux', arch: 'arm64' },
-+	{ platform: 'linux', arch: 'ppc64le' },
- ];
-diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
-index cd8610d..707581d 100644
---- a/build/gulpfile.vscode.linux.js
-+++ b/build/gulpfile.vscode.linux.js
-@@ -33,3 +33,3 @@ const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
- function getDebPackageArch(arch) {
--	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64' }[arch];
-+	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el' }[arch];
- }
-@@ -146,3 +146,3 @@ function getRpmBuildPath(rpmArch) {
- function getRpmPackageArch(arch) {
--	return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64' }[arch];
-+	return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le' }[arch];
- }
-@@ -304,2 +304,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts
+index c5d2163..da4fc1f 100644
+--- a/build/gulpfile.vscode.linux.ts
++++ b/build/gulpfile.vscode.linux.ts
+@@ -32,2 +32,3 @@ function getDebPackageArch(arch: string): string {
+ 		case 'arm64': return 'arm64';
++		case 'ppc64le': return 'ppc64el';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -142,2 +143,3 @@ function getRpmPackageArch(arch: string): string {
+ 		case 'arm64': return 'aarch64';
++		case 'ppc64le': return 'ppc64le';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -286,2 +288,3 @@ const BUILD_TARGETS = [
  	{ arch: 'arm64' },
 +	{ arch: 'ppc64le' },
  ];
-diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js
-index 34276ce..fdae163 100644
---- a/build/linux/debian/calculate-deps.js
-+++ b/build/linux/debian/calculate-deps.js
-@@ -54,2 +54,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot)
-             break;
-+		case 'ppc64el':
-+			cmd.push(`-l${chromiumSysroot}/usr/lib/powerpc64le-linux-gnu`, `-l${chromiumSysroot}/lib/powerpc64le-linux-gnu`, `-l${vscodeSysroot}/usr/lib/powerpc64le-linux-gnu`, `-l${vscodeSysroot}/lib/powerpc64le-linux-gnu`);
-+			break;
-     }
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index d3ab651..075b29c 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -507,2 +507,3 @@ const BUILD_TARGETS = [
+ 	{ platform: 'linux', arch: 'arm64' },
++	{ platform: 'linux', arch: 'ppc64le' },
+ ];
 diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts
-index addc386..423c415 100644
+index 98a9630..8265f30 100644
 --- a/build/linux/debian/calculate-deps.ts
 +++ b/build/linux/debian/calculate-deps.ts
 @@ -61,2 +61,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi
@@ -98,57 +86,11 @@ index addc386..423c415 100644
 +				`-l${vscodeSysroot}/lib/powerpc64le-linux-gnu`);
 +			break;
  	}
-diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
-index 057961c..ed10661 100644
---- a/build/linux/debian/dep-lists.js
-+++ b/build/linux/debian/dep-lists.js
-@@ -141,2 +141,41 @@ exports.referenceGeneratedDepsByArch = {
-     ],
-+	'ppc64el': [
-+        'ca-certificates',
-+        'libasound2 (>= 1.0.17)',
-+        'libatk-bridge2.0-0 (>= 2.5.3)',
-+        'libatk1.0-0 (>= 2.2.0)',
-+        'libatspi2.0-0 (>= 2.9.90)',
-+        'libc6 (>= 2.17)',
-+        'libc6 (>= 2.28)',
-+        'libcairo2 (>= 1.6.0)',
-+        'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',
-+        'libdbus-1-3 (>= 1.9.14)',
-+        'libdrm2 (>= 2.4.75)',
-+        'libexpat1 (>= 2.1~beta3)',
-+        'libgbm1 (>= 17.1.0~rc2)',
-+        'libglib2.0-0 (>= 2.37.3)',
-+        'libgssapi-krb5-2 (>= 1.17)',
-+        'libgtk-3-0 (>= 3.9.10)',
-+        'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',
-+        'libkrb5-3 (>= 1.6.dfsg.2)',
-+        'libnspr4 (>= 2:4.9-2~)',
-+        'libnss3 (>= 2:3.30)',
-+        'libnss3 (>= 3.26)',
-+        'libpango-1.0-0 (>= 1.14.0)',
-+        'libstdc++6 (>= 4.1.1)',
-+        'libstdc++6 (>= 5)',
-+        'libstdc++6 (>= 5.2)',
-+        'libstdc++6 (>= 6)',
-+        'libx11-6',
-+        'libx11-6 (>= 2:1.4.99.1)',
-+        'libxcb1 (>= 1.9.2)',
-+        'libxcomposite1 (>= 1:0.4.4-1)',
-+        'libxdamage1 (>= 1:1.1)',
-+        'libxext6',
-+        'libxfixes3',
-+        'libxkbcommon0 (>= 0.5.0)',
-+        'libxkbfile1 (>= 1:1.1.0)',
-+        'libxrandr2',
-+        'xdg-utils (>= 1.0.2)'
-+    ],
- };
 diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
-index 707129f..7fe60be 100644
+index 34ecdf1..73d451f 100644
 --- a/build/linux/debian/dep-lists.ts
 +++ b/build/linux/debian/dep-lists.ts
-@@ -141,2 +141,41 @@ export const referenceGeneratedDepsByArch = {
+@@ -142,2 +142,41 @@ export const referenceGeneratedDepsByArch = {
  	],
 +	'ppc64el': [
 +		'ca-certificates',
@@ -190,37 +132,17 @@ index 707129f..7fe60be 100644
 +		'xdg-utils (>= 1.0.2)'
 +	],
  };
-diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
-index 8fbdf3d..011b36f 100644
---- a/build/linux/debian/install-sysroot.js
-+++ b/build/linux/debian/install-sysroot.js
-@@ -146,2 +146,6 @@ async function getVSCodeSysroot(arch, isMusl = false) {
-             break;
-+		case 'ppc64le':
-+            expectedName = `powerpc64le-linux-gnu${prefix}.tar.gz`;
-+            triple = `powerpc64le-linux-gnu`;
-+            break;
-     }
 diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
-index 9f3fd15..756b7fd 100644
+index 0d9dc55..ee3c136 100644
 --- a/build/linux/debian/install-sysroot.ts
 +++ b/build/linux/debian/install-sysroot.ts
-@@ -159,2 +159,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean =
+@@ -158,2 +158,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean =
  			break;
-+		case 'ppc64le':
++		case 'ppc64el':
 +			expectedName = `powerpc64le-linux-gnu${prefix}.tar.gz`;
 +			triple = `powerpc64le-linux-gnu`;
 +			break;
  	}
-diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js
-index ce21d50..2c56b9c 100644
---- a/build/linux/debian/types.js
-+++ b/build/linux/debian/types.js
-@@ -8,3 +8,3 @@ exports.isDebianArchString = isDebianArchString;
- function isDebianArchString(s) {
--    return ['amd64', 'armhf', 'arm64'].includes(s);
-+    return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s);
- }
 diff --git a/build/linux/debian/types.ts b/build/linux/debian/types.ts
 index e97485e..43f2434 100644
 --- a/build/linux/debian/types.ts
@@ -234,118 +156,11 @@ index e97485e..43f2434 100644
 -	return ['amd64', 'armhf', 'arm64'].includes(s);
 +	return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s);
  }
-diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js
-index 1f19c85..43ac5a0 100644
---- a/build/linux/rpm/dep-lists.js
-+++ b/build/linux/rpm/dep-lists.js
-@@ -316,2 +316,102 @@ exports.referenceGeneratedDepsByArch = {
-         'xdg-utils'
-+    ],
-+    "ppc64le": [
-+        'ca-certificates',
-+        'ld-linux-x86-64.so.2()(64bit)',
-+        'ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)',
-+        'ld64.so.2()(64bit)',
-+        'ld64.so.2(GLIBC_2.17)(64bit)',
-+        'libX11.so.6()(64bit)',
-+        'libXcomposite.so.1()(64bit)',
-+        'libXdamage.so.1()(64bit)',
-+        'libXext.so.6()(64bit)',
-+        'libXfixes.so.3()(64bit)',
-+        'libXrandr.so.2()(64bit)',
-+        'libasound.so.2()(64bit)',
-+        'libasound.so.2(ALSA_0.9)(64bit)',
-+        'libasound.so.2(ALSA_0.9.0rc4)(64bit)',
-+        'libatk-1.0.so.0()(64bit)',
-+        'libatk-bridge-2.0.so.0()(64bit)',
-+        'libatspi.so.0()(64bit)',
-+        'libc.so.6()(64bit)',
-+        'libc.so.6(GLIBC_2.14)(64bit)',
-+        'libc.so.6(GLIBC_2.17)(64bit)',
-+        'libc.so.6(GLIBC_2.2.5)(64bit)',
-+        'libc.so.6(GLIBC_2.28)(64bit)',
-+        'libc.so.6(GLIBC_2.4)(64bit)',
-+        'libc.so.6(GLIBC_2.9)(64bit)',
-+        'libcairo.so.2()(64bit)',
-+        'libcups.so.2()(64bit)',
-+        'libcurl.so.4()(64bit)',
-+        'libdbus-1.so.3()(64bit)',
-+        'libdbus-1.so.3(LIBDBUS_1_3)(64bit)',
-+        'libdl.so.2()(64bit)',
-+        'libdl.so.2(GLIBC_2.17)(64bit)',
-+        'libdrm.so.2()(64bit)',
-+        'libexpat.so.1()(64bit)',
-+        'libgbm.so.1()(64bit)',
-+        'libgcc_s.so.1()(64bit)',
-+        'libgcc_s.so.1(GCC_3.0)(64bit)',
-+        'libgcc_s.so.1(GCC_3.4.4)(64bit)',
-+        'libgio-2.0.so.0()(64bit)',
-+        'libglib-2.0.so.0()(64bit)',
-+        'libgobject-2.0.so.0()(64bit)',
-+        'libgssapi_krb5.so.2()(64bit)',
-+        'libgssapi_krb5.so.2(gssapi_krb5_2_MIT)(64bit)',
-+        'libgtk-3.so.0()(64bit)',
-+        'libkrb5.so.3()(64bit)',
-+        'libkrb5.so.3(krb5_3_MIT)(64bit)',
-+        'libm.so.6()(64bit)',
-+        'libm.so.6(GLIBC_2.17)(64bit)',
-+        'libm.so.6(GLIBC_2.2.5)(64bit)',
-+        'libm.so.6(GLIBC_2.27)(64bit)',
-+        'libnspr4.so()(64bit)',
-+        'libnss3.so()(64bit)',
-+        'libnss3.so(NSS_3.11)(64bit)',
-+        'libnss3.so(NSS_3.12)(64bit)',
-+        'libnss3.so(NSS_3.12.1)(64bit)',
-+        'libnss3.so(NSS_3.2)(64bit)',
-+        'libnss3.so(NSS_3.22)(64bit)',
-+        'libnss3.so(NSS_3.3)(64bit)',
-+        'libnss3.so(NSS_3.30)(64bit)',
-+        'libnss3.so(NSS_3.4)(64bit)',
-+        'libnss3.so(NSS_3.5)(64bit)',
-+        'libnss3.so(NSS_3.9.2)(64bit)',
-+        'libnssutil3.so()(64bit)',
-+        'libnssutil3.so(NSSUTIL_3.12.3)(64bit)',
-+        'libpango-1.0.so.0()(64bit)',
-+        'libpthread.so.0()(64bit)',
-+        'libpthread.so.0(GLIBC_2.17)(64bit)',
-+        'libpthread.so.0(GLIBC_2.2.5)(64bit)',
-+        'libpthread.so.0(GLIBC_2.3.2)(64bit)',
-+        'libpthread.so.0(GLIBC_2.3.3)(64bit)',
-+        'libsmime3.so()(64bit)',
-+        'libsmime3.so(NSS_3.10)(64bit)',
-+        'libsmime3.so(NSS_3.2)(64bit)',
-+        'libssl3.so(NSS_3.28)(64bit)',
-+        'libstdc++.so.6()(64bit)',
-+        'libstdc++.so.6(CXXABI_1.3)(64bit)',
-+        'libstdc++.so.6(CXXABI_1.3.5)(64bit)',
-+        'libstdc++.so.6(CXXABI_1.3.8)(64bit)',
-+        'libstdc++.so.6(CXXABI_1.3.9)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.11)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.14)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.15)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.18)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.19)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.20)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.21)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.22)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.5)(64bit)',
-+        'libstdc++.so.6(GLIBCXX_3.4.9)(64bit)',
-+        'libutil.so.1()(64bit)',
-+        'libutil.so.1(GLIBC_2.2.5)(64bit)',
-+        'libxcb.so.1()(64bit)',
-+        'libxkbcommon.so.0()(64bit)',
-+        'libxkbcommon.so.0(V_0.5.0)(64bit)',
-+        'libxkbfile.so.1()(64bit)',
-+        'rpmlib(FileDigests) <= 4.6.0-1',
-+        'rtld(GNU_HASH)',
-+        'xdg-utils'
-     ]
 diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts
-index db52338..4231f09 100644
+index 783923f..fba6ee4 100644
 --- a/build/linux/rpm/dep-lists.ts
 +++ b/build/linux/rpm/dep-lists.ts
-@@ -315,2 +315,102 @@ export const referenceGeneratedDepsByArch = {
+@@ -316,2 +316,102 @@ export const referenceGeneratedDepsByArch = {
  		'xdg-utils'
 +	],
 +	"ppc64le": [
@@ -448,15 +263,6 @@ index db52338..4231f09 100644
 +		'rtld(GNU_HASH)',
 +		'xdg-utils'
  	]
-diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js
-index a20b9c2..7b58961 100644
---- a/build/linux/rpm/types.js
-+++ b/build/linux/rpm/types.js
-@@ -8,3 +8,3 @@ exports.isRpmArchString = isRpmArchString;
- function isRpmArchString(s) {
--    return ['x86_64', 'armv7hl', 'aarch64'].includes(s);
-+    return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le'].includes(s);
- }
 diff --git a/build/linux/rpm/types.ts b/build/linux/rpm/types.ts
 index c6a01da..3f3c3f5 100644
 --- a/build/linux/rpm/types.ts
@@ -471,27 +277,27 @@ index c6a01da..3f3c3f5 100644
 +	return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le'].includes(s);
  }
 diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs
-index a39bbf7..84d3efe 100644
+index 3e0895f..3fb7ffc 100644
 --- a/cli/src/update_service.rs
 +++ b/cli/src/update_service.rs
-@@ -176,2 +176,3 @@ pub enum Platform {
+@@ -186,2 +186,3 @@ pub enum Platform {
  	LinuxARM32Legacy,
 +	LinuxPPC64LE,
  	DarwinX64,
-@@ -194,2 +195,3 @@ impl Platform {
+@@ -204,2 +205,3 @@ impl Platform {
  			Platform::LinuxARM32Legacy => "armhf",
 +			Platform::LinuxPPC64LE => "ppc64le",
  			Platform::DarwinX64 => "x64",
-@@ -213,2 +215,3 @@ impl Platform {
+@@ -223,2 +225,3 @@ impl Platform {
  			Platform::LinuxARM32Legacy => "linux",
 +			Platform::LinuxPPC64LE => "linux",
  			Platform::DarwinX64 => "darwin",
-@@ -241,2 +244,4 @@ impl Platform {
+@@ -251,2 +254,4 @@ impl Platform {
  			Some(Platform::LinuxARM64)
 +		} else if cfg!(all(target_os = "linux", target_arch = "powerpc64")) {
 +			Some(Platform::LinuxPPC64LE)
  		} else if cfg!(all(target_os = "macos", target_arch = "x86_64")) {
-@@ -268,2 +273,3 @@ impl fmt::Display for Platform {
+@@ -278,2 +283,3 @@ impl fmt::Display for Platform {
  			Platform::LinuxARM32Legacy => "LinuxARM32Legacy",
 +			Platform::LinuxPPC64LE => "LinuxPPC64LE",
  			Platform::DarwinX64 => "DarwinX64",
@@ -513,28 +319,28 @@ index 8ea4c0b..b9d3b47 100644
 +    ppc64el) LDCONFIG_ARCH="64bit";;
  esac
 diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-index e91310f..a28beef 100644
+index 34eaca0..a754ff3 100644
 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts
 +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-@@ -47,2 +47,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
+@@ -48,2 +48,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
  		case TargetPlatform.LINUX_ARMHF: return 'Linux ARM';
 +		case TargetPlatform.LINUX_PPC64LE: return 'Linux PowerPC64';
  
-@@ -70,2 +71,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
+@@ -71,2 +72,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
  		case TargetPlatform.LINUX_ARMHF: return TargetPlatform.LINUX_ARMHF;
 +		case TargetPlatform.LINUX_PPC64LE: return TargetPlatform.LINUX_PPC64LE;
  
-@@ -105,2 +107,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
+@@ -106,2 +108,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
  			}
 +			if (arch === 'ppc64le') {
 +				return TargetPlatform.LINUX_PPC64LE;
 +			}
  			return TargetPlatform.UNKNOWN;
 diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts
-index 0b42527..69d6eb3 100644
+index 4c5d20c..1735ac9 100644
 --- a/src/vs/platform/extensions/common/extensions.ts
 +++ b/src/vs/platform/extensions/common/extensions.ts
-@@ -329,2 +329,3 @@ export const enum TargetPlatform {
+@@ -330,2 +330,3 @@ export const enum TargetPlatform {
  	LINUX_ARMHF = 'linux-armhf',
 +	LINUX_PPC64LE = 'linux-ppc64le',
  

+ 48 - 136
patches/linux/arch-2-riscv64.patch

@@ -1,57 +1,45 @@
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index cd04bdf..e284026 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -51,2 +51,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index 83ab52b..ff202a7 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -53,2 +53,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'ppc64le' },
 +	{ platform: 'linux', arch: 'riscv64' },
  	{ platform: 'alpine', arch: 'arm64' },
-diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js
-index 484d5f4..66c8e1f 100644
---- a/build/gulpfile.scan.js
-+++ b/build/gulpfile.scan.js
-@@ -27,2 +27,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts
+index 47b25cf..dd5bb56 100644
+--- a/build/gulpfile.scan.ts
++++ b/build/gulpfile.scan.ts
+@@ -25,2 +25,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'ppc64le' },
 +	{ platform: 'linux', arch: 'riscv64' },
  ];
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 3ed2182..f0614d0 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -492,2 +492,3 @@ const BUILD_TARGETS = [
- 	{ platform: 'linux', arch: 'ppc64le' },
-+	{ platform: 'linux', arch: 'riscv64' },
- ];
-diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
-index 707581d..298181d 100644
---- a/build/gulpfile.vscode.linux.js
-+++ b/build/gulpfile.vscode.linux.js
-@@ -33,3 +33,3 @@ const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
- function getDebPackageArch(arch) {
--	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el' }[arch];
-+	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el', riscv64: 'riscv64' }[arch];
- }
-@@ -146,3 +146,3 @@ function getRpmBuildPath(rpmArch) {
- function getRpmPackageArch(arch) {
--	return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le' }[arch];
-+	return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le', riscv64: 'riscv64' }[arch];
- }
-@@ -305,2 +305,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts
+index da4fc1f..b64dd9a 100644
+--- a/build/gulpfile.vscode.linux.ts
++++ b/build/gulpfile.vscode.linux.ts
+@@ -33,2 +33,3 @@ function getDebPackageArch(arch: string): string {
+ 		case 'ppc64le': return 'ppc64el';
++		case 'riscv64': return 'riscv64';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -144,2 +145,3 @@ function getRpmPackageArch(arch: string): string {
+ 		case 'ppc64le': return 'ppc64le';
++		case 'riscv64': return 'riscv64';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -289,2 +291,3 @@ const BUILD_TARGETS = [
  	{ arch: 'ppc64le' },
 +	{ arch: 'riscv64' },
  ];
-diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js
-index fdae163..a08ebda 100644
---- a/build/linux/debian/calculate-deps.js
-+++ b/build/linux/debian/calculate-deps.js
-@@ -57,2 +57,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot)
- 			break;
-+		case 'riscv64':
-+			cmd.push(`-l${chromiumSysroot}/usr/lib/riscv64-linux-gnu`, `-l${chromiumSysroot}/lib/riscv64-linux-gnu`, `-l${vscodeSysroot}/usr/lib/riscv64-linux-gnu`, `-l${vscodeSysroot}/lib/riscv64-linux-gnu`);
-+			break;
-     }
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index 075b29c..15bd141 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -508,2 +508,3 @@ const BUILD_TARGETS = [
+ 	{ platform: 'linux', arch: 'ppc64le' },
++	{ platform: 'linux', arch: 'riscv64' },
+ ];
 diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts
-index 423c415..88ee2f0 100644
+index 8265f30..5503896 100644
 --- a/build/linux/debian/calculate-deps.ts
 +++ b/build/linux/debian/calculate-deps.ts
 @@ -67,2 +67,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi
@@ -63,58 +51,11 @@ index 423c415..88ee2f0 100644
 +				`-l${vscodeSysroot}/lib/riscv64-linux-gnu`);
 +			break;
  	}
-diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
-index a85352e..4ccdcd9 100644
---- a/build/linux/debian/dep-lists.js
-+++ b/build/linux/debian/dep-lists.js
-@@ -178,2 +178,42 @@ exports.referenceGeneratedDepsByArch = {
-     ],
-+	'riscv64': [
-+        'ca-certificates',
-+        'libatomic1',
-+        'libasound2 (>= 1.0.17)',
-+        'libatk-bridge2.0-0 (>= 2.5.3)',
-+        'libatk1.0-0 (>= 2.2.0)',
-+        'libatspi2.0-0 (>= 2.9.90)',
-+        'libc6 (>= 2.17)',
-+        'libc6 (>= 2.28)',
-+        'libcairo2 (>= 1.6.0)',
-+        'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',
-+        'libdbus-1-3 (>= 1.0.2)',
-+        'libdrm2 (>= 2.4.60)',
-+        'libexpat1 (>= 2.0.1)',
-+        'libgbm1 (>= 17.1.0~rc2)',
-+        'libglib2.0-0 (>= 2.16.0)',
-+        'libglib2.0-0 (>= 2.39.4)',
-+        'libgtk-3-0 (>= 3.9.10)',
-+        'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',
-+        'libnspr4 (>= 2:4.9-2~)',
-+        'libnss3 (>= 2:3.22)',
-+        'libnss3 (>= 3.26)',
-+        'libpango-1.0-0 (>= 1.14.0)',
-+        'libsecret-1-0 (>= 0.18)',
-+        'libstdc++6 (>= 4.1.1)',
-+        'libstdc++6 (>= 5)',
-+        'libstdc++6 (>= 5.2)',
-+        'libstdc++6 (>= 6)',
-+        'libx11-6',
-+        'libx11-6 (>= 2:1.4.99.1)',
-+        'libxcb1 (>= 1.9.2)',
-+        'libxcomposite1 (>= 1:0.4.4-1)',
-+        'libxdamage1 (>= 1:1.1)',
-+        'libxext6',
-+        'libxfixes3',
-+        'libxkbcommon0 (>= 0.4.1)',
-+        'libxkbfile1',
-+        'libxrandr2',
-+        'xdg-utils (>= 1.0.2)'
-+    ],
- };
 diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
-index 0d0f11b..b765492 100644
+index 73d451f..7ea5910 100644
 --- a/build/linux/debian/dep-lists.ts
 +++ b/build/linux/debian/dep-lists.ts
-@@ -178,2 +178,42 @@ export const referenceGeneratedDepsByArch = {
+@@ -181,2 +181,42 @@ export const referenceGeneratedDepsByArch = {
  	],
 +	'riscv64': [
 +		'ca-certificates',
@@ -157,37 +98,17 @@ index 0d0f11b..b765492 100644
 +		'xdg-utils (>= 1.0.2)'
 +	],
  };
-diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
-index ab6b826..fc2817a 100644
---- a/build/linux/debian/install-sysroot.js
-+++ b/build/linux/debian/install-sysroot.js
-@@ -144,2 +144,6 @@ async function getVSCodeSysroot(arch) {
-             break;
-+	    case 'riscv64':
-+	             expectedName = `riscv64-linux-gnu${prefix}.tar.gz`;
-+	             triple = 'riscv64-linux-gnu';
-+	             break;
-     }
 diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
-index c23db0f..50c28b2 100644
+index ee3c136..53ff8eb 100644
 --- a/build/linux/debian/install-sysroot.ts
 +++ b/build/linux/debian/install-sysroot.ts
-@@ -158,2 +158,6 @@ export async function getVSCodeSysroot(arch: DebianArchString): Promise<string>
+@@ -162,2 +162,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean =
  			break;
 +		case 'riscv64':
 +			expectedName = `riscv64-linux-gnu${prefix}.tar.gz`;
 +			triple = 'riscv64-linux-gnu';
 +			break;
  	}
-diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js
-index 2c56b9c..cadefc2 100644
---- a/build/linux/debian/types.js
-+++ b/build/linux/debian/types.js
-@@ -8,3 +8,3 @@ exports.isDebianArchString = isDebianArchString;
- function isDebianArchString(s) {
--    return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s);
-+    return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s);
- }
 diff --git a/build/linux/debian/types.ts b/build/linux/debian/types.ts
 index 43f2434..24fe452 100644
 --- a/build/linux/debian/types.ts
@@ -201,15 +122,6 @@ index 43f2434..24fe452 100644
 -	return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s);
 +	return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s);
  }
-diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js
-index 7b58961..99a8cff 100644
---- a/build/linux/rpm/types.js
-+++ b/build/linux/rpm/types.js
-@@ -8,3 +8,3 @@ exports.isRpmArchString = isRpmArchString;
- function isRpmArchString(s) {
--    return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le'].includes(s);
-+    return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64'].includes(s);
- }
 diff --git a/build/linux/rpm/types.ts b/build/linux/rpm/types.ts
 index 3f3c3f5..d94537e 100644
 --- a/build/linux/rpm/types.ts
@@ -224,27 +136,27 @@ index 3f3c3f5..d94537e 100644
 +	return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64'].includes(s);
  }
 diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs
-index 84d3efe..4f2c8c2 100644
+index 3fb7ffc..f1afd87 100644
 --- a/cli/src/update_service.rs
 +++ b/cli/src/update_service.rs
-@@ -177,2 +177,3 @@ pub enum Platform {
+@@ -187,2 +187,3 @@ pub enum Platform {
  	LinuxPPC64LE,
 +	LinuxRISCV64,
  	DarwinX64,
-@@ -196,2 +197,3 @@ impl Platform {
+@@ -206,2 +207,3 @@ impl Platform {
  			Platform::LinuxPPC64LE => "ppc64le",
 +			Platform::LinuxRISCV64 => "riscv64",
  			Platform::DarwinX64 => "x64",
-@@ -216,2 +218,3 @@ impl Platform {
+@@ -226,2 +228,3 @@ impl Platform {
  			Platform::LinuxPPC64LE => "linux",
 +			Platform::LinuxRISCV64 => "linux",
  			Platform::DarwinX64 => "darwin",
-@@ -246,2 +249,4 @@ impl Platform {
+@@ -256,2 +259,4 @@ impl Platform {
  			Some(Platform::LinuxPPC64LE)
 +		} else if cfg!(all(target_os = "linux", target_arch = "riscv64")) {
 +			Some(Platform::LinuxRISCV64)
  		} else if cfg!(all(target_os = "macos", target_arch = "x86_64")) {
-@@ -274,2 +279,3 @@ impl fmt::Display for Platform {
+@@ -284,2 +289,3 @@ impl fmt::Display for Platform {
  			Platform::LinuxPPC64LE => "LinuxPPC64LE",
 +			Platform::LinuxRISCV64 => "LinuxRISCV64",
  			Platform::DarwinX64 => "DarwinX64",
@@ -266,28 +178,28 @@ index b9d3b47..b18e402 100644
 +	riscv64) LDCONFIG_ARCH="RISC-V";;
  esac
 diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-index 5400065..be95b04 100644
+index a754ff3..b607327 100644
 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts
 +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-@@ -45,2 +45,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
+@@ -49,2 +49,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
  		case TargetPlatform.LINUX_PPC64LE: return 'Linux PowerPC64';
 +		case TargetPlatform.LINUX_RISCV64: return 'Linux RISC-V 64';
  
-@@ -69,2 +70,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
+@@ -73,2 +74,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
  		case TargetPlatform.LINUX_PPC64LE: return TargetPlatform.LINUX_PPC64LE;
 +		case TargetPlatform.LINUX_RISCV64: return TargetPlatform.LINUX_RISCV64;
  
-@@ -107,2 +109,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
+@@ -111,2 +113,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
  			}
 +			if (arch === 'riscv64') {
 +				return TargetPlatform.LINUX_RISCV64;
 +			}
  			return TargetPlatform.UNKNOWN;
 diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts
-index 23f1bea..10152de 100644
+index 1735ac9..96d08cb 100644
 --- a/src/vs/platform/extensions/common/extensions.ts
 +++ b/src/vs/platform/extensions/common/extensions.ts
-@@ -320,2 +320,3 @@ export const enum TargetPlatform {
+@@ -331,2 +331,3 @@ export const enum TargetPlatform {
  	LINUX_PPC64LE = 'linux-ppc64le',
 +	LINUX_RISCV64 = 'linux-riscv64',
  

+ 43 - 27
patches/linux/arch-3-loong64.patch

@@ -1,49 +1,65 @@
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index e284026..52f9a12 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -52,2 +52,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index ff202a7..74bd1bc 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -54,2 +54,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'riscv64' },
 +	{ platform: 'linux', arch: 'loong64' },
  	{ platform: 'alpine', arch: 'arm64' },
-diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js
-index 66c8e1f..8a8c1eb 100644
---- a/build/gulpfile.scan.js
-+++ b/build/gulpfile.scan.js
-@@ -28,2 +28,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts
+index dd5bb56..e7881de 100644
+--- a/build/gulpfile.scan.ts
++++ b/build/gulpfile.scan.ts
+@@ -26,2 +26,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'riscv64' },
 +	{ platform: 'linux', arch: 'loong64' },
  ];
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index f0614d0..1438867 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -493,2 +493,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts
+index b64dd9a..e146586 100644
+--- a/build/gulpfile.vscode.linux.ts
++++ b/build/gulpfile.vscode.linux.ts
+@@ -34,2 +34,3 @@ function getDebPackageArch(arch: string): string {
+ 		case 'riscv64': return 'riscv64';
++		case 'loong64': return 'loong64';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -146,2 +147,3 @@ function getRpmPackageArch(arch: string): string {
+ 		case 'riscv64': return 'riscv64';
++		case 'loong64': return 'loong64';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -292,2 +294,3 @@ const BUILD_TARGETS = [
+ 	{ arch: 'riscv64' },
++	{ arch: 'loong64' },
+ ];
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index 15bd141..cabe16f 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -509,2 +509,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'riscv64' },
 +	{ platform: 'linux', arch: 'loong64' },
  ];
 diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs
-index 4f2c8c2..4ea1bd2 100644
+index f1afd87..0a5e6df 100644
 --- a/cli/src/update_service.rs
 +++ b/cli/src/update_service.rs
-@@ -178,2 +178,3 @@ pub enum Platform {
+@@ -188,2 +188,3 @@ pub enum Platform {
  	LinuxRISCV64,
 +	LinuxLoong64,
  	DarwinX64,
-@@ -198,2 +199,3 @@ impl Platform {
+@@ -208,2 +209,3 @@ impl Platform {
  			Platform::LinuxRISCV64 => "riscv64",
 +			Platform::LinuxLoong64 => "loong64",
  			Platform::DarwinX64 => "x64",
-@@ -219,2 +221,3 @@ impl Platform {
+@@ -229,2 +231,3 @@ impl Platform {
  			Platform::LinuxRISCV64 => "linux",
 +			Platform::LinuxLoong64 => "linux",
  			Platform::DarwinX64 => "darwin",
-@@ -251,2 +254,4 @@ impl Platform {
+@@ -261,2 +264,4 @@ impl Platform {
  			Some(Platform::LinuxRISCV64)
 +		} else if cfg!(all(target_os = "linux", target_arch = "loongarch64")) {
 +			Some(Platform::LinuxLoong64)
  		} else if cfg!(all(target_os = "macos", target_arch = "x86_64")) {
-@@ -280,2 +285,3 @@ impl fmt::Display for Platform {
+@@ -290,2 +295,3 @@ impl fmt::Display for Platform {
  			Platform::LinuxRISCV64 => "LinuxRISCV64",
 +			Platform::LinuxLoong64 => "LinuxLoong64",
  			Platform::DarwinX64 => "DarwinX64",
@@ -65,28 +81,28 @@ index b18e402..0b7aa4e 100644
 +    loongarch64) LDCONFIG_ARCH="double-float";;
  esac
 diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-index be95b04..1a0decd 100644
+index b607327..7162d83 100644
 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts
 +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-@@ -46,2 +46,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
+@@ -50,2 +50,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
  		case TargetPlatform.LINUX_RISCV64: return 'Linux RISC-V 64';
 +		case TargetPlatform.LINUX_LOONG64: return 'Linux Loong64';
  
-@@ -71,2 +72,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
+@@ -75,2 +76,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
  		case TargetPlatform.LINUX_RISCV64: return TargetPlatform.LINUX_RISCV64;
 +		case TargetPlatform.LINUX_LOONG64: return TargetPlatform.LINUX_LOONG64;
  
-@@ -112,2 +114,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
+@@ -116,2 +118,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
  			}
 +			if (arch === 'loong64') {
 +				return TargetPlatform.LINUX_LOONG64;
 +			}
  			return TargetPlatform.UNKNOWN;
 diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts
-index 10152de..3eb0412 100644
+index 96d08cb..51e67ea 100644
 --- a/src/vs/platform/extensions/common/extensions.ts
 +++ b/src/vs/platform/extensions/common/extensions.ts
-@@ -321,2 +321,3 @@ export const enum TargetPlatform {
+@@ -332,2 +332,3 @@ export const enum TargetPlatform {
  	LINUX_RISCV64 = 'linux-riscv64',
 +	LINUX_LOONG64 = 'linux-loong64',
  

+ 45 - 133
patches/linux/arch-4-s390x.patch

@@ -1,5 +1,5 @@
 diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh
-index 3e33f75..052b38f 100755
+index b98ce1e..c078682 100755
 --- a/build/azure-pipelines/linux/setup-env.sh
 +++ b/build/azure-pipelines/linux/setup-env.sh
 @@ -88,2 +88,14 @@ elif [ "$npm_config_arch" == "ppc64" ]; then
@@ -24,60 +24,48 @@ index 3fedbe9..3c4e291 100644
 @@ -8 +8,2 @@ f82c8dacbb9dd85819e4801909eb4e842ac12c899632aa75b4839383a18c7501  arm-rpi-linux-
  fa8176d27be18bb0eeb7f55b0fa22255050b430ef68c29136599f02976eb0b1b  powerpc64le-linux-gnu-glibc-2.28.tar.gz
 +7055f3d40e7195fb1e13f0fbaf5ffadf781bddaca5fd5e0d9972f4157a203fb5  s390x-linux-gnu-glibc-2.28.tar.gz
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index 52f9a12..4b890f4 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -53,2 +53,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts
+index 74bd1bc..ba46ff2 100644
+--- a/build/gulpfile.reh.ts
++++ b/build/gulpfile.reh.ts
+@@ -55,2 +55,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'loong64' },
 +	{ platform: 'linux', arch: 's390x' },
  	{ platform: 'alpine', arch: 'arm64' },
-diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js
-index 8a8c1eb..1ef390b 100644
---- a/build/gulpfile.scan.js
-+++ b/build/gulpfile.scan.js
-@@ -29,2 +29,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts
+index e7881de..affa8df 100644
+--- a/build/gulpfile.scan.ts
++++ b/build/gulpfile.scan.ts
+@@ -27,2 +27,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'loong64' },
 +	{ platform: 'linux', arch: 's390x' },
  ];
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index ee66585..c9f9ceb 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -478,2 +478,3 @@ const BUILD_TARGETS = [
+diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts
+index e146586..ca18865 100644
+--- a/build/gulpfile.vscode.linux.ts
++++ b/build/gulpfile.vscode.linux.ts
+@@ -35,2 +35,3 @@ function getDebPackageArch(arch: string): string {
+ 		case 'loong64': return 'loong64';
++		case 's390x': return 's390x';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -148,2 +149,3 @@ function getRpmPackageArch(arch: string): string {
+ 		case 'loong64': return 'loong64';
++		case 's390x': return 's390x';
+ 		default: throw new Error(`Unknown arch: ${arch}`);
+@@ -295,2 +297,3 @@ const BUILD_TARGETS = [
+ 	{ arch: 'loong64' },
++	{ arch: 's390x' },
+ ];
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index cabe16f..2703602 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -510,2 +510,3 @@ const BUILD_TARGETS = [
  	{ platform: 'linux', arch: 'loong64' },
 +	{ platform: 'linux', arch: 's390x' },
  ];
-diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
-index 298181d..dcc42a8 100644
---- a/build/gulpfile.vscode.linux.js
-+++ b/build/gulpfile.vscode.linux.js
-@@ -33,3 +33,3 @@ const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
- function getDebPackageArch(arch) {
--	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el', riscv64: 'riscv64' }[arch];
-+	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el', riscv64: 'riscv64', s390x: 's390x' }[arch];
- }
-@@ -146,3 +146,3 @@ function getRpmBuildPath(rpmArch) {
- function getRpmPackageArch(arch) {
--	return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le', riscv64: 'riscv64' }[arch];
-+	return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le', riscv64: 'riscv64', s390x: 's390x' }[arch];
- }
-@@ -306,2 +306,3 @@ const BUILD_TARGETS = [
- 	{ arch: 'riscv64' },
-+	{ arch: 's390x' },
- ];
-diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js
-index a08ebda..9527119 100644
---- a/build/linux/debian/calculate-deps.js
-+++ b/build/linux/debian/calculate-deps.js
-@@ -60,2 +60,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot)
- 			break;
-+		case 's390x':
-+			cmd.push(`-l${chromiumSysroot}/usr/lib/s390x-linux-gnu`, `-l${chromiumSysroot}/lib/s390x-linux-gnu`, `-l${vscodeSysroot}/usr/lib/s390x-linux-gnu`, `-l${vscodeSysroot}/lib/s390x-linux-gnu`);
-+			break;
-     }
 diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts
-index 88ee2f0..8037cf2 100644
+index 5503896..dfae87c 100644
 --- a/build/linux/debian/calculate-deps.ts
 +++ b/build/linux/debian/calculate-deps.ts
 @@ -73,2 +73,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi
@@ -89,58 +77,11 @@ index 88ee2f0..8037cf2 100644
 +				`-l${vscodeSysroot}/lib/s390x-linux-gnu`);
 +			break;
  	}
-diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
-index 13cf8f0..9ffd805 100644
---- a/build/linux/debian/dep-lists.js
-+++ b/build/linux/debian/dep-lists.js
-@@ -220,2 +220,42 @@ exports.referenceGeneratedDepsByArch = {
-     ],
-+    's390x': [
-+        'ca-certificates',
-+        'libatomic1',
-+        'libasound2 (>= 1.0.17)',
-+        'libatk-bridge2.0-0 (>= 2.5.3)',
-+        'libatk1.0-0 (>= 2.2.0)',
-+        'libatspi2.0-0 (>= 2.9.90)',
-+        'libc6 (>= 2.17)',
-+        'libc6 (>= 2.28)',
-+        'libcairo2 (>= 1.6.0)',
-+        'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3',
-+        'libdbus-1-3 (>= 1.0.2)',
-+        'libdrm2 (>= 2.4.60)',
-+        'libexpat1 (>= 2.0.1)',
-+        'libgbm1 (>= 17.1.0~rc2)',
-+        'libglib2.0-0 (>= 2.16.0)',
-+        'libglib2.0-0 (>= 2.39.4)',
-+        'libgtk-3-0 (>= 3.9.10)',
-+        'libgtk-3-0 (>= 3.9.10) | libgtk-4-1',
-+        'libnspr4 (>= 2:4.9-2~)',
-+        'libnss3 (>= 2:3.22)',
-+        'libnss3 (>= 3.26)',
-+        'libpango-1.0-0 (>= 1.14.0)',
-+        'libsecret-1-0 (>= 0.18)',
-+        'libstdc++6 (>= 4.1.1)',
-+        'libstdc++6 (>= 5)',
-+        'libstdc++6 (>= 5.2)',
-+        'libstdc++6 (>= 6)',
-+        'libx11-6',
-+        'libx11-6 (>= 2:1.4.99.1)',
-+        'libxcb1 (>= 1.9.2)',
-+        'libxcomposite1 (>= 1:0.4.4-1)',
-+        'libxdamage1 (>= 1:1.1)',
-+        'libxext6',
-+        'libxfixes3',
-+        'libxkbcommon0 (>= 0.4.1)',
-+        'libxkbfile1',
-+        'libxrandr2',
-+        'xdg-utils (>= 1.0.2)'
-+    ],
- };
 diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
-index 7e6938a..8a314ec 100644
+index 7ea5910..9498993 100644
 --- a/build/linux/debian/dep-lists.ts
 +++ b/build/linux/debian/dep-lists.ts
-@@ -220,2 +220,42 @@ export const referenceGeneratedDepsByArch = {
+@@ -221,2 +221,42 @@ export const referenceGeneratedDepsByArch = {
  	],
 +	's390x': [
 +		'ca-certificates',
@@ -183,37 +124,17 @@ index 7e6938a..8a314ec 100644
 +		'xdg-utils (>= 1.0.2)'
 +	],
  };
-diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
-index e510426..ce7c75b 100644
---- a/build/linux/debian/install-sysroot.js
-+++ b/build/linux/debian/install-sysroot.js
-@@ -154,2 +154,6 @@ async function getVSCodeSysroot(arch, isMusl = false) {
- 	             break;
-+        case 's390x':
-+            expectedName = `s390x-linux-gnu${prefix}.tar.gz`;
-+            triple = 's390x-linux-gnu';
-+            break;
-     }
 diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
-index 42841f6..cffae59 100644
+index 53ff8eb..137f1be 100644
 --- a/build/linux/debian/install-sysroot.ts
 +++ b/build/linux/debian/install-sysroot.ts
-@@ -167,2 +167,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean =
+@@ -166,2 +166,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean =
  			break;
 +		case 's390x':
 +			expectedName = `s390x-linux-gnu${prefix}.tar.gz`;
 +			triple = 's390x-linux-gnu';
 +			break;
  	}
-diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js
-index cadefc2..8132812 100644
---- a/build/linux/debian/types.js
-+++ b/build/linux/debian/types.js
-@@ -8,3 +8,3 @@ exports.isDebianArchString = isDebianArchString;
- function isDebianArchString(s) {
--    return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s);
-+    return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64', 's390x'].includes(s);
- }
 diff --git a/build/linux/debian/types.ts b/build/linux/debian/types.ts
 index 24fe452..9efba5b 100644
 --- a/build/linux/debian/types.ts
@@ -228,10 +149,10 @@ index 24fe452..9efba5b 100644
 +	return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64', 's390x'].includes(s);
  }
 diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts
-index 4231f09..fc70433 100644
+index fba6ee4..33efc80 100644
 --- a/build/linux/rpm/dep-lists.ts
 +++ b/build/linux/rpm/dep-lists.ts
-@@ -415,2 +415,102 @@ export const referenceGeneratedDepsByArch = {
+@@ -416,2 +416,102 @@ export const referenceGeneratedDepsByArch = {
  		'xdg-utils'
 +	],
 +	"s390x": [
@@ -334,15 +255,6 @@ index 4231f09..fc70433 100644
 +		'rtld(GNU_HASH)',
 +		'xdg-utils'
  	]
-diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js
-index 99a8cff..e2f3548 100644
---- a/build/linux/rpm/types.js
-+++ b/build/linux/rpm/types.js
-@@ -8,3 +8,3 @@ exports.isRpmArchString = isRpmArchString;
- function isRpmArchString(s) {
--    return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64'].includes(s);
-+    return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64', 's390x'].includes(s);
- }
 diff --git a/build/linux/rpm/types.ts b/build/linux/rpm/types.ts
 index d94537e..3834b94 100644
 --- a/build/linux/rpm/types.ts
@@ -365,28 +277,28 @@ index 0b7aa4e..e8b7ce0 100644
 +    s390x)   LDCONFIG_ARCH="64bit";;
  esac
 diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-index dedea4c..1043fe4 100644
+index 7162d83..f6bb8fd 100644
 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts
 +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-@@ -50,2 +50,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
+@@ -51,2 +51,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
  		case TargetPlatform.LINUX_LOONG64: return 'Linux Loong64';
 +		case TargetPlatform.LINUX_S390X: return 'Linux S390X';
  
-@@ -76,2 +77,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
+@@ -77,2 +78,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
  		case TargetPlatform.LINUX_LOONG64: return TargetPlatform.LINUX_LOONG64;
 +		case TargetPlatform.LINUX_S390X: return TargetPlatform.LINUX_S390X;
  
-@@ -120,2 +122,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
+@@ -121,2 +123,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
  			}
 +			if (arch === 's390x') {
 +				return TargetPlatform.LINUX_S390X;
 +			}
  			return TargetPlatform.UNKNOWN;
 diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts
-index 6d554ce..51d23fa 100644
+index 51e67ea..a006165 100644
 --- a/src/vs/platform/extensions/common/extensions.ts
 +++ b/src/vs/platform/extensions/common/extensions.ts
-@@ -332,2 +332,3 @@ export const enum TargetPlatform {
+@@ -333,2 +333,3 @@ export const enum TargetPlatform {
  	LINUX_LOONG64 = 'linux-loong64',
 +	LINUX_S390X = 'linux-s390x',
  

+ 26 - 0
patches/linux/cli.patch

@@ -0,0 +1,26 @@
+diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs
+index bbabadc..08af0df 100644
+--- a/cli/src/tunnels/code_server.rs
++++ b/cli/src/tunnels/code_server.rs
+@@ -4,2 +4,4 @@
+  *--------------------------------------------------------------------------------------------*/
++#![allow(unused_imports)]
++
+ use super::paths::{InstalledServer, ServerPaths};
+diff --git a/cli/src/tunnels/dev_tunnels.rs b/cli/src/tunnels/dev_tunnels.rs
+index 0168ee6..5d0d8d4 100644
+--- a/cli/src/tunnels/dev_tunnels.rs
++++ b/cli/src/tunnels/dev_tunnels.rs
+@@ -4,2 +4,4 @@
+  *--------------------------------------------------------------------------------------------*/
++#![allow(unused_imports)]
++
+ use super::protocol::{self, PortPrivacy, PortProtocol};
+diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs
+index 55f1dad..f22a83c 100644
+--- a/cli/src/update_service.rs
++++ b/cli/src/update_service.rs
+@@ -4,2 +4,3 @@
+  *--------------------------------------------------------------------------------------------*/
++#![allow(unused_imports)]
+ 

+ 6 - 6
patches/linux/client/disable-remote.patch

@@ -1,13 +1,13 @@
-diff --git a/build/npm/dirs.js b/build/npm/dirs.js
-index b9645e6..22f3450 100644
---- a/build/npm/dirs.js
-+++ b/build/npm/dirs.js
-@@ -47,4 +47,2 @@ const dirs = [
+diff --git a/build/npm/dirs.ts b/build/npm/dirs.ts
+index 48d76e2..270b078 100644
+--- a/build/npm/dirs.ts
++++ b/build/npm/dirs.ts
+@@ -53,4 +53,2 @@ export const dirs = [
  	'extensions/vscode-test-resolver',
 -	'remote',
 -	'remote/web',
  	'test/automation',
-@@ -59,4 +57,2 @@ if (fs.existsSync(`${__dirname}/../../.build/distro/npm`)) {
+@@ -66,4 +64,2 @@ if (existsSync(`${import.meta.dirname}/../../.build/distro/npm`)) {
  	dirs.push('.build/distro/npm');
 -	dirs.push('.build/distro/npm/remote');
 -	dirs.push('.build/distro/npm/remote/web');

+ 1089 - 17
patches/linux/fix-build.patch

@@ -1,28 +1,1100 @@
-diff --git a/build/linux/dependencies-generator.js b/build/linux/dependencies-generator.js
-index ae05d17..c692141 100644
---- a/build/linux/dependencies-generator.js
-+++ b/build/linux/dependencies-generator.js
-@@ -27,3 +27,3 @@ const product = require("../../product.json");
- // are valid, are in dep-lists.ts
--const FAIL_BUILD_FOR_NEW_DEPENDENCIES = true;
-+const FAIL_BUILD_FOR_NEW_DEPENDENCIES = false;
- // Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/138.0.7204.251:chrome/installer/linux/BUILD.gn;l=64-80
-@@ -60,3 +60,3 @@ async function getDependencies(packageType, buildDir, applicationName, arch) {
-     // Add the tunnel binary.
--    files.push(path_1.default.join(buildDir, 'bin', product.tunnelApplicationName));
-+    // files.push(path_1.default.join(buildDir, 'bin', product.tunnelApplicationName));
-     // Add the main executable.
 diff --git a/build/linux/dependencies-generator.ts b/build/linux/dependencies-generator.ts
-index 46c6d6c..23ae589 100644
+index 0ebeb41..c6f0d5c 100644
 --- a/build/linux/dependencies-generator.ts
 +++ b/build/linux/dependencies-generator.ts
-@@ -25,3 +25,3 @@ import product = require('../../product.json');
+@@ -13,3 +13,3 @@ import { type DebianArchString, isDebianArchString } from './debian/types.ts';
+ import { isRpmArchString, type RpmArchString } from './rpm/types.ts';
+-import product from '../../product.json' with { type: 'json' };
++// import product from '../../product.json' with { type: 'json' };
+ 
+@@ -22,3 +22,3 @@ import product from '../../product.json' with { type: 'json' };
  // are valid, are in dep-lists.ts
 -const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = true;
 +const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = false;
  
-@@ -62,3 +62,3 @@ export async function getDependencies(packageType: 'deb' | 'rpm', buildDir: stri
+@@ -59,3 +59,3 @@ export async function getDependencies(packageType: 'deb' | 'rpm', buildDir: stri
  	// Add the tunnel binary.
 -	files.push(path.join(buildDir, 'bin', product.tunnelApplicationName));
 +	// files.push(path.join(buildDir, 'bin', product.tunnelApplicationName));
  	// Add the main executable.
+diff --git a/build/package-lock.json b/build/package-lock.json
+index d3d0ae9..b47c35f 100644
+--- a/build/package-lock.json
++++ b/build/package-lock.json
+@@ -17,3 +17,2 @@
+         "@electron/get": "^2.0.0",
+-        "@electron/osx-sign": "^2.0.0",
+         "@types/ansi-colors": "^3.2.0",
+@@ -105,5 +104,5 @@
+     "node_modules/@azure/core-auth": {
+-      "version": "1.9.0",
+-      "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz",
+-      "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==",
++      "version": "1.10.1",
++      "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz",
++      "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==",
+       "dev": true,
+@@ -111,4 +110,4 @@
+       "dependencies": {
+-        "@azure/abort-controller": "^2.0.0",
+-        "@azure/core-util": "^1.11.0",
++        "@azure/abort-controller": "^2.1.2",
++        "@azure/core-util": "^1.13.0",
+         "tslib": "^2.6.2"
+@@ -116,3 +115,3 @@
+       "engines": {
+-        "node": ">=18.0.0"
++        "node": ">=20.0.0"
+       }
+@@ -235,5 +234,5 @@
+     "node_modules/@azure/core-rest-pipeline": {
+-      "version": "1.18.0",
+-      "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.0.tgz",
+-      "integrity": "sha512-QSoGUp4Eq/gohEFNJaUOwTN7BCc2nHTjjbm75JT0aD7W65PWM1H/tItz0GsABn22uaKyGxiMhWQLt2r+FGU89Q==",
++      "version": "1.22.2",
++      "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz",
++      "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==",
+       "dev": true,
+@@ -241,9 +240,8 @@
+       "dependencies": {
+-        "@azure/abort-controller": "^2.0.0",
+-        "@azure/core-auth": "^1.8.0",
+-        "@azure/core-tracing": "^1.0.1",
+-        "@azure/core-util": "^1.11.0",
+-        "@azure/logger": "^1.0.0",
+-        "http-proxy-agent": "^7.0.0",
+-        "https-proxy-agent": "^7.0.0",
++        "@azure/abort-controller": "^2.1.2",
++        "@azure/core-auth": "^1.10.0",
++        "@azure/core-tracing": "^1.3.0",
++        "@azure/core-util": "^1.13.0",
++        "@azure/logger": "^1.3.0",
++        "@typespec/ts-http-runtime": "^0.3.0",
+         "tslib": "^2.6.2"
+@@ -251,3 +249,3 @@
+       "engines": {
+-        "node": ">=18.0.0"
++        "node": ">=20.0.0"
+       }
+@@ -268,5 +266,5 @@
+     "node_modules/@azure/core-tracing": {
+-      "version": "1.2.0",
+-      "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz",
+-      "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==",
++      "version": "1.3.1",
++      "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz",
++      "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==",
+       "dev": true,
+@@ -277,3 +275,3 @@
+       "engines": {
+-        "node": ">=18.0.0"
++        "node": ">=20.0.0"
+       }
+@@ -281,5 +279,5 @@
+     "node_modules/@azure/core-util": {
+-      "version": "1.11.0",
+-      "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz",
+-      "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==",
++      "version": "1.13.1",
++      "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz",
++      "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==",
+       "dev": true,
+@@ -287,3 +285,4 @@
+       "dependencies": {
+-        "@azure/abort-controller": "^2.0.0",
++        "@azure/abort-controller": "^2.1.2",
++        "@typespec/ts-http-runtime": "^0.3.0",
+         "tslib": "^2.6.2"
+@@ -291,3 +290,3 @@
+       "engines": {
+-        "node": ">=18.0.0"
++        "node": ">=20.0.0"
+       }
+@@ -370,11 +369,13 @@
+     "node_modules/@azure/logger": {
+-      "version": "1.0.1",
+-      "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.1.tgz",
+-      "integrity": "sha512-QYQeaJ+A5x6aMNu8BG5qdsVBnYBop9UMwgUvGihSjf1PdZZXB+c/oMdM2ajKwzobLBh9e9QuMQkN9iL+IxLBLA==",
++      "version": "1.3.0",
++      "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz",
++      "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==",
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+-        "tslib": "^2.0.0"
++        "@typespec/ts-http-runtime": "^0.3.0",
++        "tslib": "^2.6.2"
+       },
+       "engines": {
+-        "node": ">=8.0.0"
++        "node": ">=20.0.0"
+       }
+@@ -481,5 +482,5 @@
+     "node_modules/@babel/helper-validator-identifier": {
+-      "version": "7.27.1",
+-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+-      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
++      "version": "7.28.5",
++      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
++      "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
+       "dev": true,
+@@ -537,50 +538,2 @@
+     },
+-    "node_modules/@electron/osx-sign": {
+-      "version": "2.0.0",
+-      "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-2.0.0.tgz",
+-      "integrity": "sha512-jZSzWH21QYbdTy2QxMMtRFlMafyuBRH5EnpC1LJU3uaQV05oo7ldtBRcSI/Eznhw9kFWjjCf2RvC+Nxc1/kQyA==",
+-      "dev": true,
+-      "license": "BSD-2-Clause",
+-      "dependencies": {
+-        "@types/graceful-fs": "^4.1.9",
+-        "debug": "^4.3.4",
+-        "graceful-fs": "^4.2.11",
+-        "isbinaryfile": "^4.0.8",
+-        "plist": "^3.0.5",
+-        "semver": "^7.7.1"
+-      },
+-      "bin": {
+-        "electron-osx-flat": "bin/electron-osx-flat.mjs",
+-        "electron-osx-sign": "bin/electron-osx-sign.mjs"
+-      },
+-      "engines": {
+-        "node": ">=22.12.0"
+-      }
+-    },
+-    "node_modules/@electron/osx-sign/node_modules/isbinaryfile": {
+-      "version": "4.0.10",
+-      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
+-      "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
+-      "dev": true,
+-      "license": "MIT",
+-      "engines": {
+-        "node": ">= 8.0.0"
+-      },
+-      "funding": {
+-        "url": "https://github.com/sponsors/gjtorikian/"
+-      }
+-    },
+-    "node_modules/@electron/osx-sign/node_modules/semver": {
+-      "version": "7.7.2",
+-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+-      "dev": true,
+-      "license": "ISC",
+-      "bin": {
+-        "semver": "bin/semver.js"
+-      },
+-      "engines": {
+-        "node": ">=10"
+-      }
+-    },
+     "node_modules/@esbuild/aix-ppc64": {
+@@ -1051,27 +1004,2 @@
+     },
+-    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+-      "version": "9.2.2",
+-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+-      "dev": true,
+-      "license": "MIT"
+-    },
+-    "node_modules/@isaacs/cliui/node_modules/string-width": {
+-      "version": "5.1.2",
+-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "eastasianwidth": "^0.2.0",
+-        "emoji-regex": "^9.2.2",
+-        "strip-ansi": "^7.0.1"
+-      },
+-      "engines": {
+-        "node": ">=12"
+-      },
+-      "funding": {
+-        "url": "https://github.com/sponsors/sindresorhus"
+-      }
+-    },
+     "node_modules/@malept/cross-spawn-promise": {
+@@ -1348,5 +1276,5 @@
+     "node_modules/@textlint/ast-node-types": {
+-      "version": "15.2.2",
+-      "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
+-      "integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
++      "version": "15.4.1",
++      "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.4.1.tgz",
++      "integrity": "sha512-XifMpBMdo0E1Fuh85YdcYAgy+okNg9WKBzIPIO4JUDnSWUVFihnogrM4cjDapeHkgzSgulwR8oJVJ17eyxI1bA==",
+       "dev": true,
+@@ -1355,5 +1283,5 @@
+     "node_modules/@textlint/linter-formatter": {
+-      "version": "15.2.2",
+-      "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz",
+-      "integrity": "sha512-oMVaMJ3exFvXhCj3AqmCbLaeYrTNLqaJnLJMIlmnRM3/kZdxvku4OYdaDzgtlI194cVxamOY5AbHBBVnY79kEg==",
++      "version": "15.4.1",
++      "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.4.1.tgz",
++      "integrity": "sha512-kAV7Sup3vwvqxKvBbf9lx/JaPHkRybQp/LLvA73U1AorPZE6XyfBAFG24BbMiCs4OX1ax4g7kXRuFPgMLWRf+g==",
+       "dev": true,
+@@ -1363,8 +1291,8 @@
+         "@azu/style-format": "^1.0.1",
+-        "@textlint/module-interop": "15.2.2",
+-        "@textlint/resolver": "15.2.2",
+-        "@textlint/types": "15.2.2",
++        "@textlint/module-interop": "15.4.1",
++        "@textlint/resolver": "15.4.1",
++        "@textlint/types": "15.4.1",
+         "chalk": "^4.1.2",
+-        "debug": "^4.4.1",
+-        "js-yaml": "^3.14.1",
++        "debug": "^4.4.3",
++        "js-yaml": "^4.1.0",
+         "lodash": "^4.17.21",
+@@ -1440,2 +1368,9 @@
+     },
++    "node_modules/@textlint/linter-formatter/node_modules/emoji-regex": {
++      "version": "8.0.0",
++      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
++      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
++      "dev": true,
++      "license": "MIT"
++    },
+     "node_modules/@textlint/linter-formatter/node_modules/has-flag": {
+@@ -1457,2 +1392,17 @@
+     },
++    "node_modules/@textlint/linter-formatter/node_modules/string-width": {
++      "version": "4.2.3",
++      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
++      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "emoji-regex": "^8.0.0",
++        "is-fullwidth-code-point": "^3.0.0",
++        "strip-ansi": "^6.0.1"
++      },
++      "engines": {
++        "node": ">=8"
++      }
++    },
+     "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": {
+@@ -1484,5 +1434,5 @@
+     "node_modules/@textlint/module-interop": {
+-      "version": "15.2.2",
+-      "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz",
+-      "integrity": "sha512-2rmNcWrcqhuR84Iio1WRzlc4tEoOMHd6T7urjtKNNefpTt1owrTJ9WuOe60yD3FrTW0J/R0ux5wxUbP/eaeFOA==",
++      "version": "15.4.1",
++      "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.4.1.tgz",
++      "integrity": "sha512-jHtM2E5CR68P3z/+FGrEU5pml2fQVzEo2sez9FEjrVHSPCrHtqHcPaKfsYbQJjc9C48ObwaWrCzRNaL3KedNCQ==",
+       "dev": true,
+@@ -1491,5 +1441,5 @@
+     "node_modules/@textlint/resolver": {
+-      "version": "15.2.2",
+-      "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz",
+-      "integrity": "sha512-4hGWjmHt0y+5NAkoYZ8FvEkj8Mez9TqfbTm3BPjoV32cIfEixl2poTOgapn1rfm73905GSO3P1jiWjmgvii13Q==",
++      "version": "15.4.1",
++      "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.4.1.tgz",
++      "integrity": "sha512-uVssyG3XXXKNY+O7NOajGvQZTyOuhPviwlq7Xek6ZT9K1eDQtA8074cPkAQoLMYhi/TUyOE5P5kpz42UF8Lmdw==",
+       "dev": true,
+@@ -1498,5 +1448,5 @@
+     "node_modules/@textlint/types": {
+-      "version": "15.2.2",
+-      "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz",
+-      "integrity": "sha512-X2BHGAR3yXJsCAjwYEDBIk9qUDWcH4pW61ISfmtejau+tVqKtnbbvEZnMTb6mWgKU1BvTmftd5DmB1XVDUtY3g==",
++      "version": "15.4.1",
++      "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.4.1.tgz",
++      "integrity": "sha512-WByVZ3zblbvuI+voWQplUP7seSTKXI9z6TMVXEB3dY3JFrZCIXWKNfLbETX5lZV7fYkCMaDtILO1l6s11wdbQA==",
+       "dev": true,
+@@ -1504,3 +1454,3 @@
+       "dependencies": {
+-        "@textlint/ast-node-types": "15.2.2"
++        "@textlint/ast-node-types": "15.4.1"
+       }
+@@ -1597,12 +1547,2 @@
+     },
+-    "node_modules/@types/graceful-fs": {
+-      "version": "4.1.9",
+-      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+-      "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "@types/node": "*"
+-      }
+-    },
+     "node_modules/@types/gulp": {
+@@ -1924,2 +1864,17 @@
+     },
++    "node_modules/@typespec/ts-http-runtime": {
++      "version": "0.3.2",
++      "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz",
++      "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "http-proxy-agent": "^7.0.0",
++        "https-proxy-agent": "^7.0.0",
++        "tslib": "^2.6.2"
++      },
++      "engines": {
++        "node": ">=20.0.0"
++      }
++    },
+     "node_modules/@vscode/iconv-lite-umd": {
+@@ -2176,5 +2131,5 @@
+     "node_modules/ansi-escapes": {
+-      "version": "7.1.1",
+-      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz",
+-      "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==",
++      "version": "7.2.0",
++      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz",
++      "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==",
+       "dev": true,
+@@ -2251,17 +2206,7 @@
+     "node_modules/argparse": {
+-      "version": "1.0.10",
+-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+-      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "sprintf-js": "~1.0.2"
+-      }
+-    },
+-    "node_modules/argparse/node_modules/sprintf-js": {
+-      "version": "1.0.3",
+-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+-      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
++      "version": "2.0.1",
++      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
++      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+       "dev": true,
+-      "license": "BSD-3-Clause"
++      "license": "Python-2.0"
+     },
+@@ -2393,2 +2338,3 @@
+       "dev": true,
++      "license": "MIT",
+       "optional": true,
+@@ -2404,3 +2350,4 @@
+       "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+-      "dev": true
++      "dev": true,
++      "license": "ISC"
+     },
+@@ -2462,2 +2409,3 @@
+       ],
++      "license": "MIT",
+       "optional": true,
+@@ -2506,2 +2454,3 @@
+       "dev": true,
++      "license": "BSD-2-Clause",
+       "dependencies": {
+@@ -2565,6 +2514,7 @@
+     "node_modules/cheerio": {
+-      "version": "1.0.0-rc.12",
+-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
+-      "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
++      "version": "1.1.2",
++      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz",
++      "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==",
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+@@ -2573,9 +2523,13 @@
+         "domhandler": "^5.0.3",
+-        "domutils": "^3.0.1",
+-        "htmlparser2": "^8.0.1",
+-        "parse5": "^7.0.0",
+-        "parse5-htmlparser2-tree-adapter": "^7.0.0"
++        "domutils": "^3.2.2",
++        "encoding-sniffer": "^0.2.1",
++        "htmlparser2": "^10.0.0",
++        "parse5": "^7.3.0",
++        "parse5-htmlparser2-tree-adapter": "^7.1.0",
++        "parse5-parser-stream": "^7.1.2",
++        "undici": "^7.12.0",
++        "whatwg-mimetype": "^4.0.0"
+       },
+       "engines": {
+-        "node": ">= 6"
++        "node": ">=20.18.1"
+       },
+@@ -2628,2 +2582,3 @@
+       "dev": true,
++      "license": "ISC",
+       "optional": true
+@@ -2778,2 +2733,3 @@
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+@@ -2790,6 +2746,7 @@
+     "node_modules/css-what": {
+-      "version": "6.1.0",
+-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+-      "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
++      "version": "6.2.2",
++      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
++      "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+       "dev": true,
++      "license": "BSD-2-Clause",
+       "engines": {
+@@ -2824,2 +2781,3 @@
+       "dev": true,
++      "license": "BSD-2-Clause",
+       "dependencies": {
+@@ -2879,2 +2837,3 @@
+       "dev": true,
++      "license": "(MIT OR WTFPL)",
+       "optional": true,
+@@ -2902,2 +2861,3 @@
+       "dev": true,
++      "license": "MIT",
+       "optional": true,
+@@ -2948,3 +2908,4 @@
+         }
+-      ]
++      ],
++      "license": "BSD-2-Clause"
+     },
+@@ -2966,6 +2927,7 @@
+     "node_modules/domutils": {
+-      "version": "3.0.1",
+-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
+-      "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
++      "version": "3.2.2",
++      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
++      "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+       "dev": true,
++      "license": "BSD-2-Clause",
+       "dependencies": {
+@@ -2973,3 +2935,3 @@
+         "domelementtype": "^2.3.0",
+-        "domhandler": "^5.0.1"
++        "domhandler": "^5.0.3"
+       },
+@@ -3040,5 +3002,5 @@
+     "node_modules/emoji-regex": {
+-      "version": "8.0.0",
+-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
++      "version": "9.2.2",
++      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
++      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+       "dev": true,
+@@ -3046,2 +3008,16 @@
+     },
++    "node_modules/encoding-sniffer": {
++      "version": "0.2.1",
++      "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
++      "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "iconv-lite": "^0.6.3",
++        "whatwg-encoding": "^3.1.1"
++      },
++      "funding": {
++        "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
++      }
++    },
+     "node_modules/end-of-stream": {
+@@ -3056,6 +3032,7 @@
+     "node_modules/entities": {
+-      "version": "4.4.0",
+-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+-      "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
++      "version": "4.5.0",
++      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
++      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+       "dev": true,
++      "license": "BSD-2-Clause",
+       "engines": {
+@@ -3143,2 +3120,3 @@
+       "dev": true,
++      "license": "MIT",
+       "optional": true
+@@ -3195,16 +3173,2 @@
+     },
+-    "node_modules/esprima": {
+-      "version": "4.0.1",
+-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+-      "dev": true,
+-      "license": "BSD-2-Clause",
+-      "bin": {
+-        "esparse": "bin/esparse.js",
+-        "esvalidate": "bin/esvalidate.js"
+-      },
+-      "engines": {
+-        "node": ">=4"
+-      }
+-    },
+     "node_modules/events": {
+@@ -3428,5 +3392,5 @@
+     "node_modules/form-data": {
+-      "version": "4.0.4",
+-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
+-      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
++      "version": "4.0.5",
++      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
++      "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
+       "dev": true,
+@@ -3553,2 +3517,3 @@
+       "dev": true,
++      "license": "ISC",
+       "optional": true
+@@ -3677,2 +3642,3 @@
+       "dev": true,
++      "license": "ISC",
+       "dependencies": {
+@@ -3756,2 +3722,3 @@
+       "dev": true,
++      "license": "MIT",
+       "engines": {
+@@ -3815,5 +3782,5 @@
+     "node_modules/htmlparser2": {
+-      "version": "8.0.1",
+-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
+-      "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
++      "version": "10.0.0",
++      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
++      "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
+       "dev": true,
+@@ -3826,7 +3793,21 @@
+       ],
++      "license": "MIT",
+       "dependencies": {
+         "domelementtype": "^2.3.0",
+-        "domhandler": "^5.0.2",
+-        "domutils": "^3.0.1",
+-        "entities": "^4.3.0"
++        "domhandler": "^5.0.3",
++        "domutils": "^3.2.1",
++        "entities": "^6.0.0"
++      }
++    },
++    "node_modules/htmlparser2/node_modules/entities": {
++      "version": "6.0.1",
++      "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
++      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
++      "dev": true,
++      "license": "BSD-2-Clause",
++      "engines": {
++        "node": ">=0.12"
++      },
++      "funding": {
++        "url": "https://github.com/fb55/entities?sponsor=1"
+       }
+@@ -3880,2 +3861,15 @@
+     },
++    "node_modules/iconv-lite": {
++      "version": "0.6.3",
++      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
++      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "safer-buffer": ">= 2.1.2 < 3.0.0"
++      },
++      "engines": {
++        "node": ">=0.10.0"
++      }
++    },
+     "node_modules/ieee754": {
+@@ -3899,2 +3893,3 @@
+       ],
++      "license": "BSD-3-Clause",
+       "optional": true
+@@ -3912,5 +3907,5 @@
+     "node_modules/index-to-position": {
+-      "version": "1.1.0",
+-      "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz",
+-      "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==",
++      "version": "1.2.0",
++      "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz",
++      "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==",
+       "dev": true,
+@@ -4120,5 +4115,5 @@
+     "node_modules/js-yaml": {
+-      "version": "3.14.2",
+-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+-      "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
++      "version": "4.1.1",
++      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
++      "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+       "dev": true,
+@@ -4126,4 +4121,3 @@
+       "dependencies": {
+-        "argparse": "^1.0.7",
+-        "esprima": "^4.0.0"
++        "argparse": "^2.0.1"
+       },
+@@ -4157,2 +4151,3 @@
+       "dev": true,
++      "license": "MIT",
+       "optional": true
+@@ -4266,2 +4261,3 @@
+       "hasInstallScript": true,
++      "license": "MIT",
+       "optional": true,
+@@ -4333,2 +4329,3 @@
+       "dev": true,
++      "license": "BSD-2-Clause",
+       "dependencies": {
+@@ -4358,9 +4355,2 @@
+     },
+-    "node_modules/markdown-it/node_modules/argparse": {
+-      "version": "2.0.1",
+-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+-      "dev": true,
+-      "license": "Python-2.0"
+-    },
+     "node_modules/matcher": {
+@@ -4443,2 +4433,3 @@
+       "dev": true,
++      "license": "ISC",
+       "bin": {
+@@ -4487,2 +4478,3 @@
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+@@ -4495,7 +4487,11 @@
+     "node_modules/minimist": {
+-      "version": "1.2.6",
+-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
++      "version": "1.2.8",
++      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
++      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+       "dev": true,
+-      "optional": true
++      "license": "MIT",
++      "optional": true,
++      "funding": {
++        "url": "https://github.com/sponsors/ljharb"
++      }
+     },
+@@ -4532,6 +4528,7 @@
+     "node_modules/napi-build-utils": {
+-      "version": "1.0.2",
+-      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+-      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
++      "version": "2.0.0",
++      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
++      "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
+       "dev": true,
++      "license": "MIT",
+       "optional": true
+@@ -4578,2 +4575,3 @@
+       "dev": true,
++      "license": "MIT",
+       "optional": true
+@@ -4593,5 +4591,5 @@
+     "node_modules/node-sarif-builder": {
+-      "version": "3.2.0",
+-      "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz",
+-      "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==",
++      "version": "3.3.1",
++      "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz",
++      "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==",
+       "dev": true,
+@@ -4603,3 +4601,3 @@
+       "engines": {
+-        "node": ">=18"
++        "node": ">=20"
+       }
+@@ -4680,5 +4678,5 @@
+     "node_modules/normalize-package-data/node_modules/semver": {
+-      "version": "7.7.2",
+-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
++      "version": "7.7.3",
++      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
++      "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+       "dev": true,
+@@ -4808,5 +4806,5 @@
+     "node_modules/p-map": {
+-      "version": "7.0.3",
+-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz",
+-      "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==",
++      "version": "7.0.4",
++      "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz",
++      "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==",
+       "dev": true,
+@@ -4886,8 +4884,9 @@
+     "node_modules/parse5": {
+-      "version": "7.1.2",
+-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
++      "version": "7.3.0",
++      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
++      "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+-        "entities": "^4.4.0"
++        "entities": "^6.0.0"
+       },
+@@ -4898,8 +4897,9 @@
+     "node_modules/parse5-htmlparser2-tree-adapter": {
+-      "version": "7.0.0",
+-      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
+-      "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
++      "version": "7.1.0",
++      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
++      "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+-        "domhandler": "^5.0.2",
++        "domhandler": "^5.0.3",
+         "parse5": "^7.0.0"
+@@ -4910,2 +4910,28 @@
+     },
++    "node_modules/parse5-parser-stream": {
++      "version": "7.1.2",
++      "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
++      "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "parse5": "^7.0.0"
++      },
++      "funding": {
++        "url": "https://github.com/inikulin/parse5?sponsor=1"
++      }
++    },
++    "node_modules/parse5/node_modules/entities": {
++      "version": "6.0.1",
++      "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
++      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
++      "dev": true,
++      "license": "BSD-2-Clause",
++      "engines": {
++        "node": ">=0.12"
++      },
++      "funding": {
++        "url": "https://github.com/fb55/entities?sponsor=1"
++      }
++    },
+     "node_modules/path-is-absolute": {
+@@ -4929,5 +4955,5 @@
+     "node_modules/path-scurry": {
+-      "version": "2.0.0",
+-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+-      "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
++      "version": "2.0.1",
++      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz",
++      "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==",
+       "dev": true,
+@@ -5056,6 +5082,7 @@
+     "node_modules/prebuild-install": {
+-      "version": "7.1.1",
+-      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
+-      "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
++      "version": "7.1.3",
++      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
++      "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
+       "dev": true,
++      "license": "MIT",
+       "optional": true,
+@@ -5067,3 +5094,3 @@
+         "mkdirp-classic": "^0.5.3",
+-        "napi-build-utils": "^1.0.1",
++        "napi-build-utils": "^2.0.0",
+         "node-abi": "^3.3.0",
+@@ -5208,22 +5235,2 @@
+     },
+-    "node_modules/rc-config-loader/node_modules/argparse": {
+-      "version": "2.0.1",
+-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+-      "dev": true,
+-      "license": "Python-2.0"
+-    },
+-    "node_modules/rc-config-loader/node_modules/js-yaml": {
+-      "version": "4.1.1",
+-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+-      "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "argparse": "^2.0.1"
+-      },
+-      "bin": {
+-        "js-yaml": "bin/js-yaml.js"
+-      }
+-    },
+     "node_modules/read": {
+@@ -5348,2 +5355,3 @@
+       "dev": true,
++      "license": "ISC",
+       "dependencies": {
+@@ -5371,2 +5379,3 @@
+       "dev": true,
++      "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+       "optional": true,
+@@ -5414,7 +5423,15 @@
+     },
++    "node_modules/safer-buffer": {
++      "version": "2.1.2",
++      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
++      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
++      "dev": true,
++      "license": "MIT"
++    },
+     "node_modules/sax": {
+-      "version": "1.2.4",
+-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+-      "dev": true
++      "version": "1.4.1",
++      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
++      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
++      "dev": true,
++      "license": "ISC"
+     },
+@@ -5472,2 +5489,3 @@
+       "dev": true,
++      "license": "MIT",
+       "optional": true,
+@@ -5612,2 +5630,3 @@
+       ],
++      "license": "MIT",
+       "optional": true
+@@ -5633,2 +5652,3 @@
+       ],
++      "license": "MIT",
+       "optional": true,
+@@ -5764,2 +5784,3 @@
+       "dev": true,
++      "license": "MIT",
+       "engines": {
+@@ -5791,5 +5812,5 @@
+     "node_modules/string-width": {
+-      "version": "4.2.3",
+-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
++      "version": "5.1.2",
++      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
++      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+       "dev": true,
+@@ -5813,31 +5834,11 @@
+       "dependencies": {
+-        "emoji-regex": "^8.0.0",
+-        "is-fullwidth-code-point": "^3.0.0",
+-        "strip-ansi": "^6.0.1"
++        "eastasianwidth": "^0.2.0",
++        "emoji-regex": "^9.2.2",
++        "strip-ansi": "^7.0.1"
+       },
+       "engines": {
+-        "node": ">=8"
+-      }
+-    },
+-    "node_modules/string-width-cjs/node_modules/ansi-regex": {
+-      "version": "5.0.1",
+-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+-      "dev": true,
+-      "license": "MIT",
+-      "engines": {
+-        "node": ">=8"
+-      }
+-    },
+-    "node_modules/string-width-cjs/node_modules/strip-ansi": {
+-      "version": "6.0.1",
+-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "ansi-regex": "^5.0.1"
++        "node": ">=12"
+       },
+-      "engines": {
+-        "node": ">=8"
++      "funding": {
++        "url": "https://github.com/sponsors/sindresorhus"
+       }
+@@ -5854,2 +5855,9 @@
+     },
++    "node_modules/string-width/node_modules/emoji-regex": {
++      "version": "8.0.0",
++      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
++      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
++      "dev": true,
++      "license": "MIT"
++    },
+     "node_modules/string-width/node_modules/strip-ansi": {
+@@ -5947,4 +5955,5 @@
+       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+-      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
++      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+       "dev": true,
++      "license": "MIT",
+       "optional": true,
+@@ -6062,2 +6071,24 @@
+     },
++    "node_modules/table/node_modules/emoji-regex": {
++      "version": "8.0.0",
++      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
++      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
++      "dev": true,
++      "license": "MIT"
++    },
++    "node_modules/table/node_modules/string-width": {
++      "version": "4.2.3",
++      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
++      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "emoji-regex": "^8.0.0",
++        "is-fullwidth-code-point": "^3.0.0",
++        "strip-ansi": "^6.0.1"
++      },
++      "engines": {
++        "node": ">=8"
++      }
++    },
+     "node_modules/table/node_modules/strip-ansi": {
+@@ -6128,2 +6159,3 @@
+       "dev": true,
++      "license": "MIT",
+       "dependencies": {
+@@ -6193,5 +6225,5 @@
+     "node_modules/tmp": {
+-      "version": "0.2.4",
+-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz",
+-      "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==",
++      "version": "0.2.5",
++      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
++      "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
+       "dev": true,
+@@ -6298,6 +6330,7 @@
+     "node_modules/tslib": {
+-      "version": "2.6.3",
+-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+-      "dev": true
++      "version": "2.8.1",
++      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
++      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
++      "dev": true,
++      "license": "0BSD"
+     },
+@@ -6316,4 +6349,5 @@
+       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
++      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+       "dev": true,
++      "license": "Apache-2.0",
+       "optional": true,
+@@ -6365,2 +6399,12 @@
+     },
++    "node_modules/undici": {
++      "version": "7.16.0",
++      "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz",
++      "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==",
++      "dev": true,
++      "license": "MIT",
++      "engines": {
++        "node": ">=20.18.1"
++      }
++    },
+     "node_modules/undici-types": {
+@@ -6404,3 +6448,4 @@
+       "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
+-      "dev": true
++      "dev": true,
++      "license": "MIT"
+     },
+@@ -6584,2 +6629,25 @@
+     },
++    "node_modules/whatwg-encoding": {
++      "version": "3.1.1",
++      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
++      "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "iconv-lite": "0.6.3"
++      },
++      "engines": {
++        "node": ">=18"
++      }
++    },
++    "node_modules/whatwg-mimetype": {
++      "version": "4.0.0",
++      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
++      "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
++      "dev": true,
++      "license": "MIT",
++      "engines": {
++        "node": ">=18"
++      }
++    },
+     "node_modules/which": {
+@@ -6688,2 +6756,24 @@
+     },
++    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
++      "version": "8.0.0",
++      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
++      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
++      "dev": true,
++      "license": "MIT"
++    },
++    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
++      "version": "4.2.3",
++      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
++      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
++      "dev": true,
++      "license": "MIT",
++      "dependencies": {
++        "emoji-regex": "^8.0.0",
++        "is-fullwidth-code-point": "^3.0.0",
++        "strip-ansi": "^6.0.1"
++      },
++      "engines": {
++        "node": ">=8"
++      }
++    },
+     "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+@@ -6714,27 +6804,2 @@
+     },
+-    "node_modules/wrap-ansi/node_modules/emoji-regex": {
+-      "version": "9.2.2",
+-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+-      "dev": true,
+-      "license": "MIT"
+-    },
+-    "node_modules/wrap-ansi/node_modules/string-width": {
+-      "version": "5.1.2",
+-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+-      "dev": true,
+-      "license": "MIT",
+-      "dependencies": {
+-        "eastasianwidth": "^0.2.0",
+-        "emoji-regex": "^9.2.2",
+-        "strip-ansi": "^7.0.1"
+-      },
+-      "engines": {
+-        "node": ">=12"
+-      },
+-      "funding": {
+-        "url": "https://github.com/sponsors/sindresorhus"
+-      }
+-    },
+     "node_modules/wrappy": {
+diff --git a/build/package.json b/build/package.json
+index e084f0e..4517da3 100644
+--- a/build/package.json
++++ b/build/package.json
+@@ -11,3 +11,2 @@
+     "@electron/get": "^2.0.0",
+-    "@electron/osx-sign": "^2.0.0",
+     "@types/ansi-colors": "^3.2.0",

+ 0 - 3640
patches/linux/fix-dependencies.patch

@@ -1,3640 +0,0 @@
-diff --git a/build/package-lock.json b/build/package-lock.json
-index 923b4ae..bd7647b 100644
---- a/build/package-lock.json
-+++ b/build/package-lock.json
-@@ -17,3 +17,2 @@
-         "@electron/get": "^2.0.0",
--        "@electron/osx-sign": "^2.0.0",
-         "@types/ansi-colors": "^3.2.0",
-@@ -51,3 +50,3 @@
-         "@vscode/ripgrep": "^1.15.13",
--        "@vscode/vsce": "3.6.1",
-+        "@vscode/vsce": "2.20.1",
-         "ansi-colors": "^3.2.3",
-@@ -75,19 +74,2 @@
-     },
--    "node_modules/@azu/format-text": {
--      "version": "1.0.2",
--      "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz",
--      "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==",
--      "dev": true,
--      "license": "BSD-3-Clause"
--    },
--    "node_modules/@azu/style-format": {
--      "version": "1.0.1",
--      "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz",
--      "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==",
--      "dev": true,
--      "license": "WTFPL",
--      "dependencies": {
--        "@azu/format-text": "^1.0.1"
--      }
--    },
-     "node_modules/@azure/abort-controller": {
-@@ -465,27 +447,2 @@
-     },
--    "node_modules/@babel/code-frame": {
--      "version": "7.27.1",
--      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
--      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@babel/helper-validator-identifier": "^7.27.1",
--        "js-tokens": "^4.0.0",
--        "picocolors": "^1.1.1"
--      },
--      "engines": {
--        "node": ">=6.9.0"
--      }
--    },
--    "node_modules/@babel/helper-validator-identifier": {
--      "version": "7.27.1",
--      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
--      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=6.9.0"
--      }
--    },
-     "node_modules/@electron/asar": {
-@@ -537,50 +494,2 @@
-     },
--    "node_modules/@electron/osx-sign": {
--      "version": "2.0.0",
--      "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-2.0.0.tgz",
--      "integrity": "sha512-jZSzWH21QYbdTy2QxMMtRFlMafyuBRH5EnpC1LJU3uaQV05oo7ldtBRcSI/Eznhw9kFWjjCf2RvC+Nxc1/kQyA==",
--      "dev": true,
--      "license": "BSD-2-Clause",
--      "dependencies": {
--        "@types/graceful-fs": "^4.1.9",
--        "debug": "^4.3.4",
--        "graceful-fs": "^4.2.11",
--        "isbinaryfile": "^4.0.8",
--        "plist": "^3.0.5",
--        "semver": "^7.7.1"
--      },
--      "bin": {
--        "electron-osx-flat": "bin/electron-osx-flat.mjs",
--        "electron-osx-sign": "bin/electron-osx-sign.mjs"
--      },
--      "engines": {
--        "node": ">=22.12.0"
--      }
--    },
--    "node_modules/@electron/osx-sign/node_modules/isbinaryfile": {
--      "version": "4.0.10",
--      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
--      "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">= 8.0.0"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/gjtorikian/"
--      }
--    },
--    "node_modules/@electron/osx-sign/node_modules/semver": {
--      "version": "7.7.2",
--      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
--      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
--      "dev": true,
--      "license": "ISC",
--      "bin": {
--        "semver": "bin/semver.js"
--      },
--      "engines": {
--        "node": ">=10"
--      }
--    },
-     "node_modules/@esbuild/aix-ppc64": {
-@@ -1010,68 +919,2 @@
-     },
--    "node_modules/@isaacs/balanced-match": {
--      "version": "4.0.1",
--      "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz",
--      "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": "20 || >=22"
--      }
--    },
--    "node_modules/@isaacs/brace-expansion": {
--      "version": "5.0.0",
--      "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz",
--      "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@isaacs/balanced-match": "^4.0.1"
--      },
--      "engines": {
--        "node": "20 || >=22"
--      }
--    },
--    "node_modules/@isaacs/cliui": {
--      "version": "8.0.2",
--      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
--      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
--      "dev": true,
--      "license": "ISC",
--      "dependencies": {
--        "string-width": "^5.1.2",
--        "string-width-cjs": "npm:string-width@^4.2.0",
--        "strip-ansi": "^7.0.1",
--        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
--        "wrap-ansi": "^8.1.0",
--        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
--      },
--      "engines": {
--        "node": ">=12"
--      }
--    },
--    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
--      "version": "9.2.2",
--      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
--      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@isaacs/cliui/node_modules/string-width": {
--      "version": "5.1.2",
--      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
--      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "eastasianwidth": "^0.2.0",
--        "emoji-regex": "^9.2.2",
--        "strip-ansi": "^7.0.1"
--      },
--      "engines": {
--        "node": ">=12"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/@malept/cross-spawn-promise": {
-@@ -1098,171 +941,143 @@
-     },
--    "node_modules/@nodelib/fs.scandir": {
--      "version": "2.1.5",
--      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
--      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@nodelib/fs.stat": "2.0.5",
--        "run-parallel": "^1.1.9"
--      },
--      "engines": {
--        "node": ">= 8"
--      }
--    },
--    "node_modules/@nodelib/fs.stat": {
--      "version": "2.0.5",
--      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
--      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-+    "node_modules/@sindresorhus/is": {
-+      "version": "4.6.0",
-+      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
-+      "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
-       "dev": true,
--      "license": "MIT",
-       "engines": {
--        "node": ">= 8"
-+        "node": ">=10"
-+      },
-+      "funding": {
-+        "url": "https://github.com/sindresorhus/is?sponsor=1"
-       }
-     },
--    "node_modules/@nodelib/fs.walk": {
--      "version": "1.2.8",
--      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
--      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-+    "node_modules/@szmarczak/http-timer": {
-+      "version": "4.0.6",
-+      "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
-+      "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@nodelib/fs.scandir": "2.1.5",
--        "fastq": "^1.6.0"
-+        "defer-to-connect": "^2.0.0"
-       },
-       "engines": {
--        "node": ">= 8"
-+        "node": ">=10"
-       }
-     },
--    "node_modules/@secretlint/config-creator": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.2.2.tgz",
--      "integrity": "sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==",
-+    "node_modules/@types/ansi-colors": {
-+      "version": "3.2.0",
-+      "resolved": "https://registry.npmjs.org/@types/ansi-colors/-/ansi-colors-3.2.0.tgz",
-+      "integrity": "sha512-0caWAhXht9N2lOdMzJLXybsSkYCx1QOdxx6pae48tswI9QV3DFX26AoOpy0JxwhCb+zISTqmd6H8t9Zby9BoZg==",
-+      "dev": true
-+    },
-+    "node_modules/@types/byline": {
-+      "version": "4.2.32",
-+      "resolved": "https://registry.npmjs.org/@types/byline/-/byline-4.2.32.tgz",
-+      "integrity": "sha512-qtlm/J6XOO9p+Ep/ZB5+mCFEDhzWDDHWU4a1eReN7lkPZXW9rkloq2jcAhvKKmlO5tL2GSvKROb+PTsNVhBiyQ==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@secretlint/types": "^10.2.2"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/node": "*"
-       }
-     },
--    "node_modules/@secretlint/config-loader": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.2.2.tgz",
--      "integrity": "sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==",
-+    "node_modules/@types/cacheable-request": {
-+      "version": "6.0.3",
-+      "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
-+      "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@secretlint/profiler": "^10.2.2",
--        "@secretlint/resolver": "^10.2.2",
--        "@secretlint/types": "^10.2.2",
--        "ajv": "^8.17.1",
--        "debug": "^4.4.1",
--        "rc-config-loader": "^4.1.3"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/http-cache-semantics": "*",
-+        "@types/keyv": "^3.1.4",
-+        "@types/node": "*",
-+        "@types/responselike": "^1.0.0"
-       }
-     },
--    "node_modules/@secretlint/core": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.2.2.tgz",
--      "integrity": "sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==",
-+    "node_modules/@types/debounce": {
-+      "version": "1.0.0",
-+      "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.0.0.tgz",
-+      "integrity": "sha1-QXVgIAMx4buE1y2oU5EQLC/NYbc= sha512-B7FcD9ry40L831t7iuHQyDfYi+qVEV75qkEI2ROOyfjb2PfkAspL+NK6B2A0BceMuNhiYRmtKTNnNP7Ul4N2Pg==",
-+      "dev": true
-+    },
-+    "node_modules/@types/debug": {
-+      "version": "4.1.9",
-+      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz",
-+      "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@secretlint/profiler": "^10.2.2",
--        "@secretlint/types": "^10.2.2",
--        "debug": "^4.4.1",
--        "structured-source": "^4.0.0"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/ms": "*"
-       }
-     },
--    "node_modules/@secretlint/formatter": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.2.2.tgz",
--      "integrity": "sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==",
-+    "node_modules/@types/events": {
-+      "version": "1.2.0",
-+      "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
-+      "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
-+      "dev": true
-+    },
-+    "node_modules/@types/expect": {
-+      "version": "1.20.4",
-+      "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
-+      "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
-+      "dev": true
-+    },
-+    "node_modules/@types/fancy-log": {
-+      "version": "1.3.0",
-+      "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz",
-+      "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==",
-+      "dev": true
-+    },
-+    "node_modules/@types/fs-extra": {
-+      "version": "9.0.12",
-+      "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz",
-+      "integrity": "sha512-I+bsBr67CurCGnSenZZ7v94gd3tc3+Aj2taxMT4yu4ABLuOgOjeFxX3dokG24ztSRg5tnT00sL8BszO7gSMoIw==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@secretlint/resolver": "^10.2.2",
--        "@secretlint/types": "^10.2.2",
--        "@textlint/linter-formatter": "^15.2.0",
--        "@textlint/module-interop": "^15.2.0",
--        "@textlint/types": "^15.2.0",
--        "chalk": "^5.4.1",
--        "debug": "^4.4.1",
--        "pluralize": "^8.0.0",
--        "strip-ansi": "^7.1.0",
--        "table": "^6.9.0",
--        "terminal-link": "^4.0.0"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/node": "*"
-       }
-     },
--    "node_modules/@secretlint/formatter/node_modules/chalk": {
--      "version": "5.6.2",
--      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
--      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
-+    "node_modules/@types/glob": {
-+      "version": "7.1.1",
-+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
-+      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
-       "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": "^12.17.0 || ^14.13 || >=16.0.0"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/chalk?sponsor=1"
-+      "dependencies": {
-+        "@types/events": "*",
-+        "@types/minimatch": "*",
-+        "@types/node": "*"
-       }
-     },
--    "node_modules/@secretlint/node": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.2.2.tgz",
--      "integrity": "sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==",
-+    "node_modules/@types/glob-stream": {
-+      "version": "6.1.0",
-+      "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz",
-+      "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@secretlint/config-loader": "^10.2.2",
--        "@secretlint/core": "^10.2.2",
--        "@secretlint/formatter": "^10.2.2",
--        "@secretlint/profiler": "^10.2.2",
--        "@secretlint/source-creator": "^10.2.2",
--        "@secretlint/types": "^10.2.2",
--        "debug": "^4.4.1",
--        "p-map": "^7.0.3"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/glob": "*",
-+        "@types/node": "*"
-       }
-     },
--    "node_modules/@secretlint/profiler": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.2.2.tgz",
--      "integrity": "sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@secretlint/resolver": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.2.2.tgz",
--      "integrity": "sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==",
-+    "node_modules/@types/gulp": {
-+      "version": "4.0.17",
-+      "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.17.tgz",
-+      "integrity": "sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==",
-       "dev": true,
--      "license": "MIT"
-+      "dependencies": {
-+        "@types/node": "*",
-+        "@types/undertaker": ">=1.2.6",
-+        "@types/vinyl-fs": "*",
-+        "chokidar": "^3.3.1"
-+      }
-     },
--    "node_modules/@secretlint/secretlint-formatter-sarif": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.2.2.tgz",
--      "integrity": "sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==",
-+    "node_modules/@types/gulp-filter": {
-+      "version": "3.0.32",
-+      "resolved": "https://registry.npmjs.org/@types/gulp-filter/-/gulp-filter-3.0.32.tgz",
-+      "integrity": "sha512-JvY4qTxXehoK2yCUxYVxTMvckVbDM5TWHWeUoYJyX31gwFqw4YDD6JNzhuTxI3yHPUTY4BBRTqgm6puQEZVCNg==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "node-sarif-builder": "^3.2.0"
-+        "@types/minimatch": "*",
-+        "@types/node": "*",
-+        "@types/vinyl": "*"
-       }
-     },
--    "node_modules/@secretlint/secretlint-rule-no-dotenv": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.2.2.tgz",
--      "integrity": "sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==",
-+    "node_modules/@types/gulp-flatmap": {
-+      "version": "1.0.0",
-+      "resolved": "https://registry.npmjs.org/@types/gulp-flatmap/-/gulp-flatmap-1.0.0.tgz",
-+      "integrity": "sha512-GTv0a9BxhbWYkxaPDCqnZFI13pXUUpJ90hBWkhGOQQ76qDDtHWugr0+IEiTEc0KYS0bOs80YszZE7WFNA5ndfg==",
-       "dev": true,
-@@ -1270,400 +1085,33 @@
-       "dependencies": {
--        "@secretlint/types": "^10.2.2"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/node": "*",
-+        "@types/vinyl": "*"
-       }
-     },
--    "node_modules/@secretlint/secretlint-rule-preset-recommend": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.2.2.tgz",
--      "integrity": "sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==",
-+    "node_modules/@types/gulp-gzip": {
-+      "version": "0.0.31",
-+      "resolved": "https://registry.npmjs.org/@types/gulp-gzip/-/gulp-gzip-0.0.31.tgz",
-+      "integrity": "sha512-KQjHz1FTqLse8/EiktfhN/vo33vamX4gVAQhMTp55STDBA7UToW5CJqYyP7iRorkHK9/aJ2nL2hLkNZkY4M8+w==",
-       "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=20.0.0"
-+      "dependencies": {
-+        "@types/node": "*"
-       }
-     },
--    "node_modules/@secretlint/source-creator": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.2.2.tgz",
--      "integrity": "sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==",
-+    "node_modules/@types/gulp-json-editor": {
-+      "version": "2.2.31",
-+      "resolved": "https://registry.npmjs.org/@types/gulp-json-editor/-/gulp-json-editor-2.2.31.tgz",
-+      "integrity": "sha512-piis0ImYAy0dt18R4EtTbAY+RV8jwTq5VisnUV6OfP8kD4743aHGkAdAd08No4NY3rFa5mD6ytIu8L0YU7nL9w==",
-       "dev": true,
--      "license": "MIT",
-       "dependencies": {
--        "@secretlint/types": "^10.2.2",
--        "istextorbinary": "^9.5.0"
--      },
--      "engines": {
--        "node": ">=20.0.0"
-+        "@types/js-beautify": "*",
-+        "@types/node": "*"
-       }
-     },
--    "node_modules/@secretlint/types": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.2.2.tgz",
--      "integrity": "sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==",
-+    "node_modules/@types/gulp-plumber": {
-+      "version": "0.0.37",
-+      "resolved": "https://registry.npmjs.org/@types/gulp-plumber/-/gulp-plumber-0.0.37.tgz",
-+      "integrity": "sha512-U1vFhhwDepAWmJ1ZVl6p+uwk/+rAs8+QLTRlrMLMQQ7KeqPPCvD5vy6JHMeqXwnxMSlbboa2PXQqoMg+ljZIJQ==",
-       "dev": true,
-       "license": "MIT",
--      "engines": {
--        "node": ">=20.0.0"
--      }
--    },
--    "node_modules/@sindresorhus/is": {
--      "version": "4.6.0",
--      "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
--      "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==",
--      "dev": true,
--      "engines": {
--        "node": ">=10"
--      },
--      "funding": {
--        "url": "https://github.com/sindresorhus/is?sponsor=1"
--      }
--    },
--    "node_modules/@sindresorhus/merge-streams": {
--      "version": "2.3.0",
--      "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
--      "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
--    "node_modules/@szmarczak/http-timer": {
--      "version": "4.0.6",
--      "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
--      "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==",
--      "dev": true,
--      "dependencies": {
--        "defer-to-connect": "^2.0.0"
--      },
--      "engines": {
--        "node": ">=10"
--      }
--    },
--    "node_modules/@textlint/ast-node-types": {
--      "version": "15.2.2",
--      "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz",
--      "integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@textlint/linter-formatter": {
--      "version": "15.2.2",
--      "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz",
--      "integrity": "sha512-oMVaMJ3exFvXhCj3AqmCbLaeYrTNLqaJnLJMIlmnRM3/kZdxvku4OYdaDzgtlI194cVxamOY5AbHBBVnY79kEg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@azu/format-text": "^1.0.2",
--        "@azu/style-format": "^1.0.1",
--        "@textlint/module-interop": "15.2.2",
--        "@textlint/resolver": "15.2.2",
--        "@textlint/types": "15.2.2",
--        "chalk": "^4.1.2",
--        "debug": "^4.4.1",
--        "js-yaml": "^3.14.1",
--        "lodash": "^4.17.21",
--        "pluralize": "^2.0.0",
--        "string-width": "^4.2.3",
--        "strip-ansi": "^6.0.1",
--        "table": "^6.9.0",
--        "text-table": "^0.2.0"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": {
--      "version": "5.0.1",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
--      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/ansi-styles": {
--      "version": "4.3.0",
--      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
--      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-convert": "^2.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/chalk": {
--      "version": "4.1.2",
--      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
--      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-styles": "^4.1.0",
--        "supports-color": "^7.1.0"
--      },
--      "engines": {
--        "node": ">=10"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/chalk?sponsor=1"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/color-convert": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
--      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-name": "~1.1.4"
--      },
--      "engines": {
--        "node": ">=7.0.0"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/color-name": {
--      "version": "1.1.4",
--      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
--      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/has-flag": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
--      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/pluralize": {
--      "version": "2.0.0",
--      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz",
--      "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": {
--      "version": "6.0.1",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
--      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^5.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/@textlint/linter-formatter/node_modules/supports-color": {
--      "version": "7.2.0",
--      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
--      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "has-flag": "^4.0.0"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/@textlint/module-interop": {
--      "version": "15.2.2",
--      "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz",
--      "integrity": "sha512-2rmNcWrcqhuR84Iio1WRzlc4tEoOMHd6T7urjtKNNefpTt1owrTJ9WuOe60yD3FrTW0J/R0ux5wxUbP/eaeFOA==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@textlint/resolver": {
--      "version": "15.2.2",
--      "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz",
--      "integrity": "sha512-4hGWjmHt0y+5NAkoYZ8FvEkj8Mez9TqfbTm3BPjoV32cIfEixl2poTOgapn1rfm73905GSO3P1jiWjmgvii13Q==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@textlint/types": {
--      "version": "15.2.2",
--      "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz",
--      "integrity": "sha512-X2BHGAR3yXJsCAjwYEDBIk9qUDWcH4pW61ISfmtejau+tVqKtnbbvEZnMTb6mWgKU1BvTmftd5DmB1XVDUtY3g==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@textlint/ast-node-types": "15.2.2"
--      }
--    },
--    "node_modules/@types/ansi-colors": {
--      "version": "3.2.0",
--      "resolved": "https://registry.npmjs.org/@types/ansi-colors/-/ansi-colors-3.2.0.tgz",
--      "integrity": "sha512-0caWAhXht9N2lOdMzJLXybsSkYCx1QOdxx6pae48tswI9QV3DFX26AoOpy0JxwhCb+zISTqmd6H8t9Zby9BoZg==",
--      "dev": true
--    },
--    "node_modules/@types/byline": {
--      "version": "4.2.32",
--      "resolved": "https://registry.npmjs.org/@types/byline/-/byline-4.2.32.tgz",
--      "integrity": "sha512-qtlm/J6XOO9p+Ep/ZB5+mCFEDhzWDDHWU4a1eReN7lkPZXW9rkloq2jcAhvKKmlO5tL2GSvKROb+PTsNVhBiyQ==",
--      "dev": true,
--      "dependencies": {
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/cacheable-request": {
--      "version": "6.0.3",
--      "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz",
--      "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==",
--      "dev": true,
--      "dependencies": {
--        "@types/http-cache-semantics": "*",
--        "@types/keyv": "^3.1.4",
--        "@types/node": "*",
--        "@types/responselike": "^1.0.0"
--      }
--    },
--    "node_modules/@types/debounce": {
--      "version": "1.0.0",
--      "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.0.0.tgz",
--      "integrity": "sha1-QXVgIAMx4buE1y2oU5EQLC/NYbc= sha512-B7FcD9ry40L831t7iuHQyDfYi+qVEV75qkEI2ROOyfjb2PfkAspL+NK6B2A0BceMuNhiYRmtKTNnNP7Ul4N2Pg==",
--      "dev": true
--    },
--    "node_modules/@types/debug": {
--      "version": "4.1.9",
--      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz",
--      "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==",
--      "dev": true,
--      "dependencies": {
--        "@types/ms": "*"
--      }
--    },
--    "node_modules/@types/events": {
--      "version": "1.2.0",
--      "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
--      "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
--      "dev": true
--    },
--    "node_modules/@types/expect": {
--      "version": "1.20.4",
--      "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
--      "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
--      "dev": true
--    },
--    "node_modules/@types/fancy-log": {
--      "version": "1.3.0",
--      "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz",
--      "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==",
--      "dev": true
--    },
--    "node_modules/@types/fs-extra": {
--      "version": "9.0.12",
--      "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz",
--      "integrity": "sha512-I+bsBr67CurCGnSenZZ7v94gd3tc3+Aj2taxMT4yu4ABLuOgOjeFxX3dokG24ztSRg5tnT00sL8BszO7gSMoIw==",
--      "dev": true,
--      "dependencies": {
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/glob": {
--      "version": "7.1.1",
--      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
--      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
--      "dev": true,
--      "dependencies": {
--        "@types/events": "*",
--        "@types/minimatch": "*",
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/glob-stream": {
--      "version": "6.1.0",
--      "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz",
--      "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==",
--      "dev": true,
--      "dependencies": {
--        "@types/glob": "*",
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/graceful-fs": {
--      "version": "4.1.9",
--      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
--      "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/gulp": {
--      "version": "4.0.17",
--      "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.17.tgz",
--      "integrity": "sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==",
--      "dev": true,
--      "dependencies": {
--        "@types/node": "*",
--        "@types/undertaker": ">=1.2.6",
--        "@types/vinyl-fs": "*",
--        "chokidar": "^3.3.1"
--      }
--    },
--    "node_modules/@types/gulp-filter": {
--      "version": "3.0.32",
--      "resolved": "https://registry.npmjs.org/@types/gulp-filter/-/gulp-filter-3.0.32.tgz",
--      "integrity": "sha512-JvY4qTxXehoK2yCUxYVxTMvckVbDM5TWHWeUoYJyX31gwFqw4YDD6JNzhuTxI3yHPUTY4BBRTqgm6puQEZVCNg==",
--      "dev": true,
--      "dependencies": {
--        "@types/minimatch": "*",
--        "@types/node": "*",
--        "@types/vinyl": "*"
--      }
--    },
--    "node_modules/@types/gulp-flatmap": {
--      "version": "1.0.0",
--      "resolved": "https://registry.npmjs.org/@types/gulp-flatmap/-/gulp-flatmap-1.0.0.tgz",
--      "integrity": "sha512-GTv0a9BxhbWYkxaPDCqnZFI13pXUUpJ90hBWkhGOQQ76qDDtHWugr0+IEiTEc0KYS0bOs80YszZE7WFNA5ndfg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@types/node": "*",
--        "@types/vinyl": "*"
--      }
--    },
--    "node_modules/@types/gulp-gzip": {
--      "version": "0.0.31",
--      "resolved": "https://registry.npmjs.org/@types/gulp-gzip/-/gulp-gzip-0.0.31.tgz",
--      "integrity": "sha512-KQjHz1FTqLse8/EiktfhN/vo33vamX4gVAQhMTp55STDBA7UToW5CJqYyP7iRorkHK9/aJ2nL2hLkNZkY4M8+w==",
--      "dev": true,
--      "dependencies": {
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/gulp-json-editor": {
--      "version": "2.2.31",
--      "resolved": "https://registry.npmjs.org/@types/gulp-json-editor/-/gulp-json-editor-2.2.31.tgz",
--      "integrity": "sha512-piis0ImYAy0dt18R4EtTbAY+RV8jwTq5VisnUV6OfP8kD4743aHGkAdAd08No4NY3rFa5mD6ytIu8L0YU7nL9w==",
--      "dev": true,
--      "dependencies": {
--        "@types/js-beautify": "*",
--        "@types/node": "*"
--      }
--    },
--    "node_modules/@types/gulp-plumber": {
--      "version": "0.0.37",
--      "resolved": "https://registry.npmjs.org/@types/gulp-plumber/-/gulp-plumber-0.0.37.tgz",
--      "integrity": "sha512-U1vFhhwDepAWmJ1ZVl6p+uwk/+rAs8+QLTRlrMLMQQ7KeqPPCvD5vy6JHMeqXwnxMSlbboa2PXQqoMg+ljZIJQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@types/node": "*"
-+      "dependencies": {
-+        "@types/node": "*"
-       }
-@@ -1792,9 +1240,2 @@
-     },
--    "node_modules/@types/normalize-package-data": {
--      "version": "2.4.4",
--      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
--      "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/@types/p-all": {
-@@ -1834,9 +1275,2 @@
-     },
--    "node_modules/@types/sarif": {
--      "version": "2.1.7",
--      "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz",
--      "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/@types/through": {
-@@ -1944,5 +1378,5 @@
-     "node_modules/@vscode/vsce": {
--      "version": "3.6.1",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.6.1.tgz",
--      "integrity": "sha512-UXtMgeCBl/t5zjn1TX1v1sl5L/oIv3Xc3pkKPGzaqeFCIkp5+wfFFDBXTWDt3d5uUulHnZKORHkMIsKNe9+k5A==",
-+      "version": "2.20.1",
-+      "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.20.1.tgz",
-+      "integrity": "sha512-ilbvoqvR/1/zseRPBAzYR6aKqSJ+jvda4/BqIwOqTxajpvLtEpK3kMLs77+dJdrlygS+VrP7Yhad8j0ukyD96g==",
-       "dev": true,
-@@ -1950,15 +1384,7 @@
-       "dependencies": {
--        "@azure/identity": "^4.1.0",
--        "@secretlint/node": "^10.1.2",
--        "@secretlint/secretlint-formatter-sarif": "^10.1.2",
--        "@secretlint/secretlint-rule-no-dotenv": "^10.1.2",
--        "@secretlint/secretlint-rule-preset-recommend": "^10.1.2",
--        "@vscode/vsce-sign": "^2.0.0",
--        "azure-devops-node-api": "^12.5.0",
--        "chalk": "^4.1.2",
-+        "azure-devops-node-api": "^11.0.1",
-+        "chalk": "^2.4.2",
-         "cheerio": "^1.0.0-rc.9",
--        "cockatiel": "^3.1.2",
--        "commander": "^12.1.0",
--        "form-data": "^4.0.0",
--        "glob": "^11.0.0",
-+        "commander": "^6.1.0",
-+        "glob": "^7.0.6",
-         "hosted-git-info": "^4.0.2",
-@@ -1966,3 +1392,3 @@
-         "leven": "^3.1.0",
--        "markdown-it": "^14.1.0",
-+        "markdown-it": "^12.3.2",
-         "mime": "^1.3.4",
-@@ -1971,5 +1397,4 @@
-         "read": "^1.0.7",
--        "secretlint": "^10.1.2",
-         "semver": "^7.5.2",
--        "tmp": "^0.2.3",
-+        "tmp": "^0.2.1",
-         "typed-rest-client": "^1.8.4",
-@@ -1984,254 +1409,6 @@
-       "engines": {
--        "node": ">= 20"
--      },
--      "optionalDependencies": {
--        "keytar": "^7.7.0"
--      }
--    },
--    "node_modules/@vscode/vsce-sign": {
--      "version": "2.0.7",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.7.tgz",
--      "integrity": "sha512-cz0GFW8qCxpypOy3y509u26K1FIPMlDIHBwGmDyvEbgoma2v3y5YIHHuijr8zCYBp9kzCCOJd28s/0PG7cA7ew==",
--      "dev": true,
--      "hasInstallScript": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optionalDependencies": {
--        "@vscode/vsce-sign-alpine-arm64": "2.0.6",
--        "@vscode/vsce-sign-alpine-x64": "2.0.6",
--        "@vscode/vsce-sign-darwin-arm64": "2.0.6",
--        "@vscode/vsce-sign-darwin-x64": "2.0.6",
--        "@vscode/vsce-sign-linux-arm": "2.0.6",
--        "@vscode/vsce-sign-linux-arm64": "2.0.6",
--        "@vscode/vsce-sign-linux-x64": "2.0.6",
--        "@vscode/vsce-sign-win32-arm64": "2.0.6",
--        "@vscode/vsce-sign-win32-x64": "2.0.6"
--      }
--    },
--    "node_modules/@vscode/vsce-sign-alpine-arm64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz",
--      "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==",
--      "cpu": [
--        "arm64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "alpine"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-alpine-x64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz",
--      "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==",
--      "cpu": [
--        "x64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "alpine"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-darwin-arm64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz",
--      "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==",
--      "cpu": [
--        "arm64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "darwin"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-darwin-x64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz",
--      "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==",
--      "cpu": [
--        "x64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "darwin"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-linux-arm": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz",
--      "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==",
--      "cpu": [
--        "arm"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "linux"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-linux-arm64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz",
--      "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==",
--      "cpu": [
--        "arm64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "linux"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-linux-x64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz",
--      "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==",
--      "cpu": [
--        "x64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "linux"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-win32-arm64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz",
--      "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==",
--      "cpu": [
--        "arm64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "win32"
--      ]
--    },
--    "node_modules/@vscode/vsce-sign-win32-x64": {
--      "version": "2.0.6",
--      "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz",
--      "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==",
--      "cpu": [
--        "x64"
--      ],
--      "dev": true,
--      "license": "SEE LICENSE IN LICENSE.txt",
--      "optional": true,
--      "os": [
--        "win32"
--      ]
--    },
--    "node_modules/@vscode/vsce/node_modules/ansi-styles": {
--      "version": "4.3.0",
--      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
--      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-convert": "^2.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
--      }
--    },
--    "node_modules/@vscode/vsce/node_modules/chalk": {
--      "version": "4.1.2",
--      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
--      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-styles": "^4.1.0",
--        "supports-color": "^7.1.0"
--      },
--      "engines": {
--        "node": ">=10"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/chalk?sponsor=1"
--      }
--    },
--    "node_modules/@vscode/vsce/node_modules/color-convert": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
--      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-name": "~1.1.4"
--      },
--      "engines": {
--        "node": ">=7.0.0"
--      }
--    },
--    "node_modules/@vscode/vsce/node_modules/color-name": {
--      "version": "1.1.4",
--      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
--      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/@vscode/vsce/node_modules/glob": {
--      "version": "11.0.3",
--      "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz",
--      "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==",
--      "dev": true,
--      "license": "ISC",
--      "dependencies": {
--        "foreground-child": "^3.3.1",
--        "jackspeak": "^4.1.1",
--        "minimatch": "^10.0.3",
--        "minipass": "^7.1.2",
--        "package-json-from-dist": "^1.0.0",
--        "path-scurry": "^2.0.0"
--      },
--      "bin": {
--        "glob": "dist/esm/bin.mjs"
--      },
--      "engines": {
--        "node": "20 || >=22"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/isaacs"
--      }
--    },
--    "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": {
--      "version": "10.0.3",
--      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz",
--      "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==",
--      "dev": true,
--      "license": "ISC",
--      "dependencies": {
--        "@isaacs/brace-expansion": "^5.0.0"
--      },
--      "engines": {
--        "node": "20 || >=22"
-+        "node": ">= 14"
-       },
--      "funding": {
--        "url": "https://github.com/sponsors/isaacs"
--      }
--    },
--    "node_modules/@vscode/vsce/node_modules/has-flag": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
--      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
-+      "optionalDependencies": {
-+        "keytar": "^7.7.0"
-       }
-@@ -2242,9 +1419,11 @@
-       "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
--      "dev": true
-+      "dev": true,
-+      "license": "MIT"
-     },
-     "node_modules/@vscode/vsce/node_modules/semver": {
--      "version": "7.6.3",
--      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
--      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
-+      "version": "7.7.2",
-+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
-+      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-       "dev": true,
-+      "license": "ISC",
-       "bin": {
-@@ -2256,25 +1435,2 @@
-     },
--    "node_modules/@vscode/vsce/node_modules/supports-color": {
--      "version": "7.2.0",
--      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
--      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "has-flag": "^4.0.0"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/@vscode/vsce/node_modules/yazl": {
--      "version": "2.5.1",
--      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
--      "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "buffer-crc32": "~0.2.3"
--      }
--    },
-     "node_modules/@xmldom/xmldom": {
-@@ -2301,19 +1457,2 @@
-     },
--    "node_modules/ajv": {
--      "version": "8.17.1",
--      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
--      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "fast-deep-equal": "^3.1.3",
--        "fast-uri": "^3.0.1",
--        "json-schema-traverse": "^1.0.0",
--        "require-from-string": "^2.0.2"
--      },
--      "funding": {
--        "type": "github",
--        "url": "https://github.com/sponsors/epoberezkin"
--      }
--    },
-     "node_modules/ansi-colors": {
-@@ -2328,18 +1467,2 @@
-     },
--    "node_modules/ansi-escapes": {
--      "version": "7.1.1",
--      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz",
--      "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "environment": "^1.0.0"
--      },
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/ansi-gray": {
-@@ -2356,15 +1479,2 @@
-     },
--    "node_modules/ansi-regex": {
--      "version": "6.2.2",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
--      "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=12"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
--      }
--    },
-     "node_modules/ansi-styles": {
-@@ -2404,17 +1514,7 @@
-     "node_modules/argparse": {
--      "version": "1.0.10",
--      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
--      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "sprintf-js": "~1.0.2"
--      }
--    },
--    "node_modules/argparse/node_modules/sprintf-js": {
--      "version": "1.0.3",
--      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
--      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
-+      "version": "2.0.1",
-+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-       "dev": true,
--      "license": "BSD-3-Clause"
-+      "license": "Python-2.0"
-     },
-@@ -2447,12 +1547,2 @@
-     },
--    "node_modules/astral-regex": {
--      "version": "2.0.0",
--      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
--      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
-     "node_modules/async-done": {
-@@ -2472,13 +1562,26 @@
-     },
--    "node_modules/asynckit": {
--      "version": "0.4.0",
--      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
--      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
-+    "node_modules/async-function": {
-+      "version": "1.0.0",
-+      "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
-+      "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
-       "dev": true,
--      "license": "MIT"
-+      "license": "MIT",
-+      "engines": {
-+        "node": ">= 0.4"
-+      }
-+    },
-+    "node_modules/async-generator-function": {
-+      "version": "1.0.0",
-+      "resolved": "https://registry.npmjs.org/async-generator-function/-/async-generator-function-1.0.0.tgz",
-+      "integrity": "sha512-+NAXNqgCrB95ya4Sr66i1CL2hqLVckAk7xwRYWdcm39/ELQ6YNn1aw5r0bdQtqNZgQpEWzc5yc/igXc7aL5SLA==",
-+      "dev": true,
-+      "license": "MIT",
-+      "engines": {
-+        "node": ">= 0.4"
-+      }
-     },
-     "node_modules/azure-devops-node-api": {
--      "version": "12.5.0",
--      "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz",
--      "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==",
-+      "version": "11.2.0",
-+      "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz",
-+      "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==",
-       "dev": true,
-@@ -2525,18 +1628,2 @@
-     },
--    "node_modules/binaryextensions": {
--      "version": "6.11.0",
--      "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-6.11.0.tgz",
--      "integrity": "sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==",
--      "dev": true,
--      "license": "Artistic-2.0",
--      "dependencies": {
--        "editions": "^6.21.0"
--      },
--      "engines": {
--        "node": ">=4"
--      },
--      "funding": {
--        "url": "https://bevry.me/fund"
--      }
--    },
-     "node_modules/bl": {
-@@ -2546,2 +1633,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "optional": true,
-@@ -2557,3 +1645,4 @@
-       "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
--      "dev": true
-+      "dev": true,
-+      "license": "ISC"
-     },
-@@ -2566,9 +1655,2 @@
-     },
--    "node_modules/boundary": {
--      "version": "2.0.0",
--      "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz",
--      "integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==",
--      "dev": true,
--      "license": "BSD-2-Clause"
--    },
-     "node_modules/brace-expansion": {
-@@ -2615,2 +1697,3 @@
-       ],
-+      "license": "MIT",
-       "optional": true,
-@@ -2718,6 +1801,7 @@
-     "node_modules/cheerio": {
--      "version": "1.0.0-rc.12",
--      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
--      "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
-+      "version": "1.1.2",
-+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz",
-+      "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==",
-       "dev": true,
-+      "license": "MIT",
-       "dependencies": {
-@@ -2726,9 +1810,13 @@
-         "domhandler": "^5.0.3",
--        "domutils": "^3.0.1",
--        "htmlparser2": "^8.0.1",
--        "parse5": "^7.0.0",
--        "parse5-htmlparser2-tree-adapter": "^7.0.0"
-+        "domutils": "^3.2.2",
-+        "encoding-sniffer": "^0.2.1",
-+        "htmlparser2": "^10.0.0",
-+        "parse5": "^7.3.0",
-+        "parse5-htmlparser2-tree-adapter": "^7.1.0",
-+        "parse5-parser-stream": "^7.1.2",
-+        "undici": "^7.12.0",
-+        "whatwg-mimetype": "^4.0.0"
-       },
-       "engines": {
--        "node": ">= 6"
-+        "node": ">=20.18.1"
-       },
-@@ -2743,2 +1831,3 @@
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "dependencies": {
-@@ -2781,2 +1870,3 @@
-       "dev": true,
-+      "license": "ISC",
-       "optional": true
-@@ -2842,12 +1932,2 @@
-     },
--    "node_modules/cockatiel": {
--      "version": "3.2.1",
--      "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz",
--      "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=16"
--      }
--    },
-     "node_modules/color-convert": {
-@@ -2876,19 +1956,6 @@
-     },
--    "node_modules/combined-stream": {
--      "version": "1.0.8",
--      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
--      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "delayed-stream": "~1.0.0"
--      },
--      "engines": {
--        "node": ">= 0.8"
--      }
--    },
-     "node_modules/commander": {
--      "version": "12.1.0",
--      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
--      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
-+      "version": "6.2.1",
-+      "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
-+      "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
-       "dev": true,
-@@ -2896,3 +1963,3 @@
-       "engines": {
--        "node": ">=18"
-+        "node": ">= 6"
-       }
-@@ -2927,6 +1994,7 @@
-     "node_modules/css-select": {
--      "version": "5.1.0",
--      "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
--      "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
-+      "version": "5.2.2",
-+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz",
-+      "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "dependencies": {
-@@ -2943,6 +2011,7 @@
-     "node_modules/css-what": {
--      "version": "6.1.0",
--      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
--      "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
-+      "version": "6.2.2",
-+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz",
-+      "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "engines": {
-@@ -3004,2 +2073,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "optional": true,
-@@ -3040,17 +2110,8 @@
-     },
--    "node_modules/delayed-stream": {
--      "version": "1.0.0",
--      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
--      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=0.4.0"
--      }
--    },
-     "node_modules/detect-libc": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
--      "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
-+      "version": "2.1.1",
-+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.1.tgz",
-+      "integrity": "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw==",
-       "dev": true,
-+      "license": "Apache-2.0",
-       "optional": true,
-@@ -3082,2 +2143,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "dependencies": {
-@@ -3101,3 +2163,4 @@
-         }
--      ]
-+      ],
-+      "license": "BSD-2-Clause"
-     },
-@@ -3108,2 +2171,3 @@
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "dependencies": {
-@@ -3119,6 +2183,7 @@
-     "node_modules/domutils": {
--      "version": "3.0.1",
--      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
--      "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
-+      "version": "3.2.2",
-+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
-+      "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "dependencies": {
-@@ -3126,3 +2191,3 @@
-         "domelementtype": "^2.3.0",
--        "domhandler": "^5.0.1"
-+        "domhandler": "^5.0.3"
-       },
-@@ -3159,9 +2224,2 @@
-     },
--    "node_modules/eastasianwidth": {
--      "version": "0.2.0",
--      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
--      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/ecdsa-sig-formatter": {
-@@ -3175,26 +2233,16 @@
-     },
--    "node_modules/editions": {
--      "version": "6.22.0",
--      "resolved": "https://registry.npmjs.org/editions/-/editions-6.22.0.tgz",
--      "integrity": "sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==",
-+    "node_modules/encoding-sniffer": {
-+      "version": "0.2.1",
-+      "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz",
-+      "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
-       "dev": true,
--      "license": "Artistic-2.0",
-+      "license": "MIT",
-       "dependencies": {
--        "version-range": "^4.15.0"
--      },
--      "engines": {
--        "ecmascript": ">= es5",
--        "node": ">=4"
-+        "iconv-lite": "^0.6.3",
-+        "whatwg-encoding": "^3.1.1"
-       },
-       "funding": {
--        "url": "https://bevry.me/fund"
-+        "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
-       }
-     },
--    "node_modules/emoji-regex": {
--      "version": "8.0.0",
--      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
--      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/end-of-stream": {
-@@ -3209,6 +2257,7 @@
-     "node_modules/entities": {
--      "version": "4.4.0",
--      "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
--      "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
-+      "version": "4.5.0",
-+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "engines": {
-@@ -3229,15 +2278,2 @@
-     },
--    "node_modules/environment": {
--      "version": "1.1.0",
--      "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
--      "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/es-define-property": {
-@@ -3275,18 +2311,2 @@
-     },
--    "node_modules/es-set-tostringtag": {
--      "version": "2.1.0",
--      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
--      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "es-errors": "^1.3.0",
--        "get-intrinsic": "^1.2.6",
--        "has-tostringtag": "^1.0.2",
--        "hasown": "^2.0.2"
--      },
--      "engines": {
--        "node": ">= 0.4"
--      }
--    },
-     "node_modules/es6-error": {
-@@ -3348,16 +2368,2 @@
-     },
--    "node_modules/esprima": {
--      "version": "4.0.1",
--      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
--      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
--      "dev": true,
--      "license": "BSD-2-Clause",
--      "bin": {
--        "esparse": "bin/esparse.js",
--        "esvalidate": "bin/esvalidate.js"
--      },
--      "engines": {
--        "node": ">=4"
--      }
--    },
-     "node_modules/events": {
-@@ -3376,2 +2382,3 @@
-       "dev": true,
-+      "license": "(MIT OR WTFPL)",
-       "optional": true,
-@@ -3429,26 +2436,2 @@
-     },
--    "node_modules/fast-deep-equal": {
--      "version": "3.1.3",
--      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
--      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/fast-glob": {
--      "version": "3.3.3",
--      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
--      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@nodelib/fs.stat": "^2.0.2",
--        "@nodelib/fs.walk": "^1.2.3",
--        "glob-parent": "^5.1.2",
--        "merge2": "^1.3.0",
--        "micromatch": "^4.0.8"
--      },
--      "engines": {
--        "node": ">=8.6.0"
--      }
--    },
-     "node_modules/fast-json-stable-stringify": {
-@@ -3459,19 +2442,2 @@
-     },
--    "node_modules/fast-uri": {
--      "version": "3.1.0",
--      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
--      "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
--      "dev": true,
--      "funding": [
--        {
--          "type": "github",
--          "url": "https://github.com/sponsors/fastify"
--        },
--        {
--          "type": "opencollective",
--          "url": "https://opencollective.com/fastify"
--        }
--      ],
--      "license": "BSD-3-Clause"
--    },
-     "node_modules/fast-xml-parser": {
-@@ -3499,12 +2465,2 @@
-     },
--    "node_modules/fastq": {
--      "version": "1.19.1",
--      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
--      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
--      "dev": true,
--      "license": "ISC",
--      "dependencies": {
--        "reusify": "^1.0.4"
--      }
--    },
-     "node_modules/fd-slicer": {
-@@ -3557,19 +2513,2 @@
-     },
--    "node_modules/foreground-child": {
--      "version": "3.3.1",
--      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
--      "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
--      "dev": true,
--      "license": "ISC",
--      "dependencies": {
--        "cross-spawn": "^7.0.6",
--        "signal-exit": "^4.0.1"
--      },
--      "engines": {
--        "node": ">=14"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/isaacs"
--      }
--    },
-     "node_modules/fork-stream": {
-@@ -3580,19 +2519,2 @@
-     },
--    "node_modules/form-data": {
--      "version": "4.0.4",
--      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
--      "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "asynckit": "^0.4.0",
--        "combined-stream": "^1.0.8",
--        "es-set-tostringtag": "^2.1.0",
--        "hasown": "^2.0.2",
--        "mime-types": "^2.1.12"
--      },
--      "engines": {
--        "node": ">= 6"
--      }
--    },
-     "node_modules/fs-constants": {
-@@ -3602,2 +2524,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "optional": true
-@@ -3647,6 +2570,16 @@
-     },
-+    "node_modules/generator-function": {
-+      "version": "2.0.0",
-+      "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.0.tgz",
-+      "integrity": "sha512-xPypGGincdfyl/AiSGa7GjXLkvld9V7GjZlowup9SHIJnQnHLFiLODCd/DqKOp0PBagbHJ68r1KJI9Mut7m4sA==",
-+      "dev": true,
-+      "license": "MIT",
-+      "engines": {
-+        "node": ">= 0.4"
-+      }
-+    },
-     "node_modules/get-intrinsic": {
--      "version": "1.3.0",
--      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
--      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-+      "version": "1.3.1",
-+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.1.tgz",
-+      "integrity": "sha512-fk1ZVEeOX9hVZ6QzoBNEC55+Ucqg4sTVwrVuigZhuRPESVFpMyXnd3sbXvPOwp7Y9riVyANiqhEuRF0G1aVSeQ==",
-       "dev": true,
-@@ -3654,2 +2587,4 @@
-       "dependencies": {
-+        "async-function": "^1.0.0",
-+        "async-generator-function": "^1.0.0",
-         "call-bind-apply-helpers": "^1.0.2",
-@@ -3659,2 +2594,3 @@
-         "function-bind": "^1.1.2",
-+        "generator-function": "^2.0.0",
-         "get-proto": "^1.0.1",
-@@ -3704,4 +2640,5 @@
-       "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
--      "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
-+      "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
-       "dev": true,
-+      "license": "MIT",
-       "optional": true
-@@ -3791,23 +2728,2 @@
-     },
--    "node_modules/globby": {
--      "version": "14.1.0",
--      "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz",
--      "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@sindresorhus/merge-streams": "^2.1.0",
--        "fast-glob": "^3.3.3",
--        "ignore": "^7.0.3",
--        "path-type": "^6.0.0",
--        "slash": "^5.1.0",
--        "unicorn-magic": "^0.3.0"
--      },
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/gopd": {
-@@ -3926,18 +2842,2 @@
-     },
--    "node_modules/has-tostringtag": {
--      "version": "1.0.2",
--      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
--      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "has-symbols": "^1.0.3"
--      },
--      "engines": {
--        "node": ">= 0.4"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/ljharb"
--      }
--    },
-     "node_modules/hasown": {
-@@ -3960,2 +2860,3 @@
-       "dev": true,
-+      "license": "ISC",
-       "dependencies": {
-@@ -3968,5 +2869,5 @@
-     "node_modules/htmlparser2": {
--      "version": "8.0.1",
--      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
--      "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
-+      "version": "10.0.0",
-+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
-+      "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
-       "dev": true,
-@@ -3979,7 +2880,21 @@
-       ],
-+      "license": "MIT",
-       "dependencies": {
-         "domelementtype": "^2.3.0",
--        "domhandler": "^5.0.2",
--        "domutils": "^3.0.1",
--        "entities": "^4.3.0"
-+        "domhandler": "^5.0.3",
-+        "domutils": "^3.2.1",
-+        "entities": "^6.0.0"
-+      }
-+    },
-+    "node_modules/htmlparser2/node_modules/entities": {
-+      "version": "6.0.1",
-+      "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
-+      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
-+      "dev": true,
-+      "license": "BSD-2-Clause",
-+      "engines": {
-+        "node": ">=0.12"
-+      },
-+      "funding": {
-+        "url": "https://github.com/fb55/entities?sponsor=1"
-       }
-@@ -4033,2 +2948,15 @@
-     },
-+    "node_modules/iconv-lite": {
-+      "version": "0.6.3",
-+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-+      "dev": true,
-+      "license": "MIT",
-+      "dependencies": {
-+        "safer-buffer": ">= 2.1.2 < 3.0.0"
-+      },
-+      "engines": {
-+        "node": ">=0.10.0"
-+      }
-+    },
-     "node_modules/ieee754": {
-@@ -4052,27 +2980,5 @@
-       ],
-+      "license": "BSD-3-Clause",
-       "optional": true
-     },
--    "node_modules/ignore": {
--      "version": "7.0.5",
--      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
--      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">= 4"
--      }
--    },
--    "node_modules/index-to-position": {
--      "version": "1.1.0",
--      "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz",
--      "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/inflight": {
-@@ -4099,2 +3005,3 @@
-       "dev": true,
-+      "license": "ISC",
-       "optional": true
-@@ -4149,12 +3056,2 @@
-     },
--    "node_modules/is-fullwidth-code-point": {
--      "version": "3.0.0",
--      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
--      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
-     "node_modules/is-glob": {
-@@ -4231,57 +3128,2 @@
-     },
--    "node_modules/istextorbinary": {
--      "version": "9.5.0",
--      "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-9.5.0.tgz",
--      "integrity": "sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==",
--      "dev": true,
--      "license": "Artistic-2.0",
--      "dependencies": {
--        "binaryextensions": "^6.11.0",
--        "editions": "^6.21.0",
--        "textextensions": "^6.11.0"
--      },
--      "engines": {
--        "node": ">=4"
--      },
--      "funding": {
--        "url": "https://bevry.me/fund"
--      }
--    },
--    "node_modules/jackspeak": {
--      "version": "4.1.1",
--      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz",
--      "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==",
--      "dev": true,
--      "license": "BlueOak-1.0.0",
--      "dependencies": {
--        "@isaacs/cliui": "^8.0.2"
--      },
--      "engines": {
--        "node": "20 || >=22"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/isaacs"
--      }
--    },
--    "node_modules/js-tokens": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
--      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/js-yaml": {
--      "version": "3.14.1",
--      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
--      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "argparse": "^1.0.7",
--        "esprima": "^4.0.0"
--      },
--      "bin": {
--        "js-yaml": "bin/js-yaml.js"
--      }
--    },
-     "node_modules/jsbi": {
-@@ -4298,9 +3140,2 @@
-     },
--    "node_modules/json-schema-traverse": {
--      "version": "1.0.0",
--      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
--      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/json-stringify-safe": {
-@@ -4419,2 +3254,3 @@
-       "hasInstallScript": true,
-+      "license": "MIT",
-       "optional": true,
-@@ -4439,2 +3275,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "engines": {
-@@ -4444,5 +3281,5 @@
-     "node_modules/linkify-it": {
--      "version": "5.0.0",
--      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
--      "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
-+      "version": "3.0.3",
-+      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
-+      "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
-       "dev": true,
-@@ -4450,3 +3287,3 @@
-       "dependencies": {
--        "uc.micro": "^2.0.0"
-+        "uc.micro": "^1.0.1"
-       }
-@@ -4465,9 +3302,2 @@
-     },
--    "node_modules/lodash.truncate": {
--      "version": "4.4.2",
--      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
--      "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/lowercase-keys": {
-@@ -4494,5 +3324,5 @@
-     "node_modules/markdown-it": {
--      "version": "14.1.0",
--      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
--      "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
-+      "version": "12.3.2",
-+      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
-+      "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
-       "dev": true,
-@@ -4501,18 +3331,20 @@
-         "argparse": "^2.0.1",
--        "entities": "^4.4.0",
--        "linkify-it": "^5.0.0",
--        "mdurl": "^2.0.0",
--        "punycode.js": "^2.3.1",
--        "uc.micro": "^2.1.0"
-+        "entities": "~2.1.0",
-+        "linkify-it": "^3.0.1",
-+        "mdurl": "^1.0.1",
-+        "uc.micro": "^1.0.5"
-       },
-       "bin": {
--        "markdown-it": "bin/markdown-it.mjs"
-+        "markdown-it": "bin/markdown-it.js"
-       }
-     },
--    "node_modules/markdown-it/node_modules/argparse": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
--      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-+    "node_modules/markdown-it/node_modules/entities": {
-+      "version": "2.1.0",
-+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
-+      "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
-       "dev": true,
--      "license": "Python-2.0"
-+      "license": "BSD-2-Clause",
-+      "funding": {
-+        "url": "https://github.com/fb55/entities?sponsor=1"
-+      }
-     },
-@@ -4555,5 +3387,5 @@
-     "node_modules/mdurl": {
--      "version": "2.0.0",
--      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
--      "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
-+      "version": "1.0.1",
-+      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
-+      "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
-       "dev": true,
-@@ -4567,26 +3399,2 @@
-     },
--    "node_modules/merge2": {
--      "version": "1.4.1",
--      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
--      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">= 8"
--      }
--    },
--    "node_modules/micromatch": {
--      "version": "4.0.8",
--      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
--      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "braces": "^3.0.3",
--        "picomatch": "^2.3.1"
--      },
--      "engines": {
--        "node": ">=8.6"
--      }
--    },
-     "node_modules/mime": {
-@@ -4603,25 +3411,2 @@
-     },
--    "node_modules/mime-db": {
--      "version": "1.52.0",
--      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
--      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">= 0.6"
--      }
--    },
--    "node_modules/mime-types": {
--      "version": "2.1.35",
--      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
--      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "mime-db": "1.52.0"
--      },
--      "engines": {
--        "node": ">= 0.6"
--      }
--    },
-     "node_modules/mimic-response": {
-@@ -4648,16 +3433,10 @@
-     "node_modules/minimist": {
--      "version": "1.2.6",
--      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
--      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
--      "dev": true,
--      "optional": true
--    },
--    "node_modules/minipass": {
--      "version": "7.1.2",
--      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
--      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
-+      "version": "1.2.8",
-+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-       "dev": true,
--      "license": "ISC",
--      "engines": {
--        "node": ">=16 || 14 >=14.17"
-+      "license": "MIT",
-+      "optional": true,
-+      "funding": {
-+        "url": "https://github.com/sponsors/ljharb"
-       }
-@@ -4669,2 +3448,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "optional": true
-@@ -4681,164 +3461,66 @@
-       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
--      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
--      "dev": true
--    },
--    "node_modules/napi-build-utils": {
--      "version": "1.0.2",
--      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
--      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
--      "dev": true,
--      "optional": true
--    },
--    "node_modules/node-abi": {
--      "version": "3.30.0",
--      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz",
--      "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==",
--      "dev": true,
--      "optional": true,
--      "dependencies": {
--        "semver": "^7.3.5"
--      },
--      "engines": {
--        "node": ">=10"
--      }
--    },
--    "node_modules/node-abi/node_modules/semver": {
--      "version": "7.5.4",
--      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
--      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
--      "dev": true,
--      "optional": true,
--      "dependencies": {
--        "lru-cache": "^6.0.0"
--      },
--      "bin": {
--        "semver": "bin/semver.js"
--      },
--      "engines": {
--        "node": ">=10"
--      }
--    },
--    "node_modules/node-abort-controller": {
--      "version": "3.1.1",
--      "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
--      "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
--      "dev": true
--    },
--    "node_modules/node-addon-api": {
--      "version": "4.3.0",
--      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
--      "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
--      "dev": true,
--      "optional": true
--    },
--    "node_modules/node-gyp-build": {
--      "version": "4.8.4",
--      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
--      "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
--      "license": "MIT",
--      "optional": true,
--      "bin": {
--        "node-gyp-build": "bin.js",
--        "node-gyp-build-optional": "optional.js",
--        "node-gyp-build-test": "build-test.js"
--      }
--    },
--    "node_modules/node-sarif-builder": {
--      "version": "3.2.0",
--      "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz",
--      "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@types/sarif": "^2.1.7",
--        "fs-extra": "^11.1.1"
--      },
--      "engines": {
--        "node": ">=18"
--      }
--    },
--    "node_modules/node-sarif-builder/node_modules/fs-extra": {
--      "version": "11.3.2",
--      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz",
--      "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "graceful-fs": "^4.2.0",
--        "jsonfile": "^6.0.1",
--        "universalify": "^2.0.0"
--      },
--      "engines": {
--        "node": ">=14.14"
--      }
--    },
--    "node_modules/node-sarif-builder/node_modules/jsonfile": {
--      "version": "6.2.0",
--      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
--      "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "universalify": "^2.0.0"
--      },
--      "optionalDependencies": {
--        "graceful-fs": "^4.1.6"
--      }
-+      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
-+      "dev": true
-     },
--    "node_modules/node-sarif-builder/node_modules/universalify": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
--      "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
-+    "node_modules/napi-build-utils": {
-+      "version": "2.0.0",
-+      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
-+      "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
-       "dev": true,
-       "license": "MIT",
--      "engines": {
--        "node": ">= 10.0.0"
--      }
-+      "optional": true
-     },
--    "node_modules/normalize-package-data": {
--      "version": "6.0.2",
--      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
--      "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
-+    "node_modules/node-abi": {
-+      "version": "3.30.0",
-+      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz",
-+      "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==",
-       "dev": true,
--      "license": "BSD-2-Clause",
-+      "optional": true,
-       "dependencies": {
--        "hosted-git-info": "^7.0.0",
--        "semver": "^7.3.5",
--        "validate-npm-package-license": "^3.0.4"
-+        "semver": "^7.3.5"
-       },
-       "engines": {
--        "node": "^16.14.0 || >=18.0.0"
-+        "node": ">=10"
-       }
-     },
--    "node_modules/normalize-package-data/node_modules/hosted-git-info": {
--      "version": "7.0.2",
--      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
--      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
-+    "node_modules/node-abi/node_modules/semver": {
-+      "version": "7.5.4",
-+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
-       "dev": true,
--      "license": "ISC",
-+      "optional": true,
-       "dependencies": {
--        "lru-cache": "^10.0.1"
-+        "lru-cache": "^6.0.0"
-+      },
-+      "bin": {
-+        "semver": "bin/semver.js"
-       },
-       "engines": {
--        "node": "^16.14.0 || >=18.0.0"
-+        "node": ">=10"
-       }
-     },
--    "node_modules/normalize-package-data/node_modules/lru-cache": {
--      "version": "10.4.3",
--      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
--      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
--      "dev": true,
--      "license": "ISC"
-+    "node_modules/node-abort-controller": {
-+      "version": "3.1.1",
-+      "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
-+      "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
-+      "dev": true
-     },
--    "node_modules/normalize-package-data/node_modules/semver": {
--      "version": "7.7.2",
--      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
--      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-+    "node_modules/node-addon-api": {
-+      "version": "4.3.0",
-+      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
-+      "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
-       "dev": true,
--      "license": "ISC",
-+      "license": "MIT",
-+      "optional": true
-+    },
-+    "node_modules/node-gyp-build": {
-+      "version": "4.8.4",
-+      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
-+      "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
-+      "license": "MIT",
-+      "optional": true,
-       "bin": {
--        "semver": "bin/semver.js"
--      },
--      "engines": {
--        "node": ">=10"
-+        "node-gyp-build": "bin.js",
-+        "node-gyp-build-optional": "optional.js",
-+        "node-gyp-build-test": "build-test.js"
-       }
-@@ -4871,2 +3553,3 @@
-       "dev": true,
-+      "license": "BSD-2-Clause",
-       "dependencies": {
-@@ -4915,2 +3598,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "dependencies": {
-@@ -4960,53 +3644,2 @@
-     },
--    "node_modules/p-map": {
--      "version": "7.0.3",
--      "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz",
--      "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
--    "node_modules/package-json-from-dist": {
--      "version": "1.0.1",
--      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
--      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
--      "dev": true,
--      "license": "BlueOak-1.0.0"
--    },
--    "node_modules/parse-json": {
--      "version": "8.3.0",
--      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
--      "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@babel/code-frame": "^7.26.2",
--        "index-to-position": "^1.1.0",
--        "type-fest": "^4.39.1"
--      },
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
--    "node_modules/parse-json/node_modules/type-fest": {
--      "version": "4.41.0",
--      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
--      "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
--      "dev": true,
--      "license": "(MIT OR CC0-1.0)",
--      "engines": {
--        "node": ">=16"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/parse-node-version": {
-@@ -5034,2 +3667,3 @@
-       "dev": true,
-+      "license": "ISC",
-       "bin": {
-@@ -5039,8 +3673,9 @@
-     "node_modules/parse5": {
--      "version": "7.1.2",
--      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
--      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
-+      "version": "7.3.0",
-+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
-+      "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
-       "dev": true,
-+      "license": "MIT",
-       "dependencies": {
--        "entities": "^4.4.0"
-+        "entities": "^6.0.0"
-       },
-@@ -5051,8 +3686,22 @@
-     "node_modules/parse5-htmlparser2-tree-adapter": {
--      "version": "7.0.0",
--      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
--      "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
-+      "version": "7.1.0",
-+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz",
-+      "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
-       "dev": true,
-+      "license": "MIT",
-+      "dependencies": {
-+        "domhandler": "^5.0.3",
-+        "parse5": "^7.0.0"
-+      },
-+      "funding": {
-+        "url": "https://github.com/inikulin/parse5?sponsor=1"
-+      }
-+    },
-+    "node_modules/parse5-parser-stream": {
-+      "version": "7.1.2",
-+      "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
-+      "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
-+      "dev": true,
-+      "license": "MIT",
-       "dependencies": {
--        "domhandler": "^5.0.2",
-         "parse5": "^7.0.0"
-@@ -5063,2 +3712,15 @@
-     },
-+    "node_modules/parse5/node_modules/entities": {
-+      "version": "6.0.1",
-+      "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
-+      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
-+      "dev": true,
-+      "license": "BSD-2-Clause",
-+      "engines": {
-+        "node": ">=0.12"
-+      },
-+      "funding": {
-+        "url": "https://github.com/fb55/entities?sponsor=1"
-+      }
-+    },
-     "node_modules/path-is-absolute": {
-@@ -5081,42 +3743,2 @@
-     },
--    "node_modules/path-scurry": {
--      "version": "2.0.0",
--      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
--      "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
--      "dev": true,
--      "license": "BlueOak-1.0.0",
--      "dependencies": {
--        "lru-cache": "^11.0.0",
--        "minipass": "^7.1.2"
--      },
--      "engines": {
--        "node": "20 || >=22"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/isaacs"
--      }
--    },
--    "node_modules/path-scurry/node_modules/lru-cache": {
--      "version": "11.2.1",
--      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.1.tgz",
--      "integrity": "sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==",
--      "dev": true,
--      "license": "ISC",
--      "engines": {
--        "node": "20 || >=22"
--      }
--    },
--    "node_modules/path-type": {
--      "version": "6.0.0",
--      "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz",
--      "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/pend": {
-@@ -5127,9 +3749,2 @@
-     },
--    "node_modules/picocolors": {
--      "version": "1.1.1",
--      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
--      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
--      "dev": true,
--      "license": "ISC"
--    },
-     "node_modules/picomatch": {
-@@ -5198,17 +3813,8 @@
-     },
--    "node_modules/pluralize": {
--      "version": "8.0.0",
--      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
--      "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=4"
--      }
--    },
-     "node_modules/prebuild-install": {
--      "version": "7.1.1",
--      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
--      "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
-+      "version": "7.1.3",
-+      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
-+      "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
-       "dev": true,
-+      "license": "MIT",
-       "optional": true,
-@@ -5220,3 +3826,3 @@
-         "mkdirp-classic": "^0.5.3",
--        "napi-build-utils": "^1.0.1",
-+        "napi-build-utils": "^2.0.0",
-         "node-abi": "^3.3.0",
-@@ -5273,150 +3879,25 @@
-     },
--    "node_modules/punycode.js": {
--      "version": "2.3.1",
--      "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
--      "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=6"
--      }
--    },
--    "node_modules/qs": {
--      "version": "6.14.0",
--      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
--      "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
--      "dev": true,
--      "license": "BSD-3-Clause",
--      "dependencies": {
--        "side-channel": "^1.1.0"
--      },
--      "engines": {
--        "node": ">=0.6"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/ljharb"
--      }
--    },
--    "node_modules/queue-microtask": {
--      "version": "1.2.3",
--      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
--      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
--      "dev": true,
--      "funding": [
--        {
--          "type": "github",
--          "url": "https://github.com/sponsors/feross"
--        },
--        {
--          "type": "patreon",
--          "url": "https://www.patreon.com/feross"
--        },
--        {
--          "type": "consulting",
--          "url": "https://feross.org/support"
--        }
--      ],
--      "license": "MIT"
--    },
--    "node_modules/quick-lru": {
--      "version": "5.1.1",
--      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
--      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
--      "dev": true,
--      "engines": {
--        "node": ">=10"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
--    "node_modules/rc": {
--      "version": "1.2.8",
--      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
--      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
--      "dev": true,
--      "optional": true,
--      "dependencies": {
--        "deep-extend": "^0.6.0",
--        "ini": "~1.3.0",
--        "minimist": "^1.2.0",
--        "strip-json-comments": "~2.0.1"
--      },
--      "bin": {
--        "rc": "cli.js"
--      }
--    },
--    "node_modules/rc-config-loader": {
--      "version": "4.1.3",
--      "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz",
--      "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "debug": "^4.3.4",
--        "js-yaml": "^4.1.0",
--        "json5": "^2.2.2",
--        "require-from-string": "^2.0.2"
--      }
--    },
--    "node_modules/rc-config-loader/node_modules/argparse": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
--      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
--      "dev": true,
--      "license": "Python-2.0"
--    },
--    "node_modules/rc-config-loader/node_modules/js-yaml": {
--      "version": "4.1.0",
--      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
--      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "argparse": "^2.0.1"
--      },
--      "bin": {
--        "js-yaml": "bin/js-yaml.js"
--      }
--    },
--    "node_modules/read": {
--      "version": "1.0.7",
--      "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
--      "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
--      "dev": true,
--      "dependencies": {
--        "mute-stream": "~0.0.4"
--      },
--      "engines": {
--        "node": ">=0.8"
--      }
--    },
--    "node_modules/read-pkg": {
--      "version": "9.0.1",
--      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
--      "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
-+    "node_modules/qs": {
-+      "version": "6.14.0",
-+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
-+      "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
-       "dev": true,
--      "license": "MIT",
-+      "license": "BSD-3-Clause",
-       "dependencies": {
--        "@types/normalize-package-data": "^2.4.3",
--        "normalize-package-data": "^6.0.0",
--        "parse-json": "^8.0.0",
--        "type-fest": "^4.6.0",
--        "unicorn-magic": "^0.1.0"
-+        "side-channel": "^1.1.0"
-       },
-       "engines": {
--        "node": ">=18"
-+        "node": ">=0.6"
-       },
-       "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
-+        "url": "https://github.com/sponsors/ljharb"
-       }
-     },
--    "node_modules/read-pkg/node_modules/type-fest": {
--      "version": "4.41.0",
--      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
--      "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
-+    "node_modules/quick-lru": {
-+      "version": "5.1.1",
-+      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
-+      "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
-       "dev": true,
--      "license": "(MIT OR CC0-1.0)",
-       "engines": {
--        "node": ">=16"
-+        "node": ">=10"
-       },
-@@ -5426,13 +3907,30 @@
-     },
--    "node_modules/read-pkg/node_modules/unicorn-magic": {
--      "version": "0.1.0",
--      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
--      "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
-+    "node_modules/rc": {
-+      "version": "1.2.8",
-+      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-+      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-       "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
-+      "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
-+      "optional": true,
-+      "dependencies": {
-+        "deep-extend": "^0.6.0",
-+        "ini": "~1.3.0",
-+        "minimist": "^1.2.0",
-+        "strip-json-comments": "~2.0.1"
-       },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
-+      "bin": {
-+        "rc": "cli.js"
-+      }
-+    },
-+    "node_modules/read": {
-+      "version": "1.0.7",
-+      "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
-+      "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
-+      "dev": true,
-+      "license": "ISC",
-+      "dependencies": {
-+        "mute-stream": "~0.0.4"
-+      },
-+      "engines": {
-+        "node": ">=0.8"
-       }
-@@ -5480,12 +3978,2 @@
-     },
--    "node_modules/require-from-string": {
--      "version": "2.0.2",
--      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
--      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=0.10.0"
--      }
--    },
-     "node_modules/resolve-alpn": {
-@@ -5508,13 +3996,2 @@
-     },
--    "node_modules/reusify": {
--      "version": "1.1.0",
--      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
--      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "iojs": ">=1.0.0",
--        "node": ">=0.10.0"
--      }
--    },
-     "node_modules/roarr": {
-@@ -5537,26 +4014,2 @@
-     },
--    "node_modules/run-parallel": {
--      "version": "1.2.0",
--      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
--      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
--      "dev": true,
--      "funding": [
--        {
--          "type": "github",
--          "url": "https://github.com/sponsors/feross"
--        },
--        {
--          "type": "patreon",
--          "url": "https://www.patreon.com/feross"
--        },
--        {
--          "type": "consulting",
--          "url": "https://feross.org/support"
--        }
--      ],
--      "license": "MIT",
--      "dependencies": {
--        "queue-microtask": "^1.2.2"
--      }
--    },
-     "node_modules/safe-buffer": {
-@@ -5567,29 +4020,15 @@
-     },
--    "node_modules/sax": {
--      "version": "1.2.4",
--      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
--      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
--      "dev": true
-+    "node_modules/safer-buffer": {
-+      "version": "2.1.2",
-+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-+      "dev": true,
-+      "license": "MIT"
-     },
--    "node_modules/secretlint": {
--      "version": "10.2.2",
--      "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.2.2.tgz",
--      "integrity": "sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==",
-+    "node_modules/sax": {
-+      "version": "1.4.1",
-+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
-+      "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==",
-       "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "@secretlint/config-creator": "^10.2.2",
--        "@secretlint/formatter": "^10.2.2",
--        "@secretlint/node": "^10.2.2",
--        "@secretlint/profiler": "^10.2.2",
--        "debug": "^4.4.1",
--        "globby": "^14.1.0",
--        "read-pkg": "^9.0.1"
--      },
--      "bin": {
--        "secretlint": "bin/secretlint.js"
--      },
--      "engines": {
--        "node": ">=20.0.0"
--      }
-+      "license": "ISC"
-     },
-@@ -5733,15 +4172,2 @@
-     },
--    "node_modules/signal-exit": {
--      "version": "4.1.0",
--      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
--      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
--      "dev": true,
--      "license": "ISC",
--      "engines": {
--        "node": ">=14"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/isaacs"
--      }
--    },
-     "node_modules/simple-concat": {
-@@ -5765,2 +4191,3 @@
-       ],
-+      "license": "MIT",
-       "optional": true
-@@ -5786,2 +4213,3 @@
-       ],
-+      "license": "MIT",
-       "optional": true,
-@@ -5793,69 +4221,2 @@
-     },
--    "node_modules/slash": {
--      "version": "5.1.0",
--      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
--      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=14.16"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
--    "node_modules/slice-ansi": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
--      "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-styles": "^4.0.0",
--        "astral-regex": "^2.0.0",
--        "is-fullwidth-code-point": "^3.0.0"
--      },
--      "engines": {
--        "node": ">=10"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
--      }
--    },
--    "node_modules/slice-ansi/node_modules/ansi-styles": {
--      "version": "4.3.0",
--      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
--      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-convert": "^2.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
--      }
--    },
--    "node_modules/slice-ansi/node_modules/color-convert": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
--      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-name": "~1.1.4"
--      },
--      "engines": {
--        "node": ">=7.0.0"
--      }
--    },
--    "node_modules/slice-ansi/node_modules/color-name": {
--      "version": "1.1.4",
--      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
--      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
--      "dev": true,
--      "license": "MIT"
--    },
-     "node_modules/source-map": {
-@@ -5869,38 +4230,2 @@
-     },
--    "node_modules/spdx-correct": {
--      "version": "3.2.0",
--      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
--      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
--      "dev": true,
--      "license": "Apache-2.0",
--      "dependencies": {
--        "spdx-expression-parse": "^3.0.0",
--        "spdx-license-ids": "^3.0.0"
--      }
--    },
--    "node_modules/spdx-exceptions": {
--      "version": "2.5.0",
--      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
--      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
--      "dev": true,
--      "license": "CC-BY-3.0"
--    },
--    "node_modules/spdx-expression-parse": {
--      "version": "3.0.1",
--      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
--      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "spdx-exceptions": "^2.1.0",
--        "spdx-license-ids": "^3.0.0"
--      }
--    },
--    "node_modules/spdx-license-ids": {
--      "version": "3.0.22",
--      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz",
--      "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==",
--      "dev": true,
--      "license": "CC0-1.0"
--    },
-     "node_modules/sprintf-js": {
-@@ -5914,146 +4239,29 @@
-       "version": "1.1.0",
--      "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
--      "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
--      "dev": true,
--      "engines": {
--        "node": ">=4",
--        "npm": ">=6"
--      }
--    },
--    "node_modules/stream-exhaust": {
--      "version": "1.0.2",
--      "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
--      "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
--      "dev": true
--    },
--    "node_modules/stream-shift": {
--      "version": "1.0.1",
--      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
--      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
--      "dev": true
--    },
--    "node_modules/string_decoder": {
--      "version": "1.1.1",
--      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
--      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
--      "devOptional": true,
--      "dependencies": {
--        "safe-buffer": "~5.1.0"
--      }
--    },
--    "node_modules/string-width": {
--      "version": "4.2.3",
--      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
--      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "emoji-regex": "^8.0.0",
--        "is-fullwidth-code-point": "^3.0.0",
--        "strip-ansi": "^6.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/string-width-cjs": {
--      "name": "string-width",
--      "version": "4.2.3",
--      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
--      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "emoji-regex": "^8.0.0",
--        "is-fullwidth-code-point": "^3.0.0",
--        "strip-ansi": "^6.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/string-width-cjs/node_modules/ansi-regex": {
--      "version": "5.0.1",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
--      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/string-width-cjs/node_modules/strip-ansi": {
--      "version": "6.0.1",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
--      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^5.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/string-width/node_modules/ansi-regex": {
--      "version": "5.0.1",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
--      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/string-width/node_modules/strip-ansi": {
--      "version": "6.0.1",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
--      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^5.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/strip-ansi": {
--      "version": "7.1.2",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
--      "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^6.0.1"
--      },
--      "engines": {
--        "node": ">=12"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
--      }
--    },
--    "node_modules/strip-ansi-cjs": {
--      "name": "strip-ansi",
--      "version": "6.0.1",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
--      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-+      "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
-+      "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
-       "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^5.0.1"
--      },
-       "engines": {
--        "node": ">=8"
-+        "node": ">=4",
-+        "npm": ">=6"
-       }
-     },
--    "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
--      "version": "5.0.1",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
--      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
-+    "node_modules/stream-exhaust": {
-+      "version": "1.0.2",
-+      "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
-+      "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
-+      "dev": true
-+    },
-+    "node_modules/stream-shift": {
-+      "version": "1.0.1",
-+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
-+      "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
-+      "dev": true
-+    },
-+    "node_modules/string_decoder": {
-+      "version": "1.1.1",
-+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-+      "devOptional": true,
-+      "dependencies": {
-+        "safe-buffer": "~5.1.0"
-       }
-@@ -6100,4 +4308,5 @@
-       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
--      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
-+      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
-       "dev": true,
-+      "license": "MIT",
-       "optional": true,
-@@ -6114,12 +4323,2 @@
-     },
--    "node_modules/structured-source": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-4.0.0.tgz",
--      "integrity": "sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==",
--      "dev": true,
--      "license": "BSD-2-Clause",
--      "dependencies": {
--        "boundary": "^2.0.0"
--      }
--    },
-     "node_modules/sumchecker": {
-@@ -6148,82 +4347,2 @@
-     },
--    "node_modules/supports-hyperlinks": {
--      "version": "3.2.0",
--      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz",
--      "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "has-flag": "^4.0.0",
--        "supports-color": "^7.0.0"
--      },
--      "engines": {
--        "node": ">=14.18"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
--      }
--    },
--    "node_modules/supports-hyperlinks/node_modules/has-flag": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
--      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/supports-hyperlinks/node_modules/supports-color": {
--      "version": "7.2.0",
--      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
--      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "has-flag": "^4.0.0"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/table": {
--      "version": "6.9.0",
--      "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
--      "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
--      "dev": true,
--      "license": "BSD-3-Clause",
--      "dependencies": {
--        "ajv": "^8.0.1",
--        "lodash.truncate": "^4.4.2",
--        "slice-ansi": "^4.0.0",
--        "string-width": "^4.2.3",
--        "strip-ansi": "^6.0.1"
--      },
--      "engines": {
--        "node": ">=10.0.0"
--      }
--    },
--    "node_modules/table/node_modules/ansi-regex": {
--      "version": "5.0.1",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
--      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/table/node_modules/strip-ansi": {
--      "version": "6.0.1",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
--      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^5.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
-     "node_modules/tar-fs": {
-@@ -6247,2 +4366,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "optional": true,
-@@ -6259,19 +4379,2 @@
-     },
--    "node_modules/terminal-link": {
--      "version": "4.0.0",
--      "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-4.0.0.tgz",
--      "integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-escapes": "^7.0.0",
--        "supports-hyperlinks": "^3.2.0"
--      },
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/ternary-stream": {
-@@ -6298,25 +4401,2 @@
-     },
--    "node_modules/text-table": {
--      "version": "0.2.0",
--      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
--      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/textextensions": {
--      "version": "6.11.0",
--      "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-6.11.0.tgz",
--      "integrity": "sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==",
--      "dev": true,
--      "license": "Artistic-2.0",
--      "dependencies": {
--        "editions": "^6.21.0"
--      },
--      "engines": {
--        "node": ">=4"
--      },
--      "funding": {
--        "url": "https://bevry.me/fund"
--      }
--    },
-     "node_modules/through": {
-@@ -6346,5 +4426,5 @@
-     "node_modules/tmp": {
--      "version": "0.2.4",
--      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz",
--      "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==",
-+      "version": "0.2.5",
-+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz",
-+      "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==",
-       "dev": true,
-@@ -6469,4 +4549,5 @@
-       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
--      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
-+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
-       "dev": true,
-+      "license": "Apache-2.0",
-       "optional": true,
-@@ -6505,5 +4586,5 @@
-     "node_modules/uc.micro": {
--      "version": "2.1.0",
--      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
--      "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
-+      "version": "1.0.6",
-+      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
-+      "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
-       "dev": true,
-@@ -6518,2 +4599,12 @@
-     },
-+    "node_modules/undici": {
-+      "version": "7.16.0",
-+      "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz",
-+      "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==",
-+      "dev": true,
-+      "license": "MIT",
-+      "engines": {
-+        "node": ">=20.18.1"
-+      }
-+    },
-     "node_modules/undici-types": {
-@@ -6525,15 +4616,2 @@
-     },
--    "node_modules/unicorn-magic": {
--      "version": "0.3.0",
--      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
--      "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=18"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/universal-user-agent": {
-@@ -6549,2 +4627,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "engines": {
-@@ -6557,3 +4636,4 @@
-       "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
--      "dev": true
-+      "dev": true,
-+      "license": "MIT"
-     },
-@@ -6574,26 +4654,2 @@
-     },
--    "node_modules/validate-npm-package-license": {
--      "version": "3.0.4",
--      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
--      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
--      "dev": true,
--      "license": "Apache-2.0",
--      "dependencies": {
--        "spdx-correct": "^3.0.0",
--        "spdx-expression-parse": "^3.0.0"
--      }
--    },
--    "node_modules/version-range": {
--      "version": "4.15.0",
--      "resolved": "https://registry.npmjs.org/version-range/-/version-range-4.15.0.tgz",
--      "integrity": "sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==",
--      "dev": true,
--      "license": "Artistic-2.0",
--      "engines": {
--        "node": ">=4"
--      },
--      "funding": {
--        "url": "https://bevry.me/fund"
--      }
--    },
-     "node_modules/vinyl": {
-@@ -6664,2 +4720,3 @@
-       "dev": true,
-+      "license": "MIT",
-       "dependencies": {
-@@ -6737,2 +4794,25 @@
-     },
-+    "node_modules/whatwg-encoding": {
-+      "version": "3.1.1",
-+      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
-+      "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
-+      "dev": true,
-+      "license": "MIT",
-+      "dependencies": {
-+        "iconv-lite": "0.6.3"
-+      },
-+      "engines": {
-+        "node": ">=18"
-+      }
-+    },
-+    "node_modules/whatwg-mimetype": {
-+      "version": "4.0.0",
-+      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
-+      "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
-+      "dev": true,
-+      "license": "MIT",
-+      "engines": {
-+        "node": ">=18"
-+      }
-+    },
-     "node_modules/which": {
-@@ -6758,136 +4838,2 @@
-     },
--    "node_modules/wrap-ansi": {
--      "version": "8.1.0",
--      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
--      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-styles": "^6.1.0",
--        "string-width": "^5.0.1",
--        "strip-ansi": "^7.0.1"
--      },
--      "engines": {
--        "node": ">=12"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
--      }
--    },
--    "node_modules/wrap-ansi-cjs": {
--      "name": "wrap-ansi",
--      "version": "7.0.0",
--      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
--      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-styles": "^4.0.0",
--        "string-width": "^4.1.0",
--        "strip-ansi": "^6.0.0"
--      },
--      "engines": {
--        "node": ">=10"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
--      }
--    },
--    "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
--      "version": "5.0.1",
--      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
--      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
--      "version": "4.3.0",
--      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
--      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-convert": "^2.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
--      }
--    },
--    "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
--      "version": "2.0.1",
--      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
--      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "color-name": "~1.1.4"
--      },
--      "engines": {
--        "node": ">=7.0.0"
--      }
--    },
--    "node_modules/wrap-ansi-cjs/node_modules/color-name": {
--      "version": "1.1.4",
--      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
--      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
--      "version": "6.0.1",
--      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
--      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "ansi-regex": "^5.0.1"
--      },
--      "engines": {
--        "node": ">=8"
--      }
--    },
--    "node_modules/wrap-ansi/node_modules/ansi-styles": {
--      "version": "6.2.3",
--      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
--      "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
--      "dev": true,
--      "license": "MIT",
--      "engines": {
--        "node": ">=12"
--      },
--      "funding": {
--        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
--      }
--    },
--    "node_modules/wrap-ansi/node_modules/emoji-regex": {
--      "version": "9.2.2",
--      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
--      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
--      "dev": true,
--      "license": "MIT"
--    },
--    "node_modules/wrap-ansi/node_modules/string-width": {
--      "version": "5.1.2",
--      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
--      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
--      "dev": true,
--      "license": "MIT",
--      "dependencies": {
--        "eastasianwidth": "^0.2.0",
--        "emoji-regex": "^9.2.2",
--        "strip-ansi": "^7.0.1"
--      },
--      "engines": {
--        "node": ">=12"
--      },
--      "funding": {
--        "url": "https://github.com/sponsors/sindresorhus"
--      }
--    },
-     "node_modules/wrappy": {
-@@ -6954,2 +4900,12 @@
-     },
-+    "node_modules/yazl": {
-+      "version": "2.5.1",
-+      "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
-+      "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
-+      "dev": true,
-+      "license": "MIT",
-+      "dependencies": {
-+        "buffer-crc32": "~0.2.3"
-+      }
-+    },
-     "node_modules/yocto-queue": {
-diff --git a/build/package.json b/build/package.json
-index e28bd38..ae4a2c9 100644
---- a/build/package.json
-+++ b/build/package.json
-@@ -11,3 +11,2 @@
-     "@electron/get": "^2.0.0",
--    "@electron/osx-sign": "^2.0.0",
-     "@types/ansi-colors": "^3.2.0",
-@@ -45,3 +44,3 @@
-     "@vscode/ripgrep": "^1.15.13",
--    "@vscode/vsce": "3.6.1",
-+    "@vscode/vsce": "2.20.1",
-     "ansi-colors": "^3.2.3",

+ 7 - 9
patches/linux/fix-npm-postinstall.patch

@@ -1,16 +1,14 @@
-diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js
-index fa8da7d..5e2f51b 100644
---- a/build/npm/postinstall.js
-+++ b/build/npm/postinstall.js
-@@ -53,8 +53,9 @@ function npmInstall(dir, opts) {
- 		log(dir, `Installing dependencies inside container ${process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME']}...`);
- 
+diff --git a/build/npm/postinstall.ts b/build/npm/postinstall.ts
+index c4bbbf5..2a1c6c5 100644
+--- a/build/npm/postinstall.ts
++++ b/build/npm/postinstall.ts
+@@ -52,5 +52,6 @@ function npmInstall(dir: string, opts?: child_process.SpawnSyncOptions) {
  		opts.cwd = root;
 -		if (process.env['npm_config_arch'] === 'arm64') {
 -			run('sudo', ['docker', 'run', '--rm', '--privileged', 'multiarch/qemu-user-static', '--reset', '-p', 'yes'], opts);
+-		}
 +		const emulateArchList = ['arm64', 'arm', 'ppc64', 'riscv64', 's390x', 'loong64'];
 +		if (process.env['DISABLE_QEMU'] !== 'true' && !!process.env['npm_config_arch'] && emulateArchList.includes(process.env['npm_config_arch'])) {
 +			run('sudo', ['docker', 'run', '--rm', '--privileged', 'tonistiigi/binfmt:latest', '--install', 'all'], opts);
- 		}
++ 		}
  		run('sudo', [
- 			'docker', 'run',

+ 0 - 0
patches/linux/reh/s390x/arch-4-s390x-package.json.patch → patches/linux/reh/s390x/package.json.patch


+ 3 - 37
patches/remove-mangle.patch

@@ -1,42 +1,8 @@
-diff --git a/build/lib/compilation.js b/build/lib/compilation.js
-index ac6eae3..45e2610 100644
---- a/build/lib/compilation.js
-+++ b/build/lib/compilation.js
-@@ -145,24 +145,3 @@ function compileTask(src, out, build, options = {}) {
-         }
--        // mangle: TypeScript to TypeScript
--        let mangleStream = event_stream_1.default.through();
--        if (build && !options.disableMangle) {
--            let ts2tsMangler = new index_1.Mangler(compile.projectPath, (...data) => (0, fancy_log_1.default)(ansi_colors_1.default.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true });
--            const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState']));
--            mangleStream = event_stream_1.default.through(async function write(data) {
--                const tsNormalPath = ts.normalizePath(data.path);
--                const newContents = (await newContentsByFileName).get(tsNormalPath);
--                if (newContents !== undefined) {
--                    data.contents = Buffer.from(newContents.out);
--                    data.sourceMap = newContents.sourceMap && JSON.parse(newContents.sourceMap);
--                }
--                this.push(data);
--            }, async function end() {
--                // free resources
--                (await newContentsByFileName).clear();
--                this.push(null);
--                ts2tsMangler = undefined;
--            });
--        }
-         return srcPipe
--            .pipe(mangleStream)
-             .pipe(generator.stream)
 diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts
-index a8b7291..77b2f53 100644
+index 948c6b4..66ecdd3 100644
 --- a/build/lib/compilation.ts
 +++ b/build/lib/compilation.ts
-@@ -18,4 +18,2 @@ import File from 'vinyl';
- import * as task from './task';
--import { Mangler } from './mangle/index';
--import { RawSourceMap } from 'source-map';
- import ts = require('typescript');
-@@ -133,27 +131,3 @@ export function compileTask(src: string, out: string, build: boolean, options: {
+@@ -131,27 +131,3 @@ export function compileTask(src: string, out: string, build: boolean, options: {
  
 -		// mangle: TypeScript to TypeScript
 -		let mangleStream = es.through();
@@ -45,7 +11,7 @@ index a8b7291..77b2f53 100644
 -			const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState']));
 -			mangleStream = es.through(async function write(data: File & { sourceMap?: RawSourceMap }) {
 -				type TypeScriptExt = typeof ts & { normalizePath(path: string): string };
--				const tsNormalPath = (<TypeScriptExt>ts).normalizePath(data.path);
+-				const tsNormalPath = (ts as TypeScriptExt).normalizePath(data.path);
 -				const newContents = (await newContentsByFileName).get(tsNormalPath);
 -				if (newContents !== undefined) {
 -					data.contents = Buffer.from(newContents.out);

+ 9 - 85
patches/sourcemaps.patch

@@ -1,110 +1,34 @@
-diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js
-index 7826f48..eca4a1d 100644
---- a/build/gulpfile.extensions.js
-+++ b/build/gulpfile.extensions.js
-@@ -23,2 +23,3 @@ const plumber = require('gulp-plumber');
- const ext = require('./lib/extensions');
-+const product = require('../product.json');
- 
-@@ -74,3 +75,3 @@ const compilations = [
- 
--const getBaseUrl = out => `https://main.vscode-cdn.net/sourcemaps/${commit}/${out}`;
-+const getBaseUrl = out => `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}/${out.replaceAll('/', '-')}`;
- 
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index 10b7b44..79861bf 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -454,3 +454,3 @@ function tweakProductForServerWeb(product) {
- 		util.rimraf(`out-vscode-${type}-min`),
--		optimize.minifyTask(`out-vscode-${type}`, `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)
-+		optimize.minifyTask(`out-vscode-${type}`, `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}/core`)
- 	));
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index ed06b6a..9488983 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -147,3 +147,3 @@ gulp.task(bundleVSCodeTask);
- 
--const sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;
-+const sourceMappingURLBase = `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}`;
- const minifyVSCodeTask = task.define('minify-vscode', task.series(
-diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js
-index 295a977..318ce92 100644
---- a/build/gulpfile.vscode.web.js
-+++ b/build/gulpfile.vscode.web.js
-@@ -140,3 +140,3 @@ const minifyVSCodeWebTask = task.define('minify-vscode-web', task.series(
- 	util.rimraf('out-vscode-web-min'),
--	optimize.minifyTask('out-vscode-web', `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)
-+	optimize.minifyTask('out-vscode-web', `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}/core`)
- ));
-diff --git a/build/lib/extensions.js b/build/lib/extensions.js
-index e373688..efa26c9 100644
---- a/build/lib/extensions.js
-+++ b/build/lib/extensions.js
-@@ -75,4 +75,5 @@ const vzip = require('gulp-vinyl-zip');
- const root = path_1.default.dirname(path_1.default.dirname(__dirname));
-+const product = JSON.parse(fs_1.default.readFileSync(path_1.default.join(root, 'product.json'), 'utf8'));
- const commit = (0, getVersion_1.getVersion)(root);
--const sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;
-+const sourceMappingURLBase = `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}`;
- function minifyExtensionResources(input) {
-@@ -205,3 +206,3 @@ function fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) {
-                         data.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, function (_m, g1) {
--                            return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions/${path_1.default.basename(extensionPath)}/${relativeOutputPath}/${g1}`;
-+                            return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions-${path_1.default.basename(extensionPath).replaceAll('/', '-')}-${relativeOutputPath.replaceAll('/', '-')}-${g1.replaceAll('/', '-')}`;
-                         }), 'utf8');
 diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
-index 4779ddb..e19fc36 100644
+index 24462a3..1daa855 100644
 --- a/build/lib/extensions.ts
 +++ b/build/lib/extensions.ts
-@@ -30,4 +30,5 @@ const vzip = require('gulp-vinyl-zip');
- const root = path.dirname(path.dirname(__dirname));
+@@ -33,4 +33,5 @@ const require = createRequire(import.meta.url);
+ const root = path.dirname(path.dirname(import.meta.dirname));
 +const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8'));
  const commit = getVersion(root);
 -const sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;
 +const sourceMappingURLBase = `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}`;
  
-@@ -179,3 +180,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string,
+@@ -181,3 +182,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string,
  							data.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, function (_m, g1) {
 -								return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions/${path.basename(extensionPath)}/${relativeOutputPath}/${g1}`;
 +								return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions-${path.basename(extensionPath).replaceAll('/', '-')}-${relativeOutputPath.replaceAll('/', '-')}-${g1.replaceAll('/', '-')}`;
  							}), 'utf8');
-diff --git a/build/lib/optimize.js b/build/lib/optimize.js
-index 2ba72a9..4ea70d0 100644
---- a/build/lib/optimize.js
-+++ b/build/lib/optimize.js
-@@ -188,3 +188,3 @@ function bundleTask(opts) {
- function minifyTask(src, sourceMapBaseUrl) {
--    const sourceMappingURL = sourceMapBaseUrl ? ((f) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined;
-+	const sourceMappingURL = sourceMapBaseUrl ? ((f) => `${sourceMapBaseUrl}-${f.relative.replaceAll('/', '-')}.map`) : undefined;
-     const target = getBuildTarget();
 diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts
-index 1e824a5..808dbeb 100644
+index 58b8e07..f452614 100644
 --- a/build/lib/optimize.ts
 +++ b/build/lib/optimize.ts
-@@ -225,3 +225,3 @@ export function bundleTask(opts: IBundleESMTaskOpts): () => NodeJS.ReadWriteStre
+@@ -229,3 +229,3 @@ export function bundleTask(opts: IBundleTaskOpts): () => NodeJS.ReadWriteStream
  export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => void {
 -	const sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined;
 +	const sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}-${f.relative.replaceAll('/', '-')}.map`) : undefined;
  	const target = getBuildTarget();
-diff --git a/build/lib/util.js b/build/lib/util.js
-index 9d2f3b1..62a5afc 100644
---- a/build/lib/util.js
-+++ b/build/lib/util.js
-@@ -237,4 +237,4 @@ function rewriteSourceMappingURL(sourceMappingURLBase) {
-         const contents = f.contents.toString('utf8');
--        const str = `//# sourceMappingURL=${sourceMappingURLBase}/${path_1.default.dirname(f.relative).replace(/\\/g, '/')}/$1`;
--        f.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, str));
-+        const fp = path_1.default.dirname(f.relative).replace(/\\/g, '/').replaceAll('/', '-');
-+        f.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, (_m, p) => `//# sourceMappingURL=${sourceMappingURLBase}/${fp}-${p.replaceAll('/', '-')}`));
-         return f;
 diff --git a/build/lib/util.ts b/build/lib/util.ts
-index 5f3b2f6..7863dd4 100644
+index f1354b8..dda8c37 100644
 --- a/build/lib/util.ts
 +++ b/build/lib/util.ts
-@@ -286,4 +286,4 @@ export function rewriteSourceMappingURL(sourceMappingURLBase: string): NodeJS.Re
- 			const contents = (<Buffer>f.contents).toString('utf8');
+@@ -285,4 +285,4 @@ export function rewriteSourceMappingURL(sourceMappingURLBase: string): NodeJS.Re
+ 			const contents = (f.contents as Buffer).toString('utf8');
 -			const str = `//# sourceMappingURL=${sourceMappingURLBase}/${path.dirname(f.relative).replace(/\\/g, '/')}/$1`;
 -			f.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, str));
 +			const fp = path.dirname(f.relative).replace(/\\/g, '/').replaceAll('/', '-');

+ 3 - 3
patches/update-cache-path.patch

@@ -1,9 +1,9 @@
 diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts
-index a2561be..a50958e 100644
+index ae4fd9c..3744826 100644
 --- a/src/vs/platform/update/electron-main/updateService.win32.ts
 +++ b/src/vs/platform/update/electron-main/updateService.win32.ts
-@@ -56,3 +56,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -58,3 +58,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  	get cachePath(): Promise<string> {
 -		const result = path.join(tmpdir(), `vscode-${this.productService.quality}-${this.productService.target}-${process.arch}`);
 +		const result = path.join(tmpdir(), `${this.productService.applicationName}-${this.productService.quality}-${this.productService.target}-${process.arch}`);
- 		return fs.promises.mkdir(result, { recursive: true }).then(() => result);
+ 		return mkdir(result, { recursive: true }).then(() => result);

+ 0 - 0
patches/update-electron.patch → patches/update-electron.patch.no


+ 11 - 16
patches/version-0-release.patch

@@ -1,31 +1,26 @@
-diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
-index cd8610d..2d928b1 100644
---- a/build/gulpfile.vscode.linux.js
-+++ b/build/gulpfile.vscode.linux.js
-@@ -27,4 +27,2 @@ const commit = getVersion(root);
- 
--const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
--
- /**
-@@ -90,3 +88,3 @@ function prepareDebPackage(arch) {
+diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts
+index c5d2163..b4768b9 100644
+--- a/build/gulpfile.vscode.linux.ts
++++ b/build/gulpfile.vscode.linux.ts
+@@ -90,3 +90,3 @@ function prepareDebPackage(arch: string) {
  					.pipe(replace('@@NAME@@', product.applicationName))
 -					.pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision))
 +					.pipe(replace('@@VERSION@@', packageJson.version))
  					.pipe(replace('@@ARCHITECTURE@@', debArch))
-@@ -204,3 +202,2 @@ function prepareRpmPackage(arch) {
+@@ -198,3 +198,2 @@ function prepareRpmPackage(arch: string) {
  			.pipe(replace('@@VERSION@@', packageJson.version))
--			.pipe(replace('@@RELEASE@@', linuxPackageRevision))
+-			.pipe(replace('@@RELEASE@@', linuxPackageRevision.toString()))
  			.pipe(replace('@@ARCHITECTURE@@', rpmArch))
-@@ -278,3 +275,3 @@ function prepareSnapPackage(arch) {
+@@ -263,3 +262,3 @@ function prepareSnapPackage(arch: string) {
  			.pipe(replace('@@NAME@@', product.applicationName))
--			.pipe(replace('@@VERSION@@', commit.substr(0, 8)))
+-			.pipe(replace('@@VERSION@@', commit!.substr(0, 8)))
 +			.pipe(replace('@@VERSION@@', packageJson.version))
  			// Possible run-on values https://snapcraft.io/docs/architectures
 diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts
-index 0db2369..5cac67b 100644
+index 8838f2f..fb120ae 100644
 --- a/src/vs/workbench/api/common/extHost.api.impl.ts
 +++ b/src/vs/workbench/api/common/extHost.api.impl.ts
-@@ -1537,5 +1537,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
+@@ -1629,5 +1629,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
  
 +		const version = initData.version.replace(/^([0-9]+\.[0-9]+\.[0-5]).*$/, '$1');
 +

+ 14 - 14
patches/version-1-update.patch

@@ -49,7 +49,7 @@ index 199f433..a6cbb10 100644
 +	| "user";
 \ No newline at end of file
 diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts
-index 48d0d86..d16dce7 100644
+index ed8043f..e19c9e4 100644
 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts
 +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts
 @@ -14,6 +14,10 @@ import { IProductService } from '../../product/common/productService.js';
@@ -66,7 +66,7 @@ index 48d0d86..d16dce7 100644
 +		return `${productService.updateUrl}/${quality}/${platform}/${architecture}/latest.json`;
 +	}
  }
-@@ -203,3 +207,3 @@ export abstract class AbstractUpdateService implements IUpdateService {
+@@ -205,3 +209,3 @@ export abstract class AbstractUpdateService implements IUpdateService {
  
 -		if (mode === 'none') {
 +		if (mode === 'none' || mode === 'manual') {
@@ -179,14 +179,14 @@ index 8550ace..c2fddcb 100644
 +				return Promise.resolve(null);
  			})
 diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts
-index 8f92a3e..020e690 100644
+index ae4fd9c..7fc81a0 100644
 --- a/src/vs/platform/update/electron-main/updateService.win32.ts
 +++ b/src/vs/platform/update/electron-main/updateService.win32.ts
-@@ -11,3 +11,2 @@ import { CancellationToken } from '../../../base/common/cancellation.js';
+@@ -13,3 +13,2 @@ import { CancellationToken } from '../../../base/common/cancellation.js';
  import { memoize } from '../../../base/common/decorators.js';
 -import { hash } from '../../../base/common/hash.js';
  import * as path from '../../../base/common/path.js';
-@@ -25,4 +24,5 @@ import { asJson, IRequestService } from '../../request/common/request.js';
+@@ -27,4 +26,5 @@ import { asJson, IRequestService } from '../../request/common/request.js';
  import { ITelemetryService } from '../../telemetry/common/telemetry.js';
 -import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from '../common/update.js';
 -import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification } from './abstractUpdateService.js';
@@ -194,12 +194,12 @@ index 8f92a3e..020e690 100644
 +import { AbstractUpdateService, createUpdateURL} from './abstractUpdateService.js';
 +import * as semver from 'semver';
  
-@@ -42,5 +42,9 @@ function getUpdateType(): UpdateType {
+@@ -44,5 +44,9 @@ function getUpdateType(): UpdateType {
  	if (typeof _updateType === 'undefined') {
--		_updateType = fs.existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))
+-		_updateType = existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))
 -			? UpdateType.Setup
 -			: UpdateType.Archive;
-+		if (fs.existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))) {
++		if (existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))) {
 +			_updateType = UpdateType.Setup;
 +		} else if (path.basename(path.normalize(path.join(process.execPath, '..', '..'))) === 'Program Files') {
 +			_updateType = UpdateType.WindowsInstaller;
@@ -207,11 +207,11 @@ index 8f92a3e..020e690 100644
 +			_updateType = UpdateType.Archive;
 +		}
  	}
-@@ -63,2 +67,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -65,2 +69,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  		@IConfigurationService configurationService: IConfigurationService,
 +		// @ts-expect-error
  		@ITelemetryService private readonly telemetryService: ITelemetryService,
-@@ -102,11 +107,21 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -155,11 +160,21 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  	protected buildUpdateFeedUrl(quality: string): string | undefined {
 -		let platform = `win32-${process.arch}`;
 -
@@ -240,7 +240,7 @@ index 8f92a3e..020e690 100644
 -		return createUpdateURL(platform, quality, this.productService);
 +		return createUpdateURL(this.productService, quality, process.platform, process.arch, target);
  	}
-@@ -131,2 +146,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -184,2 +199,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  
 +				const fetchedVersion = /\d+\.\d+\.\d+\.\d+/.test(update.productVersion) ? update.productVersion.replace(/(\d+\.\d+\.\d+)\.\d+(\-\w+)?/, '$1$2') : update.productVersion.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3')
 +				const currentVersion = this.productService.version.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3')
@@ -251,16 +251,16 @@ index 8f92a3e..020e690 100644
 +				}
 +
  				if (updateType === UpdateType.Archive) {
-@@ -157,3 +180,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -210,3 +233,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  
 -						const fastUpdatesEnabled = this.configurationService.getValue('update.enableWindowsBackgroundUpdates');
 +						const fastUpdatesEnabled = getUpdateType() == UpdateType.Setup && this.configurationService.getValue('update.enableWindowsBackgroundUpdates');
  						if (fastUpdatesEnabled) {
-@@ -169,3 +192,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -222,3 +245,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  			.then(undefined, err => {
 -				this.telemetryService.publicLog2<{ messageHash: string }, UpdateErrorClassification>('update:error', { messageHash: String(hash(String(err))) });
  				this.logService.error(err);
-@@ -253,6 +275,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
+@@ -307,6 +329,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  		} else {
 -			spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], {
 -				detached: true,

+ 16 - 35
patches/windows/appx.patch

@@ -1,9 +1,10 @@
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index ed06b6a..f2b4a82 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -406,18 +406,18 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
- 
+diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts
+index d3ab651..d067b5b 100644
+--- a/build/gulpfile.vscode.ts
++++ b/build/gulpfile.vscode.ts
+@@ -432,19 +432,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d
+ 				.pipe(rename(f => f.dirname = `policies/${f.dirname}`)));
+-
 -			if (quality === 'stable' || quality === 'insider') {
 -				result = es.merge(result, gulp.src('.build/win32/appx/**', { base: '.build/win32' }));
 -				const rawVersion = version.replace(/-\w+$/, '').split('.');
@@ -16,41 +17,21 @@ index ed06b6a..f2b4a82 100644
 -					.pipe(replace('@@ApplicationIdShort@@', product.win32RegValueName))
 -					.pipe(replace('@@ApplicationExe@@', product.nameShort + '.exe'))
 -					.pipe(replace('@@FileExplorerContextMenuID@@', quality === 'stable' ? 'OpenWithCode' : 'OpenWithCodeInsiders'))
--					.pipe(replace('@@FileExplorerContextMenuCLSID@@', product.win32ContextMenu[arch].clsid))
+-					.pipe(replace('@@FileExplorerContextMenuCLSID@@', (product as { win32ContextMenu?: Record<string, { clsid: string }> }).win32ContextMenu![arch].clsid))
 -					.pipe(replace('@@FileExplorerContextMenuDLL@@', `${quality === 'stable' ? 'code' : 'code_insider'}_explorer_command_${arch}.dll`))
 -					.pipe(rename(f => f.dirname = `appx/manifest`)));
 -			}
-+			// if (quality === 'stable' || quality === 'insider') {
-+			// 	result = es.merge(result, gulp.src('.build/win32/appx/**', { base: '.build/win32' }));
-+			// 	const rawVersion = version.replace(/-\w+$/, '').split('.');
-+			// 	const appxVersion = `${rawVersion[0]}.0.${rawVersion[1]}.${rawVersion[2]}`;
-+			// 	result = es.merge(result, gulp.src('resources/win32/appx/AppxManifest.xml', { base: '.' })
-+			// 		.pipe(replace('@@AppxPackageName@@', product.win32AppUserModelId))
-+			// 		.pipe(replace('@@AppxPackageVersion@@', appxVersion))
-+			// 		.pipe(replace('@@AppxPackageDisplayName@@', product.nameLong))
-+			// 		.pipe(replace('@@AppxPackageDescription@@', product.win32NameVersion))
-+			// 		.pipe(replace('@@ApplicationIdShort@@', product.win32RegValueName))
-+			// 		.pipe(replace('@@ApplicationExe@@', product.nameShort + '.exe'))
-+			// 		.pipe(replace('@@FileExplorerContextMenuID@@', quality === 'stable' ? 'OpenWithCode' : 'OpenWithCodeInsiders'))
-+			// 		.pipe(replace('@@FileExplorerContextMenuCLSID@@', product.win32ContextMenu[arch].clsid))
-+			// 		.pipe(replace('@@FileExplorerContextMenuDLL@@', `${quality === 'stable' ? 'code' : 'code_insider'}_explorer_command_${arch}.dll`))
-+			// 		.pipe(rename(f => f.dirname = `appx/manifest`)));
-+			// }
  		} else if (platform === 'linux') {
-diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js
-index 9207df5..ff6c116 100644
---- a/build/gulpfile.vscode.win32.js
-+++ b/build/gulpfile.vscode.win32.js
-@@ -113,7 +113,7 @@ function buildWin32Setup(arch, target) {
+diff --git a/build/gulpfile.vscode.win32.ts b/build/gulpfile.vscode.win32.ts
+index a7b01f0..43c93b8 100644
+--- a/build/gulpfile.vscode.win32.ts
++++ b/build/gulpfile.vscode.win32.ts
+@@ -117,8 +117,2 @@ function buildWin32Setup(arch: string, target: string): task.CallbackTask {
  
--		if (quality !== 'exploration') {
+-		if (quality === 'stable' || quality === 'insider') {
 -			definitions['AppxPackage'] = `${quality === 'stable' ? 'code' : 'code_insider'}_${arch}.appx`;
 -			definitions['AppxPackageDll'] = `${quality === 'stable' ? 'code' : 'code_insider'}_explorer_command_${arch}.dll`;
 -			definitions['AppxPackageName'] = `${product.win32AppUserModelId}`;
 -		}
-+		// if (quality !== 'exploration') {
-+		// 	definitions['AppxPackage'] = `${product.applicationName.replace(/-/g, '_')}_${arch}.appx`;
-+		// 	definitions['AppxPackageDll'] = `${product.applicationName.replace(/-/g, '_')}_explorer_command_${arch}.dll`;
-+		// 	definitions['AppxPackageName'] = `${product.win32AppUserModelId}`;
-+		// }
- 
+-
+ 		packageInnoSetup(issPath, { definitions }, cb as (err?: Error | null) => void);

+ 3 - 3
patches/windows/cli.patch

@@ -1,9 +1,9 @@
 diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs
-index a39bbf7..26ad204 100644
+index 3e0895f..e518ad8 100644
 --- a/cli/src/update_service.rs
 +++ b/cli/src/update_service.rs
-@@ -84,3 +84,3 @@ impl UpdateService {
+@@ -94,3 +94,3 @@ impl UpdateService {
  		let download_url = format!(
 -			"{}/{}/{}/{}/latest.json",
 +			"{}/{}/{}/{}/user/latest.json",
- 			update_endpoint,
+ 			&update_endpoint,

+ 2 - 2
prepare_vscode.sh

@@ -192,6 +192,8 @@ else
   fi
 fi
 
+node build/npm/preinstall.ts
+
 mv .npmrc .npmrc.bak
 cp ../npmrc .npmrc
 
@@ -236,9 +238,7 @@ replace "s|\\[\\/\\* BUILTIN_ANNOUNCEMENTS \\*\\/\\]|$( tr -d '\n' < ../announce
 
 ../undo_telemetry.sh
 
-replace 's|Microsoft Corporation|VSCodium|' build/lib/electron.js
 replace 's|Microsoft Corporation|VSCodium|' build/lib/electron.ts
-replace 's|([0-9]) Microsoft|\1 VSCodium|' build/lib/electron.js
 replace 's|([0-9]) Microsoft|\1 VSCodium|' build/lib/electron.ts
 
 if [[ "${OS_NAME}" == "linux" ]]; then

+ 14 - 7
product.json

@@ -49,7 +49,6 @@
   "extensionsEnabledWithApiProposalVersion": [
     "GitHub.copilot-chat",
     "ms-vscode.vscode-commander",
-    "ms-vscode.vscode-copilot-vision",
     "GitHub.vscode-pull-request-github"
   ],
   "extensionEnabledApiProposals": {
@@ -207,6 +206,7 @@
     ],
     "GitHub.vscode-pull-request-github": [
       "activeComment",
+      "chatContextProvider",
       "chatParticipantAdditions",
       "chatParticipantPrivate",
       "chatSessionsProvider",
@@ -215,6 +215,7 @@
       "commentingRangeHint",
       "commentReactor",
       "commentReveal",
+      "commentsDraftState",
       "commentThreadApplicability",
       "contribAccessibilityHelpContent",
       "contribCommentEditorActionsMenu",
@@ -237,10 +238,14 @@
     ],
     "GitHub.copilot": [
       "inlineCompletionsAdditions",
+      "interactive",
+      "terminalDataWriteEvent",
       "devDeviceId"
     ],
     "GitHub.copilot-nightly": [
       "inlineCompletionsAdditions",
+      "interactive",
+      "terminalDataWriteEvent",
       "devDeviceId"
     ],
     "GitHub.copilot-chat": [
@@ -292,7 +297,8 @@
       "dataChannels",
       "chatSessionsProvider",
       "devDeviceId",
-      "contribEditorContentMenu"
+      "contribEditorContentMenu",
+      "tokenInformation"
     ],
     "GitHub.remotehub": [
       "contribRemoteHelp",
@@ -311,7 +317,8 @@
     ],
     "ms-python.vscode-pylance": [
       "terminalShellEnv",
-      "portsAttributes"
+      "portsAttributes",
+      "codeActionAI"
     ],
     "ms-python.debugpy": [
       "contribViewsWelcome",
@@ -357,7 +364,6 @@
       "terminalDataWriteEvent",
       "chatParticipantAdditions"
     ],
-    "vscjava.vscode-java-pack": [],
     "ms-dotnettools.csdevkit": [
       "inlineCompletionsAdditions"
     ],
@@ -376,9 +382,6 @@
       "chatParticipantAdditions",
       "languageModelSystem"
     ],
-    "ms-toolsai.datawrangler": [],
-    "ms-vscode.vscode-commander": [],
-    "ms-vscode.vscode-websearchforcopilot": [],
     "ms-vscode.vscode-copilot-vision": [
       "chatReferenceBinaryData",
       "codeActionAI"
@@ -386,6 +389,10 @@
     "ms-autodev.vscode-autodev": [
       "chatParticipantAdditions"
     ],
+    "codetrek.haystack-search": [
+      "fileSearchProvider",
+      "textSearchProvider2"
+    ],
     "vscjava.vscode-java-upgrade": [
       "chatParticipantAdditions",
       "chatParticipantPrivate"

+ 2 - 2
release_notes.md

@@ -75,8 +75,8 @@ update vscode to [@@MS_TAG@@](@@MS_URL@@)
   <tr>
     <td>AppImage</td>
     <td>
-      <a href="https://github.com/@@ASSETS_REPOSITORY@@/releases/download/@@VERSION@@@@QUALITY@@/@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.29-x86_64.AppImage">@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.29-x86_64.AppImage</a><br />
-      <a href="https://github.com/@@ASSETS_REPOSITORY@@/releases/download/@@VERSION@@@@QUALITY@@/@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.29-x86_64.AppImage.zsync">@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.29-x86_64.AppImage.zsync</a>
+      <a href="https://github.com/@@ASSETS_REPOSITORY@@/releases/download/@@VERSION@@@@QUALITY@@/@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.30-x86_64.AppImage">@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.30-x86_64.AppImage</a><br />
+      <a href="https://github.com/@@ASSETS_REPOSITORY@@/releases/download/@@VERSION@@@@QUALITY@@/@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.30-x86_64.AppImage.zsync">@@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.30-x86_64.AppImage.zsync</a>
     </td>
   </tr>
   <tr>

+ 2 - 2
upstream/insider.json

@@ -1,4 +1,4 @@
 {
-  "tag": "1.106.0",
-  "commit": "ac4cbdf48759c7d8c3eb91ffe6bb04316e263c57"
+  "tag": "1.107.0",
+  "commit": "a44beb9c392505cf7897ad5a20c5b83d26537fd1"
 }