瀏覽代碼

Merge branch 'insider'

Baptiste Augrain 2 月之前
父節點
當前提交
d4b6a02c80
共有 41 個文件被更改,包括 394 次插入632 次删除
  1. 16 5
      .github/workflows/insider-linux.yml
  2. 1 1
      .github/workflows/insider-macos.yml
  3. 2 2
      .github/workflows/insider-spearhead.yml
  4. 1 9
      .github/workflows/insider-windows.yml
  5. 18 7
      .github/workflows/stable-linux.yml
  6. 1 1
      .github/workflows/stable-macos.yml
  7. 2 2
      .github/workflows/stable-spearhead.yml
  8. 1 9
      .github/workflows/stable-windows.yml
  9. 1 1
      CONTRIBUTING.md
  10. 17 14
      build.sh
  11. 4 4
      build/alpine/package_reh.sh
  12. 3 4
      build/linux/package_bin.sh
  13. 4 4
      build/linux/package_reh.sh
  14. 5 5
      build/windows/package.sh
  15. 1 1
      check_tags.sh
  16. 1 8
      dev/build_docker.sh
  17. 2 3
      docs/howto-build.md
  18. 6 6
      get_repo.sh
  19. 18 0
      patches/add-remote-url.patch
  20. 6 18
      patches/binary-name.patch
  21. 76 77
      patches/brand.patch
  22. 8 8
      patches/insider/add-remote-url.patch
  23. 6 6
      patches/insider/system-extensions.patch
  24. 12 12
      patches/linux/arch-0-support.patch
  25. 32 37
      patches/linux/arch-1-ppc64le.patch
  26. 3 23
      patches/linux/fix-build.patch
  27. 4 6
      patches/merge-user-product.patch
  28. 25 143
      patches/optional-tree-sitter.patch
  29. 30 30
      patches/policies.patch
  30. 12 12
      patches/report-issue.patch
  31. 8 8
      patches/terminal-suggest.patch
  32. 0 0
      patches/update-electron.patch.no
  33. 9 146
      patches/version-0-release.patch
  34. 6 6
      patches/version-1-update.patch
  35. 7 5
      prepare_assets.sh
  36. 11 3
      prepare_vscode.sh
  37. 7 1
      product.json
  38. 20 1
      update_version.sh
  39. 2 2
      upstream/insider.json
  40. 2 2
      upstream/stable.json
  41. 4 0
      utils.sh

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

@@ -30,7 +30,7 @@ env:
   ASSETS_REPOSITORY: ${{ github.repository }}-insiders
   BINARY_NAME: codium-insiders
   DISABLE_UPDATE: 'yes'
-  GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+  GH_REPO_PATH: ${{ github.repository }}
   GITHUB_BRANCH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || 'insider' }}
   ORG_NAME: ${{ github.repository_owner }}
   OS_NAME: linux
@@ -107,10 +107,6 @@ jobs:
           node-version: '20.18.2'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install Yarn
-        run: npm install -g yarn
-        if: env.SHOULD_BUILD == 'yes'
-
       - name: Setup Python 3
         uses: actions/setup-python@v5
         with:
@@ -541,3 +537,18 @@ jobs:
           repo_token: ${{ secrets.STRONGER_GITHUB_TOKEN }}
           file: ${{ steps.build.outputs.snap }}
           tag: ${{ env.RELEASE_VERSION }}
+
+  deploy-repo-dev:
+    needs:
+      - check
+      - build
+    runs-on: ubuntu-latest
+    if: needs.check.outputs.SHOULD_DEPLOY == 'yes' && github.event.inputs.generate_assets != 'true'
+
+    steps:
+      - name: Trigger repository rebuild
+        uses: peter-evans/repository-dispatch@v3
+        with:
+          token: ${{ secrets.STRONGER_GITHUB_TOKEN }}
+          repository: VSCodium/repositories-linux
+          event-type: deploy

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

@@ -29,7 +29,7 @@ env:
   ASSETS_REPOSITORY: ${{ github.repository }}-insiders
   BINARY_NAME: codium-insiders
   GITHUB_BRANCH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || 'insider' }}
-  GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+  GH_REPO_PATH: ${{ github.repository }}
   ORG_NAME: ${{ github.repository_owner }}
   OS_NAME: osx
   VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions

+ 2 - 2
.github/workflows/insider-spearhead.yml

@@ -25,7 +25,7 @@ jobs:
       APP_NAME: VSCodium
       ASSETS_REPOSITORY: ${{ github.repository }}-insiders
       BINARY_NAME: codium-insiders
-      GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+      GH_REPO_PATH: ${{ github.repository }}
       ORG_NAME: ${{ github.repository_owner }}
       OS_NAME: osx
       VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions
@@ -86,5 +86,5 @@ jobs:
       - name: Dispatch builds
         uses: peter-evans/repository-dispatch@v3
         with:
-          event-type: 'insider'
+          event-type: insider
         if: github.event.inputs.dont_dispatch != 'true' && (env.SHOULD_BUILD == 'yes' || github.event.inputs.force_dispatch == 'true')

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

@@ -29,7 +29,7 @@ env:
   ASSETS_REPOSITORY: ${{ github.repository }}-insiders
   BINARY_NAME: codium-insiders
   GITHUB_BRANCH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || 'insider' }}
-  GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+  GH_REPO_PATH: ${{ github.repository }}
   ORG_NAME: ${{ github.repository_owner }}
   OS_NAME: windows
   VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions
@@ -105,10 +105,6 @@ jobs:
           node-version: '20.18.2'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install Yarn
-        run: npm install -g yarn
-        if: env.SHOULD_BUILD == 'yes'
-
       - name: Setup Python 3
         uses: actions/setup-python@v5
         with:
@@ -190,10 +186,6 @@ jobs:
           node-version: '20.18.2'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install Yarn
-        run: npm install -g yarn
-        if: env.SHOULD_BUILD == 'yes'
-
       - name: Setup Python 3
         uses: actions/setup-python@v5
         with:

+ 18 - 7
.github/workflows/stable-linux.yml

@@ -30,7 +30,7 @@ env:
   ASSETS_REPOSITORY: ${{ github.repository }}
   BINARY_NAME: codium
   DISABLE_UPDATE: 'yes'
-  GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+  GH_REPO_PATH: ${{ github.repository }}
   ORG_NAME: ${{ github.repository_owner }}
   OS_NAME: linux
   VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions
@@ -108,10 +108,6 @@ jobs:
           node-version: '20.18.2'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install Yarn
-        run: npm install -g yarn
-        if: env.SHOULD_BUILD == 'yes'
-
       - name: Setup Python 3
         uses: actions/setup-python@v5
         with:
@@ -560,15 +556,30 @@ jobs:
           release: ${{ vars.SNAP_STORE_CHANNEL }}
         if: env.SHOULD_DEPLOY_TO_STORE == 'yes'
 
-  deb-rpm-repo-hook:
+  deploy-repo-rudy:
     needs:
       - check
       - build
     runs-on: ubuntu-latest
-    if: needs.check.outputs.SHOULD_DEPLOY == 'yes'
+    if: needs.check.outputs.SHOULD_DEPLOY == 'yes' && github.event.inputs.generate_assets != 'true'
 
     steps:
       - name: Trigger repository rebuild
         env:
           GL_PAGES_TOKEN: ${{ secrets.GL_PAGES_TOKEN }}
         run: curl -X POST --fail -F token="${GL_PAGES_TOKEN}" -F ref=master https://gitlab.com/api/v4/projects/8762263/trigger/pipeline
+
+  deploy-repo-dev:
+    needs:
+      - check
+      - build
+    runs-on: ubuntu-latest
+    if: needs.check.outputs.SHOULD_DEPLOY == 'yes' && github.event.inputs.generate_assets != 'true'
+
+    steps:
+      - name: Trigger repository rebuild
+        uses: peter-evans/repository-dispatch@v3
+        with:
+          token: ${{ secrets.STRONGER_GITHUB_TOKEN }}
+          repository: VSCodium/repositories-linux
+          event-type: deploy

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

@@ -28,7 +28,7 @@ env:
   APP_NAME: VSCodium
   ASSETS_REPOSITORY: ${{ github.repository }}
   BINARY_NAME: codium
-  GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+  GH_REPO_PATH: ${{ github.repository }}
   ORG_NAME: ${{ github.repository_owner }}
   OS_NAME: osx
   VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions

+ 2 - 2
.github/workflows/stable-spearhead.yml

@@ -22,7 +22,7 @@ jobs:
       APP_NAME: VSCodium
       ASSETS_REPOSITORY: ${{ github.repository }}
       BINARY_NAME: codium
-      GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+      GH_REPO_PATH: ${{ github.repository }}
       ORG_NAME: ${{ github.repository_owner }}
       OS_NAME: osx
       VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions
@@ -81,5 +81,5 @@ jobs:
       - name: Dispatch builds
         uses: peter-evans/repository-dispatch@v3
         with:
-          event-type: 'stable'
+          event-type: stable
         if: env.SHOULD_BUILD == 'yes' || github.event.inputs.force_dispatch == 'true'

+ 1 - 9
.github/workflows/stable-windows.yml

@@ -28,7 +28,7 @@ env:
   APP_NAME: VSCodium
   ASSETS_REPOSITORY: ${{ github.repository }}
   BINARY_NAME: codium
-  GH_REPO_PATH: ${{ github.repository_owner }}/${{ github.repository }}
+  GH_REPO_PATH: ${{ github.repository }}
   ORG_NAME: ${{ github.repository_owner }}
   OS_NAME: windows
   VERSIONS_REPOSITORY: ${{ github.repository_owner }}/versions
@@ -104,10 +104,6 @@ jobs:
           node-version: '20.18.2'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install Yarn
-        run: npm install -g yarn
-        if: env.SHOULD_BUILD == 'yes'
-
       - name: Setup Python 3
         uses: actions/setup-python@v5
         with:
@@ -189,10 +185,6 @@ jobs:
           node-version: '20.18.2'
         if: env.SHOULD_BUILD == 'yes'
 
-      - name: Install Yarn
-        run: npm install -g yarn
-        if: env.SHOULD_BUILD == 'yes'
-
       - name: Setup Python 3
         uses: actions/setup-python@v5
         with:

+ 1 - 1
CONTRIBUTING.md

@@ -36,7 +36,7 @@ If you want to update the existing patches, please follow the section [`Patch Up
 - first, you need to build VSCodium
 - then use the command `./dev/patch.sh <your patch name>`, to initiate a new patch
 - when the script pauses at `Press any key when the conflict have been resolved...`, open `vscode` directory in **VSCodium**
-- run `yarn watch`
+- run `npm run watch`
 - run `./script/code.sh`
 - make your changes
 - press any key to continue the script `patch.sh`

+ 17 - 14
build.sh

@@ -14,29 +14,32 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then
 
   export NODE_OPTIONS="--max-old-space-size=8192"
 
-  yarn monaco-compile-check
-  yarn valid-layers-check
+  npm run monaco-compile-check
+  npm run valid-layers-check
 
-  yarn gulp compile-build
-  yarn gulp compile-extension-media
-  yarn gulp compile-extensions-build
-  yarn gulp minify-vscode
+  npm run gulp compile-build-without-mangling
+  npm run gulp compile-extension-media
+  npm run gulp compile-extensions-build
+  npm run gulp minify-vscode
 
   if [[ "${OS_NAME}" == "osx" ]]; then
-    yarn gulp "vscode-darwin-${VSCODE_ARCH}-min-ci"
+    # generate Group Policy definitions
+    node build/lib/policies darwin
+
+    npm run gulp "vscode-darwin-${VSCODE_ARCH}-min-ci"
 
     find "../VSCode-darwin-${VSCODE_ARCH}" -print0 | xargs -0 touch -c
 
     VSCODE_PLATFORM="darwin"
   elif [[ "${OS_NAME}" == "windows" ]]; then
     # generate Group Policy definitions
-    node build/lib/policies
+    node build/lib/policies win32
 
     # in CI, packaging will be done by a different job
     if [[ "${CI_BUILD}" == "no" ]]; then
       . ../build/windows/rtf/make.sh
 
-      yarn gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
+      npm run gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
 
       if [[ "${VSCODE_ARCH}" != "x64" ]]; then
         SHOULD_BUILD_REH="no"
@@ -48,7 +51,7 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then
   else # linux
     # in CI, packaging will be done by a different job
     if [[ "${CI_BUILD}" == "no" ]]; then
-      yarn gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
+      npm run gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
 
       find "../VSCode-linux-${VSCODE_ARCH}" -print0 | xargs -0 touch -c
     fi
@@ -57,13 +60,13 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then
   fi
 
   if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
-    yarn gulp minify-vscode-reh
-    yarn gulp "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
+    npm run gulp minify-vscode-reh
+    npm run gulp "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
   fi
 
   if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then
-    yarn gulp minify-vscode-reh-web
-    yarn gulp "vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
+    npm run gulp minify-vscode-reh-web
+    npm run gulp "vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
   fi
 
   cd ..

+ 4 - 4
build/alpine/package_reh.sh

@@ -51,8 +51,8 @@ fi
 
 if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
   echo "Building REH"
-  yarn gulp minify-vscode-reh
-  yarn gulp "vscode-reh-${PA_NAME}-min-ci"
+  npm run gulp minify-vscode-reh
+  npm run gulp "vscode-reh-${PA_NAME}-min-ci"
 
   pushd "../vscode-reh-${PA_NAME}"
 
@@ -64,8 +64,8 @@ fi
 
 if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then
   echo "Building REH-web"
-  yarn gulp minify-vscode-reh-web
-  yarn gulp "vscode-reh-web-${PA_NAME}-min-ci"
+  npm run gulp minify-vscode-reh-web
+  npm run gulp "vscode-reh-web-${PA_NAME}-min-ci"
 
   pushd "../vscode-reh-web-${PA_NAME}"
 

+ 3 - 4
build/linux/package_bin.sh

@@ -18,7 +18,7 @@ cd vscode || { echo "'vscode' dir not found"; exit 1; }
 
 export VSCODE_PLATFORM='linux'
 export VSCODE_SKIP_NODE_VERSION_CHECK=1
-export VSCODE_SYSROOT_PREFIX='-glibc-2.17'
+export VSCODE_SYSROOT_PREFIX='-glibc-2.28'
 
 if [[ "${VSCODE_ARCH}" == "arm64" || "${VSCODE_ARCH}" == "armhf" ]]; then
   export VSCODE_SKIP_SYSROOT=1
@@ -26,7 +26,6 @@ if [[ "${VSCODE_ARCH}" == "arm64" || "${VSCODE_ARCH}" == "armhf" ]]; then
 elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then
   export VSCODE_SYSROOT_REPOSITORY='VSCodium/vscode-linux-build-agent'
   export VSCODE_SYSROOT_VERSION='20240129-253798'
-  export VSCODE_SYSROOT_PREFIX='-glibc-2.28'
   export USE_GNUPP2A=1
   export ELECTRON_SKIP_BINARY_DOWNLOAD=1
   export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
@@ -55,7 +54,7 @@ if [[ -f "../build/linux/${VSCODE_ARCH}/electron.sh" ]]; then
   # shellcheck disable=SC1090
   source "../build/linux/${VSCODE_ARCH}/electron.sh"
 
-  TARGET=$( yarn config get target )
+  TARGET=$( npm config get target )
 
   # Only fails at different major versions
   if [[ "${ELECTRON_VERSION%%.*}" != "${TARGET%%.*}" ]]; then
@@ -129,7 +128,7 @@ done
 
 node build/azure-pipelines/distro/mixin-npm
 
-yarn gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
+npm run gulp "vscode-linux-${VSCODE_ARCH}-min-ci"
 
 if [[ -f "../build/linux/${VSCODE_ARCH}/ripgrep.sh" ]]; then
   bash "../build/linux/${VSCODE_ARCH}/ripgrep.sh" "../VSCode-linux-${VSCODE_ARCH}/resources/app/node_modules"

+ 4 - 4
build/linux/package_reh.sh

@@ -164,8 +164,8 @@ export VSCODE_NODE_GLIBC="-glibc-${GLIBC_VERSION}"
 
 if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
   echo "Building REH"
-  yarn gulp minify-vscode-reh
-  yarn gulp "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
+  npm run gulp minify-vscode-reh
+  npm run gulp "vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
 
   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
 
@@ -183,8 +183,8 @@ fi
 
 if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then
   echo "Building REH-web"
-  yarn gulp minify-vscode-reh-web
-  yarn gulp "vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
+  npm run gulp minify-vscode-reh-web
+  npm run gulp "vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}-min-ci"
 
   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
 

+ 5 - 5
build/windows/package.sh

@@ -24,19 +24,19 @@ node build/azure-pipelines/distro/mixin-npm
 
 . ../build/windows/rtf/make.sh
 
-yarn gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
+npm run gulp "vscode-win32-${VSCODE_ARCH}-min-ci"
 
 if [[ "${VSCODE_ARCH}" == "x64" ]]; then
   if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then
     echo "Building REH"
-    yarn gulp minify-vscode-reh
-    yarn gulp "vscode-reh-win32-${VSCODE_ARCH}-min-ci"
+    npm run gulp minify-vscode-reh
+    npm run gulp "vscode-reh-win32-${VSCODE_ARCH}-min-ci"
   fi
 
   if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then
     echo "Building REH-web"
-    yarn gulp minify-vscode-reh-web
-    yarn gulp "vscode-reh-web-win32-${VSCODE_ARCH}-min-ci"
+    npm run gulp minify-vscode-reh-web
+    npm run gulp "vscode-reh-web-win32-${VSCODE_ARCH}-min-ci"
   fi
 fi
 

+ 1 - 1
check_tags.sh

@@ -22,7 +22,7 @@ else
   LATEST_VERSION=$( echo "${GITHUB_RESPONSE}" | jq -c -r '.tag_name' )
   RECHECK_ASSETS="${SHOULD_BUILD}"
 
-  if [[ "${LATEST_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-9]+) ]]; then
+  if [[ "${LATEST_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-5]) ]]; then
     if [[ "${MS_TAG}" != "${BASH_REMATCH[1]}" ]]; then
       echo "New VSCode version, new build"
       export SHOULD_BUILD="yes"

+ 1 - 8
dev/build_docker.sh

@@ -20,20 +20,13 @@ while getopts ":ilp" opt; do
       export VSCODE_LATEST="yes"
       ;;
     p)
-      export SKIP_ASSETS="no" 
+      export SKIP_ASSETS="no"
       ;;
     *)
       ;;
   esac
 done
 
-if ! exists yarn; then
-  curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
-  sudo apt-get install -y nodejs desktop-file-utils
-
-  npm install -g yarn
-fi
-
 UNAME_ARCH=$( uname -m )
 
 if [[ "${UNAME_ARCH}" == "x86_64" ]]; then

+ 2 - 3
docs/howto-build.md

@@ -15,7 +15,6 @@
 ## <a id="dependencies"></a>Dependencies
 
 - node 20.14
-- yarn
 - jq
 - git
 - python3 3.11
@@ -97,7 +96,7 @@ review-tools.snap-review --allow-classic codium*.snap
 - run `./dev/update_patches.sh`
 - when the script pauses at `Press any key when the conflict have been resolved...`, open `vscode` directory in **VSCodium**
 - fix all the `*.rej` files
-- run `yarn watch`
+- run `npm run watch`
 - run `./script/code.sh` until everything is ok
 - press any key to continue the script `update_patches.sh`
 
@@ -108,7 +107,7 @@ review-tools.snap-review --allow-classic codium*.snap
 - revert all changes
 - run `git apply --reject ../patches/<name>.patch`
 - fix all the `*.rej` files
-- run `yarn watch`
+- run `npm run watch`
 - run `./script/code.sh` until everything is ok
 - run `git diff > ../patches/<name>.patch`
 

+ 6 - 6
get_repo.sh

@@ -27,16 +27,16 @@ if [[ -z "${RELEASE_VERSION}" ]]; then
     fi
   fi
 
-  date=$( date +%Y%j )
+  TIME_PATCH=$( printf "%04d" $(($(date +%-j) * 24 + $(date +%-H))) )
 
   if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
-    RELEASE_VERSION="${MS_TAG}.${date: -5}-insider"
+    RELEASE_VERSION="${MS_TAG}${TIME_PATCH}-insider"
   else
-    RELEASE_VERSION="${MS_TAG}.${date: -5}"
+    RELEASE_VERSION="${MS_TAG}${TIME_PATCH}"
   fi
 else
   if [[ "${VSCODE_QUALITY}" == "insider" ]]; then
-    if [[ "${RELEASE_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+-insider$ ]];
+    if [[ "${RELEASE_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-5])[0-9]+-insider$ ]];
     then
       MS_TAG="${BASH_REMATCH[1]}"
     else
@@ -44,7 +44,7 @@ else
       exit 1
     fi
   else
-    if [[ "${RELEASE_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+$ ]];
+    if [[ "${RELEASE_VERSION}" =~ ^([0-9]+\.[0-9]+\.[0-5])[0-9]+$ ]];
     then
       MS_TAG="${BASH_REMATCH[1]}"
     else
@@ -80,7 +80,7 @@ elif [[ -z "${MS_COMMIT}" ]]; then
   if [[ -z "${REFERENCE}" ]]; then
     echo "Error: The following tag can't be found: ${MS_TAG}"
     exit 1
-  elif [[ "${REFERENCE}" =~ ^([[:alnum:]]+)[[:space:]]+refs\/tags\/([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then
+  elif [[ "${REFERENCE}" =~ ^([[:alnum:]]+)[[:space:]]+refs\/tags\/([0-9]+\.[0-9]+\.[0-5])$ ]]; then
     MS_COMMIT="${BASH_REMATCH[1]}"
     MS_TAG="${BASH_REMATCH[2]}"
   else

+ 18 - 0
patches/add-remote-url.patch

@@ -0,0 +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
+ 		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/!!GH_REPO_PATH!!/releases/download/${version/!!APP_NAME_LC!!-reh-${os}-${arch}-${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
+ 		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/!!GH_REPO_PATH!!/releases/download/${version}/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}.tar.gz' }))
+ 			.pipe(es.through(function (file) {

+ 6 - 18
patches/binary-name.patch

@@ -1,35 +1,23 @@
 diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 2686509..4fedec2 100644
+index 7046ee0..faca888 100644
 --- a/build/gulpfile.vscode.js
 +++ b/build/gulpfile.vscode.js
-@@ -289,7 +289,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
- 		} else if (platform === 'darwin') {
- 			const shortcut = gulp.src('resources/darwin/bin/code.sh')
+@@ -376,3 +376,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
  				.pipe(replace('@@APPNAME@@', product.applicationName))
 -				.pipe(rename('bin/code'));
 +				.pipe(rename('bin/' + product.applicationName));
- 
- 			all = es.merge(all, shortcut);
- 		}
+ 			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 f7bd477..a489ae4 100644
+index 6324e98..3d2fba3 100644
 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts
 +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts
-@@ -351,7 +351,7 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
- 	}
- 
+@@ -445,3 +445,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}`;
- 
- 		// Ensure source exists
-@@ -545,7 +545,7 @@ export class NativeHostMainService extends Disposable implements INativeHostMain
- 
- 		// macOS
+@@ -680,3 +680,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}`);
  		}
- 
- 		return join(this.environmentMainService.appRoot, 'scripts', 'code-cli.sh');

+ 76 - 77
patches/brand.patch

@@ -73,7 +73,7 @@ index be7eea1..389e89e 100644
 +const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75 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 101618a..b748e7a 100644
+index 52ba381..8a42701 100644
 --- a/extensions/git/package.nls.json
 +++ b/extensions/git/package.nls.json
 @@ -227,3 +227,3 @@
@@ -88,22 +88,22 @@ index 101618a..b748e7a 100644
 +	"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.",
-@@ -322,3 +322,3 @@
+@@ -323,3 +323,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"
-@@ -332,3 +332,3 @@
+@@ -333,3 +333,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"
-@@ -342,3 +342,3 @@
+@@ -343,3 +343,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"
-@@ -354,6 +354,6 @@
+@@ -355,6 +355,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 101618a..b748e7a 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"
-@@ -362,6 +362,6 @@
+@@ -363,6 +363,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 101618a..b748e7a 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"
-@@ -370,6 +370,6 @@
+@@ -371,6 +371,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 101618a..b748e7a 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"
-@@ -378,6 +378,6 @@
+@@ -379,6 +379,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 101618a..b748e7a 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"
-@@ -386,6 +386,6 @@
+@@ -387,6 +387,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 101618a..b748e7a 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"
-@@ -404,3 +404,3 @@
+@@ -405,3 +405,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"
-@@ -413,3 +413,3 @@
+@@ -414,3 +414,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"
-@@ -421,3 +421,3 @@
+@@ -422,3 +422,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"
-@@ -429,3 +429,3 @@
+@@ -430,3 +430,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"
-@@ -434,6 +434,6 @@
+@@ -435,6 +435,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 101618a..b748e7a 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"
-@@ -442,6 +442,6 @@
+@@ -443,6 +443,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 101618a..b748e7a 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"
-@@ -453,3 +453,3 @@
+@@ -454,3 +454,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"
-@@ -457,3 +457,3 @@
+@@ -458,3 +458,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,7 +361,7 @@ index 7d6694c..0e1d484 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 f88b9c7..b7d38ad 100644
+index 447359e..e40077c 100644
 --- a/extensions/typescript-language-features/package.nls.json
 +++ b/extensions/typescript-language-features/package.nls.json
 @@ -75,4 +75,4 @@
@@ -376,10 +376,7 @@ index f88b9c7..b7d38ad 100644
 -	"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.",
-@@ -166,8 +166,8 @@
- 	"typescript.suggest.enabled": "Enabled/disable autocomplete suggestions.",
--	"configuration.surveys.enabled": "Enabled/disable occasional surveys that help us improve VS Code's JavaScript and TypeScript support.",
-+	"configuration.surveys.enabled": "Enabled/disable occasional surveys that help us improve !!APP_NAME!!'s JavaScript and TypeScript support.",
+@@ -167,6 +167,6 @@
  	"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.",
@@ -388,7 +385,7 @@ index f88b9c7..b7d38ad 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.",
-@@ -222,9 +222,9 @@
+@@ -221,9 +221,9 @@
  	"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.",
@@ -401,7 +398,7 @@ index f88b9c7..b7d38ad 100644
 -	"walkthroughs.nodejsWelcome.description": "Make the most of Visual Studio Code's first-class JavaScript experience.",
 +	"walkthroughs.nodejsWelcome.description": "Make the most of !!APP_NAME!!'s first-class JavaScript experience.",
  	"walkthroughs.nodejsWelcome.downloadNode.forMacOrWindows.title": "Install Node.js",
-@@ -236,7 +236,7 @@
+@@ -235,7 +235,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.",
@@ -547,10 +544,10 @@ index 2fab3ec..35d3325 100644
 +					progress.report({ message: 'Installing !!APP_NAME!! Server' });
  					serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin, m => outputChannel.appendLine(m));
 diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts
-index 21a297a..4efb60f 100644
+index 3fb0f3a..f1e158e 100644
 --- a/src/vs/code/electron-main/app.ts
 +++ b/src/vs/code/electron-main/app.ts
-@@ -546,3 +546,3 @@ export class CodeApplication extends Disposable {
+@@ -522,3 +522,3 @@ export class CodeApplication extends Disposable {
  	async startup(): Promise<void> {
 -		this.logService.debug('Starting VS Code');
 +		this.logService.debug('Starting !!APP_NAME!!');
@@ -574,20 +571,20 @@ index c256dba..0ae2e47 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 04ed182..bdf41b1 100644
+index 696ef6f..801aba0 100644
 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts
 +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts
-@@ -150,3 +150,3 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi
+@@ -152,3 +152,3 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi
  			if (manifest.engines && manifest.engines.vscode && !isEngineValid(manifest.engines.vscode, this.productService.version, this.productService.date)) {
 -				throw new Error(nls.localize('incompatible', "Unable to install extension '{0}' as it is not compatible with VS Code '{1}'.", extensionId, this.productService.version));
 +				throw new Error(nls.localize('incompatible', "Unable to install extension '{0}' as it is not compatible with !!APP_NAME!! '{1}'.", extensionId, this.productService.version));
  			}
-@@ -1007,3 +1007,3 @@ class InstallExtensionInProfileTask extends AbstractExtensionTask<ILocalExtensio
+@@ -1028,3 +1028,3 @@ class InstallExtensionInProfileTask extends AbstractExtensionTask<ILocalExtensio
  					} catch (e) {
 -						throw new Error(nls.localize('restartCode', "Please restart VS Code before reinstalling {0}.", this.manifest.displayName || this.manifest.name));
 +						throw new Error(nls.localize('restartCode', "Please restart !!APP_NAME!! before reinstalling {0}.", this.manifest.displayName || this.manifest.name));
  					}
-@@ -1018,3 +1018,3 @@ class InstallExtensionInProfileTask extends AbstractExtensionTask<ILocalExtensio
+@@ -1039,3 +1039,3 @@ class InstallExtensionInProfileTask extends AbstractExtensionTask<ILocalExtensio
  				} catch (e) {
 -					throw new Error(nls.localize('restartCode', "Please restart VS Code before reinstalling {0}.", this.manifest.displayName || this.manifest.name));
 +					throw new Error(nls.localize('restartCode', "Please restart !!APP_NAME!! before reinstalling {0}.", this.manifest.displayName || this.manifest.name));
@@ -735,68 +732,70 @@ index 0a13063..c62db65 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 e301639..e7b0ac4 100644
+index 34a5326..663d6de 100644
 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
 +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
-@@ -386,3 +386,3 @@ CommandsRegistry.registerCommand({
+@@ -400,3 +400,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,
-@@ -393,3 +393,3 @@ CommandsRegistry.registerCommand({
+@@ -407,3 +407,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
-@@ -398,3 +398,3 @@ CommandsRegistry.registerCommand({
+@@ -412,3 +412,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
-@@ -403,3 +403,3 @@ CommandsRegistry.registerCommand({
+@@ -417,3 +417,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
-@@ -907,3 +907,3 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
+@@ -938,4 +938,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi
  						Severity.Info,
--						localize('InstallVSIXAction.successReload', "Completed installing extension from VSIX. Please reload Visual Studio Code to enable it."),
-+						localize('InstallVSIXAction.successReload', "Completed installing extension from VSIX. Please reload !!APP_NAME!! to enable it."),
+-						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."),
++						vsixs.length > 1 ? localize('InstallVSIXs.successReload', "Completed installing extensions. Please reload VSCodium to enable them.")
++							: 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 8b062d1..24887c4 100644
+index 572bb26..53f5740 100644
 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
 +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
-@@ -105,3 +105,3 @@ export class PromptExtensionInstallFailureAction extends Action {
+@@ -106,3 +106,3 @@ export class PromptExtensionInstallFailureAction extends Action {
  		if (this.error.name === ExtensionManagementErrorCode.Unsupported) {
 -			const productName = isWeb ? localize('VS Code for Web', "{0} for the Web", this.productService.nameLong) : this.productService.nameLong;
 +			const productName = isWeb ? localize('!!APP_NAME!! for Web', "{0} for the Web", this.productService.nameLong) : this.productService.nameLong;
  			const message = localize('cannot be installed', "The '{0}' extension is not available in {1}. Click 'More Information' to learn more.", this.extension.displayName || this.extension.identifier.id, productName);
-@@ -514,3 +514,3 @@ export class InstallAction extends ExtensionAction {
+@@ -524,3 +524,3 @@ export class InstallAction extends ExtensionAction {
  			} else if (this.extension.deprecationInfo.settings) {
 -				detail = localize('deprecated with alternate settings message', "This extension is deprecated as this functionality is now built-in to VS Code.");
 +				detail = localize('deprecated with alternate settings message', "This extension is deprecated as this functionality is now built-in to !!APP_NAME!!.");
  
-@@ -902,3 +902,3 @@ export class UninstallAction extends ExtensionAction {
+@@ -912,3 +912,3 @@ export class UninstallAction extends ExtensionAction {
  			await this.extensionsWorkbenchService.uninstall(this.extension);
 -			alert(localize('uninstallExtensionComplete', "Please reload Visual Studio Code to complete the uninstallation of the extension {0}.", this.extension.displayName));
 +			alert(localize('uninstallExtensionComplete', "Please reload !!APP_NAME!! to complete the uninstallation of the extension {0}.", this.extension.displayName));
  		} catch (error) {
-@@ -2553,3 +2553,3 @@ export class ExtensionStatusAction extends ExtensionAction {
+@@ -2565,3 +2565,3 @@ export class ExtensionStatusAction extends ExtensionAction {
  				const link = `[${localize('settings', "settings")}](${URI.parse(`command:workbench.action.openSettings?${encodeURIComponent(JSON.stringify([this.extension.deprecationInfo.settings.map(setting => `@id:${setting}`).join(' ')]))}`)})`;
 -				this.updateStatus({ icon: warningIcon, message: new MarkdownString(localize('deprecated with alternate settings tooltip', "This extension is deprecated as this functionality is now built-in to VS Code. Configure these {0} to use this functionality.", link)) }, true);
 +				this.updateStatus({ icon: warningIcon, message: new MarkdownString(localize('deprecated with alternate settings tooltip', "This extension is deprecated as this functionality is now built-in to !!APP_NAME!!. Configure these {0} to use this functionality.", link)) }, true);
  			} else {
 diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
-index 74f8e88..5b1023b 100644
+index bcf99d6..d473bf9 100644
 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
 +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
-@@ -456,3 +456,3 @@ export class Extension implements IExtension {
+@@ -463,3 +463,3 @@ export class Extension implements IExtension {
  			return Promise.resolve(`# ${this.displayName || this.name}
 -**Notice:** This extension is bundled with Visual Studio Code. It can be disabled but not uninstalled.
 +**Notice:** This extension is bundled with !!APP_NAME!!. It can be disabled but not uninstalled.
  ## Features
-@@ -494,3 +494,3 @@ ${this.description}
+@@ -501,3 +501,3 @@ ${this.description}
  		if (this.type === ExtensionType.System) {
 -			return Promise.resolve(`Please check the [VS Code Release Notes](command:${ShowCurrentReleaseNotesActionId}) for changes to the built-in extensions.`);
 +			return Promise.resolve(`Please check the [!!APP_NAME!! Release Notes](command:${ShowCurrentReleaseNotesActionId}) for changes to the built-in extensions.`);
@@ -866,10 +865,10 @@ index b716bcd..07b107b 100644
 +								"You can now access this machine anywhere via the secure tunnel [{0}](command:{4}). To connect via a different machine, use the generated [{1}]({2}) link or use the [{6}]({7}) extension in the desktop or web. You can [configure](command:{3}) or [turn off](command:{5}) this access via the !!APP_NAME!! Accounts menu.",
  								connectionInfo.tunnelName, connectionInfo.domain, linkToOpenForMarkdown, RemoteTunnelCommandIds.manage, RemoteTunnelCommandIds.configure, RemoteTunnelCommandIds.turnOff, remoteExtension.friendlyName, 'https://code.visualstudio.com/docs/remote/tunnels'
 diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
-index d6a1234..0ed32be 100644
+index 2538528..acd9714 100644
 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
 +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts
-@@ -3199,3 +3199,3 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
+@@ -3200,3 +3200,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.'));
@@ -907,59 +906,59 @@ index 6a5728c..2c561bd 100644
 +							message: nls.localize('TaskSystem.noProcess', 'The launched task doesn\'t exist anymore. If the task spawned background processes exiting !!APP_NAME!! might result in orphaned processes. To avoid this start the last background process with a wait flag.'),
  							primaryButton: nls.localize({ key: 'TaskSystem.exitAnyways', comment: ['&& denotes a mnemonic'] }, "&&Exit Anyways"),
 diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts
-index 7e22be4..472fa8f 100644
+index 42ff0ac..7276ab8 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 {
+@@ -213,3 +213,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/terminalConfiguration.ts b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
-index 2780278..3b91442 100644
+index 28aa98c..b0da694 100644
 --- a/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
 +++ b/src/vs/workbench/contrib/terminal/common/terminalConfiguration.ts
-@@ -313,3 +313,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -314,3 +314,3 @@ const terminalConfiguration: IConfigurationNode = {
  		[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',
-@@ -327,3 +327,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -328,3 +328,3 @@ const terminalConfiguration: IConfigurationNode = {
  			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."),
-@@ -415,3 +415,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -416,3 +416,3 @@ const terminalConfiguration: IConfigurationNode = {
  				'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'),
-@@ -427,3 +427,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -428,3 +428,3 @@ const terminalConfiguration: IConfigurationNode = {
  		[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',
-@@ -438,3 +438,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -439,3 +439,3 @@ const terminalConfiguration: IConfigurationNode = {
  			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',
-@@ -447,3 +447,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -448,3 +448,3 @@ const terminalConfiguration: IConfigurationNode = {
  			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',
-@@ -456,3 +456,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -457,3 +457,3 @@ const terminalConfiguration: IConfigurationNode = {
  			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',
-@@ -485,3 +485,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -486,3 +486,3 @@ const terminalConfiguration: IConfigurationNode = {
  		[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',
-@@ -592,3 +592,3 @@ const terminalConfiguration: IConfigurationNode = {
+@@ -593,3 +593,3 @@ const terminalConfiguration: IConfigurationNode = {
  			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#`'),
@@ -974,17 +973,17 @@ index 4979520..49d0cbd 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 !!APP_NAME!! if new don't apply.", '`"Terminate batch job (Y/N)": "Y\\r"`', '`"\\r"`'),
  		type: 'object',
 diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts
-index fd3452f..a2c0b45 100644
+index 3def92a..fa835bf 100644
 --- a/src/vs/workbench/contrib/update/browser/update.ts
 +++ b/src/vs/workbench/contrib/update/browser/update.ts
-@@ -575,4 +575,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor
+@@ -577,4 +577,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor
  							detail: newQuality === 'insider' ?
 -								nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of VS Code.") :
 -								nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of VS Code."),
 +								nls.localize('relaunchDetailInsiders', "Press the reload button to switch to the Insiders version of !!APP_NAME!!.") :
 +								nls.localize('relaunchDetailStable', "Press the reload button to switch to the Stable version of !!APP_NAME!!."),
  							primaryButton: nls.localize({ key: 'reload', comment: ['&& denotes a mnemonic'] }, "&&Reload")
-@@ -611,3 +611,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor
+@@ -613,3 +613,3 @@ export class SwitchProductQualityContribution extends Disposable implements IWor
  						message: nls.localize('selectSyncService.message', "Choose the settings sync service to use after changing the version"),
 -						detail: nls.localize('selectSyncService.detail', "The Insiders version of VS Code will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."),
 +						detail: nls.localize('selectSyncService.detail', "The Insiders version of !!APP_NAME!! will synchronize your settings, keybindings, extensions, snippets and UI State using separate insiders settings sync service by default."),
@@ -1004,7 +1003,7 @@ index d508a0d..35d7df1 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 e5b5899..706f261 100644
+index a57f9c1..cc198f8 100644
 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
 +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts
 @@ -51,3 +51,3 @@ registerAction2(class extends Action2 {
@@ -1012,7 +1011,7 @@ index e5b5899..706f261 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!!.')
  			}
-@@ -338,3 +338,3 @@ configurationRegistry.registerConfiguration({
+@@ -341,3 +341,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."),
@@ -1027,7 +1026,7 @@ index 3f1c098..3b2a175 100644
 +											description: localize('walkthroughs.steps.completionEvents.onCommand', 'Check off step when a given command is executed anywhere in !!APP_NAME!!.'),
  											body: 'onCommand:${1:commandId}'
 diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.ts b/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.ts
-index 5b01dd4..6de326c 100644
+index c7074a5..4fd9ae7 100644
 --- a/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.ts
 +++ b/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.ts
 @@ -14,3 +14,2 @@ import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../platform/accessi
@@ -1038,8 +1037,8 @@ index 5b01dd4..6de326c 100644
  
 -const CopilotStepTitle = localize('gettingStarted.copilotSetup.title', "Use AI features with Copilot for free");
 -const CopilotDescription = localize({ key: 'gettingStarted.copilotSetup.description', comment: ['{Locked="["}', '{Locked="]({0})"}'] }, "You can use [Copilot]({0}) to generate code across multiple files, fix errors, ask questions about your code and much more using natural language.", product.defaultChatAgent?.documentationUrl ?? '');
--const CopilotSignedOutButton = Button(localize('setupCopilotButton.signIn', "Set Up Copilot for Free"), `command:workbench.action.chat.triggerSetup`);
--const CopilotSignedInButton = Button(localize('setupCopilotButton.setup', "Set Up Copilot for Free"), `command:workbench.action.chat.triggerSetup`);
+-const CopilotSignedOutButton = Button(localize('setupCopilotButton.signIn', "Set up Copilot"), `command:workbench.action.chat.triggerSetup`);
+-const CopilotSignedInButton = Button(localize('setupCopilotButton.setup', "Set up Copilot"), `command:workbench.action.chat.triggerSetup`);
 -const CopilotCompleteButton = Button(localize('setupCopilotButton.chatWithCopilot', "Chat with Copilot"), 'command:workbench.action.chat.open');
 -
 -function createCopilotSetupStep(id: string, button: string, when: string, includeTerms: boolean): BuiltinGettingStartedStep {
@@ -1216,26 +1215,26 @@ index c512b64..8034183 100644
 +				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-sandbox/desktop.contribution.ts b/src/vs/workbench/electron-sandbox/desktop.contribution.ts
-index c420ccf..206e5d6 100644
+index d57c6d6..6d846f7 100644
 --- a/src/vs/workbench/electron-sandbox/desktop.contribution.ts
 +++ b/src/vs/workbench/electron-sandbox/desktop.contribution.ts
-@@ -351,3 +351,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-s
+@@ -361,3 +361,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri
  		allowTrailingCommas: true,
 -		description: 'VSCode static command line definition file',
 +		description: '!!APP_NAME!! static command line definition file',
  		type: 'object',
-@@ -396,3 +396,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-s
+@@ -406,3 +406,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri
  				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.")
  			},
-@@ -400,3 +400,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-s
+@@ -410,3 +410,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri
  				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 bcf58d2..e508bad 100644
+index 798de91..3727e24 100644
 --- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
 +++ b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts
 @@ -1044,3 +1044,3 @@ export class ExtensionManagementService extends Disposable implements IWorkbench
@@ -1244,7 +1243,7 @@ index bcf58d2..e508bad 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 e4c9ad4..d89b42a 100644
+index 859b976..dc0a455 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 = {
@@ -1286,17 +1285,17 @@ index e4c9ad4..d89b42a 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',
-@@ -407,3 +407,3 @@ export const schema: IJSONSchema = {
+@@ -412,3 +412,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: '*'
-@@ -579,3 +579,3 @@ export const schema: IJSONSchema = {
+@@ -584,3 +584,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'
-@@ -583,3 +583,3 @@ export const schema: IJSONSchema = {
+@@ -588,3 +588,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.'),

+ 8 - 8
patches/insider/add-remote-url.patch

@@ -1,18 +1,18 @@
 diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index 7d58861..cefb8ad 100644
+index 2606eed..3e60e80 100644
 --- a/build/gulpfile.reh.js
 +++ b/build/gulpfile.reh.js
-@@ -306,3 +306,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
+@@ -321,3 +321,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
  		const productJsonStream = gulp.src(['product.json'], { base: '.' })
--			.pipe(json({ commit, date: readISODate('out-build'), version, release }))
-+			.pipe(json({ commit, date: readISODate('out-build'), version, release, serverDownloadUrlTemplate: 'https://github.com/!!GH_REPO_PATH!!-insiders/releases/download/${version}.${release}-insider/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}.${release}-insider.tar.gz' }))
+-			.pipe(json({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!GH_REPO_PATH!!/releases/download/${version/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}.tar.gz' }))
++			.pipe(json({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!GH_REPO_PATH!!-insiders/releases/download/${version}-insider/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}-insider.tar.gz' }))
  			.pipe(es.through(function (file) {
 diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 4af4067..1bac2cc 100644
+index b975c64..9aa7bb0 100644
 --- a/build/gulpfile.vscode.js
 +++ b/build/gulpfile.vscode.js
-@@ -261,3 +261,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+@@ -288,3 +288,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
  		const productJsonStream = gulp.src(['product.json'], { base: '.' })
--			.pipe(json({ commit, date: readISODate('out-build'), checksums, version, release }))
-+			.pipe(json({ commit, date: readISODate('out-build'), checksums, version, release, serverDownloadUrlTemplate: 'https://github.com/!!GH_REPO_PATH!!-insiders/releases/download/${version}.${release}-insider/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}.${release}-insider.tar.gz' }))
+-			.pipe(json({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!GH_REPO_PATH!!/releases/download/${version}/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}.tar.gz' }))
++			.pipe(json({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!GH_REPO_PATH!!-insiders/releases/download/${version}-insider/!!APP_NAME_LC!!-reh-${os}-${arch}-${version}-insider.tar.gz' }))
  			.pipe(es.through(function (file) {

+ 6 - 6
patches/insider/system-extensions.patch

@@ -1,13 +1,13 @@
 diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
-index 81bf4b2..5a88688 100644
+index 150908a..0759a8d 100644
 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
 +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts
-@@ -233,7 +233,7 @@ export class Extension implements IExtension {
- 				return false;
- 			}
+@@ -104,2 +104,3 @@ export class Extension implements IExtension {
+ 		@IFileService private readonly fileService: IFileService,
++		// @ts-ignore
+ 		@IProductService private readonly productService: IProductService
+@@ -325,3 +326,3 @@ export class Extension implements IExtension {
  			// Do not allow updating system extensions in stable
 -			if (this.type === ExtensionType.System && this.productService.quality === 'stable') {
 +			if (this.type === ExtensionType.System) {
  				return false;
- 			}
- 			if (!this.local.preRelease && this.gallery.properties.isPreReleaseVersion) {

+ 12 - 12
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 d836fb7..fbe67b0 100755
+index 9410564..c1736f0 100755
 --- a/build/azure-pipelines/linux/setup-env.sh
 +++ b/build/azure-pipelines/linux/setup-env.sh
 @@ -2,3 +2,3 @@
@@ -8,10 +8,10 @@ index d836fb7..fbe67b0 100755
 +set -ex
  
 diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index 53ef6f3..d0770d6 100644
+index c1d64c0..5ac9f95 100644
 --- a/build/gulpfile.reh.js
 +++ b/build/gulpfile.reh.js
-@@ -229,9 +229,23 @@ function nodejs(platform, arch) {
+@@ -232,9 +232,23 @@ function nodejs(platform, arch) {
  		case 'linux':
 -			return (product.nodejsRepository !== 'https://nodejs.org' ?
 -				fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) :
@@ -43,10 +43,10 @@ index 53ef6f3..d0770d6 100644
 +			}
  		case 'alpine':
 diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index da753e9..95f2cf0 100644
+index 7046ee0..67cb99a 100644
 --- a/build/gulpfile.vscode.js
 +++ b/build/gulpfile.vscode.js
-@@ -385,2 +385,12 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+@@ -382,2 +382,12 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
  
 +		const electronOverride = {};
 +		if (process.env.VSCODE_ELECTRON_REPOSITORY) {
@@ -59,13 +59,13 @@ index da753e9..95f2cf0 100644
 +		}
 +
  		let result = all
-@@ -389,3 +399,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
+@@ -386,3 +396,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
  			.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(filter(['**', '!LICENSE', '!version'], { dot: true }));
 diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
-index 3bb58fb..306d91e 100644
+index 8ac57b9..8580d79 100644
 --- a/build/linux/debian/dep-lists.js
 +++ b/build/linux/debian/dep-lists.js
 @@ -138,3 +138,3 @@ exports.referenceGeneratedDepsByArch = {
@@ -74,7 +74,7 @@ index 3bb58fb..306d91e 100644
 +    ],
  };
 diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
-index e3d78d1..9f29943 100644
+index df119e8..91b0ebc 100644
 --- a/build/linux/debian/dep-lists.ts
 +++ b/build/linux/debian/dep-lists.ts
 @@ -138,3 +138,3 @@ export const referenceGeneratedDepsByArch = {
@@ -83,23 +83,23 @@ index e3d78d1..9f29943 100644
 +	],
  };
 diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
-index 354c67a..2cd8f2d 100644
+index 16d8d01..532e3d5 100644
 --- a/build/linux/debian/install-sysroot.js
 +++ b/build/linux/debian/install-sysroot.js
-@@ -71,3 +71,5 @@ async function fetchUrl(options, retries = 10, retryDelay = 1000) {
+@@ -74,3 +74,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,
-@@ -80,3 +82,3 @@ async function fetchUrl(options, retries = 10, retryDelay = 1000) {
+@@ -83,3 +85,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 8ea43a5..d8de38e 100644
+index aa10e39..6543b49 100644
 --- a/build/linux/debian/install-sysroot.ts
 +++ b/build/linux/debian/install-sysroot.ts
 @@ -83,3 +83,5 @@ async function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000)

+ 32 - 37
patches/linux/arch-1-ppc64le.patch

@@ -1,8 +1,8 @@
 diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh
-index fbe67b0..5b2f5d8 100755
+index c1736f0..2da5cf9 100755
 --- a/build/azure-pipelines/linux/setup-env.sh
 +++ b/build/azure-pipelines/linux/setup-env.sh
-@@ -74,2 +74,14 @@ elif [ "$npm_config_arch" == "arm" ]; then
+@@ -68,2 +68,14 @@ elif [ "$npm_config_arch" == "arm" ]; then
    export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/lib/arm-linux-gnueabihf"
 +elif [ "$npm_config_arch" == "ppc64" ]; then
 +	# Set compiler toolchain for client native modules
@@ -27,14 +27,14 @@ index c655ce7..c7150f2 100755
 +  TRIPLE="powerpc64le-linux-gnu"
  fi
 diff --git a/build/checksums/vscode-sysroot.txt b/build/checksums/vscode-sysroot.txt
-index 0b5f38c..9f3b02b 100644
+index 67182b0..db63d02 100644
 --- a/build/checksums/vscode-sysroot.txt
 +++ b/build/checksums/vscode-sysroot.txt
-@@ -6 +6,2 @@
+@@ -3 +3,2 @@
  dbb927408393041664a020661f2641c9785741be3d29b050b9dac58980967784  x86_64-linux-gnu-glibc-2.28.tar.gz
 +fa8176d27be18bb0eeb7f55b0fa22255050b430ef68c29136599f02976eb0b1b  powerpc64le-linux-gnu-glibc-2.28.tar.gz
 diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index d0770d6..8c83c13 100644
+index 5ac9f95..cd04bdf 100644
 --- a/build/gulpfile.reh.js
 +++ b/build/gulpfile.reh.js
 @@ -50,2 +50,3 @@ const BUILD_TARGETS = [
@@ -50,15 +50,15 @@ index cbcdddb..274d889 100644
 +	{ platform: 'linux', arch: 'ppc64le' },
  ];
 diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index 95f2cf0..7395ba4 100644
+index 67cb99a..3ed2182 100644
 --- a/build/gulpfile.vscode.js
 +++ b/build/gulpfile.vscode.js
-@@ -494,2 +494,3 @@ const BUILD_TARGETS = [
+@@ -491,2 +491,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 fb0e5a4..264cec1 100644
+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);
@@ -66,27 +66,27 @@ index fb0e5a4..264cec1 100644
 -	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64' }[arch];
 +	return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el' }[arch];
  }
-@@ -145,3 +145,3 @@ function getRpmBuildPath(rpmArch) {
+@@ -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];
  }
-@@ -307,2 +307,3 @@ const BUILD_TARGETS = [
+@@ -304,2 +304,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 57934e6..b97d275 100644
+index 34276ce..fdae163 100644
 --- a/build/linux/debian/calculate-deps.js
 +++ b/build/linux/debian/calculate-deps.js
-@@ -51,2 +51,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot)
+@@ -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/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts
-index c44e241..5a6e9b4 100644
+index addc386..423c415 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
@@ -99,7 +99,7 @@ index c44e241..5a6e9b4 100644
 +			break;
  	}
 diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js
-index 306d91e..64377e3 100644
+index 8580d79..a85352e 100644
 --- a/build/linux/debian/dep-lists.js
 +++ b/build/linux/debian/dep-lists.js
 @@ -139,2 +139,41 @@ exports.referenceGeneratedDepsByArch = {
@@ -145,7 +145,7 @@ index 306d91e..64377e3 100644
 +    ],
  };
 diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts
-index 9f29943..aa769ad 100644
+index 91b0ebc..0d0f11b 100644
 --- a/build/linux/debian/dep-lists.ts
 +++ b/build/linux/debian/dep-lists.ts
 @@ -139,2 +139,41 @@ export const referenceGeneratedDepsByArch = {
@@ -191,10 +191,10 @@ index 9f29943..aa769ad 100644
 +	],
  };
 diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
-index 2cd8f2d..aef739c 100644
+index 532e3d5..ab6b826 100644
 --- a/build/linux/debian/install-sysroot.js
 +++ b/build/linux/debian/install-sysroot.js
-@@ -137,2 +137,6 @@ async function getVSCodeSysroot(arch) {
+@@ -140,2 +140,6 @@ async function getVSCodeSysroot(arch) {
              break;
 +		case 'ppc64le':
 +            expectedName = `powerpc64le-linux-gnu${prefix}.tar.gz`;
@@ -202,7 +202,7 @@ index 2cd8f2d..aef739c 100644
 +            break;
      }
 diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
-index d8de38e..53b4866 100644
+index 6543b49..c23db0f 100644
 --- a/build/linux/debian/install-sysroot.ts
 +++ b/build/linux/debian/install-sysroot.ts
 @@ -154,2 +154,6 @@ export async function getVSCodeSysroot(arch: DebianArchString): Promise<string>
@@ -235,10 +235,10 @@ index e97485e..43f2434 100644
 +	return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s);
  }
 diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js
-index 04abee1..779dd69 100644
+index f45b6f3..4f2ae95 100644
 --- a/build/linux/rpm/dep-lists.js
 +++ b/build/linux/rpm/dep-lists.js
-@@ -310,2 +310,102 @@ exports.referenceGeneratedDepsByArch = {
+@@ -314,2 +314,102 @@ exports.referenceGeneratedDepsByArch = {
          'xdg-utils'
 +    ],
 +    "ppc64le": [
@@ -342,10 +342,10 @@ index 04abee1..779dd69 100644
 +        'xdg-utils'
      ]
 diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts
-index 8761e40..1885210 100644
+index d277ca7..c6d7761 100644
 --- a/build/linux/rpm/dep-lists.ts
 +++ b/build/linux/rpm/dep-lists.ts
-@@ -309,2 +309,102 @@ export const referenceGeneratedDepsByArch = {
+@@ -313,2 +313,102 @@ export const referenceGeneratedDepsByArch = {
  		'xdg-utils'
 +	],
 +	"ppc64le": [
@@ -504,50 +504,45 @@ index 9033914..bcab676 100644
 +			Platform::LinuxPPC64LELegacy => "LinuxPPC64LELegacy",
  			Platform::DarwinX64 => "DarwinX64",
 diff --git a/cli/src/util/prereqs.rs b/cli/src/util/prereqs.rs
-index e0fba27..4827a47 100644
+index 44c8597..d89b384 100644
 --- a/cli/src/util/prereqs.rs
 +++ b/cli/src/util/prereqs.rs
-@@ -86,2 +86,4 @@ impl PreReqChecker {
+@@ -82,2 +82,4 @@ impl PreReqChecker {
  					Platform::LinuxARM32
 +				} else if cfg!(target_arch = "ppc64le") {
 +					Platform::LinuxPPC64LE
  				} else {
-@@ -95,2 +97,4 @@ impl PreReqChecker {
- 					Platform::LinuxARM32Legacy
-+				} else if cfg!(target_arch = "ppc64le") {
-+					Platform::LinuxPPC64LELegacy
- 				} else {
 diff --git a/resources/server/bin/helpers/check-requirements-linux.sh b/resources/server/bin/helpers/check-requirements-linux.sh
-index 8ef07a2..00dd3e2 100644
+index 8ea4c0b..b9d3b47 100644
 --- a/resources/server/bin/helpers/check-requirements-linux.sh
 +++ b/resources/server/bin/helpers/check-requirements-linux.sh
-@@ -56,2 +56,3 @@ case $ARCH in
+@@ -55,2 +55,3 @@ case $ARCH in
  		;;
 +    ppc64el) LDCONFIG_ARCH="64bit";;
  esac
 diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-index ea7b30d..004df84 100644
+index 72de79b..3614b7f 100644
 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts
 +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts
-@@ -41,2 +41,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
+@@ -44,2 +44,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) {
  		case TargetPlatform.LINUX_ARMHF: return 'Linux ARM';
 +		case TargetPlatform.LINUX_PPC64LE: return 'Linux PowerPC64';
  
-@@ -64,2 +65,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
+@@ -67,2 +68,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform {
  		case TargetPlatform.LINUX_ARMHF: return TargetPlatform.LINUX_ARMHF;
 +		case TargetPlatform.LINUX_PPC64LE: return TargetPlatform.LINUX_PPC64LE;
  
-@@ -99,2 +101,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string |
+@@ -102,2 +104,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 5973d4d..a7d6298 100644
+index b38ba82..2faea35 100644
 --- a/src/vs/platform/extensions/common/extensions.ts
 +++ b/src/vs/platform/extensions/common/extensions.ts
-@@ -294,2 +294,3 @@ export const enum TargetPlatform {
+@@ -318,2 +318,3 @@ export const enum TargetPlatform {
  	LINUX_ARMHF = 'linux-armhf',
 +	LINUX_PPC64LE = 'linux-ppc64le',
  

+ 3 - 23
patches/linux/fix-build.patch

@@ -1,39 +1,19 @@
-diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
-index fb0e5a4..412a6cc 100644
---- a/build/gulpfile.vscode.linux.js
-+++ b/build/gulpfile.vscode.linux.js
-@@ -197,2 +197,3 @@ function prepareRpmPackage(arch) {
- 		const spec = code.pipe(es.through(
-+			null,
- 			async function () {
-@@ -312,4 +313,3 @@ BUILD_TARGETS.forEach(({ arch }) => {
- 	const prepareDebTask = task.define(`vscode-linux-${arch}-prepare-deb`, task.series(rimraf(`.build/linux/deb/${debArch}`), prepareDebPackage(arch)));
--	gulp.task(prepareDebTask);
--	const buildDebTask = task.define(`vscode-linux-${arch}-build-deb`, buildDebPackage(arch));
-+	const buildDebTask = task.define(`vscode-linux-${arch}-build-deb`, task.series(prepareDebTask, buildDebPackage(arch)));
- 	gulp.task(buildDebTask);
-@@ -318,4 +318,3 @@ BUILD_TARGETS.forEach(({ arch }) => {
- 	const prepareRpmTask = task.define(`vscode-linux-${arch}-prepare-rpm`, task.series(rimraf(`.build/linux/rpm/${rpmArch}`), prepareRpmPackage(arch)));
--	gulp.task(prepareRpmTask);
--	const buildRpmTask = task.define(`vscode-linux-${arch}-build-rpm`, buildRpmPackage(arch));
-+	const buildRpmTask = task.define(`vscode-linux-${arch}-build-rpm`, task.series(prepareRpmTask, buildRpmPackage(arch)));
- 	gulp.task(buildRpmTask);
 diff --git a/build/linux/dependencies-generator.js b/build/linux/dependencies-generator.js
-index 39e2b4e..aae72ae 100644
+index 448ab38..ffc71f9 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/132.0.6834.196:chrome/installer/linux/BUILD.gn;l=64-80
+ // Based on https://source.chromium.org/chromium/chromium/src/+/refs/tags/132.0.6834.210: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 83d2ec7..6c14583 100644
+index 6c1f7b7..31cc2a8 100644
 --- a/build/linux/dependencies-generator.ts
 +++ b/build/linux/dependencies-generator.ts
 @@ -25,3 +25,3 @@ import product = require('../../product.json');

+ 4 - 6
patches/merge-user-product.patch

@@ -1,5 +1,5 @@
 diff --git a/src/main.ts b/src/main.ts
-index c132c9b..9684685 100644
+index fdc424e..46b014b 100644
 --- a/src/main.ts
 +++ b/src/main.ts
 @@ -8,2 +8,3 @@ import * as fs from 'original-fs';
@@ -30,18 +30,16 @@ index c132c9b..9684685 100644
 +	resolveUserProduct();
  
 diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts
-index 1a2a619..3837df0 100644
+index d27cdce..d758c5e 100644
 --- a/src/vs/platform/product/common/product.ts
 +++ b/src/vs/platform/product/common/product.ts
-@@ -29,2 +29,38 @@ else if (globalThis._VSCODE_PRODUCT_JSON && globalThis._VSCODE_PACKAGE_JSON) {
+@@ -31,2 +31,36 @@ else if (globalThis._VSCODE_PRODUCT_JSON && globalThis._VSCODE_PACKAGE_JSON) {
  
-+	const { serviceUrl, publisherUrl, itemUrl, controlUrl, extensionUrlTemplate, resourceUrlTemplate } = product.extensionsGallery || {};
++	const { serviceUrl, controlUrl, extensionUrlTemplate, resourceUrlTemplate } = product.extensionsGallery || {};
 +
 +	Object.assign(product, {
 +		extensionsGallery: {
 +			serviceUrl: env['VSCODE_GALLERY_SERVICE_URL'] || serviceUrl,
-+			publisherUrl: env['VSCODE_GALLERY_PUBLISHER_URL'] || publisherUrl,
-+			itemUrl: env['VSCODE_GALLERY_ITEM_URL'] || itemUrl,
 +			controlUrl: env['VSCODE_GALLERY_CONTROL_URL'] || controlUrl,
 +			extensionUrlTemplate: env['VSCODE_GALLERY_EXTENSION_URL_TEMPLATE'] || extensionUrlTemplate,
 +			resourceUrlTemplate: env['VSCODE_GALLERY_RESOURCE_URL_TEMPLATE'] || resourceUrlTemplate,

+ 25 - 143
patches/optional-tree-sitter.patch

@@ -1,161 +1,43 @@
 diff --git a/build/package-lock.json b/build/package-lock.json
-index 1e373f2..3ea31d0 100644
+index 445e842..1dea5d1 100644
 --- a/build/package-lock.json
 +++ b/build/package-lock.json
-@@ -53,3 +53,2 @@
+@@ -59,3 +59,2 @@
          "through2": "^4.0.2",
--        "tree-sitter": "^0.20.5",
+-        "tree-sitter": "^0.22.4",
          "vscode-universal-bundler": "^0.1.3",
-@@ -59,2 +58,3 @@
+@@ -65,2 +64,3 @@
        "optionalDependencies": {
-+        "tree-sitter": "^0.20.5",
-         "tree-sitter-typescript": "^0.20.5",
-@@ -1381,3 +1381,3 @@
-       "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
--      "devOptional": true,
-+      "optional": true,
-       "dependencies": {
-@@ -1433,3 +1433,2 @@
-       "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
--      "devOptional": true,
-       "funding": [
-@@ -1448,2 +1447,3 @@
-       ],
-+      "optional": true,
-       "dependencies": {
-@@ -1622,3 +1622,3 @@
-       "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -1830,3 +1830,3 @@
-       "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
--      "devOptional": true,
-+      "optional": true,
-       "engines": {
-@@ -1896,3 +1896,3 @@
-       "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
--      "devOptional": true,
-+      "optional": true,
-       "engines": {
-@@ -2150,3 +2150,3 @@
-       "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
--      "devOptional": true,
-+      "optional": true,
-       "engines": {
-@@ -2281,3 +2281,3 @@
-       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -2363,3 +2363,3 @@
-       "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -2676,3 +2676,2 @@
-       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
--      "devOptional": true,
-       "funding": [
-@@ -2690,3 +2689,4 @@
-         }
--      ]
-+      ],
-+      "optional": true
-     },
-@@ -2713,3 +2713,3 @@
-       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -3165,3 +3165,3 @@
-       "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -3183,3 +3183,3 @@
-       "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -3189,3 +3189,3 @@
-       "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
--      "devOptional": true
-+      "optional": true
-     },
-@@ -3195,3 +3195,3 @@
-       "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==",
--      "devOptional": true,
-+      "optional": true,
-       "dependencies": {
-@@ -3207,3 +3207,3 @@
-       "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
--      "devOptional": true,
-+      "optional": true,
-       "dependencies": {
-@@ -3475,3 +3475,3 @@
-       "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
++        "tree-sitter": "^0.22.4",
+         "tree-sitter-typescript": "^0.23.2",
+@@ -3416,4 +3416,4 @@
+       "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
 -      "devOptional": true,
+       "license": "MIT",
 +      "optional": true,
-       "dependencies": {
-@@ -3559,3 +3559,3 @@
-       "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
--      "devOptional": true,
-+      "optional": true,
-       "dependencies": {
-@@ -3772,3 +3772,2 @@
-       "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
--      "devOptional": true,
-       "funding": [
-@@ -3786,3 +3785,4 @@
-         }
--      ]
-+      ],
-+      "optional": true
-     },
-@@ -3792,3 +3792,2 @@
-       "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
--      "devOptional": true,
-       "funding": [
-@@ -3807,2 +3806,3 @@
-       ],
-+      "optional": true,
-       "dependencies": {
-@@ -3901,3 +3901,3 @@
-       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
--      "devOptional": true,
-+      "optional": true,
-       "engines": {
-@@ -3934,3 +3934,3 @@
-       "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
--      "devOptional": true,
-+      "optional": true,
-       "dependencies": {
-@@ -3946,3 +3946,3 @@
-       "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
--      "devOptional": true,
-+      "optional": true,
-       "dependencies": {
-@@ -4029,4 +4029,4 @@
-       "integrity": "sha512-GxJodajVpfgb3UREzzIbtA1hyRnTxVbWVXrbC6sk4xTMH5ERMBJk9HJNq4c8jOJeUaIOmLcwg+t6mez/PDvGqg==",
--      "devOptional": true,
+       "bin": {
+@@ -4243,5 +4243,5 @@
+       "integrity": "sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg==",
+-      "dev": true,
        "hasInstallScript": true,
+       "license": "MIT",
 +      "optional": true,
        "dependencies": {
-@@ -4066,3 +4066,3 @@
-       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
--      "devOptional": true,
+@@ -4316,4 +4316,4 @@
+       "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==",
+-      "dev": true,
+       "license": "MIT",
 +      "optional": true,
-       "dependencies": {
+       "engines": {
 diff --git a/build/package.json b/build/package.json
-index aa94a21..9644be4 100644
+index 73d4f42..0eaf964 100644
 --- a/build/package.json
 +++ b/build/package.json
-@@ -47,3 +47,2 @@
+@@ -53,3 +53,2 @@
      "through2": "^4.0.2",
--    "tree-sitter": "^0.20.5",
+-    "tree-sitter": "^0.22.4",
      "vscode-universal-bundler": "^0.1.3",
-@@ -59,2 +58,3 @@
+@@ -65,2 +64,3 @@
    "optionalDependencies": {
-+    "tree-sitter": "^0.20.5",
-     "tree-sitter-typescript": "^0.20.5",
++    "tree-sitter": "^0.22.4",
+     "tree-sitter-typescript": "^0.23.2",

+ 30 - 30
patches/windows/policies.patch → patches/policies.patch

@@ -1,8 +1,8 @@
 diff --git a/build/.moduleignore b/build/.moduleignore
-index 6b7f365..2211e6e 100644
+index 3e654cf..d9ee9f5 100644
 --- a/build/.moduleignore
 +++ b/build/.moduleignore
-@@ -125,9 +125,11 @@ vsda/**
+@@ -126,9 +126,11 @@ vsda/**
  
 -@vscode/policy-watcher/build/**
 -@vscode/policy-watcher/.husky/**
@@ -19,63 +19,63 @@ index 6b7f365..2211e6e 100644
 +@vscodium/policy-watcher/binding.gyp
 +@vscodium/policy-watcher/README.md
 +@vscodium/policy-watcher/index.d.ts
-+!@vscodium/policy-watcher/build/Release/vscode-policy-watcher.node
++!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node
  
 diff --git a/build/lib/policies.js b/build/lib/policies.js
-index b76d9ff..a84f490 100644
+index ac69762..db1fd3d 100644
 --- a/build/lib/policies.js
 +++ b/build/lib/policies.js
-@@ -64,3 +64,3 @@ class BasePolicy {
+@@ -81,3 +81,3 @@ class BasePolicy {
          return [
 -            `<policy name="${this.name}" class="Both" displayName="$(string.${this.name})" explainText="$(string.${this.name}_${this.description.nlsKey.replace(/\./g, '_')})" key="Software\\Policies\\Microsoft\\${regKey}" presentation="$(presentation.${this.name})">`,
 +            `<policy name="${this.name}" class="Both" displayName="$(string.${this.name})" explainText="$(string.${this.name}_${this.description.nlsKey.replace(/\./g, '_')})" key="Software\\Policies\\!!ORG_NAME!!\\${regKey}" presentation="$(presentation.${this.name})">`,
              `	<parentCategory ref="${this.category.name.nlsKey}" />`,
-@@ -376,3 +376,3 @@ function renderADMX(regKey, versions, categories, policies) {
+@@ -501,3 +501,3 @@ function renderADMX(regKey, versions, categories, policies) {
  	<policyNamespaces>
 -		<target prefix="${regKey}" namespace="Microsoft.Policies.${regKey}" />
 +		<target prefix="${regKey}" namespace="!!ORG_NAME!!.Policies.${regKey}" />
  	</policyNamespaces>
 diff --git a/build/lib/policies.ts b/build/lib/policies.ts
-index 2488920..8b268ce 100644
+index 34d20e9..8404cdf 100644
 --- a/build/lib/policies.ts
 +++ b/build/lib/policies.ts
-@@ -80,3 +80,3 @@ abstract class BasePolicy implements Policy {
+@@ -107,3 +107,3 @@ abstract class BasePolicy implements Policy {
  		return [
 -			`<policy name="${this.name}" class="Both" displayName="$(string.${this.name})" explainText="$(string.${this.name}_${this.description.nlsKey.replace(/\./g, '_')})" key="Software\\Policies\\Microsoft\\${regKey}" presentation="$(presentation.${this.name})">`,
 +			`<policy name="${this.name}" class="Both" displayName="$(string.${this.name})" explainText="$(string.${this.name}_${this.description.nlsKey.replace(/\./g, '_')})" key="Software\\Policies\\!!ORG_NAME!!\\${regKey}" presentation="$(presentation.${this.name})">`,
  			`	<parentCategory ref="${this.category.name.nlsKey}" />`,
-@@ -553,3 +553,3 @@ function renderADMX(regKey: string, versions: string[], categories: Category[],
+@@ -703,3 +703,3 @@ function renderADMX(regKey: string, versions: string[], categories: Category[],
  	<policyNamespaces>
 -		<target prefix="${regKey}" namespace="Microsoft.Policies.${regKey}" />
 +		<target prefix="${regKey}" namespace="!!ORG_NAME!!.Policies.${regKey}" />
  	</policyNamespaces>
 diff --git a/eslint.config.js b/eslint.config.js
-index 8e3d288..1fa7cc3 100644
+index 822da54..6236bf0 100644
 --- a/eslint.config.js
 +++ b/eslint.config.js
-@@ -793,3 +793,3 @@ export default tseslint.config(
+@@ -796,3 +796,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 d4bc1fb..195cbe1 100644
+index 8112caf..682b56a 100644
 --- a/package-lock.json
 +++ b/package-lock.json
-@@ -18,3 +18,2 @@
+@@ -19,3 +19,2 @@
          "@vscode/iconv-lite-umd": "0.7.0",
--        "@vscode/policy-watcher": "^1.1.10",
+-        "@vscode/policy-watcher": "^1.3.0",
          "@vscode/proxy-agent": "^0.32.0",
-@@ -29,2 +28,3 @@
+@@ -30,2 +29,3 @@
          "@vscode/windows-registry": "^1.1.0",
-+        "@vscodium/policy-watcher": "^1.1.10-2503041159",
-         "@xterm/addon-clipboard": "^0.2.0-beta.81",
-@@ -2831,22 +2831,2 @@
++        "@vscodium/policy-watcher": "^1.3.0-2503300035",
+         "@xterm/addon-clipboard": "^0.2.0-beta.82",
+@@ -2844,22 +2844,2 @@
      },
 -    "node_modules/@vscode/policy-watcher": {
--      "version": "1.1.10",
--      "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.1.10.tgz",
--      "integrity": "sha512-erRJiryjhP//MnRZo+j0LxjVSFa4eZMR9HeAGxIuxlZCQrnvrIG5nv/4qBxiMH0+uE4Z74YY/Ct0wus6l9U/xg==",
+-      "version": "1.3.0",
+-      "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.0.tgz",
+-      "integrity": "sha512-a8pPxlZlMJWOOj2NZ/2ceXgHdDU/NXo+8Pn/InV/sPBfbvTnf/MpMc4pscm9pdU4UIrTGR5+OduQW7mTK8DK7Q==",
 -      "hasInstallScript": true,
 -      "license": "MIT",
 -      "dependencies": {
@@ -93,12 +93,12 @@ index d4bc1fb..195cbe1 100644
 -      }
 -    },
      "node_modules/@vscode/proxy-agent": {
-@@ -3247,2 +3227,22 @@
+@@ -3260,2 +3240,22 @@
      },
 +    "node_modules/@vscodium/policy-watcher": {
-+      "version": "1.1.10-2503041159",
-+      "resolved": "https://registry.npmjs.org/@vscodium/policy-watcher/-/policy-watcher-1.1.10-2503041159.tgz",
-+      "integrity": "sha512-Jz8MKbNIB4nJPnr3l3xmyp1VvrkFhOlcjZDoUzQAoVuAfkovedhvPkoZkiB21ygGb4ZxU0ApJXHfzanee0ltWA==",
++      "version": "1.3.0-2503300035",
++      "resolved": "https://registry.npmjs.org/@vscodium/policy-watcher/-/policy-watcher-1.3.0-2503300035.tgz",
++      "integrity": "sha512-Vf83Z2uKkq+SL2Kr+DHlE7Ezb+HBnspn5iMazUele1Mj/7WQv0Zq/fTQ3LFKKVC6hV5+G95BXwOc7oSAU0gWUw==",
 +      "hasInstallScript": true,
 +      "license": "MIT",
 +      "dependencies": {
@@ -117,13 +117,13 @@ index d4bc1fb..195cbe1 100644
 +    },
      "node_modules/@webassemblyjs/ast": {
 diff --git a/package.json b/package.json
-index 925462f..c4b6304 100644
+index add0c27..2e5b5f1 100644
 --- a/package.json
 +++ b/package.json
-@@ -76,3 +76,3 @@
+@@ -78,3 +78,3 @@
      "@vscode/iconv-lite-umd": "0.7.0",
--    "@vscode/policy-watcher": "^1.1.10",
-+    "@vscodium/policy-watcher": "^1.1.10-2503041159",
+-    "@vscode/policy-watcher": "^1.3.0",
++    "@vscodium/policy-watcher": "^1.3.0-2503300035",
      "@vscode/proxy-agent": "^0.32.0",
 diff --git a/src/vs/base/test/node/uri.perf.data.txt b/src/vs/base/test/node/uri.perf.data.txt
 index ee0a24b..881ce36 100644
@@ -238,7 +238,7 @@ index e0b99f3..f3af586 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 67f7892..5b8859c 100644
+index 67f7892..840d655 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';

+ 12 - 12
patches/report-issue.patch

@@ -1,5 +1,5 @@
 diff --git a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts
-index 447f4c9..4ad0e18 100644
+index 447f4c9..1118f18 100644
 --- a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts
 +++ b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts
 @@ -153,3 +153,3 @@ class ReportExtensionSlowAction extends Action {
@@ -8,15 +8,15 @@ index 447f4c9..4ad0e18 100644
 +- !!APP_NAME!! version: \`${this._productService.version}\`\n\n${message}`);
  
 diff --git a/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.ts b/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.ts
-index 26d796b..1d1ff79 100644
+index c5074ca..5fb3fa4 100644
 --- a/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.ts
 +++ b/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.ts
-@@ -630,3 +630,3 @@ export class BaseIssueReporterService extends Disposable {
+@@ -663,3 +663,3 @@ export class BaseIssueReporterService extends Disposable {
  		if (title) {
 -			this.searchDuplicates(title, issueDescription);
 +			this.searchGitHub('!!GH_REPO_PATH!!', title);
  		} else {
-@@ -722,33 +722,2 @@ export class BaseIssueReporterService extends Disposable {
+@@ -755,33 +755,2 @@ export class BaseIssueReporterService extends Disposable {
  
 -	@debounce(300)
 -	private searchDuplicates(title: string, body?: string): void {
@@ -50,20 +50,20 @@ index 26d796b..1d1ff79 100644
 -	}
 -
  	private displaySearchResults(results: SearchResult[]) {
-@@ -844,4 +813,4 @@ export class BaseIssueReporterService extends Disposable {
+@@ -877,4 +846,4 @@ export class BaseIssueReporterService extends Disposable {
  		sourceSelect.append(this.makeOption('', localize('selectSource', "Select source"), true));
 -		sourceSelect.append(this.makeOption(IssueSource.VSCode, localize('vscode', "Visual Studio Code"), false));
 -		sourceSelect.append(this.makeOption(IssueSource.Extension, localize('extension', "A VS Code extension"), false));
 +		sourceSelect.append(this.makeOption(IssueSource.VSCode, localize('vscode', "!!APP_NAME!!"), false));
 +		sourceSelect.append(this.makeOption(IssueSource.Extension, localize('extension', "A !!APP_NAME!! extension"), false));
  		if (this.product.reportMarketplaceIssueUrl) {
-@@ -905,3 +874,3 @@ export class BaseIssueReporterService extends Disposable {
+@@ -965,3 +934,3 @@ export class BaseIssueReporterService extends Disposable {
  			hide(descriptionTextArea);
 -			reset(descriptionTitle, localize('handlesIssuesElsewhere', "This extension handles issues outside of VS Code"));
 +			reset(descriptionTitle, localize('handlesIssuesElsewhere', "This extension handles issues outside of !!APP_NAME!!"));
  			reset(descriptionSubtitle, localize('elsewhereDescription', "The '{0}' extension prefers to use an external issue reporter. To be taken to that issue reporting experience, click the button below.", selectedExtension.displayName));
 diff --git a/src/vs/workbench/contrib/issue/browser/issueReporterModel.ts b/src/vs/workbench/contrib/issue/browser/issueReporterModel.ts
-index 0bbd8ac..4cffa1a 100644
+index 0bbd8ac..3f35022 100644
 --- a/src/vs/workbench/contrib/issue/browser/issueReporterModel.ts
 +++ b/src/vs/workbench/contrib/issue/browser/issueReporterModel.ts
 @@ -92,3 +92,3 @@ ${this._data.issueDescription}
@@ -72,16 +72,16 @@ index 0bbd8ac..4cffa1a 100644
 +!!APP_NAME!! version: ${this._data.versionInfo && this._data.versionInfo.vscodeVersion}
  OS version: ${this._data.versionInfo && this._data.versionInfo.os}
 diff --git a/src/vs/workbench/contrib/issue/browser/issueReporterPage.ts b/src/vs/workbench/contrib/issue/browser/issueReporterPage.ts
-index 5cbc709..5d6b1e2 100644
+index e739f44..573fa7c 100644
 --- a/src/vs/workbench/contrib/issue/browser/issueReporterPage.ts
 +++ b/src/vs/workbench/contrib/issue/browser/issueReporterPage.ts
-@@ -18,3 +18,3 @@ const reviewGuidanceLabel = localize( // intentionally not escaped because of it
+@@ -19,3 +19,3 @@ const reviewGuidanceLabel = localize( // intentionally not escaped because of it
  		comment: [
 -			'{Locked="<a href=\"https://github.com/microsoft/vscode/wiki/Submitting-Bugs-and-Suggestions\" target=\"_blank\">"}',
 +			'{Locked="<a href=\"https://github.com/!!GH_REPO_PATH!!/wiki/Submitting-Bugs-and-Suggestions\" target=\"_blank\">"}',
  			'{Locked="</a>"}'
-@@ -22,3 +22,3 @@ const reviewGuidanceLabel = localize( // intentionally not escaped because of it
+@@ -23,3 +23,3 @@ const reviewGuidanceLabel = localize( // intentionally not escaped because of it
  	},
--	'Before you report an issue here please <a href="https://github.com/microsoft/vscode/wiki/Submitting-Bugs-and-Suggestions" target="_blank">review the guidance we provide</a>.'
-+	'Before you report an issue here please <a href="https://github.com/!!GH_REPO_PATH!!/wiki/Submitting-Bugs-and-Suggestions" target="_blank">review the guidance we provide</a>.'
+-	'Before you report an issue here please <a href="https://github.com/microsoft/vscode/wiki/Submitting-Bugs-and-Suggestions" target="_blank">review the guidance we provide</a>. Please complete the form in English.'
++	'Before you report an issue here please <a href="https://github.com/!!GH_REPO_PATH!!/wiki/Submitting-Bugs-and-Suggestions" target="_blank">review the guidance we provide</a>. Please complete the form in English.'
  );

+ 8 - 8
patches/terminal-suggest.patch

@@ -1,6 +1,6 @@
 diff --git a/extensions/terminal-suggest/src/completions/codium-insiders.ts b/extensions/terminal-suggest/src/completions/codium-insiders.ts
 new file mode 100644
-index 0000000..a5769b1
+index 0000000..f3c0f9d
 --- /dev/null
 +++ b/extensions/terminal-suggest/src/completions/codium-insiders.ts
 @@ -0,0 +1,9 @@
@@ -15,7 +15,7 @@ index 0000000..a5769b1
 +export default codiumInsidersCompletionSpec;
 diff --git a/extensions/terminal-suggest/src/completions/codium.ts b/extensions/terminal-suggest/src/completions/codium.ts
 new file mode 100644
-index 0000000..b1fa812
+index 0000000..1daa1fe
 --- /dev/null
 +++ b/extensions/terminal-suggest/src/completions/codium.ts
 @@ -0,0 +1,9 @@
@@ -29,16 +29,16 @@ index 0000000..b1fa812
 +
 +export default codiumCompletionSpec;
 diff --git a/extensions/terminal-suggest/src/terminalSuggestMain.ts b/extensions/terminal-suggest/src/terminalSuggestMain.ts
-index 3f181bc..34054ed 100644
+index 863cd21..a33e440 100644
 --- a/extensions/terminal-suggest/src/terminalSuggestMain.ts
 +++ b/extensions/terminal-suggest/src/terminalSuggestMain.ts
-@@ -12,2 +12,4 @@ import codeCompletionSpec from './completions/code';
- import codeInsidersCompletionSpec from './completions/code-insiders';
+@@ -30,2 +30,4 @@ import codeTunnelCompletionSpec from './completions/code-tunnel';
+ import codeTunnelInsidersCompletionSpec from './completions/code-tunnel-insiders';
 +import codiumCompletionSpec from './completions/codium';
 +import codiumInsidersCompletionSpec from './completions/codium-insiders';
- import setLocationSpec from './completions/set-location';
-@@ -52,2 +54,4 @@ export const availableSpecs: Fig.Spec[] = [
- 	codeCompletionSpec,
+ 
+@@ -50,2 +52,4 @@ export const availableSpecs: Fig.Spec[] = [
+ 	npxCompletionSpec,
 +	codiumInsidersCompletionSpec,
 +	codiumCompletionSpec,
  	setLocationSpec,

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


+ 9 - 146
patches/version-0-release.patch

@@ -1,43 +1,5 @@
-diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
-index e0df76f..04354d8 100644
---- a/build/gulpfile.reh.js
-+++ b/build/gulpfile.reh.js
-@@ -310,2 +310,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
- 		const name = product.nameShort;
-+		const release = packageJson.release;
- 
-@@ -313,3 +314,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
- 		const packageJsonStream = gulp.src(['remote/package.json'], { base: 'remote' })
--			.pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, type: 'module' }))
-+			.pipe(json({ name, version, release, dependencies: undefined, optionalDependencies: undefined, type: 'module' }))
- 			.pipe(es.through(function (file) {
-@@ -321,3 +322,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
- 		const productJsonStream = gulp.src(['product.json'], { base: '.' })
--			.pipe(json({ commit, date: readISODate('out-build'), version }))
-+			.pipe(json({ commit, date: readISODate('out-build'), version, release }))
- 			.pipe(es.through(function (file) {
-diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
-index a63f693..62e0080 100644
---- a/build/gulpfile.vscode.js
-+++ b/build/gulpfile.vscode.js
-@@ -261,3 +261,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
- 
--		let version = packageJson.version;
-+		let version = packageJson.version
- 		const quality = product.quality;
-@@ -269,3 +269,4 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
- 		const name = product.nameShort;
--		const packageJsonUpdates = { name, version };
-+		const release = packageJson.release;
-+		const packageJsonUpdates = { name, version, release };
- 
-@@ -285,3 +286,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
- 		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, release }))
- 			.pipe(es.through(function (file) {
 diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
-index fb0e5a4..170c60b 100644
+index cd8610d..2d928b1 100644
 --- a/build/gulpfile.vscode.linux.js
 +++ b/build/gulpfile.vscode.linux.js
 @@ -27,4 +27,2 @@ const commit = getVersion(root);
@@ -45,116 +7,17 @@ index fb0e5a4..170c60b 100644
 -const linuxPackageRevision = Math.floor(new Date().getTime() / 1000);
 -
  /**
-@@ -89,3 +87,3 @@ function prepareDebPackage(arch) {
+@@ -90,3 +88,3 @@ function prepareDebPackage(arch) {
  					.pipe(replace('@@NAME@@', product.applicationName))
 -					.pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision))
-+					.pipe(replace('@@VERSION@@', `${packageJson.version}.${packageJson.release}`))
++					.pipe(replace('@@VERSION@@', packageJson.version))
  					.pipe(replace('@@ARCHITECTURE@@', debArch))
-@@ -204,4 +202,3 @@ function prepareRpmPackage(arch) {
- 					.pipe(replace('@@ICON@@', product.linuxIconName))
--					.pipe(replace('@@VERSION@@', packageJson.version))
--					.pipe(replace('@@RELEASE@@', linuxPackageRevision))
-+					.pipe(replace('@@VERSION@@', `${packageJson.version}.${packageJson.release}`))
- 					.pipe(replace('@@ARCHITECTURE@@', rpmArch))
-@@ -281,3 +278,3 @@ function prepareSnapPackage(arch) {
+@@ -204,3 +202,2 @@ function prepareRpmPackage(arch) {
+ 			.pipe(replace('@@VERSION@@', packageJson.version))
+-			.pipe(replace('@@RELEASE@@', linuxPackageRevision))
+ 			.pipe(replace('@@ARCHITECTURE@@', rpmArch))
+@@ -278,3 +275,3 @@ function prepareSnapPackage(arch) {
  			.pipe(replace('@@NAME@@', product.applicationName))
 -			.pipe(replace('@@VERSION@@', commit.substr(0, 8)))
-+			.pipe(replace('@@VERSION@@', `${packageJson.version}.${packageJson.release}`))
++			.pipe(replace('@@VERSION@@', packageJson.version))
  			// Possible run-on values https://snapcraft.io/docs/architectures
-diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js
-index 98175f5..afacbe3 100644
---- a/build/gulpfile.vscode.win32.js
-+++ b/build/gulpfile.vscode.win32.js
-@@ -89,4 +89,4 @@ function buildWin32Setup(arch, target) {
- 			DirName: product.win32DirName,
--			Version: pkg.version,
--			RawVersion: pkg.version.replace(/-\w+$/, ''),
-+			Version: `${pkg.version}.${pkg.release}`,
-+			RawVersion: `${pkg.version.replace(/-\w+$/, '')}.${pkg.release}`,
- 			NameVersion: product.win32NameVersion + (target === 'user' ? ' (User)' : ''),
-diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts
-index 52c4c94..00fc9f8 100644
---- a/src/vs/base/common/product.ts
-+++ b/src/vs/base/common/product.ts
-@@ -58,2 +58,3 @@ export interface IProductConfiguration {
- 	readonly version: string;
-+	readonly release: string;
- 	readonly date?: string;
-diff --git a/src/vs/platform/diagnostics/node/diagnosticsService.ts b/src/vs/platform/diagnostics/node/diagnosticsService.ts
-index 5f6efd5..da3c54d 100644
---- a/src/vs/platform/diagnostics/node/diagnosticsService.ts
-+++ b/src/vs/platform/diagnostics/node/diagnosticsService.ts
-@@ -232,3 +232,3 @@ export class DiagnosticsService implements IDiagnosticsService {
- 		const output: string[] = [];
--		output.push(`Version:          ${this.productService.nameShort} ${this.productService.version} (${this.productService.commit || 'Commit unknown'}, ${this.productService.date || 'Date unknown'})`);
-+		output.push(`Version:          ${this.productService.nameShort} ${this.productService.version} ${this.productService.release || 'Release unknown'} (${this.productService.commit || 'Commit unknown'}, ${this.productService.date || 'Date unknown'})`);
- 		output.push(`OS Version:       ${osLib.type()} ${osLib.arch()} ${osLib.release()}`);
-diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts
-index 1a2a619..2a8d683 100644
---- a/src/vs/platform/product/common/product.ts
-+++ b/src/vs/platform/product/common/product.ts
-@@ -43,6 +43,7 @@ else if (globalThis._VSCODE_PRODUCT_JSON && globalThis._VSCODE_PACKAGE_JSON) {
- 	if (!product.version) {
--		const pkg = globalThis._VSCODE_PACKAGE_JSON as { version: string };
-+		const pkg = globalThis._VSCODE_PACKAGE_JSON as { version: string, release: string };
- 
- 		Object.assign(product, {
--			version: pkg.version
-+			version: pkg.version,
-+			release: pkg.release
- 		});
-diff --git a/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts b/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts
-index 7563b30..0873839 100644
---- a/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts
-+++ b/src/vs/workbench/browser/parts/dialogs/dialogHandler.ts
-@@ -23,2 +23,3 @@ import { ResultKind } from '../../../../platform/keybinding/common/keybindingRes
- import { IOpenerService } from '../../../../platform/opener/common/opener.js';
-+import { getReleaseString } from '../../../../workbench/common/release.js';
- 
-@@ -81,2 +82,4 @@ export class BrowserDialogHandler extends AbstractDialogHandler {
- 		const detailString = (useAgo: boolean): string => {
-+			const releaseString = getReleaseString();
-+
- 			return localize('aboutDetail',
-@@ -87,3 +90,3 @@ export class BrowserDialogHandler extends AbstractDialogHandler {
- 				navigator.userAgent
--			);
-+			).replace('\n', `\n${releaseString} ${this.productService.release || 'Unknown'}\n`);
- 		};
-diff --git a/src/vs/workbench/common/release.ts b/src/vs/workbench/common/release.ts
-new file mode 100644
-index 0000000..82dbe6a
---- /dev/null
-+++ b/src/vs/workbench/common/release.ts
-@@ -0,0 +1,14 @@
-+import { language } from '../../base/common/platform.js';
-+
-+const DEFAULT_LABEL = 'Release:';
-+const LABELS: { [key: string]: string } = {
-+	'en': DEFAULT_LABEL,
-+	'fr': 'Révision :',
-+	'ru': 'Релиз:',
-+	'zh-hans': '发布版本:',
-+	'zh-hant': '發布版本:',
-+};
-+
-+export function getReleaseString(): string {
-+	return LABELS[language] ?? DEFAULT_LABEL;
-+}
-diff --git a/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts b/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts
-index 6c61a59..d58f8fc 100644
---- a/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts
-+++ b/src/vs/workbench/electron-sandbox/parts/dialogs/dialogHandler.ts
-@@ -15,2 +15,3 @@ import { process } from '../../../../base/parts/sandbox/electron-sandbox/globals
- import { getActiveWindow } from '../../../../base/browser/dom.js';
-+import { getReleaseString } from '../../../../workbench/common/release.js';
- 
-@@ -80,2 +81,3 @@ export class NativeDialogHandler extends AbstractDialogHandler {
- 		const osProps = await this.nativeHostService.getOSProperties();
-+		const releaseString = getReleaseString();
- 
-@@ -93,3 +95,3 @@ export class NativeDialogHandler extends AbstractDialogHandler {
- 				`${osProps.type} ${osProps.arch} ${osProps.release}${isLinuxSnap ? ' snap' : ''}`
--			);
-+			).replace('\n', `\n${releaseString} ${this.productService.release || 'Unknown'}\n`);
- 		};

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

@@ -67,7 +67,7 @@ index a1ec3fe..f954720 100644
 +	}
  }
 diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts
-index 57398fb..8e36930 100644
+index 57398fb..b30ef50 100644
 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts
 +++ b/src/vs/platform/update/electron-main/updateService.darwin.ts
 @@ -15,3 +15,3 @@ import { ILogService } from '../../log/common/log.js';
@@ -109,8 +109,8 @@ index 57398fb..8e36930 100644
 +					return Promise.resolve(null);
 +				}
 +
-+				const fetchedVersion = update.productVersion.replace(/(\d+\.\d+\.\d+)(?:\.(\d+))(\-\w+)?/, '$1$3+$2');
-+				const currentVersion = `${this.productService.version}+${this.productService.release}`;
++				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')
 +
 +				if(semver.compareBuild(currentVersion, fetchedVersion) >= 0) {
 +					this.setState(State.Idle(UpdateType.Setup));
@@ -132,7 +132,7 @@ index dd18900..920dc10 100644
 +		return createUpdateURL(this.productService, quality, process.platform, process.arch);
  	}
 diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts
-index db92de2..06981b3 100644
+index db92de2..2bbdad9 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';
@@ -195,8 +195,8 @@ index db92de2..06981b3 100644
  	}
 @@ -130,2 +145,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun
  
-+				const fetchedVersion = update.productVersion.replace(/(\d+\.\d+\.\d+)(?:\.(\d+))(\-\w+)?/, '$1$3+$2');
-+				const currentVersion = `${this.productService.version}+${this.productService.release}`;
++				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')
 +
 +				if(semver.compareBuild(currentVersion, fetchedVersion) >= 0) {
 +					this.setState(State.Idle(updateType));

+ 7 - 5
prepare_assets.sh

@@ -95,18 +95,18 @@ if [[ "${OS_NAME}" == "osx" ]]; then
 elif [[ "${OS_NAME}" == "windows" ]]; then
   cd vscode || { echo "'vscode' dir not found"; exit 1; }
 
-  yarn gulp "vscode-win32-${VSCODE_ARCH}-inno-updater"
+  npm run gulp "vscode-win32-${VSCODE_ARCH}-inno-updater"
 
   if [[ "${SHOULD_BUILD_ZIP}" != "no" ]]; then
     7z.exe a -tzip "../assets/${APP_NAME}-win32-${VSCODE_ARCH}-${RELEASE_VERSION}.zip" -x!CodeSignSummary*.md -x!tools "../VSCode-win32-${VSCODE_ARCH}/*" -r
   fi
 
   if [[ "${SHOULD_BUILD_EXE_SYS}" != "no" ]]; then
-    yarn gulp "vscode-win32-${VSCODE_ARCH}-system-setup"
+    npm run gulp "vscode-win32-${VSCODE_ARCH}-system-setup"
   fi
 
   if [[ "${SHOULD_BUILD_EXE_USR}" != "no" ]]; then
-    yarn gulp "vscode-win32-${VSCODE_ARCH}-user-setup"
+    npm run gulp "vscode-win32-${VSCODE_ARCH}-user-setup"
   fi
 
   if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then
@@ -152,11 +152,13 @@ else
   fi
 
   if [[ "${SHOULD_BUILD_DEB}" != "no" || "${SHOULD_BUILD_APPIMAGE}" != "no" ]]; then
-    yarn gulp "vscode-linux-${VSCODE_ARCH}-build-deb"
+    npm run gulp "vscode-linux-${VSCODE_ARCH}-prepare-deb"
+    npm run gulp "vscode-linux-${VSCODE_ARCH}-build-deb"
   fi
 
   if [[ "${SHOULD_BUILD_RPM}" != "no" ]]; then
-    yarn gulp "vscode-linux-${VSCODE_ARCH}-build-rpm"
+    npm run gulp "vscode-linux-${VSCODE_ARCH}-prepare-rpm"
+    npm run gulp "vscode-linux-${VSCODE_ARCH}-build-rpm"
   fi
 
   if [[ "${SHOULD_BUILD_APPIMAGE}" != "no" ]]; then

+ 11 - 3
prepare_vscode.sh

@@ -70,13 +70,22 @@ elif [[ "${OS_NAME}" == "windows" ]]; then
   if [[ "${npm_config_arch}" == "arm" ]]; then
     export npm_config_arm_version=7
   fi
+else
+  if [[ "${CI_BUILD}" != "no" ]]; then
+    clang++ --version
+  fi
 fi
 
 mv .npmrc .npmrc.bak
 cp ../npmrc .npmrc
 
 for i in {1..5}; do # try 5 times
-  npm ci && break
+  if [[ "${CI_BUILD}" != "no" && "${OS_NAME}" == "osx" ]]; then
+    CXX=clang++ npm ci && break
+  else
+    npm ci && break
+  fi
+
   if [[ $i == 3 ]]; then
     echo "Npm install failed too many times" >&2
     exit 1
@@ -182,8 +191,7 @@ cat product.json
 # package.json
 cp package.json{,.bak}
 
-setpath "package" "version" "$( echo "${RELEASE_VERSION}" | sed -n -E "s/^(.*)\.([0-9]+)(-insider)?$/\1/p" )"
-setpath "package" "release" "$( echo "${RELEASE_VERSION}" | sed -n -E "s/^(.*)\.([0-9]+)(-insider)?$/\2/p" )"
+setpath "package" "version" "${RELEASE_VERSION%-insider}"
 
 replace 's|Microsoft Corporation|VSCodium|' package.json
 

+ 7 - 1
product.json

@@ -47,6 +47,9 @@
     "^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/(actions\\/)?workflows\\/.*badge\\.svg"
   ],
   "extensionEnabledApiProposals": {
+    "ms-azuretools.vscode-dev-azurecloudshell": [
+      "contribEditSessions"
+    ],
     "ms-vscode.vscode-selfhost-test-provider": [
       "testObserver",
       "testRelatedCode"
@@ -225,6 +228,7 @@
       "aiRelatedInformation",
       "codeActionAI",
       "findTextInFiles",
+      "findTextInFiles2",
       "textSearchProvider",
       "textSearchProvider2",
       "activeComment",
@@ -248,7 +252,9 @@
       "inlineCompletionsAdditions",
       "chatReferenceBinaryData",
       "languageModelSystem",
-      "languageModelCapabilities"
+      "languageModelCapabilities",
+      "languageModelDataPart",
+      "chatStatusItem"
     ],
     "GitHub.remotehub": [
       "contribRemoteHelp",

+ 20 - 1
update_version.sh

@@ -62,7 +62,7 @@ generateJson() {
   url="${URL_BASE}/${ASSET_NAME}"
   name="${RELEASE_VERSION}"
   version="${BUILD_SOURCEVERSION}"
-  productVersion="${RELEASE_VERSION}"
+  productVersion="$( transformVersion "${RELEASE_VERSION}" )"
   timestamp=$( node -e 'console.log(Date.now())' )
 
   if [[ ! -f "assets/${ASSET_NAME}" ]]; then
@@ -94,6 +94,25 @@ generateJson() {
     <<<'{}' )
 }
 
+transformVersion() {
+  local version parts
+
+  version="${1%-insider}"
+
+  IFS='.' read -r -a parts <<< "${version}"
+
+  # Remove leading zeros from third part
+  parts[2]="$((10#${parts[2]}))"
+
+  version="${parts[0]}.${parts[1]}.${parts[2]}.0"
+
+  if [[ "${1}" == *-insider ]]; then
+    version="${version}-insider"
+  fi
+
+  echo "${version}"
+}
+
 updateLatestVersion() {
   echo "Updating ${VERSION_PATH}/latest.json"
 

+ 2 - 2
upstream/insider.json

@@ -1,4 +1,4 @@
 {
-  "tag": "1.98.0",
-  "commit": "6609ac3d66f4eade5cf376d1cb76f13985724bcb"
+  "tag": "1.99.0",
+  "commit": "b34f7ee5b19a94b2aa6982c48a9495f691a8d9f6"
 }

+ 2 - 2
upstream/stable.json

@@ -1,4 +1,4 @@
 {
-  "tag": "1.98.2",
-  "commit": "ddc367ed5c8936efe395cffeec279b04ffd7db78"
+  "tag": "1.99.0",
+  "commit": "4437686ffebaf200fa4a6e6e67f735f3edf24ada"
 }

+ 4 - 0
utils.sh

@@ -14,6 +14,8 @@ apply_patch() {
   fi
   # grep '^+++' "$1"  | sed -e 's#+++ [ab]/#./vscode/#' | while read line; do shasum -a 256 "${line}"; done
 
+  cp $1{,.bak}
+
   replace "s|!!APP_NAME!!|${APP_NAME}|g" "$1"
   replace "s|!!APP_NAME_LC!!|${APP_NAME_LC}|g" "$1"
   replace "s|!!BINARY_NAME!!|${BINARY_NAME}|g" "$1"
@@ -24,6 +26,8 @@ apply_patch() {
     echo failed to apply patch "$1" >&2
     exit 1
   fi
+
+  mv -f $1{.bak,}
 }
 
 exists() { type -t "$1" &> /dev/null; }