diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 92c44a82b24..42e1f84bb98 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -7,5 +7,6 @@ version: 2 updates: - package-ecosystem: "github-actions" directory: "/" + target-branch: insider schedule: interval: "weekly" diff --git a/.github/workflows/stable-linux.yml b/.github/workflows/stable-linux.yml index 2e92dfd96ac..be82c07e511 100644 --- a/.github/workflows/stable-linux.yml +++ b/.github/workflows/stable-linux.yml @@ -104,9 +104,9 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20.19.0' + node-version-file: '.nvmrc' if: env.SHOULD_BUILD == 'yes' - name: Setup Python 3 @@ -209,7 +209,7 @@ jobs: if: env.DISABLED != 'yes' - name: Install GH - run: ./install_gh.sh + run: ./build/linux/install_gh.sh if: env.DISABLED != 'yes' && env.SHOULD_BUILD == 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Check existing Codex tags/releases @@ -331,9 +331,9 @@ jobs: if: env.DISABLED != 'yes' - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20.19.0' + node-version-file: '.nvmrc' if: env.DISABLED != 'yes' - name: Setup Python 3 @@ -347,7 +347,7 @@ jobs: if: env.DISABLED != 'yes' - name: Install GH - run: ./install_gh.sh + run: ./build/linux/install_gh.sh if: env.DISABLED != 'yes' && env.SHOULD_DEPLOY == 'yes' - name: Check existing Codex tags/releases @@ -428,8 +428,13 @@ jobs: version: 10 platform: x64 + - name: Setup Node.js environment + uses: actions/setup-node@v6 + with: + node-version-file: '.nvmrc' + - name: Install GH - run: ./install_gh.sh + run: ./build/linux/install_gh.sh if: env.SHOULD_DEPLOY == 'yes' - name: Check existing Codex tags/releases diff --git a/.github/workflows/stable-macos.yml b/.github/workflows/stable-macos.yml index ad684c9a25f..99ce9e2cd2a 100644 --- a/.github/workflows/stable-macos.yml +++ b/.github/workflows/stable-macos.yml @@ -43,13 +43,13 @@ jobs: fail-fast: false matrix: include: - - runner: macos-13 + - runner: macos-15-intel vscode_arch: x64 - runner: macos-14 vscode_arch: arm64 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: ref: ${{ env.GITHUB_BRANCH }} @@ -59,12 +59,12 @@ jobs: run: . get_pr.sh - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20.19.0' + node-version-file: '.nvmrc' - name: Setup Python 3 - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.11' if: env.VSCODE_ARCH == 'x64' @@ -115,7 +115,7 @@ jobs: if: env.SHOULD_DEPLOY == 'yes' - name: Upload assets - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: bin-${{ matrix.vscode_arch }} path: assets/ diff --git a/.github/workflows/stable-windows.yml b/.github/workflows/stable-windows.yml index 52e450d8762..d9d1eca65c3 100644 --- a/.github/workflows/stable-windows.yml +++ b/.github/workflows/stable-windows.yml @@ -100,9 +100,9 @@ jobs: platform: x64 - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: "20.18.2" + node-version-file: '.nvmrc' if: env.SHOULD_BUILD == 'yes' - name: Setup Python 3 @@ -181,9 +181,9 @@ jobs: if: env.SHOULD_BUILD == 'yes' - name: Setup Node.js environment - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '20.19.0' + node-version-file: '.nvmrc' if: env.SHOULD_BUILD == 'yes' - name: Setup Python 3 diff --git a/.gitignore b/.gitignore index 10af0229539..9ebe964fddb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ build/linux/appimage/Codex build/windows/msi/releasedir build/windows/msi/Files*.wxs build/windows/msi/Files*.wixobj +sourcemaps/ stores/snapcraft/insider/*.snap stores/snapcraft/stable/*.snap node_modules diff --git a/.nvmrc b/.nvmrc index 5bd6811705e..5767036af0e 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.19.0 +22.21.1 diff --git a/Dockerfile b/Dockerfile index 29928ea8df1..af9cdb5fb49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20.19.0 as builder +FROM node:22.21.1 as builder # Accept GITHUB_TOKEN as build argument ARG GITHUB_TOKEN @@ -35,7 +35,7 @@ RUN ./dev/build.sh && \ cp -r ./vscode/node_modules ./vscode-reh-web-linux-x64/ -FROM node:20.19.0 as runtime +FROM node:22.21.1 as runtime COPY --from=builder /opt/vscodium/vscode-reh-web-linux-x64 /opt/codex ENV VSCODE_SERVER_HOST=0.0.0.0 diff --git a/build.sh b/build.sh index 53a73171cc1..c0dfd2f5473 100755 --- a/build.sh +++ b/build.sh @@ -25,8 +25,12 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then . ../get-extensions.sh if [[ "${OS_NAME}" == "osx" ]]; then + # remove win32 node modules + rm -f .build/extensions/ms-vscode.js-debug/src/win32-app-container-tokens.*.node + # generate Group Policy definitions - node build/lib/policies darwin + npm run copy-policy-dto --prefix build + node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc darwin npm run gulp "vscode-darwin-${VSCODE_ARCH}-min-ci" @@ -36,13 +40,14 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then VSCODE_PLATFORM="darwin" elif [[ "${OS_NAME}" == "windows" ]]; then - # generate Group Policy definitions - 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 + # generate Group Policy definitions + npm run copy-policy-dto --prefix build + node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc win32 + npm run gulp "vscode-win32-${VSCODE_ARCH}-min-ci" if [[ "${VSCODE_ARCH}" != "x64" ]]; then @@ -55,8 +60,15 @@ if [[ "${SHOULD_BUILD}" == "yes" ]]; then VSCODE_PLATFORM="win32" else # linux + # remove win32 node modules + rm -f .build/extensions/ms-vscode.js-debug/src/win32-app-container-tokens.*.node + # in CI, packaging will be done by a different job if [[ "${CI_BUILD}" == "no" ]]; then + # generate Group Policy definitions + npm run copy-policy-dto --prefix build + node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc linux + npm run gulp "vscode-linux-${VSCODE_ARCH}-min-ci" find "../VSCode-linux-${VSCODE_ARCH}" -print0 | xargs -0 touch -c diff --git a/build/alpine/package_reh.sh b/build/alpine/package_reh.sh index 9d481c0e931..3f337f63d49 100755 --- a/build/alpine/package_reh.sh +++ b/build/alpine/package_reh.sh @@ -34,14 +34,14 @@ fi for i in {1..5}; do # try 5 times npm ci && break - if [[ $i == 3 ]]; then + if [[ $i == 5 ]]; then echo "Npm install failed too many times" >&2 exit 1 fi echo "Npm install failed $i, trying again..." done -node build/azure-pipelines/distro/mixin-npm +node build/azure-pipelines/distro/mixin-npm.ts if [[ "${VSCODE_ARCH}" == "x64" ]]; then PA_NAME="linux-alpine" diff --git a/build/linux/install_gh.sh b/build/linux/install_gh.sh new file mode 100755 index 00000000000..58a76480210 --- /dev/null +++ b/build/linux/install_gh.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +set -ex + +GH_ARCH="amd64" + +for i in {1..5}; do + TAG=$( curl --retry 12 --retry-delay 30 "https://api.github.com/repos/cli/cli/releases/latest" 2>/dev/null | jq --raw-output '.tag_name' ) + + if [[ $? == 0 && "${TAG}" != "null" ]]; then + break + fi + + if [[ $i == 5 ]]; then + echo "GH install failed too many times" >&2 + exit 1 + fi + + echo "GH install failed $i, trying again..." + + sleep $(( 15 * (i + 1))) +done + +VERSION="${TAG#v}" + +curl --retry 12 --retry-delay 120 -sSL "https://github.com/cli/cli/releases/download/${TAG}/gh_${VERSION}_linux_${GH_ARCH}.tar.gz" -o "gh_${VERSION}_linux_${GH_ARCH}.tar.gz" + +tar xf "gh_${VERSION}_linux_${GH_ARCH}.tar.gz" + +cp "gh_${VERSION}_linux_${GH_ARCH}/bin/gh" /usr/local/bin/ + +gh --version diff --git a/build/linux/install_nodejs.sh b/build/linux/install_nodejs.sh new file mode 100755 index 00000000000..8c0d20ed083 --- /dev/null +++ b/build/linux/install_nodejs.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +set -ex + +NODEJS_VERSION=$( cat .nvmrc ) + +curl -fsSL "${NODEJS_SITE}${NODEJS_URLROOT}/v${NODEJS_VERSION}/node-v${NODEJS_VERSION}-linux-${NODEJS_ARCH}${NODEJS_URLSUFFIX}.tar.xz" -o node.tar.xz + +tar -xf node.tar.xz + +sudo mv "node-v${NODEJS_VERSION}-linux-${NODEJS_ARCH}${NODEJS_URLSUFFIX}" /usr/local/node + +echo "/usr/local/node/bin" >> $GITHUB_PATH diff --git a/build/linux/loong64/electron.sh b/build/linux/loong64/electron.sh index d4ce4cd1e2e..63cb443fa42 100644 --- a/build/linux/loong64/electron.sh +++ b/build/linux/loong64/electron.sh @@ -2,5 +2,5 @@ set -ex -export ELECTRON_VERSION="34.5.4" +export ELECTRON_VERSION="39.2.3" export VSCODE_ELECTRON_TAG="v${ELECTRON_VERSION}" diff --git a/build/linux/loong64/electron.sha256sums b/build/linux/loong64/electron.sha256sums index 814167e35c0..a727d66d1e1 100644 --- a/build/linux/loong64/electron.sha256sums +++ b/build/linux/loong64/electron.sha256sums @@ -1,10 +1,9 @@ -cf8098d286cfb8d64ca430740084b2bd6f0152ee047e244897d94cc9a2df4d3f *chromedriver-v34.5.4-linux-loong64.zip -7e7ea3a5bd29615bfc56ef2ccdd90228c39c6967de31c7181242e82ad50a1828 *electron-v34.5.4-linux-loong64-debug.zip -78d894c1fa02fabae37cf61b8961b7c0d79e9c27078a68c68e299f09b1635ac1 *electron-v34.5.4-linux-loong64-symbols.zip -28fe7821944b42de2065bda356a49d058d190ee02355ac3369f591a1af066252 *electron-v34.5.4-linux-loong64.zip -ae61a77fc547493e8c30f1f52b0e1e9932a163cda261cac3c32fc453d9da8cde *hunspell-dictionaries.zip -0bd2ce3eaa8f79ebf162babeb38fc1c3352bc5398ef442151e9d0f04f29e7416 *libcxx-headers.zip -962b369d4166f43f8130ff16d632c25c5512975015ad74675b62cfdb6189199b *libcxx-objects-v34.5.4-linux-loong64.zip -e468dba6a76ff95d3573ac5a57d4fd97e736663dab44d3c842de1974b9fc7b25 *libcxxabi-headers.zip -4d1e508970b79d782e10e23e261211659dcf6edd6b01029011baf47becb95344 *mksnapshot-v34.5.4-linux-loong64.zip -0d0e7f1de51994c95241b3b6c0ce822a44d6eca45e1981f2e61c1ca6386d5d29 *node-v34.5.4-headers.tar.gz +d26b2189e7466a08c73861d0225c9b28730fdfc30918f3ea70853b43a2581dc4 *chromedriver-v39.2.3-linux-loong64.zip +8cc36f7468f5b2d98cde3f73c10c535555754c54be43e45c320a382c35b8e466 *electron-v39.2.3-linux-loong64.zip +f6e7462d6fd795ae2b08344ee0fdca817eba148b62a62717b3f512c845d96a64 *ffmpeg-v39.2.3-linux-loong64.zip +b122599dc84b81526ba4eecbca4794f3a2d25300242ad3829d1445cb6948f470 *hunspell-dictionaries.zip +76ef17d2810df5e77c5071863e2a375df914cfb7a362ad0582ee0eedca2441b9 *libcxx-headers.zip +9b61ba9f0780a57ee2749f7963759395784eadcaccc54af313de1a540240298e *libcxx-objects-v39.2.3-linux-loong64.zip +9ae64aff9e391eae401142e55654b5b8cf54d0611b1ecb540f2f4e89a2b4f772 *libcxxabi-headers.zip +7d7e6e08c84aa38b74037f5910534918bc792ffbe2ca6d667067f587f27f5118 *mksnapshot-v39.2.3-linux-loong64.zip +db48f8a9d2271e8b3a1c3f26ea1ae9bd489deb1b464b6ae424a15d5df7529fdc *node-v39.2.3-headers.tar.gz diff --git a/build/linux/package_bin.sh b/build/linux/package_bin.sh index 793eb9f319e..ecb1eccd21b 100755 --- a/build/linux/package_bin.sh +++ b/build/linux/package_bin.sh @@ -22,11 +22,10 @@ export VSCODE_SYSROOT_PREFIX='-glibc-2.28-gcc-10.5.0' if [[ "${VSCODE_ARCH}" == "arm64" || "${VSCODE_ARCH}" == "armhf" ]]; then export VSCODE_SKIP_SYSROOT=1 - export USE_GNUPP2A=1 + # export USE_GNUPP2A=1 elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then export VSCODE_SYSROOT_REPOSITORY='VSCodium/vscode-linux-build-agent' export VSCODE_SYSROOT_VERSION='20240129-253798' - export USE_GNUPP2A=1 export ELECTRON_SKIP_BINARY_DOWNLOAD=1 export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 export VSCODE_SKIP_SETUPENV=1 @@ -102,7 +101,7 @@ fi for i in {1..5}; do # try 5 times npm ci --prefix build && break - if [[ $i == 3 ]]; then + if [[ $i == 5 ]]; then echo "Npm install failed too many times" >&2 exit 1 fi @@ -119,14 +118,21 @@ fi for i in {1..5}; do # try 5 times npm ci && break - if [[ $i -eq 3 ]]; then + if [[ $i == 5 ]]; then echo "Npm install failed too many times" >&2 exit 1 fi echo "Npm install failed $i, trying again..." done -node build/azure-pipelines/distro/mixin-npm +node build/azure-pipelines/distro/mixin-npm.ts + +# delete native files built in the `compile` step +find .build/extensions -type f -name '*.node' -print -delete + +# generate Group Policy definitions +npm run copy-policy-dto --prefix build +node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc linux npm run gulp "vscode-linux-${VSCODE_ARCH}-min-ci" diff --git a/build/linux/package_reh.sh b/build/linux/package_reh.sh index f7a9541ba58..834a2095fe4 100755 --- a/build/linux/package_reh.sh +++ b/build/linux/package_reh.sh @@ -18,20 +18,14 @@ cd vscode || { echo "'vscode' dir not found"; exit 1; } GLIBC_VERSION="2.28" GLIBCXX_VERSION="3.4.26" -NODE_VERSION="20.19.0" +NODE_VERSION="22.21.1" export VSCODE_NODEJS_URLROOT='/download/release' export VSCODE_NODEJS_URLSUFFIX='' if [[ "${VSCODE_ARCH}" == "x64" ]]; then - GLIBC_VERSION="2.17" - GLIBCXX_VERSION="3.4.22" - VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-x64" - export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org' - export VSCODE_NODEJS_URLSUFFIX='-glibc-217' - export VSCODE_SKIP_SETUPENV=1 elif [[ "${VSCODE_ARCH}" == "arm64" ]]; then EXPECTED_GLIBC_VERSION="2.30" @@ -48,12 +42,13 @@ elif [[ "${VSCODE_ARCH}" == "armhf" ]]; then export VSCODE_SKIP_SYSROOT=1 export USE_GNUPP2A=1 elif [[ "${VSCODE_ARCH}" == "ppc64le" ]]; then + GLIBC_VERSION="2.28" + VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-ppc64le" VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}" export VSCODE_SYSROOT_REPOSITORY='VSCodium/vscode-linux-build-agent' export VSCODE_SYSROOT_VERSION='20240129-253798' - export USE_GNUPP2A=1 elif [[ "${VSCODE_ARCH}" == "riscv64" ]]; then NODE_VERSION="20.16.0" VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-riscv64" @@ -67,6 +62,8 @@ elif [[ "${VSCODE_ARCH}" == "loong64" ]]; then export VSCODE_SKIP_SETUPENV=1 export VSCODE_NODEJS_SITE='https://unofficial-builds.nodejs.org' elif [[ "${VSCODE_ARCH}" == "s390x" ]]; then + GLIBC_VERSION="2.28" + VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME="vscodium/vscodium-linux-build-agent:focal-devtoolset-s390x" VSCODE_SYSROOT_PREFIX="-glibc-${GLIBC_VERSION}" @@ -91,7 +88,7 @@ VSCODE_HOST_MOUNT="$( pwd )" export VSCODE_HOST_MOUNT export VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME -sed -i "/target/s/\"20.*\"/\"${NODE_VERSION}\"/" remote/.npmrc +sed -i "/target/s/\"22.*\"/\"${NODE_VERSION}\"/" remote/.npmrc if [[ -d "../patches/linux/reh/" ]]; then for file in "../patches/linux/reh/"*.patch; do @@ -131,12 +128,9 @@ EOF echo "${INCLUDES}" > "${HOME}/.gyp/include.gypi" fi -mv .npmrc .npmrc.bak -cp ../npmrc .npmrc - for i in {1..5}; do # try 5 times npm ci --prefix build && break - if [[ $i == 3 ]]; then + if [[ $i == 5 ]]; then echo "Npm install failed too many times" >&2 exit 1 fi @@ -149,11 +143,24 @@ if [[ -z "${VSCODE_SKIP_SETUPENV}" ]]; then else source ./build/azure-pipelines/linux/setup-env.sh fi + + export VSCODE_SYSROOT_DIR="${VSCODE_REMOTE_SYSROOT_DIR}" +else + mkdir -p .build/x86_64-linux-gnu/x86_64-linux-gnu/bin + + ln -s $( which objdump ) .build/x86_64-linux-gnu/x86_64-linux-gnu/bin/objdump + + export VSCODE_SYSROOT_DIR=".build" fi +node build/npm/preinstall.ts + +mv .npmrc .npmrc.bak +cp ../npmrc .npmrc + for i in {1..5}; do # try 5 times npm ci && break - if [[ $i == 3 ]]; then + if [[ $i == 5 ]]; then echo "Npm install failed too many times" >&2 exit 1 fi @@ -163,9 +170,26 @@ for i in {1..5}; do # try 5 times rm -rf node_modules/@vscode node_modules/node-pty done +# if [[ "${VSCODE_ARCH}" == "x64" ]]; then +# pushd "remote" + +# for LIB in @parcel/watcher @vscode/spdlog kerberos node-pty +# do +# pushd "node_modules/${LIB}" + +# CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" npx node-gyp rebuild + +# popd +# done + +# popd + +# VERIFY_CXX11=1 +# fi + mv .npmrc.bak .npmrc -node build/azure-pipelines/distro/mixin-npm +node build/azure-pipelines/distro/mixin-npm.ts export VSCODE_NODE_GLIBC="-glibc-${GLIBC_VERSION}" @@ -176,6 +200,10 @@ if [[ "${SHOULD_BUILD_REH}" != "no" ]]; then EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh + # if [[ -n "${VERIFY_CXX11}" ]]; then + # SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh + # fi + pushd "../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" if [[ -f "../build/linux/${VSCODE_ARCH}/ripgrep.sh" ]]; then @@ -195,6 +223,10 @@ if [[ "${SHOULD_BUILD_REH_WEB}" != "no" ]]; then EXPECTED_GLIBC_VERSION="${EXPECTED_GLIBC_VERSION}" EXPECTED_GLIBCXX_VERSION="${GLIBCXX_VERSION}" SEARCH_PATH="../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ./build/azure-pipelines/linux/verify-glibc-requirements.sh + # if [[ -n "${VERIFY_CXX11}" ]]; then + # SEARCH_PATH="../vscode-reh-${VSCODE_PLATFORM}-${VSCODE_ARCH}" ../build/linux/verify_cxx11_requirements.sh + # fi + pushd "../vscode-reh-web-${VSCODE_PLATFORM}-${VSCODE_ARCH}" if [[ -f "../build/linux/${VSCODE_ARCH}/ripgrep.sh" ]]; then diff --git a/build/linux/ppc64le/electron.sh b/build/linux/ppc64le/electron.sh index d4ce4cd1e2e..bd858988feb 100644 --- a/build/linux/ppc64le/electron.sh +++ b/build/linux/ppc64le/electron.sh @@ -2,5 +2,5 @@ set -ex -export ELECTRON_VERSION="34.5.4" +export ELECTRON_VERSION="39.2.7" export VSCODE_ELECTRON_TAG="v${ELECTRON_VERSION}" diff --git a/build/linux/ppc64le/electron.sha256sums b/build/linux/ppc64le/electron.sha256sums index 30fc895def0..26ebd03810a 100644 --- a/build/linux/ppc64le/electron.sha256sums +++ b/build/linux/ppc64le/electron.sha256sums @@ -1,11 +1,10 @@ -2d72c038fc9480f4cb4cbda7bd777bede1a17ef5630dbbc249454e241ce49816 *chromedriver-v34.5.4-linux-ppc64le.zip -bd9e1e1fd6c0d1064fe7d430818bf792e86cd9eb938c099e3d026d88173c0523 *electron-v34.5.4-linux-ppc64le-debug.zip -50ad3382f101aab711e7b25d5a5fa1fec87634c25693c58b583ff745e7ed7631 *electron-v34.5.4-linux-ppc64le-symbols.zip -56fd4eee79448501b00490d6db85656ca76cf7a9878e5d10a77d9835ab5df8d3 *electron-v34.5.4-linux-ppc64le.zip -9a321b11432efca3d64439b1a398911de27c33fab0d6c3458924f5c71088b046 *electron.d.ts -c1bac0958d0a55ed72799a69908006c4982c963d911d095b2da7f8d15500c079 *ffmpeg-v34.5.4-linux-ppc64le.zip -9a5a43f33d8f39eb7f20ceca639cf2051aada59d25784dbc352359588ba2406e *hunspell_dictionaries.zip -43eadf79799f57a6c05c0cdac341ac8a4b2cbe09e3f35fca68130cd4c56f12a4 *libcxx-objects-v34.5.4-linux-ppc64le.zip -2d079f1fffbc87e0c6c75509f45793964fa4b7dab6b083c3b2f7e60efc11f9bd *libcxx_headers.zip -6d36957614559705c882105fbeeb5cd8073d88f450696f993216c71f6f0b694b *libcxxabi_headers.zip -e400bcdf220d028b2e0398da9af0fe2e2635e2c932733295458a4f5cb836bc90 *mksnapshot-v34.5.4-linux-ppc64le.zip +bacff46523cea806df9788d9e24f7f53fad2317f18afdcbc596b86863dd40805 *chromedriver-v39.2.7-linux-ppc64le.zip +b83820b37325c0a6ce0bbb98344b54f70ef7c2a949eea61bcb423b18c623a742 *electron-v39.2.7-linux-ppc64le-debug.zip +7d3b4ff4320a54572f9e1e0286702a0bed3e1596a2cb34f8fdc455acf3b9234f *electron-v39.2.7-linux-ppc64le-symbols.zip +6974cf1c8a550019b04762222742b8f1d9d76387594a191d3522cd65da075db1 *electron-v39.2.7-linux-ppc64le.zip +40c772eb189d100087b75da6c2ad1aeb044f1d661c90543592546a654b0b6d5b *electron.d.ts +0c923001d08e474d0dcd3b747b4f9a4bfca685d755ec08de8e44556a63f9ad3a *hunspell_dictionaries.zip +ee57f79e88f50f199a6aeb87fa45c83d1bd0f92eb72e00787cfdf4cf11863562 *libcxx-objects-v39.2.7-linux-ppc64le.zip +a8709029737d3073758ccb384161a37d91f16e5a3f8110ca8e2c30f83ef8d7e6 *libcxx_headers.zip +238dcec817528659a86b0cd3d7dabe301e65b4cab25e45c5bbab7642a8849c02 *libcxxabi_headers.zip +be033ed825bd8be92bb6ca86ff81f0907e60aa999aa011f5ddf1360abb19429b *mksnapshot-v39.2.7-linux-ppc64le.zip diff --git a/build/linux/riscv64/electron.sh b/build/linux/riscv64/electron.sh index 401643e32a7..277200b1442 100755 --- a/build/linux/riscv64/electron.sh +++ b/build/linux/riscv64/electron.sh @@ -2,5 +2,5 @@ set -ex -export ELECTRON_VERSION="34.5.4" +export ELECTRON_VERSION="39.2.7" export VSCODE_ELECTRON_TAG="v${ELECTRON_VERSION}.riscv1" diff --git a/build/linux/riscv64/electron.sha256sums b/build/linux/riscv64/electron.sha256sums index 5d5f2be2483..5c501df38b4 100644 --- a/build/linux/riscv64/electron.sha256sums +++ b/build/linux/riscv64/electron.sha256sums @@ -1,11 +1,11 @@ -b4df0c94e2c9472e78b58610882b356c2d44621d6b9de208317f14641337ff7f *chromedriver-v34.5.4-linux-riscv64.zip -aca8846305cb2a89d308b6529feb169d17e2a8a22a7f5cbbb42a884752ef3a83 *electron-v34.5.4-linux-riscv64-debug.tar.zst -69df7d143196fbac6d111648d827a92172f059e268309de7202c0d2122975396 *electron-v34.5.4-linux-riscv64-symbols.tar.zst -792dfffa0985b478d79264a48a855ba9bbe00d1406d82b0e74013186cbb6b84b *electron-v34.5.4-linux-riscv64.zip -898df4e8bc7d96f2e9baf2935f4cc8ecc00acb75aa5efcfac3113ed61bd0415e *ffmpeg-v34.5.4-linux-riscv64.zip -20c9f293ce544af2c0a30f8cecf5428a8001a0b54a874dee37dddcecc4c7c607 *hunspell-dictionaries.zip -2005156efe24662203f83a9e99459bb9f85b9215678b90cdc275b1d47ce72b50 *libcxx-headers.zip -c2b7941916618b9538a72417a2231ec3f4c315e07208e9958f51f7518a786be0 *libcxx-objects-v34.5.4-linux-riscv64.zip -2078a7264654ddf4675a5bade34dee26ad0971480b17899d610e784411968424 *libcxxabi-headers.zip -4255e0bf4b63857f8be2beb4e226240a20e38810190e0c6be6afb2e293f2bd27 *mksnapshot-v34.5.4-linux-riscv64.zip -66e001fec2e77ed97099bcd76d1af40e14b3cbadafea7cb1ef52530610061f96 *node-v34.5.4-headers.tar.gz +6759ef2bd69a2e31a3f0e17c4e4c0bf239b54f08525572201ae7760851168487 *chromedriver-v39.2.7-linux-riscv64.zip +89562e30982d8ac71fbc1e0f549a4a6e19abd5cb98ea904d5f3cfceb7c61e582 *electron-v39.2.7-linux-riscv64-debug.tar.zst +71c6f265a2ef065f478ef910a06466a21009c02783dcb7053767549a6dbeb80d *electron-v39.2.7-linux-riscv64-symbols.tar.zst +136804dbd04f1c6b9a6047c4e7bb648876214ff453b62fb3bdc81505b6f5aab2 *electron-v39.2.7-linux-riscv64.zip +1059d6cb97b87464b3bd415bb5f96fceaf91d6e3af1c9733724ab9f2e14e2a08 *ffmpeg-v39.2.7-linux-riscv64.zip +224a84d4aaceb5ed8be3c4f65f8404d492dc86ded8ab336c2562dfdd21752068 *hunspell-dictionaries.zip +b6cb4f8902aad5de811efd106ddbdbca79e43cb7c8fa67f7eeddaedf2efd82d5 *libcxx-headers.zip +0664e200ec1eab1ce1957bc6e17ad89f6c0d4d904a9492d64fcf4175cd81e537 *libcxx-objects-v39.2.7-linux-riscv64.zip +96f9b66be7ff11e79ec2e781a0025938eb5ef97cbab429c05e9b45d24d421abf *libcxxabi-headers.zip +be0774857454f81b9407f6b941200f8843a0b3ecb86e2bb072209ef9f9bfe74a *mksnapshot-v39.2.7-linux-riscv64.zip +a8fca541e8f9a18de73c78f6862cbf439723c80c5eb60fe50405dfb751d2ee13 *node-v39.2.7-headers.tar.gz diff --git a/build/linux/riscv64/ripgrep.sh b/build/linux/riscv64/ripgrep.sh index 2fd995bb169..67e0d005302 100755 --- a/build/linux/riscv64/ripgrep.sh +++ b/build/linux/riscv64/ripgrep.sh @@ -9,7 +9,7 @@ if [ "$#" -ne 1 ]; then fi RG_PATH="$1/@vscode/ripgrep/bin/rg" -RG_VERSION="14.1.1-3" +RG_VERSION="14.1.1-4" echo "Replacing ripgrep binary with riscv64 one" diff --git a/build/linux/verify_abi_requirements.sh b/build/linux/verify_abi_requirements.sh new file mode 100755 index 00000000000..299f2fd9377 --- /dev/null +++ b/build/linux/verify_abi_requirements.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -e + +FILES=$( + find "${SEARCH_PATH}" -type f -executable -name "node" + find "${SEARCH_PATH}" -name "*.node" -not -path "*prebuilds*" -not -path "*extensions/node_modules/@parcel/watcher*" +) + +echo "Verifying requirements for files: ${FILES}" + +for FILE in ${FILES}; do + CXXABI_VERSION="0.0.0" + + while IFS= read -r LINE; do + VERSION=${LINE#*_} + + if [[ $( printf "%s\n%s" "${VERSION}" "${CXXABI_VERSION}" | sort -V | tail -n1 ) == "${VERSION}" ]]; then + CXXABI_VERSION="${VERSION}" + fi + done < <( strings "${FILE}" | grep -i ^CXXABI ) + + if [[ $( printf "%s\n%s" "${EXPECTED_CXXABI_VERSION}" "${CXXABI_VERSION}" | sort -V | tail -n1 ) == "${EXPECTED_CXXABI_VERSION}" ]]; then + echo "File ${FILE} has dependency on ABI ${CXXABI_VERSION} <= ${EXPECTED_CXXABI_VERSION}" + else + echo "Error: File ${FILE} has dependency on ABI ${CXXABI_VERSION} > ${EXPECTED_CXXABI_VERSION}" + exit 1 + fi +done diff --git a/build/linux/verify_cxx11_requirements.sh b/build/linux/verify_cxx11_requirements.sh new file mode 100755 index 00000000000..eb5ad2ffd0a --- /dev/null +++ b/build/linux/verify_cxx11_requirements.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +set -e + +FILES=$( find "${SEARCH_PATH}" -name "*.node" -not -path "*prebuilds*" -not -path "*extensions/node_modules/@parcel/watcher*" ) + +echo "Verifying requirements for files: ${FILES}" + +for FILE in ${FILES}; do + if [[ -n "$( strings "${FILE}" | grep cxx11 | tail -n1 )" ]]; then + echo "Error: File ${FILE} has dependency on CXX11" + exit 1 + fi +done diff --git a/build/windows/appx/build.sh b/build/windows/appx/build.sh new file mode 100755 index 00000000000..1cd450f3742 --- /dev/null +++ b/build/windows/appx/build.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +set -ex + +# Add Windows SDK to path +SDK='/C/Program Files (x86)/Windows Kits/10/bin/10.0.26100.0/x64' +export PATH="${SDK}:${PATH}" + +APPX_NAME="${BINARY_NAME//-/_}" + +makeappx pack /d "../../../VSCode-win32-${VSCODE_ARCH}/appx/manifest" /p "../../../VSCode-win32-${VSCODE_ARCH}/appx/${APPX_NAME}_${VSCODE_ARCH}.appx" /nv + +# Remove the raw manifest folder +rm -rf "../../../VSCode-win32-${VSCODE_ARCH}/appx/manifest" diff --git a/build/windows/package.sh b/build/windows/package.sh index 83f927da295..4afa57f8518 100755 --- a/build/windows/package.sh +++ b/build/windows/package.sh @@ -13,17 +13,24 @@ cd vscode || { echo "'vscode' dir not found"; exit 1; } for i in {1..5}; do # try 5 times npm ci && break - if [[ $i -eq 3 ]]; then + if [[ $i == 5 ]]; then echo "Npm install failed too many times" >&2 exit 1 fi echo "Npm install failed $i, trying again..." done -node build/azure-pipelines/distro/mixin-npm +node build/azure-pipelines/distro/mixin-npm.ts + +# delete native files built in the `compile` step +find .build/extensions -type f -name '*.node' -print -delete . ../build/windows/rtf/make.sh +# generate Group Policy definitions +npm run copy-policy-dto --prefix build +node build/lib/policies/policyGenerator.ts build/lib/policies/policyData.jsonc win32 + npm run gulp "vscode-win32-${VSCODE_ARCH}-min-ci" . ../build_cli.sh diff --git a/build_cli.sh b/build_cli.sh index d84c04c987c..746f27b2d9f 100755 --- a/build_cli.sh +++ b/build_cli.sh @@ -32,6 +32,8 @@ if [[ "${OS_NAME}" == "osx" ]]; then export OPENSSL_LIB_DIR="$(pwd)/openssl/out/${VSCODE_ARCH}-osx/lib" export OPENSSL_INCLUDE_DIR="$(pwd)/openssl/out/${VSCODE_ARCH}-osx/include" + rustup target add "${VSCODE_CLI_TARGET}" + cargo build --release --target "${VSCODE_CLI_TARGET}" --bin=code cp "target/${VSCODE_CLI_TARGET}/release/code" "../../VSCode-darwin-${VSCODE_ARCH}/${NAME_SHORT}.app/Contents/Resources/app/bin/${TUNNEL_APPLICATION_NAME}" diff --git a/check_tags.sh b/check_tags.sh index 30d37d65828..6973d21591b 100755 --- a/check_tags.sh +++ b/check_tags.sh @@ -302,7 +302,7 @@ elif [[ "${ASSETS}" != "null" ]]; then export SHOULD_BUILD_APPIMAGE="no" - if [[ -z $( contains "${APP_NAME_LC}-cli-linux-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" ) ]]; then + if [[ -z $( contains "${APP_NAME_LC}-cli-linux-arm64-${RELEASE_VERSION}.tar.gz" ) ]]; then echo "Building on Linux arm64 because we have no CLI archive" export SHOULD_BUILD="yes" else @@ -354,7 +354,7 @@ elif [[ "${ASSETS}" != "null" ]]; then export SHOULD_BUILD_APPIMAGE="no" - if [[ -z $( contains "${APP_NAME_LC}-cli-linux-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" ) ]]; then + if [[ -z $( contains "${APP_NAME_LC}-cli-linux-armhf-${RELEASE_VERSION}.tar.gz" ) ]]; then echo "Building on Linux arm because we have no CLI archive" export SHOULD_BUILD="yes" else @@ -551,7 +551,7 @@ elif [[ "${ASSETS}" != "null" ]]; then export SHOULD_BUILD_REH_WEB="no" fi - if [[ -z $( contains "${APP_NAME_LC}-cli-linux-${VSCODE_ARCH}-${RELEASE_VERSION}.tar.gz" ) ]]; then + if [[ -z $( contains "${APP_NAME_LC}-cli-linux-x64-${RELEASE_VERSION}.tar.gz" ) ]]; then echo "Building on Linux x64 because we have no CLI archive" export SHOULD_BUILD="yes" else diff --git a/dev/build.sh b/dev/build.sh index 2ac69b02dfb..d8e56e9869a 100755 --- a/dev/build.sh +++ b/dev/build.sh @@ -115,6 +115,10 @@ if [[ "${SKIP_BUILD}" == "no" ]]; then git add . git reset -q --hard HEAD + while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do + git reset -q --hard HEAD~ + done + rm -rf .build out* cd .. diff --git a/dev/patch.sh b/dev/patch.sh index 9ea19cd7be1..63d5bf5f3e7 100755 --- a/dev/patch.sh +++ b/dev/patch.sh @@ -2,7 +2,19 @@ set -e -echo "$#" +normalize_file() { + if [[ "${1}" == *patch ]]; then + FILE="${1}" + else + FILE="${1}.patch" + fi + + if [[ "${FILE}" == patches/* ]]; then + FILE="../${FILE}" + else + FILE="../patches/${FILE}" + fi +} cd vscode || { echo "'vscode' dir not found"; exit 1; } @@ -13,30 +25,28 @@ while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do git reset -q --hard HEAD~ done -git apply --reject "../patches/helper/settings.patch" +normalize_file "${1}" -while [ $# -gt 1 ]; do - echo "Parameter: $1" - if [[ "${1}" == *patch ]]; then - FILE="../patches/${1}" - else - FILE="../patches/${1}.patch" - fi +if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then + git apply --reject "../patches/helper/settings.patch" - git apply --reject "${FILE}" + while [ $# -gt 1 ]; do + echo "Parameter: $1" + normalize_file "${1}" - shift -done + git apply --reject "${FILE}" -git add . -git commit --no-verify -q -m "VSCODIUM HELPER" + shift + done -if [[ "${1}" == *patch ]]; then - FILE="../patches/${1}" -else - FILE="../patches/${1}.patch" + git add . + git commit --no-verify -q -m "VSCODIUM HELPER" + + normalize_file "${1}" fi +echo "FILE: ${FILE}" + if [[ -f "${FILE}" ]]; then if [[ -f "${FILE}.bak" ]]; then mv -f $FILE{.bak,} @@ -47,8 +57,18 @@ fi read -rp "Press any key when the conflict have been resolved..." -n1 -s +while [[ -n "$( find . -name '*.rej' -print )" ]]; do + echo + read -rp "Press any key when the conflict have been resolved..." -n1 -s +done + git add . git diff --staged -U1 > "${FILE}" -git reset -q --hard HEAD~ + +if [[ "${FILE}" != "../patches/helper/settings.patch" ]]; then + git reset -q --hard HEAD +else + git reset -q --hard HEAD~ +fi echo "The patch has been generated." diff --git a/dev/update_api.sh b/dev/update_api.sh index 3351b188e95..03337745ff1 100755 --- a/dev/update_api.sh +++ b/dev/update_api.sh @@ -14,7 +14,6 @@ while getopts ":i" opt; do esac done - URL=$( curl -s "https://update.code.visualstudio.com/api/update/win32-x64-archive/${VSCODE_QUALITY}/0000000000000000000000000000000000000000" | jq -c '.url' | sed -E 's/.*"([^"]+)".*/\1/' ) # echo "url: ${URL}" FILE="${URL##*/}" @@ -30,10 +29,17 @@ if [[ ! -d "${DIRECTORY}" ]]; then unzip "${FILE}" -d "${DIRECTORY}" fi -APIS=$( jq -r '.extensionEnabledApiProposals' "${DIRECTORY}/resources/app/product.json" ) +BIN_PATH=$(find "${DIRECTORY}/bin" -type f ! -name "*.*") + +LINE="$( grep -E '^[[:space:]]*(export[[:space:]]+)?VERSIONFOLDER[[:space:]]*=' "$BIN_PATH" | tail -n1 )" +VERSIONFOLDER="${LINE#*=}" +VERSIONFOLDER="${VERSIONFOLDER#\"}" +VERSIONFOLDER="${VERSIONFOLDER%\"}" +APIS=$( jq -r '.extensionEnabledApiProposals' "${DIRECTORY}/${VERSIONFOLDER}/resources/app/product.json" ) APIS=$( echo "${APIS}" | jq '. += {"jeanp413.open-remote-ssh": ["resolvers", "tunnels", "terminalDataWriteEvent", "contribRemoteHelp", "contribViewsRemote"]}' ) APIS=$( echo "${APIS}" | jq '. += {"jeanp413.open-remote-wsl": ["resolvers", "contribRemoteHelp", "contribViewsRemote"]}' ) +echo "$( jq --argjson v "${APIS}" 'setpath(["extensionEnabledApiProposals"]; $v)' product.json )" > product.json -jsonTmp=$( jq --argjson v "${APIS}" 'setpath(["extensionEnabledApiProposals"]; $v)' product.json ) -echo "${jsonTmp}" > product.json && unset jsonTmp +APIS=$( jq -r '.extensionsEnabledWithApiProposalVersion' "${DIRECTORY}/${VERSIONFOLDER}/resources/app/product.json" ) +echo "$( jq --argjson v "${APIS}" 'setpath(["extensionsEnabledWithApiProposalVersion"]; $v)' product.json )" > product.json diff --git a/dev/update_patches.sh b/dev/update_patches.sh index 145c92455c4..45dd1e1994b 100755 --- a/dev/update_patches.sh +++ b/dev/update_patches.sh @@ -12,6 +12,75 @@ while getopts ":i" opt; do esac done +generate_rejects() { + local PATCH_FILE="$1" + + if ! command -v python3 >/dev/null 2>&1; then + echo "python3 not found; cannot create reject files for ${PATCH_FILE}" + return 1 + fi + + PATCH_FOR_REJECT="${PATCH_FILE}" python3 <<'PY' +import os +import pathlib +import re +import subprocess + + +def chunk_needs_reject(raw_chunk: str) -> bool: + """Return True when a patch chunk cannot be applied nor reversed.""" + + chunk = raw_chunk if raw_chunk.endswith("\n") else raw_chunk + "\n" + + def _run_git(extra_args): + return subprocess.run( + ["git", "apply", "--check", "--ignore-whitespace", *extra_args], + input=chunk, + text=True, + capture_output=True, + ) + + forward = _run_git([]) + if forward.returncode == 0: + return False + + reverse = _run_git(["--reverse"]) + if reverse.returncode == 0: + return False + + return True + +patch_path = os.environ["PATCH_FOR_REJECT"] +with open(patch_path, "r", encoding="utf-8", errors="ignore") as src: + content = src.read() + +chunks = re.split(r'(?m)^diff --git ', content) +for chunk in chunks: + chunk = chunk.strip() + if not chunk: + continue + chunk = "diff --git " + chunk + match = re.search(r'^diff --git a/(.*?) b/(.*?)$', chunk, re.MULTILINE) + if not match: + continue + a_path, b_path = match.groups() + candidate = b_path if b_path != "/dev/null" else a_path + if candidate in ("/dev/null", ""): + continue + if candidate.startswith("../") or candidate.startswith("..\\") or candidate.startswith("/"): + continue + dest = pathlib.Path(candidate + ".rej") + if not chunk_needs_reject(chunk): + continue + dest.parent.mkdir(parents=True, exist_ok=True) + with dest.open("w", encoding="utf-8") as fh: + fh.write(chunk) + if not chunk.endswith("\n"): + fh.write("\n") + print(f"generated reject: {dest}") +PY +} + check_file() { while [ $# -gt 1 ]; do git apply --reject "${1}" @@ -24,21 +93,43 @@ check_file() { fi if [[ -f "${1}" ]]; then + git apply --reject "../patches/helper/settings.patch" + git add . + git commit --no-verify -q -m "VSCODIUM HELPER" + echo applying patch: "${1}" + if ! git apply --ignore-whitespace "${1}"; then echo failed to apply patch "${1}" - git apply --reject "${1}" - git apply --reject "../patches/helper/settings.patch" + git apply --reject --verbose "${1}" + + if [[ -z "$( find . -name '*.rej' -print )" ]]; then + echo "no .rej generated by git; creating fallback rejects for ${1}" - read -rp "Press any key when the conflict have been resolved..." -n1 -s + if ! generate_rejects "${1}"; then + echo "failed to generate reject files for ${1}" + exit 1 + fi + + if [[ -z "$( find . -name '*.rej' -print )" ]]; then + echo "still no .rej after attempting to create them for ${1}" + exit 1 + fi + fi + + while [[ -n "$( find . -name '*.rej' -print )" ]]; do + read -rp "Press any key when the conflict have been resolved..." -n1 -s + echo + done git restore .vscode/settings.json git add . git diff --staged -U1 > "${1}" fi + git add . - git reset -q --hard HEAD + git reset -q --hard HEAD~ fi } @@ -47,8 +138,16 @@ cd vscode || { echo "'vscode' dir not found"; exit 1; } git add . git reset -q --hard HEAD +while [[ -n "$( git log -1 | grep "VSCODIUM HELPER" )" ]]; do + git reset -q --hard HEAD~ +done + for FILE in ../patches/*.patch; do - check_file "${FILE}" + if [[ "${FILE}" == *"/fix-policies.patch" ]]; then + check_file "../patches/fix-keymap.patch" "../patches/fix-policies.patch" + else + check_file "${FILE}" + fi done if [[ "${VSCODE_QUALITY}" == "insider" ]]; then @@ -59,7 +158,7 @@ fi for ARCH in alpine linux osx windows; do for FILE in "../patches/${ARCH}/"*.patch; do - if [[ "${ARCH}" == "linux" && "${FILE}" == *"/arch-"* ]] || [[ "${ARCH}" == "windows" && "${FILE}" == *"/cli"* ]]; then + if [[ "${ARCH}" == "linux" && "${FILE}" == *"/arch-"* ]] || [[ "${ARCH}" == "linux" && "${FILE}" == *"/fix-dependencies.patch" ]] || [[ "${ARCH}" == "windows" && "${FILE}" == *"/cli"* ]]; then echo "skip ${FILE}" else check_file "${FILE}" @@ -67,6 +166,8 @@ for ARCH in alpine linux osx windows; do done if [[ "${ARCH}" == "linux" ]]; then + check_file "../patches/optional-tree-sitter.patch" "../patches/linux/fix-dependencies.patch" + check_file "../patches/cli.patch" "../patches/linux/arch-0-support.patch" check_file "../patches/cli.patch" "../patches/linux/arch-0-support.patch" "../patches/linux/arch-1-ppc64le.patch" check_file "../patches/cli.patch" "../patches/linux/arch-0-support.patch" "../patches/linux/arch-1-ppc64le.patch" "../patches/linux/arch-2-riscv64.patch" diff --git a/docs/ext-github-copilot.md b/docs/ext-github-copilot.md new file mode 100644 index 00000000000..05bf3c4bac1 --- /dev/null +++ b/docs/ext-github-copilot.md @@ -0,0 +1,22 @@ + + +# Extension: GitHub Copilot + +Unlike Visual Studio Code, in VSCodium, Copilot features are disabled and not configured. + +## Update your settings + +In your settings, sets: +``` +"chat.disableAIFeatures": false, +``` + +## Configure product.json + +You need to create a custom `product.json` at the following location (replace `VSCodium` by `VSCodium - Insiders` if you use that): +- Windows: `%APPDATA%\VSCodium` or `%USERPROFILE%\AppData\Roaming\VSCodium` +- macOS: `~/Library/Application Support/VSCodium` +- Linux: `$XDG_CONFIG_HOME/VSCodium` or `~/.config/VSCodium` + +Then you will need to follow the guide [Running with Code OSS](https://github.com/microsoft/vscode-copilot-chat/blob/main/CONTRIBUTING.md#running-with-code-oss) with the `product.json` file created previously. +You will need to add the properties: `trustedExtensionAuthAccess` and `defaultChatAgent`. diff --git a/docs/extensions-compatibility.md b/docs/extensions-compatibility.md index 2e7d641924f..5bd5a8f7168 100644 --- a/docs/extensions-compatibility.md +++ b/docs/extensions-compatibility.md @@ -9,9 +9,8 @@ - [C/C++](#cc) - [Python](#python) - [Remote](#remote) -- [Beyond](#beyond) -## Incompatibility +## Incompatibility Most MS extensions are limited to run on only MS products by their license and by running additional checks in their proprietary code. @@ -30,24 +29,22 @@ The following extensions are not compatible with Codex due to their licensing: - [Remote - SSH: Editing Configuration Files](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh-edit) - [Remote - WSL](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl) -## Replacements +## Replacements The following extensions are functional replacements for incompatible extensions: -### C/C++ +### C/C++ -- [clangd](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd) +- [clangd](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd) for full featured editing (including IntelliSense) +- [Native Debug](https://open-vsx.org/extension/webfreak/debug) for Debugging with GDB + LLDB + Note that there are many working debugging extensions and specialized ones including for microcontrollers. -### Python +### Python - [BasedPyright](https://open-vsx.org/extension/detachhead/basedpyright) -### Remote +### Remote Development - [Open Remote - SSH](https://open-vsx.org/extension/jeanp413/open-remote-ssh) > SSH server must be configured with the setting `AllowTcpForwarding yes`. - [Open Remote - WSL](https://open-vsx.org/extension/jeanp413/open-remote-wsl) - -## Beyond - -[VSIX Manager](https://github.com/zokugun/vscode-vsix-manager) allows you to be able install extensions from multiple sources. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 31a20179485..f09e7371c58 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -10,6 +10,7 @@ - [Global menu workaround for KDE](#linux-kde-global-menu) - [Flatpak most common issues](#linux-flatpak-most-common-issues) - [Remote SSH doesn't work](#linux-remote-ssh) + - [The window doesn't show up](#linux-no-window) ## Linux @@ -70,3 +71,10 @@ Use the Codex's compatible extension [Open Remote - SSH](https://open-vsx.org/ex On the server, in the `sshd` config, `AllowTcpForwarding` need to be set to `yes`. It might requires additional dependencies due to the OS/distro (alpine). + +### *The window doesn't show up* + +If you are under Wayland: +- try the command `codium --verbose` +- if you see an error like `:ERROR:ui/gl/egl_util.cc:92] EGL Driver message (Error) eglCreateContext: Requested version is not supported` +- try `codium --ozone-platform=x11` diff --git a/install_gh.sh b/install_gh.sh deleted file mode 100755 index 08cbc6d5d42..00000000000 --- a/install_gh.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -GH_ARCH="amd64" - -TAG=$( curl --retry 12 --retry-delay 30 "https://api.github.com/repos/cli/cli/releases/latest" | jq --raw-output '.tag_name' ) -VERSION=${TAG#v} - -curl --retry 12 --retry-delay 120 -sSL "https://github.com/cli/cli/releases/download/${TAG}/gh_${VERSION}_linux_${GH_ARCH}.tar.gz" -o "gh_${VERSION}_linux_${GH_ARCH}.tar.gz" - -tar xf "gh_${VERSION}_linux_${GH_ARCH}.tar.gz" - -cp "gh_${VERSION}_linux_${GH_ARCH}/bin/gh" /usr/local/bin/ - -gh --version diff --git a/patches/add-remote-url.patch b/patches/add-remote-url.patch index 9bf5306d0f9..3e86344416c 100644 --- a/patches/add-remote-url.patch +++ b/patches/add-remote-url.patch @@ -1,18 +1,18 @@ -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index c1d64c0..3e60e80 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -321,3 +321,3 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index cb1a0a5..dacedc3 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -323,3 +323,3 @@ function packageTask(type: string, platform: string, arch: string, sourceFolderN const productJsonStream = gulp.src(['product.json'], { base: '.' }) -- .pipe(json({ commit, date: readISODate('out-build'), version })) -+ .pipe(json({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) +- .pipe(jsonEditor({ commit, date: readISODate('out-build'), version })) ++ .pipe(jsonEditor({ commit, date: readISODate('out-build'), version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) .pipe(es.through(function (file) { -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 7046ee0..9aa7bb0 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -288,3 +288,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index d3ab651..1000abc 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -272,3 +272,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d const productJsonStream = gulp.src(['product.json'], { base: '.' }) -- .pipe(json({ commit, date: readISODate('out-build'), checksums, version })) -+ .pipe(json({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) +- .pipe(jsonEditor({ commit, date: readISODate('out-build'), checksums, version })) ++ .pipe(jsonEditor({ commit, date: readISODate('out-build'), checksums, version, serverDownloadUrlTemplate: 'https://github.com/!!ASSETS_REPOSITORY!!/releases/download/!!RELEASE_VERSION!!/!!APP_NAME_LC!!-reh-${os}-${arch}-!!RELEASE_VERSION!!.tar.gz' })) .pipe(es.through(function (file) { diff --git a/patches/alpine/reh/fix-node-docker.patch b/patches/alpine/reh/fix-node-docker.patch index 27a7fb50972..537466814fc 100644 --- a/patches/alpine/reh/fix-node-docker.patch +++ b/patches/alpine/reh/fix-node-docker.patch @@ -1,9 +1,9 @@ -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index e12a33e..9300d62 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -188,5 +188,16 @@ function getNodeChecksum(expectedName) { - function extractAlpinefromDocker(nodeVersion, platform, arch) { +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index cb1a0a5..375851e 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -159,5 +159,16 @@ function getNodeChecksum(expectedName: string): string | undefined { + function extractAlpinefromDocker(nodeVersion: string, platform: string, arch: string) { - const imageName = arch === 'arm64' ? 'arm64v8/node' : 'node'; + let imageName = 'node'; + let dockerPlatform = ''; @@ -19,5 +19,5 @@ index e12a33e..9300d62 100644 + log(`Downloading node.js ${nodeVersion} ${platform} ${arch} from docker image ${imageName}`); - const contents = cp.execSync(`docker run --rm ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); -+ const contents = cp.execSync(`docker run --rm ${dockerPlatform} ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 100 * 1024 * 1024, encoding: 'buffer' }); - return es.readArray([new File({ path: 'node', contents, stat: { mode: parseInt('755', 8) } })]); ++ const contents = cp.execSync(`docker run --rm ${dockerPlatform} ${imageName}:${nodeVersion}-alpine /bin/sh -c 'cat \`which node\`'`, { maxBuffer: 200 * 1024 * 1024, encoding: 'buffer' }); + // eslint-disable-next-line local/code-no-dangerous-type-assertions diff --git a/patches/binary-name.patch b/patches/binary-name.patch index fadbbc372eb..b8214dfd3cd 100644 --- a/patches/binary-name.patch +++ b/patches/binary-name.patch @@ -1,22 +1,22 @@ -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 7046ee0..faca888 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -376,3 +376,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index d3ab651..63cd71f 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -369,3 +369,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d .pipe(replace('@@APPNAME@@', product.applicationName)) - .pipe(rename('bin/code')); + .pipe(rename('bin/' + product.applicationName)); const policyDest = gulp.src('.build/policies/darwin/**', { base: '.build/policies/darwin' }) diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts -index 6324e98..3d2fba3 100644 +index 2c3b710..8041f08 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts -@@ -445,3 +445,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain +@@ -503,3 +503,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain private async getShellCommandLink(): Promise<{ readonly source: string; readonly target: string }> { - const target = resolve(this.environmentMainService.appRoot, 'bin', 'code'); + const target = resolve(this.environmentMainService.appRoot, 'bin', this.productService.applicationName); const source = `/usr/local/bin/${this.productService.applicationName}`; -@@ -680,3 +680,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain +@@ -772,3 +772,3 @@ export class NativeHostMainService extends Disposable implements INativeHostMain if (this.environmentMainService.isBuilt) { - return join(this.environmentMainService.appRoot, 'bin', 'code'); + return join(this.environmentMainService.appRoot, 'bin', `${this.productService.applicationName}`); diff --git a/patches/brand.patch b/patches/brand.patch index ec6ec256c1e..d21e506c5f2 100644 --- a/patches/brand.patch +++ b/patches/brand.patch @@ -62,48 +62,48 @@ index 1be4d0e..647b147 100644 -export const redundantImplicitActivationEvent = l10n.t("This activation event can be removed as VS Code generates these automatically from your package.json contribution declarations."); +export const redundantImplicitActivationEvent = l10n.t("This activation event can be removed as !!APP_NAME!! generates these automatically from your package.json contribution declarations."); diff --git a/extensions/extension-editing/src/extensionLinter.ts b/extensions/extension-editing/src/extensionLinter.ts -index be7eea1..0737bab 100644 +index 187100b..7514367 100644 --- a/extensions/extension-editing/src/extensionLinter.ts +++ b/extensions/extension-editing/src/extensionLinter.ts @@ -34,4 +34,4 @@ const relativeUrlRequiresHttpsRepository = l10n.t("Relative image URLs require a const relativeBadgeUrlRequiresHttpsRepository = l10n.t("Relative badge URLs require a repository with HTTPS protocol to be specified in this package.json."); -const apiProposalNotListed = l10n.t("This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the VS Code team."); --const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75 as VS Code will generate these automatically from your package.json contribution declarations."); +-const bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75.0 as VS Code will generate these automatically from your package.json contribution declarations."); +const apiProposalNotListed = l10n.t("This proposal cannot be used because for this extension the product defines a fixed set of API proposals. You can test your extension but before publishing you MUST reach out to the !!APP_NAME!! team."); -+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 bumpEngineForImplicitActivationEvents = l10n.t("This activation event can be removed for extensions targeting engine version ^1.75.0 as !!APP_NAME!! will generate these automatically from your package.json contribution declarations."); const starActivation = l10n.t("Using '*' activation is usually a bad idea as it impacts performance."); diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json -index 403f704..2f838cd 100644 +index c883415..b3552db 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json -@@ -228,3 +228,3 @@ +@@ -247,3 +247,3 @@ "{Locked='](command:git.showOutput'}", - "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for !!APP_NAME!!", "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" -@@ -256,4 +256,4 @@ +@@ -275,4 +275,4 @@ "config.showCommitInput": "Controls whether to show the commit input in the Git source control panel.", - "config.terminalAuthentication": "Controls whether to enable VS Code to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.", - "config.terminalGitEditor": "Controls whether to enable VS Code to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.", + "config.terminalAuthentication": "Controls whether to enable !!APP_NAME!! to be the authentication handler for Git processes spawned in the Integrated Terminal. Note: Terminals need to be restarted to pick up a change in this setting.", + "config.terminalGitEditor": "Controls whether to enable !!APP_NAME!! to be the Git editor for Git processes spawned in the integrated terminal. Note: Terminals need to be restarted to pick up a change in this setting.", "config.timeline.showAuthor": "Controls whether to show the commit author in the Timeline view.", -@@ -324,3 +324,3 @@ +@@ -346,3 +346,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" -@@ -334,3 +334,3 @@ +@@ -356,3 +356,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" -@@ -344,3 +344,3 @@ +@@ -366,3 +366,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" -@@ -356,6 +356,6 @@ +@@ -378,6 +378,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 403f704..2f838cd 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" -@@ -364,6 +364,6 @@ +@@ -386,6 +386,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 403f704..2f838cd 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" -@@ -372,6 +372,6 @@ +@@ -394,6 +394,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 403f704..2f838cd 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" -@@ -380,6 +380,6 @@ +@@ -402,6 +402,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 403f704..2f838cd 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" -@@ -388,6 +388,6 @@ +@@ -410,6 +410,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 403f704..2f838cd 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" -@@ -406,3 +406,3 @@ +@@ -428,3 +428,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" -@@ -415,3 +415,3 @@ +@@ -437,3 +437,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" -@@ -423,3 +423,3 @@ +@@ -445,3 +445,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" -@@ -431,3 +431,3 @@ +@@ -453,3 +453,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" -@@ -436,6 +436,6 @@ +@@ -458,6 +458,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 403f704..2f838cd 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" -@@ -444,6 +444,6 @@ +@@ -466,6 +466,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 403f704..2f838cd 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" -@@ -455,3 +455,3 @@ +@@ -477,3 +477,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" -@@ -459,3 +459,3 @@ +@@ -481,3 +481,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)." @@ -232,16 +232,16 @@ index 789a579..12e230e 100644 + "displayName": "Grunt support for !!APP_NAME!!", "config.grunt.autoDetect": "Controls enablement of Grunt task detection. Grunt task detection can cause files in any open workspace to be executed.", diff --git a/extensions/html-language-features/client/src/htmlClient.ts b/extensions/html-language-features/client/src/htmlClient.ts -index 6e66f8d..7c86a69 100644 +index 54fc914..77fa09d 100644 --- a/extensions/html-language-features/client/src/htmlClient.ts +++ b/extensions/html-language-features/client/src/htmlClient.ts -@@ -108,3 +108,3 @@ export async function startClient(context: ExtensionContext, newLanguageClient: +@@ -109,3 +109,3 @@ export async function startClient(context: ExtensionContext, newLanguageClient: const configure = l10n.t('Configure'); - const res = await window.showInformationMessage(l10n.t('VS Code now has built-in support for auto-renaming tags. Do you want to enable it?'), configure); + const res = await window.showInformationMessage(l10n.t('!!APP_NAME!! now has built-in support for auto-renaming tags. Do you want to enable it?'), configure); if (res === configure) { diff --git a/extensions/html-language-features/package.nls.json b/extensions/html-language-features/package.nls.json -index f36ecf3..0d795cb 100644 +index d839070..b3ea638 100644 --- a/extensions/html-language-features/package.nls.json +++ b/extensions/html-language-features/package.nls.json @@ -3,3 +3,3 @@ @@ -249,8 +249,8 @@ index f36ecf3..0d795cb 100644 - "html.customData.desc": "A list of relative file paths pointing to JSON files following the [custom data format](https://github.com/microsoft/vscode-html-languageservice/blob/master/docs/customData.md).\n\nVS Code loads custom data on startup to enhance its HTML support for the custom HTML tags, attributes and attribute values you specify in the JSON files.\n\nThe file paths are relative to workspace and only workspace folder settings are considered.", + "html.customData.desc": "A list of relative file paths pointing to JSON files following the [custom data format](https://github.com/microsoft/vscode-html-languageservice/blob/master/docs/customData.md).\n\n!!APP_NAME!! loads custom data on startup to enhance its HTML support for the custom HTML tags, attributes and attribute values you specify in the JSON files.\n\nThe file paths are relative to workspace and only workspace folder settings are considered.", "html.format.enable.desc": "Enable/disable default HTML formatter.", -@@ -25,3 +25,3 @@ - "html.suggest.html5.desc": "Controls whether the built-in HTML language support suggests HTML5 tags, properties and values.", +@@ -26,3 +26,3 @@ + "html.suggest.hideEndTagSuggestions.desc": "Controls whether the built-in HTML language support suggests closing tags. When disabled, end tag completions like `` will not be shown.", - "html.trace.server.desc": "Traces the communication between VS Code and the HTML language server.", + "html.trace.server.desc": "Traces the communication between !!APP_NAME!! and the HTML language server.", "html.validate.scripts": "Controls whether the built-in HTML language support validates embedded scripts.", @@ -275,7 +275,7 @@ index e82030e..ac999f6 100644 + "displayName": "Jake support for !!APP_NAME!!", "jake.taskDefinition.type.description": "The Jake task to customize.", diff --git a/extensions/json-language-features/package.nls.json b/extensions/json-language-features/package.nls.json -index af6c9d8..36e64cf 100644 +index abc07c9..2a6de09 100644 --- a/extensions/json-language-features/package.nls.json +++ b/extensions/json-language-features/package.nls.json @@ -11,3 +11,3 @@ @@ -284,7 +284,7 @@ index af6c9d8..36e64cf 100644 + "json.tracing.desc": "Traces the communication between !!APP_NAME!! and the JSON language server.", "json.colorDecorators.enable.desc": "Enables or disables color decorators", diff --git a/extensions/markdown-language-features/package.nls.json b/extensions/markdown-language-features/package.nls.json -index fe98103..ca36e86 100644 +index 45df470..0957c55 100644 --- a/extensions/markdown-language-features/package.nls.json +++ b/extensions/markdown-language-features/package.nls.json @@ -22,3 +22,3 @@ @@ -307,34 +307,34 @@ index 920ced7..755a166 100644 + "description": "Provides !!APP_NAME!!'s built-in previews for images, audio, and video", "customEditor.audioPreview.displayName": "Audio Preview", diff --git a/extensions/media-preview/src/audioPreview.ts b/extensions/media-preview/src/audioPreview.ts -index 5058f7e..ee1283a 100644 +index 282d579..e3dfb4b 100644 --- a/extensions/media-preview/src/audioPreview.ts +++ b/extensions/media-preview/src/audioPreview.ts -@@ -82,3 +82,3 @@ class AudioPreview extends MediaPreview { +@@ -83,3 +83,3 @@ class AudioPreview extends MediaPreview {

${vscode.l10n.t("An error occurred while loading the audio file.")}

- ${vscode.l10n.t("Open file using VS Code's standard text/binary editor?")} + ${vscode.l10n.t("Open file using !!APP_NAME!!'s standard text/binary editor?")} diff --git a/extensions/media-preview/src/imagePreview/index.ts b/extensions/media-preview/src/imagePreview/index.ts -index b405cd6..8eafea3 100644 +index 6c2c8a7..064afc6 100644 --- a/extensions/media-preview/src/imagePreview/index.ts +++ b/extensions/media-preview/src/imagePreview/index.ts -@@ -209,3 +209,3 @@ class ImagePreview extends MediaPreview { +@@ -210,3 +210,3 @@ class ImagePreview extends MediaPreview {

${vscode.l10n.t("An error occurred while loading the image.")}

- ${vscode.l10n.t("Open file using VS Code's standard text/binary editor?")} + ${vscode.l10n.t("Open file using !!APP_NAME!!'s standard text/binary editor?")} diff --git a/extensions/media-preview/src/videoPreview.ts b/extensions/media-preview/src/videoPreview.ts -index 6701212..c9f9fb2 100644 +index 1cb74c5..3f5f892 100644 --- a/extensions/media-preview/src/videoPreview.ts +++ b/extensions/media-preview/src/videoPreview.ts -@@ -86,3 +86,3 @@ class VideoPreview extends MediaPreview { +@@ -87,3 +87,3 @@ class VideoPreview extends MediaPreview {

${vscode.l10n.t("An error occurred while loading the video file.")}

- ${vscode.l10n.t("Open file using VS Code's standard text/binary editor?")} + ${vscode.l10n.t("Open file using !!APP_NAME!!'s standard text/binary editor?")} diff --git a/extensions/notebook-renderers/package.json b/extensions/notebook-renderers/package.json -index d6ece35..547202f 100644 +index 77c042e..d262ee3 100644 --- a/extensions/notebook-renderers/package.json +++ b/extensions/notebook-renderers/package.json @@ -22,3 +22,3 @@ @@ -352,7 +352,7 @@ index 56a77ff..e9f32d1 100644 + "displayName": "NPM support for !!APP_NAME!!", "workspaceTrust": "This extension executes tasks, which require trust to run.", diff --git a/extensions/swift/syntaxes/swift.tmLanguage.json b/extensions/swift/syntaxes/swift.tmLanguage.json -index 7d6694c..83b2599 100644 +index a8bbe5d..00694dc 100644 --- a/extensions/swift/syntaxes/swift.tmLanguage.json +++ b/extensions/swift/syntaxes/swift.tmLanguage.json @@ -260,3 +260,3 @@ @@ -361,10 +361,10 @@ index 7d6694c..83b2599 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 44fa54e..e349c6e 100644 +index fb28b2a..788780a 100644 --- a/extensions/typescript-language-features/package.nls.json +++ b/extensions/typescript-language-features/package.nls.json -@@ -81,4 +81,4 @@ +@@ -82,4 +82,4 @@ "configuration.tsserver.experimental.enableProjectDiagnostics": "Enables project wide error reporting.", - "typescript.locale": "Sets the locale used to report JavaScript and TypeScript errors. Defaults to use VS Code's locale.", - "typescript.locale.auto": "Use VS Code's configured display language.", @@ -376,16 +376,15 @@ index 44fa54e..e349c6e 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.", -@@ -173,6 +173,6 @@ +@@ -173,5 +173,5 @@ "configuration.suggest.completeJSDocs": "Enable/disable suggestion to complete JSDoc comments.", - "configuration.tsserver.useVsCodeWatcher": "Use VS Code's file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", + "configuration.tsserver.useVsCodeWatcher": "Use !!APP_NAME!!'s file watchers instead of TypeScript's. Requires using TypeScript 5.4+ in the workspace.", - "configuration.tsserver.useVsCodeWatcher.deprecation": "Please use the `#typescript.tsserver.watchOptions#` setting instead.", "configuration.tsserver.watchOptions": "Configure which watching strategies should be used to keep track of files and directories.", - "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.", -@@ -227,6 +227,6 @@ +@@ -225,6 +225,6 @@ "configuration.suggest.objectLiteralMethodSnippets.enabled": "Enable/disable snippet completions for methods in object literals.", - "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that VS Code is running in a trusted context.", + "configuration.tsserver.web.projectWideIntellisense.enabled": "Enable/disable project-wide IntelliSense on web. Requires that !!APP_NAME!! is running in a trusted context.", @@ -394,7 +393,7 @@ index 44fa54e..e349c6e 100644 - "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want VS Code to detect a Node installation.", + "configuration.tsserver.nodePath": "Run TS Server on a custom Node installation. This can be a path to a Node executable, or 'node' if you want !!APP_NAME!! to detect a Node installation.", "configuration.updateImportsOnPaste": "Automatically update imports when pasting code. Requires TypeScript 5.6+.", -@@ -242,7 +242,7 @@ +@@ -240,7 +240,7 @@ "walkthroughs.nodejsWelcome.debugJsFile.title": "Run and Debug your JavaScript", - "walkthroughs.nodejsWelcome.debugJsFile.description": "Once you've installed Node.js, you can run JavaScript programs at a terminal by entering ``node your-file-name.js``\nAnother easy way to run Node.js programs is by using VS Code's debugger which lets you run your code, pause at different points, and help you understand what's going on step-by-step.\n[Start Debugging](command:javascript-walkthrough.commands.debugJsFile)", - "walkthroughs.nodejsWelcome.debugJsFile.altText": "Debug and run your JavaScript code in Node.js with Visual Studio Code.", @@ -407,16 +406,16 @@ index 44fa54e..e349c6e 100644 + "walkthroughs.nodejsWelcome.learnMoreAboutJs.altText": "Learn more about JavaScript and Node.js in !!APP_NAME!!." } diff --git a/extensions/typescript-language-features/src/tsServer/versionManager.ts b/extensions/typescript-language-features/src/tsServer/versionManager.ts -index 43a2413..ba7934f 100644 +index dcfee49..35e9ef3 100644 --- a/extensions/typescript-language-features/src/tsServer/versionManager.ts +++ b/extensions/typescript-language-features/src/tsServer/versionManager.ts -@@ -100,3 +100,3 @@ export class TypeScriptVersionManager extends Disposable { +@@ -111,3 +111,3 @@ export class TypeScriptVersionManager extends Disposable { ? '• ' - : '') + vscode.l10n.t("Use VS Code's Version"), + : '') + vscode.l10n.t("Use !!APP_NAME!!'s Version"), description: bundledVersion.displayName, diff --git a/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts b/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts -index 239519e..5e58d4d 100644 +index 12cb1cc..bfaa57e 100644 --- a/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts +++ b/extensions/typescript-language-features/src/tsServer/versionProvider.electron.ts @@ -70,3 +70,3 @@ export class DiskTypeScriptVersionProvider implements ITypeScriptVersionProvider @@ -425,35 +424,35 @@ index 239519e..5e58d4d 100644 + vscode.window.showErrorMessage(vscode.l10n.t("!!APP_NAME!!\'s tsserver was deleted by another application such as a misbehaving virus detection tool. Please reinstall !!APP_NAME!!.")); throw new Error('Could not find bundled tsserver.js'); diff --git a/extensions/typescript-language-features/src/tsconfig.ts b/extensions/typescript-language-features/src/tsconfig.ts -index 01a88a4..1fdc86e 100644 +index 9905fd5..62c2e3c 100644 --- a/extensions/typescript-language-features/src/tsconfig.ts +++ b/extensions/typescript-language-features/src/tsconfig.ts -@@ -155,3 +155,3 @@ export async function openProjectConfigForFile( +@@ -159,3 +159,3 @@ export async function openProjectConfigForFile( vscode.window.showInformationMessage( - vscode.l10n.t("Please open a folder in VS Code to use a TypeScript or JavaScript project")); + vscode.l10n.t("Please open a folder in !!APP_NAME!! to use a TypeScript or JavaScript project")); return; diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts -index 4201d6d..ded6803 100644 +index 207698d..9948527 100644 --- a/extensions/typescript-language-features/src/typescriptServiceClient.ts +++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts -@@ -653,3 +653,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType +@@ -661,3 +661,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType prompt = vscode.window.showErrorMessage( - vscode.l10n.t("The JS/TS language service immediately crashed 5 times. The service will not be restarted.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against VS Code.", pluginExtensionList)); + vscode.l10n.t("The JS/TS language service immediately crashed 5 times. The service will not be restarted.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { -@@ -674,3 +674,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType +@@ -682,3 +682,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType prompt = vscode.window.showWarningMessage( - vscode.l10n.t("The JS/TS language service crashed 5 times in the last 5 Minutes.\nThis may be caused by a plugin contributed by one of these extensions: {0}\nPlease try disabling these extensions before filing an issue against VS Code.", pluginExtensionList)); + vscode.l10n.t("The JS/TS language service crashed 5 times in the last 5 Minutes.\nThis may be caused by a plugin contributed by one of these extensions: {0}\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { -@@ -688,3 +688,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType +@@ -696,3 +696,3 @@ export default class TypeScriptServiceClient extends Disposable implements IType prompt = vscode.window.showWarningMessage( - vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against VS Code.", pluginExtensionList)); + vscode.l10n.t("The JS/TS language service crashed.\nThis may be caused by a plugin contributed by one of these extensions: {0}.\nPlease try disabling these extensions before filing an issue against !!APP_NAME!!.", pluginExtensionList)); } else { diff --git a/extensions/vscode-api-tests/package.json b/extensions/vscode-api-tests/package.json -index 0d7f87a..6b72fec 100644 +index 3f586a8..ece1d67 100644 --- a/extensions/vscode-api-tests/package.json +++ b/extensions/vscode-api-tests/package.json @@ -2,3 +2,3 @@ @@ -462,7 +461,7 @@ index 0d7f87a..6b72fec 100644 + "description": "API tests for !!APP_NAME!!", "version": "0.0.1", diff --git a/extensions/vscode-colorize-tests/package.json b/extensions/vscode-colorize-tests/package.json -index b416aee..3f60c26 100644 +index 1abff3d..5d87461 100644 --- a/extensions/vscode-colorize-tests/package.json +++ b/extensions/vscode-colorize-tests/package.json @@ -2,3 +2,3 @@ @@ -488,7 +487,7 @@ index 6680753..da1795a 100644 + "c": "broken highlighting in !!APP_NAME!!", "t": "source.css.less meta.selector.less meta.group.less meta.property-value.less string.quoted.double.less", diff --git a/extensions/vscode-test-resolver/package.json b/extensions/vscode-test-resolver/package.json -index 8ab2171..0cd1cfb 100644 +index 0990d7c..e34d7c4 100644 --- a/extensions/vscode-test-resolver/package.json +++ b/extensions/vscode-test-resolver/package.json @@ -2,3 +2,3 @@ @@ -531,24 +530,24 @@ index a351aa7..c32e3ef 100644 + throw Error(`Failed to download and unzip !!APP_NAME!! ${quality} - ${commit}`); } diff --git a/extensions/vscode-test-resolver/src/extension.ts b/extensions/vscode-test-resolver/src/extension.ts -index 2fab3ec..1195e3d 100644 +index 74d25c6..878e228 100644 --- a/extensions/vscode-test-resolver/src/extension.ts +++ b/extensions/vscode-test-resolver/src/extension.ts @@ -178,3 +178,3 @@ export function activate(context: vscode.ExtensionContext) { const serverBin = path.join(remoteDataDir, 'bin'); - progress.report({ message: 'Installing VSCode Server' }); -+ progress.report({ message: 'Installing Codex Server' }); ++ progress.report({ message: 'Installing !!APP_NAME!! Server' }); serverLocation = await downloadAndUnzipVSCodeServer(updateUrl, commit, quality, serverBin, m => outputChannel.appendLine(m)); diff --git a/src/main.ts b/src/main.ts -index 1af3c94..d1a8ea6 100644 +index ec2e45c..8d89e2b 100644 --- a/src/main.ts +++ b/src/main.ts -@@ -397,3 +397,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { +@@ -412,3 +412,3 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { const defaultArgvConfigContent = [ - '// This configuration file allows you to pass permanent command line arguments to VS Code.', + '// This configuration file allows you to pass permanent command line arguments to !!APP_NAME!!.', '// Only a subset of arguments is currently supported to reduce the likelihood of breaking', -@@ -403,6 +403,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { +@@ -418,6 +418,6 @@ function createDefaultArgvConfigSync(argvConfigPath: string): void { '//', - '// NOTE: Changing this file requires a restart of VS Code.', + '// NOTE: Changing this file requires a restart of !!APP_NAME!!.', @@ -558,7 +557,7 @@ index 1af3c94..d1a8ea6 100644 + ' // This can help in cases where you see rendering issues in !!APP_NAME!!.', ' // "disable-hardware-acceleration": true', diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts -index 588e1cb..a18f74f 100644 +index 43aba01..23b55ea 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -526,3 +526,3 @@ export class CodeApplication extends Disposable { @@ -585,7 +584,7 @@ index c256dba..10a79c8 100644 +export const ProductQualityContext = new RawContextKey('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 0a50a2e..0dacd44 100644 +index cdf0c67..d567815 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -153,3 +153,3 @@ export class ExtensionManagementService extends AbstractExtensionManagementServi @@ -593,21 +592,21 @@ index 0a50a2e..0dacd44 100644 - 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)); } -@@ -1028,3 +1028,3 @@ class InstallExtensionInProfileTask extends AbstractExtensionTask `'${p}'`).join(', '), diff --git a/src/vs/platform/externalTerminal/node/externalTerminalService.ts b/src/vs/platform/externalTerminal/node/externalTerminalService.ts -index ca6c82b..56fab2c 100644 +index 4813da4..9f8fd41 100644 --- a/src/vs/platform/externalTerminal/node/externalTerminalService.ts +++ b/src/vs/platform/externalTerminal/node/externalTerminalService.ts @@ -17,3 +17,3 @@ import { ITerminalEnvironment } from '../../terminal/common/terminal.js'; @@ -625,25 +624,25 @@ index ca6c82b..56fab2c 100644 +const TERMINAL_TITLE = nls.localize('console.title', "!!APP_NAME!! Console"); diff --git a/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts b/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts -index 7d8d78b..d39dad4 100644 +index 27fd88b..ad97d7b 100644 --- a/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts +++ b/src/vs/platform/terminal/common/terminalPlatformConfiguration.ts -@@ -338,3 +338,3 @@ const terminalPlatformConfiguration: IConfigurationNode = { +@@ -339,3 +339,3 @@ const terminalPlatformConfiguration: IConfigurationNode = { scope: ConfigurationScope.APPLICATION, - description: localize('terminal.integrated.inheritEnv', "Whether new shells should inherit their environment from VS Code, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows."), + description: localize('terminal.integrated.inheritEnv', "Whether new shells should inherit their environment from !!APP_NAME!!, which may source a login shell to ensure $PATH and other development variables are initialized. This has no effect on Windows."), type: 'boolean', diff --git a/src/vs/platform/update/common/update.config.contribution.ts b/src/vs/platform/update/common/update.config.contribution.ts -index d96926b..a787b34 100644 +index e5fb1ab..bd4740b 100644 --- a/src/vs/platform/update/common/update.config.contribution.ts +++ b/src/vs/platform/update/common/update.config.contribution.ts -@@ -47,3 +47,3 @@ configurationRegistry.registerConfiguration({ +@@ -70,3 +70,3 @@ configurationRegistry.registerConfiguration({ title: localize('enableWindowsBackgroundUpdatesTitle', "Enable Background Updates on Windows"), - description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new VS Code versions in the background on Windows."), + description: localize('enableWindowsBackgroundUpdates', "Enable to download and install new !!APP_NAME!! versions in the background on Windows."), included: isWindows && !isWeb diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index 48d0d86..cbd5a33 100644 +index ed8043f..ca7a4dc 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts @@ -23,3 +23,3 @@ export type UpdateErrorClassification = { @@ -663,25 +662,25 @@ index b78ebc5..9b0eb56 100644 + comment: 'This is used to know how often !!APP_NAME!! has successfully downloaded the update.'; }; diff --git a/src/vs/server/node/server.cli.ts b/src/vs/server/node/server.cli.ts -index 0535ddd..2478997 100644 +index 6a0eacf..2959dad 100644 --- a/src/vs/server/node/server.cli.ts +++ b/src/vs/server/node/server.cli.ts -@@ -469,3 +469,3 @@ function asExtensionIdOrVSIX(inputs: string[] | undefined) { - function fatal(message: string, err: any): void { +@@ -474,3 +474,3 @@ function asExtensionIdOrVSIX(inputs: string[] | undefined) { + function fatal(message: string, err: unknown): void { - console.error('Unable to connect to VS Code server: ' + message); + console.error('Unable to connect to !!APP_NAME!! server: ' + message); console.error(err); diff --git a/src/vs/workbench/api/browser/mainThreadAuthentication.ts b/src/vs/workbench/api/browser/mainThreadAuthentication.ts -index 6441394..69955cd 100644 +index bfd8397..6181895 100644 --- a/src/vs/workbench/api/browser/mainThreadAuthentication.ts +++ b/src/vs/workbench/api/browser/mainThreadAuthentication.ts -@@ -334,3 +334,3 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu +@@ -529,3 +529,3 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu owner: 'TylerLeonhardt'; - comment: 'Used to see which extensions are using the VSCode client id override'; -+ comment: 'Used to see which extensions are using the Codex client id override'; ++ comment: 'Used to see which extensions are using the !!APP_NAME!! client id override'; extensionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The extension id.' }; diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts -index fdf354d..b196297 100644 +index 8337870..fdf02ac 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -43,3 +43,3 @@ const viewsContainerSchema: IJSONSchema = { @@ -690,7 +689,7 @@ index fdf354d..b196297 100644 + description: localize({ key: 'vscode.extension.contributes.views.containers.id', comment: ['Contribution refers to those that an extension contributes to !!APP_NAME!! through an extension/contribution point. '] }, "Unique id used to identify the container in which views can be contributed using 'views' contribution point"), type: 'string', diff --git a/src/vs/workbench/api/common/extHostApiCommands.ts b/src/vs/workbench/api/common/extHostApiCommands.ts -index 0dc4986..efbe644 100644 +index 9349335..a94ff8d 100644 --- a/src/vs/workbench/api/common/extHostApiCommands.ts +++ b/src/vs/workbench/api/common/extHostApiCommands.ts @@ -443,3 +443,3 @@ const newCommands: ApiCommand[] = [ @@ -699,10 +698,10 @@ index 0dc4986..efbe644 100644 + ApiCommandArgument.String.with('viewId', 'Custom editor view id. This should be the viewType string for custom editors or the notebookType string for notebooks. Use \'default\' to use !!APP_NAME!!\'s default text editor'), new ApiCommandArgument('columnOrOptions', 'Either the column in which to open or editor options, see vscode.TextDocumentShowOptions', diff --git a/src/vs/workbench/api/common/extHostCommands.ts b/src/vs/workbench/api/common/extHostCommands.ts -index 0bda2e8..5179ac6 100644 +index 161e19b..b6bfeb2 100644 --- a/src/vs/workbench/api/common/extHostCommands.ts +++ b/src/vs/workbench/api/common/extHostCommands.ts -@@ -462,4 +462,4 @@ export class ApiCommandArgument { +@@ -466,4 +466,4 @@ export class ApiCommandArgument { static readonly TypeHierarchyItem = new ApiCommandArgument('item', 'A type hierarchy item', v => v instanceof extHostTypes.TypeHierarchyItem, extHostTypeConverter.TypeHierarchyItem.from); - static readonly TestItem = new ApiCommandArgument('testItem', 'A VS Code TestItem', v => v instanceof TestItemImpl, extHostTypeConverter.TestItem.from); - static readonly TestProfile = new ApiCommandArgument('testProfile', 'A VS Code test profile', v => v instanceof extHostTypes.TestRunProfileBase, extHostTypeConverter.TestRunProfile.from); @@ -718,6 +717,15 @@ index 0d71384..ae8d169 100644 - test('Opening a notebook results in VS Code firing the event onDidChangeActiveNotebookEditor twice #118470', function () { + test('Opening a notebook results in !!APP_NAME!! firing the event onDidChangeActiveNotebookEditor twice #118470', function () { let count = 0; +diff --git a/src/vs/workbench/browser/actions/developerActions.ts b/src/vs/workbench/browser/actions/developerActions.ts +index 1fda3db..bbadf28 100644 +--- a/src/vs/workbench/browser/actions/developerActions.ts ++++ b/src/vs/workbench/browser/actions/developerActions.ts +@@ -688,3 +688,3 @@ class PolicyDiagnosticsAction extends Action2 { + +- let content = '# VS Code Policy Diagnostics\n\n'; ++ let content = '# !!APP_NAME!! Policy Diagnostics\n\n'; + content += '*WARNING: This file may contain sensitive information.*\n\n'; diff --git a/src/vs/workbench/browser/actions/helpActions.ts b/src/vs/workbench/browser/actions/helpActions.ts index 2487213..a22b4d1 100644 --- a/src/vs/workbench/browser/actions/helpActions.ts @@ -728,41 +736,76 @@ index 2487213..a22b4d1 100644 + title: localize2('newsletterSignup', 'Signup for the !!APP_NAME!! Newsletter'), category: Categories.Help, diff --git a/src/vs/workbench/browser/web.factory.ts b/src/vs/workbench/browser/web.factory.ts -index 0ebe271..20974b2 100644 +index e342f83..7c314e6 100644 --- a/src/vs/workbench/browser/web.factory.ts +++ b/src/vs/workbench/browser/web.factory.ts @@ -35,3 +35,3 @@ export function create(domElement: HTMLElement, options: IWorkbenchConstructionO if (created) { - throw new Error('Unable to create the VSCode workbench more than once.'); -+ throw new Error('Unable to create the Codex workbench more than once.'); ++ throw new Error('Unable to create the !!APP_NAME!! workbench more than once.'); } else { diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts -index 735e721..0356d59 100644 +index dd9f46e..fa0c391 100644 --- a/src/vs/workbench/browser/workbench.contribution.ts +++ b/src/vs/workbench/browser/workbench.contribution.ts -@@ -696,3 +696,3 @@ const registry = Registry.as(ConfigurationExtensions.Con +@@ -731,3 +731,3 @@ const registry = Registry.as(ConfigurationExtensions.Con localize('profileName', "`${profileName}`: name of the profile in which the workspace is opened (e.g. Data Science (Profile)). Ignored if default profile is used."), - localize('appName', "`${appName}`: e.g. VS Code."), + localize('appName', "`${appName}`: e.g. !!APP_NAME!!."), localize('remoteName', "`${remoteName}`: e.g. SSH"), -diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup.ts b/src/vs/workbench/contrib/chat/browser/chatSetup.ts -index 043193f..9311afb 100644 ---- a/src/vs/workbench/contrib/chat/browser/chatSetup.ts -+++ b/src/vs/workbench/contrib/chat/browser/chatSetup.ts -@@ -143,3 +143,3 @@ class SetupAgent extends Disposable implements IChatAgentImplementation { +diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts +index c0528fe..d1fd07f 100644 +--- a/src/vs/workbench/common/contextkeys.ts ++++ b/src/vs/workbench/common/contextkeys.ts +@@ -39,3 +39,3 @@ export const EmbedderIdentifierContext = new RawContextKey(' + +-export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether VS Code is running under automation/smoke test")); ++export const InAutomationContext = new RawContextKey('inAutomation', false, localize('inAutomation', "Whether !!APP_NAME!! is running under automation/smoke test")); -- const { agent, disposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Panel, undefined, context, controller); -+ const { agent, disposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Panel, undefined, context, controller); - disposables.add(disposable); -@@ -153,4 +153,4 @@ class SetupAgent extends Disposable implements IChatAgentImplementation { +diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +index fac472c..40e59c7 100644 +--- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts ++++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +@@ -415,3 +415,3 @@ configurationRegistry.registerConfiguration({ + nls.localize('chat.mcp.access.none', "No access to MCP servers."), +- nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), ++ nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), + nls.localize('chat.mcp.access.any', "Allow access to any installed MCP server.") +@@ -442,3 +442,3 @@ configurationRegistry.registerConfiguration({ + { +- key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that VS Code is connected to."), ++ key: 'chat.mcp.access.registry', value: nls.localize('chat.mcp.access.registry', "Allows access to MCP servers installed from the registry that !!APP_NAME!! is connected to."), + }, +diff --git a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts +index b7c9c49..137d77e 100644 +--- a/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts ++++ b/src/vs/workbench/contrib/chat/browser/chatSetup/chatSetupProviders.ts +@@ -104,3 +104,3 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { + // Register VSCode agent +- const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about VS Code").value, ChatAgentLocation.Chat, undefined, context, controller); ++ const { disposable: vscodeDisposable } = SetupAgent.doRegisterAgent(instantiationService, chatAgentService, 'setup.vscode', 'vscode', false, localize2('vscodeAgentDescription', "Ask questions about !!APP_NAME!!").value, ChatAgentLocation.Chat, undefined, context, controller); + disposables.add(vscodeDisposable); +@@ -121,4 +121,4 @@ export class SetupAgent extends Disposable implements IChatAgentImplementation { displayName: localize('setupToolDisplayName', "New Workspace"), -- modelDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"), +- modelDescription: 'Scaffold a new workspace in VS Code', - userDescription: localize('setupToolsDescription', "Scaffold a new workspace in VS Code"), -+ modelDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"), ++ modelDescription: 'Scaffold a new workspace in !!APP_NAME!!', + userDescription: localize('setupToolsDescription', "Scaffold a new workspace in !!APP_NAME!!"), canBeReferencedInPrompt: true, +diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts +index b7e91c4..6e0c67e 100644 +--- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts ++++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptValidator.ts +@@ -179,5 +179,5 @@ export class PromptValidator { + if (validGithubCopilotAttributeNames.value.has(attribute.key)) { +- report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in VS Code.", attribute.key), attribute.range, MarkerSeverity.Info)); ++ report(toMarker(localize('promptValidator.ignoredAttribute.vscode-agent', "Attribute '{0}' is ignored when running locally in !!APP_NAME!!.", attribute.key), attribute.range, MarkerSeverity.Info)); + } else { +- report(toMarker(localize('promptValidator.unknownAttribute.vscode-agent', "Attribute '{0}' is not supported in VS Code agent files. Supported: {1}.", attribute.key, supportedNames.value), attribute.range, MarkerSeverity.Warning)); ++ report(toMarker(localize('promptValidator.unknownAttribute.vscode-agent', "Attribute '{0}' is not supported in !!APP_NAME!! agent files. Supported: {1}.", attribute.key, supportedNames.value), attribute.range, MarkerSeverity.Warning)); + } diff --git a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts -index 0a13063..5a342c0 100644 +index 7504a9c..2e485bb 100644 --- a/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts +++ b/src/vs/workbench/contrib/debug/browser/debugAdapterManager.ts @@ -177,3 +177,3 @@ export class AdapterManager extends Disposable implements IAdapterManager { @@ -771,41 +814,41 @@ index 0a13063..5a342c0 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 39859b4..5e03ec2 100644 +index f6c294e..6fd209d 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -@@ -338,3 +338,3 @@ CommandsRegistry.registerCommand({ +@@ -353,3 +353,3 @@ CommandsRegistry.registerCommand({ description: '(optional) Options for installing the extension. Object with the following properties: ' + - '`installOnlyNewlyAddedFromExtensionPackVSIX`: When enabled, VS Code installs only newly added extensions from the extension pack VSIX. This option is considered only when installing VSIX. ', + '`installOnlyNewlyAddedFromExtensionPackVSIX`: When enabled, !!APP_NAME!! installs only newly added extensions from the extension pack VSIX. This option is considered only when installing VSIX. ', isOptional: true, -@@ -345,3 +345,3 @@ CommandsRegistry.registerCommand({ +@@ -360,3 +360,3 @@ CommandsRegistry.registerCommand({ 'type': 'boolean', - 'description': localize('workbench.extensions.installExtension.option.installOnlyNewlyAddedFromExtensionPackVSIX', "When enabled, VS Code installs only newly added extensions from the extension pack VSIX. This option is considered only while installing a VSIX."), + 'description': localize('workbench.extensions.installExtension.option.installOnlyNewlyAddedFromExtensionPackVSIX', "When enabled, !!APP_NAME!! installs only newly added extensions from the extension pack VSIX. This option is considered only while installing a VSIX."), default: false -@@ -350,3 +350,3 @@ CommandsRegistry.registerCommand({ +@@ -365,3 +365,3 @@ CommandsRegistry.registerCommand({ 'type': 'boolean', - 'description': localize('workbench.extensions.installExtension.option.installPreReleaseVersion', "When enabled, VS Code installs the pre-release version of the extension if available."), + 'description': localize('workbench.extensions.installExtension.option.installPreReleaseVersion', "When enabled, !!APP_NAME!! installs the pre-release version of the extension if available."), default: false -@@ -355,3 +355,3 @@ CommandsRegistry.registerCommand({ +@@ -370,3 +370,3 @@ CommandsRegistry.registerCommand({ 'type': 'boolean', - 'description': localize('workbench.extensions.installExtension.option.donotSync', "When enabled, VS Code do not sync this extension when Settings Sync is on."), + 'description': localize('workbench.extensions.installExtension.option.donotSync', "When enabled, !!APP_NAME!! do not sync this extension when Settings Sync is on."), default: false -@@ -879,4 +879,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi +@@ -895,4 +895,4 @@ class ExtensionsContributions extends Disposable implements IWorkbenchContributi Severity.Info, - vsixs.length > 1 ? localize('InstallVSIXs.successReload', "Completed installing extensions. Please reload Visual Studio Code to enable them.") - : localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload Visual Studio Code to enable it."), -+ vsixs.length > 1 ? localize('InstallVSIXs.successReload', "Completed installing extensions. Please reload Codex to enable them.") -+ : localize('InstallVSIXAction.successReload', "Completed installing extension. Please reload Codex 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 862d00b..714f0fa 100644 +index 2b8d2e6..46fb2ca 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts -@@ -108,3 +108,3 @@ export class PromptExtensionInstallFailureAction extends Action { +@@ -109,3 +109,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; @@ -815,26 +858,26 @@ index 862d00b..714f0fa 100644 - 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!!."); -@@ -941,3 +941,3 @@ export class UninstallAction extends ExtensionAction { +@@ -942,3 +942,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) { -@@ -2597,3 +2597,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(' ')]))}`)})`; +@@ -2598,3 +2598,3 @@ export class ExtensionStatusAction extends ExtensionAction { + const link = `[${localize('settings', "settings")}](${createCommandUri('workbench.action.openSettings', 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 8ee497e..41de54a 100644 +index 8574e03..bb1f721 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsWorkbenchService.ts -@@ -468,3 +468,3 @@ export class Extension implements IExtension { +@@ -477,3 +477,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 -@@ -506,3 +506,3 @@ ${this.description} +@@ -515,3 +515,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.`); @@ -853,6 +896,15 @@ index 818e662..2d2ead7 100644 - '\t// List of extensions recommended by VS Code that should not be recommended for users of this workspace.', + '\t// List of extensions recommended by !!APP_NAME!! that should not be recommended for users of this workspace.', '\t"unwantedRecommendations": [', +diff --git a/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts b/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts +index 91541b6..ccb9414 100644 +--- a/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts ++++ b/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.ts +@@ -23,3 +23,3 @@ export const SearchExtensionsToolData: IToolData = { + modelDescription: 'This is a tool for browsing Visual Studio Code Extensions Marketplace. It allows the model to search for extensions and retrieve detailed information about them. The model should use this tool whenever it needs to discover extensions or resolve information about known ones. To use the tool, the model has to provide the category of the extensions, relevant search keywords, or known extension IDs. Note that search results may include false positives, so reviewing and filtering is recommended.', +- userDescription: localize('searchExtensionsTool.userDescription', 'Search for VS Code extensions'), ++ userDescription: localize('searchExtensionsTool.userDescription', 'Search for !!APP_NAME!! extensions'), + source: ToolDataSource.Internal, diff --git a/src/vs/workbench/contrib/externalUriOpener/common/configuration.ts b/src/vs/workbench/contrib/externalUriOpener/common/configuration.ts index f54ddfe..946de6b 100644 --- a/src/vs/workbench/contrib/externalUriOpener/common/configuration.ts @@ -863,7 +915,7 @@ index f54ddfe..946de6b 100644 + enumDescriptions: [nls.localize('externalUriOpeners.defaultId', "Open using !!APP_NAME!!'s standard opener.")], }, diff --git a/src/vs/workbench/contrib/localization/common/localization.contribution.ts b/src/vs/workbench/contrib/localization/common/localization.contribution.ts -index b89d74b..2a06ffb 100644 +index bd73995..61b7d12 100644 --- a/src/vs/workbench/contrib/localization/common/localization.contribution.ts +++ b/src/vs/workbench/contrib/localization/common/localization.contribution.ts @@ -58,5 +58,5 @@ export class BaseLocalizationWorkbenchContribution extends Disposable implements @@ -875,14 +927,23 @@ index b89d74b..2a06ffb 100644 + patternErrorMessage: localize('vscode.extension.contributes.localizations.translations.id.pattern', "Id should be `vscode` or in format `publisherId.extensionName` for translating !!APP_NAME!! or an extension respectively.") }, diff --git a/src/vs/workbench/contrib/localization/common/localizationsActions.ts b/src/vs/workbench/contrib/localization/common/localizationsActions.ts -index 8619144..5815a70 100644 +index 050dde4..a8a61bd 100644 --- a/src/vs/workbench/contrib/localization/common/localizationsActions.ts +++ b/src/vs/workbench/contrib/localization/common/localizationsActions.ts -@@ -26,3 +26,3 @@ export class ConfigureDisplayLanguageAction extends Action2 { +@@ -25,3 +25,3 @@ export class ConfigureDisplayLanguageAction extends Action2 { metadata: { - description: localize2('configureLocaleDescription', "Changes the locale of VS Code based on installed language packs. Common languages include French, Chinese, Spanish, Japanese, German, Korean, and more.") + description: localize2('configureLocaleDescription', "Changes the locale of !!APP_NAME!! based on installed language packs. Common languages include French, Chinese, Spanish, Japanese, German, Korean, and more.") } +diff --git a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +index 7f4dfea..2d4da89 100644 +--- a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts ++++ b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +@@ -262,3 +262,3 @@ export class McpServersListView extends AbstractExtensionsListView `- ${command}`).join('\n'), -@@ -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', -@@ -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', -@@ -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', -@@ -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', -@@ -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', -@@ -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#`'), - type: 'boolean', +@@ -311,3 +311,3 @@ const terminalConfiguration: IStringDictionary = { + [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', +@@ -325,3 +325,3 @@ const terminalConfiguration: IStringDictionary = { + 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."), +@@ -413,3 +413,3 @@ const terminalConfiguration: IStringDictionary = { + '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 \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 \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 \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 \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 \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 \n\nDefault Skipped Commands:\n\n{0}", + DEFAULT_COMMANDS_TO_SKIP_SHELL.sort().map(command => `- ${command}`).join('\n'), +@@ -425,3 +425,3 @@ const terminalConfiguration: IStringDictionary = { + [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', +@@ -436,3 +436,3 @@ const terminalConfiguration: IStringDictionary = { + 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', +@@ -445,3 +445,3 @@ const terminalConfiguration: IStringDictionary = { + 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', +@@ -454,3 +454,3 @@ const terminalConfiguration: IStringDictionary = { + 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', +@@ -473,3 +473,3 @@ const terminalConfiguration: IStringDictionary = { + restricted: true, +- markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.23.251008001) shipped with VS Code, instead of the one bundled with Windows."), ++ markdownDescription: localize('terminal.integrated.windowsUseConptyDll', "Whether to use the experimental conpty.dll (v1.23.251008001) shipped with !!APP_NAME!!, instead of the one bundled with Windows."), + type: 'boolean', +@@ -591,3 +591,3 @@ const terminalConfiguration: IStringDictionary = { + 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#`'), + type: 'boolean', diff --git a/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts b/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts index 4979520..30ae11b 100644 --- a/src/vs/workbench/contrib/terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.ts @@ -1009,10 +1093,37 @@ index 4979520..30ae11b 100644 @@ -19,3 +19,3 @@ export const terminalAutoRepliesConfiguration: IStringDictionary commandService.executeCommand('workbench.extensions.installExtension', 'ms-vscode.vscode-speech'); diff --git a/src/vs/workbench/contrib/update/browser/update.ts b/src/vs/workbench/contrib/update/browser/update.ts -index a20d7ae..6861b35 100644 +index cc12ca6..056d2d8 100644 --- a/src/vs/workbench/contrib/update/browser/update.ts +++ b/src/vs/workbench/contrib/update/browser/update.ts @@ -583,4 +583,4 @@ export class SwitchProductQualityContribution extends Disposable implements IWor @@ -1028,7 +1139,7 @@ index a20d7ae..6861b35 100644 + 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."), buttons: [ diff --git a/src/vs/workbench/contrib/url/browser/trustedDomainsFileSystemProvider.ts b/src/vs/workbench/contrib/url/browser/trustedDomainsFileSystemProvider.ts -index d508a0d..a8f9899 100644 +index 393c8c3..9268a6c 100644 --- a/src/vs/workbench/contrib/url/browser/trustedDomainsFileSystemProvider.ts +++ b/src/vs/workbench/contrib/url/browser/trustedDomainsFileSystemProvider.ts @@ -55,3 +55,3 @@ function computeTrustedDomainContent(defaultTrustedDomains: string[], trustedDom @@ -1042,21 +1153,21 @@ index d508a0d..a8f9899 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 6aa706f..ddbd93e 100644 +index b63e894..2798ab1 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.contribution.ts -@@ -51,3 +51,3 @@ registerAction2(class extends Action2 { +@@ -49,3 +49,3 @@ registerAction2(class extends Action2 { metadata: { - 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!!.') } -@@ -379,3 +379,3 @@ configurationRegistry.registerConfiguration({ +@@ -311,3 +311,3 @@ configurationRegistry.registerConfiguration({ localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.none' }, "Start without an editor."), - localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with VS Code and extensions."), + localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.welcomePage' }, "Open the Welcome page, with content to aid in getting started with !!APP_NAME!! and extensions."), localize({ comment: ['This is the description for a setting. Values surrounded by single quotes are not to be translated.'], key: 'workbench.startupEditor.readme' }, "Open the README when opening a folder that contains one, fallback to 'welcomePage' otherwise. Note: This is only observed as a global configuration, it will be ignored if set in a workspace or folder configuration."), diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts -index 3f1c098..26bf670 100644 +index 297598e..1fc5b45 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts @@ -161,3 +161,3 @@ export const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPo @@ -1065,20 +1176,16 @@ index 3f1c098..26bf670 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 949cea7..ccd635d 100644 +index 60f47c9..eb2c4b8 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/common/gettingStartedContent.ts -@@ -15,3 +15,2 @@ import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../platform/accessi - import { URI } from '../../../../base/common/uri.js'; --import product from '../../../../platform/product/common/product.js'; - -@@ -201,13 +200,2 @@ export const startEntries: GettingStartedStartEntryContent = [ +@@ -211,13 +211,2 @@ export const startEntries: GettingStartedStartEntryContent = [ }, - { - id: 'topLevelNewWorkspaceChat', -- title: localize('gettingStarted.newWorkspaceChat.title', "New Workspace with Copilot..."), -- description: localize('gettingStarted.newWorkspaceChat.description', "Create a new workspace with Copilot"), -- icon: Codicon.copilot, +- title: localize('gettingStarted.newWorkspaceChat.title', "Generate New Workspace..."), +- description: localize('gettingStarted.newWorkspaceChat.description', "Chat to create a new workspace"), +- icon: Codicon.chatSparkle, - when: '!isWeb && !chatSetupHidden', - content: { - type: 'startEntry', @@ -1086,17 +1193,19 @@ index 949cea7..ccd635d 100644 - } - }, ]; -@@ -216,24 +204,2 @@ const Button = (title: string, href: string) => `[${title}](${href})`; +@@ -226,26 +215,2 @@ const Button = (title: string, href: string) => `[${title}](${href})`; -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"), `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'); +-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.", defaultChat.documentationUrl ?? ''); +-const CopilotTermsString = localize({ key: 'gettingStarted.copilotSetup.terms', comment: ['{Locked="]({2})"}', '{Locked="]({3})"}'] }, "By continuing with {0} Copilot, you agree to {1}'s [Terms]({2}) and [Privacy Statement]({3})", defaultChat.provider.default.name, defaultChat.provider.default.name, defaultChat.termsStatementUrl, defaultChat.privacyStatementUrl); +-const CopilotAnonymousButton = Button(localize('setupCopilotButton.setup', "Use AI Features"), `command:workbench.action.chat.triggerSetupAnonymousWithoutDialog`); +-const CopilotSignedOutButton = Button(localize('setupCopilotButton.setup', "Use AI Features"), `command:workbench.action.chat.triggerSetup`); +-const CopilotSignedInButton = Button(localize('setupCopilotButton.setup', "Use AI Features"), `command:workbench.action.chat.triggerSetup`); +-const CopilotCompleteButton = Button(localize('setupCopilotButton.chatWithCopilot', "Start to Chat"), 'command:workbench.action.chat.open'); - -function createCopilotSetupStep(id: string, button: string, when: string, includeTerms: boolean): BuiltinGettingStartedStep { - const description = includeTerms ? -- `${CopilotDescription}\n\n${button}` : +- `${CopilotDescription}\n${CopilotTermsString}\n${button}` : - `${CopilotDescription}\n${button}`; - - return { @@ -1111,107 +1220,41 @@ index 949cea7..ccd635d 100644 -} - export const walkthroughs: GettingStartedWalkthroughContent = [ -@@ -241,3 +207,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -253,3 +218,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ id: 'Setup', - title: localize('gettingStarted.setup.title', "Get started with VS Code"), + title: localize('gettingStarted.setup.title', "Get started with !!APP_NAME!!"), description: localize('gettingStarted.setup.description', "Customize your editor, learn the basics, and start coding"), -@@ -246,3 +212,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -258,3 +223,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ when: '!isWeb', - walkthroughPageTitle: localize('gettingStarted.setup.walkthroughPageTitle', 'Setup VS Code'), + walkthroughPageTitle: localize('gettingStarted.setup.walkthroughPageTitle', 'Setup !!APP_NAME!!'), next: 'Beginner', -@@ -251,5 +217,2 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -263,6 +228,2 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ steps: [ -- createCopilotSetupStep('CopilotSetupSignedOut', CopilotSignedOutButton, 'chatSetupSignedOut', true), -- createCopilotSetupStep('CopilotSetupComplete', CopilotCompleteButton, 'chatSetupInstalled && (chatPlanPro || chatPlanProPlus || chatPlanBusiness || chatPlanEnterprise || chatPlanLimited)', false), -- createCopilotSetupStep('CopilotSetupSignedIn', CopilotSignedInButton, '!chatSetupSignedOut && (!chatSetupInstalled || chatPlanCanSignUp)', true), +- createCopilotSetupStep('CopilotSetupAnonymous', CopilotAnonymousButton, 'chatAnonymous && !chatSetupInstalled', true), +- createCopilotSetupStep('CopilotSetupSignedOut', CopilotSignedOutButton, 'chatEntitlementSignedOut && !chatAnonymous', false), +- createCopilotSetupStep('CopilotSetupComplete', CopilotCompleteButton, 'chatSetupInstalled && !chatSetupDisabled && (chatAnonymous || chatPlanPro || chatPlanProPlus || chatPlanBusiness || chatPlanEnterprise || chatPlanFree)', false), +- createCopilotSetupStep('CopilotSetupSignedIn', CopilotSignedInButton, '!chatEntitlementSignedOut && (!chatSetupInstalled || chatSetupDisabled || chatPlanCanSignUp)', false), { -@@ -267,6 +230,6 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ - title: localize('gettingStarted.extensions.title', "Code with extensions"), -- description: localize('gettingStarted.extensionsWeb.description.interpolated', "Extensions are VS Code's power-ups. A growing number are becoming available in the web.\n{0}", Button(localize('browsePopularWeb', "Browse Popular Web Extensions"), 'command:workbench.extensions.action.showPopularExtensions')), -+ description: localize('gettingStarted.extensionsWeb.description.interpolated', "Extensions are !!APP_NAME!!'s power-ups. A growing number are becoming available in the web.\n{0}", Button(localize('browsePopularWeb', "Browse Popular Web Extensions"), 'command:workbench.extensions.action.showPopularExtensions')), - when: 'workspacePlatform == \'webworker\'', - media: { -- type: 'svg', altText: 'VS Code extension marketplace with featured language extensions', path: 'extensions-web.svg' -+ type: 'svg', altText: '!!APP_NAME!! extension marketplace with featured language extensions', path: 'extensions-web.svg' - }, -@@ -282,21 +245,2 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ - }, -- // Hidden in favor of copilot entry (to be revisited when copilot entry moves, if at all) -- // { -- // id: 'settings', -- // title: localize('gettingStarted.settings.title', "Tune your settings"), -- // description: localize('gettingStarted.settings.description.interpolated', "Customize every aspect of VS Code and your extensions to your liking. Commonly used settings are listed first to get you started.\n{0}", Button(localize('tweakSettings', "Open Settings"), 'command:toSide:workbench.action.openSettings')), -- // media: { -- // type: 'svg', altText: 'VS Code Settings', path: 'settings.svg' -- // }, -- // }, -- // { -- // id: 'settingsSync', -- // title: localize('gettingStarted.settingsSync.title', "Sync settings across devices"), -- // description: localize('gettingStarted.settingsSync.description.interpolated', "Keep your essential customizations backed up and updated across all your devices.\n{0}", Button(localize('enableSync', "Backup and Sync Settings"), 'command:workbench.userDataSync.actions.turnOn')), -- // when: 'syncStatus != uninitialized', -- // completionEvents: ['onEvent:sync-enabled'], -- // media: { -- // type: 'svg', altText: 'The "Turn on Sync" entry in the settings gear menu.', path: 'settingsSync.svg' -- // }, -- // }, - { -@@ -304,3 +248,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ - title: localize('gettingStarted.settings.title', "Tune your settings"), -- description: localize('gettingStarted.settingsAndSync.description.interpolated', "Customize every aspect of VS Code and your extensions to your liking. [Back up and sync](command:workbench.userDataSync.actions.turnOn) your essential customizations across all your devices.\n{0}", Button(localize('tweakSettings', "Open Settings"), 'command:toSide:workbench.action.openSettings')), -+ description: localize('gettingStarted.settingsAndSync.description.interpolated', "Customize every aspect of !!APP_NAME!! and your extensions to your liking. [Back up and sync](command:workbench.userDataSync.actions.turnOn) your essential customizations across all your devices.\n{0}", Button(localize('tweakSettings', "Open Settings"), 'command:toSide:workbench.action.openSettings')), - when: 'syncStatus != uninitialized', -@@ -308,3 +252,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ - media: { -- type: 'svg', altText: 'VS Code Settings', path: 'settings.svg' -+ type: 'svg', altText: '!!APP_NAME!! Settings', path: 'settings.svg' - }, -@@ -314,24 +258,5 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ - title: localize('gettingStarted.commandPalette.title', "Unlock productivity with the Command Palette "), -- description: localize('gettingStarted.commandPalette.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in VS Code.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), -+ description: localize('gettingStarted.commandPalette.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in !!APP_NAME!!.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), - media: { type: 'svg', altText: 'Command Palette overlay for searching and executing commands.', path: 'commandPalette.svg' }, - }, -- // Hidden in favor of copilot entry (to be revisited when copilot entry moves, if at all) -- // { -- // id: 'pickAFolderTask-Mac', -- // title: localize('gettingStarted.setup.OpenFolder.title', "Open up your code"), -- // description: localize('gettingStarted.setup.OpenFolder.description.interpolated', "You're all set to start coding. Open a project folder to get your files into VS Code.\n{0}", Button(localize('pickFolder', "Pick a Folder"), 'command:workbench.action.files.openFileFolder')), -- // when: 'isMac && workspaceFolderCount == 0', -- // media: { -- // type: 'svg', altText: 'Explorer view showing buttons for opening folder and cloning repository.', path: 'openFolder.svg' -- // } -- // }, -- // { -- // id: 'pickAFolderTask-Other', -- // title: localize('gettingStarted.setup.OpenFolder.title', "Open up your code"), -- // description: localize('gettingStarted.setup.OpenFolder.description.interpolated', "You're all set to start coding. Open a project folder to get your files into VS Code.\n{0}", Button(localize('pickFolder', "Pick a Folder"), 'command:workbench.action.files.openFolder')), -- // when: '!isMac && workspaceFolderCount == 0', -- // media: { -- // type: 'svg', altText: 'Explorer view showing buttons for opening folder and cloning repository.', path: 'openFolder.svg' -- // } -- // }, - { -@@ -348,4 +273,4 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -280,4 +241,4 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.videoTutorial.title', "Watch video tutorials"), - description: localize('gettingStarted.videoTutorial.description.interpolated', "Watch the first in a series of short & practical video tutorials for VS Code's key features.\n{0}", Button(localize('watch', "Watch Tutorial"), 'https://aka.ms/vscode-getting-started-video')), - media: { type: 'svg', altText: 'VS Code Settings', path: 'learn.svg' }, + description: localize('gettingStarted.videoTutorial.description.interpolated', "Watch the first in a series of short & practical video tutorials for !!APP_NAME!!'s key features.\n{0}", Button(localize('watch', "Watch Tutorial"), 'https://aka.ms/vscode-getting-started-video')), + media: { type: 'svg', altText: '!!APP_NAME!! Settings', path: 'learn.svg' }, } -@@ -357,3 +282,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -289,3 +250,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ id: 'SetupWeb', - title: localize('gettingStarted.setupWeb.title', "Get Started with VS Code for the Web"), + title: localize('gettingStarted.setupWeb.title', "Get Started with !!APP_NAME!! for the Web"), description: localize('gettingStarted.setupWeb.description', "Customize your editor, learn the basics, and start coding"), -@@ -363,3 +288,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -295,3 +256,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ next: 'Beginner', - walkthroughPageTitle: localize('gettingStarted.setupWeb.walkthroughPageTitle', 'Setup VS Code Web'), + walkthroughPageTitle: localize('gettingStarted.setupWeb.walkthroughPageTitle', 'Setup !!APP_NAME!! Web'), content: { -@@ -389,6 +314,6 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -321,6 +282,6 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.extensions.title', "Code with extensions"), - description: localize('gettingStarted.extensionsWeb.description.interpolated', "Extensions are VS Code's power-ups. A growing number are becoming available in the web.\n{0}", Button(localize('browsePopularWeb', "Browse Popular Web Extensions"), 'command:workbench.extensions.action.showPopularExtensions')), + description: localize('gettingStarted.extensionsWeb.description.interpolated', "Extensions are !!APP_NAME!!'s power-ups. A growing number are becoming available in the web.\n{0}", Button(localize('browsePopularWeb', "Browse Popular Web Extensions"), 'command:workbench.extensions.action.showPopularExtensions')), @@ -1220,7 +1263,7 @@ index 949cea7..ccd635d 100644 - type: 'svg', altText: 'VS Code extension marketplace with featured language extensions', path: 'extensions-web.svg' + type: 'svg', altText: '!!APP_NAME!! extension marketplace with featured language extensions', path: 'extensions-web.svg' }, -@@ -404,12 +329,2 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -336,12 +297,2 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ }, - { - id: 'settingsSyncWeb', @@ -1233,32 +1276,42 @@ index 949cea7..ccd635d 100644 - }, - }, { -@@ -417,3 +332,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -349,3 +300,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.commandPalette.title', "Unlock productivity with the Command Palette "), - description: localize('gettingStarted.commandPalette.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in VS Code.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), + description: localize('gettingStarted.commandPalette.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in !!APP_NAME!!.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), media: { type: 'svg', altText: 'Command Palette overlay for searching and executing commands.', path: 'commandPalette.svg' }, -@@ -423,3 +338,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -355,3 +306,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.setup.OpenFolder.title', "Open up your code"), - description: localize('gettingStarted.setup.OpenFolderWeb.description.interpolated', "You're all set to start coding. You can open a local project or a remote repository to get your files into VS Code.\n{0}\n{1}", Button(localize('openFolder', "Open Folder"), 'command:workbench.action.addRootFolder'), Button(localize('openRepository', "Open Repository"), 'command:remoteHub.openRepository')), + description: localize('gettingStarted.setup.OpenFolderWeb.description.interpolated', "You're all set to start coding. You can open a local project or a remote repository to get your files into !!APP_NAME!!.\n{0}\n{1}", Button(localize('openFolder', "Open Folder"), 'command:workbench.action.addRootFolder'), Button(localize('openRepository', "Open Repository"), 'command:remoteHub.openRepository')), when: 'workspaceFolderCount == 0', -@@ -444,3 +359,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -376,3 +327,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.setupAccessibility.title', "Get Started with Accessibility Features"), - description: localize('gettingStarted.setupAccessibility.description', "Learn the tools and shortcuts that make VS Code accessible. Note that some actions are not actionable from within the context of the walkthrough."), + description: localize('gettingStarted.setupAccessibility.description', "Learn the tools and shortcuts that make !!APP_NAME!! accessible. Note that some actions are not actionable from within the context of the walkthrough."), isFeatured: true, -@@ -449,3 +364,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -381,3 +332,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ next: 'Setup', - walkthroughPageTitle: localize('gettingStarted.setupAccessibility.walkthroughPageTitle', 'Setup VS Code Accessibility'), + walkthroughPageTitle: localize('gettingStarted.setupAccessibility.walkthroughPageTitle', 'Setup !!APP_NAME!! Accessibility'), content: { -@@ -480,3 +395,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -412,3 +363,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.commandPaletteAccessibility.title', "Unlock productivity with the Command Palette "), - description: localize('gettingStarted.commandPaletteAccessibility.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in VS Code.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), + description: localize('gettingStarted.commandPaletteAccessibility.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in !!APP_NAME!!.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), media: { type: 'markdown', path: 'empty' }, -@@ -553,6 +468,6 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ +@@ -492,3 +443,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ + title: localize('gettingStarted.settings.title', "Tune your settings"), +- description: localize('gettingStarted.settingsAndSync.description.interpolated', "Customize every aspect of VS Code and [sync](command:workbench.userDataSync.actions.turnOn) customizations across devices.\n{0}", Button(localize('tweakSettings', "Open Settings"), 'command:toSide:workbench.action.openSettings')), ++ description: localize('gettingStarted.settingsAndSync.description.interpolated', "Customize every aspect of !!APP_NAME!! and [sync](command:workbench.userDataSync.actions.turnOn) customizations across devices.\n{0}", Button(localize('tweakSettings', "Open Settings"), 'command:toSide:workbench.action.openSettings')), + when: 'workspacePlatform != \'webworker\' && syncStatus != uninitialized', +@@ -496,3 +447,3 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ + media: { +- type: 'svg', altText: 'VS Code Settings', path: 'settings.svg' ++ type: 'svg', altText: '!!APP_NAME!! Settings', path: 'settings.svg' + }, +@@ -502,6 +453,6 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ title: localize('gettingStarted.extensions.title', "Code with extensions"), - description: localize('gettingStarted.extensions.description.interpolated', "Extensions are VS Code's power-ups. They range from handy productivity hacks, expanding out-of-the-box features, to adding completely new capabilities.\n{0}", Button(localize('browsePopular', "Browse Popular Extensions"), 'command:workbench.extensions.action.showPopularExtensions')), + description: localize('gettingStarted.extensions.description.interpolated', "Extensions are !!APP_NAME!!'s power-ups. They range from handy productivity hacks, expanding out-of-the-box features, to adding completely new capabilities.\n{0}", Button(localize('browsePopular', "Browse Popular Extensions"), 'command:workbench.extensions.action.showPopularExtensions')), @@ -1267,82 +1320,6 @@ index 949cea7..ccd635d 100644 - type: 'svg', altText: 'VS Code extension marketplace with featured language extensions', path: 'extensions.svg' + type: 'svg', altText: '!!APP_NAME!! extension marketplace with featured language extensions', path: 'extensions.svg' }, -@@ -670,75 +585,2 @@ export const walkthroughs: GettingStartedWalkthroughContent = [ - }, -- { -- id: `${NEW_WELCOME_EXPERIENCE}`, -- title: localize('gettingStarted.new.title', "Get started with VS Code"), -- description: localize('gettingStarted.new.description', "Supercharge coding with AI"), -- isFeatured: false, -- icon: setupIcon, -- when: '!isWeb', -- walkthroughPageTitle: localize('gettingStarted.new.walkthroughPageTitle', 'Set up VS Code'), -- content: { -- type: 'steps', -- steps: [ -- { -- id: 'copilotSetup.chat', -- title: localize('gettingStarted.agentMode.title', "Agent mode"), -- description: localize('gettingStarted.agentMode.description', "Analyzes the problem, plans next steps, and makes changes for you."), -- media: { -- type: 'svg', altText: 'VS Code Copilot multi file edits', path: 'multi-file-edits.svg' -- }, -- }, -- { -- id: 'copilotSetup.inline', -- title: localize('gettingStarted.nes.title', "Next Edit Suggestions"), -- description: localize('gettingStarted.nes.description', "Get code suggestions that predict your next edit."), -- media: { -- type: 'svg', altText: 'Next Edit Suggestions', path: 'ai-powered-suggestions.svg' -- }, -- }, -- { -- id: 'copilotSetup.customize', -- title: localize('gettingStarted.customize.title', "Personalized to how you work"), -- description: localize('gettingStarted.customize.description', "Swap models, add agent mode tools, and create personalized instructions.\n{0}", Button(localize('signUp', "Set up AI"), 'command:workbench.action.chat.triggerSetup')), -- media: { -- type: 'svg', altText: 'Personalize', path: 'multi-file-edits.svg' -- }, -- }, -- { -- id: 'newCommandPaletteTask', -- title: localize('newgettingStarted.commandPalette.title', "All commands within reach"), -- description: localize('gettingStarted.commandPalette.description.interpolated', "Run commands without reaching for your mouse to accomplish any task in VS Code.\n{0}", Button(localize('commandPalette', "Open Command Palette"), 'command:workbench.action.showCommands')), -- media: { type: 'svg', altText: 'Command Palette overlay for searching and executing commands.', path: 'commandPalette.svg' }, -- }, -- { -- id: 'newPickColorTheme', -- title: localize('gettingStarted.pickColor.title', "Choose your theme"), -- description: localize('gettingStarted.pickColor.description.interpolated', "The right theme helps you focus on your code, is easy on your eyes, and is simply more fun to use.\n{0}", Button(localize('titleID', "Browse Color Themes"), 'command:workbench.action.selectTheme')), -- completionEvents: [ -- 'onSettingChanged:workbench.colorTheme', -- 'onCommand:workbench.action.selectTheme' -- ], -- media: { type: 'markdown', path: 'theme_picker_small', } -- }, -- { -- id: 'newFindLanguageExtensions', -- title: localize('newgettingStarted.findLanguageExts.title', "Support for all languages"), -- description: localize('newgettingStarted.findLanguageExts.description.interpolated', "Install the language extensions you need in your toolkit.\n{0}", Button(localize('browseLangExts', "Browse Language Extensions"), 'command:workbench.extensions.action.showLanguageExtensions')), -- when: 'workspacePlatform != \'webworker\'', -- media: { -- type: 'svg', altText: 'Language extensions', path: 'languages.svg' -- }, -- }, -- { -- id: 'newSettingsAndSync', -- title: localize('newgettingStarted.settings.title', "Customize every aspect of VS Code"), -- description: localize('newgettingStarted.settingsAndSync.description.interpolated', "[Back up and sync](command:workbench.userDataSync.actions.turnOn) settings across all your devices.\n{0}", Button(localize('tweakSettings', "Open Settings"), 'command:toSide:workbench.action.openSettings')), -- when: 'syncStatus != uninitialized', -- completionEvents: ['onEvent:sync-enabled'], -- media: { -- type: 'svg', altText: 'VS Code Settings', path: 'settings.svg' -- }, -- }, -- ] -- } -- } - ]; diff --git a/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/vs_code_editor_walkthrough.ts b/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/vs_code_editor_walkthrough.ts index bdd30bf..317d11c 100644 --- a/src/vs/workbench/contrib/welcomeWalkthrough/browser/editor/vs_code_editor_walkthrough.ts @@ -1381,36 +1358,31 @@ index c512b64..dfa2150 100644 - markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within VS Code. When used with `#{0}#`, you can enable the full functionality of VS Code without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES), + markdownDescription: localize('workspace.trust.emptyWindow.description', "Controls whether or not the empty window is trusted by default within !!APP_NAME!!. When used with `#{0}#`, you can enable the full functionality of !!APP_NAME!! without prompting in an empty window.", WORKSPACE_TRUST_UNTRUSTED_FILES), tags: [WORKSPACE_TRUST_SETTING_TAG], -diff --git a/src/vs/workbench/electron-sandbox/desktop.contribution.ts b/src/vs/workbench/electron-sandbox/desktop.contribution.ts -index 88e0091..ec657a1 100644 ---- a/src/vs/workbench/electron-sandbox/desktop.contribution.ts -+++ b/src/vs/workbench/electron-sandbox/desktop.contribution.ts -@@ -364,3 +364,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri - allowTrailingCommas: true, -- description: 'VSCode static command line definition file', -+ description: 'Codex static command line definition file', - type: 'object', -@@ -409,3 +409,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri +diff --git a/src/vs/workbench/electron-browser/desktop.contribution.ts b/src/vs/workbench/electron-browser/desktop.contribution.ts +index 5fad6f9..4edfd81 100644 +--- a/src/vs/workbench/electron-browser/desktop.contribution.ts ++++ b/src/vs/workbench/electron-browser/desktop.contribution.ts +@@ -447,3 +447,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-b type: 'boolean', - description: localize('argv.disableChromiumSandbox', "Disables the Chromium sandbox. This is useful when running VS Code as elevated on Linux and running under Applocker on Windows.") + description: localize('argv.disableChromiumSandbox', "Disables the Chromium sandbox. This is useful when running !!APP_NAME!! as elevated on Linux and running under Applocker on Windows.") }, -@@ -413,3 +413,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri +@@ -451,3 +451,3 @@ import { MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL } from '../../platform/window/electron-b type: 'boolean', - description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running VS Code extension tests or when you're experiencing difficulties with the credential store.") + description: localize('argv.useInMemorySecretStorage', "Ensures that an in-memory store will be used for secret storage instead of using the OS's credential store. This is often used when running !!APP_NAME!! extension tests or when you're experiencing difficulties with the credential store.") - } + }, diff --git a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts -index edfe3a2..71a206f 100644 +index df1a6e3..14db691 100644 --- a/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts +++ b/src/vs/workbench/services/extensionManagement/common/extensionManagementService.ts -@@ -1045,3 +1045,3 @@ export class ExtensionManagementService extends CommontExtensionManagementServic +@@ -1044,3 +1044,3 @@ export class ExtensionManagementService extends CommontExtensionManagementServic - const productName = localize('VS Code for Web', "{0} for the Web", this.productService.nameLong); + 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 859b976..06386e0 100644 +index f6c18c6..6d6b39c 100644 --- a/src/vs/workbench/services/extensions/common/extensionsRegistry.ts +++ b/src/vs/workbench/services/extensions/common/extensionsRegistry.ts @@ -181,3 +181,3 @@ export const schema: IJSONSchema = { @@ -1447,30 +1419,30 @@ index 859b976..06386e0 100644 - description: nls.localize('vscode.extension.contributes', 'All contributions of the VS Code extension represented by this package.'), + description: nls.localize('vscode.extension.contributes', 'All contributions of the !!APP_NAME!! extension represented by this package.'), type: 'object', -@@ -260,3 +260,3 @@ export const schema: IJSONSchema = { +@@ -261,3 +261,3 @@ export const schema: IJSONSchema = { activationEvents: { - 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', -@@ -412,3 +412,3 @@ export const schema: IJSONSchema = { +@@ -423,3 +423,3 @@ export const schema: IJSONSchema = { label: '*', - description: nls.localize('vscode.extension.activationEvents.star', 'An activation event emitted on VS Code startup. To ensure a great end user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.'), + description: nls.localize('vscode.extension.activationEvents.star', 'An activation event emitted on !!APP_NAME!! startup. To ensure a great end user experience, please use this activation event in your extension only when no other activation events combination works in your use-case.'), body: '*' -@@ -584,3 +584,3 @@ export const schema: IJSONSchema = { +@@ -595,3 +595,3 @@ export const schema: IJSONSchema = { 'vscode:prepublish': { - description: nls.localize('vscode.extension.scripts.prepublish', 'Script executed before the package is published as a VS Code extension.'), + description: nls.localize('vscode.extension.scripts.prepublish', 'Script executed before the package is published as a !!APP_NAME!! extension.'), type: 'string' -@@ -588,3 +588,3 @@ export const schema: IJSONSchema = { +@@ -599,3 +599,3 @@ export const schema: IJSONSchema = { 'vscode:uninstall': { - description: nls.localize('vscode.extension.scripts.uninstall', 'Uninstall hook for VS Code extension. Script that gets executed when the extension is completely uninstalled from VS Code which is when VS Code is restarted (shutdown and start) after the extension is uninstalled. Only Node scripts are supported.'), + description: nls.localize('vscode.extension.scripts.uninstall', 'Uninstall hook for !!APP_NAME!! extension. Script that gets executed when the extension is completely uninstalled from !!APP_NAME!! which is when !!APP_NAME!! is restarted (shutdown and start) after the extension is uninstalled. Only Node scripts are supported.'), type: 'string' -diff --git a/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts b/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts -index d38ab6b..2469194 100644 ---- a/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts -+++ b/src/vs/workbench/services/extensions/electron-sandbox/nativeExtensionService.ts +diff --git a/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts b/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts +index 2b6104a..9d2dffd 100644 +--- a/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts ++++ b/src/vs/workbench/services/extensions/electron-browser/nativeExtensionService.ts @@ -167,3 +167,3 @@ export class NativeExtensionService extends AbstractExtensionService implements [{ - label: nls.localize('relaunch', "Relaunch VS Code"), diff --git a/patches/chat.patch b/patches/chat.patch deleted file mode 100644 index 0925a023149..00000000000 --- a/patches/chat.patch +++ /dev/null @@ -1,9 +0,0 @@ -diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -index 56220de..68d708f 100644 ---- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -+++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts -@@ -142,3 +142,3 @@ configurationRegistry.registerConfiguration({ - markdownDescription: nls.localize('chat.commandCenter.enabled', "Controls whether the command center shows a menu for actions to control Copilot (requires {0}).", '`#window.commandCenter#`'), -- default: true -+ default: false - }, diff --git a/patches/cli.patch b/patches/cli.patch index a364992b772..22ac8d4bf50 100644 --- a/patches/cli.patch +++ b/patches/cli.patch @@ -1,13 +1,13 @@ diff --git a/cli/src/commands/serve_web.rs b/cli/src/commands/serve_web.rs -index 2ddefe1..ab9c658 100644 +index d3f7db8..988024b 100644 --- a/cli/src/commands/serve_web.rs +++ b/cli/src/commands/serve_web.rs -@@ -730,3 +730,3 @@ impl ConnectionManager { +@@ -756,3 +756,3 @@ impl ConnectionManager { let dir_fut = cache.create(&args.release.commit, |target_dir| async move { - info!(log_for_fut, "Downloading server {}", release_for_fut.commit); + info!(log_for_fut, "Downloading server {}/{}", release_for_fut.commit, release_for_fut.name); let tmpdir = tempfile::tempdir().unwrap(); -@@ -758,3 +758,3 @@ impl ConnectionManager { +@@ -784,3 +784,3 @@ impl ConnectionManager { .join("bin") - .join(args.release.quality.server_entrypoint()); + .join(args.release.quality.server_entrypoint().unwrap()); @@ -58,10 +58,10 @@ index 7d152c0..c0f2fb2 100644 + Ok(server_name) } diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs -index cf00bc4..b564330 100644 +index bbabadc..b454d0e 100644 --- a/cli/src/tunnels/code_server.rs +++ b/cli/src/tunnels/code_server.rs -@@ -457,3 +457,3 @@ impl<'a> ServerBuilder<'a> { +@@ -462,3 +462,3 @@ impl<'a> ServerBuilder<'a> { .join("bin") - .join(self.server_params.release.quality.server_entrypoint()), + .join(self.server_params.release.quality.server_entrypoint().unwrap()), @@ -76,7 +76,7 @@ index 3d7d718..98529bc 100644 + .join(self.quality.server_entrypoint().unwrap()) }, diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs -index 9033914..a39bbf7 100644 +index 55f1dad..3b7ef5c 100644 --- a/cli/src/update_service.rs +++ b/cli/src/update_service.rs @@ -10,3 +10,3 @@ use serde::{Deserialize, Serialize}; @@ -89,7 +89,7 @@ index 9033914..a39bbf7 100644 - }, + } }; -@@ -58,4 +58,12 @@ fn quality_download_segment(quality: options::Quality) -> &'static str { +@@ -58,2 +58,10 @@ fn quality_download_segment(quality: options::Quality) -> &'static str { +fn get_app_name() -> Result<&'static str, CodeError> { + VSCODE_CLI_APP_NAME.ok_or_else(|| CodeError::UpdatesNotConfigured("no app name")) @@ -99,17 +99,19 @@ index 9033914..a39bbf7 100644 + VSCODE_CLI_DOWNLOAD_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured("no download url")) +} + - fn get_update_endpoint() -> Result<&'static str, CodeError> { -- VSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured("no service url")) -+ VSCODE_CLI_UPDATE_ENDPOINT.ok_or_else(|| CodeError::UpdatesNotConfigured("no update url")) + fn get_update_endpoint() -> Result { +@@ -66,3 +74,3 @@ fn get_update_endpoint() -> Result { + .map(|s| s.to_string()) +- .ok_or_else(|| CodeError::UpdatesNotConfigured("no service url")) ++ .ok_or_else(|| CodeError::UpdatesNotConfigured("no update url")) } -@@ -67,3 +75,4 @@ impl UpdateService { +@@ -74,3 +82,4 @@ impl UpdateService { - pub async fn get_release_by_semver_version( + /// Gets the latest commit for the target of the given quality. + pub async fn get_latest_commit( &self, -@@ -72,14 +81,10 @@ impl UpdateService { +@@ -79,14 +88,10 @@ impl UpdateService { quality: options::Quality, - version: &str, ) -> Result { @@ -120,19 +122,19 @@ index 9033914..a39bbf7 100644 let download_url = format!( - "{}/api/versions/{}/{}/{}", + "{}/{}/{}/{}/latest.json", - update_endpoint, + &update_endpoint, - version, - download_segment, quality_download_segment(quality), + platform.os(), + platform.arch(), ); -@@ -97,3 +102,3 @@ impl UpdateService { +@@ -104,3 +109,3 @@ impl UpdateService { let res = response.json::().await?; - debug!(self.log, "Resolved version {} to {}", version, res.version); + debug!(self.log, "Resolved quality {} to {}", quality, res.version); -@@ -108,40 +113,17 @@ impl UpdateService { +@@ -115,40 +120,17 @@ impl UpdateService { - /// Gets the latest commit for the target of the given quality. - pub async fn get_latest_commit( @@ -151,7 +153,7 @@ index 9033914..a39bbf7 100644 + let download_url = format!( - "{}/api/latest/{}/{}", -- update_endpoint, +- &update_endpoint, - download_segment, - quality_download_segment(quality), + "{}/download/{}/{}-reh-web-{}-{}-{}.tar.gz", @@ -185,7 +187,7 @@ index 9033914..a39bbf7 100644 - }) + Ok(download_url) } -@@ -150,15 +132,3 @@ impl UpdateService { +@@ -157,15 +139,3 @@ impl UpdateService { pub async fn get_download_stream(&self, release: &Release) -> Result { - let update_endpoint = get_update_endpoint()?; - let download_segment = release @@ -195,14 +197,14 @@ index 9033914..a39bbf7 100644 - - let download_url = format!( - "{}/commit:{}/{}/{}", -- update_endpoint, +- &update_endpoint, - release.commit, - download_segment, - quality_download_segment(release.quality), - ); + let download_url = self.get_download_url(release)?; -@@ -196,13 +166,2 @@ pub enum TargetKind { +@@ -203,13 +173,2 @@ pub enum TargetKind { -impl TargetKind { - fn download_segment(&self, platform: Platform) -> Option { @@ -216,7 +218,7 @@ index 9033914..a39bbf7 100644 -} - #[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize, Deserialize)] -@@ -225,30 +184,17 @@ pub enum Platform { +@@ -232,30 +191,17 @@ pub enum Platform { impl Platform { - pub fn archive(&self) -> Option { - match self { @@ -261,7 +263,7 @@ index 9033914..a39bbf7 100644 + Platform::WindowsX86 => "ia42", + Platform::WindowsARM64 => "arm64", } -@@ -257,17 +203,17 @@ impl Platform { +@@ -264,17 +210,17 @@ impl Platform { - pub fn cli(&self) -> String { + pub fn os(&self) -> String { @@ -293,10 +295,19 @@ index 9033914..a39bbf7 100644 + Platform::WindowsX86 => "win32", + Platform::WindowsARM64 => "win32", } -@@ -276,6 +222,2 @@ impl Platform { +@@ -283,6 +229,2 @@ impl Platform { - pub fn web(&self) -> String { - format!("{}-web", self.headless()) - } - pub fn env_default() -> Option { +diff --git a/extensions/tunnel-forwarding/src/extension.ts b/extensions/tunnel-forwarding/src/extension.ts +index 299c728..9fb635d 100644 +--- a/extensions/tunnel-forwarding/src/extension.ts ++++ b/extensions/tunnel-forwarding/src/extension.ts +@@ -28,3 +28,3 @@ const cliPath = process.env.VSCODE_FORWARDING_IS_DEV + process.platform === 'darwin' ? 'bin' : '../../bin', +- vscode.env.appQuality === 'stable' ? 'code-tunnel' : 'code-tunnel-insiders', ++ '!!TUNNEL_APP_NAME!!' + ) + (process.platform === 'win32' ? '.exe' : ''); diff --git a/patches/disable-copilot.patch b/patches/disable-copilot.patch new file mode 100644 index 00000000000..f00ec4b7ebe --- /dev/null +++ b/patches/disable-copilot.patch @@ -0,0 +1,116 @@ +diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +index 2543324..338c0ca 100644 +--- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts ++++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +@@ -170,3 +170,4 @@ abstract class OpenChatGlobalAction extends Action2 { + ChatContextKeys.Setup.hidden.negate(), +- ChatContextKeys.Setup.disabled.negate() ++ ChatContextKeys.Setup.disabled.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() + ) +@@ -734,3 +735,3 @@ export function registerChatActions() { + precondition: ContextKeyExpr.and( +- ChatContextKeys.Setup.installed, ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ChatContextKeys.Setup.disabled.negate(), +@@ -947,3 +948,4 @@ MenuRegistry.appendMenuItem(MenuId.CommandCenter, { + ChatContextKeys.Setup.hidden.negate(), +- ChatContextKeys.Setup.disabled.negate() ++ ChatContextKeys.Setup.disabled.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() + ), +@@ -964,3 +966,4 @@ MenuRegistry.appendMenuItem(MenuId.TitleBar, { + ChatContextKeys.Setup.hidden.negate(), +- ChatContextKeys.Setup.disabled.negate() ++ ChatContextKeys.Setup.disabled.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() + ), +@@ -981,3 +984,4 @@ registerAction2(class ToggleCopilotControl extends ToggleTitleBarConfigAction { + ChatContextKeys.Setup.hidden.negate(), +- ChatContextKeys.Setup.disabled.negate() ++ ChatContextKeys.Setup.disabled.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() + ), +@@ -1119,3 +1123,4 @@ MenuRegistry.appendMenuItem(MenuId.EditorContext, { + ChatContextKeys.Setup.hidden.negate(), +- ChatContextKeys.Setup.disabled.negate() ++ ChatContextKeys.Setup.disabled.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate() + ) +diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +index fac472c..107a3b1 100644 +--- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts ++++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +@@ -186,3 +186,3 @@ configurationRegistry.registerConfiguration({ + markdownDescription: nls.localize('chat.commandCenter.enabled', "Controls whether the command center shows a menu for actions to control chat (requires {0}).", '`#window.commandCenter#`'), +- default: true ++ default: false + }, +@@ -802,3 +802,3 @@ configurationRegistry.registerConfiguration({ + description: nls.localize('chat.disableAIFeatures', "Disable and hide built-in AI features provided by GitHub Copilot, including chat and inline suggestions."), +- default: false, ++ default: true, + scope: ConfigurationScope.WINDOW +diff --git a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts +index 8953884..cf0c2d2 100644 +--- a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts ++++ b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts +@@ -67,10 +67,9 @@ const chatViewDescriptor: IViewDescriptor = { + ctorDescriptor: new SyncDescriptor(ChatViewPane), +- when: ContextKeyExpr.or( +- ContextKeyExpr.or( +- ChatContextKeys.Setup.hidden, +- ChatContextKeys.Setup.disabled +- )?.negate(), +- ChatContextKeys.panelParticipantRegistered, +- ChatContextKeys.extensionInvalid +- ) ++ when: ContextKeyExpr.and( ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ++ ChatContextKeys.Setup.disabled.negate(), ++ ChatContextKeys.Setup.hidden.negate(), ++ ChatContextKeys.panelParticipantRegistered, ++ ChatContextKeys.extensionInvalid.negate() ++ ) + }; +diff --git a/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts b/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts +index 62efc91..12e97c6 100644 +--- a/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts ++++ b/src/vs/workbench/contrib/chat/common/actions/chatContextKeys.ts +@@ -119,3 +119,3 @@ export namespace ChatContextKeyExprs { + export const chatSetupTriggerContext = ContextKeyExpr.or( +- ChatContextKeys.Setup.installed.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ChatContextKeys.Entitlement.canSignUp +diff --git a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +index 7f4dfea..5957267 100644 +--- a/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts ++++ b/src/vs/workbench/contrib/mcp/browser/mcpServersView.ts +@@ -540,3 +540,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc + ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{}]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), ++ when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyExpr.or(ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`), ProductQualityContext.notEqualsTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`))), + weight: 40, +@@ -555,3 +555,3 @@ export class McpServersViewsContribution extends Disposable implements IWorkbenc + ctorDescriptor: new SyncDescriptor(DefaultBrowseMcpServersView, [{ showWelcome: true }]), +- when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), ++ when: ContextKeyExpr.and(DefaultViewsContext, HasInstalledMcpServersContext.toNegated(), ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), ChatContextKeys.Setup.hidden.negate(), McpServersGalleryStatusContext.isEqualTo(McpGalleryManifestStatus.Available), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceUrlConfig}`).negate(), ProductQualityContext.isEqualTo('stable'), ContextKeyDefinedExpr.create(`config.${mcpGalleryServiceEnablementConfig}`).negate()), + weight: 40, +diff --git a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +index 6f533f1..56c8f9d 100644 +--- a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts ++++ b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +@@ -685,3 +685,3 @@ registerAction2(class extends Action2 { + ChatContextKeys.Setup.disabled.negate(), +- ChatContextKeys.Setup.installed.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ContextKeyExpr.in(ResourceContextKey.Resource.key, 'git.mergeChanges'), +diff --git a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +index cfea087..5f3efe3 100644 +--- a/src/vs/workbench/contrib/scm/browser/scmViewPane.ts ++++ b/src/vs/workbench/contrib/scm/browser/scmViewPane.ts +@@ -1391,3 +1391,3 @@ registerAction2(class extends Action2 { + ChatContextKeys.Setup.disabled.negate(), +- ChatContextKeys.Setup.installed.negate(), ++ ContextKeyExpr.has('config.chat.disableAIFeatures').negate(), + ContextKeyExpr.equals('scmProvider', 'git') diff --git a/patches/disable-missing-vsda.patch b/patches/disable-missing-vsda.patch new file mode 100644 index 00000000000..1ecdb7e9588 --- /dev/null +++ b/patches/disable-missing-vsda.patch @@ -0,0 +1,128 @@ +diff --git a/src/vs/platform/sign/browser/signService.ts b/src/vs/platform/sign/browser/signService.ts +index c288b2e..8303040 100644 +--- a/src/vs/platform/sign/browser/signService.ts ++++ b/src/vs/platform/sign/browser/signService.ts +@@ -5,6 +5,2 @@ + +-import { importAMDNodeModule, resolveAmdNodeModulePath } from '../../../amdX.js'; +-import { WindowIntervalTimer } from '../../../base/browser/dom.js'; +-import { mainWindow } from '../../../base/browser/window.js'; +-import { memoize } from '../../../base/common/decorators.js'; + import { IProductService } from '../../product/common/productService.js'; +@@ -13,30 +9,4 @@ import { ISignService } from '../common/sign.js'; + +-declare namespace vsdaWeb { +- export function sign(salted_message: string): string; +- +- // eslint-disable-next-line @typescript-eslint/naming-convention +- export class validator { +- free(): void; +- constructor(); +- createNewMessage(original: string): string; +- validate(signed_message: string): 'ok' | 'error'; +- } +- +- export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; +- export function init(module_or_path?: InitInput | Promise): Promise; +-} +- +-// Initialized if/when vsda is loaded +-declare const vsda_web: { +- default: typeof vsdaWeb.init; +- sign: typeof vsdaWeb.sign; +- validator: typeof vsdaWeb.validator; +-}; +- +-const KEY_SIZE = 32; +-const IV_SIZE = 16; +-const STEP_SIZE = KEY_SIZE + IV_SIZE; +- + export class SignService extends AbstractSignService implements ISignService { +- constructor(@IProductService private readonly productService: IProductService) { ++ constructor(@IProductService _productService: IProductService) { + super(); +@@ -44,53 +14,7 @@ export class SignService extends AbstractSignService implements ISignService { + protected override getValidator(): Promise { +- return this.vsda().then(vsda => { +- const v = new vsda.validator(); +- return { +- createNewMessage: arg => v.createNewMessage(arg), +- validate: arg => v.validate(arg), +- dispose: () => v.free(), +- }; +- }); +- } +- +- protected override signValue(arg: string): Promise { +- return this.vsda().then(vsda => vsda.sign(arg)); +- } +- +- @memoize +- private async vsda(): Promise { +- const checkInterval = new WindowIntervalTimer(); +- let [wasm] = await Promise.all([ +- this.getWasmBytes(), +- new Promise((resolve, reject) => { +- importAMDNodeModule('vsda', 'rust/web/vsda.js').then(() => resolve(), reject); +- +- // todo@connor4312: there seems to be a bug(?) in vscode-loader with +- // require() not resolving in web once the script loads, so check manually +- checkInterval.cancelAndSet(() => { +- if (typeof vsda_web !== 'undefined') { +- resolve(); +- } +- }, 50, mainWindow); +- }).finally(() => checkInterval.dispose()), +- ]); +- +- const keyBytes = new TextEncoder().encode(this.productService.serverLicense?.join('\n') || ''); +- for (let i = 0; i + STEP_SIZE < keyBytes.length; i += STEP_SIZE) { +- const key = await crypto.subtle.importKey('raw', keyBytes.slice(i + IV_SIZE, i + IV_SIZE + KEY_SIZE), { name: 'AES-CBC' }, false, ['decrypt']); +- wasm = await crypto.subtle.decrypt({ name: 'AES-CBC', iv: keyBytes.slice(i, i + IV_SIZE) }, key, wasm); +- } +- +- await vsda_web.default(wasm); +- +- return vsda_web; ++ throw new Error('error loading vsda'); + } + +- private async getWasmBytes(): Promise { +- const url = resolveAmdNodeModulePath('vsda', 'rust/web/vsda_bg.wasm'); +- const response = await fetch(url); +- if (!response.ok) { +- throw new Error('error loading vsda'); +- } +- +- return response.arrayBuffer(); ++ protected override signValue(_arg: string): Promise { ++ throw new Error('error loading vsda'); + } +diff --git a/src/vs/server/node/remoteExtensionHostAgentServer.ts b/src/vs/server/node/remoteExtensionHostAgentServer.ts +index 269cc38..a53fca9 100644 +--- a/src/vs/server/node/remoteExtensionHostAgentServer.ts ++++ b/src/vs/server/node/remoteExtensionHostAgentServer.ts +@@ -8,3 +8,2 @@ import type * as http from 'http'; + import * as net from 'net'; +-import { createRequire } from 'node:module'; + import { performance } from 'perf_hooks'; +@@ -41,3 +40,2 @@ import { setupServerServices, SocketServer } from './serverServices.js'; + import { CacheControl, serveError, serveFile, WebClientServer } from './webClientServer.js'; +-const require = createRequire(import.meta.url); + +@@ -736,14 +734,3 @@ export async function createServer(address: string | net.AddressInfo | null, arg + +- const vsdaMod = instantiationService.invokeFunction((accessor) => { +- const logService = accessor.get(ILogService); +- const hasVSDA = fs.existsSync(join(FileAccess.asFileUri('').fsPath, '../node_modules/vsda')); +- if (hasVSDA) { +- try { +- return require('vsda'); +- } catch (err) { +- logService.error(err); +- } +- } +- return null; +- }); ++ const vsdaMod = instantiationService.invokeFunction(() => null); + diff --git a/patches/disable-update.patch.yet b/patches/disable-update.patch.yet new file mode 100644 index 00000000000..6364dcc653f --- /dev/null +++ b/patches/disable-update.patch.yet @@ -0,0 +1,9 @@ +diff --git a/src/vs/platform/update/common/update.config.contribution.ts b/src/vs/platform/update/common/update.config.contribution.ts +index d96926b..43f5d90 100644 +--- a/src/vs/platform/update/common/update.config.contribution.ts ++++ b/src/vs/platform/update/common/update.config.contribution.ts +@@ -20,3 +20,3 @@ configurationRegistry.registerConfiguration({ + enum: ['none', 'manual', 'start', 'default'], +- default: 'default', ++ default: 'none', + scope: ConfigurationScope.APPLICATION, diff --git a/patches/disable-vscodedev.patch b/patches/disable-vscodedev.patch new file mode 100644 index 00000000000..3736ac9e966 --- /dev/null +++ b/patches/disable-vscodedev.patch @@ -0,0 +1,185 @@ +diff --git a/extensions/github/package.json b/extensions/github/package.json +index 726a882..b9a4969 100644 +--- a/extensions/github/package.json ++++ b/extensions/github/package.json +@@ -44,19 +44,2 @@ + }, +- { +- "command": "github.copyVscodeDevLink", +- "title": "%command.copyVscodeDevLink%" +- }, +- { +- "command": "github.copyVscodeDevLinkFile", +- "title": "%command.copyVscodeDevLink%" +- }, +- { +- "command": "github.copyVscodeDevLinkWithoutRange", +- "title": "%command.copyVscodeDevLink%" +- }, +- { +- "command": "github.openOnVscodeDev", +- "title": "%command.openOnVscodeDev%", +- "icon": "$(globe)" +- }, + { +@@ -72,11 +55,2 @@ + ], +- "continueEditSession": [ +- { +- "command": "github.openOnVscodeDev", +- "when": "github.hasGitHubRepo", +- "qualifiedName": "Continue Working in vscode.dev", +- "category": "Remote Repositories", +- "remoteGroup": "virtualfs_44_vscode-vfs_2_web@2" +- } +- ], + "menus": { +@@ -91,18 +65,2 @@ + }, +- { +- "command": "github.copyVscodeDevLink", +- "when": "false" +- }, +- { +- "command": "github.copyVscodeDevLinkFile", +- "when": "false" +- }, +- { +- "command": "github.copyVscodeDevLinkWithoutRange", +- "when": "false" +- }, +- { +- "command": "github.openOnVscodeDev", +- "when": "false" +- }, + { +@@ -112,42 +70,2 @@ + ], +- "file/share": [ +- { +- "command": "github.copyVscodeDevLinkFile", +- "when": "github.hasGitHubRepo && remoteName != 'codespaces'", +- "group": "0_vscode@0" +- } +- ], +- "editor/context/share": [ +- { +- "command": "github.copyVscodeDevLink", +- "when": "github.hasGitHubRepo && resourceScheme != untitled && !isInEmbeddedEditor && remoteName != 'codespaces'", +- "group": "0_vscode@0" +- } +- ], +- "explorer/context/share": [ +- { +- "command": "github.copyVscodeDevLinkWithoutRange", +- "when": "github.hasGitHubRepo && resourceScheme != untitled && !isInEmbeddedEditor && remoteName != 'codespaces'", +- "group": "0_vscode@0" +- } +- ], +- "editor/lineNumber/context": [ +- { +- "command": "github.copyVscodeDevLink", +- "when": "github.hasGitHubRepo && resourceScheme != untitled && activeEditor == workbench.editors.files.textFileEditor && config.editor.lineNumbers == on && remoteName != 'codespaces'", +- "group": "1_cutcopypaste@2" +- }, +- { +- "command": "github.copyVscodeDevLink", +- "when": "github.hasGitHubRepo && resourceScheme != untitled && activeEditor == workbench.editor.notebook && remoteName != 'codespaces'", +- "group": "1_cutcopypaste@2" +- } +- ], +- "editor/title/context/share": [ +- { +- "command": "github.copyVscodeDevLinkWithoutRange", +- "when": "github.hasGitHubRepo && resourceScheme != untitled && remoteName != 'codespaces'", +- "group": "0_vscode@0" +- } +- ], + "scm/historyItem/context": [ +diff --git a/extensions/github/src/commands.ts b/extensions/github/src/commands.ts +index 48e9574..aa853a5 100644 +--- a/extensions/github/src/commands.ts ++++ b/extensions/github/src/commands.ts +@@ -9,28 +9,3 @@ import { publishRepository } from './publish.js'; + import { DisposableStore, getRepositoryFromUrl } from './util.js'; +-import { LinkContext, getCommitLink, getLink, getVscodeDevHost } from './links.js'; +- +-async function copyVscodeDevLink(gitAPI: GitAPI, useSelection: boolean, context: LinkContext, includeRange = true) { +- try { +- const permalink = await getLink(gitAPI, useSelection, true, getVscodeDevHost(), 'headlink', context, includeRange); +- if (permalink) { +- return vscode.env.clipboard.writeText(permalink); +- } +- } catch (err) { +- if (!(err instanceof vscode.CancellationError)) { +- vscode.window.showErrorMessage(err.message); +- } +- } +-} +- +-async function openVscodeDevLink(gitAPI: GitAPI): Promise { +- try { +- const headlink = await getLink(gitAPI, true, false, getVscodeDevHost(), 'headlink'); +- return headlink ? vscode.Uri.parse(headlink) : undefined; +- } catch (err) { +- if (!(err instanceof vscode.CancellationError)) { +- vscode.window.showErrorMessage(err.message); +- } +- return undefined; +- } +-} ++import { getCommitLink } from './links.js'; + +@@ -70,14 +45,2 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { + +- disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLink', async (context: LinkContext) => { +- return copyVscodeDevLink(gitAPI, true, context); +- })); +- +- disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkFile', async (context: LinkContext) => { +- return copyVscodeDevLink(gitAPI, false, context); +- })); +- +- disposables.add(vscode.commands.registerCommand('github.copyVscodeDevLinkWithoutRange', async (context: LinkContext) => { +- return copyVscodeDevLink(gitAPI, true, context, false); +- })); +- + disposables.add(vscode.commands.registerCommand('github.openOnGitHub', async (url: string, historyItemId: string) => { +@@ -113,6 +76,2 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable { + +- disposables.add(vscode.commands.registerCommand('github.openOnVscodeDev', async () => { +- return openVscodeDevLink(gitAPI); +- })); +- + return disposables; +diff --git a/extensions/github/src/extension.ts b/extensions/github/src/extension.ts +index 17906c5..86a0ca8 100644 +--- a/extensions/github/src/extension.ts ++++ b/extensions/github/src/extension.ts +@@ -17,3 +17,2 @@ import { GitHubBranchProtectionProviderManager } from './branchProtection.js'; + import { GitHubCanonicalUriProvider } from './canonicalUriProvider.js'; +-import { VscodeDevShareProvider } from './shareProviders.js'; + import { GitHubSourceControlHistoryItemDetailsProvider } from './historyItemDetailsProvider.js'; +@@ -109,3 +108,2 @@ function initializeGitExtension(context: ExtensionContext, octokitService: Octok + disposables.add(new GitHubCanonicalUriProvider(gitAPI)); +- disposables.add(new VscodeDevShareProvider(gitAPI)); + setGitHubContext(gitAPI, disposables); +diff --git a/extensions/github/src/remoteSourceProvider.ts b/extensions/github/src/remoteSourceProvider.ts +index 291a3f1..6304ed8 100644 +--- a/extensions/github/src/remoteSourceProvider.ts ++++ b/extensions/github/src/remoteSourceProvider.ts +@@ -10,3 +10,3 @@ import { Octokit } from '@octokit/rest'; + import { getRepositoryFromQuery, getRepositoryFromUrl } from './util.js'; +-import { getBranchLink, getVscodeDevHost } from './links.js'; ++import { getBranchLink } from './links.js'; + +@@ -129,9 +129,2 @@ export class GithubRemoteSourceProvider implements RemoteSourceProvider { + } +- }, { +- label: l10n.t('Checkout on vscode.dev'), +- icon: 'globe', +- run(branch: string) { +- const link = getBranchLink(url, branch, getVscodeDevHost()); +- env.openExternal(Uri.parse(link)); +- } + }]; diff --git a/patches/ext-from-gh.patch b/patches/ext-from-gh.patch index c2d7c14d89f..e5bf77d9bcb 100644 --- a/patches/ext-from-gh.patch +++ b/patches/ext-from-gh.patch @@ -1,15 +1,5 @@ -diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js -index 249777c..129af8a 100644 ---- a/build/lib/builtInExtensions.js -+++ b/build/lib/builtInExtensions.js -@@ -87,5 +87,2 @@ function getExtensionDownloadStream(extension) { - } -- else if (productjson.extensionsGallery?.serviceUrl) { -- input = ext.fromMarketplace(productjson.extensionsGallery.serviceUrl, extension); -- } - else { diff --git a/build/lib/builtInExtensions.ts b/build/lib/builtInExtensions.ts -index e9a1180..b8348e3 100644 +index d52567b..fe5b988 100644 --- a/build/lib/builtInExtensions.ts +++ b/build/lib/builtInExtensions.ts @@ -75,4 +75,2 @@ function getExtensionDownloadStream(extension: IExtensionDefinition) { diff --git a/patches/feat-command-filter.patch b/patches/feat-command-filter.patch new file mode 100644 index 00000000000..3e319bb242d --- /dev/null +++ b/patches/feat-command-filter.patch @@ -0,0 +1,167 @@ +diff --git a/src/vs/workbench/contrib/commands/common/commands.contribution.ts b/src/vs/workbench/contrib/commands/common/commands.contribution.ts +index 3fd6b59..97a0e04 100644 +--- a/src/vs/workbench/contrib/commands/common/commands.contribution.ts ++++ b/src/vs/workbench/contrib/commands/common/commands.contribution.ts +@@ -9,2 +9,3 @@ import { Action2, registerAction2 } from '../../../../platform/actions/common/ac + import { ICommandService } from '../../../../platform/commands/common/commands.js'; ++import { ConfigurationScope, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; + import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; +@@ -12,2 +13,3 @@ import { ILogService } from '../../../../platform/log/common/log.js'; + import { INotificationService } from '../../../../platform/notification/common/notification.js'; ++import { Registry } from '../../../../platform/registry/common/platform.js'; + +@@ -156,2 +158,30 @@ class RunCommands extends Action2 { + ++Registry.as('base.contributions.configuration') ++ .registerConfiguration({ ++ id: 'commands', ++ order: 30, ++ title: nls.localize('commandsConfigurationTitle', "Commands"), ++ type: 'object', ++ properties: { ++ 'commands.filters': { ++ additionalProperties: { ++ type: 'string', ++ enum: ['ask', 'off', 'on'], ++ enumDescriptions: [ ++ nls.localize('commands.filters.ask', 'Ask the user before executing the command.'), ++ nls.localize('commands.filters.off', 'The command is never authorized.'), ++ nls.localize('commands.filters.on', 'The command is always authorized.'), ++ ], ++ description: nls.localize('commands.filters.value', "Authorization for the command."), ++ }, ++ description: nls.localize('commands.filters', "Controls which commands are authorized to be executed."), ++ default: { ++ 'workbench.action.terminal.newLocal': 'off' ++ }, ++ scope: ConfigurationScope.APPLICATION, ++ tags: [] ++ }, ++ } ++ }); ++ + registerAction2(RunCommands); +diff --git a/src/vs/workbench/services/commands/common/commandService.ts b/src/vs/workbench/services/commands/common/commandService.ts +index 93d1631..0533cf0 100644 +--- a/src/vs/workbench/services/commands/common/commandService.ts ++++ b/src/vs/workbench/services/commands/common/commandService.ts +@@ -8,3 +8,6 @@ import { Emitter, Event } from '../../../../base/common/event.js'; + import { Disposable } from '../../../../base/common/lifecycle.js'; ++import Severity from '../../../../base/common/severity.js'; + import { CommandsRegistry, ICommandEvent, ICommandService } from '../../../../platform/commands/common/commands.js'; ++import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js'; ++import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; + import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; +@@ -20,2 +23,3 @@ export class CommandService extends Disposable implements ICommandService { + private _starActivation: CancelablePromise | null; ++ private _commandFilters: Record + +@@ -30,3 +34,5 @@ export class CommandService extends Disposable implements ICommandService { + @IExtensionService private readonly _extensionService: IExtensionService, +- @ILogService private readonly _logService: ILogService ++ @ILogService private readonly _logService: ILogService, ++ @IConfigurationService private readonly _configurationService: IConfigurationService, ++ @IDialogService private readonly _dialogService: IDialogService + ) { +@@ -35,2 +41,9 @@ export class CommandService extends Disposable implements ICommandService { + this._starActivation = null; ++ this._commandFilters = this._configurationService.getValue('commands.filters') ?? { 'workbench.action.terminal.newLocal': 'off' }; ++ ++ this._configurationService.onDidChangeConfiguration(async (event) => { ++ if (event.affectsConfiguration('commands.filters')) { ++ this._commandFilters = this._configurationService.getValue('commands.filters') ?? { 'workbench.action.terminal.newLocal': 'off' }; ++ } ++ }) + } +@@ -57,2 +70,27 @@ export class CommandService extends Disposable implements ICommandService { + ++ const filter = this._commandFilters[id]; ++ if (filter === 'off') { ++ return Promise.reject(new Error(`command '${id}' not authorized`)); ++ } ++ else if (filter === 'ask') { ++ const { result } = await this._dialogService.prompt({ ++ type: Severity.Error, ++ message: `Are you sure you want to execute the command "${id}"?`, ++ buttons: [ ++ { ++ label: 'Yes', ++ run: () => true ++ }, ++ { ++ label: 'No', ++ run: () => false ++ } ++ ], ++ }); ++ ++ if (!result) { ++ return Promise.reject(new Error(`command '${id}' not authorized`)); ++ } ++ } ++ + if (commandIsRegistered) { +diff --git a/src/vs/workbench/services/commands/test/common/commandService.test.ts b/src/vs/workbench/services/commands/test/common/commandService.test.ts +index ca3be11..fb456a3 100644 +--- a/src/vs/workbench/services/commands/test/common/commandService.test.ts ++++ b/src/vs/workbench/services/commands/test/common/commandService.test.ts +@@ -12,2 +12,7 @@ import { NullExtensionService } from '../../../extensions/common/extensions.js'; + import { CommandService } from '../../common/commandService.js'; ++import { NullPolicyService } from '../../../../../platform/policy/common/policy.js'; ++import { FileService } from '../../../../../platform/files/common/fileService.js'; ++import { URI } from '../../../../../base/common/uri.js'; ++import { ConfigurationService } from '../../../../../platform/configuration/common/configurationService.js'; ++import { TestDialogService } from '../../../../../platform/dialogs/test/common/testDialogService.js'; + +@@ -16,4 +21,16 @@ suite('CommandService', function () { + const store = ensureNoDisposablesAreLeakedInTestSuite(); ++ const testDisposables = ensureNoDisposablesAreLeakedInTestSuite(); ++ let nullConfigService: ConfigurationService + + setup(function () { ++ const nullPolicyService = new NullPolicyService(); ++ const nullLogService = testDisposables.add(new NullLogService()); ++ const nullFileService = testDisposables.add(new FileService(nullLogService)); ++ nullConfigService = testDisposables.add(new ConfigurationService( ++ URI.file('/config.json'), ++ nullFileService, ++ nullPolicyService, ++ nullLogService, ++ )); ++ + store.add(CommandsRegistry.registerCommand('foo', function () { })); +@@ -30,3 +47,3 @@ suite('CommandService', function () { + } +- }, new NullLogService())); ++ }, new NullLogService(), nullConfigService, new TestDialogService())); + +@@ -50,3 +67,3 @@ suite('CommandService', function () { + +- const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService())); ++ const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService(), nullConfigService, new TestDialogService())); + +@@ -68,3 +85,3 @@ suite('CommandService', function () { + } +- }, new NullLogService())); ++ }, new NullLogService(), nullConfigService, new TestDialogService())); + +@@ -85,3 +102,3 @@ suite('CommandService', function () { + } +- }, new NullLogService())); ++ }, new NullLogService(), nullConfigService, new TestDialogService())); + +@@ -125,3 +142,3 @@ suite('CommandService', function () { + +- }, new NullLogService())); ++ }, new NullLogService(), nullConfigService, new TestDialogService())); + +@@ -166,3 +183,3 @@ suite('CommandService', function () { + +- }, new NullLogService())); ++ }, new NullLogService(), nullConfigService, new TestDialogService())); + +@@ -187,3 +204,3 @@ suite('CommandService', function () { + }; +- const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService())); ++ const service = store.add(new CommandService(new InstantiationService(), extensionService, new NullLogService(), nullConfigService, new TestDialogService())); + diff --git a/patches/feat-user-product.patch b/patches/feat-user-product.patch new file mode 100644 index 00000000000..87fe5becccd --- /dev/null +++ b/patches/feat-user-product.patch @@ -0,0 +1,107 @@ +diff --git a/src/cli.ts b/src/cli.ts +index b643e34..2f228ef 100644 +--- a/src/cli.ts ++++ b/src/cli.ts +@@ -5,2 +5,4 @@ + ++import * as path from 'node:path'; ++import { createRequire } from 'node:module'; + import './bootstrap-cli.js'; // this MUST come before other imports as it changes global state +@@ -10,3 +12,5 @@ import { resolveNLSConfiguration } from './vs/base/node/nls.js'; + import { product } from './bootstrap-meta.js'; ++import { getUserDataPath } from './vs/platform/environment/node/userDataPath.js'; + ++const require = createRequire(import.meta.url); + // NLS +@@ -21,2 +25,4 @@ process.env['VSCODE_CLI'] = '1'; + ++resolveUserProduct(); ++ + // Bootstrap ESM +@@ -26 +32,14 @@ await bootstrapESM(); + await import('./vs/code/node/cli.js'); ++ ++function resolveUserProduct() { ++ const userDataPath = getUserDataPath({_:[]}, product.nameShort ?? 'code-oss-dev'); ++ const userProductPath = path.join(userDataPath, 'product.json'); ++ ++ try { ++ // Assign the product configuration to the global scope ++ const productJson = require(userProductPath); ++ ++ globalThis._VSCODE_USER_PRODUCT_JSON = productJson; ++ } catch (ex) { ++ } ++} +\ No newline at end of file +diff --git a/src/main.ts b/src/main.ts +index ec188d0..0160be6 100644 +--- a/src/main.ts ++++ b/src/main.ts +@@ -8,2 +8,3 @@ import * as fs from 'original-fs'; + import * as os from 'node:os'; ++import { createRequire } from 'node:module'; + import { performance } from 'node:perf_hooks'; +@@ -22,2 +23,4 @@ import { NativeParsedArgs } from './vs/platform/environment/common/argv.js'; + ++const require = createRequire(import.meta.url); ++ + perf.mark('code/didStartMain'); +@@ -109,2 +112,14 @@ registerListeners(); + ++function resolveUserProduct() { ++ const userProductPath = path.join(userDataPath, 'product.json'); ++ ++ try { ++ // Assign the product configuration to the global scope ++ const productJson = require(userProductPath); ++ ++ globalThis._VSCODE_USER_PRODUCT_JSON = productJson; ++ } catch (ex) { ++ } ++} ++ + /** +@@ -205,2 +220,3 @@ async function startup(codeCachePath: string | undefined, nlsConfig: INLSConfigu + process.env['VSCODE_CODE_CACHE_PATH'] = codeCachePath || ''; ++ resolveUserProduct(); + +diff --git a/src/typings/vscode-globals-product.d.ts b/src/typings/vscode-globals-product.d.ts +index ab169bd..2155f5c 100644 +--- a/src/typings/vscode-globals-product.d.ts ++++ b/src/typings/vscode-globals-product.d.ts +@@ -43,2 +43,4 @@ declare global { + var _VSCODE_USE_RELATIVE_IMPORTS: boolean | undefined; ++ ++ var _VSCODE_USER_PRODUCT_JSON: Record; + } +diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts +index 6f093e9..b63af55 100644 +--- a/src/vs/platform/product/common/product.ts ++++ b/src/vs/platform/product/common/product.ts +@@ -31,2 +31,25 @@ else if (globalThis._VSCODE_PRODUCT_JSON && globalThis._VSCODE_PACKAGE_JSON) { + ++ // Merge user-customized product.json ++ try { ++ const merge = (...objects: any[]) => ++ objects.reduce((result, current) => { ++ Object.keys(current).forEach((key) => { ++ if (Array.isArray(result[key]) && Array.isArray(current[key])) { ++ result[key] = current[key]; ++ } else if (typeof result[key] === 'object' && typeof current[key] === 'object') { ++ result[key] = merge(result[key], current[key]); ++ } else { ++ result[key] = current[key]; ++ } ++ }); ++ ++ return result; ++ }, {}) as any; ++ ++ const userProduct = globalThis._VSCODE_USER_PRODUCT_JSON || {}; ++ ++ product = merge(product, userProduct); ++ } catch (ex) { ++ } ++ + // Running out of sources diff --git a/patches/fix-build-vsce.patch b/patches/fix-build-vsce.patch new file mode 100644 index 00000000000..6e3d4070176 --- /dev/null +++ b/patches/fix-build-vsce.patch @@ -0,0 +1,280 @@ +diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts +index 24462a3..ecb43fd 100644 +--- a/build/lib/extensions.ts ++++ b/build/lib/extensions.ts +@@ -94,3 +94,3 @@ function fromLocal(extensionPath: string, forWeb: boolean, disableMangle: boolea + function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, disableMangle: boolean): Stream { +- const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce'); ++ const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce'); + const webpack = require('webpack'); +@@ -208,3 +208,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, + function fromLocalNormal(extensionPath: string): Stream { +- const vsce = require('@vscode/vsce') as typeof import('@vscode/vsce'); ++ const vsce = require('@vscodium/vsce') as typeof import('@vscodium/vsce'); + const result = es.through(); +diff --git a/build/package-lock.json b/build/package-lock.json +index fe9be0c..9747dca 100644 +--- a/build/package-lock.json ++++ b/build/package-lock.json +@@ -51,3 +51,3 @@ + "@vscode/ripgrep": "^1.15.13", +- "@vscode/vsce": "3.6.1", ++ "@vscodium/vsce": "3.6.1-258428", + "ansi-colors": "^3.2.3", +@@ -1944,6 +1944,6 @@ + }, +- "node_modules/@vscode/vsce": { +- "version": "3.6.1", +- "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.6.1.tgz", +- "integrity": "sha512-UXtMgeCBl/t5zjn1TX1v1sl5L/oIv3Xc3pkKPGzaqeFCIkp5+wfFFDBXTWDt3d5uUulHnZKORHkMIsKNe9+k5A==", ++ "node_modules/@vscodium/vsce": { ++ "version": "3.6.1-258428", ++ "resolved": "https://registry.npmjs.org/@vscodium/vsce/-/vsce-3.6.1-258428.tgz", ++ "integrity": "sha512-B2uys5YU5MGNmzQPHsMsRXxzlQvZanhxE8Sfkd4Sr/LBN9BaV5yhMCppV7jyLUOQajj9K3YZThLqUYm4CCBy3A==", + "dev": true, +@@ -1956,3 +1956,2 @@ + "@secretlint/secretlint-rule-preset-recommend": "^10.1.2", +- "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", +@@ -1991,148 +1990,3 @@ + }, +- "node_modules/@vscode/vsce-sign": { +- "version": "2.0.7", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.7.tgz", +- "integrity": "sha512-cz0GFW8qCxpypOy3y509u26K1FIPMlDIHBwGmDyvEbgoma2v3y5YIHHuijr8zCYBp9kzCCOJd28s/0PG7cA7ew==", +- "dev": true, +- "hasInstallScript": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optionalDependencies": { +- "@vscode/vsce-sign-alpine-arm64": "2.0.6", +- "@vscode/vsce-sign-alpine-x64": "2.0.6", +- "@vscode/vsce-sign-darwin-arm64": "2.0.6", +- "@vscode/vsce-sign-darwin-x64": "2.0.6", +- "@vscode/vsce-sign-linux-arm": "2.0.6", +- "@vscode/vsce-sign-linux-arm64": "2.0.6", +- "@vscode/vsce-sign-linux-x64": "2.0.6", +- "@vscode/vsce-sign-win32-arm64": "2.0.6", +- "@vscode/vsce-sign-win32-x64": "2.0.6" +- } +- }, +- "node_modules/@vscode/vsce-sign-alpine-arm64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.6.tgz", +- "integrity": "sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "alpine" +- ] +- }, +- "node_modules/@vscode/vsce-sign-alpine-x64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.6.tgz", +- "integrity": "sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "alpine" +- ] +- }, +- "node_modules/@vscode/vsce-sign-darwin-arm64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.6.tgz", +- "integrity": "sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "darwin" +- ] +- }, +- "node_modules/@vscode/vsce-sign-darwin-x64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.6.tgz", +- "integrity": "sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "darwin" +- ] +- }, +- "node_modules/@vscode/vsce-sign-linux-arm": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.6.tgz", +- "integrity": "sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==", +- "cpu": [ +- "arm" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "linux" +- ] +- }, +- "node_modules/@vscode/vsce-sign-linux-arm64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.6.tgz", +- "integrity": "sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "linux" +- ] +- }, +- "node_modules/@vscode/vsce-sign-linux-x64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.6.tgz", +- "integrity": "sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "linux" +- ] +- }, +- "node_modules/@vscode/vsce-sign-win32-arm64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.6.tgz", +- "integrity": "sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==", +- "cpu": [ +- "arm64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "win32" +- ] +- }, +- "node_modules/@vscode/vsce-sign-win32-x64": { +- "version": "2.0.6", +- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.6.tgz", +- "integrity": "sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==", +- "cpu": [ +- "x64" +- ], +- "dev": true, +- "license": "SEE LICENSE IN LICENSE.txt", +- "optional": true, +- "os": [ +- "win32" +- ] +- }, +- "node_modules/@vscode/vsce/node_modules/ansi-styles": { ++ "node_modules/@vscodium/vsce/node_modules/ansi-styles": { + "version": "4.3.0", +@@ -2152,3 +2006,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/chalk": { ++ "node_modules/@vscodium/vsce/node_modules/chalk": { + "version": "4.1.2", +@@ -2169,3 +2023,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/color-convert": { ++ "node_modules/@vscodium/vsce/node_modules/color-convert": { + "version": "2.0.1", +@@ -2182,3 +2036,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/color-name": { ++ "node_modules/@vscodium/vsce/node_modules/color-name": { + "version": "1.1.4", +@@ -2189,3 +2043,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/glob": { ++ "node_modules/@vscodium/vsce/node_modules/glob": { + "version": "11.1.0", +@@ -2213,3 +2067,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": { ++ "node_modules/@vscodium/vsce/node_modules/glob/node_modules/minimatch": { + "version": "10.1.1", +@@ -2229,3 +2083,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/has-flag": { ++ "node_modules/@vscodium/vsce/node_modules/has-flag": { + "version": "4.0.0", +@@ -2239,3 +2093,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/jsonc-parser": { ++ "node_modules/@vscodium/vsce/node_modules/jsonc-parser": { + "version": "3.3.1", +@@ -2243,9 +2097,11 @@ + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", +- "dev": true ++ "dev": true, ++ "license": "MIT" + }, +- "node_modules/@vscode/vsce/node_modules/semver": { +- "version": "7.6.3", +- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", +- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", ++ "node_modules/@vscodium/vsce/node_modules/semver": { ++ "version": "7.7.3", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", ++ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, ++ "license": "ISC", + "bin": { +@@ -2257,3 +2113,3 @@ + }, +- "node_modules/@vscode/vsce/node_modules/supports-color": { ++ "node_modules/@vscodium/vsce/node_modules/supports-color": { + "version": "7.2.0", +@@ -2270,12 +2126,2 @@ + }, +- "node_modules/@vscode/vsce/node_modules/yazl": { +- "version": "2.5.1", +- "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", +- "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "buffer-crc32": "~0.2.3" +- } +- }, + "node_modules/@xmldom/xmldom": { +@@ -6955,2 +6801,12 @@ + }, ++ "node_modules/yazl": { ++ "version": "2.5.1", ++ "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", ++ "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "buffer-crc32": "~0.2.3" ++ } ++ }, + "node_modules/yocto-queue": { +diff --git a/build/package.json b/build/package.json +index 39db6b7..55beb4a 100644 +--- a/build/package.json ++++ b/build/package.json +@@ -45,3 +45,3 @@ + "@vscode/ripgrep": "^1.15.13", +- "@vscode/vsce": "3.6.1", ++ "@vscodium/vsce": "3.6.1-258428", + "ansi-colors": "^3.2.3", diff --git a/patches/fix-gallery.patch b/patches/fix-gallery.patch new file mode 100644 index 00000000000..d34ae00405b --- /dev/null +++ b/patches/fix-gallery.patch @@ -0,0 +1,42 @@ +diff --git a/src/vs/base/common/product.ts b/src/vs/base/common/product.ts +index 3954823..f8026cd 100644 +--- a/src/vs/base/common/product.ts ++++ b/src/vs/base/common/product.ts +@@ -112,2 +112,4 @@ export interface IProductConfiguration { + readonly accessSKUs?: string[]; ++ readonly itemUrl: string; ++ readonly latestUrlTemplate?: string; + }; +diff --git a/src/vs/platform/extensionManagement/common/extensionGalleryManifestService.ts b/src/vs/platform/extensionManagement/common/extensionGalleryManifestService.ts +index 658219e..d1bf7a9 100644 +--- a/src/vs/platform/extensionManagement/common/extensionGalleryManifestService.ts ++++ b/src/vs/platform/extensionManagement/common/extensionGalleryManifestService.ts +@@ -19,2 +19,3 @@ type ExtensionGalleryConfig = { + readonly nlsBaseUrl: string; ++ readonly latestUrlTemplate?: string; + }; +@@ -49,3 +50,3 @@ export class ExtensionGalleryManifestService extends Disposable implements IExte + { +- id: `${extensionsGallery.serviceUrl}/vscode/{publisher}/{name}/latest`, ++ id: extensionsGallery.latestUrlTemplate ?? `${extensionsGallery.serviceUrl}/vscode/{publisher}/{name}/latest`, + type: ExtensionGalleryResourceType.ExtensionLatestVersionUri +diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts +index 5a6c171..112b31b 100644 +--- a/src/vs/platform/product/common/product.ts ++++ b/src/vs/platform/product/common/product.ts +@@ -31,2 +31,15 @@ else if (globalThis._VSCODE_PRODUCT_JSON && globalThis._VSCODE_PACKAGE_JSON) { + ++ const { serviceUrl, controlUrl, itemUrl, latestUrlTemplate, extensionUrlTemplate, resourceUrlTemplate } = product.extensionsGallery || {}; ++ ++ Object.assign(product, { ++ extensionsGallery: { ++ serviceUrl: env['VSCODE_GALLERY_SERVICE_URL'] || serviceUrl, ++ controlUrl: env['VSCODE_GALLERY_CONTROL_URL'] || controlUrl, ++ itemUrl: env['VSCODE_GALLERY_ITEM_URL'] || itemUrl, ++ latestUrlTemplate: env['VSCODE_GALLERY_LATEST_URL_TEMPLATE'] || latestUrlTemplate, ++ extensionUrlTemplate: env['VSCODE_GALLERY_EXTENSION_URL_TEMPLATE'] || extensionUrlTemplate, ++ resourceUrlTemplate: env['VSCODE_GALLERY_RESOURCE_URL_TEMPLATE'] || resourceUrlTemplate, ++ } ++ }); ++ + // Running out of sources diff --git a/patches/fix-keymap.patch b/patches/fix-keymap.patch new file mode 100644 index 00000000000..9f7f6375e73 --- /dev/null +++ b/patches/fix-keymap.patch @@ -0,0 +1,131 @@ +diff --git a/.npmrc b/.npmrc +index 060337b..9292787 100644 +--- a/.npmrc ++++ b/.npmrc +@@ -5,2 +5,3 @@ runtime="electron" + build_from_source="true" ++build_from_source_native_keymap="no" + legacy-peer-deps="true" +diff --git a/build/.moduleignore b/build/.moduleignore +index fc7c538..7aece0d 100644 +--- a/build/.moduleignore ++++ b/build/.moduleignore +@@ -65,7 +65,7 @@ fsevents/test/** + +-native-keymap/binding.gyp +-native-keymap/build/** +-native-keymap/src/** +-native-keymap/deps/** +-!native-keymap/build/Release/*.node ++@vscodium/native-keymap/binding.gyp ++@vscodium/native-keymap/build/** ++@vscodium/native-keymap/src/** ++@vscodium/native-keymap/deps/** ++!@vscodium/native-keymap/build/Release/*.node + +diff --git a/eslint.config.js b/eslint.config.js +index e9809e6..6065336 100644 +--- a/eslint.config.js ++++ b/eslint.config.js +@@ -1465,3 +1465,3 @@ export default tseslint.config( + 'node:module', +- 'native-keymap', ++ '@vscodium/native-keymap', + 'native-watchdog', +diff --git a/package-lock.json b/package-lock.json +index b7ae476..93692b8 100644 +--- a/package-lock.json ++++ b/package-lock.json +@@ -29,2 +29,3 @@ + "@vscode/windows-registry": "^1.1.0", ++ "@vscodium/native-keymap": "3.3.7-258424", + "@xterm/addon-clipboard": "^0.3.0-beta.91", +@@ -46,3 +47,2 @@ + "native-is-elevated": "0.8.0", +- "native-keymap": "^3.3.5", + "native-watchdog": "^1.4.1", +@@ -3300,2 +3300,9 @@ + }, ++ "node_modules/@vscodium/native-keymap": { ++ "version": "3.3.7-258424", ++ "resolved": "https://registry.npmjs.org/@vscodium/native-keymap/-/native-keymap-3.3.7-258424.tgz", ++ "integrity": "sha512-HZ20QfExV0kE2l939yE3wn0LezSV7BcpxOFmlUMUHBQbdANMSLkwzo6Zw1xOEZDoYm3VTDHt8/+WwLBR2MpA3A==", ++ "hasInstallScript": true, ++ "license": "MIT" ++ }, + "node_modules/@webassemblyjs/ast": { +@@ -12516,5 +12523,6 @@ + "node_modules/napi-build-utils": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", +- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", ++ "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", ++ "license": "MIT" + }, +@@ -12527,9 +12535,2 @@ + }, +- "node_modules/native-keymap": { +- "version": "3.3.7", +- "resolved": "https://registry.npmjs.org/native-keymap/-/native-keymap-3.3.7.tgz", +- "integrity": "sha512-07n5kF0L9ERC9pilqEFucnhs1XG4WttbHAMWhhOSqQYXhB8mMNTSCzP4psTaVgDSp6si2HbIPhTIHuxSia6NPQ==", +- "hasInstallScript": true, +- "license": "MIT" +- }, + "node_modules/native-watchdog": { +@@ -13922,5 +13923,6 @@ + "node_modules/prebuild-install": { +- "version": "7.1.2", +- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", +- "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", ++ "version": "7.1.3", ++ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", ++ "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", ++ "license": "MIT", + "dependencies": { +@@ -13931,3 +13933,3 @@ + "mkdirp-classic": "^0.5.3", +- "napi-build-utils": "^1.0.1", ++ "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", +diff --git a/package.json b/package.json +index b9978d4..bffe52e 100644 +--- a/package.json ++++ b/package.json +@@ -108,3 +108,3 @@ + "native-is-elevated": "0.8.0", +- "native-keymap": "^3.3.5", ++ "@vscodium/native-keymap": "3.3.7-258424", + "native-watchdog": "^1.4.1", +diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +index d4ce18a..9db7f76 100644 +--- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts ++++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +@@ -44,8 +44,8 @@ flakySuite('Native Modules (all platforms)', () => { + test('native-keymap', async () => { +- const keyMap = await import('native-keymap'); +- assert.ok(typeof keyMap.onDidChangeKeyboardLayout === 'function', testErrorMessage('native-keymap')); +- assert.ok(typeof keyMap.getCurrentKeyboardLayout === 'function', testErrorMessage('native-keymap')); ++ const keyMap = await import('@vscodium/native-keymap'); ++ assert.ok(typeof keyMap.onDidChangeKeyboardLayout === 'function', testErrorMessage('@vscodium/native-keymap')); ++ assert.ok(typeof keyMap.getCurrentKeyboardLayout === 'function', testErrorMessage('@vscodium/native-keymap')); + + const result = keyMap.getCurrentKeyboardLayout(); +- assert.ok(result, testErrorMessage('native-keymap')); ++ assert.ok(result, testErrorMessage('@vscodium/native-keymap')); + }); +diff --git a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts +index 8950ce2..f31cea6 100644 +--- a/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts ++++ b/src/vs/platform/keyboardLayout/electron-main/keyboardLayoutMainService.ts +@@ -5,3 +5,3 @@ + +-import type * as nativeKeymap from 'native-keymap'; ++import type * as nativeKeymap from '@vscodium/native-keymap'; + import * as platform from '../../../base/common/platform.js'; +@@ -48,3 +48,3 @@ export class KeyboardLayoutMainService extends Disposable implements INativeKeyb + private async _doInitialize(): Promise { +- const nativeKeymapMod = await import('native-keymap'); ++ const nativeKeymapMod = await import('@vscodium/native-keymap'); + diff --git a/patches/fix-npm-preinstall.patch b/patches/fix-npm-preinstall.patch new file mode 100644 index 00000000000..994243ee076 --- /dev/null +++ b/patches/fix-npm-preinstall.patch @@ -0,0 +1,14 @@ +diff --git a/build/npm/preinstall.ts b/build/npm/preinstall.ts +index 3476fca..e23329f 100644 +--- a/build/npm/preinstall.ts ++++ b/build/npm/preinstall.ts +@@ -129,3 +129,3 @@ function installHeaders() { + // Refs https://chromium-review.googlesource.com/c/v8/v8/+/6879784 +- if (process.platform === 'linux') { ++ if (process.platform === 'linux' && local) { + const homedir = os.homedir(); +@@ -133,3 +133,3 @@ function installHeaders() { + const nodeGypCache = path.join(cachePath, 'node-gyp'); +- const localHeaderPath = path.join(nodeGypCache, local!.target, 'include', 'node'); ++ const localHeaderPath = path.join(nodeGypCache, local.target, 'include', 'node'); + if (fs.existsSync(localHeaderPath)) { diff --git a/patches/policies.patch b/patches/fix-policies.patch similarity index 81% rename from patches/policies.patch rename to patches/fix-policies.patch index bb05eeb7da5..5e72399f817 100644 --- a/patches/policies.patch +++ b/patches/fix-policies.patch @@ -1,8 +1,8 @@ diff --git a/build/.moduleignore b/build/.moduleignore -index 3e654cf..d9ee9f5 100644 +index 7aece0d..baebcd5 100644 --- a/build/.moduleignore +++ b/build/.moduleignore -@@ -126,9 +126,11 @@ vsda/** +@@ -128,9 +128,11 @@ vsda/** -@vscode/policy-watcher/build/** -@vscode/policy-watcher/.husky/** @@ -21,61 +21,33 @@ index 3e654cf..d9ee9f5 100644 +@vscodium/policy-watcher/index.d.ts +!@vscodium/policy-watcher/build/Release/vscodium-policy-watcher.node -diff --git a/build/lib/policies.js b/build/lib/policies.js -index ac69762..db1fd3d 100644 ---- a/build/lib/policies.js -+++ b/build/lib/policies.js -@@ -81,3 +81,3 @@ class BasePolicy { - return [ -- ``, -+ ``, - ` `, -@@ -501,3 +501,3 @@ function renderADMX(regKey, versions, categories, policies) { - -- -+ - -diff --git a/build/lib/policies.ts b/build/lib/policies.ts -index 34d20e9..8404cdf 100644 ---- a/build/lib/policies.ts -+++ b/build/lib/policies.ts -@@ -107,3 +107,3 @@ abstract class BasePolicy implements Policy { - return [ -- ``, -+ ``, - ` `, -@@ -703,3 +703,3 @@ function renderADMX(regKey: string, versions: string[], categories: Category[], - -- -+ - diff --git a/eslint.config.js b/eslint.config.js -index f1b01d0..7dca1f1 100644 +index 6065336..1d36678 100644 --- a/eslint.config.js +++ b/eslint.config.js -@@ -797,3 +797,3 @@ export default tseslint.config( +@@ -1448,3 +1448,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 beb023f..623c8ab 100644 +index 93692b8..fd1d22a 100644 --- a/package-lock.json +++ b/package-lock.json -@@ -18,3 +18,2 @@ - "@vscode/iconv-lite-umd": "0.7.0", +@@ -17,3 +17,2 @@ + "@vscode/iconv-lite-umd": "0.7.1", - "@vscode/policy-watcher": "^1.3.2", - "@vscode/proxy-agent": "^0.32.0", -@@ -29,2 +28,3 @@ - "@vscode/windows-registry": "^1.1.0", + "@vscode/proxy-agent": "^0.36.0", +@@ -30,2 +29,3 @@ + "@vscodium/native-keymap": "3.3.7-258424", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@xterm/addon-clipboard": "^0.2.0-beta.84", -@@ -2701,22 +2701,2 @@ + "@xterm/addon-clipboard": "^0.3.0-beta.91", +@@ -2952,22 +2952,2 @@ }, - "node_modules/@vscode/policy-watcher": { -- "version": "1.3.2", -- "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.2.tgz", -- "integrity": "sha512-fmNPYysU2ioH99uCaBPiRblEZSnir5cTmc7w91hAxAoYoGpHt2PZPxT5eIOn7FGmPOsjLdQcd6fduFJGYVD4Mw==", +- "version": "1.3.5", +- "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.5.tgz", +- "integrity": "sha512-k1n9gaDBjyVRy5yJLABbZCnyFwgQ8OA4sR3vXmXnmB+mO9JA0nsl/XOXQfVCoLasBu3UHCOfAnDWGn2sRzCR+A==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { @@ -93,7 +65,7 @@ index beb023f..623c8ab 100644 - } - }, "node_modules/@vscode/proxy-agent": { -@@ -3117,2 +3097,22 @@ +@@ -3307,2 +3287,22 @@ }, + "node_modules/@vscodium/policy-watcher": { + "version": "1.3.2-252465", @@ -117,14 +89,14 @@ index beb023f..623c8ab 100644 + }, "node_modules/@webassemblyjs/ast": { diff --git a/package.json b/package.json -index 8d3443f..e95927c 100644 +index bffe52e..d0e04d0 100644 --- a/package.json +++ b/package.json -@@ -77,3 +77,3 @@ - "@vscode/iconv-lite-umd": "0.7.0", +@@ -79,3 +79,3 @@ + "@vscode/iconv-lite-umd": "0.7.1", - "@vscode/policy-watcher": "^1.3.2", + "@vscodium/policy-watcher": "^1.3.2-252465", - "@vscode/proxy-agent": "^0.32.0", + "@vscode/proxy-agent": "^0.36.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 --- a/src/vs/base/test/node/uri.perf.data.txt @@ -225,7 +197,7 @@ index ee0a24b..881ce36 100644 +/Users/example/node_modules/@vscodium/policy-watcher/src/windows/NumberPolicy.hh /Users/example/node_modules/@vscode/vscode-languagedetection/CODE_OF_CONDUCT.md diff --git a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts -index e0b99f3..f3af586 100644 +index 9db7f76..33beb8c 100644 --- a/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts +++ b/src/vs/platform/environment/test/node/nativeModules.integrationTest.ts @@ -62,5 +62,5 @@ flakySuite('Native Modules (all platforms)', () => { @@ -238,7 +210,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..840d655 100644 +index 5b08cd9..728d7bd 100644 --- a/src/vs/platform/policy/node/nativePolicyService.ts +++ b/src/vs/platform/policy/node/nativePolicyService.ts @@ -8,3 +8,3 @@ import { IStringDictionary } from '../../../base/common/collections.js'; @@ -254,5 +226,5 @@ index 67f7892..840d655 100644 @@ -31,3 +31,3 @@ export class NativePolicyService extends AbstractPolicyService implements IPolic try { - this.watcher.value = createWatcher(this.productName, policyDefinitions, update => { -+ this.watcher.value = createWatcher('!!ORG_NAME!!', this.productName, policyDefinitions, update => { ++ this.watcher.value = createWatcher('VSCodium', this.productName, policyDefinitions, update => { this._onDidPolicyChange(update); diff --git a/patches/fix-remote-libs.patch b/patches/fix-remote-libs.patch index c7d4456d799..a208a5c37a1 100644 --- a/patches/fix-remote-libs.patch +++ b/patches/fix-remote-libs.patch @@ -1,12 +1,8 @@ diff --git a/remote/package-lock.json b/remote/package-lock.json -index f0ed1cc..a973af3 100644 +index 30a7391..94f839a 100644 --- a/remote/package-lock.json +++ b/remote/package-lock.json -@@ -40,2 +40,3 @@ - "tas-client-umd": "0.2.0", -+ "tslib": "^2.6.3", - "vscode-oniguruma": "1.7.0", -@@ -1109,2 +1110,8 @@ +@@ -1155,2 +1155,8 @@ }, + "node_modules/tslib": { + "version": "2.7.0", @@ -16,10 +12,10 @@ index f0ed1cc..a973af3 100644 + }, "node_modules/tunnel-agent": { diff --git a/remote/package.json b/remote/package.json -index 33afee9..525ed07 100644 +index 119d62c..9ef9624 100644 --- a/remote/package.json +++ b/remote/package.json -@@ -35,2 +35,3 @@ - "tas-client-umd": "0.2.0", +@@ -37,2 +37,3 @@ + "tas-client": "0.3.1", + "tslib": "^2.6.3", "vscode-oniguruma": "1.7.0", diff --git a/patches/fix-tunnel-extension-recommendation.patch b/patches/fix-tunnel-extension-recommendation.patch new file mode 100644 index 00000000000..4c1cc48ead4 --- /dev/null +++ b/patches/fix-tunnel-extension-recommendation.patch @@ -0,0 +1,10 @@ +diff --git a/src/vs/workbench/contrib/remoteTunnel/electron-browser/remoteTunnel.contribution.ts b/src/vs/workbench/contrib/remoteTunnel/electron-browser/remoteTunnel.contribution.ts +index 0eaa650..43eeee6 100644 +--- a/src/vs/workbench/contrib/remoteTunnel/electron-browser/remoteTunnel.contribution.ts ++++ b/src/vs/workbench/contrib/remoteTunnel/electron-browser/remoteTunnel.contribution.ts +@@ -152,2 +152,5 @@ export class RemoteTunnelWorkbenchContribution extends Disposable implements IWo + const shouldRecommend = async () => { ++ if (!Boolean(remoteExtension)) { ++ return false; ++ } + if (this.storageService.getBoolean(REMOTE_TUNNEL_EXTENSION_RECOMMENDED_KEY, StorageScope.APPLICATION)) { diff --git a/patches/helper/settings.patch b/patches/helper/settings.patch index b3ef4940f13..fcee3907955 100644 --- a/patches/helper/settings.patch +++ b/patches/helper/settings.patch @@ -1,37 +1,35 @@ diff --git a/.vscode/settings.json b/.vscode/settings.json -index 99e495a..996044a 100644 +index 514edcd..9aa6920 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json -@@ -10,5 +10,5 @@ - "build/**/*.js.map": true, -- "build/**/*.js": { -- "when": "$(basename).ts" -- } -+ // "build/**/*.js": { -+ // "when": "$(basename).ts" -+ // } - }, -@@ -59,2 +59,3 @@ - "build/npm/*.js": true, -+ "build/**/*.js": true, - "build/*.js": true -@@ -108,3 +109,3 @@ - "gulp.autoDetect": "off", -- "files.insertFinalNewline": true, -+ // "files.insertFinalNewline": true, - "[plaintext]": { -@@ -114,3 +115,3 @@ +@@ -26,3 +26,3 @@ "editor.defaultFormatter": "vscode.typescript-language-features", - "editor.formatOnSave": true + // "editor.formatOnSave": true }, -@@ -118,3 +119,3 @@ +@@ -30,3 +30,3 @@ "editor.defaultFormatter": "vscode.typescript-language-features", - "editor.formatOnSave": true + // "editor.formatOnSave": true }, -@@ -122,3 +123,3 @@ +@@ -34,3 +34,3 @@ "editor.defaultFormatter": "rust-lang.rust-analyzer", - "editor.formatOnSave": true, + // "editor.formatOnSave": true, }, +@@ -41,4 +41,4 @@ + // --- Files --- +- "files.trimTrailingWhitespace": true, +- "files.insertFinalNewline": true, ++ // "files.trimTrailingWhitespace": true, ++ // "files.insertFinalNewline": true, + "files.exclude": { +@@ -51,5 +51,5 @@ + "build/**/*.js.map": true, +- "build/**/*.js": { +- "when": "$(basename).ts" +- } ++ // "build/**/*.js": { ++ // "when": "$(basename).ts" ++ // } + }, diff --git a/patches/insider/disable-windows-appx.patch b/patches/insider/disable-windows-appx.patch deleted file mode 100644 index 81e2363edf1..00000000000 --- a/patches/insider/disable-windows-appx.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js -index 5adfdfb..dfdb2af 100644 ---- a/build/gulpfile.vscode.win32.js -+++ b/build/gulpfile.vscode.win32.js -@@ -115,6 +115,6 @@ function buildWin32Setup(arch, target) { - -- if (quality === 'insider') { -- definitions['AppxPackage'] = `code_insiders_explorer_${arch}.appx`; -- definitions['AppxPackageFullname'] = `Microsoft.${product.win32RegValueName}_1.0.0.0_neutral__8wekyb3d8bbwe`; -- } -+ // if (quality === 'insider') { -+ // definitions['AppxPackage'] = `code_insiders_explorer_${arch}.appx`; -+ // definitions['AppxPackageFullname'] = `Microsoft.${product.win32RegValueName}_1.0.0.0_neutral__8wekyb3d8bbwe`; -+ // } - diff --git a/patches/linux/arch-0-support.patch b/patches/linux/arch-0-support.patch index d0b8214fabd..cdc849c4d3a 100644 --- a/patches/linux/arch-0-support.patch +++ b/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 9410564..c1736f0 100755 +index 2f25764..742aaef 100755 --- a/build/azure-pipelines/linux/setup-env.sh +++ b/build/azure-pipelines/linux/setup-env.sh @@ -2,3 +2,3 @@ @@ -7,14 +7,19 @@ index 9410564..c1736f0 100755 -set -e +set -ex -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index c1d64c0..5ac9f95 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -232,9 +232,23 @@ function nodejs(platform, arch) { +@@ -22,3 +22,3 @@ else + echo "Downloading remote sysroot" +- SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" VSCODE_SYSROOT_PREFIX="-glibc-2.28-gcc-8.5.0" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' ++ SYSROOT_ARCH="$SYSROOT_ARCH" VSCODE_SYSROOT_DIR="$VSCODE_REMOTE_SYSROOT_DIR" node -e 'import { getVSCodeSysroot } from "./build/linux/debian/install-sysroot.ts"; (async () => { await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()' + fi +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index cb1a0a5..6c21dd2 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -235,9 +235,23 @@ function nodejs(platform: string, arch: string): NodeJS.ReadWriteStream | undefi case 'linux': - return (product.nodejsRepository !== 'https://nodejs.org' ? -- fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) : +- fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName!, checksumSha256 }) : - fetchUrls(`/dist/v${nodeVersion}/node-v${nodeVersion}-${platform}-${arch}.tar.gz`, { base: 'https://nodejs.org', checksumSha256 }) - ).pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) - .pipe(filter('**/node')) @@ -28,7 +33,7 @@ index c1d64c0..5ac9f95 100644 + .pipe(rename('node')); + } + if (product.nodejsRepository !== 'https://nodejs.org') { -+ return fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName, checksumSha256 }) ++ return fetchGithub(product.nodejsRepository, { version: `${nodeVersion}-${internalNodeVersion}`, name: expectedName!, checksumSha256 }) + .pipe(flatmap(stream => stream.pipe(gunzip()).pipe(untar()))) + .pipe(filter('**/node')) + .pipe(util.setExecutableBit('**')) @@ -42,13 +47,13 @@ index c1d64c0..5ac9f95 100644 + .pipe(rename('node')); + } case 'alpine': -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 7046ee0..67cb99a 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -382,2 +382,12 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index d3ab651..9dbe6f3 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -375,2 +375,12 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d -+ const electronOverride = {}; ++ const electronOverride: { repo?: string; tag?: string } = {}; + if (process.env.VSCODE_ELECTRON_REPOSITORY) { + // official electron doesn't support all arch, override the repo with `VSCODE_ELECTRON_REPOSITORY`. + electronOverride.repo = process.env.VSCODE_ELECTRON_REPOSITORY; @@ -58,58 +63,33 @@ index 7046ee0..67cb99a 100644 + electronOverride.tag = process.env.VSCODE_ELECTRON_TAG; + } + - let result = all -@@ -386,3 +396,3 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op + let result: NodeJS.ReadWriteStream = all +@@ -379,3 +389,3 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d .pipe(filter(['**', '!**/.github/**'], { dot: true })) // https://github.com/microsoft/vscode/issues/116523 -- .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) -+ .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false })) +- .pipe(electron({ ...config, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false, ...customElectronConfig })) ++ .pipe(electron({ ...config, ...electronOverride, platform, arch: arch === 'armhf' ? 'arm' : arch, ffmpegChromium: false, ...customElectronConfig })) .pipe(filter(['**', '!LICENSE', '!version'], { dot: true })); -diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js -index 8ac57b9..8580d79 100644 ---- a/build/linux/debian/dep-lists.js -+++ b/build/linux/debian/dep-lists.js -@@ -138,3 +138,3 @@ exports.referenceGeneratedDepsByArch = { - 'xdg-utils (>= 1.0.2)' -- ] -+ ], - }; diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts -index df119e8..91b0ebc 100644 +index d00eb59..34ecdf1 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts -@@ -138,3 +138,3 @@ export const referenceGeneratedDepsByArch = { +@@ -141,3 +141,3 @@ export const referenceGeneratedDepsByArch = { 'xdg-utils (>= 1.0.2)' - ] + ], }; -diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js -index 16d8d01..532e3d5 100644 ---- a/build/linux/debian/install-sysroot.js -+++ b/build/linux/debian/install-sysroot.js -@@ -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, -@@ -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 aa10e39..6543b49 100644 +index 2cab657..0d9dc55 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) +@@ -82,3 +82,5 @@ async function fetchUrl(options: IFetchOptions, 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, -@@ -92,3 +94,3 @@ async function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000) +@@ -91,3 +93,3 @@ async function fetchUrl(options: IFetchOptions, 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/patches/linux/arch-1-ppc64le.patch b/patches/linux/arch-1-ppc64le.patch index 3a2363d1033..dbe73976cf5 100644 --- a/patches/linux/arch-1-ppc64le.patch +++ b/patches/linux/arch-1-ppc64le.patch @@ -1,24 +1,24 @@ diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh -index c1736f0..2da5cf9 100755 +index 2c98e50..6ff90d4 100755 --- a/build/azure-pipelines/linux/setup-env.sh +++ b/build/azure-pipelines/linux/setup-env.sh -@@ -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" +@@ -76,2 +76,14 @@ elif [ "$npm_config_arch" == "arm" ]; then + export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot -L$VSCODE_REMOTE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf -L$VSCODE_REMOTE_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 -+ export CC=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc -+ export CXX=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-g++ -+ export CXXFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot" -+ export LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" ++ export CC=$VSCODE_CLIENT_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc ++ export CXX=$VSCODE_CLIENT_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-g++ ++ export CXXFLAGS="--sysroot=$VSCODE_CLIENT_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot" ++ export LDFLAGS="--sysroot=$VSCODE_CLIENT_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_CLIENT_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_CLIENT_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" + + # Set compiler toolchain for remote server -+ export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc -+ export VSCODE_REMOTE_CXX=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-g++ -+ export VSCODE_REMOTE_CXXFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot" -+ export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" ++ export VSCODE_REMOTE_CC=$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-gcc ++ export VSCODE_REMOTE_CXX=$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/bin/powerpc64le-linux-gnu-g++ ++ export VSCODE_REMOTE_CXXFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot" ++ export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" fi diff --git a/build/azure-pipelines/linux/verify-glibc-requirements.sh b/build/azure-pipelines/linux/verify-glibc-requirements.sh -index c655ce7..c7150f2 100755 +index 3db9047..1418fee 100755 --- a/build/azure-pipelines/linux/verify-glibc-requirements.sh +++ b/build/azure-pipelines/linux/verify-glibc-requirements.sh @@ -9,2 +9,4 @@ elif [ "$VSCODE_ARCH" == "armhf" ]; then @@ -33,122 +33,65 @@ index 5744a5f..3fedbe9 100644 @@ -7 +7,2 @@ f82c8dacbb9dd85819e4801909eb4e842ac12c899632aa75b4839383a18c7501 arm-rpi-linux- 84acc5a15566c98ddf80631731d672e0ce9febcf3f2e969101e0dfd7ef2405e3 x86_64-linux-gnu-glibc-2.28-gcc-8.5.0.tar.gz +fa8176d27be18bb0eeb7f55b0fa22255050b430ef68c29136599f02976eb0b1b powerpc64le-linux-gnu-glibc-2.28.tar.gz -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index 5ac9f95..cd04bdf 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -50,2 +50,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index 6c21dd2..f986b4e 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -52,2 +52,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'arm64' }, + { platform: 'linux', arch: 'ppc64le' }, { platform: 'alpine', arch: 'arm64' }, -diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js -index aafc64e..484d5f4 100644 ---- a/build/gulpfile.scan.js -+++ b/build/gulpfile.scan.js -@@ -26,2 +26,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts +index 19e50c0..47b25cf 100644 +--- a/build/gulpfile.scan.ts ++++ b/build/gulpfile.scan.ts +@@ -24,2 +24,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'arm64' }, + { platform: 'linux', arch: 'ppc64le' }, ]; -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 67cb99a..3ed2182 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -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 cd8610d..707581d 100644 ---- a/build/gulpfile.vscode.linux.js -+++ b/build/gulpfile.vscode.linux.js -@@ -33,3 +33,3 @@ const linuxPackageRevision = Math.floor(new Date().getTime() / 1000); - function getDebPackageArch(arch) { -- return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64' }[arch]; -+ return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el' }[arch]; - } -@@ -146,3 +146,3 @@ function getRpmBuildPath(rpmArch) { - function getRpmPackageArch(arch) { -- return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64' }[arch]; -+ return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le' }[arch]; - } -@@ -304,2 +304,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts +index c5d2163..da4fc1f 100644 +--- a/build/gulpfile.vscode.linux.ts ++++ b/build/gulpfile.vscode.linux.ts +@@ -32,2 +32,3 @@ function getDebPackageArch(arch: string): string { + case 'arm64': return 'arm64'; ++ case 'ppc64le': return 'ppc64el'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -142,2 +143,3 @@ function getRpmPackageArch(arch: string): string { + case 'arm64': return 'aarch64'; ++ case 'ppc64le': return 'ppc64le'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -286,2 +288,3 @@ const BUILD_TARGETS = [ { arch: 'arm64' }, + { arch: 'ppc64le' }, ]; -diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js -index 34276ce..fdae163 100644 ---- a/build/linux/debian/calculate-deps.js -+++ b/build/linux/debian/calculate-deps.js -@@ -54,2 +54,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot) - break; -+ case 'ppc64el': -+ cmd.push(`-l${chromiumSysroot}/usr/lib/powerpc64le-linux-gnu`, `-l${chromiumSysroot}/lib/powerpc64le-linux-gnu`, `-l${vscodeSysroot}/usr/lib/powerpc64le-linux-gnu`, `-l${vscodeSysroot}/lib/powerpc64le-linux-gnu`); -+ break; - } +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index d5efbdb..1d7e9d5 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -517,2 +517,3 @@ const BUILD_TARGETS = [ + { platform: 'linux', arch: 'arm64' }, ++ { platform: 'linux', arch: 'ppc64le' }, + ]; diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts -index addc386..423c415 100644 +index 98a9630..6c6bbf5 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 +@@ -61,2 +61,9 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi break; + case 'ppc64el': ++ case 'ppc64le': + 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/dep-lists.js b/build/linux/debian/dep-lists.js -index 8580d79..a85352e 100644 ---- a/build/linux/debian/dep-lists.js -+++ b/build/linux/debian/dep-lists.js -@@ -139,2 +139,41 @@ exports.referenceGeneratedDepsByArch = { - ], -+ 'ppc64el': [ -+ 'ca-certificates', -+ 'libasound2 (>= 1.0.17)', -+ 'libatk-bridge2.0-0 (>= 2.5.3)', -+ 'libatk1.0-0 (>= 2.2.0)', -+ 'libatspi2.0-0 (>= 2.9.90)', -+ 'libc6 (>= 2.17)', -+ 'libc6 (>= 2.28)', -+ 'libcairo2 (>= 1.6.0)', -+ 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', -+ 'libdbus-1-3 (>= 1.9.14)', -+ 'libdrm2 (>= 2.4.75)', -+ 'libexpat1 (>= 2.1~beta3)', -+ 'libgbm1 (>= 17.1.0~rc2)', -+ 'libglib2.0-0 (>= 2.37.3)', -+ 'libgssapi-krb5-2 (>= 1.17)', -+ 'libgtk-3-0 (>= 3.9.10)', -+ 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', -+ 'libkrb5-3 (>= 1.6.dfsg.2)', -+ 'libnspr4 (>= 2:4.9-2~)', -+ 'libnss3 (>= 2:3.30)', -+ 'libnss3 (>= 3.26)', -+ 'libpango-1.0-0 (>= 1.14.0)', -+ 'libstdc++6 (>= 4.1.1)', -+ 'libstdc++6 (>= 5)', -+ 'libstdc++6 (>= 5.2)', -+ 'libstdc++6 (>= 6)', -+ 'libx11-6', -+ 'libx11-6 (>= 2:1.4.99.1)', -+ 'libxcb1 (>= 1.9.2)', -+ 'libxcomposite1 (>= 1:0.4.4-1)', -+ 'libxdamage1 (>= 1:1.1)', -+ 'libxext6', -+ 'libxfixes3', -+ 'libxkbcommon0 (>= 0.5.0)', -+ 'libxkbfile1 (>= 1:1.1.0)', -+ 'libxrandr2', -+ 'xdg-utils (>= 1.0.2)' -+ ], - }; diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts -index 91b0ebc..0d0f11b 100644 +index 34ecdf1..73d451f 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts -@@ -139,2 +139,41 @@ export const referenceGeneratedDepsByArch = { +@@ -142,2 +142,41 @@ export const referenceGeneratedDepsByArch = { ], + 'ppc64el': [ + 'ca-certificates', @@ -190,162 +133,35 @@ index 91b0ebc..0d0f11b 100644 + 'xdg-utils (>= 1.0.2)' + ], }; -diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js -index 783db5c..2b63de5 100644 ---- a/build/linux/debian/install-sysroot.js -+++ b/build/linux/debian/install-sysroot.js -@@ -146,2 +146,6 @@ async function getVSCodeSysroot(arch, isMusl = false) { - break; -+ case 'ppc64le': -+ expectedName = `powerpc64le-linux-gnu${prefix}.tar.gz`; -+ triple = `powerpc64le-linux-gnu`; -+ break; - } diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts -index 57cf015..8cfa7f4 100644 +index 0d9dc55..3086928 100644 --- a/build/linux/debian/install-sysroot.ts +++ b/build/linux/debian/install-sysroot.ts -@@ -159,2 +159,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean = +@@ -158,2 +158,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean = break; + case 'ppc64le': + expectedName = `powerpc64le-linux-gnu${prefix}.tar.gz`; + triple = `powerpc64le-linux-gnu`; + break; } -diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js -index ce21d50..2c56b9c 100644 ---- a/build/linux/debian/types.js -+++ b/build/linux/debian/types.js -@@ -8,3 +8,3 @@ exports.isDebianArchString = isDebianArchString; - function isDebianArchString(s) { -- return ['amd64', 'armhf', 'arm64'].includes(s); -+ return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s); - } diff --git a/build/linux/debian/types.ts b/build/linux/debian/types.ts -index e97485e..43f2434 100644 +index e97485e..c56d067 100644 --- a/build/linux/debian/types.ts +++ b/build/linux/debian/types.ts @@ -5,6 +5,6 @@ -export type DebianArchString = 'amd64' | 'armhf' | 'arm64'; -+export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el'; ++export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'ppc64le'; export function isDebianArchString(s: string): s is DebianArchString { - return ['amd64', 'armhf', 'arm64'].includes(s); -+ return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s); ++ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'ppc64le'].includes(s); } -diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js -index f45b6f3..4f2ae95 100644 ---- a/build/linux/rpm/dep-lists.js -+++ b/build/linux/rpm/dep-lists.js -@@ -314,2 +314,102 @@ exports.referenceGeneratedDepsByArch = { - 'xdg-utils' -+ ], -+ "ppc64le": [ -+ 'ca-certificates', -+ 'ld-linux-x86-64.so.2()(64bit)', -+ 'ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)', -+ 'ld64.so.2()(64bit)', -+ 'ld64.so.2(GLIBC_2.17)(64bit)', -+ 'libX11.so.6()(64bit)', -+ 'libXcomposite.so.1()(64bit)', -+ 'libXdamage.so.1()(64bit)', -+ 'libXext.so.6()(64bit)', -+ 'libXfixes.so.3()(64bit)', -+ 'libXrandr.so.2()(64bit)', -+ 'libasound.so.2()(64bit)', -+ 'libasound.so.2(ALSA_0.9)(64bit)', -+ 'libasound.so.2(ALSA_0.9.0rc4)(64bit)', -+ 'libatk-1.0.so.0()(64bit)', -+ 'libatk-bridge-2.0.so.0()(64bit)', -+ 'libatspi.so.0()(64bit)', -+ 'libc.so.6()(64bit)', -+ 'libc.so.6(GLIBC_2.14)(64bit)', -+ 'libc.so.6(GLIBC_2.17)(64bit)', -+ 'libc.so.6(GLIBC_2.2.5)(64bit)', -+ 'libc.so.6(GLIBC_2.28)(64bit)', -+ 'libc.so.6(GLIBC_2.4)(64bit)', -+ 'libc.so.6(GLIBC_2.9)(64bit)', -+ 'libcairo.so.2()(64bit)', -+ 'libcups.so.2()(64bit)', -+ 'libcurl.so.4()(64bit)', -+ 'libdbus-1.so.3()(64bit)', -+ 'libdbus-1.so.3(LIBDBUS_1_3)(64bit)', -+ 'libdl.so.2()(64bit)', -+ 'libdl.so.2(GLIBC_2.17)(64bit)', -+ 'libdrm.so.2()(64bit)', -+ 'libexpat.so.1()(64bit)', -+ 'libgbm.so.1()(64bit)', -+ 'libgcc_s.so.1()(64bit)', -+ 'libgcc_s.so.1(GCC_3.0)(64bit)', -+ 'libgcc_s.so.1(GCC_3.4.4)(64bit)', -+ 'libgio-2.0.so.0()(64bit)', -+ 'libglib-2.0.so.0()(64bit)', -+ 'libgobject-2.0.so.0()(64bit)', -+ 'libgssapi_krb5.so.2()(64bit)', -+ 'libgssapi_krb5.so.2(gssapi_krb5_2_MIT)(64bit)', -+ 'libgtk-3.so.0()(64bit)', -+ 'libkrb5.so.3()(64bit)', -+ 'libkrb5.so.3(krb5_3_MIT)(64bit)', -+ 'libm.so.6()(64bit)', -+ 'libm.so.6(GLIBC_2.17)(64bit)', -+ 'libm.so.6(GLIBC_2.2.5)(64bit)', -+ 'libm.so.6(GLIBC_2.27)(64bit)', -+ 'libnspr4.so()(64bit)', -+ 'libnss3.so()(64bit)', -+ 'libnss3.so(NSS_3.11)(64bit)', -+ 'libnss3.so(NSS_3.12)(64bit)', -+ 'libnss3.so(NSS_3.12.1)(64bit)', -+ 'libnss3.so(NSS_3.2)(64bit)', -+ 'libnss3.so(NSS_3.22)(64bit)', -+ 'libnss3.so(NSS_3.3)(64bit)', -+ 'libnss3.so(NSS_3.30)(64bit)', -+ 'libnss3.so(NSS_3.4)(64bit)', -+ 'libnss3.so(NSS_3.5)(64bit)', -+ 'libnss3.so(NSS_3.9.2)(64bit)', -+ 'libnssutil3.so()(64bit)', -+ 'libnssutil3.so(NSSUTIL_3.12.3)(64bit)', -+ 'libpango-1.0.so.0()(64bit)', -+ 'libpthread.so.0()(64bit)', -+ 'libpthread.so.0(GLIBC_2.17)(64bit)', -+ 'libpthread.so.0(GLIBC_2.2.5)(64bit)', -+ 'libpthread.so.0(GLIBC_2.3.2)(64bit)', -+ 'libpthread.so.0(GLIBC_2.3.3)(64bit)', -+ 'libsmime3.so()(64bit)', -+ 'libsmime3.so(NSS_3.10)(64bit)', -+ 'libsmime3.so(NSS_3.2)(64bit)', -+ 'libssl3.so(NSS_3.28)(64bit)', -+ 'libstdc++.so.6()(64bit)', -+ 'libstdc++.so.6(CXXABI_1.3)(64bit)', -+ 'libstdc++.so.6(CXXABI_1.3.5)(64bit)', -+ 'libstdc++.so.6(CXXABI_1.3.8)(64bit)', -+ 'libstdc++.so.6(CXXABI_1.3.9)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.11)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.14)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.15)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.18)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.19)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.20)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.21)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.22)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.5)(64bit)', -+ 'libstdc++.so.6(GLIBCXX_3.4.9)(64bit)', -+ 'libutil.so.1()(64bit)', -+ 'libutil.so.1(GLIBC_2.2.5)(64bit)', -+ 'libxcb.so.1()(64bit)', -+ 'libxkbcommon.so.0()(64bit)', -+ 'libxkbcommon.so.0(V_0.5.0)(64bit)', -+ 'libxkbfile.so.1()(64bit)', -+ 'rpmlib(FileDigests) <= 4.6.0-1', -+ 'rtld(GNU_HASH)', -+ 'xdg-utils' - ] diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts -index d277ca7..c6d7761 100644 +index 783923f..fba6ee4 100644 --- a/build/linux/rpm/dep-lists.ts +++ b/build/linux/rpm/dep-lists.ts -@@ -313,2 +313,102 @@ export const referenceGeneratedDepsByArch = { +@@ -316,2 +316,102 @@ export const referenceGeneratedDepsByArch = { 'xdg-utils' + ], + "ppc64le": [ @@ -448,15 +264,6 @@ index d277ca7..c6d7761 100644 + 'rtld(GNU_HASH)', + 'xdg-utils' ] -diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js -index a20b9c2..7b58961 100644 ---- a/build/linux/rpm/types.js -+++ b/build/linux/rpm/types.js -@@ -8,3 +8,3 @@ exports.isRpmArchString = isRpmArchString; - function isRpmArchString(s) { -- return ['x86_64', 'armv7hl', 'aarch64'].includes(s); -+ return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le'].includes(s); - } diff --git a/build/linux/rpm/types.ts b/build/linux/rpm/types.ts index c6a01da..3f3c3f5 100644 --- a/build/linux/rpm/types.ts @@ -471,27 +278,27 @@ index c6a01da..3f3c3f5 100644 + return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le'].includes(s); } diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs -index a39bbf7..84d3efe 100644 +index 3b7ef5c..ec97760 100644 --- a/cli/src/update_service.rs +++ b/cli/src/update_service.rs -@@ -176,2 +176,3 @@ pub enum Platform { +@@ -183,2 +183,3 @@ pub enum Platform { LinuxARM32Legacy, + LinuxPPC64LE, DarwinX64, -@@ -194,2 +195,3 @@ impl Platform { +@@ -201,2 +202,3 @@ impl Platform { Platform::LinuxARM32Legacy => "armhf", + Platform::LinuxPPC64LE => "ppc64le", Platform::DarwinX64 => "x64", -@@ -213,2 +215,3 @@ impl Platform { +@@ -220,2 +222,3 @@ impl Platform { Platform::LinuxARM32Legacy => "linux", + Platform::LinuxPPC64LE => "linux", Platform::DarwinX64 => "darwin", -@@ -241,2 +244,4 @@ impl Platform { +@@ -248,2 +251,4 @@ impl Platform { Some(Platform::LinuxARM64) + } else if cfg!(all(target_os = "linux", target_arch = "powerpc64")) { + Some(Platform::LinuxPPC64LE) } else if cfg!(all(target_os = "macos", target_arch = "x86_64")) { -@@ -268,2 +273,3 @@ impl fmt::Display for Platform { +@@ -275,2 +280,3 @@ impl fmt::Display for Platform { Platform::LinuxARM32Legacy => "LinuxARM32Legacy", + Platform::LinuxPPC64LE => "LinuxPPC64LE", Platform::DarwinX64 => "DarwinX64", @@ -505,36 +312,36 @@ index 44c8597..679aacb 100644 + Platform::LinuxPPC64LE } else { diff --git a/resources/server/bin/helpers/check-requirements-linux.sh b/resources/server/bin/helpers/check-requirements-linux.sh -index 8ea4c0b..b9d3b47 100644 +index 8ea4c0b..94028e3 100644 --- a/resources/server/bin/helpers/check-requirements-linux.sh +++ b/resources/server/bin/helpers/check-requirements-linux.sh @@ -55,2 +55,3 @@ case $ARCH in ;; -+ ppc64el) LDCONFIG_ARCH="64bit";; ++ ppc64le) LDCONFIG_ARCH="64bit";; esac diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts -index f270903..8b028eb 100644 +index 34eaca0..a754ff3 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts -@@ -46,2 +46,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { +@@ -48,2 +48,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { case TargetPlatform.LINUX_ARMHF: return 'Linux ARM'; + case TargetPlatform.LINUX_PPC64LE: return 'Linux PowerPC64'; -@@ -69,2 +70,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { +@@ -71,2 +72,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { case TargetPlatform.LINUX_ARMHF: return TargetPlatform.LINUX_ARMHF; + case TargetPlatform.LINUX_PPC64LE: return TargetPlatform.LINUX_PPC64LE; -@@ -104,2 +106,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | +@@ -106,2 +108,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | } + if (arch === 'ppc64le') { + return TargetPlatform.LINUX_PPC64LE; + } return TargetPlatform.UNKNOWN; diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts -index 8e68cbe..23f1bea 100644 +index 8961b90..b605be0 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts -@@ -319,2 +319,3 @@ export const enum TargetPlatform { +@@ -331,2 +331,3 @@ export const enum TargetPlatform { LINUX_ARMHF = 'linux-armhf', + LINUX_PPC64LE = 'linux-ppc64le', diff --git a/patches/linux/arch-2-riscv64.patch b/patches/linux/arch-2-riscv64.patch index b063ccd295a..637d8085b3f 100644 --- a/patches/linux/arch-2-riscv64.patch +++ b/patches/linux/arch-2-riscv64.patch @@ -1,60 +1,48 @@ -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index cd04bdf..e284026 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -51,2 +51,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index f986b4e..557990e 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -53,2 +53,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'ppc64le' }, + { platform: 'linux', arch: 'riscv64' }, { platform: 'alpine', arch: 'arm64' }, -diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js -index 484d5f4..66c8e1f 100644 ---- a/build/gulpfile.scan.js -+++ b/build/gulpfile.scan.js -@@ -27,2 +27,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts +index 47b25cf..dd5bb56 100644 +--- a/build/gulpfile.scan.ts ++++ b/build/gulpfile.scan.ts +@@ -25,2 +25,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'ppc64le' }, + { platform: 'linux', arch: 'riscv64' }, ]; -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 3ed2182..f0614d0 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -492,2 +492,3 @@ const BUILD_TARGETS = [ - { platform: 'linux', arch: 'ppc64le' }, -+ { platform: 'linux', arch: 'riscv64' }, - ]; -diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js -index 707581d..298181d 100644 ---- a/build/gulpfile.vscode.linux.js -+++ b/build/gulpfile.vscode.linux.js -@@ -33,3 +33,3 @@ const linuxPackageRevision = Math.floor(new Date().getTime() / 1000); - function getDebPackageArch(arch) { -- return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el' }[arch]; -+ return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el', riscv64: 'riscv64' }[arch]; - } -@@ -146,3 +146,3 @@ function getRpmBuildPath(rpmArch) { - function getRpmPackageArch(arch) { -- return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le' }[arch]; -+ return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le', riscv64: 'riscv64' }[arch]; - } -@@ -305,2 +305,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts +index da4fc1f..b64dd9a 100644 +--- a/build/gulpfile.vscode.linux.ts ++++ b/build/gulpfile.vscode.linux.ts +@@ -33,2 +33,3 @@ function getDebPackageArch(arch: string): string { + case 'ppc64le': return 'ppc64el'; ++ case 'riscv64': return 'riscv64'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -144,2 +145,3 @@ function getRpmPackageArch(arch: string): string { + case 'ppc64le': return 'ppc64le'; ++ case 'riscv64': return 'riscv64'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -289,2 +291,3 @@ const BUILD_TARGETS = [ { arch: 'ppc64le' }, + { arch: 'riscv64' }, ]; -diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js -index fdae163..a08ebda 100644 ---- a/build/linux/debian/calculate-deps.js -+++ b/build/linux/debian/calculate-deps.js -@@ -57,2 +57,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot) - break; -+ case 'riscv64': -+ cmd.push(`-l${chromiumSysroot}/usr/lib/riscv64-linux-gnu`, `-l${chromiumSysroot}/lib/riscv64-linux-gnu`, `-l${vscodeSysroot}/usr/lib/riscv64-linux-gnu`, `-l${vscodeSysroot}/lib/riscv64-linux-gnu`); -+ break; - } +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index 1d7e9d5..3a5a9ca 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -518,2 +518,3 @@ const BUILD_TARGETS = [ + { platform: 'linux', arch: 'ppc64le' }, ++ { platform: 'linux', arch: 'riscv64' }, + ]; diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts -index 423c415..88ee2f0 100644 +index 6c6bbf5..5ee005e 100644 --- a/build/linux/debian/calculate-deps.ts +++ b/build/linux/debian/calculate-deps.ts -@@ -67,2 +67,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi +@@ -68,2 +68,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi break; + case 'riscv64': + cmd.push(`-l${chromiumSysroot}/usr/lib/riscv64-linux-gnu`, @@ -63,58 +51,11 @@ index 423c415..88ee2f0 100644 + `-l${vscodeSysroot}/lib/riscv64-linux-gnu`); + break; } -diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js -index a85352e..4ccdcd9 100644 ---- a/build/linux/debian/dep-lists.js -+++ b/build/linux/debian/dep-lists.js -@@ -178,2 +178,42 @@ exports.referenceGeneratedDepsByArch = { - ], -+ 'riscv64': [ -+ 'ca-certificates', -+ 'libatomic1', -+ 'libasound2 (>= 1.0.17)', -+ 'libatk-bridge2.0-0 (>= 2.5.3)', -+ 'libatk1.0-0 (>= 2.2.0)', -+ 'libatspi2.0-0 (>= 2.9.90)', -+ 'libc6 (>= 2.17)', -+ 'libc6 (>= 2.28)', -+ 'libcairo2 (>= 1.6.0)', -+ 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', -+ 'libdbus-1-3 (>= 1.0.2)', -+ 'libdrm2 (>= 2.4.60)', -+ 'libexpat1 (>= 2.0.1)', -+ 'libgbm1 (>= 17.1.0~rc2)', -+ 'libglib2.0-0 (>= 2.16.0)', -+ 'libglib2.0-0 (>= 2.39.4)', -+ 'libgtk-3-0 (>= 3.9.10)', -+ 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', -+ 'libnspr4 (>= 2:4.9-2~)', -+ 'libnss3 (>= 2:3.22)', -+ 'libnss3 (>= 3.26)', -+ 'libpango-1.0-0 (>= 1.14.0)', -+ 'libsecret-1-0 (>= 0.18)', -+ 'libstdc++6 (>= 4.1.1)', -+ 'libstdc++6 (>= 5)', -+ 'libstdc++6 (>= 5.2)', -+ 'libstdc++6 (>= 6)', -+ 'libx11-6', -+ 'libx11-6 (>= 2:1.4.99.1)', -+ 'libxcb1 (>= 1.9.2)', -+ 'libxcomposite1 (>= 1:0.4.4-1)', -+ 'libxdamage1 (>= 1:1.1)', -+ 'libxext6', -+ 'libxfixes3', -+ 'libxkbcommon0 (>= 0.4.1)', -+ 'libxkbfile1', -+ 'libxrandr2', -+ 'xdg-utils (>= 1.0.2)' -+ ], - }; diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts -index 0d0f11b..b765492 100644 +index 73d451f..7ea5910 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts -@@ -178,2 +178,42 @@ export const referenceGeneratedDepsByArch = { +@@ -181,2 +181,42 @@ export const referenceGeneratedDepsByArch = { ], + 'riscv64': [ + 'ca-certificates', @@ -157,58 +98,29 @@ index 0d0f11b..b765492 100644 + 'xdg-utils (>= 1.0.2)' + ], }; -diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js -index ab6b826..fc2817a 100644 ---- a/build/linux/debian/install-sysroot.js -+++ b/build/linux/debian/install-sysroot.js -@@ -144,2 +144,6 @@ async function getVSCodeSysroot(arch) { - break; -+ case 'riscv64': -+ expectedName = `riscv64-linux-gnu${prefix}.tar.gz`; -+ triple = 'riscv64-linux-gnu'; -+ break; - } diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts -index c23db0f..50c28b2 100644 +index 3086928..6e5246c 100644 --- a/build/linux/debian/install-sysroot.ts +++ b/build/linux/debian/install-sysroot.ts -@@ -158,2 +158,6 @@ export async function getVSCodeSysroot(arch: DebianArchString): Promise +@@ -162,2 +162,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean = break; + case 'riscv64': + expectedName = `riscv64-linux-gnu${prefix}.tar.gz`; + triple = 'riscv64-linux-gnu'; + break; } -diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js -index 2c56b9c..cadefc2 100644 ---- a/build/linux/debian/types.js -+++ b/build/linux/debian/types.js -@@ -8,3 +8,3 @@ exports.isDebianArchString = isDebianArchString; - function isDebianArchString(s) { -- return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s); -+ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s); - } diff --git a/build/linux/debian/types.ts b/build/linux/debian/types.ts -index 43f2434..24fe452 100644 +index c56d067..5d63ed2 100644 --- a/build/linux/debian/types.ts +++ b/build/linux/debian/types.ts @@ -5,6 +5,6 @@ --export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el'; -+export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'riscv64'; +-export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'ppc64le'; ++export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'ppc64le' | 'riscv64'; export function isDebianArchString(s: string): s is DebianArchString { -- return ['amd64', 'armhf', 'arm64', 'ppc64el'].includes(s); -+ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s); - } -diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js -index 7b58961..99a8cff 100644 ---- a/build/linux/rpm/types.js -+++ b/build/linux/rpm/types.js -@@ -8,3 +8,3 @@ exports.isRpmArchString = isRpmArchString; - function isRpmArchString(s) { -- return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le'].includes(s); -+ return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64'].includes(s); +- return ['amd64', 'armhf', 'arm64', 'ppc64el', 'ppc64le'].includes(s); ++ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'ppc64le', 'riscv64'].includes(s); } diff --git a/build/linux/rpm/types.ts b/build/linux/rpm/types.ts index 3f3c3f5..d94537e 100644 @@ -224,27 +136,27 @@ index 3f3c3f5..d94537e 100644 + return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64'].includes(s); } diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs -index 84d3efe..4f2c8c2 100644 +index ec97760..de9ca72 100644 --- a/cli/src/update_service.rs +++ b/cli/src/update_service.rs -@@ -177,2 +177,3 @@ pub enum Platform { +@@ -184,2 +184,3 @@ pub enum Platform { LinuxPPC64LE, + LinuxRISCV64, DarwinX64, -@@ -196,2 +197,3 @@ impl Platform { +@@ -203,2 +204,3 @@ impl Platform { Platform::LinuxPPC64LE => "ppc64le", + Platform::LinuxRISCV64 => "riscv64", Platform::DarwinX64 => "x64", -@@ -216,2 +218,3 @@ impl Platform { +@@ -223,2 +225,3 @@ impl Platform { Platform::LinuxPPC64LE => "linux", + Platform::LinuxRISCV64 => "linux", Platform::DarwinX64 => "darwin", -@@ -246,2 +249,4 @@ impl Platform { +@@ -253,2 +256,4 @@ impl Platform { Some(Platform::LinuxPPC64LE) + } else if cfg!(all(target_os = "linux", target_arch = "riscv64")) { + Some(Platform::LinuxRISCV64) } else if cfg!(all(target_os = "macos", target_arch = "x86_64")) { -@@ -274,2 +279,3 @@ impl fmt::Display for Platform { +@@ -281,2 +286,3 @@ impl fmt::Display for Platform { Platform::LinuxPPC64LE => "LinuxPPC64LE", + Platform::LinuxRISCV64 => "LinuxRISCV64", Platform::DarwinX64 => "DarwinX64", @@ -258,36 +170,36 @@ index 679aacb..1a37552 100644 + Platform::LinuxRISCV64 } else { diff --git a/resources/server/bin/helpers/check-requirements-linux.sh b/resources/server/bin/helpers/check-requirements-linux.sh -index b9d3b47..b18e402 100644 +index 94028e3..c41cce7 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 - ppc64el) LDCONFIG_ARCH="64bit";; + ppc64le) LDCONFIG_ARCH="64bit";; + riscv64) LDCONFIG_ARCH="RISC-V";; esac diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts -index 5400065..be95b04 100644 +index a754ff3..b607327 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts -@@ -45,2 +45,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { +@@ -49,2 +49,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { case TargetPlatform.LINUX_PPC64LE: return 'Linux PowerPC64'; + case TargetPlatform.LINUX_RISCV64: return 'Linux RISC-V 64'; -@@ -69,2 +70,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { +@@ -73,2 +74,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { case TargetPlatform.LINUX_PPC64LE: return TargetPlatform.LINUX_PPC64LE; + case TargetPlatform.LINUX_RISCV64: return TargetPlatform.LINUX_RISCV64; -@@ -107,2 +109,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | +@@ -111,2 +113,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | } + if (arch === 'riscv64') { + return TargetPlatform.LINUX_RISCV64; + } return TargetPlatform.UNKNOWN; diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts -index 23f1bea..10152de 100644 +index b605be0..22d2206 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts -@@ -320,2 +320,3 @@ export const enum TargetPlatform { +@@ -332,2 +332,3 @@ export const enum TargetPlatform { LINUX_PPC64LE = 'linux-ppc64le', + LINUX_RISCV64 = 'linux-riscv64', diff --git a/patches/linux/arch-3-loong64.patch b/patches/linux/arch-3-loong64.patch index a4c60fb87e7..c05d5e18b37 100644 --- a/patches/linux/arch-3-loong64.patch +++ b/patches/linux/arch-3-loong64.patch @@ -1,49 +1,65 @@ -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index e284026..52f9a12 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -52,2 +52,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index ff202a7..74bd1bc 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -54,2 +54,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'riscv64' }, + { platform: 'linux', arch: 'loong64' }, { platform: 'alpine', arch: 'arm64' }, -diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js -index 66c8e1f..8a8c1eb 100644 ---- a/build/gulpfile.scan.js -+++ b/build/gulpfile.scan.js -@@ -28,2 +28,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts +index dd5bb56..e7881de 100644 +--- a/build/gulpfile.scan.ts ++++ b/build/gulpfile.scan.ts +@@ -26,2 +26,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'riscv64' }, + { platform: 'linux', arch: 'loong64' }, ]; -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index f0614d0..1438867 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -493,2 +493,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts +index b64dd9a..e146586 100644 +--- a/build/gulpfile.vscode.linux.ts ++++ b/build/gulpfile.vscode.linux.ts +@@ -34,2 +34,3 @@ function getDebPackageArch(arch: string): string { + case 'riscv64': return 'riscv64'; ++ case 'loong64': return 'loong64'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -146,2 +147,3 @@ function getRpmPackageArch(arch: string): string { + case 'riscv64': return 'riscv64'; ++ case 'loong64': return 'loong64'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -292,2 +294,3 @@ const BUILD_TARGETS = [ + { arch: 'riscv64' }, ++ { arch: 'loong64' }, + ]; +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index 15bd141..cabe16f 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -509,2 +509,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'riscv64' }, + { platform: 'linux', arch: 'loong64' }, ]; diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs -index 4f2c8c2..4ea1bd2 100644 +index f1afd87..0a5e6df 100644 --- a/cli/src/update_service.rs +++ b/cli/src/update_service.rs -@@ -178,2 +178,3 @@ pub enum Platform { +@@ -188,2 +188,3 @@ pub enum Platform { LinuxRISCV64, + LinuxLoong64, DarwinX64, -@@ -198,2 +199,3 @@ impl Platform { +@@ -208,2 +209,3 @@ impl Platform { Platform::LinuxRISCV64 => "riscv64", + Platform::LinuxLoong64 => "loong64", Platform::DarwinX64 => "x64", -@@ -219,2 +221,3 @@ impl Platform { +@@ -229,2 +231,3 @@ impl Platform { Platform::LinuxRISCV64 => "linux", + Platform::LinuxLoong64 => "linux", Platform::DarwinX64 => "darwin", -@@ -251,2 +254,4 @@ impl Platform { +@@ -261,2 +264,4 @@ impl Platform { Some(Platform::LinuxRISCV64) + } else if cfg!(all(target_os = "linux", target_arch = "loongarch64")) { + Some(Platform::LinuxLoong64) } else if cfg!(all(target_os = "macos", target_arch = "x86_64")) { -@@ -280,2 +285,3 @@ impl fmt::Display for Platform { +@@ -290,2 +295,3 @@ impl fmt::Display for Platform { Platform::LinuxRISCV64 => "LinuxRISCV64", + Platform::LinuxLoong64 => "LinuxLoong64", Platform::DarwinX64 => "DarwinX64", @@ -65,28 +81,28 @@ index b18e402..0b7aa4e 100644 + loongarch64) LDCONFIG_ARCH="double-float";; esac diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts -index be95b04..1a0decd 100644 +index b607327..7162d83 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts -@@ -46,2 +46,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { +@@ -50,2 +50,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { case TargetPlatform.LINUX_RISCV64: return 'Linux RISC-V 64'; + case TargetPlatform.LINUX_LOONG64: return 'Linux Loong64'; -@@ -71,2 +72,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { +@@ -75,2 +76,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { case TargetPlatform.LINUX_RISCV64: return TargetPlatform.LINUX_RISCV64; + case TargetPlatform.LINUX_LOONG64: return TargetPlatform.LINUX_LOONG64; -@@ -112,2 +114,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | +@@ -116,2 +118,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | } + if (arch === 'loong64') { + return TargetPlatform.LINUX_LOONG64; + } return TargetPlatform.UNKNOWN; diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts -index 10152de..3eb0412 100644 +index 96d08cb..51e67ea 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts -@@ -321,2 +321,3 @@ export const enum TargetPlatform { +@@ -332,2 +332,3 @@ export const enum TargetPlatform { LINUX_RISCV64 = 'linux-riscv64', + LINUX_LOONG64 = 'linux-loong64', diff --git a/patches/linux/arch-4-s390x.patch b/patches/linux/arch-4-s390x.patch index cc209df5d54..163b71a1a2b 100644 --- a/patches/linux/arch-4-s390x.patch +++ b/patches/linux/arch-4-s390x.patch @@ -1,86 +1,74 @@ diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh -index 2da5cf9..700e199 100755 +index 6ff90d4..381150d 100755 --- a/build/azure-pipelines/linux/setup-env.sh +++ b/build/azure-pipelines/linux/setup-env.sh -@@ -80,2 +80,14 @@ elif [ "$npm_config_arch" == "ppc64" ]; then - export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" +@@ -88,2 +88,14 @@ elif [ "$npm_config_arch" == "ppc64" ]; then + export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot -L$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/usr/lib/powerpc64le-linux-gnu -L$VSCODE_REMOTE_SYSROOT_DIR/powerpc64le-linux-gnu/powerpc64le-linux-gnu/sysroot/lib/powerpc64le-linux-gnu" +elif [ "$npm_config_arch" == "s390x" ]; then + # Set compiler toolchain for client native modules -+ export CC=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-gcc -+ export CXX=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-g++ -+ export CXXFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot" -+ export LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/usr/lib/s390x-linux-gnu -L$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/lib/s390x-linux-gnu" ++ export CC=$VSCODE_CLIENT_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-gcc ++ export CXX=$VSCODE_CLIENT_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-g++ ++ export CXXFLAGS="--sysroot=$VSCODE_CLIENT_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot" ++ export LDFLAGS="--sysroot=$VSCODE_CLIENT_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot -L$VSCODE_CLIENT_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/usr/lib/s390x-linux-gnu -L$VSCODE_CLIENT_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/lib/s390x-linux-gnu" + + # Set compiler toolchain for remote server -+ export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-gcc -+ export VSCODE_REMOTE_CXX=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-g++ -+ export VSCODE_REMOTE_CXXFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot" -+ export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/usr/lib/s390x-linux-gnu -L$VSCODE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/lib/s390x-linux-gnu" ++ export VSCODE_REMOTE_CC=$VSCODE_REMOTE_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-gcc ++ export VSCODE_REMOTE_CXX=$VSCODE_REMOTE_SYSROOT_DIR/s390x-linux-gnu/bin/s390x-linux-gnu-g++ ++ export VSCODE_REMOTE_CXXFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot" ++ export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_REMOTE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot -L$VSCODE_REMOTE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/usr/lib/s390x-linux-gnu -L$VSCODE_REMOTE_SYSROOT_DIR/s390x-linux-gnu/s390x-linux-gnu/sysroot/lib/s390x-linux-gnu" fi diff --git a/build/checksums/vscode-sysroot.txt b/build/checksums/vscode-sysroot.txt -index db63d02..bbfa533 100644 +index 3fedbe9..3c4e291 100644 --- a/build/checksums/vscode-sysroot.txt +++ b/build/checksums/vscode-sysroot.txt -@@ -4 +4,2 @@ dbb927408393041664a020661f2641c9785741be3d29b050b9dac58980967784 x86_64-linux-g +@@ -8 +8,2 @@ f82c8dacbb9dd85819e4801909eb4e842ac12c899632aa75b4839383a18c7501 arm-rpi-linux- fa8176d27be18bb0eeb7f55b0fa22255050b430ef68c29136599f02976eb0b1b powerpc64le-linux-gnu-glibc-2.28.tar.gz +7055f3d40e7195fb1e13f0fbaf5ffadf781bddaca5fd5e0d9972f4157a203fb5 s390x-linux-gnu-glibc-2.28.tar.gz -diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js -index 52f9a12..4b890f4 100644 ---- a/build/gulpfile.reh.js -+++ b/build/gulpfile.reh.js -@@ -53,2 +53,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.reh.ts b/build/gulpfile.reh.ts +index af8403a..a697f8c 100644 +--- a/build/gulpfile.reh.ts ++++ b/build/gulpfile.reh.ts +@@ -55,2 +55,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'loong64' }, + { platform: 'linux', arch: 's390x' }, { platform: 'alpine', arch: 'arm64' }, -diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js -index 8a8c1eb..1ef390b 100644 ---- a/build/gulpfile.scan.js -+++ b/build/gulpfile.scan.js -@@ -29,2 +29,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.scan.ts b/build/gulpfile.scan.ts +index e7881de..affa8df 100644 +--- a/build/gulpfile.scan.ts ++++ b/build/gulpfile.scan.ts +@@ -27,2 +27,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'loong64' }, + { platform: 'linux', arch: 's390x' }, ]; -diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js -index 1438867..8593b88 100644 ---- a/build/gulpfile.vscode.js -+++ b/build/gulpfile.vscode.js -@@ -494,2 +494,3 @@ const BUILD_TARGETS = [ +diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts +index e146586..ca18865 100644 +--- a/build/gulpfile.vscode.linux.ts ++++ b/build/gulpfile.vscode.linux.ts +@@ -35,2 +35,3 @@ function getDebPackageArch(arch: string): string { + case 'loong64': return 'loong64'; ++ case 's390x': return 's390x'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -148,2 +149,3 @@ function getRpmPackageArch(arch: string): string { + case 'loong64': return 'loong64'; ++ case 's390x': return 's390x'; + default: throw new Error(`Unknown arch: ${arch}`); +@@ -295,2 +297,3 @@ const BUILD_TARGETS = [ + { arch: 'loong64' }, ++ { arch: 's390x' }, + ]; +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index d5f3ed8..ac87a54 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -520,2 +520,3 @@ const BUILD_TARGETS = [ { platform: 'linux', arch: 'loong64' }, + { platform: 'linux', arch: 's390x' }, ]; -diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js -index 298181d..dcc42a8 100644 ---- a/build/gulpfile.vscode.linux.js -+++ b/build/gulpfile.vscode.linux.js -@@ -33,3 +33,3 @@ const linuxPackageRevision = Math.floor(new Date().getTime() / 1000); - function getDebPackageArch(arch) { -- return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el', riscv64: 'riscv64' }[arch]; -+ return { x64: 'amd64', armhf: 'armhf', arm64: 'arm64', ppc64le: 'ppc64el', riscv64: 'riscv64', s390x: 's390x' }[arch]; - } -@@ -146,3 +146,3 @@ function getRpmBuildPath(rpmArch) { - function getRpmPackageArch(arch) { -- return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le', riscv64: 'riscv64' }[arch]; -+ return { x64: 'x86_64', armhf: 'armv7hl', arm64: 'aarch64', ppc64le: 'ppc64le', riscv64: 'riscv64', s390x: 's390x' }[arch]; - } -@@ -306,2 +306,3 @@ const BUILD_TARGETS = [ - { arch: 'riscv64' }, -+ { arch: 's390x' }, - ]; -diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js -index a08ebda..9527119 100644 ---- a/build/linux/debian/calculate-deps.js -+++ b/build/linux/debian/calculate-deps.js -@@ -60,2 +60,5 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot) - break; -+ case 's390x': -+ cmd.push(`-l${chromiumSysroot}/usr/lib/s390x-linux-gnu`, `-l${chromiumSysroot}/lib/s390x-linux-gnu`, `-l${vscodeSysroot}/usr/lib/s390x-linux-gnu`, `-l${vscodeSysroot}/lib/s390x-linux-gnu`); -+ break; - } diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts -index 88ee2f0..8037cf2 100644 +index 5ee005e..71fb92e 100644 --- a/build/linux/debian/calculate-deps.ts +++ b/build/linux/debian/calculate-deps.ts -@@ -73,2 +73,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi +@@ -74,2 +74,8 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi break; + case 's390x': + cmd.push(`-l${chromiumSysroot}/usr/lib/s390x-linux-gnu`, @@ -89,58 +77,11 @@ index 88ee2f0..8037cf2 100644 + `-l${vscodeSysroot}/lib/s390x-linux-gnu`); + break; } -diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js -index 4ccdcd9..ad00020 100644 ---- a/build/linux/debian/dep-lists.js -+++ b/build/linux/debian/dep-lists.js -@@ -218,2 +218,42 @@ exports.referenceGeneratedDepsByArch = { - ], -+ 's390x': [ -+ 'ca-certificates', -+ 'libatomic1', -+ 'libasound2 (>= 1.0.17)', -+ 'libatk-bridge2.0-0 (>= 2.5.3)', -+ 'libatk1.0-0 (>= 2.2.0)', -+ 'libatspi2.0-0 (>= 2.9.90)', -+ 'libc6 (>= 2.17)', -+ 'libc6 (>= 2.28)', -+ 'libcairo2 (>= 1.6.0)', -+ 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', -+ 'libdbus-1-3 (>= 1.0.2)', -+ 'libdrm2 (>= 2.4.60)', -+ 'libexpat1 (>= 2.0.1)', -+ 'libgbm1 (>= 17.1.0~rc2)', -+ 'libglib2.0-0 (>= 2.16.0)', -+ 'libglib2.0-0 (>= 2.39.4)', -+ 'libgtk-3-0 (>= 3.9.10)', -+ 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', -+ 'libnspr4 (>= 2:4.9-2~)', -+ 'libnss3 (>= 2:3.22)', -+ 'libnss3 (>= 3.26)', -+ 'libpango-1.0-0 (>= 1.14.0)', -+ 'libsecret-1-0 (>= 0.18)', -+ 'libstdc++6 (>= 4.1.1)', -+ 'libstdc++6 (>= 5)', -+ 'libstdc++6 (>= 5.2)', -+ 'libstdc++6 (>= 6)', -+ 'libx11-6', -+ 'libx11-6 (>= 2:1.4.99.1)', -+ 'libxcb1 (>= 1.9.2)', -+ 'libxcomposite1 (>= 1:0.4.4-1)', -+ 'libxdamage1 (>= 1:1.1)', -+ 'libxext6', -+ 'libxfixes3', -+ 'libxkbcommon0 (>= 0.4.1)', -+ 'libxkbfile1', -+ 'libxrandr2', -+ 'xdg-utils (>= 1.0.2)' -+ ], - }; diff --git a/build/linux/debian/dep-lists.ts b/build/linux/debian/dep-lists.ts -index b765492..f7edfda 100644 +index 7ea5910..9498993 100644 --- a/build/linux/debian/dep-lists.ts +++ b/build/linux/debian/dep-lists.ts -@@ -218,2 +218,42 @@ export const referenceGeneratedDepsByArch = { +@@ -221,2 +221,42 @@ export const referenceGeneratedDepsByArch = { ], + 's390x': [ + 'ca-certificates', @@ -183,55 +124,35 @@ index b765492..f7edfda 100644 + 'xdg-utils (>= 1.0.2)' + ], }; -diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js -index fc2817a..735e42d 100644 ---- a/build/linux/debian/install-sysroot.js -+++ b/build/linux/debian/install-sysroot.js -@@ -148,2 +148,6 @@ async function getVSCodeSysroot(arch) { - break; -+ case 's390x': -+ expectedName = `s390x-linux-gnu${prefix}.tar.gz`; -+ triple = 's390x-linux-gnu'; -+ break; - } diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts -index 50c28b2..aa30cee 100644 +index 6e5246c..89fac34 100644 --- a/build/linux/debian/install-sysroot.ts +++ b/build/linux/debian/install-sysroot.ts -@@ -162,2 +162,6 @@ export async function getVSCodeSysroot(arch: DebianArchString): Promise +@@ -166,2 +166,6 @@ export async function getVSCodeSysroot(arch: DebianArchString, isMusl: boolean = break; + case 's390x': + expectedName = `s390x-linux-gnu${prefix}.tar.gz`; + triple = 's390x-linux-gnu'; + break; } -diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js -index cadefc2..8132812 100644 ---- a/build/linux/debian/types.js -+++ b/build/linux/debian/types.js -@@ -8,3 +8,3 @@ exports.isDebianArchString = isDebianArchString; - function isDebianArchString(s) { -- return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s); -+ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64', 's390x'].includes(s); - } diff --git a/build/linux/debian/types.ts b/build/linux/debian/types.ts -index 24fe452..9efba5b 100644 +index 5d63ed2..5f793e2 100644 --- a/build/linux/debian/types.ts +++ b/build/linux/debian/types.ts @@ -5,6 +5,6 @@ --export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'riscv64'; -+export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'riscv64' | 's390x'; +-export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'ppc64le' | 'riscv64'; ++export type DebianArchString = 'amd64' | 'armhf' | 'arm64' | 'ppc64el' | 'ppc64le' | 'riscv64' | 's390x'; export function isDebianArchString(s: string): s is DebianArchString { -- return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64'].includes(s); -+ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'riscv64', 's390x'].includes(s); +- return ['amd64', 'armhf', 'arm64', 'ppc64el', 'ppc64le', 'riscv64'].includes(s); ++ return ['amd64', 'armhf', 'arm64', 'ppc64el', 'ppc64le', 'riscv64', 's390x'].includes(s); } diff --git a/build/linux/rpm/dep-lists.ts b/build/linux/rpm/dep-lists.ts -index c6d7761..74c58e0 100644 +index fba6ee4..33efc80 100644 --- a/build/linux/rpm/dep-lists.ts +++ b/build/linux/rpm/dep-lists.ts -@@ -413,2 +413,102 @@ export const referenceGeneratedDepsByArch = { +@@ -416,2 +416,102 @@ export const referenceGeneratedDepsByArch = { 'xdg-utils' + ], + "s390x": [ @@ -334,15 +255,6 @@ index c6d7761..74c58e0 100644 + 'rtld(GNU_HASH)', + 'xdg-utils' ] -diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js -index 99a8cff..e2f3548 100644 ---- a/build/linux/rpm/types.js -+++ b/build/linux/rpm/types.js -@@ -8,3 +8,3 @@ exports.isRpmArchString = isRpmArchString; - function isRpmArchString(s) { -- return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64'].includes(s); -+ return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64', 's390x'].includes(s); - } diff --git a/build/linux/rpm/types.ts b/build/linux/rpm/types.ts index d94537e..3834b94 100644 --- a/build/linux/rpm/types.ts @@ -357,7 +269,7 @@ index d94537e..3834b94 100644 + return ['x86_64', 'armv7hl', 'aarch64', 'ppc64le', 'riscv64', 's390x'].includes(s); } diff --git a/resources/server/bin/helpers/check-requirements-linux.sh b/resources/server/bin/helpers/check-requirements-linux.sh -index 0b7aa4e..e8b7ce0 100644 +index dc9faac..9078cc9 100644 --- a/resources/server/bin/helpers/check-requirements-linux.sh +++ b/resources/server/bin/helpers/check-requirements-linux.sh @@ -58,2 +58,3 @@ case $ARCH in @@ -365,28 +277,28 @@ index 0b7aa4e..e8b7ce0 100644 + s390x) LDCONFIG_ARCH="64bit";; esac diff --git a/src/vs/platform/extensionManagement/common/extensionManagement.ts b/src/vs/platform/extensionManagement/common/extensionManagement.ts -index 1a0decd..e657203 100644 +index 7162d83..f6bb8fd 100644 --- a/src/vs/platform/extensionManagement/common/extensionManagement.ts +++ b/src/vs/platform/extensionManagement/common/extensionManagement.ts -@@ -47,2 +47,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { +@@ -51,2 +51,3 @@ export function TargetPlatformToString(targetPlatform: TargetPlatform) { case TargetPlatform.LINUX_LOONG64: return 'Linux Loong64'; + case TargetPlatform.LINUX_S390X: return 'Linux S390X'; -@@ -73,2 +74,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { +@@ -77,2 +78,3 @@ export function toTargetPlatform(targetPlatform: string): TargetPlatform { case TargetPlatform.LINUX_LOONG64: return TargetPlatform.LINUX_LOONG64; + case TargetPlatform.LINUX_S390X: return TargetPlatform.LINUX_S390X; -@@ -117,2 +119,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | +@@ -121,2 +123,5 @@ export function getTargetPlatform(platform: Platform | 'alpine', arch: string | } + if (arch === 's390x') { + return TargetPlatform.LINUX_S390X; + } return TargetPlatform.UNKNOWN; diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts -index 3eb0412..4b5b29b 100644 +index f93e0ca..c4cc8c9 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts -@@ -322,2 +322,3 @@ export const enum TargetPlatform { +@@ -334,2 +334,3 @@ export const enum TargetPlatform { LINUX_LOONG64 = 'linux-loong64', + LINUX_S390X = 'linux-s390x', diff --git a/patches/linux/cli.patch b/patches/linux/cli.patch new file mode 100644 index 00000000000..ff8b6df243d --- /dev/null +++ b/patches/linux/cli.patch @@ -0,0 +1,26 @@ +diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs +index bbabadc..08af0df 100644 +--- a/cli/src/tunnels/code_server.rs ++++ b/cli/src/tunnels/code_server.rs +@@ -4,2 +4,4 @@ + *--------------------------------------------------------------------------------------------*/ ++#![allow(unused_imports)] ++ + use super::paths::{InstalledServer, ServerPaths}; +diff --git a/cli/src/tunnels/dev_tunnels.rs b/cli/src/tunnels/dev_tunnels.rs +index 0168ee6..5d0d8d4 100644 +--- a/cli/src/tunnels/dev_tunnels.rs ++++ b/cli/src/tunnels/dev_tunnels.rs +@@ -4,2 +4,4 @@ + *--------------------------------------------------------------------------------------------*/ ++#![allow(unused_imports)] ++ + use super::protocol::{self, PortPrivacy, PortProtocol}; +diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs +index 55f1dad..f22a83c 100644 +--- a/cli/src/update_service.rs ++++ b/cli/src/update_service.rs +@@ -4,2 +4,3 @@ + *--------------------------------------------------------------------------------------------*/ ++#![allow(unused_imports)] + diff --git a/patches/linux/client/disable-remote.patch b/patches/linux/client/disable-remote.patch index 99c8d8e31ea..175e45f4b0f 100644 --- a/patches/linux/client/disable-remote.patch +++ b/patches/linux/client/disable-remote.patch @@ -1,13 +1,13 @@ -diff --git a/build/npm/dirs.js b/build/npm/dirs.js -index b9645e6..22f3450 100644 ---- a/build/npm/dirs.js -+++ b/build/npm/dirs.js -@@ -47,4 +47,2 @@ const dirs = [ +diff --git a/build/npm/dirs.ts b/build/npm/dirs.ts +index 48d76e2..270b078 100644 +--- a/build/npm/dirs.ts ++++ b/build/npm/dirs.ts +@@ -53,4 +53,2 @@ export const dirs = [ 'extensions/vscode-test-resolver', - 'remote', - 'remote/web', 'test/automation', -@@ -59,4 +57,2 @@ if (fs.existsSync(`${__dirname}/../../.build/distro/npm`)) { +@@ -66,4 +64,2 @@ if (existsSync(`${import.meta.dirname}/../../.build/distro/npm`)) { dirs.push('.build/distro/npm'); - dirs.push('.build/distro/npm/remote'); - dirs.push('.build/distro/npm/remote/web'); diff --git a/patches/linux/feat-logs-home.patch b/patches/linux/feat-logs-home.patch new file mode 100644 index 00000000000..cdf6a4e85c6 --- /dev/null +++ b/patches/linux/feat-logs-home.patch @@ -0,0 +1,123 @@ +diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts +index 4a14c83..59c963b 100644 +--- a/src/vs/platform/environment/common/environment.ts ++++ b/src/vs/platform/environment/common/environment.ts +@@ -137,2 +137,3 @@ export interface INativeEnvironmentService extends IEnvironmentService { + userDataPath: string; ++ userStatePath: string; + +diff --git a/src/vs/platform/environment/common/environmentService.ts b/src/vs/platform/environment/common/environmentService.ts +index 535132f..edd76bc 100644 +--- a/src/vs/platform/environment/common/environmentService.ts ++++ b/src/vs/platform/environment/common/environmentService.ts +@@ -28,2 +28,4 @@ export interface INativeEnvironmentPaths { + ++ userStateDir: string; ++ + /** +@@ -54,2 +56,5 @@ export abstract class AbstractNativeEnvironmentService implements INativeEnviron + ++ @memoize ++ get userStatePath(): string { return this.paths.userStateDir; } ++ + @memoize +@@ -75,3 +80,3 @@ export abstract class AbstractNativeEnvironmentService implements INativeEnviron + const key = toLocalISOString(new Date()).replace(/-|:|\.\d+Z$/g, ''); +- this.args.logsPath = join(this.userDataPath, 'logs', key); ++ this.args.logsPath = join(this.userStatePath, key); + } +diff --git a/src/vs/platform/environment/node/environmentService.ts b/src/vs/platform/environment/node/environmentService.ts +index ae9e7e1..3c6c6c5 100644 +--- a/src/vs/platform/environment/node/environmentService.ts ++++ b/src/vs/platform/environment/node/environmentService.ts +@@ -11,2 +11,3 @@ import { getUserDataPath } from './userDataPath.js'; + import { IProductService } from '../../product/common/productService.js'; ++import { getUserStatePath } from './userStatePath.js'; + +@@ -18,3 +19,4 @@ export class NativeEnvironmentService extends AbstractNativeEnvironmentService { + tmpDir: tmpdir(), +- userDataDir: getUserDataPath(args, productService.nameShort) ++ userDataDir: getUserDataPath(args, productService.nameShort), ++ userStateDir: getUserStatePath(args, productService.nameShort) + }, productService); +diff --git a/src/vs/platform/environment/node/userStatePath.ts b/src/vs/platform/environment/node/userStatePath.ts +new file mode 100644 +index 0000000..53f9e2f +--- /dev/null ++++ b/src/vs/platform/environment/node/userStatePath.ts +@@ -0,0 +1,42 @@ ++import { homedir } from 'os'; ++import { NativeParsedArgs } from '../common/argv.js'; ++ ++import { resolve, isAbsolute, join } from 'path'; ++ ++const cwd = process.env['VSCODE_CWD'] || process.cwd(); ++ ++export function getUserStatePath(cliArgs: NativeParsedArgs, productName: string): string { ++ const userStatePath = doGetUserStatePath(cliArgs, productName); ++ const pathsToResolve = [userStatePath]; ++ ++ if (!isAbsolute(userStatePath)) { ++ pathsToResolve.unshift(cwd); ++ } ++ ++ return resolve(...pathsToResolve); ++} ++ ++function doGetUserStatePath(cliArgs: NativeParsedArgs, productName: string): string { ++ ++ // 0. Running out of sources has a fixed productName ++ if (process.env['VSCODE_DEV']) { ++ productName = 'code-oss-dev'; ++ } ++ ++ // 1. Support portable mode ++ const portablePath = process.env['VSCODE_PORTABLE']; ++ if (portablePath) { ++ return join(portablePath, 'user-state'); ++ } ++ ++ // 2. Support global VSCODE_APPSTATE environment variable ++ let appStatePath = process.env['VSCODE_APPSTATE']; ++ if (appStatePath) { ++ return join(appStatePath, productName); ++ } ++ ++ // 4. Otherwise ++ appStatePath = process.env['XDG_STATE_HOME'] || join(homedir(), '.local', 'state'); ++ ++ return join(appStatePath, productName); ++} +diff --git a/src/vs/platform/window/common/window.ts b/src/vs/platform/window/common/window.ts +index fa297d1..839fd60 100644 +--- a/src/vs/platform/window/common/window.ts ++++ b/src/vs/platform/window/common/window.ts +@@ -443,2 +443,3 @@ export interface INativeWindowConfiguration extends IWindowConfiguration, Native + userDataDir: string; ++ userStateDir: string; + +diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts +index 117dfd2..6b0458b 100644 +--- a/src/vs/platform/windows/electron-main/windowsMainService.ts ++++ b/src/vs/platform/windows/electron-main/windowsMainService.ts +@@ -1511,2 +1511,3 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic + userDataDir: this.environmentMainService.userDataPath, ++ userStateDir: this.environmentMainService.userStatePath, + +diff --git a/src/vs/workbench/services/environment/electron-browser/environmentService.ts b/src/vs/workbench/services/environment/electron-browser/environmentService.ts +index 6cfa517..46286c6 100644 +--- a/src/vs/workbench/services/environment/electron-browser/environmentService.ts ++++ b/src/vs/workbench/services/environment/electron-browser/environmentService.ts +@@ -153,3 +153,3 @@ export class NativeWorkbenchEnvironmentService extends AbstractNativeEnvironment + ) { +- super(configuration, { homeDir: configuration.homeDir, tmpDir: configuration.tmpDir, userDataDir: configuration.userDataDir }, productService); ++ super(configuration, { homeDir: configuration.homeDir, tmpDir: configuration.tmpDir, userDataDir: configuration.userDataDir, userStateDir: configuration.userStateDir }, productService); + } +diff --git a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts b/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts +index 6b7307e..c74476a 100644 +--- a/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts ++++ b/src/vs/workbench/services/workingCopy/test/electron-browser/workingCopyBackupService.test.ts +@@ -74,2 +74,3 @@ const TestNativeWindowConfiguration: INativeWindowConfiguration = { + userDataDir: joinPath(homeDir, product.nameShort).fsPath, ++ userStateDir: joinPath(homeDir, product.nameShort).fsPath, + profiles: { profile: NULL_PROFILE, all: [NULL_PROFILE], home: homeDir }, diff --git a/patches/linux/fix-build.patch b/patches/linux/fix-build.patch index b964473dbfb..3bb1fcc9677 100644 --- a/patches/linux/fix-build.patch +++ b/patches/linux/fix-build.patch @@ -1,28 +1,1100 @@ -diff --git a/build/linux/dependencies-generator.js b/build/linux/dependencies-generator.js -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.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 6c1f7b7..31cc2a8 100644 +index 0ebeb41..c6f0d5c 100644 --- a/build/linux/dependencies-generator.ts +++ b/build/linux/dependencies-generator.ts -@@ -25,3 +25,3 @@ import product = require('../../product.json'); +@@ -13,3 +13,3 @@ import { type DebianArchString, isDebianArchString } from './debian/types.ts'; + import { isRpmArchString, type RpmArchString } from './rpm/types.ts'; +-import product from '../../product.json' with { type: 'json' }; ++// import product from '../../product.json' with { type: 'json' }; + +@@ -22,3 +22,3 @@ import product from '../../product.json' with { type: 'json' }; // are valid, are in dep-lists.ts -const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = true; +const FAIL_BUILD_FOR_NEW_DEPENDENCIES: boolean = false; -@@ -62,3 +62,3 @@ export async function getDependencies(packageType: 'deb' | 'rpm', buildDir: stri +@@ -59,3 +59,3 @@ export async function getDependencies(packageType: 'deb' | 'rpm', buildDir: stri // Add the tunnel binary. - files.push(path.join(buildDir, 'bin', product.tunnelApplicationName)); + // files.push(path.join(buildDir, 'bin', product.tunnelApplicationName)); // Add the main executable. +diff --git a/build/package-lock.json b/build/package-lock.json +index d3d0ae9..b47c35f 100644 +--- a/build/package-lock.json ++++ b/build/package-lock.json +@@ -17,3 +17,2 @@ + "@electron/get": "^2.0.0", +- "@electron/osx-sign": "^2.0.0", + "@types/ansi-colors": "^3.2.0", +@@ -105,5 +104,5 @@ + "node_modules/@azure/core-auth": { +- "version": "1.9.0", +- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", +- "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", ++ "version": "1.10.1", ++ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", ++ "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "dev": true, +@@ -111,4 +110,4 @@ + "dependencies": { +- "@azure/abort-controller": "^2.0.0", +- "@azure/core-util": "^1.11.0", ++ "@azure/abort-controller": "^2.1.2", ++ "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" +@@ -116,3 +115,3 @@ + "engines": { +- "node": ">=18.0.0" ++ "node": ">=20.0.0" + } +@@ -235,5 +234,5 @@ + "node_modules/@azure/core-rest-pipeline": { +- "version": "1.18.0", +- "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.0.tgz", +- "integrity": "sha512-QSoGUp4Eq/gohEFNJaUOwTN7BCc2nHTjjbm75JT0aD7W65PWM1H/tItz0GsABn22uaKyGxiMhWQLt2r+FGU89Q==", ++ "version": "1.22.2", ++ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", ++ "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "dev": true, +@@ -241,9 +240,8 @@ + "dependencies": { +- "@azure/abort-controller": "^2.0.0", +- "@azure/core-auth": "^1.8.0", +- "@azure/core-tracing": "^1.0.1", +- "@azure/core-util": "^1.11.0", +- "@azure/logger": "^1.0.0", +- "http-proxy-agent": "^7.0.0", +- "https-proxy-agent": "^7.0.0", ++ "@azure/abort-controller": "^2.1.2", ++ "@azure/core-auth": "^1.10.0", ++ "@azure/core-tracing": "^1.3.0", ++ "@azure/core-util": "^1.13.0", ++ "@azure/logger": "^1.3.0", ++ "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" +@@ -251,3 +249,3 @@ + "engines": { +- "node": ">=18.0.0" ++ "node": ">=20.0.0" + } +@@ -268,5 +266,5 @@ + "node_modules/@azure/core-tracing": { +- "version": "1.2.0", +- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", +- "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", ++ "version": "1.3.1", ++ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", ++ "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "dev": true, +@@ -277,3 +275,3 @@ + "engines": { +- "node": ">=18.0.0" ++ "node": ">=20.0.0" + } +@@ -281,5 +279,5 @@ + "node_modules/@azure/core-util": { +- "version": "1.11.0", +- "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", +- "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", ++ "version": "1.13.1", ++ "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", ++ "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "dev": true, +@@ -287,3 +285,4 @@ + "dependencies": { +- "@azure/abort-controller": "^2.0.0", ++ "@azure/abort-controller": "^2.1.2", ++ "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" +@@ -291,3 +290,3 @@ + "engines": { +- "node": ">=18.0.0" ++ "node": ">=20.0.0" + } +@@ -370,11 +369,13 @@ + "node_modules/@azure/logger": { +- "version": "1.0.1", +- "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.1.tgz", +- "integrity": "sha512-QYQeaJ+A5x6aMNu8BG5qdsVBnYBop9UMwgUvGihSjf1PdZZXB+c/oMdM2ajKwzobLBh9e9QuMQkN9iL+IxLBLA==", ++ "version": "1.3.0", ++ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", ++ "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "dev": true, ++ "license": "MIT", + "dependencies": { +- "tslib": "^2.0.0" ++ "@typespec/ts-http-runtime": "^0.3.0", ++ "tslib": "^2.6.2" + }, + "engines": { +- "node": ">=8.0.0" ++ "node": ">=20.0.0" + } +@@ -481,5 +482,5 @@ + "node_modules/@babel/helper-validator-identifier": { +- "version": "7.27.1", +- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", +- "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", ++ "version": "7.28.5", ++ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", ++ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, +@@ -537,50 +538,2 @@ + }, +- "node_modules/@electron/osx-sign": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-2.0.0.tgz", +- "integrity": "sha512-jZSzWH21QYbdTy2QxMMtRFlMafyuBRH5EnpC1LJU3uaQV05oo7ldtBRcSI/Eznhw9kFWjjCf2RvC+Nxc1/kQyA==", +- "dev": true, +- "license": "BSD-2-Clause", +- "dependencies": { +- "@types/graceful-fs": "^4.1.9", +- "debug": "^4.3.4", +- "graceful-fs": "^4.2.11", +- "isbinaryfile": "^4.0.8", +- "plist": "^3.0.5", +- "semver": "^7.7.1" +- }, +- "bin": { +- "electron-osx-flat": "bin/electron-osx-flat.mjs", +- "electron-osx-sign": "bin/electron-osx-sign.mjs" +- }, +- "engines": { +- "node": ">=22.12.0" +- } +- }, +- "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { +- "version": "4.0.10", +- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", +- "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", +- "dev": true, +- "license": "MIT", +- "engines": { +- "node": ">= 8.0.0" +- }, +- "funding": { +- "url": "https://github.com/sponsors/gjtorikian/" +- } +- }, +- "node_modules/@electron/osx-sign/node_modules/semver": { +- "version": "7.7.2", +- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", +- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", +- "dev": true, +- "license": "ISC", +- "bin": { +- "semver": "bin/semver.js" +- }, +- "engines": { +- "node": ">=10" +- } +- }, + "node_modules/@esbuild/aix-ppc64": { +@@ -1051,27 +1004,2 @@ + }, +- "node_modules/@isaacs/cliui/node_modules/emoji-regex": { +- "version": "9.2.2", +- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", +- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", +- "dev": true, +- "license": "MIT" +- }, +- "node_modules/@isaacs/cliui/node_modules/string-width": { +- "version": "5.1.2", +- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", +- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "eastasianwidth": "^0.2.0", +- "emoji-regex": "^9.2.2", +- "strip-ansi": "^7.0.1" +- }, +- "engines": { +- "node": ">=12" +- }, +- "funding": { +- "url": "https://github.com/sponsors/sindresorhus" +- } +- }, + "node_modules/@malept/cross-spawn-promise": { +@@ -1348,5 +1276,5 @@ + "node_modules/@textlint/ast-node-types": { +- "version": "15.2.2", +- "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.2.2.tgz", +- "integrity": "sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==", ++ "version": "15.4.1", ++ "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.4.1.tgz", ++ "integrity": "sha512-XifMpBMdo0E1Fuh85YdcYAgy+okNg9WKBzIPIO4JUDnSWUVFihnogrM4cjDapeHkgzSgulwR8oJVJ17eyxI1bA==", + "dev": true, +@@ -1355,5 +1283,5 @@ + "node_modules/@textlint/linter-formatter": { +- "version": "15.2.2", +- "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.2.2.tgz", +- "integrity": "sha512-oMVaMJ3exFvXhCj3AqmCbLaeYrTNLqaJnLJMIlmnRM3/kZdxvku4OYdaDzgtlI194cVxamOY5AbHBBVnY79kEg==", ++ "version": "15.4.1", ++ "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.4.1.tgz", ++ "integrity": "sha512-kAV7Sup3vwvqxKvBbf9lx/JaPHkRybQp/LLvA73U1AorPZE6XyfBAFG24BbMiCs4OX1ax4g7kXRuFPgMLWRf+g==", + "dev": true, +@@ -1363,8 +1291,8 @@ + "@azu/style-format": "^1.0.1", +- "@textlint/module-interop": "15.2.2", +- "@textlint/resolver": "15.2.2", +- "@textlint/types": "15.2.2", ++ "@textlint/module-interop": "15.4.1", ++ "@textlint/resolver": "15.4.1", ++ "@textlint/types": "15.4.1", + "chalk": "^4.1.2", +- "debug": "^4.4.1", +- "js-yaml": "^3.14.1", ++ "debug": "^4.4.3", ++ "js-yaml": "^4.1.0", + "lodash": "^4.17.21", +@@ -1440,2 +1368,9 @@ + }, ++ "node_modules/@textlint/linter-formatter/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT" ++ }, + "node_modules/@textlint/linter-formatter/node_modules/has-flag": { +@@ -1457,2 +1392,17 @@ + }, ++ "node_modules/@textlint/linter-formatter/node_modules/string-width": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", ++ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/@textlint/linter-formatter/node_modules/strip-ansi": { +@@ -1484,5 +1434,5 @@ + "node_modules/@textlint/module-interop": { +- "version": "15.2.2", +- "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.2.2.tgz", +- "integrity": "sha512-2rmNcWrcqhuR84Iio1WRzlc4tEoOMHd6T7urjtKNNefpTt1owrTJ9WuOe60yD3FrTW0J/R0ux5wxUbP/eaeFOA==", ++ "version": "15.4.1", ++ "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.4.1.tgz", ++ "integrity": "sha512-jHtM2E5CR68P3z/+FGrEU5pml2fQVzEo2sez9FEjrVHSPCrHtqHcPaKfsYbQJjc9C48ObwaWrCzRNaL3KedNCQ==", + "dev": true, +@@ -1491,5 +1441,5 @@ + "node_modules/@textlint/resolver": { +- "version": "15.2.2", +- "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.2.2.tgz", +- "integrity": "sha512-4hGWjmHt0y+5NAkoYZ8FvEkj8Mez9TqfbTm3BPjoV32cIfEixl2poTOgapn1rfm73905GSO3P1jiWjmgvii13Q==", ++ "version": "15.4.1", ++ "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.4.1.tgz", ++ "integrity": "sha512-uVssyG3XXXKNY+O7NOajGvQZTyOuhPviwlq7Xek6ZT9K1eDQtA8074cPkAQoLMYhi/TUyOE5P5kpz42UF8Lmdw==", + "dev": true, +@@ -1498,5 +1448,5 @@ + "node_modules/@textlint/types": { +- "version": "15.2.2", +- "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.2.2.tgz", +- "integrity": "sha512-X2BHGAR3yXJsCAjwYEDBIk9qUDWcH4pW61ISfmtejau+tVqKtnbbvEZnMTb6mWgKU1BvTmftd5DmB1XVDUtY3g==", ++ "version": "15.4.1", ++ "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.4.1.tgz", ++ "integrity": "sha512-WByVZ3zblbvuI+voWQplUP7seSTKXI9z6TMVXEB3dY3JFrZCIXWKNfLbETX5lZV7fYkCMaDtILO1l6s11wdbQA==", + "dev": true, +@@ -1504,3 +1454,3 @@ + "dependencies": { +- "@textlint/ast-node-types": "15.2.2" ++ "@textlint/ast-node-types": "15.4.1" + } +@@ -1597,12 +1547,2 @@ + }, +- "node_modules/@types/graceful-fs": { +- "version": "4.1.9", +- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", +- "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "@types/node": "*" +- } +- }, + "node_modules/@types/gulp": { +@@ -1924,2 +1864,17 @@ + }, ++ "node_modules/@typespec/ts-http-runtime": { ++ "version": "0.3.2", ++ "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", ++ "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "http-proxy-agent": "^7.0.0", ++ "https-proxy-agent": "^7.0.0", ++ "tslib": "^2.6.2" ++ }, ++ "engines": { ++ "node": ">=20.0.0" ++ } ++ }, + "node_modules/@vscode/iconv-lite-umd": { +@@ -2176,5 +2131,5 @@ + "node_modules/ansi-escapes": { +- "version": "7.1.1", +- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.1.1.tgz", +- "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", ++ "version": "7.2.0", ++ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", ++ "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", + "dev": true, +@@ -2251,17 +2206,7 @@ + "node_modules/argparse": { +- "version": "1.0.10", +- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", +- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "sprintf-js": "~1.0.2" +- } +- }, +- "node_modules/argparse/node_modules/sprintf-js": { +- "version": "1.0.3", +- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", +- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", ++ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, +- "license": "BSD-3-Clause" ++ "license": "Python-2.0" + }, +@@ -2393,2 +2338,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -2404,3 +2350,4 @@ + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", +- "dev": true ++ "dev": true, ++ "license": "ISC" + }, +@@ -2462,2 +2409,3 @@ + ], ++ "license": "MIT", + "optional": true, +@@ -2506,2 +2454,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -2565,6 +2514,7 @@ + "node_modules/cheerio": { +- "version": "1.0.0-rc.12", +- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", +- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", ++ "version": "1.1.2", ++ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", ++ "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -2573,9 +2523,13 @@ + "domhandler": "^5.0.3", +- "domutils": "^3.0.1", +- "htmlparser2": "^8.0.1", +- "parse5": "^7.0.0", +- "parse5-htmlparser2-tree-adapter": "^7.0.0" ++ "domutils": "^3.2.2", ++ "encoding-sniffer": "^0.2.1", ++ "htmlparser2": "^10.0.0", ++ "parse5": "^7.3.0", ++ "parse5-htmlparser2-tree-adapter": "^7.1.0", ++ "parse5-parser-stream": "^7.1.2", ++ "undici": "^7.12.0", ++ "whatwg-mimetype": "^4.0.0" + }, + "engines": { +- "node": ">= 6" ++ "node": ">=20.18.1" + }, +@@ -2628,2 +2582,3 @@ + "dev": true, ++ "license": "ISC", + "optional": true +@@ -2778,2 +2733,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -2790,6 +2746,7 @@ + "node_modules/css-what": { +- "version": "6.1.0", +- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", +- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", ++ "version": "6.2.2", ++ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", ++ "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, ++ "license": "BSD-2-Clause", + "engines": { +@@ -2824,2 +2781,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -2879,2 +2837,3 @@ + "dev": true, ++ "license": "(MIT OR WTFPL)", + "optional": true, +@@ -2902,2 +2861,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -2948,3 +2908,4 @@ + } +- ] ++ ], ++ "license": "BSD-2-Clause" + }, +@@ -2966,6 +2927,7 @@ + "node_modules/domutils": { +- "version": "3.0.1", +- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", +- "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", ++ "version": "3.2.2", ++ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", ++ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -2973,3 +2935,3 @@ + "domelementtype": "^2.3.0", +- "domhandler": "^5.0.1" ++ "domhandler": "^5.0.3" + }, +@@ -3040,5 +3002,5 @@ + "node_modules/emoji-regex": { +- "version": "8.0.0", +- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", +- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "version": "9.2.2", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", ++ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, +@@ -3046,2 +3008,16 @@ + }, ++ "node_modules/encoding-sniffer": { ++ "version": "0.2.1", ++ "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", ++ "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "iconv-lite": "^0.6.3", ++ "whatwg-encoding": "^3.1.1" ++ }, ++ "funding": { ++ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" ++ } ++ }, + "node_modules/end-of-stream": { +@@ -3056,6 +3032,7 @@ + "node_modules/entities": { +- "version": "4.4.0", +- "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", +- "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", ++ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, ++ "license": "BSD-2-Clause", + "engines": { +@@ -3143,2 +3120,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true +@@ -3195,16 +3173,2 @@ + }, +- "node_modules/esprima": { +- "version": "4.0.1", +- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", +- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", +- "dev": true, +- "license": "BSD-2-Clause", +- "bin": { +- "esparse": "bin/esparse.js", +- "esvalidate": "bin/esvalidate.js" +- }, +- "engines": { +- "node": ">=4" +- } +- }, + "node_modules/events": { +@@ -3428,5 +3392,5 @@ + "node_modules/form-data": { +- "version": "4.0.4", +- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", +- "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", ++ "version": "4.0.5", ++ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", ++ "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, +@@ -3553,2 +3517,3 @@ + "dev": true, ++ "license": "ISC", + "optional": true +@@ -3677,2 +3642,3 @@ + "dev": true, ++ "license": "ISC", + "dependencies": { +@@ -3756,2 +3722,3 @@ + "dev": true, ++ "license": "MIT", + "engines": { +@@ -3815,5 +3782,5 @@ + "node_modules/htmlparser2": { +- "version": "8.0.1", +- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", +- "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", ++ "version": "10.0.0", ++ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", ++ "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "dev": true, +@@ -3826,7 +3793,21 @@ + ], ++ "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", +- "domhandler": "^5.0.2", +- "domutils": "^3.0.1", +- "entities": "^4.3.0" ++ "domhandler": "^5.0.3", ++ "domutils": "^3.2.1", ++ "entities": "^6.0.0" ++ } ++ }, ++ "node_modules/htmlparser2/node_modules/entities": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", ++ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", ++ "dev": true, ++ "license": "BSD-2-Clause", ++ "engines": { ++ "node": ">=0.12" ++ }, ++ "funding": { ++ "url": "https://github.com/fb55/entities?sponsor=1" + } +@@ -3880,2 +3861,15 @@ + }, ++ "node_modules/iconv-lite": { ++ "version": "0.6.3", ++ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", ++ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "safer-buffer": ">= 2.1.2 < 3.0.0" ++ }, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, + "node_modules/ieee754": { +@@ -3899,2 +3893,3 @@ + ], ++ "license": "BSD-3-Clause", + "optional": true +@@ -3912,5 +3907,5 @@ + "node_modules/index-to-position": { +- "version": "1.1.0", +- "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", +- "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.2.0.tgz", ++ "integrity": "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==", + "dev": true, +@@ -4120,5 +4115,5 @@ + "node_modules/js-yaml": { +- "version": "3.14.2", +- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", +- "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", ++ "version": "4.1.1", ++ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", ++ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, +@@ -4126,4 +4121,3 @@ + "dependencies": { +- "argparse": "^1.0.7", +- "esprima": "^4.0.0" ++ "argparse": "^2.0.1" + }, +@@ -4157,2 +4151,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true +@@ -4266,2 +4261,3 @@ + "hasInstallScript": true, ++ "license": "MIT", + "optional": true, +@@ -4333,2 +4329,3 @@ + "dev": true, ++ "license": "BSD-2-Clause", + "dependencies": { +@@ -4358,9 +4355,2 @@ + }, +- "node_modules/markdown-it/node_modules/argparse": { +- "version": "2.0.1", +- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", +- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", +- "dev": true, +- "license": "Python-2.0" +- }, + "node_modules/matcher": { +@@ -4443,2 +4433,3 @@ + "dev": true, ++ "license": "ISC", + "bin": { +@@ -4487,2 +4478,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -4495,7 +4487,11 @@ + "node_modules/minimist": { +- "version": "1.2.6", +- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", +- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", ++ "version": "1.2.8", ++ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", ++ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, +- "optional": true ++ "license": "MIT", ++ "optional": true, ++ "funding": { ++ "url": "https://github.com/sponsors/ljharb" ++ } + }, +@@ -4532,6 +4528,7 @@ + "node_modules/napi-build-utils": { +- "version": "1.0.2", +- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", +- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", ++ "version": "2.0.0", ++ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", ++ "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "dev": true, ++ "license": "MIT", + "optional": true +@@ -4578,2 +4575,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true +@@ -4593,5 +4591,5 @@ + "node_modules/node-sarif-builder": { +- "version": "3.2.0", +- "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.2.0.tgz", +- "integrity": "sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==", ++ "version": "3.3.1", ++ "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.3.1.tgz", ++ "integrity": "sha512-8z5dAbhpxmk/WRQHXlv4V0h+9Y4Ugk+w08lyhV/7E/CQX9yDdBc3025/EG+RSMJU2aPFh/IQ7XDV7Ti5TLt/TA==", + "dev": true, +@@ -4603,3 +4601,3 @@ + "engines": { +- "node": ">=18" ++ "node": ">=20" + } +@@ -4680,5 +4678,5 @@ + "node_modules/normalize-package-data/node_modules/semver": { +- "version": "7.7.2", +- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", +- "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", ++ "version": "7.7.3", ++ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", ++ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, +@@ -4808,5 +4806,5 @@ + "node_modules/p-map": { +- "version": "7.0.3", +- "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", +- "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", ++ "version": "7.0.4", ++ "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", ++ "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, +@@ -4886,8 +4884,9 @@ + "node_modules/parse5": { +- "version": "7.1.2", +- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", +- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", ++ "version": "7.3.0", ++ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", ++ "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, ++ "license": "MIT", + "dependencies": { +- "entities": "^4.4.0" ++ "entities": "^6.0.0" + }, +@@ -4898,8 +4897,9 @@ + "node_modules/parse5-htmlparser2-tree-adapter": { +- "version": "7.0.0", +- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", +- "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", ++ "version": "7.1.0", ++ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", ++ "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "dev": true, ++ "license": "MIT", + "dependencies": { +- "domhandler": "^5.0.2", ++ "domhandler": "^5.0.3", + "parse5": "^7.0.0" +@@ -4910,2 +4910,28 @@ + }, ++ "node_modules/parse5-parser-stream": { ++ "version": "7.1.2", ++ "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", ++ "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "parse5": "^7.0.0" ++ }, ++ "funding": { ++ "url": "https://github.com/inikulin/parse5?sponsor=1" ++ } ++ }, ++ "node_modules/parse5/node_modules/entities": { ++ "version": "6.0.1", ++ "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", ++ "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", ++ "dev": true, ++ "license": "BSD-2-Clause", ++ "engines": { ++ "node": ">=0.12" ++ }, ++ "funding": { ++ "url": "https://github.com/fb55/entities?sponsor=1" ++ } ++ }, + "node_modules/path-is-absolute": { +@@ -4929,5 +4955,5 @@ + "node_modules/path-scurry": { +- "version": "2.0.0", +- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", +- "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", ++ "version": "2.0.1", ++ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", ++ "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "dev": true, +@@ -5056,6 +5082,7 @@ + "node_modules/prebuild-install": { +- "version": "7.1.1", +- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", +- "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", ++ "version": "7.1.3", ++ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", ++ "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -5067,3 +5094,3 @@ + "mkdirp-classic": "^0.5.3", +- "napi-build-utils": "^1.0.1", ++ "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", +@@ -5208,22 +5235,2 @@ + }, +- "node_modules/rc-config-loader/node_modules/argparse": { +- "version": "2.0.1", +- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", +- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", +- "dev": true, +- "license": "Python-2.0" +- }, +- "node_modules/rc-config-loader/node_modules/js-yaml": { +- "version": "4.1.1", +- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", +- "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "argparse": "^2.0.1" +- }, +- "bin": { +- "js-yaml": "bin/js-yaml.js" +- } +- }, + "node_modules/read": { +@@ -5348,2 +5355,3 @@ + "dev": true, ++ "license": "ISC", + "dependencies": { +@@ -5371,2 +5379,3 @@ + "dev": true, ++ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, +@@ -5414,7 +5423,15 @@ + }, ++ "node_modules/safer-buffer": { ++ "version": "2.1.2", ++ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", ++ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", ++ "dev": true, ++ "license": "MIT" ++ }, + "node_modules/sax": { +- "version": "1.2.4", +- "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", +- "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", +- "dev": true ++ "version": "1.4.1", ++ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", ++ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", ++ "dev": true, ++ "license": "ISC" + }, +@@ -5472,2 +5489,3 @@ + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -5612,2 +5630,3 @@ + ], ++ "license": "MIT", + "optional": true +@@ -5633,2 +5652,3 @@ + ], ++ "license": "MIT", + "optional": true, +@@ -5764,2 +5784,3 @@ + "dev": true, ++ "license": "MIT", + "engines": { +@@ -5791,5 +5812,5 @@ + "node_modules/string-width": { +- "version": "4.2.3", +- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", +- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "version": "5.1.2", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", ++ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, +@@ -5813,31 +5834,11 @@ + "dependencies": { +- "emoji-regex": "^8.0.0", +- "is-fullwidth-code-point": "^3.0.0", +- "strip-ansi": "^6.0.1" ++ "eastasianwidth": "^0.2.0", ++ "emoji-regex": "^9.2.2", ++ "strip-ansi": "^7.0.1" + }, + "engines": { +- "node": ">=8" +- } +- }, +- "node_modules/string-width-cjs/node_modules/ansi-regex": { +- "version": "5.0.1", +- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", +- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", +- "dev": true, +- "license": "MIT", +- "engines": { +- "node": ">=8" +- } +- }, +- "node_modules/string-width-cjs/node_modules/strip-ansi": { +- "version": "6.0.1", +- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", +- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "ansi-regex": "^5.0.1" ++ "node": ">=12" + }, +- "engines": { +- "node": ">=8" ++ "funding": { ++ "url": "https://github.com/sponsors/sindresorhus" + } +@@ -5854,2 +5855,9 @@ + }, ++ "node_modules/string-width/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT" ++ }, + "node_modules/string-width/node_modules/strip-ansi": { +@@ -5947,4 +5955,5 @@ + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", +- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", ++ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, ++ "license": "MIT", + "optional": true, +@@ -6062,2 +6071,24 @@ + }, ++ "node_modules/table/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT" ++ }, ++ "node_modules/table/node_modules/string-width": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", ++ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/table/node_modules/strip-ansi": { +@@ -6128,2 +6159,3 @@ + "dev": true, ++ "license": "MIT", + "dependencies": { +@@ -6193,5 +6225,5 @@ + "node_modules/tmp": { +- "version": "0.2.4", +- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", +- "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", ++ "version": "0.2.5", ++ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", ++ "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "dev": true, +@@ -6298,6 +6330,7 @@ + "node_modules/tslib": { +- "version": "2.6.3", +- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", +- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", +- "dev": true ++ "version": "2.8.1", ++ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", ++ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", ++ "dev": true, ++ "license": "0BSD" + }, +@@ -6316,4 +6349,5 @@ + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", +- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", ++ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, ++ "license": "Apache-2.0", + "optional": true, +@@ -6365,2 +6399,12 @@ + }, ++ "node_modules/undici": { ++ "version": "7.16.0", ++ "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", ++ "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", ++ "dev": true, ++ "license": "MIT", ++ "engines": { ++ "node": ">=20.18.1" ++ } ++ }, + "node_modules/undici-types": { +@@ -6404,3 +6448,4 @@ + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", +- "dev": true ++ "dev": true, ++ "license": "MIT" + }, +@@ -6584,2 +6629,25 @@ + }, ++ "node_modules/whatwg-encoding": { ++ "version": "3.1.1", ++ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", ++ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "iconv-lite": "0.6.3" ++ }, ++ "engines": { ++ "node": ">=18" ++ } ++ }, ++ "node_modules/whatwg-mimetype": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", ++ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", ++ "dev": true, ++ "license": "MIT", ++ "engines": { ++ "node": ">=18" ++ } ++ }, + "node_modules/which": { +@@ -6688,2 +6756,24 @@ + }, ++ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { ++ "version": "8.0.0", ++ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", ++ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", ++ "dev": true, ++ "license": "MIT" ++ }, ++ "node_modules/wrap-ansi-cjs/node_modules/string-width": { ++ "version": "4.2.3", ++ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", ++ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", ++ "dev": true, ++ "license": "MIT", ++ "dependencies": { ++ "emoji-regex": "^8.0.0", ++ "is-fullwidth-code-point": "^3.0.0", ++ "strip-ansi": "^6.0.1" ++ }, ++ "engines": { ++ "node": ">=8" ++ } ++ }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { +@@ -6714,27 +6804,2 @@ + }, +- "node_modules/wrap-ansi/node_modules/emoji-regex": { +- "version": "9.2.2", +- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", +- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", +- "dev": true, +- "license": "MIT" +- }, +- "node_modules/wrap-ansi/node_modules/string-width": { +- "version": "5.1.2", +- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", +- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", +- "dev": true, +- "license": "MIT", +- "dependencies": { +- "eastasianwidth": "^0.2.0", +- "emoji-regex": "^9.2.2", +- "strip-ansi": "^7.0.1" +- }, +- "engines": { +- "node": ">=12" +- }, +- "funding": { +- "url": "https://github.com/sponsors/sindresorhus" +- } +- }, + "node_modules/wrappy": { +diff --git a/build/package.json b/build/package.json +index e084f0e..4517da3 100644 +--- a/build/package.json ++++ b/build/package.json +@@ -11,3 +11,2 @@ + "@electron/get": "^2.0.0", +- "@electron/osx-sign": "^2.0.0", + "@types/ansi-colors": "^3.2.0", diff --git a/patches/linux/fix-global-policy.patch b/patches/linux/fix-global-policy.patch new file mode 100644 index 00000000000..61cfc415a98 --- /dev/null +++ b/patches/linux/fix-global-policy.patch @@ -0,0 +1,9 @@ +diff --git a/src/vs/base/common/policy.ts b/src/vs/base/common/policy.ts +index 8141b0f..33599d9 100644 +--- a/src/vs/base/common/policy.ts ++++ b/src/vs/base/common/policy.ts +@@ -11,3 +11,3 @@ import { IDefaultAccount } from './defaultAccount.js'; + */ +-export const LINUX_SYSTEM_POLICY_FILE_PATH = '/etc/vscode/policy.json'; ++export const LINUX_SYSTEM_POLICY_FILE_PATH = '/etc/!!GLOBAL_DIRNAME!!/policy.json'; + diff --git a/patches/linux/fix-npm-postinstall.patch b/patches/linux/fix-npm-postinstall.patch new file mode 100644 index 00000000000..a9cb20d6c3b --- /dev/null +++ b/patches/linux/fix-npm-postinstall.patch @@ -0,0 +1,14 @@ +diff --git a/build/npm/postinstall.ts b/build/npm/postinstall.ts +index c4bbbf5..2a1c6c5 100644 +--- a/build/npm/postinstall.ts ++++ b/build/npm/postinstall.ts +@@ -52,5 +52,6 @@ function npmInstall(dir: string, opts?: child_process.SpawnSyncOptions) { + opts.cwd = root; +- if (process.env['npm_config_arch'] === 'arm64') { +- run('sudo', ['docker', 'run', '--rm', '--privileged', 'multiarch/qemu-user-static', '--reset', '-p', 'yes'], opts); +- } ++ const emulateArchList = ['arm64', 'arm', 'ppc64', 'riscv64', 's390x', 'loong64']; ++ if (process.env['DISABLE_QEMU'] !== 'true' && !!process.env['npm_config_arch'] && emulateArchList.includes(process.env['npm_config_arch'])) { ++ run('sudo', ['docker', 'run', '--rm', '--privileged', 'tonistiigi/binfmt:latest', '--install', 'all'], opts); ++ } + run('sudo', [ diff --git a/patches/linux/fix-reh-bootstrap.patch b/patches/linux/fix-reh-bootstrap.patch index b0e87e67d06..4fdb03ef58e 100644 --- a/patches/linux/fix-reh-bootstrap.patch +++ b/patches/linux/fix-reh-bootstrap.patch @@ -1,25 +1,18 @@ diff --git a/src/bootstrap-esm.ts b/src/bootstrap-esm.ts -index f2cf101..d974f65 100644 +index 54681a2..39f72ad 100644 --- a/src/bootstrap-esm.ts +++ b/src/bootstrap-esm.ts -@@ -8,3 +8,3 @@ import * as fs from 'fs'; - import { fileURLToPath } from 'url'; --import { createRequire, register } from 'node:module'; +@@ -6,3 +6,3 @@ + import * as fs from 'node:fs'; +-import { register } from 'node:module'; +import * as Module from 'node:module'; import { product, pkg } from './bootstrap-meta.js'; -@@ -14,3 +14,4 @@ import { INLSConfiguration } from './vs/nls.js'; - --const require = createRequire(import.meta.url); -+// @ts-ignore -+const require = Module.createRequire(import.meta.url); - const __dirname = path.dirname(fileURLToPath(import.meta.url)); -@@ -18,3 +19,4 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); +@@ -13,3 +13,3 @@ import { INLSConfiguration } from './vs/nls.js'; // Install a hook to module resolution to map 'fs' to 'original-fs' -if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { -+// @ts-ignore +if (Module.register && (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron'])) { const jsCode = ` -@@ -33,3 +35,4 @@ if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { +@@ -28,3 +28,4 @@ if (process.env['ELECTRON_RUN_AS_NODE'] || process.versions['electron']) { }`; - register(`data:text/javascript;base64,${Buffer.from(jsCode).toString('base64')}`, import.meta.url); + // @ts-ignore diff --git a/patches/linux/reh/s390x/arch-4-s390x-package.json.patch b/patches/linux/reh/s390x/package.json.patch similarity index 100% rename from patches/linux/reh/s390x/arch-4-s390x-package.json.patch rename to patches/linux/reh/s390x/package.json.patch diff --git a/patches/linux/update-xdg-path.patch b/patches/linux/update-xdg-path.patch index 6068c10c8ec..1c11a657d96 100644 --- a/patches/linux/update-xdg-path.patch +++ b/patches/linux/update-xdg-path.patch @@ -12,11 +12,11 @@ index a7142fe..526ca17 100644 + } } diff --git a/src/vs/base/parts/ipc/node/ipc.net.ts b/src/vs/base/parts/ipc/node/ipc.net.ts -index 629f2c4..ec1acba 100644 +index e58f678..add8048 100644 --- a/src/vs/base/parts/ipc/node/ipc.net.ts +++ b/src/vs/base/parts/ipc/node/ipc.net.ts -@@ -774,3 +774,3 @@ function unmask(buffer: VSBuffer, mask: number): void { +@@ -839,3 +839,3 @@ function unmask(buffer: VSBuffer, mask: number): void { // Related to https://github.com/microsoft/vscode/issues/30624 --export const XDG_RUNTIME_DIR = process.env['XDG_RUNTIME_DIR']; -+export const XDG_RUNTIME_DIR = (!!process.env.FLATPAK_ID ? join(process.env['XDG_RUNTIME_DIR'] as string, 'app', process.env.FLATPAK_ID) : process.env['XDG_RUNTIME_DIR']); +-export const XDG_RUNTIME_DIR = process.env['XDG_RUNTIME_DIR']; ++export const XDG_RUNTIME_DIR = !!process.env.FLATPAK_ID ? join(process.env['XDG_RUNTIME_DIR'] as string, 'app', process.env.FLATPAK_ID) : process.env['XDG_RUNTIME_DIR']; diff --git a/patches/linux/yarn-dependencies.patch b/patches/linux/yarn-dependencies.patch deleted file mode 100644 index f6c600c4a26..00000000000 --- a/patches/linux/yarn-dependencies.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js -index c1f22aa5002..a6fb2728b1f 100644 ---- a/build/npm/postinstall.js -+++ b/build/npm/postinstall.js -@@ -53,8 +53,10 @@ function npmInstall(dir, opts) { - log(dir, `Installing dependencies inside container ${process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME']}...`); - - opts.cwd = root; -- if (process.env['npm_config_arch'] === 'arm64') { -- run('sudo', ['docker', 'run', '--rm', '--privileged', 'multiarch/qemu-user-static', '--reset', '-p', 'yes'], opts); -+ if ((process.env['npm_config_arch'] === 'arm64' || process.env['npm_config_arch'] === 'arm' || process.env['npm_config_arch'] === 'ppc64' || process.env['npm_config_arch'] === 'riscv64' || process.env['npm_config_arch'] === 's390x') && process.env['DISABLE_QEMU'] !== 'true') { -+ run('sudo', ['docker', 'run', '--rm', '--privileged', 'tonistiigi/binfmt:latest', '--install', 'all'], opts); -+ } else if (process.env['npm_config_arch'] === 'loong64') { -+ run('sudo', ['docker', 'run', '--rm', '--privileged', 'loongcr.lcpu.dev/multiarch/archlinux', '--reset', '-p', 'yes'], opts); - } - run('sudo', ['docker', 'run', '-e', 'GITHUB_TOKEN', '-v', `${process.env['VSCODE_HOST_MOUNT']}:/root/vscode`, '-v', `${process.env['VSCODE_HOST_MOUNT']}/.build/.netrc:/root/.netrc`, '-w', path.resolve('/root/vscode', dir), process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'], 'sh', '-c', `\"chown -R root:root ${path.resolve('/root/vscode', dir)} && npm i -g node-gyp-build && npm ci\"`], opts); - run('sudo', ['chown', '-R', `${userinfo.uid}:${userinfo.gid}`, `${path.resolve(root, dir)}`], opts); diff --git a/patches/merge-user-product.patch b/patches/merge-user-product.patch deleted file mode 100644 index 391550ab1d3..00000000000 --- a/patches/merge-user-product.patch +++ /dev/null @@ -1,72 +0,0 @@ -diff --git a/src/main.ts b/src/main.ts -index fdc424e..46b014b 100644 ---- a/src/main.ts -+++ b/src/main.ts -@@ -8,2 +8,3 @@ import * as fs from 'original-fs'; - import * as os from 'os'; -+import { createRequire } from 'node:module'; - import { performance } from 'perf_hooks'; -@@ -24,2 +25,3 @@ import { NativeParsedArgs } from './vs/platform/environment/common/argv.js'; - const __dirname = path.dirname(fileURLToPath(import.meta.url)); -+const require = createRequire(import.meta.url); - -@@ -112,2 +114,14 @@ registerListeners(); - -+function resolveUserProduct() { -+ const userProductPath = path.join(userDataPath, 'product.json'); -+ -+ try { -+ // Assign the product configuration to the global scope -+ const productJson = require(userProductPath); -+ // @ts-expect-error -+ globalThis._VSCODE_USER_PRODUCT_JSON = productJson; -+ } catch (ex) { -+ } -+} -+ - /** -@@ -208,2 +222,3 @@ async function startup(codeCachePath: string | undefined, nlsConfig: INLSConfigu - process.env['VSCODE_CODE_CACHE_PATH'] = codeCachePath || ''; -+ resolveUserProduct(); - -diff --git a/src/vs/platform/product/common/product.ts b/src/vs/platform/product/common/product.ts -index d27cdce..d758c5e 100644 ---- a/src/vs/platform/product/common/product.ts -+++ b/src/vs/platform/product/common/product.ts -@@ -31,2 +31,36 @@ else if (globalThis._VSCODE_PRODUCT_JSON && globalThis._VSCODE_PACKAGE_JSON) { - -+ const { serviceUrl, controlUrl, extensionUrlTemplate, resourceUrlTemplate } = product.extensionsGallery || {}; -+ -+ Object.assign(product, { -+ extensionsGallery: { -+ serviceUrl: env['VSCODE_GALLERY_SERVICE_URL'] || serviceUrl, -+ controlUrl: env['VSCODE_GALLERY_CONTROL_URL'] || controlUrl, -+ extensionUrlTemplate: env['VSCODE_GALLERY_EXTENSION_URL_TEMPLATE'] || extensionUrlTemplate, -+ resourceUrlTemplate: env['VSCODE_GALLERY_RESOURCE_URL_TEMPLATE'] || resourceUrlTemplate, -+ } -+ }); -+ -+ // Merge user-customized product.json -+ try { -+ const merge = (...objects: any[]) => -+ objects.reduce((result, current) => { -+ Object.keys(current).forEach((key) => { -+ if (Array.isArray(result[key]) && Array.isArray(current[key])) { -+ result[key] = current[key]; -+ } else if (typeof result[key] === 'object' && typeof current[key] === 'object') { -+ result[key] = merge(result[key], current[key]); -+ } else { -+ result[key] = current[key]; -+ } -+ }); -+ -+ return result; -+ }, {}) as any; -+ -+ const userProduct = (globalThis as Record)._VSCODE_USER_PRODUCT_JSON || {}; -+ -+ product = merge(product, userProduct); -+ } catch (ex) { -+ } -+ - // Running out of sources diff --git a/patches/osx/fix-codesign.patch b/patches/osx/fix-codesign.patch.no similarity index 100% rename from patches/osx/fix-codesign.patch rename to patches/osx/fix-codesign.patch.no diff --git a/patches/osx/fix-emulated-urls.patch b/patches/osx/fix-emulated-urls.patch index 1a7f0eb1e6c..27c197e2c58 100644 --- a/patches/osx/fix-emulated-urls.patch +++ b/patches/osx/fix-emulated-urls.patch @@ -1,8 +1,8 @@ -diff --git a/src/vs/workbench/electron-sandbox/window.ts b/src/vs/workbench/electron-sandbox/window.ts -index 90c9654..3ef5d32 100644 ---- a/src/vs/workbench/electron-sandbox/window.ts -+++ b/src/vs/workbench/electron-sandbox/window.ts -@@ -257,4 +257,4 @@ export class NativeWindow extends BaseWindow { +diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts +index d507690..1abeb63 100644 +--- a/src/vs/workbench/electron-browser/window.ts ++++ b/src/vs/workbench/electron-browser/window.ts +@@ -251,4 +251,4 @@ export class NativeWindow extends BaseWindow { const quality = this.productService.quality; - const stableURL = 'https://code.visualstudio.com/docs/?dv=osx'; - const insidersURL = 'https://code.visualstudio.com/docs/?dv=osx&build=insiders'; diff --git a/patches/remove-mangle.patch b/patches/remove-mangle.patch index f692f00bdf4..41904451c00 100644 --- a/patches/remove-mangle.patch +++ b/patches/remove-mangle.patch @@ -1,51 +1,17 @@ -diff --git a/build/lib/compilation.js b/build/lib/compilation.js -index 841dbe1..7cf692a 100644 ---- a/build/lib/compilation.js -+++ b/build/lib/compilation.js -@@ -148,24 +148,3 @@ function compileTask(src, out, build, options = {}) { - } -- // mangle: TypeScript to TypeScript -- let mangleStream = event_stream_1.default.through(); -- if (build && !options.disableMangle) { -- let ts2tsMangler = new index_1.Mangler(compile.projectPath, (...data) => (0, fancy_log_1.default)(ansi_colors_1.default.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true }); -- const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState'])); -- mangleStream = event_stream_1.default.through(async function write(data) { -- const tsNormalPath = ts.normalizePath(data.path); -- const newContents = (await newContentsByFileName).get(tsNormalPath); -- if (newContents !== undefined) { -- data.contents = Buffer.from(newContents.out); -- data.sourceMap = newContents.sourceMap && JSON.parse(newContents.sourceMap); -- } -- this.push(data); -- }, async function end() { -- // free resources -- (await newContentsByFileName).clear(); -- this.push(null); -- ts2tsMangler = undefined; -- }); -- } - return srcPipe -- .pipe(mangleStream) - .pipe(generator.stream) diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts -index 6e1fcab..4e45106 100644 +index 948c6b4..66ecdd3 100644 --- a/build/lib/compilation.ts +++ b/build/lib/compilation.ts -@@ -18,4 +18,2 @@ import File from 'vinyl'; - import * as task from './task'; --import { Mangler } from './mangle/index'; --import { RawSourceMap } from 'source-map'; - import { gulpPostcss } from './postcss'; -@@ -138,27 +136,3 @@ export function compileTask(src: string, out: string, build: boolean, options: { +@@ -131,27 +131,3 @@ export function compileTask(src: string, out: string, build: boolean, options: { - // mangle: TypeScript to TypeScript - let mangleStream = es.through(); - if (build && !options.disableMangle) { -- let ts2tsMangler = new Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true }); +- let ts2tsMangler: Mangler | undefined = new Mangler(compile.projectPath, (...data) => fancyLog(ansiColors.blue('[mangler]'), ...data), { mangleExports: true, manglePrivateFields: true }); - const newContentsByFileName = ts2tsMangler.computeNewFileContents(new Set(['saveState'])); - mangleStream = es.through(async function write(data: File & { sourceMap?: RawSourceMap }) { - type TypeScriptExt = typeof ts & { normalizePath(path: string): string }; -- const tsNormalPath = (ts).normalizePath(data.path); +- const tsNormalPath = (ts as TypeScriptExt).normalizePath(data.path); - const newContents = (await newContentsByFileName).get(tsNormalPath); - if (newContents !== undefined) { - data.contents = Buffer.from(newContents.out); @@ -57,7 +23,7 @@ index 6e1fcab..4e45106 100644 - (await newContentsByFileName).clear(); - - this.push(null); -- (ts2tsMangler) = undefined; +- ts2tsMangler = undefined; - }); - } - diff --git a/patches/report-issue.patch b/patches/report-issue.patch index 7cd00bad7cb..c6ee959065f 100644 --- a/patches/report-issue.patch +++ b/patches/report-issue.patch @@ -1,22 +1,22 @@ -diff --git a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts -index 447f4c9..1118f18 100644 ---- a/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts -+++ b/src/vs/workbench/contrib/extensions/electron-sandbox/extensionsSlowActions.ts +diff --git a/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts b/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts +index 46120a9..6bc88c8 100644 +--- a/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts ++++ b/src/vs/workbench/contrib/extensions/electron-browser/extensionsSlowActions.ts @@ -153,3 +153,3 @@ class ReportExtensionSlowAction extends Action { - OS Version: \`${osVersion}\` -- VS Code version: \`${this._productService.version}\`\n\n${message}`); +- !!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 3d7653e..7dbd60b 100644 +index efe8061..831ce2e 100644 --- a/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.ts +++ b/src/vs/workbench/contrib/issue/browser/baseIssueReporterService.ts -@@ -665,3 +665,3 @@ export class BaseIssueReporterService extends Disposable { +@@ -591,3 +591,3 @@ export class BaseIssueReporterService extends Disposable { if (title) { - this.searchDuplicates(title, issueDescription); + this.searchGitHub('!!GH_REPO_PATH!!', title); } else { -@@ -757,33 +757,2 @@ export class BaseIssueReporterService extends Disposable { +@@ -668,33 +668,2 @@ export class BaseIssueReporterService extends Disposable { - @debounce(300) - private searchDuplicates(title: string, body?: string): void { @@ -50,14 +50,14 @@ index 3d7653e..7dbd60b 100644 - } - private displaySearchResults(results: SearchResult[]) { -@@ -879,4 +848,4 @@ export class BaseIssueReporterService extends Disposable { +@@ -786,4 +755,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) { -@@ -967,3 +936,3 @@ export class BaseIssueReporterService extends Disposable { +@@ -874,3 +843,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!!")); diff --git a/patches/sourcemaps.patch b/patches/sourcemaps.patch new file mode 100644 index 00000000000..665c7d111bc --- /dev/null +++ b/patches/sourcemaps.patch @@ -0,0 +1,36 @@ +diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts +index 24462a3..1daa855 100644 +--- a/build/lib/extensions.ts ++++ b/build/lib/extensions.ts +@@ -33,4 +33,5 @@ const require = createRequire(import.meta.url); + const root = path.dirname(path.dirname(import.meta.dirname)); ++const product = JSON.parse(fs.readFileSync(path.join(root, 'product.json'), 'utf8')); + const commit = getVersion(root); +-const sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`; ++const sourceMappingURLBase = `https://github.com/VSCodium/sourcemaps/releases/download/${product.quality}-${commit}`; + +@@ -181,3 +182,3 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, + data.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, function (_m, g1) { +- return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions/${path.basename(extensionPath)}/${relativeOutputPath}/${g1}`; ++ return `\n//# sourceMappingURL=${sourceMappingURLBase}/extensions-${path.basename(extensionPath).replaceAll('/', '-')}-${relativeOutputPath.replaceAll('/', '-')}-${g1.replaceAll('/', '-')}`; + }), 'utf8'); +diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts +index 58b8e07..f452614 100644 +--- a/build/lib/optimize.ts ++++ b/build/lib/optimize.ts +@@ -229,3 +229,3 @@ export function bundleTask(opts: IBundleTaskOpts): () => NodeJS.ReadWriteStream + export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => void { +- const sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined; ++ const sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}-${f.relative.replaceAll('/', '-')}.map`) : undefined; + const target = getBuildTarget(); +diff --git a/build/lib/util.ts b/build/lib/util.ts +index f1354b8..dda8c37 100644 +--- a/build/lib/util.ts ++++ b/build/lib/util.ts +@@ -285,4 +285,4 @@ export function rewriteSourceMappingURL(sourceMappingURLBase: string): NodeJS.Re + const contents = (f.contents as Buffer).toString('utf8'); +- const str = `//# sourceMappingURL=${sourceMappingURLBase}/${path.dirname(f.relative).replace(/\\/g, '/')}/$1`; +- f.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, str)); ++ const fp = path.dirname(f.relative).replace(/\\/g, '/').replaceAll('/', '-'); ++ f.contents = Buffer.from(contents.replace(/\n\/\/# sourceMappingURL=(.*)$/gm, (_m, p) => `//# sourceMappingURL=${sourceMappingURLBase}/${fp}-${p.replaceAll('/', '-')}`)); + return f; diff --git a/patches/telemetry.patch b/patches/telemetry.patch new file mode 100644 index 00000000000..9b4e6f4de21 --- /dev/null +++ b/patches/telemetry.patch @@ -0,0 +1,59 @@ +diff --git a/src/vs/platform/telemetry/common/telemetryService.ts b/src/vs/platform/telemetry/common/telemetryService.ts +index ef676bd..4feb98b 100644 +--- a/src/vs/platform/telemetry/common/telemetryService.ts ++++ b/src/vs/platform/telemetry/common/telemetryService.ts +@@ -219,3 +219,3 @@ configurationRegistry.registerConfiguration({ + 'markdownDescription': getTelemetryLevelSettingDescription(), +- 'default': TelemetryConfiguration.ON, ++ 'default': TelemetryConfiguration.OFF, + 'restricted': true, +@@ -245,3 +245,3 @@ configurationRegistry.registerConfiguration({ + localize('telemetry.enableTelemetryMd', "Enable diagnostic data to be collected. This helps us to better understand how {0} is performing and where improvements need to be made. [Read more]({1}) about what we collect and our privacy statement.", product.nameLong, product.privacyStatementUrl), +- 'default': true, ++ 'default': false, + 'restricted': true, +diff --git a/src/vs/workbench/browser/workbench.contribution.ts b/src/vs/workbench/browser/workbench.contribution.ts +index d09ab3f..f37edd6 100644 +--- a/src/vs/workbench/browser/workbench.contribution.ts ++++ b/src/vs/workbench/browser/workbench.contribution.ts +@@ -496,3 +496,3 @@ const registry = Registry.as(ConfigurationExtensions.Con + 'description': localize('enableNaturalLanguageSearch', "Controls whether the command palette should include similar commands. You must have an extension installed that provides Natural Language support."), +- 'default': true ++ 'default': false + }, +diff --git a/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.ts b/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.ts +index 16fd396..587e1e3 100644 +--- a/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.ts ++++ b/src/vs/workbench/contrib/editTelemetry/browser/editTelemetry.contribution.ts +@@ -28,3 +28,3 @@ configurationRegistry.registerConfiguration({ + type: 'boolean', +- default: true, ++ default: false, + tags: ['experimental'], +diff --git a/src/vs/workbench/contrib/preferences/common/preferencesContribution.ts b/src/vs/workbench/contrib/preferences/common/preferencesContribution.ts +index e5cec6f..9c9e169 100644 +--- a/src/vs/workbench/contrib/preferences/common/preferencesContribution.ts ++++ b/src/vs/workbench/contrib/preferences/common/preferencesContribution.ts +@@ -113,3 +113,3 @@ registry.registerConfiguration({ + 'description': nls.localize('enableNaturalLanguageSettingsSearch', "Controls whether to enable the natural language search mode for settings. The natural language search is provided by a Microsoft online service."), +- 'default': true, ++ 'default': false, + 'scope': ConfigurationScope.WINDOW, +diff --git a/src/vs/workbench/electron-browser/desktop.contribution.ts b/src/vs/workbench/electron-browser/desktop.contribution.ts +index 3517cc1..7b365fa 100644 +--- a/src/vs/workbench/electron-browser/desktop.contribution.ts ++++ b/src/vs/workbench/electron-browser/desktop.contribution.ts +@@ -342,3 +342,3 @@ import { registerWorkbenchContribution2, WorkbenchPhase } from '../common/contri + 'description': localize('telemetry.enableCrashReporting', "Enable crash reports to be collected. This helps us improve stability. \nThis option requires restart to take effect."), +- 'default': true, ++ 'default': false, + 'tags': ['usesOnlineServices', 'telemetry'], +diff --git a/src/vs/workbench/services/assignment/common/assignmentService.ts b/src/vs/workbench/services/assignment/common/assignmentService.ts +index 4a3d96b..e587d5b 100644 +--- a/src/vs/workbench/services/assignment/common/assignmentService.ts ++++ b/src/vs/workbench/services/assignment/common/assignmentService.ts +@@ -277,3 +277,3 @@ registry.registerConfiguration({ + 'description': localize('workbench.enableExperiments', "Fetches experiments to run from a Microsoft online service."), +- 'default': true, ++ 'default': false, + 'scope': ConfigurationScope.APPLICATION, diff --git a/patches/terminal-suggest.patch b/patches/terminal-suggest.patch index 46ab85f9f3f..d7dd5943f5e 100644 --- a/patches/terminal-suggest.patch +++ b/patches/terminal-suggest.patch @@ -1,44 +1,44 @@ -diff --git a/extensions/terminal-suggest/src/completions/codex-insiders.ts b/extensions/terminal-suggest/src/completions/codex-insiders.ts +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..f3c0f9d --- /dev/null -+++ b/extensions/terminal-suggest/src/completions/codex-insiders.ts ++++ b/extensions/terminal-suggest/src/completions/codium-insiders.ts @@ -0,0 +1,9 @@ +import code from './code'; + -+const codexInsidersCompletionSpec: Fig.Spec = { ++const codiumInsidersCompletionSpec: Fig.Spec = { + ...code, + name: '!!BINARY_NAME!!-insiders', + description: '!!APP_NAME!! Insiders', +}; + -+export default codexInsidersCompletionSpec; -diff --git a/extensions/terminal-suggest/src/completions/codex.ts b/extensions/terminal-suggest/src/completions/codex.ts ++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..1daa1fe --- /dev/null -+++ b/extensions/terminal-suggest/src/completions/codex.ts ++++ b/extensions/terminal-suggest/src/completions/codium.ts @@ -0,0 +1,9 @@ +import code from './code'; + -+const codexCompletionSpec: Fig.Spec = { ++const codiumCompletionSpec: Fig.Spec = { + ...code, + name: '!!BINARY_NAME!!', + description: '!!APP_NAME!!', +}; + -+export default codexCompletionSpec; ++export default codiumCompletionSpec; diff --git a/extensions/terminal-suggest/src/terminalSuggestMain.ts b/extensions/terminal-suggest/src/terminalSuggestMain.ts -index 863cd21..a33e440 100644 +index 95654ff..202474b 100644 --- a/extensions/terminal-suggest/src/terminalSuggestMain.ts +++ b/extensions/terminal-suggest/src/terminalSuggestMain.ts -@@ -30,2 +30,4 @@ import codeTunnelCompletionSpec from './completions/code-tunnel'; - import codeTunnelInsidersCompletionSpec from './completions/code-tunnel-insiders'; -+import codexCompletionSpec from './completions/codex'; -+import codexInsidersCompletionSpec from './completions/codex-insiders'; - -@@ -50,2 +52,4 @@ export const availableSpecs: Fig.Spec[] = [ +@@ -13,2 +13,4 @@ import codeCompletionSpec from './completions/code'; + import codeInsidersCompletionSpec from './completions/code-insiders'; ++import codiumCompletionSpec from './completions/codium'; ++import codiumInsidersCompletionSpec from './completions/codium-insiders'; + import codeTunnelCompletionSpec from './completions/code-tunnel'; +@@ -76,2 +78,4 @@ export const availableSpecs: Fig.Spec[] = [ npxCompletionSpec, -+ codexInsidersCompletionSpec, -+ codexCompletionSpec, - setLocationSpec, ++ codiumInsidersCompletionSpec, ++ codiumCompletionSpec, + pnpmCompletionSpec, diff --git a/patches/update-cache-path.patch b/patches/update-cache-path.patch index b1e4c1eca18..442015f2a9d 100644 --- a/patches/update-cache-path.patch +++ b/patches/update-cache-path.patch @@ -1,9 +1,9 @@ diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts -index a2561be..a50958e 100644 +index ae4fd9c..3744826 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts -@@ -56,3 +56,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -58,3 +58,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun get cachePath(): Promise { - const result = path.join(tmpdir(), `vscode-${this.productService.quality}-${this.productService.target}-${process.arch}`); + const result = path.join(tmpdir(), `${this.productService.applicationName}-${this.productService.quality}-${this.productService.target}-${process.arch}`); - return fs.promises.mkdir(result, { recursive: true }).then(() => result); + return mkdir(result, { recursive: true }).then(() => result); diff --git a/patches/update-electron.patch b/patches/update-electron.patch deleted file mode 100644 index b9bf50edce4..00000000000 --- a/patches/update-electron.patch +++ /dev/null @@ -1,206 +0,0 @@ -diff --git a/.npmrc b/.npmrc -index 05f84f8..62dbfd8 100644 ---- a/.npmrc -+++ b/.npmrc -@@ -1,3 +1,3 @@ - disturl="https://electronjs.org/headers" --target="34.5.1" -+target="34.5.4" - ms_build_id="11369351" -diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt -index 9bfbc95..086fa93 100644 ---- a/build/checksums/electron.txt -+++ b/build/checksums/electron.txt -@@ -1,75 +1,75 @@ --249f89d35cb6bd74edc07551b141bffc2045847c4cf9e57e21089d5082bdb4b4 *chromedriver-v34.5.1-darwin-arm64.zip --7ff68fd26f225deaa8c6fbcd76dc80a00f9ef73f9118075f3e2ab54dfb0c810e *chromedriver-v34.5.1-darwin-x64.zip --749f692603527e8743c81d05eb2de2e281e2b03b148ec00379f13e8da17ca7a4 *chromedriver-v34.5.1-linux-arm64.zip --14bcc062457cf31d606451aa7fae1baae720a944dead06231fe2a55f17d39966 *chromedriver-v34.5.1-linux-armv7l.zip --57cf85eb9dafe28ccdd8ba4a095cb1fd5b8c71f0743bf532b132bc45e56630ef *chromedriver-v34.5.1-linux-x64.zip --e90e10cf45f4aaba1d8b763279b7c4b85e1132bdc9faef834ffda41ee1460df8 *chromedriver-v34.5.1-mas-arm64.zip --1206e1c71ec0360be9531e48c0292ffac37e40d8d7a48dd38f1108d3d3ccc0c0 *chromedriver-v34.5.1-mas-x64.zip --1b226994cfa02663f23edfb0c8a4d3e218b7c4d037a90bbb4800a7c396b67d9f *chromedriver-v34.5.1-win32-arm64.zip --dc38291ccad6f715a82cc2ce0cfffe3bb37612fa86013d405e878ea74e4c5fb8 *chromedriver-v34.5.1-win32-ia32.zip --3ccc7e4b65adde12e26b7affeea30b9597b8841fc2a4d3c50c042e80b85853ac *chromedriver-v34.5.1-win32-x64.zip --71fe75d29208ca9e38754d903af4d5d6e80c62b04097605c36ebf722c2447842 *electron-api.json --009c833bd014b6f873974c5d3189905e705ebcb188a90ae05b60ea252319a46e *electron-v34.5.1-darwin-arm64-dsym-snapshot.zip --c5f5722c55e75e9860cb203e03626c04f30f272ef17b735946fd723600ee07ea *electron-v34.5.1-darwin-arm64-dsym.zip --06de49512ac4b0b4e374bdcd296e8c70584fb47207bb6caed9122e3cef5da8f7 *electron-v34.5.1-darwin-arm64-symbols.zip --78411442b5bd2252cf4605b6a44c35ad6a06807d03c63c61726ad7693c6d5893 *electron-v34.5.1-darwin-arm64.zip --e90b292974251336ae8990a74977065ac4dd6388836ccd1cfee3a1599a37bd39 *electron-v34.5.1-darwin-x64-dsym-snapshot.zip --35a0ac52f6036cd0a7d4bc9848477b653095b210497e36797427ff8fe3194c7f *electron-v34.5.1-darwin-x64-dsym.zip --0457bb7413c770245912342a6dd07c3588f586e8d868e0dd534179e22b07898c *electron-v34.5.1-darwin-x64-symbols.zip --8d4bc5f4495ef952589891b6c70a86d8a9d143a1d4d90d15dd81926639822031 *electron-v34.5.1-darwin-x64.zip --73be60acd1f3773f87b283eef8c26e257f16efd46a179c143311b1b9fcb4a61a *electron-v34.5.1-linux-arm64-debug.zip --53677a8f437b36b79481eb6c6f9f7557606af04ef94cce751620e8206dad36a8 *electron-v34.5.1-linux-arm64-symbols.zip --4c0d5833faa01cc3a586087b82f719c2fe331515d26bb3fa098dc79bd3ea153f *electron-v34.5.1-linux-arm64.zip --73be60acd1f3773f87b283eef8c26e257f16efd46a179c143311b1b9fcb4a61a *electron-v34.5.1-linux-armv7l-debug.zip --6eb39e79bd52f566d18a1140242c7484b89d7cd77573b92fc2e2993b51d6fbf1 *electron-v34.5.1-linux-armv7l-symbols.zip --7ed517eeaff56960a01fe53fc445e4118135eeb8267d61c37ef9df943dcc35fb *electron-v34.5.1-linux-armv7l.zip --582a2206cf1e09baa8511ca21b697cc49fddd76ef7723406b449b130b3d21730 *electron-v34.5.1-linux-x64-debug.zip --7b5d60f3d6c4ef84b0855148f14295624527cc27ab395bf54640a06eb3f7a5b0 *electron-v34.5.1-linux-x64-symbols.zip --3ae6f75fa08f5c1bdb7bbcec4dc9cf7d7f53ffcf6a4292e4a482b2ce515505e7 *electron-v34.5.1-linux-x64.zip --e6ff5c411167c0cf8c82cd737f8d0c863f4371e8e1fe213d04b502584411d239 *electron-v34.5.1-mas-arm64-dsym-snapshot.zip --8d1cb700f23d8ac7ec078d4d5d07018dfae594346e7bc5652356a5fe242a2b44 *electron-v34.5.1-mas-arm64-dsym.zip --3b74614ef81382e63f189aceb87f6c3830a23ffed046d06f672d0c1a1b361e96 *electron-v34.5.1-mas-arm64-symbols.zip --eabc29959b914f623f5f2e4011cb4e35182ed9528dc30664e59ca37c806c1d7d *electron-v34.5.1-mas-arm64.zip --ee3de3f5a96efb0197022557ec2de36d92d7423426636577864b1ae744053dea *electron-v34.5.1-mas-x64-dsym-snapshot.zip --a3db9cc489720701e3f35d2f7425c97e24f74fdb78a38bc0950b68b3f82aebb2 *electron-v34.5.1-mas-x64-dsym.zip --a9131003b1ac4a3c3327ff405e1cd8f3e61dc8a73cfae3e05cb5eb0f2d872bee *electron-v34.5.1-mas-x64-symbols.zip --1b44d42dbe9cb6bc5c2fb77f708d639e01f8ec6f74b95710fc6c8dbd70181f3b *electron-v34.5.1-mas-x64.zip --4495d8bf4d3dbb5ebc3ad135f4658e09d706368d002af9f24d236e1a0a28e994 *electron-v34.5.1-win32-arm64-pdb.zip --2c31fa61d24e736f3e327eba4d354c09471fba5aa277e215f7e2ea275b323a80 *electron-v34.5.1-win32-arm64-symbols.zip --c23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.5.1-win32-arm64-toolchain-profile.zip --c0cff1c83094a430f1b202bb5035b51ebcefa54cd53d798bb63de9cb96abf223 *electron-v34.5.1-win32-arm64.zip --d662fb7afc288aa15d929fecbb391c7067448ea86b4bf01e941fa8da744a8167 *electron-v34.5.1-win32-ia32-pdb.zip --2cd1f41a3297fc271e426bd0cc5f8c3474f73438a7a303186701cb7d8b26bdb6 *electron-v34.5.1-win32-ia32-symbols.zip --c23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.5.1-win32-ia32-toolchain-profile.zip --cf86edf6cdb47d5cfb00c4eb68f7a18d70bf9e33f1f6a0481d51673cf6af7050 *electron-v34.5.1-win32-ia32.zip --9dd0e6f6ef53f8bd4d7ecd97a3bfc7e8a98de8771986071692afc57d57d199d6 *electron-v34.5.1-win32-x64-pdb.zip --f50ab96420bddd43bd5dbd56130cfcd69eea2dba18bfd3c8c3b4bb189bb033e6 *electron-v34.5.1-win32-x64-symbols.zip --c23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.5.1-win32-x64-toolchain-profile.zip --da606d1a085a52ddf5592110b58284fc3bf49f273f6f2e7d6a8341c98af8498e *electron-v34.5.1-win32-x64.zip --793ae7822cbdad6270c318f3c93c0e8b4f9276dea6dd87db2d1297cadc7381c6 *electron.d.ts --1d1465b4f6a3919a6e8e2fb8612b29f61b09d80f386a8fa2b806859b9be0d0bf *ffmpeg-v34.5.1-darwin-arm64.zip --e138b6422dd1648cbe817b99f59476c65ed9946d50e50094124eae660b416378 *ffmpeg-v34.5.1-darwin-x64.zip --346101611df565cabcfaa3515b1db3f70d0891ba8f1241074dd09b69e12630d2 *ffmpeg-v34.5.1-linux-arm64.zip --5c77c712ee93bd26706daa78f0651d9b4ba8e4b46a115908f29d2742a2e1b9f0 *ffmpeg-v34.5.1-linux-armv7l.zip --f5ab70d399d528450c9499966e88ce02a368bb8c7dd7ac0676a6628fa29b3f14 *ffmpeg-v34.5.1-linux-x64.zip --10e3424c01b946274fa8c651d4ea79032637feca4c8712ebb1c00f392711594f *ffmpeg-v34.5.1-mas-arm64.zip --4db0373915c2c2a055bd04755acdbcd08e00456f1fb92fefc0e05cd7fb48e4fa *ffmpeg-v34.5.1-mas-x64.zip --c8cca82fc9315f86ffb60b39e824ebec7f98361f8773ea0618d9feea92b88412 *ffmpeg-v34.5.1-win32-arm64.zip --c8cca82fc9315f86ffb60b39e824ebec7f98361f8773ea0618d9feea92b88412 *ffmpeg-v34.5.1-win32-ia32.zip --c8cca82fc9315f86ffb60b39e824ebec7f98361f8773ea0618d9feea92b88412 *ffmpeg-v34.5.1-win32-x64.zip --9ae3a56bf29d9704cd8cf32924aad89414f28d439e61dd54bdd8b4259b8d0b1d *hunspell_dictionaries.zip --691e23913b7dbde1f9c9b6e9f13f06353d5c7927cbab6d48b7de43e76e5eacd8 *libcxx-objects-v34.5.1-linux-arm64.zip --eaaa18779a96873daeece21c7c823d1f5d4759f8eca79dbbbf2055635df6112f *libcxx-objects-v34.5.1-linux-armv7l.zip --6a2e3dfcea9d0582ecbc2a6be124f0e830e2194111bd9aa6a9843cb956c946c4 *libcxx-objects-v34.5.1-linux-x64.zip --d4b70d94523ebd770009dba04c842450539a9bdc856de660a7391620d3bcc1fb *libcxx_headers.zip --0ed01bc1908fd8f7519ccdf636b5732c6fe2c095a6dc35a13eb6c79b9e87d7d1 *libcxxabi_headers.zip --f633cd0df0b08a15938ccdc77480bc28eb96fd85936ef76c343cc3f47fe74f3c *mksnapshot-v34.5.1-darwin-arm64.zip --a8643285a2386960ceb608ff34d6dac33942142e821e2e0c670b282389a87e53 *mksnapshot-v34.5.1-darwin-x64.zip --70863b79d4b7ab75d013a9192f7b23165e3e523b243632c7b55418767527e022 *mksnapshot-v34.5.1-linux-arm64-x64.zip --c30319434ea16416c38bbdf847432fd37fd8e1aa78c1c22b6345d02e3743c016 *mksnapshot-v34.5.1-linux-armv7l-x64.zip --e882e32b67501d36710da396167274158c1940afe67459ffa1d9df534a8f6df1 *mksnapshot-v34.5.1-linux-x64.zip --af1d08dbd3c572ae10db0d24203a28d83c87e92e966064134ec5d7770c74e3ac *mksnapshot-v34.5.1-mas-arm64.zip --238058875abebcb9233e609fadad76e85b79530f1bdfb60498b144fec82ff8fc *mksnapshot-v34.5.1-mas-x64.zip --779e494cf2088ee386bb3ffd68d5efc2de3d43e5a2e6a5a768638799c460fdab *mksnapshot-v34.5.1-win32-arm64-x64.zip --9f9790fab86209ca76ecfae3e20dc028bc0e49574872f6ac17b8856093811357 *mksnapshot-v34.5.1-win32-ia32.zip --5c39077fd59426108f15e4981c7be5ebe56aa706b9d166853225de882fee8d6e *mksnapshot-v34.5.1-win32-x64.zip -+f68064647df820d9f207d039850cb055fddb2539a8b01838a5af787d9413dde1 *chromedriver-v34.5.4-darwin-arm64.zip -+7bf6fe1aa4be3a9b8a6583667a8c81c1bb7e01ec62a886c2fecd1fac108fa8ab *chromedriver-v34.5.4-darwin-x64.zip -+d5eb1a8e1748b74341acab18eb928a5e139f9a530e153c1c59b6e8383ff284bd *chromedriver-v34.5.4-linux-arm64.zip -+5d8f205a4b326b65528bf24988457129d40f5c393b0af43410d28e252bc2170d *chromedriver-v34.5.4-linux-armv7l.zip -+08d86fb4cd0a2ae190ef43de117fa8a1b02079b302709fc0d3d7df5b60869429 *chromedriver-v34.5.4-linux-x64.zip -+8ef6b029dbb939162ef43bfceffd14f36f4674c6ac28daf2be9f29fd58eab343 *chromedriver-v34.5.4-mas-arm64.zip -+53318dcb6d29f9e23efe88fda1fc88bc9d22aaa588538bfde42ecbc9f8c61306 *chromedriver-v34.5.4-mas-x64.zip -+130d0fc9f96c83486ee8e37121dc1a412bfa71f65aa8ad67f6f4e4ed30cc4d1e *chromedriver-v34.5.4-win32-arm64.zip -+00ef5fc423142150758fdb1968f0b0db996ae035c211df164e7af9422743dfae *chromedriver-v34.5.4-win32-ia32.zip -+01f6371487d173f0b2d8b41d7aab5affa9ac7f0cc5154f1ee39ba2120e36026d *chromedriver-v34.5.4-win32-x64.zip -+7cfbc13990047fe5917ad9cf3269f83c4759551a5c300011bf8eda3af96efabb *electron-api.json -+194074a282320343e0997c9071f70f64cafcd6113f7741a628c45249105a0801 *electron-v34.5.4-darwin-arm64-dsym-snapshot.zip -+cb2deebc1596cfdea6889f37c7827bcd31af9645209288b3a92d0f25b78761e8 *electron-v34.5.4-darwin-arm64-dsym.zip -+f2402094acdc73d8123a8535f623934948662316a340ec767c3ddfd75c73dd9b *electron-v34.5.4-darwin-arm64-symbols.zip -+92dc77f80fde9267ce2db8e7094c6e49b1766a19c3da90c25e2b5024b7a4501b *electron-v34.5.4-darwin-arm64.zip -+8ef7c227cce20a4da7dbfc85f83f4d1af0a8d698cc9e8cea8487571e412b1591 *electron-v34.5.4-darwin-x64-dsym-snapshot.zip -+276dce4418ad0c630c82757a5242575eff67793a10151a65c0ed81965cbf2b1c *electron-v34.5.4-darwin-x64-dsym.zip -+a7a57b5e02f86e545dadf479e5c2652760c1cb2f9738e0f75f3d3db06e40ee1d *electron-v34.5.4-darwin-x64-symbols.zip -+c631318672a1b6ecc9835ccf1501562380728a044a78de2fa105608a6610fa01 *electron-v34.5.4-darwin-x64.zip -+fd49778abd8eb28b00241137db97c5c9eaf27a52aadcbff3b8832d1eedfec954 *electron-v34.5.4-linux-arm64-debug.zip -+cef68467ee2d5e4ed0f60c44168b0e1c885582e6ff2dc6773848b6983fee5c08 *electron-v34.5.4-linux-arm64-symbols.zip -+f4b4dcc92a0f4bf92c68571868dd13d49b33bca51f7b1352319f55f5abbf3505 *electron-v34.5.4-linux-arm64.zip -+fd49778abd8eb28b00241137db97c5c9eaf27a52aadcbff3b8832d1eedfec954 *electron-v34.5.4-linux-armv7l-debug.zip -+2a3a78b068ac2cbe223d9aec30012125586ea84e357ba05cab9def032ce649c5 *electron-v34.5.4-linux-armv7l-symbols.zip -+048256f513e036df0f056c32b249b0ca48f6c3c0481b1e6bdc686df409289f8d *electron-v34.5.4-linux-armv7l.zip -+6e108ee8b073619bf0760947f4a71c0846602aa18820593566362eaadc4f8ff5 *electron-v34.5.4-linux-x64-debug.zip -+cc962ac6ec063d6cb222892e0e0dc1d9efdb64ac2086790e35d61f035b6d31fd *electron-v34.5.4-linux-x64-symbols.zip -+c8c871ef0cf83e1e937afa620e9eb2fa7fc22f5a1302e9ec666923fc22bc0bd0 *electron-v34.5.4-linux-x64.zip -+4131d194d5e7be6e1c2b6e43fd115f679264df397a1bbf653c1bbbbb83109cc0 *electron-v34.5.4-mas-arm64-dsym-snapshot.zip -+c252bc1b97bcc50615ac3b1296152481b4deaa7f79f6b0e42a56614991695413 *electron-v34.5.4-mas-arm64-dsym.zip -+1a435e5c0db5a52b607b57e5627d2862d67826a732ce4c2db9ecc86ff843ffd0 *electron-v34.5.4-mas-arm64-symbols.zip -+a309cc5d77994e27c2bdd2d753642dd217e909ca0d1de336d2f72f4f89bdac6f *electron-v34.5.4-mas-arm64.zip -+4388832d22a4f10ced28ed15daa254cb3805dbb0e33f2816a74c7b82dca93926 *electron-v34.5.4-mas-x64-dsym-snapshot.zip -+c6d7c1b5c605db62b25bb5ee0bd6159b9e063019d970e418e3c5773c8074e6b6 *electron-v34.5.4-mas-x64-dsym.zip -+539cd04e89ad98afa71159ba6e7e001387a5fc22ca9a1421890d8be0e1cbf8bd *electron-v34.5.4-mas-x64-symbols.zip -+c8319f49a04c9de7792225847f0f52358c0cdeedbc83dd8edc1949d917d3d377 *electron-v34.5.4-mas-x64.zip -+e5331a5cf9d100982ae15dddad4abdaedf5d7976f325af4c39d5bdd094122880 *electron-v34.5.4-win32-arm64-pdb.zip -+3e87f89afc24ce72b8dd8b7df56561dd7a5474cfe8df3788a94bbc5cf446fd87 *electron-v34.5.4-win32-arm64-symbols.zip -+c23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.5.4-win32-arm64-toolchain-profile.zip -+912346508a25c56a0f4a5eeda466bb145cabcbff9e68b0f8759bf8847e01dab3 *electron-v34.5.4-win32-arm64.zip -+f98be086997be9534e991a1374755cfcfbbf9f53a95ab17e9291ef224370da79 *electron-v34.5.4-win32-ia32-pdb.zip -+aaa12a153b0bb2746cf7acd8f994a2c714d27791393383e1e78403de16388131 *electron-v34.5.4-win32-ia32-symbols.zip -+c23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.5.4-win32-ia32-toolchain-profile.zip -+19f272b112ad2b2468caa3a01ceaa0f4ab83e100a0decdda36b261c0b584e848 *electron-v34.5.4-win32-ia32.zip -+2bac4be5bed9eff8a7adb3732c112beaf06a643f8c8b91c02cf226101bee2ca3 *electron-v34.5.4-win32-x64-pdb.zip -+3eb34ea1553ccfbd33a95c65827dac1d07119ede1749b8010a113a1693b80394 *electron-v34.5.4-win32-x64-symbols.zip -+c23f84aabb09c24cd2ae759a547fdba4206af19a3bb0f4554a91cd9528648ad0 *electron-v34.5.4-win32-x64-toolchain-profile.zip -+42c05407af7584c9b8134647b7f217ae683c3a04991d3de7524094cceff95505 *electron-v34.5.4-win32-x64.zip -+9a321b11432efca3d64439b1a398911de27c33fab0d6c3458924f5c71088b046 *electron.d.ts -+9483ab113a02e4520c20ea9d1b4464f0f677a4f9a408b0df12632a9e3ef4bade *ffmpeg-v34.5.4-darwin-arm64.zip -+c2fb961e4219f41772c796db759703240bfea2251366e6a77580805a70a8ecfe *ffmpeg-v34.5.4-darwin-x64.zip -+346101611df565cabcfaa3515b1db3f70d0891ba8f1241074dd09b69e12630d2 *ffmpeg-v34.5.4-linux-arm64.zip -+5c77c712ee93bd26706daa78f0651d9b4ba8e4b46a115908f29d2742a2e1b9f0 *ffmpeg-v34.5.4-linux-armv7l.zip -+f5ab70d399d528450c9499966e88ce02a368bb8c7dd7ac0676a6628fa29b3f14 *ffmpeg-v34.5.4-linux-x64.zip -+c7d14c50640283759e21932d3c478b3bad01e15add490efb3fc18446c32a5fe1 *ffmpeg-v34.5.4-mas-arm64.zip -+944918f694a9c37a74faee19feb989c02b78aaf32bfaa945ccce688fa76126ce *ffmpeg-v34.5.4-mas-x64.zip -+39d841fb03d07e6831533c29bf55446f16a2116a5f02beb1022b68232bac6a55 *ffmpeg-v34.5.4-win32-arm64.zip -+39d841fb03d07e6831533c29bf55446f16a2116a5f02beb1022b68232bac6a55 *ffmpeg-v34.5.4-win32-ia32.zip -+39d841fb03d07e6831533c29bf55446f16a2116a5f02beb1022b68232bac6a55 *ffmpeg-v34.5.4-win32-x64.zip -+2caad55fb223f7aa9652f9b68ce29440c8c714e9be65ff657682dc4f9a05d67a *hunspell_dictionaries.zip -+f584b71abbbb021e1002fdc85d67773898219af2982209abfff4f92f8b255243 *libcxx-objects-v34.5.4-linux-arm64.zip -+51e2db3cb02ab656404d7a28beab866d07b59dc2cc3127e5984ec5397f0f43d8 *libcxx-objects-v34.5.4-linux-armv7l.zip -+6e6ca30cdedb38b9bfbcf79d8f14f466ab023145c464c1f75d581482e9fe601f *libcxx-objects-v34.5.4-linux-x64.zip -+3191ca448f1978a80181ab0e31ecd7c1fbfe9cd409018b82f3879c0b2b299fc7 *libcxx_headers.zip -+6afe922a6e3006d40a5342719af3d40de669bb4e03aa938816f3732901677407 *libcxxabi_headers.zip -+6d3bed9a1eb9e6692f9c936336d65d4cc1f43401b5570e75b8e2838605057f88 *mksnapshot-v34.5.4-darwin-arm64.zip -+8022267c02204f75495a23177a144af4bdce8a56aa89b918df127e4b98cb7e2d *mksnapshot-v34.5.4-darwin-x64.zip -+4901999d515c571a9882a50fb6b92e12423c6fe3775d1d7574bdaf8cc9fd32bd *mksnapshot-v34.5.4-linux-arm64-x64.zip -+723c47202c2553c930057328be3ddfcef53da9e71140e8ba581295e3000dde00 *mksnapshot-v34.5.4-linux-armv7l-x64.zip -+0e8b27412c7a223035d16599134f783e9d77b9372898e64b45401e9c3cace29a *mksnapshot-v34.5.4-linux-x64.zip -+2d194587b295c6119b690917c1508d7ed8ee6e2798778afd6de5114cae1bd9b9 *mksnapshot-v34.5.4-mas-arm64.zip -+8e3c743227136f327e928bca25d8fe16a8f003feb33bb936dda4fb1f20765a88 *mksnapshot-v34.5.4-mas-x64.zip -+669c3375bac1ee3b2c8737432d0d2a6e2dc4d44f0d9fa1aa6a1aaf10b6db8224 *mksnapshot-v34.5.4-win32-arm64-x64.zip -+3a54ef58fb4cfc3e2f4b006f96b260e2ac980203a653ad6c1d2bd24d004106dc *mksnapshot-v34.5.4-win32-ia32.zip -+20ec7d86c5f42061c544a2461b6a35a2d69a38cbf69418043ed73856c2ac2a95 *mksnapshot-v34.5.4-win32-x64.zip -\ No newline at end of file -diff --git a/cgmanifest.json b/cgmanifest.json -index 6ee72b3..9344b4e 100644 ---- a/cgmanifest.json -+++ b/cgmanifest.json -@@ -530,3 +530,3 @@ - "repositoryUrl": "https://github.com/electron/electron", -- "commitHash": "d0594707ded4d564c95badf5322d5893295da4ed" -+ "commitHash": "200a6ff5c6be89cb07221fff7025a2f9201bf25b" - } -@@ -535,3 +535,3 @@ - "license": "MIT", -- "version": "34.5.1" -+ "version": "34.5.4" - }, -diff --git a/package-lock.json b/package-lock.json -index beb023f..31df569 100644 ---- a/package-lock.json -+++ b/package-lock.json -@@ -98,3 +98,3 @@ - "deemon": "^1.13.4", -- "electron": "34.5.1", -+ "electron": "34.5.4", - "eslint": "^9.11.1", -@@ -6004,5 +6004,5 @@ - "node_modules/electron": { -- "version": "34.5.1", -- "resolved": "https://registry.npmjs.org/electron/-/electron-34.5.1.tgz", -- "integrity": "sha512-z2Wm7QjhnJ5592fLITynj8UwIk1mBiT402mOakxSYiADrERIci3IOPk7xWHAFOMvt/eoG5RW16PPhgJiedZcGA==", -+ "version": "34.5.4", -+ "resolved": "https://registry.npmjs.org/electron/-/electron-34.5.4.tgz", -+ "integrity": "sha512-WXc3ElYW/1LH50CnpigSeRsK1AfFB/J8hCySFnhXDmz6BBAKhXlJ6bgw1k9ZldR5i+8JqX323773Jn8X3/Wagw==", - "dev": true, -diff --git a/package.json b/package.json -index 4d41ab6..304a0b0 100644 ---- a/package.json -+++ b/package.json -@@ -157,3 +157,3 @@ - "deemon": "^1.13.4", -- "electron": "34.5.1", -+ "electron": "34.5.4", - "eslint": "^9.11.1", diff --git a/patches/update-electron.patch.no b/patches/update-electron.patch.no new file mode 100644 index 00000000000..63dde91df35 --- /dev/null +++ b/patches/update-electron.patch.no @@ -0,0 +1,203 @@ +diff --git a/.npmrc b/.npmrc +index e4a5cc2..e3be238 100644 +--- a/.npmrc ++++ b/.npmrc +@@ -1,3 +1,3 @@ + disturl="https://electronjs.org/headers" +-target="39.2.3" ++target="39.2.7" + ms_build_id="12895514" +diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt +index ace84ba..5da4475 100644 +--- a/build/checksums/electron.txt ++++ b/build/checksums/electron.txt +@@ -1,75 +1,75 @@ +-1e88807c749e69c9a1b2abef105cf30dbec4fddc365afcaa624b1e2df80fe636 *chromedriver-v39.2.3-darwin-arm64.zip +-5cadee0db7684ae48a7f9f4f1310c3f6e1518b0fa88cf3efb36f58984763d43d *chromedriver-v39.2.3-darwin-x64.zip +-8de5ed25a12029ca999455c1cadf28341ec5e0de87a3a0c27dbb24df99f154b1 *chromedriver-v39.2.3-linux-arm64.zip +-766b16d8b1297738a0d1fa7e44d992142558f6e12820197746913385590f033e *chromedriver-v39.2.3-linux-armv7l.zip +-f35049fe3d8dbfdb7c541b59bdca6982b571761bb8cb7fc85515ceaea9451de9 *chromedriver-v39.2.3-linux-x64.zip +-bffe049ac205d87d14d8d2fb61c8f4dfd72b6d60fcd72ebedf7ef78c90ed52d9 *chromedriver-v39.2.3-mas-arm64.zip +-95a7142ba2ba6a418c6d804729dbe4f1fee897cd9ecaf32e554bb9cabff52b9c *chromedriver-v39.2.3-mas-x64.zip +-da1a59e49c16f7b0924b8b43847a19c93110f7d3b5d511cc41d7ec43a5d3807a *chromedriver-v39.2.3-win32-arm64.zip +-9ba84c1e03e31dd630439d53c975b51c21aa4038526dc01970b94464303db5c7 *chromedriver-v39.2.3-win32-ia32.zip +-82d88829e894277d737188afe22a2c82611107f7b31aeb221ae67e56a580dceb *chromedriver-v39.2.3-win32-x64.zip +-aca80a76b97d4b0aa3001882bd8cb7a8fb3f1df75cbc4f0d74eaad0c9df53c9b *electron-api.json +-0fb6f376da5f1bb06125134cd8e33d79a76c4d47b0bc51d20c3359e092095b98 *electron-v39.2.3-darwin-arm64-dsym-snapshot.zip +-6a9e67878637191edcefbd36b070137c3ca4f674307c255864eb9720128905c4 *electron-v39.2.3-darwin-arm64-dsym.zip +-30fd6a23a4a70de3882525c1666af98a2cf07e0826c54bef8f466efb25b1d2ec *electron-v39.2.3-darwin-arm64-symbols.zip +-2128a27c1b0fd80be9d608fb293639f76611b4108eca1e045c933fd04097a7b1 *electron-v39.2.3-darwin-arm64.zip +-68435db35b408d7eb3b9f208f2a7aa803bb8578f409ee99bab435118951a21a5 *electron-v39.2.3-darwin-x64-dsym-snapshot.zip +-59e821dbe0083d4e28a77dff5f72fa65c0db7e7966d760ebb5a41af92da43958 *electron-v39.2.3-darwin-x64-dsym.zip +-cdbe6988a9c9277d5a1acd2f3aaf08e603050f3dae0c10dee4b10d7a6f7cf818 *electron-v39.2.3-darwin-x64-symbols.zip +-f8085a04dc35bfe0c32c36e6feffde07de16459bf36dfab422760181717f5ac0 *electron-v39.2.3-darwin-x64.zip +-ce57eb6bd0ddfa1d37d8a35615276aeb60c19ae0636f21da3270cf07844074b4 *electron-v39.2.3-linux-arm64-debug.zip +-d2652381b24dc05c57a4ce4835b6efc796e6af14419ec80a9ab31f1c3c53f143 *electron-v39.2.3-linux-arm64-symbols.zip +-c58c5904d6015cbbfa5f04fbda5c83b9a276a3565b5f3fa166795c789b055cdd *electron-v39.2.3-linux-arm64.zip +-f0f0be5ea43c0fe84b9609dd5d2b98904c2d4bb8ced9c7c72b72cef377f2734a *electron-v39.2.3-linux-armv7l-debug.zip +-f08ae5371aca8a9f3775a6855c74da71d8817bd9f135c3ba975d428d14f3c42f *electron-v39.2.3-linux-armv7l-symbols.zip +-d7c2f0b5038c49b1e637f8dbda945be4e6f3a6d7ebf802543e6ef5093c9641ff *electron-v39.2.3-linux-armv7l.zip +-aa8b9e4b5eed3a0d2271c01d34551d7dc3e9be30a68af06604c1e2cd3cf93223 *electron-v39.2.3-linux-x64-debug.zip +-d5ebf9628e055b03c90d2d6d4ed86f443b900e264ff34061c953541e27fad5f9 *electron-v39.2.3-linux-x64-symbols.zip +-5eb51ebcb60487c4fc3a5b74ffb57a03eefd48def32200adf310ffaba4153d64 *electron-v39.2.3-linux-x64.zip +-f6cc53c0a45c73779c837d71693f54cc18b12b7148c82c689e2b059772182b84 *electron-v39.2.3-mas-arm64-dsym-snapshot.zip +-0caf9b7b958a7d2ba7e6f757f885842efda3ebc794a2ac048b90cde2926281ee *electron-v39.2.3-mas-arm64-dsym.zip +-c3164da6588c546e728b6fa0754042328cdb43e28dbb0fbcfbda740ed58038fe *electron-v39.2.3-mas-arm64-symbols.zip +-36ea0a98a0480096b4bc6e22c194e999cdfd7f1263c51f08d2815985a8a39ef7 *electron-v39.2.3-mas-arm64.zip +-73d356aa3b51cb261d30f0c27ce354b904d17c3c05c124a1f41112d085e66852 *electron-v39.2.3-mas-x64-dsym-snapshot.zip +-083f53e15a93404b309754df6b5e785785b28e01fdab08a89a45e5024f44e046 *electron-v39.2.3-mas-x64-dsym.zip +-cdd8aaf3b90aedc8c09a44efa03ec67e8426102fad7333ff6bfc257dc6fa01b7 *electron-v39.2.3-mas-x64-symbols.zip +-517d26f9b76b23976d0fc1dcc366e2b50b782592d9b0fc1d814dd1e7ce66efef *electron-v39.2.3-mas-x64.zip +-1a83af2259feb361f7ceb79e047b701ea8297d616487d9d6a79530014d5000c7 *electron-v39.2.3-win32-arm64-pdb.zip +-a154f036378a81859804f660773f6d434770fc311af86dfe01ace5346b9dc788 *electron-v39.2.3-win32-arm64-symbols.zip +-4aae37230f86b1590f102aa038268299bfb55ce2bf3b76ac4d6159e7b6a69f8e *electron-v39.2.3-win32-arm64-toolchain-profile.zip +-b68d623d70c4d0ed76c979027d2a4f6a16bc8dee6f243f5bc2064b4bb52bb34d *electron-v39.2.3-win32-arm64.zip +-be73842257d098ac911b3363e0c11b1d51ab8f6ebd641e512a2e15ccbea73193 *electron-v39.2.3-win32-ia32-pdb.zip +-5f65391f51b5d46d5e0ec7018f3febc0f5b6f072b57310d6d6c9b014de911ff4 *electron-v39.2.3-win32-ia32-symbols.zip +-4aae37230f86b1590f102aa038268299bfb55ce2bf3b76ac4d6159e7b6a69f8e *electron-v39.2.3-win32-ia32-toolchain-profile.zip +-6668fadbdd0283225f4bc60c711f8cd8ac316f43f486cd8a1f62a6a35f89cf7a *electron-v39.2.3-win32-ia32.zip +-430aa905803772476fc1f943e87e4a319d33880d88e08472504531b96834dff1 *electron-v39.2.3-win32-x64-pdb.zip +-9adb254e6ee0d96311cc8056049814436b7e973757d026aac3b533820be027ec *electron-v39.2.3-win32-x64-symbols.zip +-4aae37230f86b1590f102aa038268299bfb55ce2bf3b76ac4d6159e7b6a69f8e *electron-v39.2.3-win32-x64-toolchain-profile.zip +-d4365ad128bbdcb3df99dc4a0ad9de85c5e920903070a473b55377253b6c3fdd *electron-v39.2.3-win32-x64.zip +-feb2f068cd1e2f70bdd7816c13e58dcff9add18fdc8c8e19145a5fd343be541a *electron.d.ts +-4fe4db7f974c64497ddc07c3955a7d83dcfeba61bcec704b33638a4848038d49 *ffmpeg-v39.2.3-darwin-arm64.zip +-8fa2eb8ce5bdf2ecc4cf1f5ebc0f46a4e466fb4841513d482b99838b265995af *ffmpeg-v39.2.3-darwin-x64.zip +-bc72228a7380bc491783602d823bbe2d75e9e417d9b93a40a64be6ff5e3a1bcc *ffmpeg-v39.2.3-linux-arm64.zip +-322698b5ebfae62c34e98c2589b0906b99c15a8181ca3b6d1ffe166ec7d99ab1 *ffmpeg-v39.2.3-linux-armv7l.zip +-40d23294d7bcc48cb3f647f278672021e969a6332cd3cbb06ee681833759626a *ffmpeg-v39.2.3-linux-x64.zip +-4fe4db7f974c64497ddc07c3955a7d83dcfeba61bcec704b33638a4848038d49 *ffmpeg-v39.2.3-mas-arm64.zip +-8fa2eb8ce5bdf2ecc4cf1f5ebc0f46a4e466fb4841513d482b99838b265995af *ffmpeg-v39.2.3-mas-x64.zip +-d324af171e0ae820ec72075924ace2bda96e837ccc79e22b652dda6f82b673b6 *ffmpeg-v39.2.3-win32-arm64.zip +-d982077305d0e4296bed95eb7d2f1048a90b06cfb84d5ddf2a1928e1f07c4dba *ffmpeg-v39.2.3-win32-ia32.zip +-fa65c30f970f9724f4353d068a640592b09a15593b943fa7544cd07e9cace90e *ffmpeg-v39.2.3-win32-x64.zip +-244cd79cf68540e83449ad7d73183416413b3d603cee4496ec07705cbd9338ee *hunspell_dictionaries.zip +-f995e05259eeae64f0e6fbb6d2863aa2fc5846e3ff2dfb3cd22defc3bbbb68d7 *libcxx-objects-v39.2.3-linux-arm64.zip +-3607b4a15aa5f2dbd9e2338ca5451ad8ff646bdac415f9845352d53be1c26ddf *libcxx-objects-v39.2.3-linux-armv7l.zip +-b5020533566dbf22b0b890caa766eb2f4d11675fb1c79c2f41bc54da45a34fc2 *libcxx-objects-v39.2.3-linux-x64.zip +-919a2cc35920b21fbcc5834e858c400f51b607f084c593883c637dba27b9d29a *libcxx_headers.zip +-34e4b44f9c5e08b557a2caed55456ce7690abab910196a783a2a47b58d2b9ac9 *libcxxabi_headers.zip +-661d3578cabe5c98d806d5eeeaee48ac0c997114b9cd76388581e58f6d1c2ce1 *mksnapshot-v39.2.3-darwin-arm64.zip +-c3032c90522e4491e3de641fade3c90be109269108d4ff39b55dbf7331e6eb9a *mksnapshot-v39.2.3-darwin-x64.zip +-bcd8fb45f3b093208346dc2dd2e0b5b70d117e26a70b9619921b26a7f99ba310 *mksnapshot-v39.2.3-linux-arm64-x64.zip +-647762d3d8b01b5123ec11ea5b6984d7b78a26c79ea4d159a3b9fa780de03321 *mksnapshot-v39.2.3-linux-armv7l-x64.zip +-86c0febd8e9ddd8b700c6fb633ec1406bf4fe19ddc2801cb50c01ad345c8ce6e *mksnapshot-v39.2.3-linux-x64.zip +-3676ffc5f489b7d7faafe36fdb5f0f4ce98c8d6fcedfacf6feded7f21b2a50ea *mksnapshot-v39.2.3-mas-arm64.zip +-728936a18c11727d32730c89060dca2d998e7df9159f12bcba2bdf1b51584aad *mksnapshot-v39.2.3-mas-x64.zip +-a3ef9ab1ad5c8172c029dcc36abdc979ecf01f235516120f666595d4d5d02aee *mksnapshot-v39.2.3-win32-arm64-x64.zip +-02584df98255591438ffcc6589bd1ee60af8b8897d08079e7a7dd054e09614fe *mksnapshot-v39.2.3-win32-ia32.zip +-d4dd9de8637d7d8240b7a0686916c0fe84058ad00db9422f5491fbbd7a53cf4b *mksnapshot-v39.2.3-win32-x64.zip ++ab4c5ce64b92082b15f11ed2a89766fa5542b33d656872678ca0aee99e51a7c8 *chromedriver-v39.2.7-darwin-arm64.zip ++976f03f6e5e1680e5f8449bd04da531aabec0b664ff462a14f0d41fad0b437af *chromedriver-v39.2.7-darwin-x64.zip ++28649b04333820f826ea658d18f8111e0a187b3afc498af05b5c59b27ac00155 *chromedriver-v39.2.7-linux-arm64.zip ++149033ccf7f909214c7d69788bdef2e4ce164cae1091a2f8220f62e495576f9b *chromedriver-v39.2.7-linux-armv7l.zip ++6a071551518eddc688dd348d3e63b0c55f744589a041943e5706bebfd5337f19 *chromedriver-v39.2.7-linux-x64.zip ++824ea4699fd6aa6822e453496ebf576174d04e0f0991843b77eb346a842725bc *chromedriver-v39.2.7-mas-arm64.zip ++aa991650a765b2bc168f8b742341048fa030ee9e3bd0d0799e1b1d29a4c55d0b *chromedriver-v39.2.7-mas-x64.zip ++a8fc4467bf9be10de3e341648ccd6ad6d618b4456a744137e9f19bd5f9d9bd37 *chromedriver-v39.2.7-win32-arm64.zip ++01b247563a054617530e454646b086352bc03e02ad4f18e5b65b4e3dfd276a1e *chromedriver-v39.2.7-win32-ia32.zip ++a8bc2b9052ac8dadeaf88ea9cd6e46ec0032eee2345a0548741bfed922520579 *chromedriver-v39.2.7-win32-x64.zip ++23486b3effffe5b3bc3ca70261fc9abe2396fd5d018652494f73e3f48cfe57cf *electron-api.json ++8bee9e905544e60e08468efca91481ec467ab8f108a81846c365782ba0fc737c *electron-v39.2.7-darwin-arm64-dsym-snapshot.zip ++3be97c3152cd4a84a6fe4013f7e4712422015f4beeb13eb35f8b4d223307d39a *electron-v39.2.7-darwin-arm64-dsym.zip ++6d5551120d0564fc5596a3b724258da2ce632663d12782c8fdf15a2cc461ed95 *electron-v39.2.7-darwin-arm64-symbols.zip ++bda657a77c074ee0c6a0e5d5f6de17918d7cf959306b454f6fadb07a08588883 *electron-v39.2.7-darwin-arm64.zip ++39f0aab332506455337edff540d007c509e72d8c419cdc57f88a0312848f51c9 *electron-v39.2.7-darwin-x64-dsym-snapshot.zip ++1efed54563ede59d7ae9ba3d548b3e93ede1a4e5dfa510ca22036ea2dd8a2956 *electron-v39.2.7-darwin-x64-dsym.zip ++3b9bfe84905870c9c36939ffac545d388213ffbb296b969f35ae2a098f6a32b7 *electron-v39.2.7-darwin-x64-symbols.zip ++d7535e64ad54efcf0fae84d7fea4c2ee4727eec99c78d2a5acc695285cb0a9f0 *electron-v39.2.7-darwin-x64.zip ++59a3bd71f9c1b355dfbc43f233126cd32b82a53439f0d419e6349044d39e8bbf *electron-v39.2.7-linux-arm64-debug.zip ++1b326f1a5bea47d9be742554434ddf4f094d7bcdd256f440b808359dc78fcd33 *electron-v39.2.7-linux-arm64-symbols.zip ++445465a43bd2ffaec09877f4ed46385065632a4683c2806cc6211cc73c110024 *electron-v39.2.7-linux-arm64.zip ++300c8d11d82cd1257b08e5a08c5e315f758133b627c0271a0f249ba3cb4533d2 *electron-v39.2.7-linux-armv7l-debug.zip ++034dca3c137c7bfe0736456c1aa0941721e3a9f3a8a72a2786cb817d4edb0f9d *electron-v39.2.7-linux-armv7l-symbols.zip ++5de99e9f4de8c9ac2fb93df725e834e3e93194c08c99968def7f7b78594fc97c *electron-v39.2.7-linux-armv7l.zip ++64ef2ae24ae0869ebadb34b178fd7e8375d750d7afe39b42cfa28824f0d11445 *electron-v39.2.7-linux-x64-debug.zip ++63466c4b6024ae38fdb38ff116abd561b9e36b8d4cd8f8aefbe41289950dba0c *electron-v39.2.7-linux-x64-symbols.zip ++2f5285ef563dca154aa247696dddef545d3d895dd9b227ed423ea0d43737c22c *electron-v39.2.7-linux-x64.zip ++ef5a108c1d10148aa031300da10c78feee797afe4ca2a2839819fd8434529860 *electron-v39.2.7-mas-arm64-dsym-snapshot.zip ++9dd01dc9071b1db9d8fb5e9c81eaa96f551db0a982994881e5750cde2432b0f0 *electron-v39.2.7-mas-arm64-dsym.zip ++2cf34289d79906c81b3dfd043fbe19a9604cecedd9ebda6576fa3c6f27edfe23 *electron-v39.2.7-mas-arm64-symbols.zip ++5658d58eacb99fb2a22df0d52ca0507d79f03c85515a123d5e9bee5e0749b93d *electron-v39.2.7-mas-arm64.zip ++92cd45c3fa64e2889fd1bc6b165c4d12bea40786ce59d6d204cadec6039a8e2a *electron-v39.2.7-mas-x64-dsym-snapshot.zip ++21464abc837aeab1609fbfa33aa82793e9d32a597db28ea4da483a9d6b6c668a *electron-v39.2.7-mas-x64-dsym.zip ++8d6e7ffee482514b62465e418049bdf717d308118461e5d97480f5a0eb0b9e20 *electron-v39.2.7-mas-x64-symbols.zip ++e3b4169ab7bf3bc35cc720ef99032acd3d0eb1521524b5c4667898758dd4e9a3 *electron-v39.2.7-mas-x64.zip ++3f1d549214a2430d57e5ab8d3cc9d89363340b16905014e35417c632a94732f6 *electron-v39.2.7-win32-arm64-pdb.zip ++984e1d7718bc920e75a38b114ff73fa52647349763f76e91b64458e5d0fde65f *electron-v39.2.7-win32-arm64-symbols.zip ++ed66f333ff7b385b2f40845178dc2dc4f25cc887510d766433392733fdd272a3 *electron-v39.2.7-win32-arm64-toolchain-profile.zip ++56c6f8d957239b7e8d5a214255f39007d44abc98f701ab61054afa83ad46e80f *electron-v39.2.7-win32-arm64.zip ++c885a8af3226f28081106fa89106f4668b907a53ab3997f3b101b487a76d2878 *electron-v39.2.7-win32-ia32-pdb.zip ++34edebab8fb5458d97a23461213b39360b5652f8dd6fe8bf7f9c10a17b25a1d2 *electron-v39.2.7-win32-ia32-symbols.zip ++ed66f333ff7b385b2f40845178dc2dc4f25cc887510d766433392733fdd272a3 *electron-v39.2.7-win32-ia32-toolchain-profile.zip ++85acd7db5dbb39e16d6c798a649342969569caa2c71d6b5bb1f0c8ae96bca32e *electron-v39.2.7-win32-ia32.zip ++e6a8e1164106548a1cdf266c615d259feada249e1449df8af1f7e04252575e86 *electron-v39.2.7-win32-x64-pdb.zip ++90e1feeff5968265b68d8343e27b9f329b27882747633dd10555740de67d58cc *electron-v39.2.7-win32-x64-symbols.zip ++ed66f333ff7b385b2f40845178dc2dc4f25cc887510d766433392733fdd272a3 *electron-v39.2.7-win32-x64-toolchain-profile.zip ++3464537fa4be6b7b073f1c9b694ac2eb1f632d6ec36f6eeac9e00d8a279f188c *electron-v39.2.7-win32-x64.zip ++40c772eb189d100087b75da6c2ad1aeb044f1d661c90543592546a654b0b6d5b *electron.d.ts ++5a904c2edd12542ce2b6685938cdafe21cf90cd552f2f654058353d1a3d8ee43 *ffmpeg-v39.2.7-darwin-arm64.zip ++91fc23e9008f43ad3c46f690186d77b291a803451b6d89ac82aadb8ae2dd7995 *ffmpeg-v39.2.7-darwin-x64.zip ++a44607619c6742c1f9d729265a687b467a25ba397081ac12bc2c0d9ab4bea37b *ffmpeg-v39.2.7-linux-arm64.zip ++8128ec9be261e2c1017f9b8213f948426119306e5d3acdb59392f32b2c2f0204 *ffmpeg-v39.2.7-linux-armv7l.zip ++a201a2a64a49ab39def2d38a73e92358ebb57ecae99b0bbc8058353c4be23ea1 *ffmpeg-v39.2.7-linux-x64.zip ++5a904c2edd12542ce2b6685938cdafe21cf90cd552f2f654058353d1a3d8ee43 *ffmpeg-v39.2.7-mas-arm64.zip ++91fc23e9008f43ad3c46f690186d77b291a803451b6d89ac82aadb8ae2dd7995 *ffmpeg-v39.2.7-mas-x64.zip ++6fa4278a41d9c5d733369aa4cce694ba219eb72f7fd181060547c3a4920b5902 *ffmpeg-v39.2.7-win32-arm64.zip ++12b9e02c0fd07e8bc233c7c4ebab5c737eca05c41f1c5178867cad313433561b *ffmpeg-v39.2.7-win32-ia32.zip ++caedeb04aa648af14b5a20c9ca902c97eb531a456c7965639465f8764b5d95e0 *ffmpeg-v39.2.7-win32-x64.zip ++f1320ff95f2cce0f0f7225b45f2b9340aeb38b341b4090f0e58f58dc2da2f3a9 *hunspell_dictionaries.zip ++8f4ffd7534f21e40621c515bacd178b809c2e52d1687867c60dfdb97ed17fecb *libcxx-objects-v39.2.7-linux-arm64.zip ++0497730c82e1e76b6a4c22b1af4ebb7821ff6ccb838b78503c0cc93d8a8f03ee *libcxx-objects-v39.2.7-linux-armv7l.zip ++271e3538eb241f1bc83a103ea7d4c8408ee6bd38322ed50dca781f54d002a590 *libcxx-objects-v39.2.7-linux-x64.zip ++9a243728553395448f783591737fb229a327499d6853b51e201c36e4aaa9796f *libcxx_headers.zip ++db3018609bce502c307c59074b3d5273080a68fb50ac1e7fc580994a2e80cc25 *libcxxabi_headers.zip ++509d0890d1a524efe2c68aae18d2c8fd6537e788b94c9f63fd9f9ca3be98fdb9 *mksnapshot-v39.2.7-darwin-arm64.zip ++f0a98b428a6a1f8dc4a4663e876a3984157ac8757922cde7461f19755942c180 *mksnapshot-v39.2.7-darwin-x64.zip ++22fda3b708ab14325b2bfba8e875fbf48b6eacea347ecf1ef41cf24b09b4af8f *mksnapshot-v39.2.7-linux-arm64-x64.zip ++e7b89dbab3449c0a1862b4d129b3ee384cb5bcd53e149eae05df14744ee55cb5 *mksnapshot-v39.2.7-linux-armv7l-x64.zip ++53b3ed9f3a69444915ef1eef688c8f8168d52c3d5232834b8aa249cf210b41b6 *mksnapshot-v39.2.7-linux-x64.zip ++181d962eaa93d8d997b1daf99ae016b3d9d8a5ae037c96a8475490396a8d655f *mksnapshot-v39.2.7-mas-arm64.zip ++de005b619da1c1afcd8f8b6c70facb1dc388c46a66f8eff3058c8a08323df173 *mksnapshot-v39.2.7-mas-x64.zip ++6eea0bee6097cf2cfe3ae42b35f847304697c4a4eec84f5b60d1cbbe324a8490 *mksnapshot-v39.2.7-win32-arm64-x64.zip ++3e769269aa0b51ef9664a982235bc9299fc58743dcf7bce585d49a9f4a074abd *mksnapshot-v39.2.7-win32-ia32.zip ++51337124892bf76d214f89975d42ec0474199cdfac2f9e08664d86ae8e6ba43e *mksnapshot-v39.2.7-win32-x64.zip +\ No newline at end of file +diff --git a/cgmanifest.json b/cgmanifest.json +index 1148b4e..88150cc 100644 +--- a/cgmanifest.json ++++ b/cgmanifest.json +@@ -531,4 +531,4 @@ + "repositoryUrl": "https://github.com/electron/electron", +- "commitHash": "14565211f7fd33f3fe2f75ec1254cfa57d5bc848", +- "tag": "39.2.3" ++ "commitHash": "4d18062d0f0ca34c455bc7ec032dd7959a0365b6", ++ "tag": "39.2.7" + } +diff --git a/package-lock.json b/package-lock.json +index 2b1154b..cbe427e 100644 +--- a/package-lock.json ++++ b/package-lock.json +@@ -100,3 +100,3 @@ + "deemon": "^1.13.6", +- "electron": "39.2.3", ++ "electron": "39.2.7", + "eslint": "^9.36.0", +@@ -6188,5 +6188,5 @@ + "node_modules/electron": { +- "version": "39.2.3", +- "resolved": "https://registry.npmjs.org/electron/-/electron-39.2.3.tgz", +- "integrity": "sha512-j7k7/bj3cNA29ty54FzEMRUoqirE+RBQPhPFP+XDuM93a1l2WcDPiYumxKWz+iKcXxBJLFdMIAlvtLTB/RfCkg==", ++ "version": "39.2.7", ++ "resolved": "https://registry.npmjs.org/electron/-/electron-39.2.7.tgz", ++ "integrity": "sha512-KU0uFS6LSTh4aOIC3miolcbizOFP7N1M46VTYVfqIgFiuA2ilfNaOHLDS9tCMvwwHRowAsvqBrh9NgMXcTOHCQ==", + "dev": true, +diff --git a/package.json b/package.json +index 9ef8381..f732fa8 100644 +--- a/package.json ++++ b/package.json +@@ -162,3 +162,3 @@ + "deemon": "^1.13.6", +- "electron": "39.2.3", ++ "electron": "39.2.7", + "eslint": "^9.36.0", diff --git a/patches/user/hide-activity-bar-items.patch b/patches/user/hide-activity-bar-items.patch new file mode 100644 index 00000000000..f28d4ad617e --- /dev/null +++ b/patches/user/hide-activity-bar-items.patch @@ -0,0 +1,48 @@ +diff --git a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +--- a/src/vs/workbench/contrib/debug/browser/debug.contribution.ts ++++ b/src/vs/workbench/contrib/debug/browser/debug.contribution.ts +@@ -463,7 +463,7 @@ const viewContainer = Registry.as(ViewExtensions.ViewCo + icon: icons.runViewIcon, + alwaysUseContainerInfo: true, + order: 3, +-}, ViewContainerLocation.Sidebar); ++}, ViewContainerLocation.AuxiliaryBar); + + // Register default debug views + const viewsRegistry = Registry.as(ViewExtensions.ViewsRegistry); +diff --git a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +--- a/src/vs/workbench/contrib/files/browser/explorerViewlet.ts ++++ b/src/vs/workbench/contrib/files/browser/explorerViewlet.ts +@@ -270,7 +270,7 @@ export const VIEW_CONTAINER: ViewContainer = viewContainerRegistry.registerViewC + keybindings: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyE }, + order: 0 + }, +-}, ViewContainerLocation.Sidebar, { isDefault: true }); ++}, ViewContainerLocation.AuxiliaryBar, { isDefault: true }); + + const openFolder = localize('openFolder', "Open Folder"); + const addAFolder = localize('addAFolder', "add a folder"); +diff --git a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +--- a/src/vs/workbench/contrib/scm/browser/scm.contribution.ts ++++ b/src/vs/workbench/contrib/scm/browser/scm.contribution.ts +@@ -74,7 +74,7 @@ const viewContainer = Registry.as(ViewContainerExtensio + alwaysUseContainerInfo: true, + order: 2, + hideIfEmpty: true, +-}, ViewContainerLocation.Sidebar, { doNotRegisterOpenCommand: true }); ++}, ViewContainerLocation.AuxiliaryBar, { doNotRegisterOpenCommand: true }); + + const viewsRegistry = Registry.as(ViewContainerExtensions.ViewsRegistry); + const containerTitle = localize('source control view', "Source Control"); +diff --git a/src/vs/workbench/contrib/search/browser/search.contribution.ts b/src/vs/workbench/contrib/search/browser/search.contribution.ts +--- a/src/vs/workbench/contrib/search/browser/search.contribution.ts ++++ b/src/vs/workbench/contrib/search/browser/search.contribution.ts +@@ -63,7 +63,7 @@ const viewContainer = Registry.as(ViewExtensions.ViewCo + hideIfEmpty: true, + icon: searchViewIcon, + order: 1, +-}, ViewContainerLocation.Sidebar, { doNotRegisterOpenCommand: true }); ++}, ViewContainerLocation.AuxiliaryBar, { doNotRegisterOpenCommand: true }); + + const viewDescriptor: IViewDescriptor = { + id: VIEW_ID, diff --git a/patches/user/microphone.patch b/patches/user/microphone.patch index a61979db0f5..09f22d99da0 100644 --- a/patches/user/microphone.patch +++ b/patches/user/microphone.patch @@ -28,12 +28,12 @@ diff --git a/src/vs/workbench/contrib/webview/browser/webviewElement.ts b/src/vs index 84b5eac..2cd30f9 100644 --- a/src/vs/workbench/contrib/webview/browser/webviewElement.ts +++ b/src/vs/workbench/contrib/webview/browser/webviewElement.ts -@@ -398,7 +398,7 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD +@@ -402,7 +402,7 @@ export class WebviewElement extends Disposable implements IWebview, WebviewFindD element.className = `webview ${options.customClasses || ''}`; element.sandbox.add('allow-scripts', 'allow-same-origin', 'allow-forms', 'allow-pointer-lock', 'allow-downloads'); - -- const allowRules = ['cross-origin-isolated', 'autoplay']; -+ const allowRules = ['cross-origin-isolated', 'autoplay','microphone']; + +- const allowRules = ['cross-origin-isolated', 'autoplay', 'local-network-access']; ++ const allowRules = ['cross-origin-isolated', 'autoplay', 'local-network-access', 'microphone']; if (!isFirefox) { allowRules.push('clipboard-read', 'clipboard-write'); } diff --git a/patches/user/remove-save-as.patch b/patches/user/remove-save-as.patch new file mode 100644 index 00000000000..5a4df4284bd --- /dev/null +++ b/patches/user/remove-save-as.patch @@ -0,0 +1,53 @@ +diff --git a/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts b/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts +index 6cd0433..074c7eb 100644 +--- a/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts ++++ b/src/vs/workbench/contrib/files/browser/fileActions.contribution.ts +@@ -12,3 +12,3 @@ import { KeyMod, KeyCode } from '../../../../base/common/keyCodes.js'; + import { openWindowCommand, newWindowCommand } from './fileCommands.js'; +-import { COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, OpenEditorsDirtyEditorContext, COMPARE_SELECTED_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, REMOVE_ROOT_FOLDER_LABEL, SAVE_FILES_COMMAND_ID, COPY_RELATIVE_PATH_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_LABEL, OpenEditorsReadonlyEditorContext, OPEN_WITH_EXPLORER_COMMAND_ID, NEW_UNTITLED_FILE_COMMAND_ID, NEW_UNTITLED_FILE_LABEL, SAVE_ALL_COMMAND_ID, OpenEditorsSelectedFileOrUntitledContext } from './fileConstants.js'; ++import { COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, OpenEditorsDirtyEditorContext, COMPARE_SELECTED_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, REMOVE_ROOT_FOLDER_LABEL, SAVE_FILES_COMMAND_ID, COPY_RELATIVE_PATH_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_LABEL, OpenEditorsReadonlyEditorContext, OPEN_WITH_EXPLORER_COMMAND_ID, NEW_UNTITLED_FILE_COMMAND_ID, NEW_UNTITLED_FILE_LABEL, SAVE_ALL_COMMAND_ID, OpenEditorsSelectedFileOrUntitledContext } from './fileConstants.js'; + import { CommandsRegistry, ICommandHandler } from '../../../../platform/commands/common/commands.js'; +@@ -260,8 +260,2 @@ appendToCommandPalette({ + +-appendToCommandPalette({ +- id: SAVE_FILE_AS_COMMAND_ID, +- title: SAVE_FILE_AS_LABEL, +- category: Categories.File +-}); +- + appendToCommandPalette({ +@@ -696,12 +690,2 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { + +-MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { +- group: '4_save', +- command: { +- id: SAVE_FILE_AS_COMMAND_ID, +- title: nls.localize({ key: 'miSaveAs', comment: ['&& denotes a mnemonic'] }, "Save &&As..."), +- precondition: ContextKeyExpr.or(ActiveEditorContext, ContextKeyExpr.and(FoldersViewVisibleContext, SidebarFocusContext)) +- }, +- order: 2 +-}); +- + MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, { +diff --git a/src/vs/workbench/contrib/files/browser/fileCommands.ts b/src/vs/workbench/contrib/files/browser/fileCommands.ts +index 267b609..d2b077b 100644 +--- a/src/vs/workbench/contrib/files/browser/fileCommands.ts ++++ b/src/vs/workbench/contrib/files/browser/fileCommands.ts +@@ -48,3 +48,3 @@ import { ViewContainerLocation } from '../../../common/views.js'; + import { IViewsService } from '../../../services/views/common/viewsService.js'; +-import { OPEN_TO_SIDE_COMMAND_ID, COMPARE_WITH_SAVED_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, COMPARE_SELECTED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, COPY_PATH_COMMAND_ID, COPY_RELATIVE_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_WITH_EXPLORER_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_COMMAND_ID, SAVE_FILE_AS_COMMAND_ID, SAVE_ALL_COMMAND_ID, SAVE_ALL_IN_GROUP_COMMAND_ID, SAVE_FILES_COMMAND_ID, REVERT_FILE_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, PREVIOUS_COMPRESSED_FOLDER, NEXT_COMPRESSED_FOLDER, FIRST_COMPRESSED_FOLDER, LAST_COMPRESSED_FOLDER, NEW_UNTITLED_FILE_COMMAND_ID, NEW_UNTITLED_FILE_LABEL, NEW_FILE_COMMAND_ID } from './fileConstants.js'; ++import { OPEN_TO_SIDE_COMMAND_ID, COMPARE_WITH_SAVED_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, COMPARE_SELECTED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, COPY_PATH_COMMAND_ID, COPY_RELATIVE_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_WITH_EXPLORER_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_WITHOUT_FORMATTING_COMMAND_ID, SAVE_ALL_COMMAND_ID, SAVE_ALL_IN_GROUP_COMMAND_ID, SAVE_FILES_COMMAND_ID, REVERT_FILE_COMMAND_ID, REMOVE_ROOT_FOLDER_COMMAND_ID, PREVIOUS_COMPRESSED_FOLDER, NEXT_COMPRESSED_FOLDER, FIRST_COMPRESSED_FOLDER, LAST_COMPRESSED_FOLDER, NEW_UNTITLED_FILE_COMMAND_ID, NEW_UNTITLED_FILE_LABEL, NEW_FILE_COMMAND_ID } from './fileConstants.js'; + import { IFileDialogService } from '../../../../platform/dialogs/common/dialogs.js'; +@@ -484,12 +484,2 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ + +-KeybindingsRegistry.registerCommandAndKeybindingRule({ +- id: SAVE_FILE_AS_COMMAND_ID, +- weight: KeybindingWeight.WorkbenchContrib, +- when: undefined, +- primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KeyS, +- handler: accessor => { +- return saveSelectedEditors(accessor, { reason: SaveReason.EXPLICIT, saveAs: true }); +- } +-}); +- + KeybindingsRegistry.registerCommandAndKeybindingRule({ diff --git a/patches/version-0-release.patch b/patches/version-0-release.patch index e2f0409d23b..42c1e86ba6f 100644 --- a/patches/version-0-release.patch +++ b/patches/version-0-release.patch @@ -1,31 +1,26 @@ -diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js -index cd8610d..2d928b1 100644 ---- a/build/gulpfile.vscode.linux.js -+++ b/build/gulpfile.vscode.linux.js -@@ -27,4 +27,2 @@ const commit = getVersion(root); - --const linuxPackageRevision = Math.floor(new Date().getTime() / 1000); -- - /** -@@ -90,3 +88,3 @@ function prepareDebPackage(arch) { +diff --git a/build/gulpfile.vscode.linux.ts b/build/gulpfile.vscode.linux.ts +index c5d2163..b4768b9 100644 +--- a/build/gulpfile.vscode.linux.ts ++++ b/build/gulpfile.vscode.linux.ts +@@ -90,3 +90,3 @@ function prepareDebPackage(arch: string) { .pipe(replace('@@NAME@@', product.applicationName)) - .pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision)) + .pipe(replace('@@VERSION@@', packageJson.version)) .pipe(replace('@@ARCHITECTURE@@', debArch)) -@@ -204,3 +202,2 @@ function prepareRpmPackage(arch) { +@@ -198,3 +198,2 @@ function prepareRpmPackage(arch: string) { .pipe(replace('@@VERSION@@', packageJson.version)) -- .pipe(replace('@@RELEASE@@', linuxPackageRevision)) +- .pipe(replace('@@RELEASE@@', linuxPackageRevision.toString())) .pipe(replace('@@ARCHITECTURE@@', rpmArch)) -@@ -278,3 +275,3 @@ function prepareSnapPackage(arch) { +@@ -263,3 +262,3 @@ function prepareSnapPackage(arch: string) { .pipe(replace('@@NAME@@', product.applicationName)) -- .pipe(replace('@@VERSION@@', commit.substr(0, 8))) +- .pipe(replace('@@VERSION@@', commit!.substr(0, 8))) + .pipe(replace('@@VERSION@@', packageJson.version)) // Possible run-on values https://snapcraft.io/docs/architectures diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts -index 0db2369..5cac67b 100644 +index 8838f2f..fb120ae 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts -@@ -1537,5 +1537,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I +@@ -1629,5 +1629,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I + const version = initData.version.replace(/^([0-9]+\.[0-9]+\.[0-5]).*$/, '$1'); + diff --git a/patches/version-1-update.patch b/patches/version-1-update.patch index 24722ab4865..dd8810186a2 100644 --- a/patches/version-1-update.patch +++ b/patches/version-1-update.patch @@ -49,7 +49,7 @@ index 199f433..a6cbb10 100644 + | "user"; \ No newline at end of file diff --git a/src/vs/platform/update/electron-main/abstractUpdateService.ts b/src/vs/platform/update/electron-main/abstractUpdateService.ts -index 48d0d86..840b9d3 100644 +index ed8043f..e19c9e4 100644 --- a/src/vs/platform/update/electron-main/abstractUpdateService.ts +++ b/src/vs/platform/update/electron-main/abstractUpdateService.ts @@ -14,6 +14,10 @@ import { IProductService } from '../../product/common/productService.js'; @@ -66,6 +66,11 @@ index 48d0d86..840b9d3 100644 + return `${productService.updateUrl}/${quality}/${platform}/${architecture}/latest.json`; + } } +@@ -205,3 +209,3 @@ export abstract class AbstractUpdateService implements IUpdateService { + +- if (mode === 'none') { ++ if (mode === 'none' || mode === 'manual') { + return false; diff --git a/src/vs/platform/update/electron-main/updateService.darwin.ts b/src/vs/platform/update/electron-main/updateService.darwin.ts index b78ebc5..a4a3b1d 100644 --- a/src/vs/platform/update/electron-main/updateService.darwin.ts @@ -174,14 +179,14 @@ index 8550ace..c2fddcb 100644 + return Promise.resolve(null); }) diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts -index 8f92a3e..020e690 100644 +index ae4fd9c..7fc81a0 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts -@@ -11,3 +11,2 @@ import { CancellationToken } from '../../../base/common/cancellation.js'; +@@ -13,3 +13,2 @@ import { CancellationToken } from '../../../base/common/cancellation.js'; import { memoize } from '../../../base/common/decorators.js'; -import { hash } from '../../../base/common/hash.js'; import * as path from '../../../base/common/path.js'; -@@ -25,4 +24,5 @@ import { asJson, IRequestService } from '../../request/common/request.js'; +@@ -27,4 +26,5 @@ import { asJson, IRequestService } from '../../request/common/request.js'; import { ITelemetryService } from '../../telemetry/common/telemetry.js'; -import { AvailableForDownload, DisablementReason, IUpdate, State, StateType, UpdateType } from '../common/update.js'; -import { AbstractUpdateService, createUpdateURL, UpdateErrorClassification } from './abstractUpdateService.js'; @@ -189,12 +194,12 @@ index 8f92a3e..020e690 100644 +import { AbstractUpdateService, createUpdateURL} from './abstractUpdateService.js'; +import * as semver from 'semver'; -@@ -42,5 +42,9 @@ function getUpdateType(): UpdateType { +@@ -44,5 +44,9 @@ function getUpdateType(): UpdateType { if (typeof _updateType === 'undefined') { -- _updateType = fs.existsSync(path.join(path.dirname(process.execPath), 'unins000.exe')) +- _updateType = existsSync(path.join(path.dirname(process.execPath), 'unins000.exe')) - ? UpdateType.Setup - : UpdateType.Archive; -+ if (fs.existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))) { ++ if (existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))) { + _updateType = UpdateType.Setup; + } else if (path.basename(path.normalize(path.join(process.execPath, '..', '..'))) === 'Program Files') { + _updateType = UpdateType.WindowsInstaller; @@ -202,11 +207,11 @@ index 8f92a3e..020e690 100644 + _updateType = UpdateType.Archive; + } } -@@ -63,2 +67,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -65,2 +69,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun @IConfigurationService configurationService: IConfigurationService, + // @ts-expect-error @ITelemetryService private readonly telemetryService: ITelemetryService, -@@ -102,11 +107,21 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -155,11 +160,21 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun protected buildUpdateFeedUrl(quality: string): string | undefined { - let platform = `win32-${process.arch}`; - @@ -235,7 +240,7 @@ index 8f92a3e..020e690 100644 - return createUpdateURL(platform, quality, this.productService); + return createUpdateURL(this.productService, quality, process.platform, process.arch, target); } -@@ -131,2 +146,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -184,2 +199,10 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + const fetchedVersion = /\d+\.\d+\.\d+\.\d+/.test(update.productVersion) ? update.productVersion.replace(/(\d+\.\d+\.\d+)\.\d+(\-\w+)?/, '$1$2') : update.productVersion.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') + const currentVersion = this.productService.version.replace(/(\d+\.\d+\.)0+(\d+)(\-\w+)?/, '$1$2$3') @@ -246,16 +251,16 @@ index 8f92a3e..020e690 100644 + } + if (updateType === UpdateType.Archive) { -@@ -157,3 +180,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -210,3 +233,3 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - const fastUpdatesEnabled = this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); + const fastUpdatesEnabled = getUpdateType() == UpdateType.Setup && this.configurationService.getValue('update.enableWindowsBackgroundUpdates'); if (fastUpdatesEnabled) { -@@ -169,3 +192,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -222,3 +245,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun .then(undefined, err => { - this.telemetryService.publicLog2<{ messageHash: string }, UpdateErrorClassification>('update:error', { messageHash: String(hash(String(err))) }); this.logService.error(err); -@@ -253,6 +275,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun +@@ -307,6 +329,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun } else { - spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { - detached: true, diff --git a/patches/windows/appx.patch b/patches/windows/appx.patch new file mode 100644 index 00000000000..60e992de821 --- /dev/null +++ b/patches/windows/appx.patch @@ -0,0 +1,37 @@ +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index d3ab651..d067b5b 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -432,19 +432,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + .pipe(rename(f => f.dirname = `policies/${f.dirname}`))); +- +- if (quality === 'stable' || quality === 'insider') { +- result = es.merge(result, gulp.src('.build/win32/appx/**', { base: '.build/win32' })); +- const rawVersion = version.replace(/-\w+$/, '').split('.'); +- const appxVersion = `${rawVersion[0]}.0.${rawVersion[1]}.${rawVersion[2]}`; +- result = es.merge(result, gulp.src('resources/win32/appx/AppxManifest.xml', { base: '.' }) +- .pipe(replace('@@AppxPackageName@@', product.win32AppUserModelId)) +- .pipe(replace('@@AppxPackageVersion@@', appxVersion)) +- .pipe(replace('@@AppxPackageDisplayName@@', product.nameLong)) +- .pipe(replace('@@AppxPackageDescription@@', product.win32NameVersion)) +- .pipe(replace('@@ApplicationIdShort@@', product.win32RegValueName)) +- .pipe(replace('@@ApplicationExe@@', product.nameShort + '.exe')) +- .pipe(replace('@@FileExplorerContextMenuID@@', quality === 'stable' ? 'OpenWithCode' : 'OpenWithCodeInsiders')) +- .pipe(replace('@@FileExplorerContextMenuCLSID@@', (product as { win32ContextMenu?: Record }).win32ContextMenu![arch].clsid)) +- .pipe(replace('@@FileExplorerContextMenuDLL@@', `${quality === 'stable' ? 'code' : 'code_insider'}_explorer_command_${arch}.dll`)) +- .pipe(rename(f => f.dirname = `appx/manifest`))); +- } + } else if (platform === 'linux') { +diff --git a/build/gulpfile.vscode.win32.ts b/build/gulpfile.vscode.win32.ts +index a7b01f0..43c93b8 100644 +--- a/build/gulpfile.vscode.win32.ts ++++ b/build/gulpfile.vscode.win32.ts +@@ -117,8 +117,2 @@ function buildWin32Setup(arch: string, target: string): task.CallbackTask { + +- if (quality === 'stable' || quality === 'insider') { +- definitions['AppxPackage'] = `${quality === 'stable' ? 'code' : 'code_insider'}_${arch}.appx`; +- definitions['AppxPackageDll'] = `${quality === 'stable' ? 'code' : 'code_insider'}_explorer_command_${arch}.dll`; +- definitions['AppxPackageName'] = `${product.win32AppUserModelId}`; +- } +- + packageInnoSetup(issPath, { definitions }, cb as (err?: Error | null) => void); diff --git a/patches/windows/cli.patch b/patches/windows/cli.patch index 8d232dbbbea..c96c8fc90a5 100644 --- a/patches/windows/cli.patch +++ b/patches/windows/cli.patch @@ -1,9 +1,9 @@ diff --git a/cli/src/update_service.rs b/cli/src/update_service.rs -index a39bbf7..26ad204 100644 +index 3e0895f..e518ad8 100644 --- a/cli/src/update_service.rs +++ b/cli/src/update_service.rs -@@ -84,3 +84,3 @@ impl UpdateService { +@@ -94,3 +94,3 @@ impl UpdateService { let download_url = format!( - "{}/{}/{}/{}/latest.json", + "{}/{}/{}/{}/user/latest.json", - update_endpoint, + &update_endpoint, diff --git a/patches/windows/disable-versioned-resources.patch b/patches/windows/disable-versioned-resources.patch new file mode 100644 index 00000000000..77c7bb684d7 --- /dev/null +++ b/patches/windows/disable-versioned-resources.patch @@ -0,0 +1,854 @@ +diff --git a/build/gulpfile.vscode.ts b/build/gulpfile.vscode.ts +index ac70ecb..e04cca7 100644 +--- a/build/gulpfile.vscode.ts ++++ b/build/gulpfile.vscode.ts +@@ -41,3 +41,2 @@ const root = path.dirname(import.meta.dirname); + const commit = getVersion(root); +-const versionedResourcesFolder = (product as typeof product & { quality?: string })?.quality === 'insider' ? commit!.substring(0, 10) : ''; + +@@ -356,8 +355,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + ], { base: '.' })); +- if (quality && quality === 'insider') { +- customElectronConfig = { +- createVersionedResources: true, +- productVersionString: `${versionedResourcesFolder}`, +- }; +- } + } else if (platform === 'linux') { +@@ -398,3 +391,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + .pipe(replace('@@NAME@@', product.nameShort)) +- .pipe(replace('@@VERSIONFOLDER@@', versionedResourcesFolder)) + .pipe(rename(function (f) { f.basename = product.applicationName; }))); +@@ -407,3 +399,2 @@ function packageTask(platform: string, arch: string, sourceFolderName: string, d + .pipe(replace('@@APPNAME@@', product.applicationName)) +- .pipe(replace('@@VERSIONFOLDER@@', versionedResourcesFolder)) + .pipe(replace('@@SERVERDATAFOLDER@@', product.serverDataFolderName || '.vscode-remote')) +@@ -473,4 +464,4 @@ function patchWin32DependenciesTask(destinationFolderName: string) { + const deps = await glob('**/*.node', { cwd, ignore: 'extensions/node_modules/@vscode/watcher/**' }); +- const packageJson = JSON.parse(await fs.promises.readFile(path.join(cwd, versionedResourcesFolder, 'resources', 'app', 'package.json'), 'utf8')); +- const product = JSON.parse(await fs.promises.readFile(path.join(cwd, versionedResourcesFolder, 'resources', 'app', 'product.json'), 'utf8')); ++ const packageJson = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'package.json'), 'utf8')); ++ const product = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'product.json'), 'utf8')); + const baseVersion = packageJson.version.replace(/-.*$/, ''); +diff --git a/build/gulpfile.vscode.win32.ts b/build/gulpfile.vscode.win32.ts +index a7b01f0..4409ce2 100644 +--- a/build/gulpfile.vscode.win32.ts ++++ b/build/gulpfile.vscode.win32.ts +@@ -74,9 +74,4 @@ function buildWin32Setup(arch: string, target: string): task.CallbackTask { + const quality = (product as typeof product & { quality?: string }).quality || 'dev'; +- let versionedResourcesFolder = ''; + let issPath = path.join(import.meta.dirname, 'win32', 'code.iss'); +- if (quality && quality === 'insider') { +- versionedResourcesFolder = commit!.substring(0, 10); +- issPath = path.join(import.meta.dirname, 'win32', 'code-insider.iss'); +- } +- const originalProductJsonPath = path.join(sourcePath, versionedResourcesFolder, 'resources/app/product.json'); ++ const originalProductJsonPath = path.join(sourcePath, 'resources/app/product.json'); + const productJsonPath = path.join(outputPath, 'product.json'); +@@ -113,3 +108,2 @@ function buildWin32Setup(arch: string, target: string): task.CallbackTask { + ProductJsonPath: productJsonPath, +- VersionedResourcesFolder: versionedResourcesFolder, + Quality: quality +diff --git a/build/win32/code-insider.iss b/build/win32/code-insider.iss +index 2cbf252..b8445fb 100644 +--- a/build/win32/code-insider.iss ++++ b/build/win32/code-insider.iss +@@ -69,9 +69,9 @@ Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl,{#RepoDir}\build\ + [InstallDelete] +-Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\out"; Check: IsNotBackgroundUpdate +-Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\plugins"; Check: IsNotBackgroundUpdate +-Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\extensions"; Check: IsNotBackgroundUpdate +-Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\node_modules"; Check: IsNotBackgroundUpdate +-Type: filesandordirs; Name: "{app}\{#VersionedResourcesFolder}\resources\app\node_modules.asar.unpacked"; Check: IsNotBackgroundUpdate +-Type: files; Name: "{app}\{#VersionedResourcesFolder}\resources\app\node_modules.asar"; Check: IsNotBackgroundUpdate +-Type: files; Name: "{app}\{#VersionedResourcesFolder}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotBackgroundUpdate ++Type: filesandordirs; Name: "{app}\resources\app\out"; Check: IsNotBackgroundUpdate ++Type: filesandordirs; Name: "{app}\resources\app\plugins"; Check: IsNotBackgroundUpdate ++Type: filesandordirs; Name: "{app}\resources\app\extensions"; Check: IsNotBackgroundUpdate ++Type: filesandordirs; Name: "{app}\resources\app\node_modules"; Check: IsNotBackgroundUpdate ++Type: filesandordirs; Name: "{app}\resources\app\node_modules.asar.unpacked"; Check: IsNotBackgroundUpdate ++Type: files; Name: "{app}\resources\app\node_modules.asar"; Check: IsNotBackgroundUpdate ++Type: files; Name: "{app}\resources\app\Credits_45.0.2454.85.html"; Check: IsNotBackgroundUpdate + +@@ -100,4 +100,4 @@ Source: "{#ExeBasename}.exe"; DestDir: "{code:GetDestDir}"; DestName: "{code:Get + Source: "{#ExeBasename}.VisualElementsManifest.xml"; DestDir: "{code:GetDestDir}"; DestName: "{code:GetVisualElementsManifest}"; Flags: ignoreversion +-Source: "tools\*"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\tools"; Flags: ignoreversion +-Source: "policies\*"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\policies"; Flags: ignoreversion skipifsourcedoesntexist ++Source: "tools\*"; DestDir: "{code:GetDestDir}\tools"; Flags: ignoreversion ++Source: "policies\*"; DestDir: "{code:GetDestDir}\policies"; Flags: ignoreversion skipifsourcedoesntexist + Source: "bin\{#TunnelApplicationName}.exe"; DestDir: "{code:GetDestDir}\bin"; DestName: "{code:GetBinDirTunnelApplicationFilename}"; Flags: ignoreversion skipifsourcedoesntexist +@@ -105,7 +105,7 @@ Source: "bin\{#ApplicationName}.cmd"; DestDir: "{code:GetDestDir}\bin"; DestName + Source: "bin\{#ApplicationName}"; DestDir: "{code:GetDestDir}\bin"; DestName: "{code:GetBinDirApplicationFilename}"; Flags: ignoreversion +-Source: "{#ProductJsonPath}"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\resources\app"; Flags: ignoreversion ++Source: "{#ProductJsonPath}"; DestDir: "{code:GetDestDir}\resources\app"; Flags: ignoreversion + #ifdef AppxPackageName + #if "user" == InstallTarget +-Source: "appx\{#AppxPackage}"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\appx"; BeforeInstall: RemoveAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater +-Source: "appx\{#AppxPackageDll}"; DestDir: "{code:GetDestDir}\{#VersionedResourcesFolder}\appx"; AfterInstall: AddAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater ++Source: "appx\{#AppxPackage}"; DestDir: "{code:GetDestDir}\appx"; BeforeInstall: RemoveAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater ++Source: "appx\{#AppxPackageDll}"; DestDir: "{code:GetDestDir}\appx"; AfterInstall: AddAppxPackage; Flags: ignoreversion; Check: IsWindows11OrLater + #endif +@@ -133,3 +133,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ascx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -141,3 +141,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.asp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -149,3 +149,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.aspx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -157,3 +157,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -165,3 +165,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_ + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_login\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -173,3 +173,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_ + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_logout\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -181,3 +181,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_ + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bash_profile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -189,3 +189,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashr + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bashrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -197,3 +197,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bib\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -205,3 +205,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bower + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\bower.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\bower.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.bowerrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -213,3 +213,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c++\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles +@@ -220,3 +220,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c"; V + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.c\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -228,3 +228,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -236,3 +236,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cfg\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -244,3 +244,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cjs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -252,3 +252,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clj\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -260,3 +260,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -268,3 +268,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cljx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -276,3 +276,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cloju + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.clojure\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -284,3 +284,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cls\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -292,3 +292,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code- + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.code-workspace\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -300,3 +300,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cmake\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -308,3 +308,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffe + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.coffee\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -316,3 +316,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.confi + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.config\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -324,3 +324,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.conta + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.containerfile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles +@@ -331,3 +331,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cpp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -339,3 +339,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -347,3 +347,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtm + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cshtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -355,3 +355,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cspro + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csproj\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -363,3 +363,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\css.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\css.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.css\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -371,3 +371,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csv\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -379,3 +379,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\csharp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.csx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -387,3 +387,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ctp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -395,3 +395,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.cxx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -403,3 +403,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dart\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -411,3 +411,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.diff\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -419,3 +419,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.docke + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dockerfile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -427,3 +427,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dot\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -435,3 +435,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.dtd\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -443,3 +443,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edito + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.editorconfig\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -451,3 +451,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.edn\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -459,3 +459,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.erb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -467,3 +467,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyaml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -475,3 +475,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.eyml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -483,3 +483,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -491,3 +491,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -499,3 +499,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscr + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsscript\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -507,3 +507,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.fsx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -515,3 +515,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemsp + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gemspec\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -524,3 +524,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitat + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitattributes\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -533,3 +533,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitco + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitconfig\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -542,3 +542,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitig + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gitignore\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -550,3 +550,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\go.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\go.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.go\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -558,3 +558,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradl + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.gradle\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -566,3 +566,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groov + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.groovy\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -574,3 +574,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h"; V + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\c.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -582,3 +582,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handl + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.handlebars\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -590,3 +590,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hbs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -598,3 +598,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.h++\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe"" ""%1"""; Tasks: associatewithfiles +@@ -605,3 +605,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hh\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -613,3 +613,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hpp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -621,3 +621,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.htm\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -629,3 +629,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.html\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -637,3 +637,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\cpp.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.hxx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -645,3 +645,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\config.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ini\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -653,3 +653,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ipynb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -661,3 +661,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\jade.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\jade.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jade\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -669,3 +669,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jav\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -677,3 +677,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\java.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.java\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -685,3 +685,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.js\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -693,3 +693,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -701,3 +701,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsr + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jscsrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -709,3 +709,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshin + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshintrc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -717,3 +717,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jshtm\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -725,3 +725,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\json.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\json.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.json\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -733,3 +733,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.jsp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -741,3 +741,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\less.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\less.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.less\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -749,3 +749,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.log\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -757,3 +757,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.lua\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -765,3 +765,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m"; V + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.m\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -773,3 +773,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makef + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.makefile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -781,3 +781,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markd + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.markdown\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -789,3 +789,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.md\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -797,3 +797,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdoc\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -805,3 +805,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdown\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -813,3 +813,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtex + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtext\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -821,3 +821,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdtxt\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -829,3 +829,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mdwn\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -837,3 +837,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mk\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -845,3 +845,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkd\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -853,3 +853,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\markdown.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mkdn\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -861,3 +861,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -869,3 +869,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mli\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -877,3 +877,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\javascript.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.mjs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -886,3 +886,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmig + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore"; ValueType: string; ValueName: "AlwaysShowExt"; ValueData: ""; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.npmignore\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -894,3 +894,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\php.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\php.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.php\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -902,3 +902,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.phtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -910,3 +910,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -918,3 +918,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pl6\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -926,3 +926,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.plist\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -934,3 +934,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -942,3 +942,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pm6\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -950,3 +950,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pod\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -958,3 +958,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pp\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -966,3 +966,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profi + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.profile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -974,3 +974,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.prope + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.properties\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -982,3 +982,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ps1\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -990,3 +990,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psd1\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -998,3 +998,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psgi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1006,3 +1006,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\powershell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.psm1\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1014,3 +1014,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.py\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1022,3 +1022,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\python.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.pyi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1030,3 +1030,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r"; V + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.r\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1038,3 +1038,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\ruby.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1046,3 +1046,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhist + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rhistory\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1054,3 +1054,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprof + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rprofile\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1062,3 +1062,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1070,3 +1070,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rst\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1078,3 +1078,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.rt\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1086,3 +1086,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sass\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1094,3 +1094,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sass.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.scss\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1102,3 +1102,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sh\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1110,3 +1110,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.shtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1118,3 +1118,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\sql.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\sql.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.sql\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1126,3 +1126,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.svg\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1134,3 +1134,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t"; V + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.t\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1142,3 +1142,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tex\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1150,3 +1150,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\typescript.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\typescript.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.ts\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1158,3 +1158,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.toml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1166,3 +1166,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\react.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.tsx\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1174,3 +1174,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.txt\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1182,3 +1182,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vb\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1190,3 +1190,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\vue.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\vue.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.vue\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1198,3 +1198,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxi\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1206,3 +1206,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxl\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1214,3 +1214,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.wxs\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1222,3 +1222,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xaml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1230,3 +1230,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\html.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xhtml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1238,3 +1238,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\xml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.xml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1246,3 +1246,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yaml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1254,3 +1254,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\yaml.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.yml\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1262,3 +1262,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh"; + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh"; ValueType: string; ValueName: "AppUserModelID"; ValueData: "{#AppUserId}"; Flags: uninsdeletekey; Tasks: associatewithfiles +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\shell.ico"; Tasks: associatewithfiles + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe"""; Tasks: associatewithfiles +@@ -1267,3 +1267,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}.zsh\s + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile"; ValueType: string; ValueName: ""; ValueData: "{cm:SourceFile,{#NameLong}}"; Flags: uninsdeletekey +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico" ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}SourceFile\shell\open"; ValueType: string; ValueName: ""; ValueData: """{app}\{#ExeBasename}.exe""" +@@ -1272,3 +1272,3 @@ Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\{#RegValueName}Source + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe"; ValueType: none; ValueName: ""; Flags: uninsdeletekey +-Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#VersionedResourcesFolder}\resources\app\resources\win32\default.ico" ++Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\resources\app\resources\win32\default.ico" + Root: {#SoftwareClassesRootKey}; Subkey: "Software\Classes\Applications\{#ExeBasename}.exe\shell\open"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#ExeBasename}.exe""" +@@ -1557,3 +1557,3 @@ begin + Log('Installing appx ' + AppxPackageFullname + ' ...'); +- ShellExec('', 'powershell.exe', '-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command ' + AddQuotes('Add-AppxPackage -Path ''' + ExpandConstant('{app}\{#VersionedResourcesFolder}\appx\{#AppxPackage}') + ''' -ExternalLocation ''' + ExpandConstant('{app}\{#VersionedResourcesFolder}\appx') + ''''), '', SW_HIDE, ewWaitUntilTerminated, AddAppxPackageResultCode); ++ ShellExec('', 'powershell.exe', '-NoLogo -NoProfile -NonInteractive -WindowStyle Hidden -ExecutionPolicy Bypass -Command ' + AddQuotes('Add-AppxPackage -Path ''' + ExpandConstant('{app}\appx\{#AppxPackage}') + ''' -ExternalLocation ''' + ExpandConstant('{app}\appx') + ''''), '', SW_HIDE, ewWaitUntilTerminated, AddAppxPackageResultCode); + Log('Add-AppxPackage complete.'); +@@ -1614,3 +1614,3 @@ begin + Log('Invoking inno_updater for background update'); +- Exec(ExpandConstant('{app}\{#VersionedResourcesFolder}\tools\inno_updater.exe'), ExpandConstant('"{app}\{#ExeBasename}.exe" ' + BoolToStr(LockFileExists()) + ' "{cm:UpdatingVisualStudioCode}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); ++ Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"{app}\{#ExeBasename}.exe" ' + BoolToStr(LockFileExists()) + ' "{cm:UpdatingVisualStudioCode}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); + DeleteFile(ExpandConstant('{app}\updating_version')); +@@ -1619,3 +1619,3 @@ begin + Log('Invoking inno_updater to remove previous installation folder'); +- Exec(ExpandConstant('{app}\{#VersionedResourcesFolder}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe" "{#VersionedResourcesFolder}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); ++ Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); + Log('inno_updater completed gc successfully'); +@@ -1627,3 +1627,3 @@ begin + Log('Invoking inno_updater to remove previous installation folder'); +- Exec(ExpandConstant('{app}\{#VersionedResourcesFolder}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe" "{#VersionedResourcesFolder}"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); ++ Exec(ExpandConstant('{app}\tools\inno_updater.exe'), ExpandConstant('"--gc" "{app}\{#ExeBasename}.exe"'), '', SW_SHOW, ewWaitUntilTerminated, UpdateResultCode); + Log('inno_updater completed gc successfully'); +diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts +index ae4fd9c..eb77fcf 100644 +--- a/src/vs/platform/update/electron-main/updateService.win32.ts ++++ b/src/vs/platform/update/electron-main/updateService.win32.ts +@@ -94,10 +94,2 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + protected override async initialize(): Promise { +- if (this.environmentMainService.isBuilt) { +- const cachePath = await this.cachePath; +- app.setPath('appUpdate', cachePath); +- try { +- await unlink(path.join(cachePath, 'session-ending.flag')); +- } catch { } +- } +- + if (this.productService.target === 'user' && await this.nativeHostMainService.isAdmin(undefined)) { +@@ -140,6 +132,5 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun + if (fastUpdatesEnabled && this.productService.target === 'user' && this.productService.commit) { +- const versionedResourcesFolder = this.productService.commit.substring(0, 10); +- const innoUpdater = path.join(exeDir, versionedResourcesFolder, 'tools', 'inno_updater.exe'); ++ const innoUpdater = path.join(exeDir, 'tools', 'inno_updater.exe'); + await new Promise(resolve => { +- const child = spawn(innoUpdater, ['--gc', exePath, versionedResourcesFolder], { ++ const child = spawn(innoUpdater, ['--gc', exePath], { + stdio: ['ignore', 'ignore', 'ignore'], diff --git a/prepare_assets.sh b/prepare_assets.sh index 34a5c8aaf12..269cefac265 100755 --- a/prepare_assets.sh +++ b/prepare_assets.sh @@ -3,7 +3,7 @@ set -e -APP_NAME_LC="$(echo "${APP_NAME}" | awk '{print tolower($0)}')" +APP_NAME_LC="$( echo "${APP_NAME}" | awk '{print tolower($0)}' )" mkdir -p assets @@ -17,11 +17,11 @@ if [[ "${OS_NAME}" == "osx" ]]; then KEYCHAIN="${RUNNER_TEMP}/buildagent.keychain" AGENT_TEMPDIRECTORY="${RUNNER_TEMP}" # shellcheck disable=SC2006 - KEYCHAINS=$(security list-keychains | xargs) + KEYCHAINS=`security list-keychains | xargs` rm -f "${KEYCHAIN}" - echo "${CERTIFICATE_OSX_P12_DATA}" | base64 --decode >"${CERTIFICATE_P12}" + echo "${CERTIFICATE_OSX_P12_DATA}" | base64 --decode > "${CERTIFICATE_P12}" echo "+ create temporary keychain" security create-keychain -p pwd "${KEYCHAIN}" @@ -33,15 +33,15 @@ if [[ "${OS_NAME}" == "osx" ]]; then echo "+ import certificate to keychain" security import "${CERTIFICATE_P12}" -k "${KEYCHAIN}" -P "${CERTIFICATE_OSX_P12_PASSWORD}" -T /usr/bin/codesign - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd "${KEYCHAIN}" >/dev/null + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd "${KEYCHAIN}" > /dev/null # security find-identity "${KEYCHAIN}" - CODESIGN_IDENTITY="$(security find-identity -v -p codesigning "${KEYCHAIN}" | grep -oEi "([0-9A-F]{40})" | head -n 1)" + CODESIGN_IDENTITY="$( security find-identity -v -p codesigning "${KEYCHAIN}" | grep -oEi "([0-9A-F]{40})" | head -n 1 )" echo "+ signing" export CODESIGN_IDENTITY AGENT_TEMPDIRECTORY - DEBUG="electron-osx-sign*" node vscode/build/darwin/sign.js "$(pwd)" + DEBUG="electron-osx-sign*" node vscode/build/darwin/sign.ts "$( pwd )" # codesign --display --entitlements :- "" echo "+ notarize" @@ -73,29 +73,8 @@ if [[ "${OS_NAME}" == "osx" ]]; then if [[ -n "${CERTIFICATE_OSX_P12_DATA}" && "${SHOULD_BUILD_DMG}" != "no" ]]; then echo "Building and moving DMG" - - # Use architecture-specific volume names to prevent conflicts between parallel builds - VOLUME_NAME="${APP_NAME}-${VSCODE_ARCH}" - - # Clean up any existing mounted volumes before DMG creation - if [[ -d "/Volumes/${VOLUME_NAME}" ]]; then - echo "Unmounting existing ${VOLUME_NAME} volume" - hdiutil detach "/Volumes/${VOLUME_NAME}" || true - fi - if [[ -d "/Volumes/Codex" ]]; then - echo "Unmounting existing Codex volume" - hdiutil detach "/Volumes/Codex" || true - fi - if [[ -d "/Volumes/${APP_NAME}" ]]; then - echo "Unmounting existing ${APP_NAME} volume" - hdiutil detach "/Volumes/${APP_NAME}" || true - fi - pushd "VSCode-darwin-${VSCODE_ARCH}" - - # Use create-dmg with explicit volume name to avoid conflicts - npx create-dmg --volume-name="${VOLUME_NAME}" ./*.app . - + npx create-dmg ./*.app . mv ./*.dmg "../assets/${APP_NAME}.${VSCODE_ARCH}.${RELEASE_VERSION}.dmg" popd fi @@ -114,10 +93,7 @@ if [[ "${OS_NAME}" == "osx" ]]; then VSCODE_PLATFORM="darwin" elif [[ "${OS_NAME}" == "windows" ]]; then - cd vscode || { - echo "'vscode' dir not found" - exit 1 - } + cd vscode || { echo "'vscode' dir not found"; exit 1; } npm run gulp "vscode-win32-${VSCODE_ARCH}-inno-updater" @@ -125,6 +101,8 @@ elif [[ "${OS_NAME}" == "windows" ]]; 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 + # . ../build/windows/appx/build.sh + if [[ "${SHOULD_BUILD_EXE_SYS}" != "no" ]]; then npm run gulp "vscode-win32-${VSCODE_ARCH}-system-setup" fi @@ -169,10 +147,7 @@ elif [[ "${OS_NAME}" == "windows" ]]; then VSCODE_PLATFORM="win32" else - cd vscode || { - echo "'vscode' dir not found" - exit 1 - } + cd vscode || { echo "'vscode' dir not found"; exit 1; } if [[ "${SHOULD_BUILD_APPIMAGE}" != "no" && "${VSCODE_ARCH}" != "x64" ]]; then SHOULD_BUILD_APPIMAGE="no" diff --git a/prepare_src.sh b/prepare_src.sh index 22833802598..0289045f087 100755 --- a/prepare_src.sh +++ b/prepare_src.sh @@ -18,6 +18,13 @@ mkdir -p assets git archive --format tar.gz --output="./assets/${APP_NAME}-${RELEASE_VERSION}-src.tar.gz" HEAD git archive --format zip --output="./assets/${APP_NAME}-${RELEASE_VERSION}-src.zip" HEAD +if [[ "${VSCODE_QUALITY}" == "insider" ]]; then + COMMIT_ID=$( git rev-parse HEAD ) + + jsonTmp=$( jq -n --arg 'tag' "${RELEASE_VERSION}" --arg 'id' "${BUILD_SOURCEVERSION}" --arg 'commit' "${COMMIT_ID}" '{ "tag": $tag, "id": $id, "commit": $commit }' ) + echo "${jsonTmp}" > "./assets/buildinfo.json" && unset jsonTmp +fi + cd assets for FILE in *; do diff --git a/prepare_vscode.sh b/prepare_vscode.sh index 38c04d54a6e..e5aeb732c66 100755 --- a/prepare_vscode.sh +++ b/prepare_vscode.sh @@ -3,9 +3,6 @@ set -e -# include common functions -. ./utils.sh - if [[ "${VSCODE_QUALITY}" == "insider" ]]; then cp -rp src/insider/* vscode/ else @@ -14,114 +11,33 @@ fi cp -f LICENSE vscode/LICENSE.txt -cd vscode || { - echo "'vscode' dir not found" - exit 1 -} - -../update_settings.sh +cd vscode || { echo "'vscode' dir not found"; exit 1; } -# apply patches { set +x; } 2>/dev/null -echo "APP_NAME=\"${APP_NAME}\"" -echo "APP_NAME_LC=\"${APP_NAME_LC}\"" -echo "BINARY_NAME=\"${BINARY_NAME}\"" -echo "GH_REPO_PATH=\"${GH_REPO_PATH}\"" -echo "ORG_NAME=\"${ORG_NAME}\"" - -for file in ../patches/*.patch; do - if [[ -f "${file}" ]]; then - apply_patch "${file}" - fi -done - -if [[ "${VSCODE_QUALITY}" == "insider" ]]; then - for file in ../patches/insider/*.patch; do - if [[ -f "${file}" ]]; then - apply_patch "${file}" - fi - done -fi - -if [[ -d "../patches/${OS_NAME}/" ]]; then - for file in "../patches/${OS_NAME}/"*.patch; do - if [[ -f "${file}" ]]; then - apply_patch "${file}" - fi - done -fi - -for file in ../patches/user/*.patch; do - if [[ -f "${file}" ]]; then - apply_patch "${file}" - fi -done - -set -x - -export ELECTRON_SKIP_BINARY_DOWNLOAD=1 -export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 - -if [[ "${OS_NAME}" == "linux" ]]; then - export VSCODE_SKIP_NODE_VERSION_CHECK=1 - - if [[ "${npm_config_arch}" == "arm" ]]; then - export npm_config_arm_version=7 - fi -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 - 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 - fi - echo "Npm install failed $i, trying again..." - - sleep $((15 * (i + 1))) -done - -mv .npmrc.bak .npmrc +# {{{ product.json +cp product.json{,.bak} setpath() { local jsonTmp { set +x; } 2>/dev/null - jsonTmp=$(jq --arg 'path' "${2}" --arg 'value' "${3}" 'setpath([$path]; $value)' "${1}.json") - echo "${jsonTmp}" >"${1}.json" + jsonTmp=$( jq --arg 'value' "${3}" "setpath(path(.${2}); \$value)" "${1}.json" ) + echo "${jsonTmp}" > "${1}.json" set -x } setpath_json() { local jsonTmp { set +x; } 2>/dev/null - jsonTmp=$(jq --arg 'path' "${2}" --argjson 'value' "${3}" 'setpath([$path]; $value)' "${1}.json") - echo "${jsonTmp}" >"${1}.json" + jsonTmp=$( jq --argjson 'value' "${3}" "setpath(path(.${2}); \$value)" "${1}.json" ) + echo "${jsonTmp}" > "${1}.json" set -x } -# product.json -cp product.json{,.bak} - setpath "product" "checksumFailMoreInfoUrl" "https://go.microsoft.com/fwlink/?LinkId=828886" setpath "product" "documentationUrl" "https://go.microsoft.com/fwlink/?LinkID=533484#vscode" -setpath_json "product" "extensionsGallery" '{"serviceUrl": "https://open-vsx.org/vscode/gallery", "itemUrl": "https://open-vsx.org/vscode/item", "extensionUrlTemplate": "https://open-vsx.org/vscode/gallery/{publisher}/{name}/latest", "controlUrl": "https://raw.githubusercontent.com/EclipseFdn/publish-extensions/refs/heads/master/extension-control/extensions.json"}' +setpath_json "product" "extensionsGallery" '{"serviceUrl": "https://open-vsx.org/vscode/gallery", "itemUrl": "https://open-vsx.org/vscode/item", "latestUrlTemplate": "https://open-vsx.org/vscode/gallery/{publisher}/{name}/latest", "controlUrl": "https://raw.githubusercontent.com/EclipseFdn/publish-extensions/refs/heads/master/extension-control/extensions.json"}' + setpath "product" "introductoryVideosUrl" "https://go.microsoft.com/fwlink/?linkid=832146" setpath "product" "keyboardShortcutsUrlLinux" "https://go.microsoft.com/fwlink/?linkid=832144" setpath "product" "keyboardShortcutsUrlMac" "https://go.microsoft.com/fwlink/?linkid=832143" @@ -145,11 +61,6 @@ if [[ "${DISABLE_UPDATE}" != "yes" ]]; then fi if [[ "${VSCODE_QUALITY}" == "insider" ]]; then - setpath "product" "nameShort" "Codex - Insiders" - setpath "product" "nameLong" "Codex - Insiders" - setpath "product" "applicationName" "codex-insiders" - setpath "product" "dataFolderName" ".codex-insiders" - setpath "product" "linuxIconName" "codex-insiders" setpath "product" "nameShort" "Codex - Insiders" setpath "product" "nameLong" "Codex - Insiders" setpath "product" "applicationName" "codex-insiders" @@ -166,16 +77,6 @@ if [[ "${VSCODE_QUALITY}" == "insider" ]]; then setpath "product" "win32NameVersion" "Codex Insiders" setpath "product" "win32RegValueName" "CodexInsiders" setpath "product" "win32ShellNameShort" "Codex Insiders" - setpath "product" "urlProtocol" "codex-insiders" - setpath "product" "serverApplicationName" "codex-server-insiders" - setpath "product" "serverDataFolderName" ".codex-server-insiders" - setpath "product" "darwinBundleIdentifier" "com.codex.CodexInsiders" - setpath "product" "win32AppUserModelId" "Codex.CodexInsiders" - setpath "product" "win32DirName" "Codex Insiders" - setpath "product" "win32MutexName" "codexinsiders" - setpath "product" "win32NameVersion" "Codex Insiders" - setpath "product" "win32RegValueName" "CodexInsiders" - setpath "product" "win32ShellNameShort" "Codex Insiders" setpath "product" "win32AppId" "{{EF35BB36-FA7E-4BB9-B7DA-D1E09F2DA9C9}" setpath "product" "win32x64AppId" "{{B2E0DDB2-120E-4D34-9F7E-8C688FF839A2}" setpath "product" "win32arm64AppId" "{{44721278-64C6-4513-BC45-D48E07830599}" @@ -185,9 +86,8 @@ if [[ "${VSCODE_QUALITY}" == "insider" ]]; then setpath "product" "tunnelApplicationName" "codex-tunnel-insiders" setpath "product" "win32TunnelServiceMutex" "codexinsiders-tunnelservice" setpath "product" "win32TunnelMutex" "codexinsiders-tunnel" - setpath "product" "tunnelApplicationName" "codex-tunnel-insiders" - setpath "product" "win32TunnelServiceMutex" "codexinsiders-tunnelservice" - setpath "product" "win32TunnelMutex" "codexinsiders-tunnel" + setpath "product" "win32ContextMenu.x64.clsid" "90AAD229-85FD-43A3-B82D-8598A88829CF" + setpath "product" "win32ContextMenu.arm64.clsid" "7544C31C-BDBF-4DDF-B15E-F73A46D6723D" else setpath "product" "nameShort" "Codex" setpath "product" "nameLong" "Codex" @@ -204,16 +104,6 @@ else setpath "product" "win32NameVersion" "Codex" setpath "product" "win32RegValueName" "Codex" setpath "product" "win32ShellNameShort" "Codex" - setpath "product" "urlProtocol" "codex" - setpath "product" "serverApplicationName" "codex-server" - setpath "product" "serverDataFolderName" ".codex-server" - setpath "product" "darwinBundleIdentifier" "com.codex" - setpath "product" "win32AppUserModelId" "Codex.Codex" - setpath "product" "win32DirName" "Codex" - setpath "product" "win32MutexName" "codex" - setpath "product" "win32NameVersion" "Codex" - setpath "product" "win32RegValueName" "Codex" - setpath "product" "win32ShellNameShort" "Codex" setpath "product" "win32AppId" "{{763CBF88-25C6-4B10-952F-326AE657F16B}" setpath "product" "win32x64AppId" "{{88DA3577-054F-4CA1-8122-7D820494CFFB}" setpath "product" "win32arm64AppId" "{{67DEE444-3D04-4258-B92A-BC1F0FF2CAE4}" @@ -223,15 +113,110 @@ else setpath "product" "tunnelApplicationName" "codex-tunnel" setpath "product" "win32TunnelServiceMutex" "codex-tunnelservice" setpath "product" "win32TunnelMutex" "codex-tunnel" - setpath "product" "tunnelApplicationName" "codex-tunnel" - setpath "product" "win32TunnelServiceMutex" "codex-tunnelservice" - setpath "product" "win32TunnelMutex" "codex-tunnel" + setpath "product" "win32ContextMenu.x64.clsid" "D910D5E6-B277-4F4A-BDC5-759A34EEE25D" + setpath "product" "win32ContextMenu.arm64.clsid" "4852FC55-4A84-4EA1-9C86-D53BE3DF83C0" fi -jsonTmp=$(jq -s '.[0] * .[1]' product.json ../product.json) -echo "${jsonTmp}" >product.json && unset jsonTmp +setpath_json "product" "tunnelApplicationConfig" '{}' + +jsonTmp=$( jq -s '.[0] * .[1]' product.json ../product.json ) +echo "${jsonTmp}" > product.json && unset jsonTmp cat product.json +# }}} + +# include common functions +. ../utils.sh + +# {{{ apply patches + +echo "APP_NAME=\"${APP_NAME}\"" +echo "APP_NAME_LC=\"${APP_NAME_LC}\"" +echo "ASSETS_REPOSITORY=\"${ASSETS_REPOSITORY}\"" +echo "BINARY_NAME=\"${BINARY_NAME}\"" +echo "GH_REPO_PATH=\"${GH_REPO_PATH}\"" +echo "GLOBAL_DIRNAME=\"${GLOBAL_DIRNAME}\"" +echo "ORG_NAME=\"${ORG_NAME}\"" +echo "TUNNEL_APP_NAME=\"${TUNNEL_APP_NAME}\"" + +if [[ "${DISABLE_UPDATE}" == "yes" ]]; then + mv ../patches/disable-update.patch.yet ../patches/disable-update.patch +fi + +for file in ../patches/*.patch; do + if [[ -f "${file}" ]]; then + apply_patch "${file}" + fi +done + +if [[ "${VSCODE_QUALITY}" == "insider" ]]; then + for file in ../patches/insider/*.patch; do + if [[ -f "${file}" ]]; then + apply_patch "${file}" + fi + done +fi + +if [[ -d "../patches/${OS_NAME}/" ]]; then + for file in "../patches/${OS_NAME}/"*.patch; do + if [[ -f "${file}" ]]; then + apply_patch "${file}" + fi + done +fi + +for file in ../patches/user/*.patch; do + if [[ -f "${file}" ]]; then + apply_patch "${file}" + fi +done +# }}} + +set -x + +# {{{ install dependencies +export ELECTRON_SKIP_BINARY_DOWNLOAD=1 +export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 + +if [[ "${OS_NAME}" == "linux" ]]; then + export VSCODE_SKIP_NODE_VERSION_CHECK=1 + + if [[ "${npm_config_arch}" == "arm" ]]; then + export npm_config_arm_version=7 + fi +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 + +node build/npm/preinstall.ts + +mv .npmrc .npmrc.bak +cp ../npmrc .npmrc + +for i in {1..5}; do # try 5 times + if [[ "${CI_BUILD}" != "no" && "${OS_NAME}" == "osx" ]]; then + CXX=clang++ npm ci && break + else + npm ci && break + fi + + if [[ $i == 5 ]]; then + echo "Npm install failed too many times" >&2 + exit 1 + fi + echo "Npm install failed $i, trying again..." + + sleep $(( 15 * (i + 1))) +done + +mv .npmrc.bak .npmrc +# }}} # package.json cp package.json{,.bak} @@ -245,41 +230,28 @@ cp resources/server/manifest.json{,.bak} if [[ "${VSCODE_QUALITY}" == "insider" ]]; then setpath "resources/server/manifest" "name" "Codex - Insiders" setpath "resources/server/manifest" "short_name" "Codex - Insiders" - setpath "resources/server/manifest" "name" "Codex - Insiders" - setpath "resources/server/manifest" "short_name" "Codex - Insiders" else setpath "resources/server/manifest" "name" "Codex" setpath "resources/server/manifest" "short_name" "Codex" - setpath "resources/server/manifest" "name" "Codex" - setpath "resources/server/manifest" "short_name" "Codex" fi # announcements -replace "s|\\[\\/\\* BUILTIN_ANNOUNCEMENTS \\*\\/\\]|$(tr -d '\n' <../announcements-builtin.json)|" src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts +replace "s|\\[\\/\\* BUILTIN_ANNOUNCEMENTS \\*\\/\\]|$( tr -d '\n' < ../announcements-builtin.json )|" src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts ../undo_telemetry.sh -replace 's|Microsoft Corporation|Codex|' build/lib/electron.js -replace 's|Microsoft Corporation|Codex|' build/lib/electron.ts -replace 's|([0-9]) Microsoft|\1 Codex|' build/lib/electron.js -replace 's|([0-9]) Microsoft|\1 Codex|' build/lib/electron.ts -replace 's|Microsoft Corporation|Codex|' build/lib/electron.js replace 's|Microsoft Corporation|Codex|' build/lib/electron.ts -replace 's|([0-9]) Microsoft|\1 Codex|' build/lib/electron.js replace 's|([0-9]) Microsoft|\1 Codex|' build/lib/electron.ts if [[ "${OS_NAME}" == "linux" ]]; then # microsoft adds their apt repo to sources # unless the app name is code-oss # as we are renaming the application to codex - # as we are renaming the application to codex # we need to edit a line in the post install template if [[ "${VSCODE_QUALITY}" == "insider" ]]; then sed -i "s/code-oss/codex-insiders/" resources/linux/debian/postinst.template - sed -i "s/code-oss/codex-insiders/" resources/linux/debian/postinst.template else sed -i "s/code-oss/codex/" resources/linux/debian/postinst.template - sed -i "s/code-oss/codex/" resources/linux/debian/postinst.template fi # fix the packages metadata @@ -288,20 +260,12 @@ if [[ "${OS_NAME}" == "linux" ]]; then sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/genesis-ai-dev/codex#download-install|' resources/linux/code.appdata.xml sed -i 's|https://code.visualstudio.com/home/home-screenshot-linux-lg.png|https://codex.com/img/codex.png|' resources/linux/code.appdata.xml sed -i 's|https://code.visualstudio.com|https://codex.com|' resources/linux/code.appdata.xml - sed -i 's|Visual Studio Code|Codex|g' resources/linux/code.appdata.xml - sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/BiblioNexus-Foundation/codex#download-install|' resources/linux/code.appdata.xml - sed -i 's|https://code.visualstudio.com/home/home-screenshot-linux-lg.png|https://codex.com/img/codex.png|' resources/linux/code.appdata.xml - sed -i 's|https://code.visualstudio.com|https://codex.com|' resources/linux/code.appdata.xml # control.template - sed -i 's|Microsoft Corporation |Codex Team https://github.com/genesis-ai-dev/codex/graphs/contributors|' resources/linux/debian/control.template + sed -i 's|Microsoft Corporation |Codex Team https://github.com/genesis-ai-dev/codex/graphs/contributors|' resources/linux/debian/control.template sed -i 's|Visual Studio Code|Codex|g' resources/linux/debian/control.template sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/genesis-ai-dev/codex#download-install|' resources/linux/debian/control.template sed -i 's|https://code.visualstudio.com|https://codex.com|' resources/linux/debian/control.template - sed -i 's|Microsoft Corporation |Codex Team https://github.com/BiblioNexus-Foundation/codex/graphs/contributors|' resources/linux/debian/control.template - sed -i 's|Visual Studio Code|Codex|g' resources/linux/debian/control.template - sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/BiblioNexus-Foundation/codex#download-install|' resources/linux/debian/control.template - sed -i 's|https://code.visualstudio.com|https://codex.com|' resources/linux/debian/control.template # code.spec.template sed -i 's|Microsoft Corporation|Codex Team|' resources/linux/rpm/code.spec.template @@ -309,20 +273,19 @@ if [[ "${OS_NAME}" == "linux" ]]; then sed -i 's|Visual Studio Code|Codex|' resources/linux/rpm/code.spec.template sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/genesis-ai-dev/codex#download-install|' resources/linux/rpm/code.spec.template sed -i 's|https://code.visualstudio.com|https://codex.com|' resources/linux/rpm/code.spec.template - sed -i 's|Microsoft Corporation|Codex Team|' resources/linux/rpm/code.spec.template - sed -i 's|Visual Studio Code Team |Codex Team https://github.com/BiblioNexus-Foundation/codex/graphs/contributors|' resources/linux/rpm/code.spec.template - sed -i 's|Visual Studio Code|Codex|' resources/linux/rpm/code.spec.template - sed -i 's|https://code.visualstudio.com/docs/setup/linux|https://github.com/BiblioNexus-Foundation/codex#download-install|' resources/linux/rpm/code.spec.template - sed -i 's|https://code.visualstudio.com|https://codex.com|' resources/linux/rpm/code.spec.template # snapcraft.yaml - sed -i 's|Visual Studio Code|Codex|' resources/linux/rpm/code.spec.template + sed -i 's|Visual Studio Code|Codex|' resources/linux/rpm/code.spec.template elif [[ "${OS_NAME}" == "windows" ]]; then + if [[ "${VSCODE_QUALITY}" == "insider" ]]; then + ISS_PATH="build/win32/code-insider.iss" + else + ISS_PATH="build/win32/code.iss" + fi + # code.iss - sed -i 's|https://code.visualstudio.com|https://codex.com|' build/win32/code.iss - sed -i 's|Microsoft Corporation|Codex|' build/win32/code.iss - sed -i 's|https://code.visualstudio.com|https://codex.com|' build/win32/code.iss - sed -i 's|Microsoft Corporation|Codex|' build/win32/code.iss + sed -i 's|https://code.visualstudio.com|https://codex.com|' "${ISS_PATH}" + sed -i 's|Microsoft Corporation|Codex|' "${ISS_PATH}" fi cd .. diff --git a/product.json b/product.json index fdc150e4520..2f75e161d31 100644 --- a/product.json +++ b/product.json @@ -46,9 +46,31 @@ "extensionAllowedBadgeProvidersRegex": [ "^https:\\/\\/github\\.com\\/[^/]+\\/[^/]+\\/(actions\\/)?workflows\\/.*badge\\.svg" ], + "extensionsEnabledWithApiProposalVersion": [ + "GitHub.copilot-chat", + "ms-vscode.vscode-commander", + "ms-vscode.vscode-copilot-vision", + "GitHub.vscode-pull-request-github" + ], "extensionEnabledApiProposals": { + "ms-azuretools.vscode-containers": [ + "authenticationChallenges" + ], + "ms-azuretools.vscode-azureresourcegroups": [ + "authenticationChallenges" + ], + "ms-azuretools.vscode-azure-github-copilot": [ + "authenticationChallenges" + ], "ms-azuretools.vscode-dev-azurecloudshell": [ - "contribEditSessions" + "contribEditSessions", + "authenticationChallenges" + ], + "ms-toolsai.vscode-ai": [ + "authenticationChallenges" + ], + "TeamsDevApp.vscode-ai-foundry": [ + "authenticationChallenges" ], "ms-vscode.vscode-selfhost-test-provider": [ "testObserver", @@ -65,7 +87,6 @@ "documentFiltersExclusive", "fileSearchProvider", "findTextInFiles", - "notebookCellExecutionState", "notebookLiveShare", "terminalDimensions", "terminalDataWriteEvent", @@ -78,7 +99,8 @@ "tunnels" ], "ms-toolsai.vscode-ai-remote": [ - "resolvers" + "resolvers", + "authenticationChallenges" ], "ms-python.python": [ "codeActionAI", @@ -94,7 +116,8 @@ "terminalShellEnv" ], "ms-python.vscode-python-envs": [ - "terminalShellEnv" + "terminalShellEnv", + "terminalDataWriteEvent" ], "ms-dotnettools.dotnet-interactive-vscode": [ "notebookMessaging" @@ -184,11 +207,16 @@ ], "GitHub.vscode-pull-request-github": [ "activeComment", + "chatContextProvider", + "chatParticipantAdditions", + "chatParticipantPrivate", + "chatSessionsProvider", "codiconDecoration", "codeActionRanges", "commentingRangeHint", "commentReactor", "commentReveal", + "commentsDraftState", "commentThreadApplicability", "contribAccessibilityHelpContent", "contribCommentEditorActionsMenu", @@ -199,17 +227,24 @@ "contribMultiDiffEditorMenus", "contribShareMenu", "diffCommand", + "languageModelToolResultAudience", + "markdownAlertSyntax", "quickDiffProvider", + "remoteCodingAgents", "shareProvider", + "tabInputMultiDiff", "tabInputTextMerge", "tokenInformation", + "treeItemMarkdownLabel", "treeViewMarkdownMessage" ], "GitHub.copilot": [ - "inlineCompletionsAdditions" + "inlineCompletionsAdditions", + "devDeviceId" ], "GitHub.copilot-nightly": [ - "inlineCompletionsAdditions" + "inlineCompletionsAdditions", + "devDeviceId" ], "GitHub.copilot-chat": [ "interactive", @@ -246,14 +281,22 @@ "documentFiltersExclusive", "chatParticipantPrivate", "contribDebugCreateConfiguration", - "inlineEdit", "inlineCompletionsAdditions", "chatReferenceBinaryData", "languageModelSystem", "languageModelCapabilities", - "languageModelDataPart", + "languageModelThinkingPart", "chatStatusItem", - "taskProblemMatcherStatus" + "taskProblemMatcherStatus", + "contribLanguageModelToolSets", + "textDocumentChangeReason", + "resolvers", + "taskExecutionTerminal", + "dataChannels", + "chatSessionsProvider", + "devDeviceId", + "contribEditorContentMenu", + "tokenInformation" ], "GitHub.remotehub": [ "contribRemoteHelp", @@ -270,12 +313,10 @@ "textSearchProvider", "timeline" ], - "ms-python.gather": [ - "notebookCellExecutionState" - ], "ms-python.vscode-pylance": [ - "mcpConfigurationProvider", - "terminalShellEnv" + "terminalShellEnv", + "portsAttributes", + "codeActionAI" ], "ms-python.debugpy": [ "contribViewsWelcome", @@ -350,6 +391,23 @@ "ms-autodev.vscode-autodev": [ "chatParticipantAdditions" ], + "vscjava.vscode-java-upgrade": [ + "chatParticipantAdditions", + "chatParticipantPrivate" + ], + "FoundryLocal.foundry-local-chat": [ + "chatProvider" + ], + "Microsoft.foundry-local-chat": [ + "chatProvider" + ], + "ms-wmcp.windows-mcp-server-extension": [ + "mcpToolDefinitions" + ], + "openai.chatgpt": [ + "languageModelProxy", + "chatSessionsProvider" + ], "jeanp413.open-remote-ssh": [ "resolvers", "tunnels", diff --git a/release_notes.md b/release_notes.md index c3c3945f2b4..c9fdf950b76 100644 --- a/release_notes.md +++ b/release_notes.md @@ -75,8 +75,8 @@ update vscode to [@@MS_TAG@@](@@MS_URL@@) AppImage - @@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.29-x86_64.AppImage
- @@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.29-x86_64.AppImage.zsync + @@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.30-x86_64.AppImage
+ @@APP_NAME_QUALITY@@-@@VERSION@@.glibc2.30-x86_64.AppImage.zsync diff --git a/stores/snapcraft/check_version.sh b/stores/snapcraft/check_version.sh index 325b6a8c718..8f3708b246c 100755 --- a/stores/snapcraft/check_version.sh +++ b/stores/snapcraft/check_version.sh @@ -24,7 +24,7 @@ else if [[ "${VSCODE_QUALITY}" == "stable" ]]; then CHANNEL="${SNAPCRAFT_STORE_CHANNEL:-stable}" - sudo snap install --channel stable --classic snapcraft + sudo snap install --channel "${CHANNEL}" --classic snapcraft echo "Architecture: ${ARCHITECTURE}" diff --git a/stores/snapcraft/insider/snap/hooks/configure b/stores/snapcraft/insider/snap/hooks/configure new file mode 100644 index 00000000000..75f3aad439f --- /dev/null +++ b/stores/snapcraft/insider/snap/hooks/configure @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -eu + +wayland_native="$(snapctl get wayland-native)" +if [[ -z "$wayland_native" ]]; then + snapctl set wayland-native=false +fi diff --git a/stores/snapcraft/insider/snap/local/bin/electron-launch b/stores/snapcraft/insider/snap/local/bin/electron-launch index 873b079161a..ba7f293f666 100755 --- a/stores/snapcraft/insider/snap/local/bin/electron-launch +++ b/stores/snapcraft/insider/snap/local/bin/electron-launch @@ -67,6 +67,10 @@ fi # Set $REALHOME to the users real home directory REALHOME=$(getent passwd $UID | cut -d ':' -f 6) + +# Extra launch arguments +declare -a launch_args + # Set config folder to local path ensure_dir_exists "$SNAP_USER_DATA/.config" chmod 700 "$SNAP_USER_DATA/.config" @@ -116,11 +120,12 @@ prepend_dir XDG_DATA_DIRS "$SNAP/data-dir" prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA" # Set XDG_DATA_HOME to local path -ensure_dir_exists "$SNAP_USER_DATA/.local/share" +export XDG_DATA_HOME="$SNAP_USER_DATA/.local/share" +ensure_dir_exists "$XDG_DATA_HOME" # Workaround for GLib < 2.53.2 not searching for schemas in $XDG_DATA_HOME: # https://bugzilla.gnome.org/show_bug.cgi?id=741335 -prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA/.local/share" +prepend_dir XDG_DATA_DIRS "$XDG_DATA_HOME" # Set cache folder to local path if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$SNAP_USER_COMMON/.cache" ]]; then @@ -138,13 +143,12 @@ append_dir LOCPATH "$SNAP/usr/lib/locale" # If detect wayland server socket, then set environment so applications prefer # wayland, and setup compat symlink (until we use user mounts. Remember, -# XDG_RUNTIME_DIR is /run/user//snap.$SNAP so look in the parent directory -# for the socket. For details: -# https://forum.snapcraft.io/t/wayland-dconf-and-xdg-runtime-dir/186/10 +# XDG_RUNTIME_DIR is /run/user/ for classic snaps. # Applications that don't support wayland natively may define DISABLE_WAYLAND # (to any non-empty value) to skip that logic entirely. wayland_available=false -if [[ -n "$XDG_RUNTIME_DIR" && -z "$DISABLE_WAYLAND" ]]; then +if [[ -n "$XDG_RUNTIME_DIR" && -z "$DISABLE_WAYLAND" ]] && \ + [[ "$(snapctl get wayland-native)" == "true" ]]; then wdisplay="wayland-0" if [ -n "$WAYLAND_DISPLAY" ]; then wdisplay="$WAYLAND_DISPLAY" @@ -166,18 +170,30 @@ fi # Keep an array of data dirs, for looping through them IFS=':' read -r -a data_dirs_array <<< "$XDG_DATA_DIRS" -# Build mime.cache -# needed for gtk and qt icon +# Font Config +export FONTCONFIG_PATH="/etc/fonts" +export FONTCONFIG_FILE="/etc/fonts/fonts.conf" + if [ "$needs_update" = true ]; then - rm -rf "$SNAP_USER_DATA/.local/share/mime" - if [ ! -f "$SNAP/usr/share/mime/mime.cache" ]; then - if command -v update-mime-database >/dev/null; then - cp --preserve=timestamps -dR "$SNAP/usr/share/mime" "$SNAP_USER_DATA/.local/share" - async_exec update-mime-database "$SNAP_USER_DATA/.local/share/mime" - fi + rm -rf "$XDG_DATA_HOME"/fonts + + if [ -d "$SNAP_REAL_HOME/.local/share/fonts" ]; then + ln -s "$SNAP_REAL_HOME/.local/share/fonts" "$XDG_DATA_HOME/fonts" fi fi +# Build mime.cache needed for gtk and qt icon +# @TODO: Re-enable this once we move to core22 +if [ "$needs_update" = true ]; then + rm -rf "$SNAP_USER_DATA/.local/share/mime" + # if [ ! -f "$SNAP/usr/share/mime/mime.cache" ]; then + # if command -v update-mime-database >/dev/null; then + # cp --preserve=timestamps -dR "$SNAP/usr/share/mime" "$SNAP_USER_DATA/.local/share" + # async_exec update-mime-database "$SNAP_USER_DATA/.local/share/mime" + # fi + # fi +fi + # Gio modules and cache (including gsettings module) export GIO_MODULE_DIR="$SNAP_USER_COMMON/.cache/gio-modules" function compile_giomodules { @@ -234,6 +250,8 @@ fi # shellcheck disable=SC2154 if [ "$wayland_available" = true ]; then export GDK_BACKEND="wayland" + launch_args+=(--ozone-platform-hint=auto) + launch_args+=(--enable-features=WaylandWindowDecorations) fi append_dir GTK_PATH "$SNAP/usr/lib/$ARCH/gtk-3.0" @@ -261,4 +279,8 @@ fi wait_for_async_execs -exec "$@" + +binary="$1" +shift + +exec "$binary" "${launch_args[@]}" "$@" diff --git a/stores/snapcraft/stable/snap/hooks/configure b/stores/snapcraft/stable/snap/hooks/configure new file mode 100644 index 00000000000..75f3aad439f --- /dev/null +++ b/stores/snapcraft/stable/snap/hooks/configure @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -eu + +wayland_native="$(snapctl get wayland-native)" +if [[ -z "$wayland_native" ]]; then + snapctl set wayland-native=false +fi diff --git a/stores/snapcraft/stable/snap/local/bin/electron-launch b/stores/snapcraft/stable/snap/local/bin/electron-launch index 873b079161a..ba7f293f666 100755 --- a/stores/snapcraft/stable/snap/local/bin/electron-launch +++ b/stores/snapcraft/stable/snap/local/bin/electron-launch @@ -67,6 +67,10 @@ fi # Set $REALHOME to the users real home directory REALHOME=$(getent passwd $UID | cut -d ':' -f 6) + +# Extra launch arguments +declare -a launch_args + # Set config folder to local path ensure_dir_exists "$SNAP_USER_DATA/.config" chmod 700 "$SNAP_USER_DATA/.config" @@ -116,11 +120,12 @@ prepend_dir XDG_DATA_DIRS "$SNAP/data-dir" prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA" # Set XDG_DATA_HOME to local path -ensure_dir_exists "$SNAP_USER_DATA/.local/share" +export XDG_DATA_HOME="$SNAP_USER_DATA/.local/share" +ensure_dir_exists "$XDG_DATA_HOME" # Workaround for GLib < 2.53.2 not searching for schemas in $XDG_DATA_HOME: # https://bugzilla.gnome.org/show_bug.cgi?id=741335 -prepend_dir XDG_DATA_DIRS "$SNAP_USER_DATA/.local/share" +prepend_dir XDG_DATA_DIRS "$XDG_DATA_HOME" # Set cache folder to local path if [[ -d "$SNAP_USER_DATA/.cache" && ! -e "$SNAP_USER_COMMON/.cache" ]]; then @@ -138,13 +143,12 @@ append_dir LOCPATH "$SNAP/usr/lib/locale" # If detect wayland server socket, then set environment so applications prefer # wayland, and setup compat symlink (until we use user mounts. Remember, -# XDG_RUNTIME_DIR is /run/user//snap.$SNAP so look in the parent directory -# for the socket. For details: -# https://forum.snapcraft.io/t/wayland-dconf-and-xdg-runtime-dir/186/10 +# XDG_RUNTIME_DIR is /run/user/ for classic snaps. # Applications that don't support wayland natively may define DISABLE_WAYLAND # (to any non-empty value) to skip that logic entirely. wayland_available=false -if [[ -n "$XDG_RUNTIME_DIR" && -z "$DISABLE_WAYLAND" ]]; then +if [[ -n "$XDG_RUNTIME_DIR" && -z "$DISABLE_WAYLAND" ]] && \ + [[ "$(snapctl get wayland-native)" == "true" ]]; then wdisplay="wayland-0" if [ -n "$WAYLAND_DISPLAY" ]; then wdisplay="$WAYLAND_DISPLAY" @@ -166,18 +170,30 @@ fi # Keep an array of data dirs, for looping through them IFS=':' read -r -a data_dirs_array <<< "$XDG_DATA_DIRS" -# Build mime.cache -# needed for gtk and qt icon +# Font Config +export FONTCONFIG_PATH="/etc/fonts" +export FONTCONFIG_FILE="/etc/fonts/fonts.conf" + if [ "$needs_update" = true ]; then - rm -rf "$SNAP_USER_DATA/.local/share/mime" - if [ ! -f "$SNAP/usr/share/mime/mime.cache" ]; then - if command -v update-mime-database >/dev/null; then - cp --preserve=timestamps -dR "$SNAP/usr/share/mime" "$SNAP_USER_DATA/.local/share" - async_exec update-mime-database "$SNAP_USER_DATA/.local/share/mime" - fi + rm -rf "$XDG_DATA_HOME"/fonts + + if [ -d "$SNAP_REAL_HOME/.local/share/fonts" ]; then + ln -s "$SNAP_REAL_HOME/.local/share/fonts" "$XDG_DATA_HOME/fonts" fi fi +# Build mime.cache needed for gtk and qt icon +# @TODO: Re-enable this once we move to core22 +if [ "$needs_update" = true ]; then + rm -rf "$SNAP_USER_DATA/.local/share/mime" + # if [ ! -f "$SNAP/usr/share/mime/mime.cache" ]; then + # if command -v update-mime-database >/dev/null; then + # cp --preserve=timestamps -dR "$SNAP/usr/share/mime" "$SNAP_USER_DATA/.local/share" + # async_exec update-mime-database "$SNAP_USER_DATA/.local/share/mime" + # fi + # fi +fi + # Gio modules and cache (including gsettings module) export GIO_MODULE_DIR="$SNAP_USER_COMMON/.cache/gio-modules" function compile_giomodules { @@ -234,6 +250,8 @@ fi # shellcheck disable=SC2154 if [ "$wayland_available" = true ]; then export GDK_BACKEND="wayland" + launch_args+=(--ozone-platform-hint=auto) + launch_args+=(--enable-features=WaylandWindowDecorations) fi append_dir GTK_PATH "$SNAP/usr/lib/$ARCH/gtk-3.0" @@ -261,4 +279,8 @@ fi wait_for_async_execs -exec "$@" + +binary="$1" +shift + +exec "$binary" "${launch_args[@]}" "$@" diff --git a/update_settings.sh b/update_settings.sh deleted file mode 100755 index 551f76d6cdc..00000000000 --- a/update_settings.sh +++ /dev/null @@ -1,63 +0,0 @@ -# shellcheck disable=SC1091,2148 - -DEFAULT_TRUE="'default': true" -DEFAULT_FALSE="'default': false" -DEFAULT_ON="'default': TelemetryConfiguration.ON" -DEFAULT_OFF="'default': TelemetryConfiguration.OFF" -TELEMETRY_CRASH_REPORTER="'telemetry.enableCrashReporter':" -TELEMETRY_CONFIGURATION=" TelemetryConfiguration.ON" -NLS=workbench.settings.enableNaturalLanguageSearch - -# include common functions -. ../utils.sh - -update_setting () { - local FILENAME SETTING LINE_NUM IN_SETTING FOUND DEFAULT_TRUE_TO_FALSE - - FILENAME="${2}" - # check that the file exists - if [[ ! -f "${FILENAME}" ]]; then - echo "File to update setting in does not exist ${FILENAME}" - return - fi - - # go through lines of file, looking for block that contains setting - SETTING="${1}" - LINE_NUM=0 - while read -r line; do - LINE_NUM=$(( LINE_NUM + 1 )) - if [[ "${line}" == *"${SETTING}"* ]]; then - IN_SETTING=1 - fi - if [[ ("${line}" == *"${DEFAULT_TRUE}"* || "${line}" == *"${DEFAULT_ON}"*) && "${IN_SETTING}" == "1" ]]; then - FOUND=1 - break - fi - done < "${FILENAME}" - - if [[ "${FOUND}" != "1" ]]; then - echo "${DEFAULT_TRUE} not found for setting ${SETTING} in file ${FILENAME}" - return - fi - - # construct line-aware replacement string - if [[ "${line}" == *"${DEFAULT_TRUE}"* ]]; then - DEFAULT_TRUE_TO_FALSE="${LINE_NUM}s/${DEFAULT_TRUE}/${DEFAULT_FALSE}/" - else - DEFAULT_TRUE_TO_FALSE="${LINE_NUM}s/${DEFAULT_ON}/${DEFAULT_OFF}/" - fi - - replace "${DEFAULT_TRUE_TO_FALSE}" "${FILENAME}" -} - -update_setting "${TELEMETRY_CRASH_REPORTER}" src/vs/workbench/electron-sandbox/desktop.contribution.ts -update_setting "${TELEMETRY_CONFIGURATION}" src/vs/platform/telemetry/common/telemetryService.ts -update_setting "${NLS}" src/vs/workbench/contrib/preferences/common/preferencesContribution.ts - -# Move activity bar views to panel to hide them from activity bar -# Keep the original working patterns for search, debug, explorer, and SCM. Extensions was brought back for proper updates until the extensions are baked in (unless we will keep it so users can install other extensions). -replace "s/}, ViewContainerLocation\.Sidebar, \\{ doNotRegisterOpenCommand: true \\}\\);/}, ViewContainerLocation.Panel, { doNotRegisterOpenCommand: true });/g" src/vs/workbench/contrib/search/browser/search.contribution.ts -replace "s/}, ViewContainerLocation\.Sidebar\\);/}, ViewContainerLocation.Panel);/g" src/vs/workbench/contrib/debug/browser/debug.contribution.ts -#replace "s/}, ViewContainerLocation\.Sidebar\\);/}, ViewContainerLocation.Panel);/g" src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts -replace "s/}, ViewContainerLocation\.Sidebar, \\{ isDefault: true \\}\\);/}, ViewContainerLocation.Panel, { isDefault: true });/g" src/vs/workbench/contrib/files/browser/explorerViewlet.ts -replace "s/}, ViewContainerLocation\.Sidebar, \\{ doNotRegisterOpenCommand: true \\}\\);/}, ViewContainerLocation.Panel, { doNotRegisterOpenCommand: true });/g" src/vs/workbench/contrib/scm/browser/scm.contribution.ts diff --git a/update_version.sh b/update_version.sh index 29a74ac80f8..4c081eb6dcd 100755 --- a/update_version.sh +++ b/update_version.sh @@ -169,14 +169,18 @@ elif [[ "${OS_NAME}" == "windows" ]]; then if [[ "${VSCODE_ARCH}" == "ia32" || "${VSCODE_ARCH}" == "x64" ]]; then # msi - ASSET_NAME="${APP_NAME}-${VSCODE_ARCH}-${RELEASE_VERSION}.msi" - VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/msi" - updateLatestVersion + if [[ "${SHOULD_BUILD_MSI}" != "no" ]]; then + ASSET_NAME="${APP_NAME}-${VSCODE_ARCH}-${RELEASE_VERSION}.msi" + VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/msi" + updateLatestVersion + fi # updates-disabled msi - ASSET_NAME="${APP_NAME}-${VSCODE_ARCH}-updates-disabled-${RELEASE_VERSION}.msi" - VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/msi-updates-disabled" - updateLatestVersion + if [[ "${SHOULD_BUILD_MSI_NOUP}" != "no" ]]; then + ASSET_NAME="${APP_NAME}-${VSCODE_ARCH}-updates-disabled-${RELEASE_VERSION}.msi" + VERSION_PATH="${VSCODE_QUALITY}/win32/${VSCODE_ARCH}/msi-updates-disabled" + updateLatestVersion + fi fi else # linux # update service links to tar.gz file diff --git a/upload_sourcemaps.sh b/upload_sourcemaps.sh new file mode 100755 index 00000000000..3834cc4ad6b --- /dev/null +++ b/upload_sourcemaps.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +set -e + +npm install -g checksum github-release-cli + +mkdir -p sourcemaps +cd sourcemaps + +SOURCE_DIR="../vscode/.build/extensions" +DESTINATION_DIR="extensions" + +find "${SOURCE_DIR}" -type f -name "*.js.map" | while read -r SOURCE_FILE_PATH; do + RELATIVE_PATH="${SOURCE_FILE_PATH#$SOURCE_DIR/}" + FLATTENED_FILENAME="${RELATIVE_PATH//\//-}" + + cp "${SOURCE_FILE_PATH}" "$DESTINATION_DIR-${FLATTENED_FILENAME}" +done + +SOURCE_DIR="../vscode/out-vscode-min" +DESTINATION_DIR="core" + +find "${SOURCE_DIR}" -type f -name "*.js.map" | while read -r SOURCE_FILE_PATH; do + RELATIVE_PATH="${SOURCE_FILE_PATH#$SOURCE_DIR/}" + FLATTENED_FILENAME="${RELATIVE_PATH//\//-}" + + cp "${SOURCE_FILE_PATH}" "$DESTINATION_DIR-${FLATTENED_FILENAME}" +done + +tar czf "${APP_NAME}-${RELEASE_VERSION}-sourcemaps.tar.gz" *.js.map + +find . -type f -name "*.js.map" | sort | xargs checksum -a sha256 > checksum.txt + +checksum -a sha256 checksum.txt > checksum.txt.sha256 +checksum -a sha256 "${APP_NAME}-${RELEASE_VERSION}-sourcemaps.tar.gz" > "${APP_NAME}-${RELEASE_VERSION}-sourcemaps.tar.gz.sha256" + +REPOSITORY_OWNER="${SOURCEMAPS_REPOSITORY/\/*/}" +REPOSITORY_NAME="${SOURCEMAPS_REPOSITORY/*\//}" +RELEASE_TAG="${VSCODE_QUALITY}-${BUILD_SOURCEVERSION}" + +gh release create "${RELEASE_TAG}" --repo "${SOURCEMAPS_REPOSITORY}" --title "${RELEASE_VERSION}" + +set +e + +for FILE in *; do + if [[ -f "${FILE}" ]]; then + echo "::group::Uploading '${FILE}' at $( date "+%T" )" + gh release upload --repo "${SOURCEMAPS_REPOSITORY}" "${RELEASE_TAG}" "${FILE}" + + EXIT_STATUS=$? + echo "exit: ${EXIT_STATUS}" + + if (( "${EXIT_STATUS}" )); then + for (( i=0; i<10; i++ )); do + github-release delete --owner "${REPOSITORY_OWNER}" --repo "${REPOSITORY_NAME}" --tag "${RELEASE_TAG}" "${FILE}" + + sleep $(( 15 * (i + 1))) + + echo "RE-Uploading '${FILE}' at $( date "+%T" )" + gh release upload --repo "${SOURCEMAPS_REPOSITORY}" "${RELEASE_TAG}" "${FILE}" + + EXIT_STATUS=$? + echo "exit: ${EXIT_STATUS}" + + if ! (( "${EXIT_STATUS}" )); then + break + fi + done + echo "exit: ${EXIT_STATUS}" + + if (( "${EXIT_STATUS}" )); then + echo "'${FILE}' hasn't been uploaded!" + + github-release delete --owner "${REPOSITORY_OWNER}" --repo "${REPOSITORY_NAME}" --tag "${RELEASE_TAG}" "${FILE}" + + exit 1 + fi + fi + + echo "::endgroup::" + fi +done + +cd .. diff --git a/upstream/insider.json b/upstream/insider.json index 7657094785c..94204ea2cc0 100644 --- a/upstream/insider.json +++ b/upstream/insider.json @@ -1,4 +1,4 @@ { - "tag": "1.100.0", - "commit": "19e0f9e681ecb8e5c09d8784acaa601316ca4571" + "tag": "1.108.0", + "commit": "94e8ae2b28cb5cc932b86e1070569c4463565c37" } diff --git a/upstream/stable.json b/upstream/stable.json index 7657094785c..ef2b5fadc11 100644 --- a/upstream/stable.json +++ b/upstream/stable.json @@ -1,4 +1,4 @@ { - "tag": "1.100.0", - "commit": "19e0f9e681ecb8e5c09d8784acaa601316ca4571" + "tag": "1.108.1", + "commit": "585eba7c0c34fd6b30faac7c62a42050bfbc0086" } diff --git a/utils.sh b/utils.sh index 2ea449d7ec2..c286c755190 100755 --- a/utils.sh +++ b/utils.sh @@ -1,12 +1,18 @@ #!/usr/bin/env bash -APP_NAME="${APP_NAME:-Codex}" APP_NAME="${APP_NAME:-Codex}" APP_NAME_LC="$( echo "${APP_NAME}" | awk '{print tolower($0)}' )" ASSETS_REPOSITORY="${ASSETS_REPOSITORY:-BiblioNexus-Foundation/codex}" BINARY_NAME="${BINARY_NAME:-codex}" GH_REPO_PATH="${GH_REPO_PATH:-genesis-ai-dev/codex}" ORG_NAME="${ORG_NAME:-Codex}" +TUNNEL_APP_NAME="${TUNNEL_APP_NAME:-"${BINARY_NAME}-tunnel"}" + +if [[ "${VSCODE_QUALITY}" == "insider" ]]; then + GLOBAL_DIRNAME="${GLOBAL_DIRNAME:-"${APP_NAME_LC}"}-insiders" +else + GLOBAL_DIRNAME="${GLOBAL_DIRNAME:-"${APP_NAME_LC}"}" +fi # All common functions can be added to this file @@ -23,8 +29,10 @@ apply_patch() { replace "s|!!ASSETS_REPOSITORY!!|${ASSETS_REPOSITORY}|g" "$1" replace "s|!!BINARY_NAME!!|${BINARY_NAME}|g" "$1" replace "s|!!GH_REPO_PATH!!|${GH_REPO_PATH}|g" "$1" + replace "s|!!GLOBAL_DIRNAME!!|${GLOBAL_DIRNAME}|g" "$1" replace "s|!!ORG_NAME!!|${ORG_NAME}|g" "$1" replace "s|!!RELEASE_VERSION!!|${RELEASE_VERSION}|g" "$1" + replace "s|!!TUNNEL_APP_NAME!!|${TUNNEL_APP_NAME}|g" "$1" if ! git apply --ignore-whitespace "$1"; then echo failed to apply patch "$1" >&2