pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

vscode: update patches, Makefile



Module Name:	pkgsrc-wip
Committed By:	kikadf <kikadf.01%gmail.com@localhost>
Pushed By:	kikadf
Date:		Sun Oct 25 19:54:18 2026 +0100
Changeset:	f3570bed0b1df12a98f4b64be5cff5cfc3c64c0a

Modified Files:
	vscode/Makefile
	vscode/distinfo
	vscode/patches/patch-build_lib_propertyInitOrderChecker.ts
	vscode/patches/patch-extensions_emmet_src_test_testUtils.ts
	vscode/patches/patch-extensions_vscode-api-tests_src_utils.ts
	vscode/patches/patch-extensions_vscode-test-resolver_src_util_processes.ts
	vscode/patches/patch-node__modules_kerberos_binding.gyp
	vscode/patches/patch-node__modules_kerberos_src_kerberos__common.h
	vscode/patches/patch-node__modules_node-pty_src_unix_pty.cc
	vscode/patches/patch-remote_node__modules_kerberos_binding.gyp
	vscode/patches/patch-remote_node__modules_kerberos_src_kerberos__common.h
	vscode/patches/patch-remote_node__modules_node-pty_src_unix_pty.cc
	vscode/patches/patch-src_bootstrap-node.ts
	vscode/patches/patch-src_vs_base_common_platform.ts
	vscode/patches/patch-src_vs_base_node_ps.ts
	vscode/patches/patch-src_vs_code_electron-main_app.ts
	vscode/patches/patch-src_vs_platform_environment_node_userDataPath.ts
	vscode/patches/patch-src_vs_platform_native_electron-main_nativeHostMainService.ts
	vscode/patches/patch-src_vs_workbench_api_browser_mainThreadTask.ts
	vscode/patches/patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts
	vscode/patches/patch-test_automation_src_electron.ts
	vscode/patches/patch-test_smoke_src_areas_task_task.test.ts
	vscode/patches/patch-test_smoke_src_areas_terminal_terminal.test.ts
Added Files:
	vscode/cargo-depends.mk
	vscode/files/npm-wrapper.sh.in
	vscode/patches/patch-build_.moduleignore
	vscode/patches/patch-build_lib_electron.ts
	vscode/patches/patch-extensions_microsoft-authentication_esbuild.mts
	vscode/patches/patch-node__modules_@vscode_gulp-electron_src_download.js
	vscode/patches/patch-node__modules_@vscode_os-proxy-resolver-pkgsrc-x64_package.json
	vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_index.js
	vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_package.json
	vscode/patches/patch-node__modules_kerberos_src_unix_kerberos__gss.cc
	vscode/patches/patch-node__modules_nan_nan__callbacks__12__inl.h
	vscode/patches/patch-node__modules_nan_nan__callbacks__pre__12__inl.h
	vscode/patches/patch-node__modules_nan_nan__implementation__12__inl.h
	vscode/patches/patch-node__modules_playwright_node__modules_playwright-core_lib_serverRegistry.js
	vscode/patches/patch-node__modules_ssh2_lib_protocol_crypto_src_binding.cc
	vscode/patches/patch-os-proxy-resolver_Cargo.toml
	vscode/patches/patch-os-proxy-resolver_src_platform_linux.rs
	vscode/patches/patch-os-proxy-resolver_src_platform_mod.rs
	vscode/patches/patch-package.json
	vscode/patches/patch-remote_node__modules_kerberos_src_unix_kerberos__gss.cc
	vscode/patches/patch-remote_node__modules_nan_nan__callbacks__12__inl.h
	vscode/patches/patch-remote_node__modules_nan_nan__callbacks__pre__12__inl.h
	vscode/patches/patch-remote_node__modules_nan_nan__implementation__12__inl.h
	vscode/patches/patch-remote_package.json
	vscode/patches/patch-resources_linux_bin_code.sh
	vscode/patches/patch-resources_server_bin_helpers_check-requirements-linux.sh
	vscode/patches/patch-src_mainImpl.ts
	vscode/patches/patch-src_vs_platform_agentHost_test_node_codex_codexProviderConfiguration.test.ts
	vscode/patches/patch-src_vs_platform_extensionManagement_node_extensionSignatureVerificationService.ts
Removed Files:
	vscode/patches/patch-build_lib_layersChecker.ts
	vscode/patches/patch-build_lib_snapshotLoader.ts
	vscode/patches/patch-product.json
	vscode/patches/patch-scripts_code-perf.js
	vscode/patches/patch-src_main.ts

Log Message:
vscode: update patches, Makefile

Not workable yet

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=f3570bed0b1df12a98f4b64be5cff5cfc3c64c0a

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 vscode/Makefile                                    | 165 ++++----
 vscode/cargo-depends.mk                            | 114 ++++++
 vscode/distinfo                                    | 413 +++++++++++++++++++--
 vscode/files/npm-wrapper.sh.in                     |  34 ++
 vscode/patches/patch-build_.moduleignore           |  15 +
 vscode/patches/patch-build_lib_electron.ts         |  19 +
 vscode/patches/patch-build_lib_layersChecker.ts    |  15 -
 .../patch-build_lib_propertyInitOrderChecker.ts    |   6 +-
 vscode/patches/patch-build_lib_snapshotLoader.ts   |  15 -
 .../patch-extensions_emmet_src_test_testUtils.ts   |   2 +-
 ...extensions_microsoft-authentication_esbuild.mts |  15 +
 .../patch-extensions_vscode-api-tests_src_utils.ts |   2 +-
 ...ions_vscode-test-resolver_src_util_processes.ts |   2 +-
 ...__modules_@vscode_gulp-electron_src_download.js |  14 +
 ...scode_os-proxy-resolver-pkgsrc-x64_package.json |  22 ++
 ...ode__modules_@vscode_os-proxy-resolver_index.js |  17 +
 ..._modules_@vscode_os-proxy-resolver_package.json |  18 +
 .../patch-node__modules_kerberos_binding.gyp       |  38 +-
 ...h-node__modules_kerberos_src_kerberos__common.h |   2 +-
 ...ode__modules_kerberos_src_unix_kerberos__gss.cc |  24 ++
 ...tch-node__modules_nan_nan__callbacks__12__inl.h | 336 +++++++++++++++++
 ...ode__modules_nan_nan__callbacks__pre__12__inl.h |  17 +
 ...ode__modules_nan_nan__implementation__12__inl.h |  56 +++
 .../patch-node__modules_node-pty_src_unix_pty.cc   |  50 +--
 ...__modules_playwright-core_lib_serverRegistry.js |  15 +
 ...modules_ssh2_lib_protocol_crypto_src_binding.cc |  62 ++++
 vscode/patches/patch-os-proxy-resolver_Cargo.toml  |  15 +
 .../patch-os-proxy-resolver_src_platform_linux.rs  |  74 ++++
 .../patch-os-proxy-resolver_src_platform_mod.rs    |  15 +
 vscode/patches/patch-package.json                  |  14 +
 vscode/patches/patch-product.json                  |  24 --
 ...patch-remote_node__modules_kerberos_binding.gyp |  38 +-
 ...e_node__modules_kerberos_src_kerberos__common.h |   2 +-
 ...ode__modules_kerberos_src_unix_kerberos__gss.cc |  24 ++
 ...ote_node__modules_nan_nan__callbacks__12__inl.h | 336 +++++++++++++++++
 ...ode__modules_nan_nan__callbacks__pre__12__inl.h |  17 +
 ...ode__modules_nan_nan__implementation__12__inl.h |  56 +++
 ...h-remote_node__modules_node-pty_src_unix_pty.cc |  22 +-
 vscode/patches/patch-remote_package.json           |  14 +
 vscode/patches/patch-resources_linux_bin_code.sh   |  15 +
 ..._server_bin_helpers_check-requirements-linux.sh |  30 ++
 vscode/patches/patch-scripts_code-perf.js          |  15 -
 vscode/patches/patch-src_bootstrap-node.ts         |   4 +-
 vscode/patches/patch-src_main.ts                   |  24 --
 vscode/patches/patch-src_mainImpl.ts               |  33 ++
 .../patches/patch-src_vs_base_common_platform.ts   |  12 +-
 vscode/patches/patch-src_vs_base_node_ps.ts        |  14 +-
 .../patches/patch-src_vs_code_electron-main_app.ts |  10 +-
 ...t_node_codex_codexProviderConfiguration.test.ts |  33 ++
 ...rc_vs_platform_environment_node_userDataPath.ts |  14 +-
 ...t_node_extensionSignatureVerificationService.ts |  47 +++
 ...m_native_electron-main_nativeHostMainService.ts |   9 +-
 ...-src_vs_workbench_api_browser_mainThreadTask.ts |  10 +-
 ..._services_actions_common_menusExtensionPoint.ts |  10 +-
 .../patches/patch-test_automation_src_electron.ts  |  26 +-
 .../patch-test_smoke_src_areas_task_task.test.ts   |   4 +-
 ...-test_smoke_src_areas_terminal_terminal.test.ts |   9 +-
 57 files changed, 2158 insertions(+), 300 deletions(-)

diffs:
diff --git a/vscode/Makefile b/vscode/Makefile
index cf4bdf2ec4..4391c59d87 100644
--- a/vscode/Makefile
+++ b/vscode/Makefile
@@ -11,6 +11,13 @@ MASTER_SITES+=		https://distfiles.borderland.hu/
 DISTFILES+=		${NODE_MODULES}
 DISTFILES+=		${DEFAULT_DISTFILES}
 
+# os-proxy-resolver
+GITHUB_SUBMODULES+=	microsoft os-proxy-resolver v0.4.0 os-proxy-resolver
+CARGO_WRKSRC=		${WRKSRC}/os-proxy-resolver/npm/native
+.include "cargo-depends.mk"
+
+COPILOT_CLI_VERSION=	1.0.73
+
 MAINTAINER=		kikadf%NetBSD.org@localhost
 HOMEPAGE=		https://code.visualstudio.com/
 COMMENT=		The Open Source build of Visual Studio Code (vscode) editor
@@ -19,20 +26,32 @@ LICENSE=		mit
 USE_LANGUAGES=		c c++
 USE_TOOLS+=		zip gmake pkg-config pax bash tar
 
-USE_CXX_FEATURES+=	c++17
+USE_CXX_FEATURES+=	c++20
 USE_ELECTRON=		bundled
 
-DEPENDS+=		ripgrep-[0-9]*:../../textproc/ripgrep
+TOOL_DEPENDS+=		ripgrep-[0-9]*:../../textproc/ripgrep
+TOOL_DEPENDS+=		wabt-[0-9]*:../../wip/wabt
 
 .include "../../wip/electron43/platform.mk"
-.include "../../mk/bsd.prefs.mk"
+.include "../../mk/dlopen.buildlink3.mk"
+BUILDLINK_TRANSFORM+=	opt:-ldl:${BUILDLINK_LDADD.dl:Q}
+
+SUBST_CLASSES+=		vars
+SUBST_STAGE.vars=	pre-configure
+SUBST_MESSAGE.vars=	Fixing variables
+SUBST_FILES.vars+=	node_modules/@vscode/os-proxy-resolver-pkgsrc-x64/package.json
+SUBST_FILES.vars+=	src/vs/platform/native/electron-main/nativeHostMainService.ts
+SUBST_FILES.vars+=	code-oss.sh
+SUBST_VARS.vars+=	PREFIX OPSYS LOWER_OPSYS ELECTRON_ARCH
 
-SUBST_CLASSES+=		path
-SUBST_STAGE.path=	pre-configure
-SUBST_MESSAGE.path=	Fixing pathes
-SUBST_FILES.path+=	src/vs/platform/native/electron-main/nativeHostMainService.ts
-SUBST_FILES.path+=	code-oss.sh
-SUBST_VARS.path+=	PREFIX
+SUBST_CLASSES+=		npm
+SUBST_STAGE.npm=	pre-configure
+SUBST_MESSAGE.npm=	Prepare npm wrapper script
+SUBST_FILES.npm+=	npm-wrapper.sh
+SUBST_SED.npm+=		-e 's,%%COPILOT_CLI_VERSION%%,${COPILOT_CLI_VERSION},g'
+SUBST_SED.npm+=		-e 's,%%WRKSRC%%,${WRKSRC},g'
+SUBST_SED.npm+=		-e 's,%%ELECTRON_ARCH%%,${ELECTRON_ARCH},g'
+SUBST_SED.npm+=		-e 's,%%NPM_REAL%%,${PREFIX}/bin/npm,g'
 
 SUBST_CLASSES+=		res
 SUBST_STAGE.res=	pre-configure
@@ -56,28 +75,26 @@ REPLACE_BASH+=		src/vs/base/node/cpuUsage.sh
 REPLACE_BASH+=		node_modules/jschardet/scripts/show-size-changes.sh
 REPLACE_BASH+=		node_modules/jschardet/scripts/run-workflow.sh
 
-REPLACE_NODEJS=		extensions/node_modules/typescript/bin/tsc
+REPLACE_BNODEJS=	extensions/node_modules/typescript/bin/tsc
 REPLACE_NODEJS+=	extensions/node_modules/typescript/bin/tsserver
-REPLACE_NODEJS+=	node_modules/@parcel/watcher/node_modules/detect-libc/bin/detect-libc.js
 REPLACE_NODEJS+=	node_modules/@vscode/vscode-languagedetection/cli/index.js
 REPLACE_NODEJS+=	node_modules/chrome-remote-interface/bin/client.js
 REPLACE_NODEJS+=	node_modules/is-docker/cli.js
 REPLACE_NODEJS+=	node_modules/mkdirp/bin/cmd.js
 REPLACE_NODEJS+=	node_modules/opentype.js/bin/ot
-REPLACE_NODEJS+=	node_modules/opentype.js/bin/server.js
-REPLACE_NODEJS+=	node_modules/opentype.js/bin/test-render
 REPLACE_NODEJS+=	node_modules/rc/cli.js
-REPLACE_NODEJS+=	node_modules/uuid/dist/bin/uuid
 REPLACE_NODEJS+=	node_modules/semver/bin/semver.js
 
-
 MAKE_ENV+=		ELECTRON_SKIP_BINARY_DOWNLOAD=1
+MAKE_ENV+=		BUILD_SOURCEVERSION=${SOURCE_COMMIT_HASH}
+MAKE_ENV+=		VSCODE_QUALITY=stable
+MAKE_ENV+=		NODE_OPTIONS="--max-old-space-size=8192"
 MAKE_ENV+=		PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
 MAKE_ENV+=		PYTHONDONTWRITEBYTECODE=1
 MAKE_ENV+=		JOBS=${_MAKE_JOBS_N}
 
 CFLAGS+=		-I${PREFIX}/include/node
-CXXFLAGS+=		-std=c++17
+CXXFLAGS+=		-std=c++20
 
 ELECTRON_URL=		https://github.com/electron/electron/releases/download/v${ELECTRON_VER}
 RUN_URL_HASH=		sha256 -s ${ELECTRON_URL} | cut -d' ' -f4
@@ -86,33 +103,38 @@ ELECTRON_ARCH=		${MACHINE_ARCH:S/aarch64/arm64/:S/x86_64/x64/}
 ELECTRON_ZIP=		electron-v${ELECTRON_VER}-linux-${ELECTRON_ARCH}.zip
 RUN_ZIP_HASH=		sha256 -q ${WRKDIR}/.home/.cache/electron/${ELECTRON_URL_HASH}/${ELECTRON_ZIP}
 RUN_NODEJS_VER=		node --version
-NODEJS_VER=		${RUN_NODEJS_VER:sh}
+NODEJS_VER=		${RUN_NODEJS_VER:sh:C/v//}
 COPILOT_DIR=		${WRKSRC}/extensions/copilot/node_modules/@github/copilot-${LOWER_OPSYS}-${ELECTRON_ARCH}
 COPILOT_SDK_DIR=	${WRKSRC}/node_modules/@github/copilot-sdk-linux-${ELECTRON_ARCH}
-.if ${OPSYS} == "Linux"
-OS_PROXY_RESOLV_DIR=	${WRKSRC}/node_modules/@vscode/os-proxy-resolver-${LOWER_OPSYS}-${ELECTRON_ARCH}-gnu
-.else
-OS_PROXY_RESOLV_DIR=	${WRKSRC}/node_modules/@vscode/os-proxy-resolver-${LOWER_OPSYS}-${ELECTRON_ARCH}
-.endif
+OS_PROXY_RESOLV_DIR_L=	node_modules/@vscode/os-proxy-resolver-linux-${ELECTRON_ARCH}-gnu
+OS_PROXY_RESOLV_DIR=	node_modules/@vscode/os-proxy-resolver-pkgsrc-${ELECTRON_ARCH}
+RIPGREP_PATHES=		node_modules/@vscode/ripgrep/bin
+RIPGREP_PATHES+=	node_modules/@vscode/ripgrep-universal/bin/${LOWER_OPSYS}-${ELECTRON_ARCH}
+RIPGREP_PATHES+=	build/node_modules/@vscode/ripgrep-universal/bin/${LOWER_OPSYS}-${ELECTRON_ARCH}
+RIPGREP_PATHES+=	remote/node_modules/@vscode/ripgrep-universal/bin/${LOWER_OPSYS}-${ELECTRON_ARCH}
+RIPGREP_PATHES+=	${OS_PROXY_RESOLV_DIR}/ripgrep/bin/${LOWER_OPSYS}-${ELECTRON_ARCH}
 
 NOT_PAX_MPROTECT_SAFE+=	lib/vscode/code-oss
 
 post-extract:
-	# Install script
+	# Install scripts
 	${CP} ${FILESDIR}/code.sh.in ${WRKSRC}/code-oss.sh
-
-	# Set electron version
-	${SED} -i'' "s|^target=.*|target=\"${ELECTRON_VER}\"|" ${WRKSRC}/.npmrc
-	${SED} -i'' "s|^target=.*|target=\"${NODEJS_VER}\"|" ${WRKSRC}/remote/.npmrc
+	${CP} ${FILESDIR}/npm-wrapper.sh.in ${WRKSRC}/npm-wrapper.sh
+	${CHMOD} +x ${WRKSRC}/npm-wrapper.sh
 
 	# Copy node modules to source tree
 	cd ${WRKDIR}/vscode-node_modules-${PKGVERSION_NOREV} && \
-		${FIND} . -type f -print | pax -rw -pmp ${WRKSRC}
+		${FIND} . \(-type f -o -type l \) -print | pax -rw -pmp ${WRKSRC}
 
 	# Create moduleignore file
 	${CP} ${WRKSRC}/build/.moduleignore.linux \
 		${WRKSRC}/build/.moduleignore.${LOWER_OPSYS}
 
+	# Copy electron.d.ts
+	${MKDIR} ${WRKSRC}/.build/typings && \
+		${CP} ${PREFIX}/lib/${ELECTRON}/gen/electron/tsc/typings/electron.d.ts \
+		${WRKSRC}/.build/typings
+
 	# Extract copilot: doesn't work on BSDs, but need for build
 	${MKDIR} ${COPILOT_DIR} && cd ${WRKSRC} && \
 		${TAR} -xzf copilot-linux-${ELECTRON_ARCH}-*.tgz \
@@ -122,9 +144,12 @@ post-extract:
 		--strip-components 1 -C ${COPILOT_SDK_DIR}
 
 	# Extract os-proxy-resolver
-	${MKDIR} ${OS_PROXY_RESOLV_DIR} && cd ${WRKSRC} && \
+	cd ${WRKSRC} && ${MKDIR} ${OS_PROXY_RESOLV_DIR} && \
 		${TAR} -xzf os-proxy-resolver-linux-${ELECTRON_ARCH}-gnu-*.tgz \
 		--strip-components 1 -C ${OS_PROXY_RESOLV_DIR}
+	cd ${WRKSRC} && ${MKDIR} ${OS_PROXY_RESOLV_DIR_L} && \
+		${TAR} -xzf os-proxy-resolver-linux-${ELECTRON_ARCH}-gnu-*.tgz \
+		--strip-components 1 -C ${OS_PROXY_RESOLV_DIR_L}
 
 do-configure:
 	# vscode wants a zipped electron
@@ -133,50 +158,63 @@ do-configure:
 		zip -q -r ${WRKDIR}/.home/.cache/electron/${ELECTRON_URL_HASH}/${ELECTRON_ZIP} .
 	cd ${WRKDIR}/.home/.cache/electron/${ELECTRON_URL_HASH} && \
 		${ECHO} "${RUN_ZIP_HASH:sh} *${ELECTRON_ZIP}" > ${WRKSRC}/build/checksums/electron.txt
+
+	# Set electron version
+	${SED} -i'' "s|^target=.*|target=\"${ELECTRON_VER}\"|" ${WRKSRC}/.npmrc
+	${SED} -i'' "s|^target=.*|target=\"${NODEJS_VER}\"|" ${WRKSRC}/remote/.npmrc
+
+	# Own npm wrapper for working npm pack without network
+	${CP} ${WRKSRC}/npm-wrapper.sh ${TOOLS_DIR}/bin/npm
+
+	# Copy rg binary to vscode pathes
+.for rgpath in ${RIPGREP_PATHES}
+	cd ${WRKSRC} && ${MKDIR} ${rgpath} && ${CP} ${PREFIX}/bin/rg ${rgpath}
+.endfor
+
+do-build: do-cargo-build
+	# Prepare native node module for os-proxy-resolver
+	${CP} ${WRKSRC}/os-proxy-resolver/npm/native/target/release/libos_proxy_resolver_node.so \
+		${WRKSRC}/${OS_PROXY_RESOLV_DIR}/os_proxy_resolver.node
+
 	# Build node modules
-	for subdir in `${FIND} ${WRKSRC} -type f -name binding.gyp -exec ${DIRNAME} {} ';'`; do \
+	for subdir in `${FIND} ${WRKSRC} -type f -path '*/node_modules/*' -name binding.gyp -exec ${DIRNAME} {} ';'`; do \
 		if [ "`${ECHO} $${subdir} | ${GREP} /build/node_modules/`" ]; then \
-			cd $${subdir} && \
-			${SETENV} ${MAKE_ENV} \
-				npm_config_runtime=node \
+			npm_env="npm_config_runtime=node \
 				npm_config_target=${NODEJS_VER} \
-				npm_config_nodedir=${PREFIX} \
-				${NODE_GYP} --userconfig=${WRKSRC}/build/.npmrc rebuild -j ${_MAKE_JOBS_N} || exit 1; \
+				npm_config_nodedir=${PREFIX}" \
+			_npmrc="${WRKSRC}/build/.npmrc"; \
 		elif [ "`${ECHO} $${subdir} | ${GREP} /remote/node_modules/`" ]; then \
-			cd $${subdir} && \
-			${SETENV} ${MAKE_ENV} \
-				npm_config_runtime=node \
+			npm_env="npm_config_runtime=node \
 				npm_config_target=${NODEJS_VER} \
-				npm_config_nodedir=${PREFIX} \
-				${NODE_GYP} --userconfig=${WRKSRC}/remote/.npmrc rebuild -j ${_MAKE_JOBS_N} || exit 1; \
+				npm_config_nodedir=${PREFIX}" \
+			_npmrc="${WRKSRC}/remote/.npmrc"; \
 		else \
-			cd $${subdir} && \
-			${SETENV} ${MAKE_ENV} \
-				npm_config_runtime=electron \
+			npm_env="npm_config_runtime=electron \
 				npm_config_target=${ELECTRON_VER} \
-				npm_config_nodedir=${PREFIX}/lib/electron${ELECTRON_MAJOR}/node_headers \
-				${NODE_GYP} --userconfig=${WRKSRC}/.npmrc rebuild -j ${_MAKE_JOBS_N} || exit 1; \
+				npm_config_nodedir=${PREFIX}/lib/electron${ELECTRON_MAJOR}/node_headers" \
+			_npmrc="${WRKSRC}/.npmrc"; \
 		fi; \
+		cd $${subdir} && \
+		if [ -f buildcheck.js ]; then \
+			${SETENV} ${MAKE_ENV} $${npm_env} \
+				node buildcheck.js > buildcheck.gypi || exit 1; \
+		fi && \
+		${SETENV} ${MAKE_ENV} $${npm_env} \
+			${NODE_GYP} --userconfig=$${_npmrc} rebuild -j ${_MAKE_JOBS_N} || exit 1; \
 	done
-	# Copy rg binary to @vscode/ripgrep/bin
-	${MKDIR} ${WRKSRC}/node_modules/@vscode/ripgrep/bin
-	${CP} ${PREFIX}/bin/rg ${WRKSRC}/node_modules/@vscode/ripgrep/bin
-	${MKDIR} ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin
-	${CP} ${PREFIX}/bin/rg ${WRKSRC}/build/node_modules/@vscode/ripgrep/bin
-	${MKDIR} ${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin
-	${CP} ${PREFIX}/bin/rg ${WRKSRC}/remote/node_modules/@vscode/ripgrep/bin
-
-do-build:
-	cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
-		npx ${WRKSRC}/node_modules/typescript/bin/tsc -p build/tsconfig.build.json
-	cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} \
-		npm_config_runtime=electron \
-		npm_config_target=${ELECTRON_VER} \
-		npm_config_nodedir=${PREFIX}/lib/electron${ELECTRON_MAJOR}/node_headers \
+
+	# Build vscode
+	cd ${WRKSRC} && \
+		npm_env="npm_config_runtime=electron \
+			npm_config_target=${ELECTRON_VER} \
+			npm_config_nodedir=${PREFIX}/lib/electron${ELECTRON_MAJOR}/node_headers" && \
+	${SETENV} ${MAKE_ENV} $${npm_env} \
+		npm --userconfig=${WRKSRC}/.npmrc run compile && \
+	${SETENV} ${MAKE_ENV} $${npm_env} \
 		npm --userconfig=${WRKSRC}/.npmrc run gulp vscode-linux-${ELECTRON_ARCH}-min
-	${SED} -i'' "s|^#![[:space:]]*${REPLACE.sys-bash.old}|${REPLACE.sys-bash.new}|" \
-		${BUILDDIR}/resources/app/extensions/ms-vscode.js-debug/src/targets/node/terminateProcess.sh
-	${FIND} ${BUILDDIR} -type f -name '*.orig' -delete
+#	${SED} -i'' "s|^#![[:space:]]*${REPLACE.sys-bash.old}|${REPLACE.sys-bash.new}|" \
+#		${BUILDDIR}/resources/app/extensions/ms-vscode.js-debug/src/targets/node/terminateProcess.sh
+#	${FIND} ${BUILDDIR} -type f -name '*.orig' -delete
 
 BUILDDIR=		${WRKDIR}/VSCode-linux-${ELECTRON_ARCH}
 INSTALLATION_DIRS+=	lib/vscode
@@ -214,6 +252,7 @@ do-install:
 .include "../../lang/nodejs/nodeversion.mk"
 .include "../../lang/nodejs/application.mk"
 .include "../../lang/python/tool.mk"
+.include "../../lang/rust/cargo.mk"
 .include "../../security/libsecret/buildlink3.mk"
 .include "../../sysutils/desktop-file-utils/desktopdb.mk"
 KRB5_DEFAULT=	mit-krb5
diff --git a/vscode/cargo-depends.mk b/vscode/cargo-depends.mk
new file mode 100644
index 0000000000..100a87bd04
--- /dev/null
+++ b/vscode/cargo-depends.mk
@@ -0,0 +1,114 @@
+# $NetBSD$
+
+CARGO_CRATE_DEPENDS+=	adler2-2.0.1
+CARGO_CRATE_DEPENDS+=	aho-corasick-1.1.4
+CARGO_CRATE_DEPENDS+=	base64-0.22.1
+CARGO_CRATE_DEPENDS+=	bitflags-2.13.0
+CARGO_CRATE_DEPENDS+=	cc-1.2.67
+CARGO_CRATE_DEPENDS+=	cfg-if-1.0.4
+CARGO_CRATE_DEPENDS+=	convert_case-0.6.0
+CARGO_CRATE_DEPENDS+=	core-foundation-0.9.4
+CARGO_CRATE_DEPENDS+=	core-foundation-sys-0.8.7
+CARGO_CRATE_DEPENDS+=	crc32fast-1.5.0
+CARGO_CRATE_DEPENDS+=	ctor-0.2.9
+CARGO_CRATE_DEPENDS+=	displaydoc-0.2.6
+CARGO_CRATE_DEPENDS+=	find-msvc-tools-0.1.9
+CARGO_CRATE_DEPENDS+=	flate2-1.1.9
+CARGO_CRATE_DEPENDS+=	form_urlencoded-1.2.2
+CARGO_CRATE_DEPENDS+=	getrandom-0.2.17
+CARGO_CRATE_DEPENDS+=	icu_collections-2.2.0
+CARGO_CRATE_DEPENDS+=	icu_locale_core-2.2.0
+CARGO_CRATE_DEPENDS+=	icu_normalizer-2.2.0
+CARGO_CRATE_DEPENDS+=	icu_normalizer_data-2.2.0
+CARGO_CRATE_DEPENDS+=	icu_properties-2.2.0
+CARGO_CRATE_DEPENDS+=	icu_properties_data-2.2.0
+CARGO_CRATE_DEPENDS+=	icu_provider-2.2.0
+CARGO_CRATE_DEPENDS+=	idna-1.1.0
+CARGO_CRATE_DEPENDS+=	idna_adapter-1.2.2
+CARGO_CRATE_DEPENDS+=	libc-0.2.186
+CARGO_CRATE_DEPENDS+=	libloading-0.8.9
+CARGO_CRATE_DEPENDS+=	litemap-0.8.2
+CARGO_CRATE_DEPENDS+=	log-0.4.33
+CARGO_CRATE_DEPENDS+=	memchr-2.8.3
+CARGO_CRATE_DEPENDS+=	miniz_oxide-0.8.9
+CARGO_CRATE_DEPENDS+=	napi-2.16.17
+CARGO_CRATE_DEPENDS+=	napi-build-2.3.2
+CARGO_CRATE_DEPENDS+=	napi-derive-2.16.13
+CARGO_CRATE_DEPENDS+=	napi-derive-backend-1.0.75
+CARGO_CRATE_DEPENDS+=	napi-sys-2.4.0
+CARGO_CRATE_DEPENDS+=	once_cell-1.21.4
+CARGO_CRATE_DEPENDS+=	openssl-probe-0.1.6
+CARGO_CRATE_DEPENDS+=	percent-encoding-2.3.2
+CARGO_CRATE_DEPENDS+=	pin-project-lite-0.2.17
+CARGO_CRATE_DEPENDS+=	potential_utf-0.1.5
+CARGO_CRATE_DEPENDS+=	proc-macro2-1.0.106
+CARGO_CRATE_DEPENDS+=	psl-2.1.218
+CARGO_CRATE_DEPENDS+=	psl-types-2.0.11
+CARGO_CRATE_DEPENDS+=	quote-1.0.46
+CARGO_CRATE_DEPENDS+=	regex-1.13.0
+CARGO_CRATE_DEPENDS+=	regex-automata-0.4.15
+CARGO_CRATE_DEPENDS+=	regex-syntax-0.8.11
+CARGO_CRATE_DEPENDS+=	ring-0.17.14
+CARGO_CRATE_DEPENDS+=	rustls-0.23.42
+CARGO_CRATE_DEPENDS+=	rustls-native-certs-0.7.3
+CARGO_CRATE_DEPENDS+=	rustls-pemfile-2.2.0
+CARGO_CRATE_DEPENDS+=	rustls-pki-types-1.15.0
+CARGO_CRATE_DEPENDS+=	rustls-webpki-0.103.13
+CARGO_CRATE_DEPENDS+=	schannel-0.1.29
+CARGO_CRATE_DEPENDS+=	security-framework-2.11.1
+CARGO_CRATE_DEPENDS+=	security-framework-sys-2.17.0
+CARGO_CRATE_DEPENDS+=	semver-1.0.28
+CARGO_CRATE_DEPENDS+=	serde-1.0.228
+CARGO_CRATE_DEPENDS+=	serde_core-1.0.228
+CARGO_CRATE_DEPENDS+=	serde_derive-1.0.228
+CARGO_CRATE_DEPENDS+=	shlex-2.0.1
+CARGO_CRATE_DEPENDS+=	simd-adler32-0.3.9
+CARGO_CRATE_DEPENDS+=	smallvec-1.15.2
+CARGO_CRATE_DEPENDS+=	stable_deref_trait-1.2.1
+CARGO_CRATE_DEPENDS+=	subtle-2.6.1
+CARGO_CRATE_DEPENDS+=	syn-2.0.118
+CARGO_CRATE_DEPENDS+=	synstructure-0.13.2
+CARGO_CRATE_DEPENDS+=	system-configuration-0.6.1
+CARGO_CRATE_DEPENDS+=	system-configuration-sys-0.6.0
+CARGO_CRATE_DEPENDS+=	tinystr-0.8.3
+CARGO_CRATE_DEPENDS+=	tokio-1.52.3
+CARGO_CRATE_DEPENDS+=	unicode-ident-1.0.24
+CARGO_CRATE_DEPENDS+=	unicode-segmentation-1.13.3
+CARGO_CRATE_DEPENDS+=	untrusted-0.9.0
+CARGO_CRATE_DEPENDS+=	ureq-2.12.1
+CARGO_CRATE_DEPENDS+=	url-2.5.8
+CARGO_CRATE_DEPENDS+=	utf8_iter-1.0.4
+CARGO_CRATE_DEPENDS+=	wasi-0.11.1+wasi-snapshot-preview1
+CARGO_CRATE_DEPENDS+=	webpki-roots-0.26.11
+CARGO_CRATE_DEPENDS+=	webpki-roots-1.0.8
+CARGO_CRATE_DEPENDS+=	windows-link-0.2.1
+CARGO_CRATE_DEPENDS+=	windows-sys-0.52.0
+CARGO_CRATE_DEPENDS+=	windows-sys-0.60.2
+CARGO_CRATE_DEPENDS+=	windows-sys-0.61.2
+CARGO_CRATE_DEPENDS+=	windows-targets-0.52.6
+CARGO_CRATE_DEPENDS+=	windows-targets-0.53.5
+CARGO_CRATE_DEPENDS+=	windows_aarch64_gnullvm-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_aarch64_gnullvm-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_aarch64_msvc-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_aarch64_msvc-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_i686_gnu-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_i686_gnu-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_i686_gnullvm-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_i686_gnullvm-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_i686_msvc-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_i686_msvc-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_x86_64_gnu-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_x86_64_gnu-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_x86_64_gnullvm-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_x86_64_gnullvm-0.53.1
+CARGO_CRATE_DEPENDS+=	windows_x86_64_msvc-0.52.6
+CARGO_CRATE_DEPENDS+=	windows_x86_64_msvc-0.53.1
+CARGO_CRATE_DEPENDS+=	writeable-0.6.3
+CARGO_CRATE_DEPENDS+=	yoke-0.8.3
+CARGO_CRATE_DEPENDS+=	yoke-derive-0.8.2
+CARGO_CRATE_DEPENDS+=	zerofrom-0.1.8
+CARGO_CRATE_DEPENDS+=	zerofrom-derive-0.1.7
+CARGO_CRATE_DEPENDS+=	zeroize-1.9.0
+CARGO_CRATE_DEPENDS+=	zerotrie-0.2.4
+CARGO_CRATE_DEPENDS+=	zerovec-0.11.6
+CARGO_CRATE_DEPENDS+=	zerovec-derive-0.11.3
diff --git a/vscode/distinfo b/vscode/distinfo
index 5c3babd639..83004d29ea 100644
--- a/vscode/distinfo
+++ b/vscode/distinfo
@@ -1,34 +1,395 @@
 $NetBSD: distinfo,v 1.82 2024/12/21 15:30:31 schwarz Exp $
 
+BLAKE2s (adler2-2.0.1.crate) = 4d391e0fcde91c7435ee9a5503fee4a5346f549f1b45e482ce3e1e151d90f8f5
+SHA512 (adler2-2.0.1.crate) = 555b2b7ba6f8116acccd0bcd16ed34cc78162c81023cff31a8566ffcd456c03832089fca2d5b668ceaac4fe8f922d31aa9c487f226a36cace294ff4a219bd91d
+Size (adler2-2.0.1.crate) = 13366 bytes
+BLAKE2s (aho-corasick-1.1.4.crate) = 1419308c5b0745af6cfa18dd4c9639f7078f564e9dacbe2b17b03df42c393409
+SHA512 (aho-corasick-1.1.4.crate) = c77e35191b00546f5e499fab154170cedd619599e7250f92db9fba0a41c833eb426f214e58b00c5c39f8757406b33492b3241cb8cb233ce384ad0683c3ee4b62
+Size (aho-corasick-1.1.4.crate) = 184015 bytes
+BLAKE2s (base64-0.22.1.crate) = fe73b3b9d1780e56d1208d2e9084cafa72d5e488ef081927b03ccae3108e058a
+SHA512 (base64-0.22.1.crate) = 91cf2e4e7fc8815f9b8a86a7fa722a20eee3dc1dd57111b29e420de87ce7836bcdb1db01d3cafb9a977710ef63e7cc41b7772762323e68e0e832156858aace20
+Size (base64-0.22.1.crate) = 81597 bytes
+BLAKE2s (bitflags-2.13.0.crate) = 5e68c43f228176841cc2956db79f1e095f422bb89091e8d49c637e09551be42e
+SHA512 (bitflags-2.13.0.crate) = 5a93a30662effe056132d33cd0b25670feedfe69e927b7e77ea1a417f68104988459f1c3a73eec1752eac08f44ae5333496526e1a96dfb3e7144deca1a94d19f
+Size (bitflags-2.13.0.crate) = 51280 bytes
+BLAKE2s (cc-1.2.67.crate) = b55802933415d908f19fe54e35b9ce8bf8a85be9fd33ebfa3d42def81ad2acaf
+SHA512 (cc-1.2.67.crate) = 1bdc26db31537299794a7decd73304e56cd09ea3bdaaddce18f68da17b77b1587df6aeccd104ca14c9cae4378863b8b05cecc8b4579c4c6fe0f206b1c88123f1
+Size (cc-1.2.67.crate) = 96261 bytes
+BLAKE2s (cfg-if-1.0.4.crate) = 517b7cff4f133f9b02492c0db281822fd02c24941a7aa4f9b1502895dc5e58d9
+SHA512 (cfg-if-1.0.4.crate) = 176e04df7ba783b7143bb84397b777f5c5a1305c08a5c3a218d4a66830620be89ed68992ba27686165bcd3fb2f34b2daf80b2a1d4b481ecc267c988e84d28e9d
+Size (cfg-if-1.0.4.crate) = 9360 bytes
+BLAKE2s (convert_case-0.6.0.crate) = c65fc0970543af9611c565957751df80f31efa3aa7c4d8e5eac41712864a67d5
+SHA512 (convert_case-0.6.0.crate) = 3b17449195a9a36e3965db89eeb967979c192ad7743217ea08e8c8b91ecae1ac1674362d05dc6f32f1f361fface3f783398285bb78060403f65a777a9d29adf2
+Size (convert_case-0.6.0.crate) = 18675 bytes
+BLAKE2s (core-foundation-0.9.4.crate) = 2437015bf22ee51ea6e28adb110e8977774b095a2aae93c8bbbb9740ef9797bb
+SHA512 (core-foundation-0.9.4.crate) = 82d0878a1b9e3d56b3666fb5a78f92c6f7806d01665c242c06a640bd6b1fd36260211e92dc05e1a16d1430622bfdd650aabb0b5bd8e5592f74abdcf412448e33
+Size (core-foundation-0.9.4.crate) = 27743 bytes
+BLAKE2s (core-foundation-sys-0.8.7.crate) = d67a5ed3a4cb42a000d1bbcb5a633cb03edb8ae5ba892d1893f716629748ff34
+SHA512 (core-foundation-sys-0.8.7.crate) = 17492d5314db03abdb3b1998bf0c396ec8ed0f83bc978ae22d6026afdc86c50b58cbac073b3a0d97b92da7e98be11302faf1249d24313494bc058add4f4cb63a
+Size (core-foundation-sys-0.8.7.crate) = 37712 bytes
+BLAKE2s (crc32fast-1.5.0.crate) = 6e59f675b6404c35e422facb545e38c3e519f2a1268066914b7111ffc2ed6409
+SHA512 (crc32fast-1.5.0.crate) = 80d473960f004148e14e5fe2f23aa0d1b8c36e96237f49a6765ef713030e8326dbc0250a561afcfc49d8733f5a6d4f9f4677451cc13e2426ffed61f8c00cd81e
+Size (crc32fast-1.5.0.crate) = 40723 bytes
+BLAKE2s (ctor-0.2.9.crate) = 7f31b8dab22b88ecb50f9713e7b12a22318eaaae85768029289e032abc01fffc
+SHA512 (ctor-0.2.9.crate) = 70c3febb597883eaf99e5c640c41d29091d4da436e272e22238110cde1a762c37dc2f4a0d26c76a212c25013b00a88d7a391dd5e28a36dce88523974519808bf
+Size (ctor-0.2.9.crate) = 11032 bytes
+BLAKE2s (displaydoc-0.2.6.crate) = 3a900ff296482cb5539672200b4849f073769482794e269e30af207ce3de068b
+SHA512 (displaydoc-0.2.6.crate) = 6361c2ecb04a6fd260fa4b3bdd7650fdcaa5f12066e9a7b6d36c32e6d02f3de969249c7ed98f1bb9949cf236b256dd526551f2f614600e7d8d00764c7a74c0d7
+Size (displaydoc-0.2.6.crate) = 21191 bytes
+BLAKE2s (find-msvc-tools-0.1.9.crate) = a62ce966e69815f44f2749cda23bae8872df3012f2bfd0c3c9b0fc988ed3bfae
+SHA512 (find-msvc-tools-0.1.9.crate) = 729b3c1c1d520dffe5d88fc8b58e47fb7e86dc26e568fc317eea5ca8de0ee953fbafaa20ab34a6bfb43173bab39a90ff6954c11dab8d545e902305dafc8cd3de
+Size (find-msvc-tools-0.1.9.crate) = 31493 bytes
+BLAKE2s (flate2-1.1.9.crate) = 137512bf27dab897ea8ad9316ad52bbc3fdd3d6abd4539e706dd22af1012d351
+SHA512 (flate2-1.1.9.crate) = 0e98a626e314485bdb4dc31419fda9569d7ab442e64b68e374ad6bee8f5524903490e2c36ea243c78847ea378d6737df50da85f6be15517596f5f93e39a3089d
+Size (flate2-1.1.9.crate) = 82745 bytes
+BLAKE2s (form_urlencoded-1.2.2.crate) = a2bd40109d330e88635133e0c0fda55eb32549353cef6e88f29f37fe4ef801c6
+SHA512 (form_urlencoded-1.2.2.crate) = 07d27d852504e146d586d007b090e53cbe740da140859dfb7d647c83c1b55265a83ea0a0e514587699b1dc6b6ffea2fc913319bcc83b55ebe191801a3b429c8a
+Size (form_urlencoded-1.2.2.crate) = 9347 bytes
+BLAKE2s (getrandom-0.2.17.crate) = 0064a9c9bc6a7c03eaaf502ffb2e479eb18a4b6b3eae2b25b79cf3dc49cfbdb8
+SHA512 (getrandom-0.2.17.crate) = 23033dde606eaeacc0557e21b3c5ef732e083b17ae086dc95ac7d1a8bc1b695a9a6a7073b8ae774ec62e7477a8ea0644d417fa5da7841a3c8118694c21813d1a
+Size (getrandom-0.2.17.crate) = 40780 bytes
+BLAKE2s (icu_collections-2.2.0.crate) = f5e40e8bb134d2b9d955854388d022482d8db58d8b1d8ac99493b9002ced0a48
+SHA512 (icu_collections-2.2.0.crate) = e7997eca01778c9635fd918d05c850d43abc3cada2b1e79c0a4043f2bf275c238d185f1c55ef06548de88eb3d02c3d04f74061cc20e0843ee46f4776e701818e
+Size (icu_collections-2.2.0.crate) = 88011 bytes
+BLAKE2s (icu_locale_core-2.2.0.crate) = a41c1e8bad1d30b8715082d2eafcb1ff7d8aae4fbe08d03eed9f1dbf879fbc18
+SHA512 (icu_locale_core-2.2.0.crate) = bf29c3f1cd5cea979ce82243aa19d4dada121448ddd974b27cb325ac92e18953fa4e9af2758198ba6a41c367ea659c92e450328e85ebf73d231126674e238c2c
+Size (icu_locale_core-2.2.0.crate) = 78639 bytes
+BLAKE2s (icu_normalizer-2.2.0.crate) = f56569561d55d62c132f531763a8c6023db1470259f6759f71acd593e7debab8
+SHA512 (icu_normalizer-2.2.0.crate) = 98e48fcfe47623c592feee082264f50e96a82d89fa17e89d5d94de8e1cf3ec2529625954947d9b3bf9746f1cf0062b3abfd2d8f7cfa3b8e445c98284fbbc7023
+Size (icu_normalizer-2.2.0.crate) = 78154 bytes
+BLAKE2s (icu_normalizer_data-2.2.0.crate) = b9f66acf17911878fc034b6a74279e6e38ee55d316ba3a4f23e9e4900d565984
+SHA512 (icu_normalizer_data-2.2.0.crate) = 494559893b3db0960fc04294e1f606bf466c3970153335f48ff475d22fae614626d66d46130f0943d5345489ed5aa8118737d27b6e883d331993206a39a7484f
+Size (icu_normalizer_data-2.2.0.crate) = 67134 bytes
+BLAKE2s (icu_properties-2.2.0.crate) = 0a26c4d04476a316c0cc039231c09335e3a7994f8b04f818e9f2580d6016b422
+SHA512 (icu_properties-2.2.0.crate) = 880c0e19ca4ea3abe1322f9ce70c7138b0275dfa6c21b32ef65112d30059173b6d532aca0464f6b161aaa94ad56a0bd06b45156ba0c5ecdfab6f9fc52ab73bbc
+Size (icu_properties-2.2.0.crate) = 63950 bytes
+BLAKE2s (icu_properties_data-2.2.0.crate) = 407c818e537ddfb72fe6945ec86c14139e3d0c4af8b671964f63daccde607d5c
+SHA512 (icu_properties_data-2.2.0.crate) = 35330585d459673096b545753e36cdbd3e26b202c2b905032dfcb477c546e4cca6d323d3b5d2f0e7b0e4a983094f048c1543d215fec68535fd5655e839dfbfb7
+Size (icu_properties_data-2.2.0.crate) = 168901 bytes
+BLAKE2s (icu_provider-2.2.0.crate) = 03d31a1383ac97e8c1f7b6e07f01efa7ea382f62affe99958f965eed3cfb161c
+SHA512 (icu_provider-2.2.0.crate) = a1a193fc08ebe34782efd21b70778c38fd9f6d99c08321cd2bb457d6cc91593ecb806dd61b8179fe9b66d99d79d518081eb1d1e2933b08a3b28158806ad6169a
+Size (icu_provider-2.2.0.crate) = 51620 bytes
+BLAKE2s (idna-1.1.0.crate) = 0515fede863b0e4cd8d159ce5125a674a13e5b57e290c307825ab5eed2a34edf
+SHA512 (idna-1.1.0.crate) = 1d49993145fe694f33f7c71ebe62face416f2229b12690cec23ae2e4be2fc1c5aa5ad5651d815ab70057b68edc450ef6004306a775b920b8773c221c0fe6c106
+Size (idna-1.1.0.crate) = 148747 bytes
+BLAKE2s (idna_adapter-1.2.2.crate) = 1b56e16057793f5a80a750123bedb2b4787e4fab7e2c229e3a3ec184b9a8b9e2
+SHA512 (idna_adapter-1.2.2.crate) = c80655c107506022fe6b6d69af7ca2418b070ee66150d743b662e656a2ae04d4ea7b41f7f182fda9fedfa2626e70db30734f8e9af18d23ee39da0c2d4a21949a
+Size (idna_adapter-1.2.2.crate) = 10444 bytes
+BLAKE2s (libc-0.2.186.crate) = e4ae2a7c2182c3a4f54e39cfed3d574220b3a6d54af5a40aadfd814bb8a12c6a
+SHA512 (libc-0.2.186.crate) = 6a58e671ec6811dff9a0d7d4db8f37d38bcbca9efff20dad4706190e5cdb77b426567754bcf0ef0f2d0c31d6506401f724f3ca500b9bed57bb8605b1141ed690
+Size (libc-0.2.186.crate) = 821883 bytes
+BLAKE2s (libloading-0.8.9.crate) = d741d7e65cbf9646c42c5dc17281656ff1181d06d9b1ef8b74c18eabfa49062b
+SHA512 (libloading-0.8.9.crate) = 374d82f4516e81c0ff66f244b89b486ccba675cd7e9e65b7732242830a43caefefae2efd11c209da64d8d96755c4432aea97f2dd200969fc077545212a1175ee
+Size (libloading-0.8.9.crate) = 30222 bytes
+BLAKE2s (litemap-0.8.2.crate) = 7a8abd4396eb1d5e14e055c2380afe0f55b1876db8ba87bbbdc9689ffb1de32d
+SHA512 (litemap-0.8.2.crate) = 3afcc1a89aab55368bdfe6848aa1268d37ea8a03130f1f0e1e77d6709e437070be83e9e457bb51a7096c3d93ee0155740e33cab03f7584ff3cd7d8992524a7f6
+Size (litemap-0.8.2.crate) = 34572 bytes
+BLAKE2s (log-0.4.33.crate) = 3998a5eba5385e4cb2782d8d11790a5294e7629dbbb56a03b1237b34a5125144
+SHA512 (log-0.4.33.crate) = fce3eaf97b1415e413aec344a156d930ebaf52d918f8d9ff9e086f3df58253a6306a215aa4d4b4782a1b7deaad484739666f4fbd8e41272bf95ce4fc6306b74b
+Size (log-0.4.33.crate) = 52997 bytes
+BLAKE2s (memchr-2.8.3.crate) = f18d09ec2f1d3e7ec6d9764389518b51cd9bdec5d3cb677a2d38b6f58a452c31
+SHA512 (memchr-2.8.3.crate) = 2965717bb9e0451c8fcb3d81f509898918491a7b72a894bec5a0d48619cf24db4378e28c6f71f22dbb0f47f1e96662cd86adb0cf1ffad81a7efc2a973fbcd62f
+Size (memchr-2.8.3.crate) = 99165 bytes
+BLAKE2s (microsoft-os-proxy-resolver-v0.4.0.tar.gz) = 323aaba7c545410d1b4de1eb4d191ba4314ba6ced1b77076111f88032b5c01ab
+SHA512 (microsoft-os-proxy-resolver-v0.4.0.tar.gz) = 4eac61df45be5a469283cdb6b9dbbae3e7314e18044b3e132de7653c9e3825cdc5d28a6f55fac53a268b1de0fce89042425f698b0c0ee125627041474085da2b
+Size (microsoft-os-proxy-resolver-v0.4.0.tar.gz) = 767318 bytes
+BLAKE2s (miniz_oxide-0.8.9.crate) = 33632612132047dfffdc3a73e385f56ddee36860561dd26c08667d8098428449
+SHA512 (miniz_oxide-0.8.9.crate) = 3f6fd786c5fa5b4abafaf21244dd4830d26688d5b6975522bda595206517f354d92d13fb95235667cbc39c0275371c737164d9c7a58e32e09da86eed2f239242
+Size (miniz_oxide-0.8.9.crate) = 67132 bytes
+BLAKE2s (napi-2.16.17.crate) = d1212a473eec4d4b0c6ee04e37d5e3d4852b8493cb7d0c37cd042fbd35f6b20a
+SHA512 (napi-2.16.17.crate) = 112a0f728a4c8470b28ff33dd9db57fad714df5ec86aa896a38ad2c27ae50ee1ce59e4abc2bcf22f5689e896538e359fd5148af9a5e180f605a9f7e81d5da6e1
+Size (napi-2.16.17.crate) = 92204 bytes
+BLAKE2s (napi-build-2.3.2.crate) = 935713d985324870238f064e8e5c12383264558977bdf2427b9c877a4b3af512
+SHA512 (napi-build-2.3.2.crate) = a39380e06993d35cb0433da401c5cea98fa20f52a84326d6f722f24e9e61c1d16f42364c7322d479f141880f81b652873c4bf56391bba2675986770aec1390f6
+Size (napi-build-2.3.2.crate) = 3234 bytes
+BLAKE2s (napi-derive-2.16.13.crate) = 2b92e571e1e02679db25121a2ba7176ac267acdaafec26e059e2cf2bb53edb7a
+SHA512 (napi-derive-2.16.13.crate) = 025be50a2d7e089986fff0e34ccfef323343b4aa1643af482a385ca39735ca26e3e9bee8668b4b639a2eebb7cfbd6d8d33c26e13c209c5e5555d8398f2fbc0aa
+Size (napi-derive-2.16.13.crate) = 17190 bytes
+BLAKE2s (napi-derive-backend-1.0.75.crate) = 2258592a50eaca29994b793bd4cf3244ca83a3ef4bf6eb5b2ca839da25d3c6fb
+SHA512 (napi-derive-backend-1.0.75.crate) = a763b6b8640874720cf0b0d8be66eeac29db6fb629da2ecba47d11de54651f4d203127f6bc69d25766d2ec5d093cb01775270aaa77e6b7854924698f5840dd04
+Size (napi-derive-backend-1.0.75.crate) = 21748 bytes
+BLAKE2s (napi-sys-2.4.0.crate) = 300635d183de946699115680b6427067a0f8955a8799f55aa88b3039b7136957
+SHA512 (napi-sys-2.4.0.crate) = 77b0f373e1a3ea4a2ac476711e9ba434a40e187ff601e6ba90730777a453829c2a86fea59e4af167d372f0ebd98765f52344716177ffbab7dc9c45873ac784f8
+Size (napi-sys-2.4.0.crate) = 6582 bytes
+BLAKE2s (once_cell-1.21.4.crate) = 5945879c1e46e46585a2692e5f3ac0beaa15f111aa45611e0419b50abb21fb4e
+SHA512 (once_cell-1.21.4.crate) = af67669b0107f44268ba74c355200cb2ed1aab235a6989a8bc54323eb2c9a45677010f8672e7790edadd4c981e939436e0c3a099d33c06dce9c14fd5ede86155
+Size (once_cell-1.21.4.crate) = 35010 bytes
+BLAKE2s (openssl-probe-0.1.6.crate) = 5e1ba9009c251c2d4cc4a3f95a3a2039b0ff5382191369fa70706d26d1d757e9
+SHA512 (openssl-probe-0.1.6.crate) = 6c2f02a9d42caf578fbd2a40277ad346bef32d191f27564d04a83477d62d6ad1f44945f40234e9425503e3f701a9e0ec8735ade52641170ff57fa6732666ac69
+Size (openssl-probe-0.1.6.crate) = 8128 bytes
+BLAKE2s (percent-encoding-2.3.2.crate) = 81bf57454974d77f50aa665cf53179715469e81774d992a2d3769ad118d70d5b
+SHA512 (percent-encoding-2.3.2.crate) = 495b4aac88a7a46420811671d6bd82817e4eb2fe51d5068d11c5b50d0d927895d54c855cb07d4f4ad5a2d42b22f9419ad0183c14781dbfa240804fd49761035a
+Size (percent-encoding-2.3.2.crate) = 11583 bytes
+BLAKE2s (pin-project-lite-0.2.17.crate) = eec243c604d00a363522121c01823158a8ed81bbf8f9274b1944784d973c8ee8
+SHA512 (pin-project-lite-0.2.17.crate) = 0cff4338e3c7b71600fb41db013efe0d01b9cb3fdf95192dc16c5bea58a0f157207ef285ceb01b6b30956f9e751577c5d2a3803103f89a8a0cc6ea728d97a4df
+Size (pin-project-lite-0.2.17.crate) = 31034 bytes
+BLAKE2s (potential_utf-0.1.5.crate) = fc38d3a77dc1ab746af790e61608cd397049c01320d59d6d07eacb74531e3951
+SHA512 (potential_utf-0.1.5.crate) = 72950504acbd0aeeff44e0169f1857461f7627e7c638698ee005958c14cc0e68b2cfde33a91afafdcce98eac7ba7d54a125ae22562c4120c31e4b745bf298b54
+Size (potential_utf-0.1.5.crate) = 10189 bytes
+BLAKE2s (proc-macro2-1.0.106.crate) = d914a8fc313c5a898a0a9381a19dfbdfe9b94efba3f431759ea2c7ce43cd5362
+SHA512 (proc-macro2-1.0.106.crate) = b726e2c92af434bfa88cd4f53c3fe6db647503567675fb439890dee3d15f5111137e3242b28d164114ce081c10acf3fd11950753ddb349190c87ee04e7d97744
+Size (proc-macro2-1.0.106.crate) = 59765 bytes
+BLAKE2s (psl-2.1.218.crate) = bdd79bd38cc47c098ef9141ea9d6970f99d17033f3cb55e4ea08234dd84dd3e2
+SHA512 (psl-2.1.218.crate) = 087f57dfe80130f5fb0aebe6e72d8c99c22a101a33ef79c944ff33ccd3838edbf0f83d1382a90493899399649551bc0b72feb26dd222bfa38afec6121bb99e7f
+Size (psl-2.1.218.crate) = 203912 bytes
+BLAKE2s (psl-types-2.0.11.crate) = 2ae04cebbd9851d6d6941b7670be2ff715d99ff0a9aefe27937ca38fd711a8b3
+SHA512 (psl-types-2.0.11.crate) = c609f6a414bc1f5f98c22f9ca73e3908ddaf10e33ef43f408ab8ae2f8c544c0f70cc1a73b1fcfa20ea53f2225f60922f6d28d2e5d31a9877550c2ef3520ee2b7
+Size (psl-types-2.0.11.crate) = 7959 bytes
+BLAKE2s (quote-1.0.46.crate) = c46b18b5cdbf25292ef1bc1b3a7fa18a92406588beb8dca1c12c7320e03ba60c
+SHA512 (quote-1.0.46.crate) = f51e65743b9f15b491d20bb6c3a0df921cfec29df8bafca36c9dde034b5117fe3f4eedcc258126c6cb1729be1ffde5fcf7e5b0fb0c3de4a618f46ab3cd803e77
+Size (quote-1.0.46.crate) = 31628 bytes
+BLAKE2s (regex-1.13.0.crate) = 4af3fedac5334f5d23ce6b7bc677bb531252daba563138894cf62b27d13892df
+SHA512 (regex-1.13.0.crate) = d7b03977958bfe377160faeba6c405d7a5f403d745bb05be92e4eb1847b458dbe60160bd7f9062b7a31e012a939f34666d65ebb52ba9ff0b3018300304fdb42e
+Size (regex-1.13.0.crate) = 155857 bytes
+BLAKE2s (regex-automata-0.4.15.crate) = 7b7ac3b6bc2d04452e136d19ffbd1afe1d85ae9b9a0ee3ae664747371f8c7dda
+SHA512 (regex-automata-0.4.15.crate) = 9dcd508595bfe9f42f9a5380bdde89f3588d152712ba88cf07897465b424f26d52057021944a7983f64075a27eec0bb63bec8b00b1cd93a7494df83fd3ae5b3b
+Size (regex-automata-0.4.15.crate) = 618603 bytes
+BLAKE2s (regex-syntax-0.8.11.crate) = a576c4fe92eac0d2ac9dd7e21c4538baf20f219534cbbc047867f859bebb1792
+SHA512 (regex-syntax-0.8.11.crate) = 8bf74e8798d935392212e20c249a8bc4a82e8e440cdd65418a403691b33374d28220bafebbddfbf742a3d7070a1fc0fbf6cfffafc585032de1ff082184b67d12
+Size (regex-syntax-0.8.11.crate) = 359055 bytes
+BLAKE2s (ring-0.17.14.crate) = 1480ea4de12099a897e831682ebaf48ed6e688e06f58e79e496a06e227ed58bd
+SHA512 (ring-0.17.14.crate) = 88d38205dc1a1f89bd4ae887ec5c168e68a4b749b3ac0612674092331e99d14a9b8d0f4a98d72c1a3853bcc9da420402336da3ee053bedcfd598da8de93afa14
+Size (ring-0.17.14.crate) = 1502610 bytes
+BLAKE2s (rustls-0.23.42.crate) = 6ed9ce2fd45157ee5a693d4b028e2a705e31fe332ebe54bc140753e812306898
+SHA512 (rustls-0.23.42.crate) = 10fdd49af38947fb378821f6aca6c448ea3690c7b75de0f556fa9dbe2154133a663f106b838e36a2fdba31e6fbb04458f4978c43f91f9a99925dedd6773910a7
+Size (rustls-0.23.42.crate) = 375354 bytes
+BLAKE2s (rustls-native-certs-0.7.3.crate) = faf4b9892b045c13952cb486cbd1f9e9f224d31f2a35c434d52e43cc46d0cf93
+SHA512 (rustls-native-certs-0.7.3.crate) = 3e7e835c8fa392f4db94ea481bf51fefb6c632a085e2c8b2df197173a4402d78fde7ff8a964edefd3efb48b2f473d0cb4470c2f1a385a74792f9caa4c3cd60ef
+Size (rustls-native-certs-0.7.3.crate) = 31564 bytes
+BLAKE2s (rustls-pemfile-2.2.0.crate) = 8d557e7cb03207804ec96b0daa5662836d9997ff8be38bf5333b76fc570f598b
+SHA512 (rustls-pemfile-2.2.0.crate) = 1e69f0b72c6060eb0a54ec8a1cb51809525b053771a1d417892205f8f5dbcf4ba45250fc0d6a836e0cc8fede06d934f0a90c47d475cd8e066dcb3f7504ddaf17
+Size (rustls-pemfile-2.2.0.crate) = 25849 bytes
+BLAKE2s (rustls-pki-types-1.15.0.crate) = 12cb0d971d927cc08ac143281fbac401f7a9f23af7954f32af1a8d190848fc21
+SHA512 (rustls-pki-types-1.15.0.crate) = 90b4a937059e99fbec5f4772dfc95afd74bc2a46e686156a20301694e66c870c7948720dd59f51c312b875745b95f55246b2ed8435a27659d9f580859f59612a
+Size (rustls-pki-types-1.15.0.crate) = 35697 bytes
+BLAKE2s (rustls-webpki-0.103.13.crate) = 07e998271fef95dc3756ff38b08abded4d7178bef0b7dee9df82b5caf16d6b4c
+SHA512 (rustls-webpki-0.103.13.crate) = 367829afe3432a9d80bb4da82e075dd05bc37ecaf801c0944e1af9184565d743abf92d59e6fd433e7f051daac15099273b823e6f417ec46b6b5da43bbdad59b6
+Size (rustls-webpki-0.103.13.crate) = 87513 bytes
+BLAKE2s (schannel-0.1.29.crate) = 932245af14420ad850ca7e2f4943c6f3550068e85f51ebff11f73f0331953074
+SHA512 (schannel-0.1.29.crate) = 5491640018ce9e68d0b025c7e45e22fe70b8742355c42256853732f157c0a3d637c9828ca3a8d9454a7ee865ba408be1bd1abda89db734eec52af7f978c0e051
+Size (schannel-0.1.29.crate) = 34352 bytes
+BLAKE2s (security-framework-2.11.1.crate) = 1ea73892346c9021258c94852fd6c47156b7e720915dc8ff8e200609560aa539
+SHA512 (security-framework-2.11.1.crate) = 02786d62fd9dded80bae3942896bc8fea2a90763427f582bf5d9f127ca5682097b59b5dbff2cde373198ba659316ab5906a68d3141ba00c7408b73ebe353fac1
+Size (security-framework-2.11.1.crate) = 80188 bytes
+BLAKE2s (security-framework-sys-2.17.0.crate) = b5c3e6a5cadfa0c7ade6a8b447d7ba2a79eedebfab38f4eab3b83c7d2878d9fa
+SHA512 (security-framework-sys-2.17.0.crate) = 7cca8471f3391af920d2354d68ccaceaec27bbe2b4f99413914f010cdadab5f94ee18a0d2467fc9ce49d077006599914f7733261a6b88f2ee9d1403479efbd4a
+Size (security-framework-sys-2.17.0.crate) = 21078 bytes
+BLAKE2s (semver-1.0.28.crate) = cc54fd8b7e1ad8e773e58137625a19c3ca7c46fec285a7eec1685230a1e9b88f
+SHA512 (semver-1.0.28.crate) = bb44373e60fccb83bc95e4277ea0abdd756a3f77b3334cf6d6b5fceac086910661ab94eb326cdc8fefce0c09220933bdf03bfd142c1594a92c9c1e4e931114b7
+Size (semver-1.0.28.crate) = 33064 bytes
+BLAKE2s (serde-1.0.228.crate) = 6d35ddc61aef1dd8524d6730c719753730adcf3b2ecc0bb3f54af53f74384a99
+SHA512 (serde-1.0.228.crate) = 9b645d6214203533b303fc5e88ad4f7686c22df084878d18a0209a92304a340fcb62fdde88a7080cf7a7348d47b9b363885c4e1da90dba08cc99ff620f375e97
+Size (serde-1.0.228.crate) = 83652 bytes
+BLAKE2s (serde_core-1.0.228.crate) = c3ea455d91e83c2bd00cc5627f0c256b89e4defeacb70b76aa1f21ed33aabbec
+SHA512 (serde_core-1.0.228.crate) = 43897e3a7ebdc85d81d1cb30cda8f0a11610f6f551529c8a21462c24fb83110652b462846aa3e1bed5fbf8b5d7927018845a524ee9e079e2c8acf2c687efd6c4
+Size (serde_core-1.0.228.crate) = 63111 bytes
+BLAKE2s (serde_derive-1.0.228.crate) = 96ba1b9a1d86ef1d6189da828e4acb22c58e4c75bb851d67131f2b85dd11d75c
+SHA512 (serde_derive-1.0.228.crate) = 8bfdfeee10ee7ef0670972aa963ef63b13e8eb2c8a09b9e0b717f92551aa89b3dd2a0dcbae6ccf20a1caece07e6adb18f0db56fdac020e4e0281b0d24e376003
+Size (serde_derive-1.0.228.crate) = 59605 bytes
+BLAKE2s (shlex-2.0.1.crate) = 5b5a3bb8700bbe3e169d6cf5b7a115324435d22823055086a533c4a8b8778fd7
+SHA512 (shlex-2.0.1.crate) = d1bf35e2c5a93c718d3cc395fc4b06cc0c42d4891c0f37247de7e179492478020f0c57ae74c461d5bb1f833b071fd5c036d8d6d6ab8b61be6140cb64ae525921
+Size (shlex-2.0.1.crate) = 19332 bytes
+BLAKE2s (simd-adler32-0.3.9.crate) = c2430e1618e0e240daa76a5547ea175ff45df5ee87d124bc081a46bede669fc3
+SHA512 (simd-adler32-0.3.9.crate) = c900aad6b3f8b13e995031d7e2ffec015d9b68809cd9d76e8368a1091cc5f3d63073c7a212656f3a7930e4445e64b93b977324d4507f02e059676ea2cf59839a
+Size (simd-adler32-0.3.9.crate) = 18572 bytes
+BLAKE2s (smallvec-1.15.2.crate) = 0cc4310d8ae4cd03028465aeb0c2b6c658d91a277199f42e77d38cdfaed4b413
+SHA512 (smallvec-1.15.2.crate) = 8c19ab367289dee2e60c9169f977d66723e219b7e56f8f71b2746bcddd84da7de4d17f32b49233dc87bd897063bee0c8cd679c9bdd0895696a189eb11fa83051
+Size (smallvec-1.15.2.crate) = 34899 bytes
+BLAKE2s (stable_deref_trait-1.2.1.crate) = b10100bc26d661fd9dce98e4be90e31ae3e6a0e723a77659f2ae67327ec492ce
+SHA512 (stable_deref_trait-1.2.1.crate) = 630721d3f8e9f3290efc250c42aba13e2325839e62167a2a611618c18c6aa58c08a53622db61a9aa920284570626b98df26b3c28009cf45b6ce1ec134b9c9f5c
+Size (stable_deref_trait-1.2.1.crate) = 8186 bytes
+BLAKE2s (subtle-2.6.1.crate) = 20c4da1ee5ba2b0bb1aa9725b78c70ccae98f7b6cab0b57266d539d1b323b636
+SHA512 (subtle-2.6.1.crate) = f5946ebd9bcb8776ee3446abcbf4afb3cca5d8bd847cadda87e864333ac7ded537a3efa773e9648adf20ce4add2c1da85172cff88c1e1a3a6cb051401b00c6bd
+Size (subtle-2.6.1.crate) = 14562 bytes
+BLAKE2s (syn-2.0.118.crate) = d87c4260b28e9ef68731e1bfde11fadc47cb88aff1cbf915eba7814fecdf429a
+SHA512 (syn-2.0.118.crate) = 24cbedce5f751fb5fab46ce27b9772fb59692e5520039a4d66a9f4d8d8b381d2af5c5be5eebd1e24cdba49fcb40a90b38f61477dd5dc96d8f272823f9a93b61d
+Size (syn-2.0.118.crate) = 305533 bytes
+BLAKE2s (synstructure-0.13.2.crate) = 674ef97e051051a22c4ec20f4b53a60e382b933bd94e75d853ebb2f98a3a797d
+SHA512 (synstructure-0.13.2.crate) = 2698f4e80b93f7cf1d8ae97c4c42a7f61e7b7081f7f1bbb94d7f48ab7ae813a666d73c49ba3812cda9155e0138b55cc246fb96e5858e411a8d32bafb3e2b2afb
+Size (synstructure-0.13.2.crate) = 18950 bytes
+BLAKE2s (system-configuration-0.6.1.crate) = a6ba1920317c44bebb9b90834ac5d2bbd70fb2f17a29f307885a0a786323fc12
+SHA512 (system-configuration-0.6.1.crate) = ba7eddeba87d22206c250908f0158120b4984750cf7b2b8d57a50a32b323d3346321c8f2bab726c1d7ad97fc5da0b19d663c0e2db27ff74e3889463639a4ec89
+Size (system-configuration-0.6.1.crate) = 17935 bytes
+BLAKE2s (system-configuration-sys-0.6.0.crate) = ed9e17eaaf4343d78d72c7d06f6477f6926ce6635f272e03f2c814b6a7eee1c9
+SHA512 (system-configuration-sys-0.6.0.crate) = 02b1693b8c18ae3484e366a7f7395a31902a026e0864a8ffc7643c7b4a856f912f58f2ec19ba52a50d0d1dc09a806888fa1f3222e1af1f65b8a16eedcc966234
+Size (system-configuration-sys-0.6.0.crate) = 11090 bytes
+BLAKE2s (tinystr-0.8.3.crate) = 2684c8d423f00c5ccf8ee7ac0e6c508bbc37f144856339e07b93ea826bc295f5
+SHA512 (tinystr-0.8.3.crate) = 1208a3502aad5783a99d05c6c546f0f9de5b468b273c0931a33829c857a159679f8720622ee0700bb8df397baa590e0411f89116327759a859ff46438ac73bfa
+Size (tinystr-0.8.3.crate) = 24710 bytes
+BLAKE2s (tokio-1.52.3.crate) = cc2e5634c5835925099d3a0d3ab0d9d2f46da2bb543cdcebf274a18be6191780
+SHA512 (tokio-1.52.3.crate) = 8dd961765d86012be4bc4c24b71b495403aadb5a20fb5ded5e47ae2c49e5f117a793aeba87427edbd67eb885bd91a09d4b2f3def3cdeb1f752156556b291ee50
+Size (tokio-1.52.3.crate) = 901393 bytes
+BLAKE2s (unicode-ident-1.0.24.crate) = 48314ea8c9272549000bbd39fab6a52df9a467bedfcdcda02f183d7549b620b2
+SHA512 (unicode-ident-1.0.24.crate) = 7be712d8d0075ac9341790180e312f66264d3e0255c91b38df0951baa5e446dec24551bb2125a66a1cb9b6ca2f1ea37c0cc15fa3dd74f398ecf4d5302c7dc259
+Size (unicode-ident-1.0.24.crate) = 49298 bytes
+BLAKE2s (unicode-segmentation-1.13.3.crate) = 8d78f739508b85c310aefcbefe867417eeb280bc8568ec201eb0703b09f62a30
+SHA512 (unicode-segmentation-1.13.3.crate) = 927f3d2662c40213c6d824c410e3559f180fba5736abdea566ad9f3ed357c5a82f84f63e7fb89c6b18dfba2903d2dc43663b79d0b9f7672a42926e0ba49c85d1
+Size (unicode-segmentation-1.13.3.crate) = 112325 bytes
+BLAKE2s (untrusted-0.9.0.crate) = 48fd20f1ccabe5057140657a1103382efe55b4711cc443e17c503849f38c1589
+SHA512 (untrusted-0.9.0.crate) = 5929e4079c1c2ff933ae8d8f59a2ecc7a424e71a20d1b8821f75925af68bdf82604b024c008e5464b02e25ff093e561a352b685e755b3d0b27e4c30254689416
+Size (untrusted-0.9.0.crate) = 14447 bytes
+BLAKE2s (ureq-2.12.1.crate) = 268b4227206eb203073c9bf26fe9ef599b6e7a6ec0f74cc9d7a9f73f43eec2da
+SHA512 (ureq-2.12.1.crate) = 30fb75e097b9cfb34ebd056c0936d1b5ce16f4a613e963c5179046eb48a0165da6cb2e4a5d612b03d6b0daf736f5353159a92ab69e68b643b923fd551f0c3e7c
+Size (ureq-2.12.1.crate) = 115366 bytes
+BLAKE2s (url-2.5.8.crate) = e3ca74f997fda512d3fb06b936955ab713c0961d06fda13e6af520654d75368a
+SHA512 (url-2.5.8.crate) = 5848b47d63ae9c195fd5f82bd8333c53cb399f383240e84a606c486d3dbb37db4e268b01a147deb8cdf5bc534a4ebc7b11391e73f81dc3ea3ad7254507ac0c6c
+Size (url-2.5.8.crate) = 86512 bytes
+BLAKE2s (utf8_iter-1.0.4.crate) = 7d16264d69ba5aa53edad665e3589efb6594cc14c68e5e832371862aa286787d
+SHA512 (utf8_iter-1.0.4.crate) = a72671995b3eb295581c60dc632e4a25ba257227fb5d58a8bec322428b6d69529bba79a6f02b8e7ee6698b7779d9d6695f5badad73e07c254b00c9d6256c9090
+Size (utf8_iter-1.0.4.crate) = 10437 bytes
 BLAKE2s (vscode-1.142.0.tar.gz) = f90a31a21f0443216d0de85fda2e40c8863b0763dc9dc11b71beb47a2875d752
 SHA512 (vscode-1.142.0.tar.gz) = d86c75ef16eeb7d6292774d9fdab7d579ff8fc1332b2629f8a34a82e7dbfdb2cf4ebdfa1724f78ec7ad1b1905a09d64f3c62a219614ef5c4dc401191a3576e36
 Size (vscode-1.142.0.tar.gz) = 61345998 bytes
 BLAKE2s (vscode-node_modules-1.142.0.tar.gz) = 816acec4af91bf46d5c0d2b22306203386d51f634a238dcdc66fc2dd892354d7
 SHA512 (vscode-node_modules-1.142.0.tar.gz) = c1608133f99cfa1b5ded05757cdc807adb9fbc96ecd272962805f7d27eff102aa3d686e119db4c66d48693a723a0b33eaa73ae6af616bec87397ed9018c22b00
 Size (vscode-node_modules-1.142.0.tar.gz) = 1357774004 bytes
-SHA1 (patch-build_lib_layersChecker.ts) = f7e07c4bf5d4f58ea37383aef61af71e2357f22a
-SHA1 (patch-build_lib_propertyInitOrderChecker.ts) = 8559891b75b3c8d84bcabd90cd1e15d15a9e681b
-SHA1 (patch-build_lib_snapshotLoader.ts) = 7203f8fec3bd86684e85b70f00825aa69661156b
-SHA1 (patch-extensions_emmet_src_test_testUtils.ts) = 9c4c756e44a191ab2ab660170cc27534fe838eef
-SHA1 (patch-extensions_vscode-api-tests_src_utils.ts) = 6d5ab29d490d52bb64635a5dcf2de89cd36ea5ab
-SHA1 (patch-extensions_vscode-test-resolver_src_util_processes.ts) = 2156802e40b6aa923e812fb67e1767a87ce92c78
-SHA1 (patch-node__modules_kerberos_binding.gyp) = 32c308f346cc3ea4263bea8fe9f36b6f133dde7e
-SHA1 (patch-node__modules_kerberos_src_kerberos__common.h) = f564f3a2b2873440c8bd6c5e634a562355539360
-SHA1 (patch-node__modules_node-pty_src_unix_pty.cc) = cfff2b99cb736d05b982376871ec1e659f805d30
-SHA1 (patch-product.json) = 36f64bed665c508a803b93699ee8a74f83106261
-SHA1 (patch-remote_node__modules_kerberos_binding.gyp) = 181de4a582e39b73347952906df373c78f875ab2
-SHA1 (patch-remote_node__modules_kerberos_src_kerberos__common.h) = 132467c87f9afee83dbd5fbb90500435ee9b5128
-SHA1 (patch-remote_node__modules_node-pty_src_unix_pty.cc) = 35d79718a3c7566e9e960923e1dc95266d1181e0
-SHA1 (patch-scripts_code-perf.js) = 9809b850f0fa27723dac17751e691a874fe6c266
-SHA1 (patch-src_bootstrap-node.ts) = 3460a917204359adef752aaf73523e13b8d95103
-SHA1 (patch-src_main.ts) = f2bc16c9948d5c5c18c5c7697219c47a4b1d343f
-SHA1 (patch-src_vs_base_common_platform.ts) = 1c8b0c4ecc8727805c266375996dcb8e4e63a3bb
-SHA1 (patch-src_vs_base_node_ps.ts) = d4d52c095715b34321f3dd833e9daa882211a8ed
-SHA1 (patch-src_vs_code_electron-main_app.ts) = 0d7c988602b3814afcd000c92440df0e4a0be784
-SHA1 (patch-src_vs_platform_environment_node_userDataPath.ts) = b97d4f7c23193fe64380357657a6fb189764aa43
-SHA1 (patch-src_vs_platform_native_electron-main_nativeHostMainService.ts) = 78137b5d717011bcee3b5106017a712d22263d8e
-SHA1 (patch-src_vs_workbench_api_browser_mainThreadTask.ts) = 7e642866645295edd126c9984bab69d4cbfcf4e5
-SHA1 (patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts) = 6dbb9ffd7621f265871d27a395137b0f1572ad94
-SHA1 (patch-test_automation_src_electron.ts) = fc23124393f19d7af8c061d86b33141af05f3aa7
-SHA1 (patch-test_smoke_src_areas_task_task.test.ts) = d757d054287d959d8041e38241aaf36eae0e0c69
-SHA1 (patch-test_smoke_src_areas_terminal_terminal.test.ts) = 10a05952eb9e1e1af83971a7483eeb509396be20
+BLAKE2s (wasi-0.11.1+wasi-snapshot-preview1.crate) = 754465931502b3a96b316c42429cc83d392da7abc889f52a4de4adf5277fb900
+SHA512 (wasi-0.11.1+wasi-snapshot-preview1.crate) = 29e3c903763db2580a15f50db487c5e1d4e90763e48d90a5b3f681e468a24f9df1a01773bd1ffa0e3cd293dd8cb4d6fbabfaa63c0e13889c811a56f4554ada49
+Size (wasi-0.11.1+wasi-snapshot-preview1.crate) = 28477 bytes
+BLAKE2s (webpki-roots-0.26.11.crate) = 92fd4fbe06b643caccdfafb39b6d5b64b2cd0f58295ac4ec31aa920d5285b04d
+SHA512 (webpki-roots-0.26.11.crate) = c567d8167d0f61ea52667e5afc5fa002cd173b69b3392463abaa82a68d38ed2872f9b596fa8a5cf82d891a1f75b5cc0fceba623a56b1f1ad2525045c0c94b4a4
+Size (webpki-roots-0.26.11.crate) = 15557 bytes
+BLAKE2s (webpki-roots-1.0.8.crate) = 130484dee8f11883ca623651bb9a7e530ca4d1dc4534aaed140e997624a950c9
+SHA512 (webpki-roots-1.0.8.crate) = 29c017b3f0d1933354d5ef21cd0486866edfda8ca386d5abd145887e5923eef48a2589c0ac1615ecdad01331bf5ac89abe2c3c05a03d54a2adc56661f230af4c
+Size (webpki-roots-1.0.8.crate) = 212485 bytes
+BLAKE2s (windows-link-0.2.1.crate) = b399f8b2d800cac2bef8e258bd19baf94c010ce1b58723ccfda65f4451b8f1a2
+SHA512 (windows-link-0.2.1.crate) = afb0c87beb8914fd9a3e52db6f2f64a840470b9751b66c83892c24cb1c46cda63fb16b1aeafcaa5a1fc7c5ba01da46be63e5227cc108dede8b0bd27785498a6b
+Size (windows-link-0.2.1.crate) = 6133 bytes
+BLAKE2s (windows-sys-0.52.0.crate) = c3fbc4dc1df8d727b7bee308e0c95dcfe190dc3f655d19dc027a7f522d496f79
+SHA512 (windows-sys-0.52.0.crate) = 24ee0df246c2b456a4987a9124786a28acd358768cc7d1305bccd81bc5bb8822b81a03fb18d35174a520b911c6d9b685f81a34ab319fee13da3b985273584f03
+Size (windows-sys-0.52.0.crate) = 2576877 bytes
+BLAKE2s (windows-sys-0.60.2.crate) = daf2bbdf7df252ef06247d9f47faaeb11f0514958a9b8892555986ca2b30fb66
+SHA512 (windows-sys-0.60.2.crate) = a48aa1b66479451e431032737b63dc62eac6f63c251534e258de75bbee4858829faf5e641756566f00e153b08548ba32beb437b5ea42e9531e3fcbd8eb25209d
+Size (windows-sys-0.60.2.crate) = 2518479 bytes
+BLAKE2s (windows-sys-0.61.2.crate) = 88f1c3307e8ff43ad37316780e5d3e475be394aade0aacac6857e305c6120f6e
+SHA512 (windows-sys-0.61.2.crate) = e6c8f61f0724dafca7821ee9b9c07237ccfee69be269be2fa7318eb48b151285ecf63e860aa1fe303639222fe11268e3773f37c2dd79f923029af58c645edb3f
+Size (windows-sys-0.61.2.crate) = 2517186 bytes
+BLAKE2s (windows-targets-0.52.6.crate) = fed2bcf4841033cc3a74ee335a8e3914c4857457f829c88977081182cc6498b9
+SHA512 (windows-targets-0.52.6.crate) = d6d2dbd96096c6c396dba141a9817e377c35877f3b2fe58b2553280c7cfcb1ed6ee75bd4d62c9b882662de67ddaf0c1049b91530d29c94dd709c230e08eb895f
+Size (windows-targets-0.52.6.crate) = 6403 bytes
+BLAKE2s (windows-targets-0.53.5.crate) = 02139ba602d4206335c726bfed1fd085e78b9f7285da19e7b7a5312498055b3f
+SHA512 (windows-targets-0.53.5.crate) = 285a2ad1c370d8485a84c3921b180416c79ad596ace5ce30a1100fe0d9725139e9302f5728d4874789d8abe5c53e9b30ff4738d969da1c07940bde2b01c7a203
+Size (windows-targets-0.53.5.crate) = 7126 bytes
+BLAKE2s (windows_aarch64_gnullvm-0.52.6.crate) = 22fddd2aa2d7419001b540e1cb9c3702ae4fb2972cd94448e325c00729033c87
+SHA512 (windows_aarch64_gnullvm-0.52.6.crate) = f62b2d942bdb3a9353465b07d47b93de179bb706511aa497e4addd74cff95e689a9b633e7801ce786e73b5ae5f30b506b6faa199c5ab86eefdc1d94652df79c5
+Size (windows_aarch64_gnullvm-0.52.6.crate) = 435718 bytes
+BLAKE2s (windows_aarch64_gnullvm-0.53.1.crate) = 1353141a76a7d7ce7deaa1738e827c7ebe68b9195ed9b526d5b1c0b611369813
+SHA512 (windows_aarch64_gnullvm-0.53.1.crate) = 5e480e54af09c142ff75e77f733327dd3862f32620e0b075e02bf8119e955ef2f3acfa00f7c7a4d6a2b034d03d70c45e191a40c8af628484d0e76a0b15870cdc
+Size (windows_aarch64_gnullvm-0.53.1.crate) = 787748 bytes
+BLAKE2s (windows_aarch64_msvc-0.52.6.crate) = 8f50e782f7ff109325620b809e13c08b948f85e0519cf249f70c5b605866d07c
+SHA512 (windows_aarch64_msvc-0.52.6.crate) = a3e21305ad0e6de38f5b5ed5d37ee5825b7521064163bcdf31d63341cd87983f54377865d2daf3bb480d2d0aa66d6f598fa09540ec1d71baea74569c86bd213b
+Size (windows_aarch64_msvc-0.52.6.crate) = 832615 bytes
+BLAKE2s (windows_aarch64_msvc-0.53.1.crate) = 2d25a0e0732513886c89c2f48d92088937a749ddfc854a9e3df02dbf11fa6821
+SHA512 (windows_aarch64_msvc-0.53.1.crate) = 81175036792cab41ede4e3a21ae324e638c39604e14c7a3dae8db4090cec45b385aca32416ccad50ab194ce06d3a71f2e12473767d680348795383dbb2d17426
+Size (windows_aarch64_msvc-0.53.1.crate) = 838009 bytes
+BLAKE2s (windows_i686_gnu-0.52.6.crate) = 2bf3eede03990415b9bd6ab49e4d91d962d8ebe6303560848a2e9ef9f316331a
+SHA512 (windows_i686_gnu-0.52.6.crate) = a1f6b5dd23d17ec3567bc9d11a4be6f35e196eee21ca342e9b88dbaa6a5f7c46e439c834b77e724f32ac22c0d81573746b3b513a6c944a221b92b2c76fe98822
+Size (windows_i686_gnu-0.52.6.crate) = 880402 bytes
+BLAKE2s (windows_i686_gnu-0.53.1.crate) = 27bb7adb47e2d26853b8332e3378428e17ecfd3f30d6c24db7a1f90dd29c98fe
+SHA512 (windows_i686_gnu-0.53.1.crate) = 5af8519d1e0d9947738d5aa339091695467a55b62fe97bac680eb469679180a54e9f65e2ef8d0c34d4e63ede8c16f34a0fbd1f54ff53924ebcd6cef17c3474d2
+Size (windows_i686_gnu-0.53.1.crate) = 939775 bytes
+BLAKE2s (windows_i686_gnullvm-0.52.6.crate) = eafa7c3fdf8ce35ecee51ebf161ba59c582395537555921b94b8af952c9dd38c
+SHA512 (windows_i686_gnullvm-0.52.6.crate) = 95f13af855d530acc0b856214478d4b11b8dbab3f8f79dd223d0b009790c0e46d096fc1773e0277997deb2d5b96c704f17f23c7df11411524629f75415dec99f
+Size (windows_i686_gnullvm-0.52.6.crate) = 475940 bytes
+BLAKE2s (windows_i686_gnullvm-0.53.1.crate) = 8d77cefe6d8f88cff718928ee78ff763611999c490842d7c086af834bbccf302
+SHA512 (windows_i686_gnullvm-0.53.1.crate) = 492bee10b669c799a93b7ad98ee7a15c0ccde4d13697408612cd345cca2b7efc38b85c550eaf1b83470bee53ff3324045b7b751c3a31ac0e214b9965e05bbffc
+Size (windows_i686_gnullvm-0.53.1.crate) = 857396 bytes
+BLAKE2s (windows_i686_msvc-0.52.6.crate) = 085f4ed29405a0351ecf62874780f2692e011dc0cedbd945270fe7d1f032987a
+SHA512 (windows_i686_msvc-0.52.6.crate) = ca97913ce202d73266cf55947b868bea7e964a4516b6a096a81aeab6a60ee73867171032ced35e3afccff741ddfb2def7468343b6eceb95253e4d4f349efbf96
+Size (windows_i686_msvc-0.52.6.crate) = 901163 bytes
+BLAKE2s (windows_i686_msvc-0.53.1.crate) = 6066dfdf129d1012cd8b7a098219713513c36b94567ddecaf349a52cad4e7810
+SHA512 (windows_i686_msvc-0.53.1.crate) = b78f2a21e88adb65bf8a81bfa8a133d6ebe18b8394220421bd5f10b619528f118a255dacf6e78014ddb4db8a27b936be7af6e137133d914e1cc0902139a0e0cd
+Size (windows_i686_msvc-0.53.1.crate) = 907688 bytes
+BLAKE2s (windows_x86_64_gnu-0.52.6.crate) = 72ec3c98937b6cb854cb09a78dabd88a71f56e96cdc99a3b46d4641b395f81ec
+SHA512 (windows_x86_64_gnu-0.52.6.crate) = c4086bb0280042f2bef9b556283b67f8a5cacddd209e1c5fabec63decec6d4fd2d6a7071407973981b98ae0c0cf7034fc612f9e70dc6d3eed9acdec771ae31cb
+Size (windows_x86_64_gnu-0.52.6.crate) = 836363 bytes
+BLAKE2s (windows_x86_64_gnu-0.53.1.crate) = 9759bb6902b53dceeb2d73051de8e4a1c06b717e7ac872e0004ccf2cf6a86b49
+SHA512 (windows_x86_64_gnu-0.53.1.crate) = e4c5bbc49202636c03953aa0fff1f1affed69970aae198cb4d1eeb5dda63b9e07b0cfaf46015bca3b8c48fd90d3552488a6a7b17b53aebf9776e996ccbf9c7d5
+Size (windows_x86_64_gnu-0.53.1.crate) = 903712 bytes
+BLAKE2s (windows_x86_64_gnullvm-0.52.6.crate) = ad13afdffbbdfe4ac64f82de4ee71ba660793294c737412ddc7aa3f47109ddb3
+SHA512 (windows_x86_64_gnullvm-0.52.6.crate) = 67681f5859e249c56b0183181811f6212cc7008d6471dad78aecc7ebe3d027686b19210b8aa9014c554410f69f913d21ce2aca928eea905eab779bea26464cbd
+Size (windows_x86_64_gnullvm-0.52.6.crate) = 435707 bytes
+BLAKE2s (windows_x86_64_gnullvm-0.53.1.crate) = 8474dc0d01d115afbab8ab35d54fdaa130560011b0343e7a45f3ab0d68e2ab38
+SHA512 (windows_x86_64_gnullvm-0.53.1.crate) = 30b8919ee9ad36acfac4e28a3b22378ce11ee73d35de60dd9c9217adf14e85222da5526100b0252372e039e559a5bf734ba134b10f707657d542341056947588
+Size (windows_x86_64_gnullvm-0.53.1.crate) = 787739 bytes
+BLAKE2s (windows_x86_64_msvc-0.52.6.crate) = 5b8f356fbbd3d304c939f19f79a10b72a39c1b27decca9b0449a4af3761e9a79
+SHA512 (windows_x86_64_msvc-0.52.6.crate) = 21944cd8e3a481b514509e73ae3f62722fe7ed380d37ea0c25f8fbdeba79174dd52ff65d898838da5df4197894b74e00f45d47489418e978753b4e55c7e623e7
+Size (windows_x86_64_msvc-0.52.6.crate) = 832564 bytes
+BLAKE2s (windows_x86_64_msvc-0.53.1.crate) = b42857dca5a992ba1d1974fca457c09ce6d0a24913df2a189f65a1d1cd818b7e
+SHA512 (windows_x86_64_msvc-0.53.1.crate) = bb724f4051db90ce49b552021e746769e5dfe3792b522416539960c27f9ace14f63c47f0f240d6563257377129b5f3ba2c262c6fea9610428aa860fe035f189c
+Size (windows_x86_64_msvc-0.53.1.crate) = 837950 bytes
+BLAKE2s (writeable-0.6.3.crate) = 53c01bade7fa841f47bb3ab4d69c3a6c6634ce4a3fb181d341127fec0ec409a7
+SHA512 (writeable-0.6.3.crate) = e3c1c498b7901f6287024ddf47862e0caf7759edde25a219304209a46ca183af15fb5fb33f87b84b2ce0ed531161d8414743bb424a7446d88b2a0c6d034bb87f
+Size (writeable-0.6.3.crate) = 26685 bytes
+BLAKE2s (yoke-0.8.3.crate) = b15572f5a96b6a624741d059479e9c038db70bd4bdc1271cc14ce7b8f212fedb
+SHA512 (yoke-0.8.3.crate) = 1ce402bb9f3384d29227a2a2fb70c9917ad90b30952db7d0c5f089f8901fc737236760c53f48e5b97550cde95e727d72f416a9483afc591cc5c67f043dd977ca
+Size (yoke-0.8.3.crate) = 33132 bytes
+BLAKE2s (yoke-derive-0.8.2.crate) = 5552ca3b0c844667a0532da6e6a4bbfc41777d56d6615f80ca4c90020a50dedf
+SHA512 (yoke-derive-0.8.2.crate) = ed37289fe2dfcafda13be24b3e4aae1fbbdd6f52c42a1f2d770771f458af0d17b4cbe487941381b4bd692388e9818b45c686bdcd6229918e0f5b6fced1068ca3
+Size (yoke-derive-0.8.2.crate) = 15077 bytes
+BLAKE2s (zerofrom-0.1.8.crate) = e4556207ca152d5db021585d8a1abbe8716874408e05ed958a97aa7855d54338
+SHA512 (zerofrom-0.1.8.crate) = a58d39960368594c7f1fb8aac29e8032c079439d1302a40a4b5a2f8d33b8de934f745a77fffa856c371118701c27e3841615dd68b27a838dbf8d6aa7a7744e51
+Size (zerofrom-0.1.8.crate) = 6156 bytes
+BLAKE2s (zerofrom-derive-0.1.7.crate) = 52b904d29063b9715093de99a7d4cf41fbc97b1b2960aa85c3fee707fdaed051
+SHA512 (zerofrom-derive-0.1.7.crate) = 22de0ee75a7463e6b263f17d91291d2e2800ae0b5066304b24459b58de8e528e36de77dda149d74abdecd26cab58f0ed34aa603b3361f00976929efdb3371da6
+Size (zerofrom-derive-0.1.7.crate) = 8853 bytes
+BLAKE2s (zeroize-1.9.0.crate) = 7e85bac8a82286d99089af3bf08e519a3a2d8781f00469383b6f984d6c36e2f1
+SHA512 (zeroize-1.9.0.crate) = 89850700ae24f6f98e8a888699c3eb4f49ed8cba0ad3de79c45438c9b5836242649f6143d9a02a1dbbfe081add8c20c4c88ca4b2b773ab8c47a28cf450355706
+Size (zeroize-1.9.0.crate) = 24480 bytes
+BLAKE2s (zerotrie-0.2.4.crate) = 598277dafb06f822150ebec2accf1b8ee21b21f3e9c06fbb25f2740bacd92ac7
+SHA512 (zerotrie-0.2.4.crate) = daaa133ef8916a14ee12af2de5e042086d6817822fe498c49fbadd2c03c5512f0adcd5ada268fa5bf70ae2dd23f14245a0f099a37abe09251478303c069a410d
+Size (zerotrie-0.2.4.crate) = 83690 bytes
+BLAKE2s (zerovec-0.11.6.crate) = 5f1496ff27bceddc4422d64619588e721d0ae1752020f136e2ca9c28be2996be
+SHA512 (zerovec-0.11.6.crate) = 9a0b22654ce3b76cd5e9bdfbcf8d5344dff4116f37f6e22ee4687677c7fe8a69122a2cc86b0d722ff2040547a810528a5a0d9bb5d8c4ac2d3fa0323dcd18320d
+Size (zerovec-0.11.6.crate) = 128583 bytes
+BLAKE2s (zerovec-derive-0.11.3.crate) = ce2e0a4b320a155a388b6e0931e4d05178e67f7758c3f98f273091f826891dfa
+SHA512 (zerovec-derive-0.11.3.crate) = 1195cf266a28cf1bdc48a02b2b721f24c785b317dc421475818cc0fe616230bbb91468ab2f67981bf6d3ea2b830eca2e10b85502f622ecb06880e4fff376d29f
+Size (zerovec-derive-0.11.3.crate) = 22115 bytes
+SHA1 (patch-build_.moduleignore) = 21729f07fa77cee810f9f6c09e174eced3235037
+SHA1 (patch-build_lib_electron.ts) = acbf49937bf2f421508f214461e8dbae7796c077
+SHA1 (patch-build_lib_propertyInitOrderChecker.ts) = d9cb0bd1d1a1c939d70d7bd2613a83e14bcf605b
+SHA1 (patch-extensions_emmet_src_test_testUtils.ts) = 2294e657ef99aacbc798741bd57cf738ae253698
+SHA1 (patch-extensions_microsoft-authentication_esbuild.mts) = 39b4f40cbe698245f73e7d8ce8f336d73f33cb0a
+SHA1 (patch-extensions_vscode-api-tests_src_utils.ts) = c5ad554a553627ad1cbd6224ac65ae344d3cb709
+SHA1 (patch-extensions_vscode-test-resolver_src_util_processes.ts) = 0c12236d82de96689e63207d58d3b53afe3e95c0
+SHA1 (patch-node__modules_@vscode_gulp-electron_src_download.js) = a227c96154801b7626ae7b88c0aeff2539d9d5f2
+SHA1 (patch-node__modules_@vscode_os-proxy-resolver-pkgsrc-x64_package.json) = c5854fbf3cfb486a76e471ee64b1338afc448355
+SHA1 (patch-node__modules_@vscode_os-proxy-resolver_index.js) = dacd79489a8cf4bb1256aaa75c30d2e3887128d8
+SHA1 (patch-node__modules_@vscode_os-proxy-resolver_package.json) = f295e21cbd65f3b6591f0486fa1e44517d807815
+SHA1 (patch-node__modules_kerberos_binding.gyp) = 499b56fcc27f12d7f28a4af5bce7ff4153c12c91
+SHA1 (patch-node__modules_kerberos_src_kerberos__common.h) = ddd3efdc51d2806bea30462308b324c151657d21
+SHA1 (patch-node__modules_kerberos_src_unix_kerberos__gss.cc) = 97b3764efae0f7960ab29095d28c1de2f3e58f52
+SHA1 (patch-node__modules_nan_nan__callbacks__12__inl.h) = 143be1a1a1c4d56826b2a47ae0ee79861b437124
+SHA1 (patch-node__modules_nan_nan__callbacks__pre__12__inl.h) = 564be4abb048f212ef9161d60dba55e6447ac261
+SHA1 (patch-node__modules_nan_nan__implementation__12__inl.h) = f3891db57a1f79bd9df8d0300e5a6da4d21010a1
+SHA1 (patch-node__modules_node-pty_src_unix_pty.cc) = 2fe40bee73a0a2cfe3fd191d62c3396751cc1211
+SHA1 (patch-node__modules_playwright_node__modules_playwright-core_lib_serverRegistry.js) = 42ef2e20cd3bd6660485a66a6355a38e35da99e2
+SHA1 (patch-node__modules_ssh2_lib_protocol_crypto_src_binding.cc) = 844aa1c80b27462a986ddfe31aad544e4321a21a
+SHA1 (patch-os-proxy-resolver_Cargo.toml) = 0e9e2b4fb828e64b611c4de9bcb7c6ec97b2e6d1
+SHA1 (patch-os-proxy-resolver_src_platform_linux.rs) = 0d575486a7484e085a63f266f3772e1397a5941e
+SHA1 (patch-os-proxy-resolver_src_platform_mod.rs) = 3dcb74339de0aedad95256a47f9ddbc5e8e6dbbd
+SHA1 (patch-package.json) = 4a950a6294e9b3edda2b4e8d49c730e48ad14351
+SHA1 (patch-remote_node__modules_kerberos_binding.gyp) = 1757f0393f883a84a62cf3b5324151d52d0f33a7
+SHA1 (patch-remote_node__modules_kerberos_src_kerberos__common.h) = aece552353c01cf81e4039a4a5a63a6ee7e491cd
+SHA1 (patch-remote_node__modules_kerberos_src_unix_kerberos__gss.cc) = 73325a526c324fa530ffe3d08d4d8d60ebd6c1be
+SHA1 (patch-remote_node__modules_nan_nan__callbacks__12__inl.h) = 8cee8e910c9b02f132b06cf49aac78faa5f01ed0
+SHA1 (patch-remote_node__modules_nan_nan__callbacks__pre__12__inl.h) = eea4a24c840b433f34793f6a516212c497c8d3a7
+SHA1 (patch-remote_node__modules_nan_nan__implementation__12__inl.h) = a0cb1791f7cd9f82daa4ef5ed3b31b71962e30f8
+SHA1 (patch-remote_node__modules_node-pty_src_unix_pty.cc) = 4b7d908e2f5209580e68c647af99d58620232809
+SHA1 (patch-remote_package.json) = 0732d5618a67c2ee269f47abec260b53cac89cec
+SHA1 (patch-resources_linux_bin_code.sh) = befe711cb6d15c48f9fa29d33bbfb9c159729ffa
+SHA1 (patch-resources_server_bin_helpers_check-requirements-linux.sh) = 90f14dad3ed64eb9664120bccd08b09546d51bc4
+SHA1 (patch-src_bootstrap-node.ts) = 0d20be9750811fdb558d9379ba352cdb993044aa
+SHA1 (patch-src_mainImpl.ts) = 871d807d2e1e5af265decb4f48820a31f5ca43f1
+SHA1 (patch-src_vs_base_common_platform.ts) = 13d6e4907389b7f0b131ff68d6f674fd0dc2194d
+SHA1 (patch-src_vs_base_node_ps.ts) = e8b7e17bd39f80910f13425f824780d5d72a6447
+SHA1 (patch-src_vs_code_electron-main_app.ts) = 73554fa0f62f937c871e3554357d511b2c455ac8
+SHA1 (patch-src_vs_platform_agentHost_test_node_codex_codexProviderConfiguration.test.ts) = c1a95e22f60509beb8a98d6f5fccf287720f1153
+SHA1 (patch-src_vs_platform_environment_node_userDataPath.ts) = 7dafb853d4bb45a456bae6a12e74e490266f2d95
+SHA1 (patch-src_vs_platform_extensionManagement_node_extensionSignatureVerificationService.ts) = ee4ca6fa79dae2f7dd2f3c0e901f7532e3138b35
+SHA1 (patch-src_vs_platform_native_electron-main_nativeHostMainService.ts) = bb4709f0debba4d057cb41a84074a69dadb89b32
+SHA1 (patch-src_vs_workbench_api_browser_mainThreadTask.ts) = 33ef42bde539ec60530c559c5d38abfa240f3ae6
+SHA1 (patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts) = e5c6857a30e6ebc8ebc5879bdbeacc5c9d3d8bd0
+SHA1 (patch-test_automation_src_electron.ts) = dc6e7d34338958a4a105ad44f2c77a5c94bc9759
+SHA1 (patch-test_smoke_src_areas_task_task.test.ts) = c86990b6a8213fcdc1311b560293ca1129775447
+SHA1 (patch-test_smoke_src_areas_terminal_terminal.test.ts) = 3179cf4733e8db96463e847b646d19a9f7766f08
diff --git a/vscode/files/npm-wrapper.sh.in b/vscode/files/npm-wrapper.sh.in
new file mode 100644
index 0000000000..e60b34c361
--- /dev/null
+++ b/vscode/files/npm-wrapper.sh.in
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+if [ "$1" = "pack" ]; then
+    spec="$2"
+    shift 2
+    dest=.
+    while [ $# -gt 0 ]; do
+        case "$1" in
+        --pack-destination)
+            dest="$2"
+            shift 2
+            ;;
+        *)
+            shift
+            ;;
+        esac
+    done
+
+    case "${spec}" in
+    @github/copilot-linux-%%ELECTRON_ARCH%%@%%COPILOT_CLI_VERSION%%)
+        tgz="%%WRKSRC%%/copilot-linux-%%ELECTRON_ARCH%%-%%COPILOT_CLI_VERSION%%.tgz"
+        ;;
+    *)
+        echo "npm-wrapper: Error: no local tarball found for ${spec}." >&2
+        exit 1
+        ;;
+    esac
+
+    cp "${tgz}" "${dest}/" || exit 1
+
+    exit 0
+fi
+
+exec %%NPM_REAL%% "$@"
diff --git a/vscode/patches/patch-build_.moduleignore b/vscode/patches/patch-build_.moduleignore
new file mode 100644
index 0000000000..d73b43b957
--- /dev/null
+++ b/vscode/patches/patch-build_.moduleignore
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Skip @github/copilot
+
+--- build/.moduleignore.orig	2026-10-24 15:47:51.461744311 +0000
++++ build/.moduleignore
+@@ -223,7 +223,7 @@ zone.js/dist/**
+ 
+ # @github/copilot - strip unneeded binaries and files
+ # Agent Host uses the runtime bundled with @github/copilot-sdk.
+-@github/copilot/**
++# @github/copilot/**
+ 
+ # Standalone Copilot CLI platform packages are not product dependencies.
+ @github/copilot-darwin-arm64/**
diff --git a/vscode/patches/patch-build_lib_electron.ts b/vscode/patches/patch-build_lib_electron.ts
new file mode 100644
index 0000000000..8d6ccce70a
--- /dev/null
+++ b/vscode/patches/patch-build_lib_electron.ts
@@ -0,0 +1,19 @@
+$NetBSD$
+
+* Use own electron
+
+--- build/lib/electron.ts.orig	2026-10-24 15:59:30.984483184 +0000
++++ build/lib/electron.ts
+@@ -240,10 +240,11 @@ export const config = {
+ 	winIcon: 'resources/win32/code.ico',
+ 	token: process.env['GITHUB_TOKEN'],
+ 	repo: electronAssetResolver,
+-	validateChecksum: true,
++	validateChecksum: false,
+ 	checksumFile: path.join(root, 'build', 'checksums', 'electron.txt'),
+ 	createVersionedResources: useVersionedUpdate,
+ 	productVersionString: versionedResourcesFolder,
++	unsafelyDisableChecksums: true,
+ };
+ 
+ function getElectron(arch: string): () => NodeJS.ReadWriteStream {
diff --git a/vscode/patches/patch-build_lib_layersChecker.ts b/vscode/patches/patch-build_lib_layersChecker.ts
deleted file mode 100644
index 304e2fdb23..0000000000
--- a/vscode/patches/patch-build_lib_layersChecker.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD$
-
-* Add support to NetBSD and FreeBSD
-
---- build/lib/layersChecker.ts.orig	2025-02-10 13:07:56.000000000 +0000
-+++ build/lib/layersChecker.ts
-@@ -407,7 +407,7 @@ function checkFile(program: ts.Program, 
- function createProgram(tsconfigPath: string): ts.Program {
- 	const tsConfig = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
- 
--	const configHostParser: ts.ParseConfigHost = { fileExists: existsSync, readDirectory: ts.sys.readDirectory, readFile: file => readFileSync(file, 'utf8'), useCaseSensitiveFileNames: process.platform === 'linux' };
-+	const configHostParser: ts.ParseConfigHost = { fileExists: existsSync, readDirectory: ts.sys.readDirectory, readFile: file => readFileSync(file, 'utf8'), useCaseSensitiveFileNames: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') };
- 	const tsConfigParsed = ts.parseJsonConfigFileContent(tsConfig.config, configHostParser, resolve(dirname(tsconfigPath)), { noEmit: true });
- 
- 	const compilerHost = ts.createCompilerHost(tsConfigParsed.options, true);
diff --git a/vscode/patches/patch-build_lib_propertyInitOrderChecker.ts b/vscode/patches/patch-build_lib_propertyInitOrderChecker.ts
index e1a7dc9601..fca13124be 100644
--- a/vscode/patches/patch-build_lib_propertyInitOrderChecker.ts
+++ b/vscode/patches/patch-build_lib_propertyInitOrderChecker.ts
@@ -2,14 +2,14 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- build/lib/propertyInitOrderChecker.ts.orig	2025-05-26 10:14:14.611029867 +0000
+--- build/lib/propertyInitOrderChecker.ts.orig	2026-10-24 16:00:54.451696700 +0000
 +++ build/lib/propertyInitOrderChecker.ts
-@@ -109,7 +109,7 @@ let errorCount = 0;
+@@ -45,7 +45,7 @@ let errorCount = 0;
  function createProgram(tsconfigPath: string): ts.Program {
  	const tsConfig = ts.readConfigFile(tsconfigPath, ts.sys.readFile);
  
 -	const configHostParser: ts.ParseConfigHost = { fileExists: fs.existsSync, readDirectory: ts.sys.readDirectory, readFile: file => fs.readFileSync(file, 'utf8'), useCaseSensitiveFileNames: process.platform === 'linux' };
-+	const configHostParser: ts.ParseConfigHost = { fileExists: fs.existsSync, readDirectory: ts.sys.readDirectory, readFile: file => fs.readFileSync(file, 'utf8'), useCaseSensitiveFileNames: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') };
++	const configHostParser: ts.ParseConfigHost = { fileExists: fs.existsSync, readDirectory: ts.sys.readDirectory, readFile: file => fs.readFileSync(file, 'utf8'), useCaseSensitiveFileNames: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd')  };
  	const tsConfigParsed = ts.parseJsonConfigFileContent(tsConfig.config, configHostParser, path.resolve(path.dirname(tsconfigPath)), { noEmit: true });
  
  	const compilerHost = ts.createCompilerHost(tsConfigParsed.options, true);
diff --git a/vscode/patches/patch-build_lib_snapshotLoader.ts b/vscode/patches/patch-build_lib_snapshotLoader.ts
deleted file mode 100644
index 572a202915..0000000000
--- a/vscode/patches/patch-build_lib_snapshotLoader.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD$
-
-* Add support to NetBSD and FreeBSD
-
---- build/lib/snapshotLoader.ts.orig	2025-02-10 13:07:56.000000000 +0000
-+++ build/lib/snapshotLoader.ts
-@@ -25,7 +25,7 @@ export namespace snaps {
- 			break;
- 
- 		case 'win32':
--		case 'linux':
-+		case 'linux': case 'freebsd': case 'netbsd':
- 			loaderFilepath = `VSCode-${process.platform}-${arch}/resources/app/out/vs/loader.js`;
- 			startupBlobFilepath = `VSCode-${process.platform}-${arch}/snapshot_blob.bin`;
- 			break;
diff --git a/vscode/patches/patch-extensions_emmet_src_test_testUtils.ts b/vscode/patches/patch-extensions_emmet_src_test_testUtils.ts
index 6afc262820..7ab040e8dc 100644
--- a/vscode/patches/patch-extensions_emmet_src_test_testUtils.ts
+++ b/vscode/patches/patch-extensions_emmet_src_test_testUtils.ts
@@ -2,7 +2,7 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- extensions/emmet/src/test/testUtils.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- extensions/emmet/src/test/testUtils.ts.orig	2026-10-24 16:07:43.430774206 +0000
 +++ extensions/emmet/src/test/testUtils.ts
 @@ -31,7 +31,7 @@ export function createRandomFile(content
  }
diff --git a/vscode/patches/patch-extensions_microsoft-authentication_esbuild.mts b/vscode/patches/patch-extensions_microsoft-authentication_esbuild.mts
new file mode 100644
index 0000000000..82c678256c
--- /dev/null
+++ b/vscode/patches/patch-extensions_microsoft-authentication_esbuild.mts
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- extensions/microsoft-authentication/esbuild.mts.orig	2026-10-24 16:08:35.415172524 +0000
++++ extensions/microsoft-authentication/esbuild.mts
+@@ -21,6 +21,8 @@ switch (process.platform) {
+ 	case 'win32': platformFolder = 'windows'; break;
+ 	case 'darwin': platformFolder = 'macos'; break;
+ 	case 'linux': platformFolder = 'linux'; break;
++	case 'freebsd': platformFolder = 'freebsd'; break
++	case 'netbsd': platformFolder = 'netbsd'; break
+ 	default: throw new Error(`Unsupported platform: ${process.platform}`);
+ }
+ 
diff --git a/vscode/patches/patch-extensions_vscode-api-tests_src_utils.ts b/vscode/patches/patch-extensions_vscode-api-tests_src_utils.ts
index 561d6263af..8f43039f50 100644
--- a/vscode/patches/patch-extensions_vscode-api-tests_src_utils.ts
+++ b/vscode/patches/patch-extensions_vscode-api-tests_src_utils.ts
@@ -2,7 +2,7 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- extensions/vscode-api-tests/src/utils.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- extensions/vscode-api-tests/src/utils.ts.orig	2026-10-24 16:12:03.935728953 +0000
 +++ extensions/vscode-api-tests/src/utils.ts
 @@ -38,7 +38,7 @@ export async function deleteFile(file: v
  }
diff --git a/vscode/patches/patch-extensions_vscode-test-resolver_src_util_processes.ts b/vscode/patches/patch-extensions_vscode-test-resolver_src_util_processes.ts
index 9f2b3a159c..bad4186472 100644
--- a/vscode/patches/patch-extensions_vscode-test-resolver_src_util_processes.ts
+++ b/vscode/patches/patch-extensions_vscode-test-resolver_src_util_processes.ts
@@ -2,7 +2,7 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- extensions/vscode-test-resolver/src/util/processes.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- extensions/vscode-test-resolver/src/util/processes.ts.orig	2026-10-24 16:13:21.727714048 +0000
 +++ extensions/vscode-test-resolver/src/util/processes.ts
 @@ -20,7 +20,7 @@ export function terminateProcess(p: cp.C
  		} catch (err) {
diff --git a/vscode/patches/patch-node__modules_@vscode_gulp-electron_src_download.js b/vscode/patches/patch-node__modules_@vscode_gulp-electron_src_download.js
new file mode 100644
index 0000000000..eba64e192b
--- /dev/null
+++ b/vscode/patches/patch-node__modules_@vscode_gulp-electron_src_download.js
@@ -0,0 +1,14 @@
+$NetBSD$
+
+* Use own electron
+
+--- node_modules/@vscode/gulp-electron/src/download.js.orig	2026-10-24 16:14:34.531145714 +0000
++++ node_modules/@vscode/gulp-electron/src/download.js
+@@ -195,6 +195,7 @@ async function download(opts) {
+     artifactName: opts.artifactName,
+     artifactSuffix: opts.artifactSuffix,
+     token: opts.token,
++    unsafelyDisableChecksums: opts.unsafelyDisableChecksums,
+     downloadOptions: {
+       getProgressCallback: (progress) => {
+         if (bar) bar.update(progress.percent);
diff --git a/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver-pkgsrc-x64_package.json b/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver-pkgsrc-x64_package.json
new file mode 100644
index 0000000000..6904f37f56
--- /dev/null
+++ b/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver-pkgsrc-x64_package.json
@@ -0,0 +1,22 @@
+$NetBSD$
+
+* Use own os-proxy-resolver
+
+--- node_modules/@vscode/os-proxy-resolver-pkgsrc-x64/package.json.orig	2026-10-24 14:39:10.626666392 +0000
++++ node_modules/@vscode/os-proxy-resolver-pkgsrc-x64/package.json
+@@ -1,12 +1,11 @@
+ {
+-  "name": "@vscode/os-proxy-resolver-linux-x64-gnu",
++  "name": "@vscode/os-proxy-resolver-pkgsrc-@ELECTRON_ARCH@",
+   "version": "0.4.0",
+-  "description": "Native binding for @vscode/os-proxy-resolver on Linux x64",
++  "description": "Native binding for @vscode/os-proxy-resolver on @OPSYS@ @ELECTRON_ARCH@",
+   "main": "os_proxy_resolver.node",
+   "files": ["os_proxy_resolver.node", "LICENSE.txt", "ThirdPartyNotices.txt"],
+-  "os": ["linux"],
++  "os": ["@LOWER_OPSYS@"],
+   "cpu": ["x64"],
+-  "libc": ["glibc"],
+   "publishConfig": { "access": "public" },
+   "license": "MIT",
+   "repository": "github:microsoft/os-proxy-resolver"
diff --git a/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_index.js b/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_index.js
new file mode 100644
index 0000000000..b5bdcf51d5
--- /dev/null
+++ b/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_index.js
@@ -0,0 +1,17 @@
+$NetBSD$
+
+* Use own os-proxy-resolver
+
+--- node_modules/@vscode/os-proxy-resolver/index.js.orig	2026-10-24 14:52:34.731523761 +0000
++++ node_modules/@vscode/os-proxy-resolver/index.js
+@@ -12,6 +12,10 @@ const packages = {
+ 	'linux-x64-musl': '@vscode/os-proxy-resolver-linux-x64-musl',
+ 	'win32-arm64': '@vscode/os-proxy-resolver-win32-arm64-msvc',
+ 	'win32-x64': '@vscode/os-proxy-resolver-win32-x64-msvc',
++	'freebsd-arm64': '@vscode/os-proxy-resolver-pkgsrc-arm64',
++	'freebsd-x64': '@vscode/os-proxy-resolver-pkgsrc-x64'
++	'netbsd-arm64': '@vscode/os-proxy-resolver-pkgsrc-arm64',
++	'netbsd-x64': '@vscode/os-proxy-resolver-pkgsrc-x64'
+ };
+ 
+ const platform = getPlatformPackage();
diff --git a/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_package.json b/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_package.json
new file mode 100644
index 0000000000..d1dc3d414c
--- /dev/null
+++ b/vscode/patches/patch-node__modules_@vscode_os-proxy-resolver_package.json
@@ -0,0 +1,18 @@
+$NetBSD$
+
+* Use own os-proxy-resolver
+
+--- node_modules/@vscode/os-proxy-resolver/package.json.orig	2026-10-25 11:26:48.068228000 +0000
++++ node_modules/@vscode/os-proxy-resolver/package.json
+@@ -39,6 +39,8 @@
+     "@vscode/os-proxy-resolver-linux-x64-gnu": "0.4.0",
+     "@vscode/os-proxy-resolver-linux-x64-musl": "0.4.0",
+     "@vscode/os-proxy-resolver-win32-arm64-msvc": "0.4.0",
+-    "@vscode/os-proxy-resolver-win32-x64-msvc": "0.4.0"
++    "@vscode/os-proxy-resolver-win32-x64-msvc": "0.4.0",
++    "@vscode/os-proxy-resolver-pkgsrc-arm64": "0.4.0",
++    "@vscode/os-proxy-resolver-pkgsrc-x64": "0.4.0"
+   }
+-}
+\ No newline at end of file
++}
diff --git a/vscode/patches/patch-node__modules_kerberos_binding.gyp b/vscode/patches/patch-node__modules_kerberos_binding.gyp
index 2996394208..57a8a703d8 100644
--- a/vscode/patches/patch-node__modules_kerberos_binding.gyp
+++ b/vscode/patches/patch-node__modules_kerberos_binding.gyp
@@ -2,9 +2,9 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- node_modules/kerberos/binding.gyp.orig	2025-02-24 07:29:25.935536457 +0000
+--- node_modules/kerberos/binding.gyp.orig	2026-10-25 08:38:45.374306531 +0000
 +++ node_modules/kerberos/binding.gyp
-@@ -54,7 +54,7 @@
+@@ -54,14 +54,14 @@
              ]
            }
          }],
@@ -13,3 +13,37 @@ $NetBSD$
            'sources': [
              'src/unix/base64.cc',
              'src/unix/kerberos_gss.cc',
+             'src/unix/kerberos_unix.cc'
+           ]
+         }],
+-        ['(OS=="mac" or OS=="linux") and (kerberos_use_rtld!="true")', {
++        ['(OS=="mac" or OS=="linux" or OS=="freebsd" or OS=="netbsd") and (kerberos_use_rtld!="true")', {
+           'link_settings': {
+             'libraries': [
+               '-lkrb5',
+@@ -78,7 +78,7 @@
+             }]
+           ]
+         }],
+-        ['(OS=="mac" or OS=="linux") and (kerberos_use_rtld=="true")', {
++        ['(OS=="mac" or OS=="linux" or OS=="freebsd" or OS=="netbsd") and (kerberos_use_rtld=="true")', {
+           'defines': ['KERBEROS_USE_RTLD=1'],
+           'link_settings': {
+             'libraries': [
+@@ -86,6 +86,16 @@
+             ]
+           },
+         }],
++        ['OS=="freebsd" or OS=="netbsd"', {
++          'include_dirs+': [
++            '<!(pkg-config krb5 --cflags-only-I | sed -E "s/(-I *|-isystem *)//g")',
++          ],
++          'link_settings': {
++            'library_dirs': [
++              '<!(pkg-config krb5 --libs-only-L | sed -e "s/-L//g")',
++            ]
++          },
++        }],
+         ['OS=="win"',  {
+           'sources': [
+             'src/win32/kerberos_sspi.cc',
diff --git a/vscode/patches/patch-node__modules_kerberos_src_kerberos__common.h b/vscode/patches/patch-node__modules_kerberos_src_kerberos__common.h
index 7b51ccb32a..16d7b29e7d 100644
--- a/vscode/patches/patch-node__modules_kerberos_src_kerberos__common.h
+++ b/vscode/patches/patch-node__modules_kerberos_src_kerberos__common.h
@@ -2,7 +2,7 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- node_modules/kerberos/src/kerberos_common.h.orig	2025-02-24 07:29:55.217866785 +0000
+--- node_modules/kerberos/src/kerberos_common.h.orig	2026-10-25 08:51:11.245999677 +0000
 +++ node_modules/kerberos/src/kerberos_common.h
 @@ -1,7 +1,7 @@
  #ifndef KERBEROS_COMMON_H
diff --git a/vscode/patches/patch-node__modules_kerberos_src_unix_kerberos__gss.cc b/vscode/patches/patch-node__modules_kerberos_src_unix_kerberos__gss.cc
new file mode 100644
index 0000000000..c7b6559976
--- /dev/null
+++ b/vscode/patches/patch-node__modules_kerberos_src_unix_kerberos__gss.cc
@@ -0,0 +1,24 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- node_modules/kerberos/src/unix/kerberos_gss.cc.orig	2026-10-25 08:51:52.363705515 +0000
++++ node_modules/kerberos/src/unix/kerberos_gss.cc
+@@ -65,10 +65,17 @@ struct DLOpenHandle {
+   DLOpenHandle& operator=(DLOpenHandle&) = delete;
+ };
+ 
++#if !defined(__FreeBSD__) && !defined(__NetBSD__)
+ #define DYLIBS(V) \
+     V(gssapi, "libgssapi_krb5.so.2") \
+     V(krb5, "libkrb5.so.3") \
+     V(comerr, "libcom_err.so.2")
++#else
++#define DYLIBS(V) \
++    V(gssapi, "libgssapi_krb5.so.2") \
++    V(krb5, "libkrb5.so.3") \
++    V(comerr, "libcom_err.so.3")
++#endif
+ 
+ #define LIBRARY_HANDLE_GETTER(name, lib) \
+     static const DLOpenHandle& name ## _handle() { \
diff --git a/vscode/patches/patch-node__modules_nan_nan__callbacks__12__inl.h b/vscode/patches/patch-node__modules_nan_nan__callbacks__12__inl.h
new file mode 100644
index 0000000000..0b39c67ce7
--- /dev/null
+++ b/vscode/patches/patch-node__modules_nan_nan__callbacks__12__inl.h
@@ -0,0 +1,336 @@
+$NetBSD$
+
+* Fiy snapshot usage
+
+--- node_modules/nan/nan_callbacks_12_inl.h.orig	2026-10-25 09:12:54.053903100 +0000
++++ node_modules/nan/nan_callbacks_12_inl.h
+@@ -178,14 +178,27 @@ class PropertyCallbackInfo {
+   NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo)
+ };
+ 
++// Gated on V8_EXTERNAL_POINTER_TAG_COUNT (defined alongside the tagged
++// Value() API) rather than a V8_MAJOR_VERSION cutoff, since Node and
++// Chromium/Electron ship divergent V8 snapshots under the same major.
++// Tag must match the one used by imp::NewExternal.
++inline void* GetExternalValue(v8::Local<v8::External> ext) {
++#ifdef V8_EXTERNAL_POINTER_TAG_COUNT
++  return ext->Value(v8::kExternalPointerTypeTagDefault);
++#else
++  return ext->Value();
++#endif
++}
++
+ namespace imp {
++
+ static
+ void FunctionCallbackWrapper(const v8::FunctionCallbackInfo<v8::Value> &info) {
+   v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
+   FunctionCallback callback = reinterpret_cast<FunctionCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kFunctionIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kFunctionIndex)
++          .As<v8::Value>().As<v8::External>())));
+   FunctionCallbackInfo<v8::Value>
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   callback(cbinfo);
+@@ -203,8 +216,8 @@ void GetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   GetterCallback callback = reinterpret_cast<GetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kGetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kGetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -221,8 +234,8 @@ void SetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   SetterCallback callback = reinterpret_cast<SetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kSetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kSetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), value, cbinfo);
+ }
+ 
+@@ -240,8 +253,8 @@ void GetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   GetterCallback callback = reinterpret_cast<GetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kGetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kGetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -258,8 +271,8 @@ void SetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   SetterCallback callback = reinterpret_cast<SetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kSetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kSetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property, value, cbinfo);
+ }
+ 
+@@ -282,8 +295,8 @@ v8::Intercepted PropertyGetterCallbackWr
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -300,8 +313,8 @@ v8::Intercepted PropertySetterCallbackWr
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), value, cbinfo);
+ }
+ 
+@@ -320,8 +333,8 @@ void PropertyGetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -338,8 +351,8 @@ void PropertySetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), value, cbinfo);
+ }
+ 
+@@ -357,8 +370,8 @@ void PropertyEnumeratorCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyEnumeratorCallback callback =
+       reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyEnumeratorIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyEnumeratorIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(cbinfo);
+ }
+ 
+@@ -376,8 +389,8 @@ v8::Intercepted PropertyDeleterCallbackW
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -394,8 +407,8 @@ v8::Intercepted PropertyQueryCallbackWra
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -411,8 +424,8 @@ void PropertyDeleterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -428,8 +441,8 @@ void PropertyQueryCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -446,8 +459,8 @@ void PropertyGetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -464,8 +477,8 @@ void PropertySetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, value, cbinfo);
+ }
+ 
+@@ -482,8 +495,8 @@ void PropertyEnumeratorCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyEnumeratorCallback callback =
+       reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyEnumeratorIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyEnumeratorIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(cbinfo);
+ }
+ 
+@@ -499,8 +512,8 @@ void PropertyDeleterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -516,8 +529,8 @@ void PropertyQueryCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -535,8 +548,8 @@ v8::Intercepted IndexGetterCallbackWrapp
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, cbinfo);
+ }
+ 
+@@ -553,8 +566,8 @@ v8::Intercepted IndexSetterCallbackWrapp
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, value, cbinfo);
+ }
+ 
+@@ -572,8 +585,8 @@ void IndexGetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, cbinfo);
+ }
+ 
+@@ -589,8 +602,8 @@ void IndexSetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, value, cbinfo);
+ }
+ 
+@@ -609,9 +622,9 @@ void IndexEnumeratorCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexEnumeratorCallback callback = reinterpret_cast<IndexEnumeratorCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(
++          Nan::GetExternalValue(obj->GetInternalField(
+               kIndexPropertyEnumeratorIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++              .As<v8::Value>().As<v8::External>())));
+   callback(cbinfo);
+ }
+ 
+@@ -628,8 +641,9 @@ v8::Intercepted IndexDeleterCallbackWrap
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(
++              kIndexPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, cbinfo);
+ }
+ 
+@@ -644,8 +658,8 @@ v8::Intercepted IndexQueryCallbackWrappe
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, cbinfo);
+ }
+ 
+@@ -660,8 +674,9 @@ void IndexDeleterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(
++              kIndexPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, cbinfo);
+ }
+ 
+@@ -676,8 +691,8 @@ void IndexQueryCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, cbinfo);
+ }
+ 
diff --git a/vscode/patches/patch-node__modules_nan_nan__callbacks__pre__12__inl.h b/vscode/patches/patch-node__modules_nan_nan__callbacks__pre__12__inl.h
new file mode 100644
index 0000000000..89765301d1
--- /dev/null
+++ b/vscode/patches/patch-node__modules_nan_nan__callbacks__pre__12__inl.h
@@ -0,0 +1,17 @@
+$NetBSD$
+
+* Fix snapshot usage
+
+--- node_modules/nan/nan_callbacks_pre_12_inl.h.orig	2026-10-24 14:36:31.000000000 +0000
++++ node_modules/nan/nan_callbacks_pre_12_inl.h
+@@ -287,6 +287,10 @@ class PropertyCallbackInfo<v8::Integer> 
+   }
+ };
+ 
++inline void* GetExternalValue(v8::Local<v8::External> ext) {
++  return ext->Value();
++}
++
+ namespace imp {
+ template<typename T>
+ class ReturnValueImp : public ReturnValue<T> {
diff --git a/vscode/patches/patch-node__modules_nan_nan__implementation__12__inl.h b/vscode/patches/patch-node__modules_nan_nan__implementation__12__inl.h
new file mode 100644
index 0000000000..9653062c7f
--- /dev/null
+++ b/vscode/patches/patch-node__modules_nan_nan__implementation__12__inl.h
@@ -0,0 +1,56 @@
+$NetBSD$
+
+* Fiy snapshot usage
+
+--- node_modules/nan/nan_implementation_12_inl.h.orig	2026-10-24 14:36:31.891597000 +0000
++++ node_modules/nan/nan_implementation_12_inl.h
+@@ -14,6 +14,22 @@
+ 
+ namespace imp {
+ 
++// Recent V8 versions (currently Chromium/Electron's V8 snapshot; not yet in
++// any released Node) gained an ExternalPointerTypeTag parameter on
++// v8::External::New().  Detect that API via the V8_EXTERNAL_POINTER_TAG_COUNT
++// macro (defined in <v8-internal.h> alongside the new signature) rather than
++// a V8_MAJOR_VERSION cutoff, since Node and Chromium ship divergent V8
++// snapshots under the same major version.  Externals created via this helper
++// are read back through imp::GetExternalPointer in nan_callbacks_12_inl.h,
++// which uses the matching kExternalPointerTypeTagDefault tag.
++inline v8::Local<v8::External> NewExternal(v8::Isolate* isolate, void* value) {
++#ifdef V8_EXTERNAL_POINTER_TAG_COUNT
++  return v8::External::New(isolate, value, v8::kExternalPointerTypeTagDefault);
++#else
++  return v8::External::New(isolate, value);
++#endif
++}
++
+ //=== Array ====================================================================
+ 
+ Factory<v8::Array>::return_t
+@@ -76,7 +92,7 @@ Factory<v8::Date>::New(double value) {
+ 
+ Factory<v8::External>::return_t
+ Factory<v8::External>::New(void * value) {
+-  return v8::External::New(v8::Isolate::GetCurrent(), value);
++  return imp::NewExternal(v8::Isolate::GetCurrent(), value);
+ }
+ 
+ //=== Function =================================================================
+@@ -92,7 +108,7 @@ Factory<v8::Function>::New( FunctionCall
+ 
+   obj->SetInternalField(
+       imp::kFunctionIndex
+-    , v8::External::New(isolate, reinterpret_cast<void *>(callback)));
++    , imp::NewExternal(isolate, reinterpret_cast<void *>(callback)));
+ 
+   v8::Local<v8::Value> val = v8::Local<v8::Value>::New(isolate, data);
+ 
+@@ -128,7 +144,7 @@ Factory<v8::FunctionTemplate>::New( Func
+ 
+     obj->SetInternalField(
+         imp::kFunctionIndex
+-      , v8::External::New(isolate, reinterpret_cast<void *>(callback)));
++      , imp::NewExternal(isolate, reinterpret_cast<void *>(callback)));
+     v8::Local<v8::Value> val = v8::Local<v8::Value>::New(isolate, data);
+ 
+     if (!val.IsEmpty()) {
diff --git a/vscode/patches/patch-node__modules_node-pty_src_unix_pty.cc b/vscode/patches/patch-node__modules_node-pty_src_unix_pty.cc
index cf87a5e779..c6bf803783 100644
--- a/vscode/patches/patch-node__modules_node-pty_src_unix_pty.cc
+++ b/vscode/patches/patch-node__modules_node-pty_src_unix_pty.cc
@@ -1,46 +1,24 @@
 $NetBSD$
 
-* Fix build on NetBSD
+* Add support to NetBSD and FreeBSD
 
---- node_modules/node-pty/src/unix/pty.cc.orig	2025-03-01 10:48:28.000000000 +0000
+--- node_modules/node-pty/src/unix/pty.cc.orig	2026-10-24 14:36:35.000000000 +0000
 +++ node_modules/node-pty/src/unix/pty.cc
-@@ -42,6 +42,9 @@
+@@ -44,7 +44,7 @@
  #elif defined(__FreeBSD__)
  #include <libutil.h>
  #include <termios.h>
-+#elif defined(__NetBSD__)
-+#include <util.h>
-+#include <termios.h>
- #endif
- 
- /* Some platforms name VWERASE and VDISCARD differently */
-@@ -445,10 +448,10 @@ Napi::Value PtyFork(const Napi::Callback
-   }
+-#elif defined(__OpenBSD__)
++#elif defined(__OpenBSD__) || defined(__NetBSD__)
+ #include <util.h>
+ #include <termios.h>
  #endif
+@@ -112,7 +112,7 @@ struct ExitEvent {
+   int exit_code = 0, signal_code = 0;
+ };
  
--  Napi::Object obj = Napi::Object::New(napiEnv);  
--  obj.Set("fd", Napi::Number::New(napiEnv, master));  
--  obj.Set("pid", Napi::Number::New(napiEnv, pid));  
--  obj.Set("pty", Napi::String::New(napiEnv, ptsname(master)));  
-+  Napi::Object obj = Napi::Object::New(napiEnv);
-+  obj.Set("fd", Napi::Number::New(napiEnv, master));
-+  obj.Set("pid", Napi::Number::New(napiEnv, pid));
-+  obj.Set("pty", Napi::String::New(napiEnv, ptsname(master)));
- 
-   // Set up process exit callback.
-   Napi::Function cb = info[10].As<Napi::Function>();
-@@ -489,10 +492,10 @@ Napi::Value PtyOpen(const Napi::Callback
-     throw Napi::Error::New(env, "Could not set slave fd to nonblocking.");
-   }
- 
--  Napi::Object obj = Napi::Object::New(env);  
--  obj.Set("master", Napi::Number::New(env, master));  
--  obj.Set("slave", Napi::Number::New(env, slave));  
--  obj.Set("pty", Napi::String::New(env, ptsname(master)));  
-+  Napi::Object obj = Napi::Object::New(env);
-+  obj.Set("master", Napi::Number::New(env, master));
-+  obj.Set("slave", Napi::Number::New(env, slave));
-+  obj.Set("pty", Napi::String::New(env, ptsname(master)));
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
  
-   return obj;
- }
+ static int
+ SetCloseOnExec(int fd) {
diff --git a/vscode/patches/patch-node__modules_playwright_node__modules_playwright-core_lib_serverRegistry.js b/vscode/patches/patch-node__modules_playwright_node__modules_playwright-core_lib_serverRegistry.js
new file mode 100644
index 0000000000..f728c452c4
--- /dev/null
+++ b/vscode/patches/patch-node__modules_playwright_node__modules_playwright-core_lib_serverRegistry.js
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- node_modules/playwright/node_modules/playwright-core/lib/serverRegistry.js.orig	2026-10-24 14:36:35.000000000 +0000
++++ node_modules/playwright/node_modules/playwright-core/lib/serverRegistry.js
+@@ -7277,7 +7277,7 @@ async function canConnectTo(descriptor) 
+   });
+ }
+ var defaultCacheDirectory = (() => {
+-  if (process.platform === "linux")
++  if (process.platform === "linux" || process.platform === "freebsd" || process.platform === "netbsd")
+     return process.env.XDG_CACHE_HOME || import_path2.default.join(import_os.default.homedir(), ".cache");
+   if (process.platform === "darwin")
+     return import_path2.default.join(import_os.default.homedir(), "Library", "Caches");
diff --git a/vscode/patches/patch-node__modules_ssh2_lib_protocol_crypto_src_binding.cc b/vscode/patches/patch-node__modules_ssh2_lib_protocol_crypto_src_binding.cc
new file mode 100644
index 0000000000..23d871cce5
--- /dev/null
+++ b/vscode/patches/patch-node__modules_ssh2_lib_protocol_crypto_src_binding.cc
@@ -0,0 +1,62 @@
+$NetBSD$
+
+* Backport: https://github.com/mscdex/ssh2/commit/45522bb8723d8ecf459a1d222086e56074c11682
+crypto: use more direct Isolate retrieval
+GetIsolate() is removed in recent versions of V8
+
+--- node_modules/ssh2/lib/protocol/crypto/src/binding.cc.orig	2026-10-24 14:36:32.224653000 +0000
++++ node_modules/ssh2/lib/protocol/crypto/src/binding.cc
+@@ -86,7 +86,7 @@ class ChaChaPolyCipher : public ObjectWr
+ 
+     Local<Function> func = Nan::GetFunction(tpl).ToLocalChecked();
+     Local<Context> context = Nan::GetCurrentContext();
+-    v8::Isolate* isolate = context->GetIsolate();
++    v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ 
+     constructor().Set(isolate, func);
+ 
+@@ -420,7 +420,7 @@ class AESGCMCipher : public ObjectWrap {
+ 
+     Local<Function> func = Nan::GetFunction(tpl).ToLocalChecked();
+     Local<Context> context = Nan::GetCurrentContext();
+-    v8::Isolate* isolate = context->GetIsolate();
++    v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ 
+     constructor().Set(isolate, func);
+ 
+@@ -661,7 +661,7 @@ class GenericCipher : public ObjectWrap 
+ 
+     Local<Function> func = Nan::GetFunction(tpl).ToLocalChecked();
+     Local<Context> context = Nan::GetCurrentContext();
+-    v8::Isolate* isolate = context->GetIsolate();
++    v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ 
+     constructor().Set(isolate, func);
+ 
+@@ -1058,7 +1058,7 @@ class ChaChaPolyDecipher : public Object
+ 
+     Local<Function> func = Nan::GetFunction(tpl).ToLocalChecked();
+     Local<Context> context = Nan::GetCurrentContext();
+-    v8::Isolate* isolate = context->GetIsolate();
++    v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ 
+     constructor().Set(isolate, func);
+ 
+@@ -1486,7 +1486,7 @@ class AESGCMDecipher : public ObjectWrap
+ 
+     Local<Function> func = Nan::GetFunction(tpl).ToLocalChecked();
+     Local<Context> context = Nan::GetCurrentContext();
+-    v8::Isolate* isolate = context->GetIsolate();
++    v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ 
+     constructor().Set(isolate, func);
+ 
+@@ -1738,7 +1738,7 @@ class GenericDecipher : public ObjectWra
+ 
+     Local<Function> func = Nan::GetFunction(tpl).ToLocalChecked();
+     Local<Context> context = Nan::GetCurrentContext();
+-    v8::Isolate* isolate = context->GetIsolate();
++    v8::Isolate* isolate = v8::Isolate::GetCurrent();
+ 
+     constructor().Set(isolate, func);
+ 
diff --git a/vscode/patches/patch-os-proxy-resolver_Cargo.toml b/vscode/patches/patch-os-proxy-resolver_Cargo.toml
new file mode 100644
index 0000000000..6fe311434c
--- /dev/null
+++ b/vscode/patches/patch-os-proxy-resolver_Cargo.toml
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- os-proxy-resolver/Cargo.toml.orig	2026-10-24 14:57:08.411400029 +0000
++++ os-proxy-resolver/Cargo.toml
+@@ -117,7 +117,7 @@ windows-sys = { version = "0.60", featur
+ # non-Windows dependency above.
+ rquickjs-sys = { version = "0.12.1", optional = true }
+ 
+-[target.'cfg(target_os = "linux")'.dependencies]
++[target.'cfg(any(target_os = "linux", target_os = "freebsd", target_os = "netbsd"))'.dependencies]
+ libc = "0.2"
+ 
+ [dev-dependencies]
diff --git a/vscode/patches/patch-os-proxy-resolver_src_platform_linux.rs b/vscode/patches/patch-os-proxy-resolver_src_platform_linux.rs
new file mode 100644
index 0000000000..b0e1ed10ae
--- /dev/null
+++ b/vscode/patches/patch-os-proxy-resolver_src_platform_linux.rs
@@ -0,0 +1,74 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- os-proxy-resolver/src/platform/linux.rs.orig	2026-10-24 15:44:13.935143969 +0000
++++ os-proxy-resolver/src/platform/linux.rs
+@@ -216,9 +216,23 @@ fn configure_watcher_command(command: &m
+     // operations only invoke async-signal-safe Linux system calls.
+     unsafe {
+         command.pre_exec(move || {
++            #[cfg(target_os = "linux")]
+             if libc::prctl(libc::PR_SET_PDEATHSIG, libc::SIGKILL) == -1 {
+                 return Err(std::io::Error::last_os_error());
+             }
++            #[cfg(target_os = "freebsd")]
++            {
++                let mut sig = libc::SIGKILL;
++                let ret = libc::procctl(
++                    libc::P_PID,
++                    0,
++                    libc::PROC_PDEATHSIG_CTL,
++                    &mut sig as *mut libc::c_int as *mut libc::c_void,
++                );
++                if ret == -1 {
++                    return Err(std::io::Error::last_os_error());
++                }
++            }
+             // The parent may have exited between fork and PR_SET_PDEATHSIG.
+             if libc::getppid() != expected_parent {
+                 libc::_exit(1);
+@@ -247,13 +261,23 @@ fn mark_file_descriptors_close_on_exec(
+     // succeeds while preventing every non-stdio descriptor from reaching the
+     // watcher program.
+     // SAFETY: close_range operates on the calling process's descriptor table.
++    #[cfg(any(target_os = "linux", target_os = "freebsd"))]
+     loop {
++       #[cfg(target_os = "linux")]
+         let result = unsafe {
+             libc::syscall(
+                 libc::SYS_close_range,
+                 3 as libc::c_uint,
+                 libc::c_uint::MAX,
+                 libc::CLOSE_RANGE_CLOEXEC,
++            ) as libc::c_int
++        };
++        #[cfg(target_os = "freebsd")]
++        let result = unsafe {
++            libc::close_range(
++                3 as libc::c_uint,
++                libc::c_uint::MAX,
++                libc::CLOSE_RANGE_CLOEXEC as libc::c_int,
+             )
+         };
+         if result == 0 {
+@@ -266,7 +290,19 @@ fn mark_file_descriptors_close_on_exec(
+ 
+     // Older kernels and restricted seccomp profiles may not support
+     // close_range. fcntl is slower but provides equivalent behavior.
++    #[cfg(target_os = "netbsd")]
++    let file_descriptor_limit = {
++        // SAFETY: F_MAXFD only queries the descriptor table.
++        let max_fd = unsafe { libc::fcntl(0, libc::F_MAXFD) };
++        if max_fd >= 0 {
++            max_fd + 1
++        } else {
++            file_descriptor_limit.map_err(io::Error::from_raw_os_error)?
++        }
++    };
++    #[cfg(not(target_os = "netbsd"))]
+     let file_descriptor_limit = file_descriptor_limit.map_err(io::Error::from_raw_os_error)?;
++
+     for fd in 3..file_descriptor_limit {
+         let flags = loop {
+             // SAFETY: fcntl accepts any integer descriptor and reports EBADF
diff --git a/vscode/patches/patch-os-proxy-resolver_src_platform_mod.rs b/vscode/patches/patch-os-proxy-resolver_src_platform_mod.rs
new file mode 100644
index 0000000000..d074bfd18b
--- /dev/null
+++ b/vscode/patches/patch-os-proxy-resolver_src_platform_mod.rs
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- os-proxy-resolver/src/platform/mod.rs.orig	2026-10-24 15:44:57.182930670 +0000
++++ os-proxy-resolver/src/platform/mod.rs
+@@ -19,7 +19,7 @@ use crate::types::{PlatformProxyConfig, 
+ #[cfg(target_os = "macos")]
+ #[path = "macos.rs"]
+ mod imp;
+-#[cfg(target_os = "linux")]
++#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "netbsd"))]
+ #[path = "linux.rs"]
+ mod imp;
+ #[cfg(windows)]
diff --git a/vscode/patches/patch-package.json b/vscode/patches/patch-package.json
new file mode 100644
index 0000000000..59ce8333c3
--- /dev/null
+++ b/vscode/patches/patch-package.json
@@ -0,0 +1,14 @@
+$NetBSD$
+
+* Add node-ovsx-sign for Open VSX, the open-source alternative to Microsoft’s Visual Studio Code Marketplace
+
+--- package.json.orig	2026-10-14 09:52:01.000000000 +0000
++++ package.json
+@@ -156,6 +156,7 @@
+     "native-is-elevated": "0.9.0",
+     "native-keymap": "^3.3.5",
+     "node-addon-api": "^6.0.0",
++    "node-ovsx-sign": "^1.2.0",
+     "node-pty": "^1.2.0-beta.15",
+     "open": "^10.1.2",
+     "playwright-core": "1.61.0-alpha-2026-06-04",
diff --git a/vscode/patches/patch-product.json b/vscode/patches/patch-product.json
deleted file mode 100644
index 9f0eb8d55b..0000000000
--- a/vscode/patches/patch-product.json
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD$
-
-* Set marketplace
-
---- product.json.orig	2025-02-10 13:07:56.000000000 +0000
-+++ product.json
-@@ -1,4 +1,17 @@
- {
-+	"quality": "stable",
-+	"extensionsGallery": {
-+		"serviceUrl": "https://open-vsx.org/vscode/gallery";,
-+		"itemUrl": "https://open-vsx.org/vscode/item";
-+	},
-+	"linkProtectionTrustedDomains": [
-+		"https://open-vsx.org";
-+	],
-+	"documentationUrl": "https://code.visualstudio.com/docs";,
-+	"requestFeatureUrl": "https://github.com/Microsoft/vscode/issues";,
-+	"introductoryVideosUrl": "https://go.microsoft.com/fwlink/?linkid=832146";,
-+	"tipsAndTricksUrl": "https://go.microsoft.com/fwlink/?linkid=852118";,
-+	"keyboardShortcutsUrlLinux": "https://go.microsoft.com/fwlink/?linkid=832144";,
- 	"nameShort": "Code - OSS",
- 	"nameLong": "Code - OSS",
- 	"applicationName": "code-oss",
diff --git a/vscode/patches/patch-remote_node__modules_kerberos_binding.gyp b/vscode/patches/patch-remote_node__modules_kerberos_binding.gyp
index 37b0182012..7e2e43e1cd 100644
--- a/vscode/patches/patch-remote_node__modules_kerberos_binding.gyp
+++ b/vscode/patches/patch-remote_node__modules_kerberos_binding.gyp
@@ -2,9 +2,9 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- remote/node_modules/kerberos/binding.gyp.orig	2025-03-01 08:55:16.000000000 +0000
+--- remote/node_modules/kerberos/binding.gyp.orig	2026-10-24 14:37:41.000000000 +0000
 +++ remote/node_modules/kerberos/binding.gyp
-@@ -54,7 +54,7 @@
+@@ -54,14 +54,14 @@
              ]
            }
          }],
@@ -13,3 +13,37 @@ $NetBSD$
            'sources': [
              'src/unix/base64.cc',
              'src/unix/kerberos_gss.cc',
+             'src/unix/kerberos_unix.cc'
+           ]
+         }],
+-        ['(OS=="mac" or OS=="linux") and (kerberos_use_rtld!="true")', {
++        ['(OS=="mac" or OS=="linux" or OS=="freebsd" or OS=="netbsd") and (kerberos_use_rtld!="true")', {
+           'link_settings': {
+             'libraries': [
+               '-lkrb5',
+@@ -78,7 +78,7 @@
+             }]
+           ]
+         }],
+-        ['(OS=="mac" or OS=="linux") and (kerberos_use_rtld=="true")', {
++        ['(OS=="mac" or OS=="linux" or OS=="freebsd" or OS=="netbsd") and (kerberos_use_rtld=="true")', {
+           'defines': ['KERBEROS_USE_RTLD=1'],
+           'link_settings': {
+             'libraries': [
+@@ -86,6 +86,16 @@
+             ]
+           },
+         }],
++        ['OS=="freebsd" or OS=="netbsd"', {
++          'include_dirs+': [
++            '<!(pkg-config krb5 --cflags-only-I | sed -E "s/(-I *|-isystem *)//g")',
++          ],
++          'link_settings': {
++            'library_dirs': [
++              '<!(pkg-config krb5 --libs-only-L | sed -e "s/-L//g")',
++            ]
++          },
++        }],
+         ['OS=="win"',  {
+           'sources': [
+             'src/win32/kerberos_sspi.cc',
diff --git a/vscode/patches/patch-remote_node__modules_kerberos_src_kerberos__common.h b/vscode/patches/patch-remote_node__modules_kerberos_src_kerberos__common.h
index 254cc41f21..c2ea90774e 100644
--- a/vscode/patches/patch-remote_node__modules_kerberos_src_kerberos__common.h
+++ b/vscode/patches/patch-remote_node__modules_kerberos_src_kerberos__common.h
@@ -2,7 +2,7 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- remote/node_modules/kerberos/src/kerberos_common.h.orig	2025-03-01 08:55:16.000000000 +0000
+--- remote/node_modules/kerberos/src/kerberos_common.h.orig	2026-10-24 14:37:41.000000000 +0000
 +++ remote/node_modules/kerberos/src/kerberos_common.h
 @@ -1,7 +1,7 @@
  #ifndef KERBEROS_COMMON_H
diff --git a/vscode/patches/patch-remote_node__modules_kerberos_src_unix_kerberos__gss.cc b/vscode/patches/patch-remote_node__modules_kerberos_src_unix_kerberos__gss.cc
new file mode 100644
index 0000000000..e03bd94a46
--- /dev/null
+++ b/vscode/patches/patch-remote_node__modules_kerberos_src_unix_kerberos__gss.cc
@@ -0,0 +1,24 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- remote/node_modules/kerberos/src/unix/kerberos_gss.cc.orig	2026-10-24 14:37:41.000000000 +0000
++++ remote/node_modules/kerberos/src/unix/kerberos_gss.cc
+@@ -65,10 +65,17 @@ struct DLOpenHandle {
+   DLOpenHandle& operator=(DLOpenHandle&) = delete;
+ };
+ 
++#if !defined(__FreeBSD__) && !defined(__NetBSD__)
+ #define DYLIBS(V) \
+     V(gssapi, "libgssapi_krb5.so.2") \
+     V(krb5, "libkrb5.so.3") \
+     V(comerr, "libcom_err.so.2")
++#else
++#define DYLIBS(V) \
++    V(gssapi, "libgssapi_krb5.so.2") \
++    V(krb5, "libkrb5.so.3") \
++    V(comerr, "libcom_err.so.3")
++#endif
+ 
+ #define LIBRARY_HANDLE_GETTER(name, lib) \
+     static const DLOpenHandle& name ## _handle() { \
diff --git a/vscode/patches/patch-remote_node__modules_nan_nan__callbacks__12__inl.h b/vscode/patches/patch-remote_node__modules_nan_nan__callbacks__12__inl.h
new file mode 100644
index 0000000000..a466976e22
--- /dev/null
+++ b/vscode/patches/patch-remote_node__modules_nan_nan__callbacks__12__inl.h
@@ -0,0 +1,336 @@
+$NetBSD$
+
+* Fiy snapshot usage
+
+--- remote/node_modules/nan/nan_callbacks_12_inl.h.orig	2026-10-24 14:37:41.009441000 +0000
++++ remote/node_modules/nan/nan_callbacks_12_inl.h
+@@ -178,14 +178,27 @@ class PropertyCallbackInfo {
+   NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo)
+ };
+ 
++// Gated on V8_EXTERNAL_POINTER_TAG_COUNT (defined alongside the tagged
++// Value() API) rather than a V8_MAJOR_VERSION cutoff, since Node and
++// Chromium/Electron ship divergent V8 snapshots under the same major.
++// Tag must match the one used by imp::NewExternal.
++inline void* GetExternalValue(v8::Local<v8::External> ext) {
++#ifdef V8_EXTERNAL_POINTER_TAG_COUNT
++  return ext->Value(v8::kExternalPointerTypeTagDefault);
++#else
++  return ext->Value();
++#endif
++}
++
+ namespace imp {
++
+ static
+ void FunctionCallbackWrapper(const v8::FunctionCallbackInfo<v8::Value> &info) {
+   v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
+   FunctionCallback callback = reinterpret_cast<FunctionCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kFunctionIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kFunctionIndex)
++          .As<v8::Value>().As<v8::External>())));
+   FunctionCallbackInfo<v8::Value>
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   callback(cbinfo);
+@@ -203,8 +216,8 @@ void GetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   GetterCallback callback = reinterpret_cast<GetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kGetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kGetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -221,8 +234,8 @@ void SetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   SetterCallback callback = reinterpret_cast<SetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kSetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kSetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), value, cbinfo);
+ }
+ 
+@@ -240,8 +253,8 @@ void GetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   GetterCallback callback = reinterpret_cast<GetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kGetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kGetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -258,8 +271,8 @@ void SetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   SetterCallback callback = reinterpret_cast<SetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kSetterIndex)
+-          .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kSetterIndex)
++          .As<v8::Value>().As<v8::External>())));
+   callback(property, value, cbinfo);
+ }
+ 
+@@ -282,8 +295,8 @@ v8::Intercepted PropertyGetterCallbackWr
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -300,8 +313,8 @@ v8::Intercepted PropertySetterCallbackWr
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), value, cbinfo);
+ }
+ 
+@@ -320,8 +333,8 @@ void PropertyGetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -338,8 +351,8 @@ void PropertySetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), value, cbinfo);
+ }
+ 
+@@ -357,8 +370,8 @@ void PropertyEnumeratorCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyEnumeratorCallback callback =
+       reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyEnumeratorIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyEnumeratorIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(cbinfo);
+ }
+ 
+@@ -376,8 +389,8 @@ v8::Intercepted PropertyDeleterCallbackW
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -394,8 +407,8 @@ v8::Intercepted PropertyQueryCallbackWra
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -411,8 +424,8 @@ void PropertyDeleterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -428,8 +441,8 @@ void PropertyQueryCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property.As<v8::String>(), cbinfo);
+ }
+ 
+@@ -446,8 +459,8 @@ void PropertyGetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -464,8 +477,8 @@ void PropertySetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, value, cbinfo);
+ }
+ 
+@@ -482,8 +495,8 @@ void PropertyEnumeratorCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyEnumeratorCallback callback =
+       reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyEnumeratorIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyEnumeratorIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(cbinfo);
+ }
+ 
+@@ -499,8 +512,8 @@ void PropertyDeleterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -516,8 +529,8 @@ void PropertyQueryCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(property, cbinfo);
+ }
+ 
+@@ -535,8 +548,8 @@ v8::Intercepted IndexGetterCallbackWrapp
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, cbinfo);
+ }
+ 
+@@ -553,8 +566,8 @@ v8::Intercepted IndexSetterCallbackWrapp
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, value, cbinfo);
+ }
+ 
+@@ -572,8 +585,8 @@ void IndexGetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyGetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyGetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, cbinfo);
+ }
+ 
+@@ -589,8 +602,8 @@ void IndexSetterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertySetterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertySetterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, value, cbinfo);
+ }
+ 
+@@ -609,9 +622,9 @@ void IndexEnumeratorCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexEnumeratorCallback callback = reinterpret_cast<IndexEnumeratorCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(
++          Nan::GetExternalValue(obj->GetInternalField(
+               kIndexPropertyEnumeratorIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++              .As<v8::Value>().As<v8::External>())));
+   callback(cbinfo);
+ }
+ 
+@@ -628,8 +641,9 @@ v8::Intercepted IndexDeleterCallbackWrap
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(
++              kIndexPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, cbinfo);
+ }
+ 
+@@ -644,8 +658,8 @@ v8::Intercepted IndexQueryCallbackWrappe
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   return callback(index, cbinfo);
+ }
+ 
+@@ -660,8 +674,9 @@ void IndexDeleterCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyDeleterIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(
++              kIndexPropertyDeleterIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, cbinfo);
+ }
+ 
+@@ -676,8 +691,8 @@ void IndexQueryCallbackWrapper(
+       cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());
+   IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(
+       reinterpret_cast<intptr_t>(
+-          obj->GetInternalField(kIndexPropertyQueryIndex)
+-              .As<v8::Value>().As<v8::External>()->Value()));
++          Nan::GetExternalValue(obj->GetInternalField(kIndexPropertyQueryIndex)
++              .As<v8::Value>().As<v8::External>())));
+   callback(index, cbinfo);
+ }
+ 
diff --git a/vscode/patches/patch-remote_node__modules_nan_nan__callbacks__pre__12__inl.h b/vscode/patches/patch-remote_node__modules_nan_nan__callbacks__pre__12__inl.h
new file mode 100644
index 0000000000..8b563219a4
--- /dev/null
+++ b/vscode/patches/patch-remote_node__modules_nan_nan__callbacks__pre__12__inl.h
@@ -0,0 +1,17 @@
+$NetBSD$
+
+* Fiy snapshot usage
+
+--- remote/node_modules/nan/nan_callbacks_pre_12_inl.h.orig	2026-10-24 14:37:41.009523000 +0000
++++ remote/node_modules/nan/nan_callbacks_pre_12_inl.h
+@@ -287,6 +287,10 @@ class PropertyCallbackInfo<v8::Integer> 
+   }
+ };
+ 
++inline void* GetExternalValue(v8::Local<v8::External> ext) {
++  return ext->Value();
++}
++
+ namespace imp {
+ template<typename T>
+ class ReturnValueImp : public ReturnValue<T> {
diff --git a/vscode/patches/patch-remote_node__modules_nan_nan__implementation__12__inl.h b/vscode/patches/patch-remote_node__modules_nan_nan__implementation__12__inl.h
new file mode 100644
index 0000000000..8749ce44e7
--- /dev/null
+++ b/vscode/patches/patch-remote_node__modules_nan_nan__implementation__12__inl.h
@@ -0,0 +1,56 @@
+$NetBSD$
+
+* Fiy snapshot usage
+
+--- remote/node_modules/nan/nan_implementation_12_inl.h.orig	2026-10-24 14:37:41.010004000 +0000
++++ remote/node_modules/nan/nan_implementation_12_inl.h
+@@ -14,6 +14,22 @@
+ 
+ namespace imp {
+ 
++// Recent V8 versions (currently Chromium/Electron's V8 snapshot; not yet in
++// any released Node) gained an ExternalPointerTypeTag parameter on
++// v8::External::New().  Detect that API via the V8_EXTERNAL_POINTER_TAG_COUNT
++// macro (defined in <v8-internal.h> alongside the new signature) rather than
++// a V8_MAJOR_VERSION cutoff, since Node and Chromium ship divergent V8
++// snapshots under the same major version.  Externals created via this helper
++// are read back through imp::GetExternalPointer in nan_callbacks_12_inl.h,
++// which uses the matching kExternalPointerTypeTagDefault tag.
++inline v8::Local<v8::External> NewExternal(v8::Isolate* isolate, void* value) {
++#ifdef V8_EXTERNAL_POINTER_TAG_COUNT
++  return v8::External::New(isolate, value, v8::kExternalPointerTypeTagDefault);
++#else
++  return v8::External::New(isolate, value);
++#endif
++}
++
+ //=== Array ====================================================================
+ 
+ Factory<v8::Array>::return_t
+@@ -76,7 +92,7 @@ Factory<v8::Date>::New(double value) {
+ 
+ Factory<v8::External>::return_t
+ Factory<v8::External>::New(void * value) {
+-  return v8::External::New(v8::Isolate::GetCurrent(), value);
++  return imp::NewExternal(v8::Isolate::GetCurrent(), value);
+ }
+ 
+ //=== Function =================================================================
+@@ -92,7 +108,7 @@ Factory<v8::Function>::New( FunctionCall
+ 
+   obj->SetInternalField(
+       imp::kFunctionIndex
+-    , v8::External::New(isolate, reinterpret_cast<void *>(callback)));
++    , imp::NewExternal(isolate, reinterpret_cast<void *>(callback)));
+ 
+   v8::Local<v8::Value> val = v8::Local<v8::Value>::New(isolate, data);
+ 
+@@ -128,7 +144,7 @@ Factory<v8::FunctionTemplate>::New( Func
+ 
+     obj->SetInternalField(
+         imp::kFunctionIndex
+-      , v8::External::New(isolate, reinterpret_cast<void *>(callback)));
++      , imp::NewExternal(isolate, reinterpret_cast<void *>(callback)));
+     v8::Local<v8::Value> val = v8::Local<v8::Value>::New(isolate, data);
+ 
+     if (!val.IsEmpty()) {
diff --git a/vscode/patches/patch-remote_node__modules_node-pty_src_unix_pty.cc b/vscode/patches/patch-remote_node__modules_node-pty_src_unix_pty.cc
index 7e6bc3d802..28f1867f01 100644
--- a/vscode/patches/patch-remote_node__modules_node-pty_src_unix_pty.cc
+++ b/vscode/patches/patch-remote_node__modules_node-pty_src_unix_pty.cc
@@ -1,16 +1,24 @@
 $NetBSD$
 
-* Fix build on NetBSD
+* Add support to NetBSD and FreeBSD
 
---- remote/node_modules/node-pty/src/unix/pty.cc.orig	2025-03-01 10:11:06.000000000 +0000
+--- remote/node_modules/node-pty/src/unix/pty.cc.orig	2026-10-24 14:37:42.000000000 +0000
 +++ remote/node_modules/node-pty/src/unix/pty.cc
-@@ -42,6 +42,9 @@
+@@ -44,7 +44,7 @@
  #elif defined(__FreeBSD__)
  #include <libutil.h>
  #include <termios.h>
-+#elif defined(__NetBSD__)
-+#include <util.h>
-+#include <termios.h>
+-#elif defined(__OpenBSD__)
++#elif defined(__OpenBSD__) || defined(__NetBSD__)
+ #include <util.h>
+ #include <termios.h>
  #endif
+@@ -112,7 +112,7 @@ struct ExitEvent {
+   int exit_code = 0, signal_code = 0;
+ };
+ 
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
  
- /* Some platforms name VWERASE and VDISCARD differently */
+ static int
+ SetCloseOnExec(int fd) {
diff --git a/vscode/patches/patch-remote_package.json b/vscode/patches/patch-remote_package.json
new file mode 100644
index 0000000000..9999bf7e5c
--- /dev/null
+++ b/vscode/patches/patch-remote_package.json
@@ -0,0 +1,14 @@
+$NetBSD$
+
+* Add node-ovsx-sign for Open VSX, the open-source alternative to Microsoft’s Visual Studio Code Marketplace
+
+--- remote/package.json.orig	2026-10-14 09:52:01.000000000 +0000
++++ remote/package.json
+@@ -44,6 +44,7 @@
+     "minimist": "^1.2.8",
+     "node-addon-api": "^6.0.0",
+     "node-pty": "^1.2.0-beta.15",
++    "node-ovsx-sign": "^1.2.0",
+     "ssh2": "^1.16.0",
+     "tar": "^7.5.20",
+     "tas-client": "0.4.6",
diff --git a/vscode/patches/patch-resources_linux_bin_code.sh b/vscode/patches/patch-resources_linux_bin_code.sh
new file mode 100644
index 0000000000..161ce0f337
--- /dev/null
+++ b/vscode/patches/patch-resources_linux_bin_code.sh
@@ -0,0 +1,15 @@
+$NetBSD$
+
+* TODO: does pkgsrc uses this wrapper?
+
+--- resources/linux/bin/code.sh.orig	2026-10-14 09:52:01.000000000 +0000
++++ resources/linux/bin/code.sh
+@@ -13,7 +13,7 @@ if [ -n "$VSCODE_IPC_HOOK_CLI" ]; then
+ fi
+ 
+ # test that VSCode wasn't installed inside WSL
+-if grep -qi Microsoft /proc/version && [ -z "$DONT_PROMPT_WSL_INSTALL" ]; then
++if grep -qi Microsoft /proc/version 2> /dev/null && [ -z "$DONT_PROMPT_WSL_INSTALL" ]; then
+ 	echo "To use @@PRODNAME@@ with the Windows Subsystem for Linux, please install @@PRODNAME@@ in Windows and uninstall the Linux version in WSL. You can then use the \`@@APPNAME@@\` command in a WSL terminal just as you would in a normal command prompt." 1>&2
+ 	printf "Do you want to continue anyway? [y/N] " 1>&2
+ 	read -r YN
diff --git a/vscode/patches/patch-resources_server_bin_helpers_check-requirements-linux.sh b/vscode/patches/patch-resources_server_bin_helpers_check-requirements-linux.sh
new file mode 100644
index 0000000000..062a6a8149
--- /dev/null
+++ b/vscode/patches/patch-resources_server_bin_helpers_check-requirements-linux.sh
@@ -0,0 +1,30 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- resources/server/bin/helpers/check-requirements-linux.sh.orig	2026-10-14 09:52:01.000000000 +0000
++++ resources/server/bin/helpers/check-requirements-linux.sh
+@@ -24,6 +24,7 @@ if [ -f "/tmp/vscode-skip-server-require
+ fi
+ 
+ ARCH=$(uname -m)
++UNAME=$(uname)
+ found_required_glibc=0
+ found_required_glibcxx=0
+ MIN_GLIBCXX_VERSION="3.4.25"
+@@ -34,8 +35,15 @@ if [ -f /etc/os-release ]; then
+     if [ "$OS_ID" = "nixos" ]; then
+         echo "Warning: NixOS detected, skipping GLIBC check"
+         exit 0
++    elif [ "$OS_ID" = "freebsd" ]; then
++        echo "Warning: FreeBSD detected, skipping GLIBC check"
++        exit 0
+     fi
+ fi
++if [ "$UNAME" = "NetBSD" ]; then
++    echo "Warning:NetBSD detected, skipping GLIBC check"
++    exit 0
++fi
+ 
+ # Based on https://github.com/bminor/glibc/blob/520b1df08de68a3de328b65a25b86300a7ddf512/elf/cache.c#L162-L245
+ case $ARCH in
diff --git a/vscode/patches/patch-scripts_code-perf.js b/vscode/patches/patch-scripts_code-perf.js
deleted file mode 100644
index e751a07332..0000000000
--- a/vscode/patches/patch-scripts_code-perf.js
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD$
-
-* Add support to NetBSD and FreeBSD
-
---- scripts/code-perf.js.orig	2025-02-10 13:07:56.000000000 +0000
-+++ scripts/code-perf.js
-@@ -65,7 +65,7 @@ function getExePath(buildPath) {
- 		case 'darwin':
- 			relativeExePath = path.join('Contents', 'MacOS', 'Electron');
- 			break;
--		case 'linux': {
-+		case 'linux': case 'freebsd': case 'netbsd': {
- 			const product = require(path.join(buildPath, 'resources', 'app', 'product.json'));
- 			relativeExePath = product.applicationName;
- 			break;
diff --git a/vscode/patches/patch-src_bootstrap-node.ts b/vscode/patches/patch-src_bootstrap-node.ts
index 3ccf7e4eae..1f0d90f566 100644
--- a/vscode/patches/patch-src_bootstrap-node.ts
+++ b/vscode/patches/patch-src_bootstrap-node.ts
@@ -2,9 +2,9 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/bootstrap-node.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/bootstrap-node.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/bootstrap-node.ts
-@@ -152,7 +152,7 @@ export function configurePortable(produc
+@@ -227,7 +227,7 @@ export function configurePortable(produc
  			return process.env['VSCODE_PORTABLE'];
  		}
  
diff --git a/vscode/patches/patch-src_main.ts b/vscode/patches/patch-src_main.ts
deleted file mode 100644
index f31109626a..0000000000
--- a/vscode/patches/patch-src_main.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD$
-
-* Add support to NetBSD and FreeBSD
-
---- src/main.ts.orig	2025-02-10 13:07:56.000000000 +0000
-+++ src/main.ts
-@@ -141,7 +141,7 @@ if (userLocale) {
- // Pseudo Language Language Pack is being used.
- // In that case, use `en` as the Electron locale.
- 
--if (process.platform === 'win32' || process.platform === 'linux') {
-+if (process.platform === 'win32' || process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') {
- 	const electronLocale = (!userLocale || userLocale === 'qps-ploc') ? 'en' : userLocale;
- 	app.commandLine.appendSwitch('lang', electronLocale);
- }
-@@ -206,7 +206,7 @@ function configureCommandlineSwitchesSyn
- 		'proxy-bypass-list'
- 	];
- 
--	if (process.platform === 'linux') {
-+	if (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') {
- 
- 		// Force enable screen readers on Linux via this flag
- 		SUPPORTED_ELECTRON_SWITCHES.push('force-renderer-accessibility');
diff --git a/vscode/patches/patch-src_mainImpl.ts b/vscode/patches/patch-src_mainImpl.ts
new file mode 100644
index 0000000000..213569ba13
--- /dev/null
+++ b/vscode/patches/patch-src_mainImpl.ts
@@ -0,0 +1,33 @@
+$NetBSD$
+
+* Add support to NetBSD and FreeBSD
+
+--- src/mainImpl.ts.orig	2026-10-14 09:52:01.000000000 +0000
++++ src/mainImpl.ts
+@@ -168,7 +168,7 @@ if (userLocale) {
+ // Pseudo Language Language Pack is being used.
+ // In that case, use `en` as the Electron locale.
+ 
+-if (process.platform === 'win32' || process.platform === 'linux') {
++if (process.platform === 'win32' || process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') {
+ 	const electronLocale = (!userLocale || userLocale === 'qps-ploc') ? 'en' : userLocale;
+ 	app.commandLine.appendSwitch('lang', electronLocale);
+ }
+@@ -266,7 +266,7 @@ function configureCommandlineSwitchesSyn
+ 		'remote-debugging-port'
+ 	];
+ 
+-	if (process.platform === 'linux') {
++	if (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') {
+ 
+ 		// Force enable screen readers on Linux via this flag
+ 		SUPPORTED_ELECTRON_SWITCHES.push('force-renderer-accessibility');
+@@ -362,7 +362,7 @@ function configureCommandlineSwitchesSyn
+ 	// `EstablishGpuChannelAsync` - Refs https://issues.chromium.org/issues/40208065
+ 	// `GlobalShortcutsPortal` - Enables Electron's `globalShortcut` (system-wide keybindings) on Linux Wayland via the XDG global shortcuts portal (no-op elsewhere)
+ 	const featuresToEnable =
+-		`NetAdapterMaxBufSizeFeature:NetAdapterMaxBufSize/8192,DocumentPolicyIncludeJSCallStacksInCrashReports,EarlyEstablishGpuChannel,EstablishGpuChannelAsync${process.platform === 'linux' ? ',GlobalShortcutsPortal' : ''},${app.commandLine.getSwitchValue('enable-features')}`;
++		`NetAdapterMaxBufSizeFeature:NetAdapterMaxBufSize/8192,DocumentPolicyIncludeJSCallStacksInCrashReports,EarlyEstablishGpuChannel,EstablishGpuChannelAsync${(process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') ? ',GlobalShortcutsPortal' : ''},${app.commandLine.getSwitchValue('enable-features')}`;
+ 	app.commandLine.appendSwitch('enable-features', featuresToEnable);
+ 
+ 	// Following features are disabled from the runtime:
diff --git a/vscode/patches/patch-src_vs_base_common_platform.ts b/vscode/patches/patch-src_vs_base_common_platform.ts
index 95656751a0..fbf48a9d75 100644
--- a/vscode/patches/patch-src_vs_base_common_platform.ts
+++ b/vscode/patches/patch-src_vs_base_common_platform.ts
@@ -2,23 +2,23 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/vs/base/common/platform.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/base/common/platform.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/base/common/platform.ts
-@@ -74,7 +74,7 @@ declare const navigator: INavigator;
+@@ -75,7 +75,7 @@ declare const navigator: INavigator;
  if (typeof nodeProcess === 'object') {
  	_isWindows = (nodeProcess.platform === 'win32');
  	_isMacintosh = (nodeProcess.platform === 'darwin');
 -	_isLinux = (nodeProcess.platform === 'linux');
-+	_isLinux = (nodeProcess.platform === 'linux' || nodeProcess.platform === 'freebsd' || nodeProcess.platform === 'netbsd');
++	_isLinux = (nodeProcess.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd');
  	_isLinuxSnap = _isLinux && !!nodeProcess.env['SNAP'] && !!nodeProcess.env['SNAP_REVISION'];
  	_isElectron = isElectronProcess;
- 	_isCI = !!nodeProcess.env['CI'] || !!nodeProcess.env['BUILD_ARTIFACTSTAGINGDIRECTORY'];
-@@ -100,7 +100,7 @@ else if (typeof navigator === 'object' &
+ 	_isCI = !!nodeProcess.env['CI'] || !!nodeProcess.env['BUILD_ARTIFACTSTAGINGDIRECTORY'] || !!nodeProcess.env['GITHUB_WORKSPACE'];
+@@ -101,7 +101,7 @@ else if (typeof navigator === 'object' &
  	_isWindows = _userAgent.indexOf('Windows') >= 0;
  	_isMacintosh = _userAgent.indexOf('Macintosh') >= 0;
  	_isIOS = (_userAgent.indexOf('Macintosh') >= 0 || _userAgent.indexOf('iPad') >= 0 || _userAgent.indexOf('iPhone') >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0;
 -	_isLinux = _userAgent.indexOf('Linux') >= 0;
 +	_isLinux = (_userAgent.indexOf('Linux') >= 0 || _userAgent.indexOf('FreeBSD') >= 0 || _userAgent.indexOf('NetBSD') >= 0);
+ 	_isChromeOS = _userAgent.indexOf('CrOS') >= 0;
  	_isMobile = _userAgent?.indexOf('Mobi') >= 0;
  	_isWeb = true;
- 	_language = nls.getNLSLanguage() || LANGUAGE_DEFAULT;
diff --git a/vscode/patches/patch-src_vs_base_node_ps.ts b/vscode/patches/patch-src_vs_base_node_ps.ts
index f36665cc1b..749366b296 100644
--- a/vscode/patches/patch-src_vs_base_node_ps.ts
+++ b/vscode/patches/patch-src_vs_base_node_ps.ts
@@ -2,23 +2,13 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/vs/base/node/ps.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/base/node/ps.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/base/node/ps.ts
-@@ -208,7 +208,7 @@ export function listProcesses(rootPid: n
- 
- 			exec('which ps', {}, (err, stdout, stderr) => {
- 				if (err || stderr) {
--					if (process.platform !== 'linux') {
-+					if (process.platform !== 'linux' && process.platform !== 'freebsd' && process.platform !== 'netbsd') {
- 						reject(err || new Error(stderr.toString()));
- 					} else {
- 						const cmd = JSON.stringify(FileAccess.asFileUri('vs/base/node/ps.sh').fsPath);
-@@ -223,7 +223,8 @@ export function listProcesses(rootPid: n
+@@ -217,7 +217,7 @@ export function listProcesses(rootPid: n
  					}
  				} else {
  					const ps = stdout.toString().trim();
 -					const args = '-ax -o pid=,ppid=,pcpu=,pmem=,command=';
-+					//const args = '-ax -o pid=,ppid=,pcpu=,pmem=,command=';
 +					const args = '-ax -o pid= -o ppid= -o pcpu= -o pmem= -o command=';
  
  					// Set numeric locale to ensure '.' is used as the decimal separator
diff --git a/vscode/patches/patch-src_vs_code_electron-main_app.ts b/vscode/patches/patch-src_vs_code_electron-main_app.ts
index 2976f8760a..bcfd191052 100644
--- a/vscode/patches/patch-src_vs_code_electron-main_app.ts
+++ b/vscode/patches/patch-src_vs_code_electron-main_app.ts
@@ -2,14 +2,14 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/vs/code/electron-main/app.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/code/electron-main/app.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/code/electron-main/app.ts
-@@ -1008,7 +1008,7 @@ export class CodeApplication extends Dis
- 				services.set(IUpdateService, new SyncDescriptor(Win32UpdateService));
+@@ -1227,6 +1227,8 @@ export class CodeApplication extends Dis
  				break;
  
--			case 'linux':
-+			case 'linux': case 'freebsd': case 'netbsd':
+ 			case 'linux':
++			case 'freebsd':
++			case 'netbsd':
  				if (isLinuxSnap) {
  					services.set(IUpdateService, new SyncDescriptor(SnapUpdateService, [process.env['SNAP'], process.env['SNAP_REVISION']]));
  				} else {
diff --git a/vscode/patches/patch-src_vs_platform_agentHost_test_node_codex_codexProviderConfiguration.test.ts b/vscode/patches/patch-src_vs_platform_agentHost_test_node_codex_codexProviderConfiguration.test.ts
new file mode 100644
index 0000000000..cb3fbb41b1
--- /dev/null
+++ b/vscode/patches/patch-src_vs_platform_agentHost_test_node_codex_codexProviderConfiguration.test.ts
@@ -0,0 +1,33 @@
+$NetBSD$
+
+* TODO: imported from FreeBSD ports, pkgsrc's vscode hasn't test make target
+
+--- src/vs/platform/agentHost/test/node/codex/codexProviderConfiguration.test.ts.orig	2026-10-14 09:52:01.000000000 +0000
++++ src/vs/platform/agentHost/test/node/codex/codexProviderConfiguration.test.ts
+@@ -135,7 +135,7 @@ suite('CodexProviderConfiguration', () =
+ 	}
+ 
+ 	test('rereads the user configuration on a version conflict', async () => {
+-		const client = new TestConfigurationClient(() => userConfiguration({ personality: 'pragmatic' }, `version-${client.readCount}`), () => {
++		const client: TestConfigurationClient = new TestConfigurationClient(() => userConfiguration({ personality: 'pragmatic' }, `version-${client.readCount}`), () => {
+ 			if (client.writes.length === 1) {
+ 				throw new JsonRpcError(-32600, 'Changed concurrently', { config_write_error_code: 'configVersionConflict' });
+ 			}
+@@ -145,7 +145,7 @@ suite('CodexProviderConfiguration', () =
+ 	});
+ 
+ 	test('preserves an alias installed concurrently by another client', async () => {
+-		const client = new TestConfigurationClient(() => userConfiguration(client.readCount === 1 ? {} : { model_providers: { 'vscode-proxy': portableProvider } }), () => {
++		const client: TestConfigurationClient = new TestConfigurationClient(() => userConfiguration(client.readCount === 1 ? {} : { model_providers: { 'vscode-proxy': portableProvider } }), () => {
+ 			throw new JsonRpcError(-32600, 'Changed concurrently', { config_write_error_code: 'configVersionConflict' });
+ 		});
+ 		await ensurePortableCodexProxyProvider(client);
+@@ -153,7 +153,7 @@ suite('CodexProviderConfiguration', () =
+ 	});
+ 
+ 	test('does not overwrite a conflicting alias introduced by a concurrent edit', async () => {
+-		const client = new TestConfigurationClient(() => userConfiguration(client.readCount === 1 ? {} : { model_providers: { 'vscode-proxy': { name: 'User provider', env_key: 'CUSTOM_TOKEN' } } }), () => {
++		const client: TestConfigurationClient = new TestConfigurationClient(() => userConfiguration(client.readCount === 1 ? {} : { model_providers: { 'vscode-proxy': { name: 'User provider', env_key: 'CUSTOM_TOKEN' } } }), () => {
+ 			throw new JsonRpcError(-32600, 'Changed concurrently', { config_write_error_code: 'configVersionConflict' });
+ 		});
+ 		await assert.rejects(ensurePortableCodexProxyProvider(client), /already defines an incompatible/);
diff --git a/vscode/patches/patch-src_vs_platform_environment_node_userDataPath.ts b/vscode/patches/patch-src_vs_platform_environment_node_userDataPath.ts
index 9f26a1b6e1..a5ea7bc969 100644
--- a/vscode/patches/patch-src_vs_platform_environment_node_userDataPath.ts
+++ b/vscode/patches/patch-src_vs_platform_environment_node_userDataPath.ts
@@ -2,14 +2,14 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/vs/platform/environment/node/userDataPath.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/platform/environment/node/userDataPath.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/platform/environment/node/userDataPath.ts
-@@ -76,7 +76,7 @@ function doGetUserDataPath(cliArgs: Nati
- 		case 'darwin':
- 			appDataPath = path.join(os.homedir(), 'Library', 'Application Support');
+@@ -96,6 +96,8 @@ export function getDefaultUserDataPath(p
+ 			appDataPath = join(homedir(), 'Library', 'Application Support');
  			break;
--		case 'linux':
-+		case 'linux': case 'freebsd': case 'netbsd':
- 			appDataPath = process.env['XDG_CONFIG_HOME'] || path.join(os.homedir(), '.config');
+ 		case 'linux':
++		case 'freebsd':
++		case 'netbsd':
+ 			appDataPath = process.env['XDG_CONFIG_HOME'] || join(homedir(), '.config');
  			break;
  		default:
diff --git a/vscode/patches/patch-src_vs_platform_extensionManagement_node_extensionSignatureVerificationService.ts b/vscode/patches/patch-src_vs_platform_extensionManagement_node_extensionSignatureVerificationService.ts
new file mode 100644
index 0000000000..1fa89e04c9
--- /dev/null
+++ b/vscode/patches/patch-src_vs_platform_extensionManagement_node_extensionSignatureVerificationService.ts
@@ -0,0 +1,47 @@
+$NetBSD$
+
+* Add node-ovsx-sign for Open VSX, the open-source alternative to Microsoft’s Visual Studio Code Marketplace
+
+--- src/vs/platform/extensionManagement/node/extensionSignatureVerificationService.ts.orig	2026-10-14 09:52:01.000000000 +0000
++++ src/vs/platform/extensionManagement/node/extensionSignatureVerificationService.ts
+@@ -35,7 +35,7 @@ export interface IExtensionSignatureVeri
+ }
+ 
+ declare namespace vsceSign {
+-	export function verify(vsixFilePath: string, signatureArchiveFilePath: string, verbose: boolean): Promise<ExtensionSignatureVerificationResult>;
++	export function verify(vsixFilePath: string, signatureArchiveFilePath: string, verbose: boolean): Promise<boolean>;
+ }
+ 
+ /**
+@@ -67,7 +67,7 @@ export class ExtensionSignatureVerificat
+ 	}
+ 
+ 	private async resolveVsceSign(): Promise<typeof vsceSign> {
+-		const mod = '@vscode/vsce-sign';
++		const mod = 'node-ovsx-sign';
+ 		return import(mod);
+ 	}
+ 
+@@ -87,7 +87,21 @@ export class ExtensionSignatureVerificat
+ 
+ 		try {
+ 			this.logService.trace(`Verifying extension signature for ${extensionId}...`);
+-			result = await module.verify(vsixFilePath, signatureArchiveFilePath, this.logService.getLevel() === LogLevel.Trace);
++			let isSignatureValid =
++				await module.verify(vsixFilePath, signatureArchiveFilePath, this.logService.getLevel() === LogLevel.Trace);
++			if (isSignatureValid) {
++				result = {
++					code: ExtensionSignatureVerificationCode.Success,
++					didExecute: true,
++					output: "The extension signature is valid."
++				};
++			} else {
++				result = {
++					code: ExtensionSignatureVerificationCode.SignatureIsNotValid,
++					didExecute: true,
++					output: "The extension signature is invalid."
++				};
++			}
+ 		} catch (e) {
+ 			result = {
+ 				code: ExtensionSignatureVerificationCode.UnknownError,
diff --git a/vscode/patches/patch-src_vs_platform_native_electron-main_nativeHostMainService.ts b/vscode/patches/patch-src_vs_platform_native_electron-main_nativeHostMainService.ts
index 11f5efa655..1bc1d73bd8 100644
--- a/vscode/patches/patch-src_vs_platform_native_electron-main_nativeHostMainService.ts
+++ b/vscode/patches/patch-src_vs_platform_native_electron-main_nativeHostMainService.ts
@@ -1,13 +1,14 @@
 $NetBSD$
 
-* Use own starting wrapper
+* Use own start wrapper
 
---- src/vs/platform/native/electron-main/nativeHostMainService.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/platform/native/electron-main/nativeHostMainService.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/platform/native/electron-main/nativeHostMainService.ts
-@@ -644,30 +644,7 @@ export class NativeHostMainService exten
+@@ -888,31 +888,7 @@ export class NativeHostMainService exten
+ 
  	@memoize
  	private get cliPath(): string {
- 
+-
 -		// Windows
 -		if (isWindows) {
 -			if (this.environmentMainService.isBuilt) {
diff --git a/vscode/patches/patch-src_vs_workbench_api_browser_mainThreadTask.ts b/vscode/patches/patch-src_vs_workbench_api_browser_mainThreadTask.ts
index acd4ce04bd..929d622e4c 100644
--- a/vscode/patches/patch-src_vs_workbench_api_browser_mainThreadTask.ts
+++ b/vscode/patches/patch-src_vs_workbench_api_browser_mainThreadTask.ts
@@ -2,14 +2,14 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/vs/workbench/api/browser/mainThreadTask.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/workbench/api/browser/mainThreadTask.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/workbench/api/browser/mainThreadTask.ts
-@@ -678,7 +678,7 @@ export class MainThreadTask extends Disp
- 			case 'darwin':
+@@ -727,6 +727,8 @@ export class MainThreadTask extends Disp
  				platform = Platform.Platform.Mac;
  				break;
--			case 'linux':
-+			case 'linux': case 'freebsd': case 'netbsd':
+ 			case 'linux':
++			case 'freebsd':
++			case 'netbsd':
  				platform = Platform.Platform.Linux;
  				break;
  			default:
diff --git a/vscode/patches/patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts b/vscode/patches/patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts
index 327a4d2557..d336827800 100644
--- a/vscode/patches/patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts
+++ b/vscode/patches/patch-src_vs_workbench_services_actions_common_menusExtensionPoint.ts
@@ -2,14 +2,18 @@ $NetBSD$
 
 * Add support to NetBSD and FreeBSD
 
---- src/vs/workbench/services/actions/common/menusExtensionPoint.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- src/vs/workbench/services/actions/common/menusExtensionPoint.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ src/vs/workbench/services/actions/common/menusExtensionPoint.ts
-@@ -1141,7 +1141,7 @@ class CommandsTableRenderer extends Disp
+@@ -1278,7 +1278,11 @@ class CommandsTableRenderer extends Disp
  
  		switch (platform) {
  			case 'win32': key = rawKeyBinding.win; break;
 -			case 'linux': key = rawKeyBinding.linux; break;
-+			case 'linux':  case 'freebsd': case 'netbsd': key = rawKeyBinding.linux; break;
++			case 'linux':
++			case 'freebsd':
++			case 'netbsd':
++				key = rawKeyBinding.linux;
++				break;
  			case 'darwin': key = rawKeyBinding.mac; break;
  		}
  
diff --git a/vscode/patches/patch-test_automation_src_electron.ts b/vscode/patches/patch-test_automation_src_electron.ts
index 8ed4fff7d4..8050d28a25 100644
--- a/vscode/patches/patch-test_automation_src_electron.ts
+++ b/vscode/patches/patch-test_automation_src_electron.ts
@@ -1,24 +1,26 @@
 $NetBSD$
 
-* Add support to NetBSD and FreeBSD
+* TODO: imported from FreeBSD ports, pkgsrc's vscode hasn't test make target
 
---- test/automation/src/electron.ts.orig	2025-02-10 13:07:56.000000000 +0000
+--- test/automation/src/electron.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ test/automation/src/electron.ts
-@@ -103,7 +103,7 @@ export function getDevElectronPath(): st
- 	switch (process.platform) {
+@@ -155,6 +155,8 @@ export function getDevElectronPath(): st
  		case 'darwin':
- 			return join(buildPath, 'electron', `${product.nameLong}.app`, 'Contents', 'MacOS', 'Electron');
--		case 'linux':
-+		case 'linux': case 'freebsd': case 'netbsd':
+ 			return join(buildPath, 'electron', `${product.nameLong}.app`, 'Contents', 'MacOS', `${product.nameShort}`);
+ 		case 'linux':
++		case 'freebsd':
++		case 'netbsd':
  			return join(buildPath, 'electron', `${product.applicationName}`);
  		case 'win32':
  			return join(buildPath, 'electron', `${product.nameShort}.exe`);
-@@ -116,7 +116,7 @@ export function getBuildElectronPath(roo
- 	switch (process.platform) {
- 		case 'darwin':
- 			return join(root, 'Contents', 'MacOS', 'Electron');
+@@ -179,7 +181,9 @@ export function getBuildElectronPath(roo
+ 				return join(root, 'Contents', 'MacOS', product.nameShort);
+ 			}
+ 		}
 -		case 'linux': {
-+		case 'linux': case 'freebsd': case 'netbsd': {
++		case 'linux':
++		case 'freebsd':
++		case 'netbsd': {
  			const product = require(join(root, 'resources', 'app', 'product.json'));
  			return join(root, product.applicationName);
  		}
diff --git a/vscode/patches/patch-test_smoke_src_areas_task_task.test.ts b/vscode/patches/patch-test_smoke_src_areas_task_task.test.ts
index bf02e9485a..dcdc38266b 100644
--- a/vscode/patches/patch-test_smoke_src_areas_task_task.test.ts
+++ b/vscode/patches/patch-test_smoke_src_areas_task_task.test.ts
@@ -1,8 +1,8 @@
 $NetBSD$
 
-* Add support to NetBSD and FreeBSD
+* TODO: imported from FreeBSD ports, pkgsrc's vscode hasn't test make target
 
---- test/smoke/src/areas/task/task.test.ts.orig	2025-05-14 21:40:56.000000000 +0000
+--- test/smoke/src/areas/task/task.test.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ test/smoke/src/areas/task/task.test.ts
 @@ -19,6 +19,6 @@ export function setup(logger: Logger) {
  		// Refs https://github.com/microsoft/vscode/issues/225250
diff --git a/vscode/patches/patch-test_smoke_src_areas_terminal_terminal.test.ts b/vscode/patches/patch-test_smoke_src_areas_terminal_terminal.test.ts
index 35ec4c139f..90013f95a1 100644
--- a/vscode/patches/patch-test_smoke_src_areas_terminal_terminal.test.ts
+++ b/vscode/patches/patch-test_smoke_src_areas_terminal_terminal.test.ts
@@ -1,8 +1,8 @@
 $NetBSD$
 
-* Add support to NetBSD and FreeBSD
+* TODO: imported from FreeBSD ports, pkgsrc's vscode hasn't test make target
 
---- test/smoke/src/areas/terminal/terminal.test.ts.orig	2025-05-14 21:40:56.000000000 +0000
+--- test/smoke/src/areas/terminal/terminal.test.ts.orig	2026-10-14 09:52:01.000000000 +0000
 +++ test/smoke/src/areas/terminal/terminal.test.ts
 @@ -39,15 +39,15 @@ export function setup(logger: Logger) {
  		// https://github.com/microsoft/vscode/issues/216564
@@ -14,17 +14,16 @@ $NetBSD$
 -		setupTerminalProfileTests({ skipSuite: process.platform === 'linux' });
 -		setupTerminalTabsTests({ skipSuite: process.platform === 'linux' });
 -		setupTerminalShellIntegrationTests({ skipSuite: process.platform === 'linux' });
--		setupTerminalStickyScrollTests({ skipSuite: process.platform === 'linux' });
 +		setupTerminalEditorsTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
 +		setupTerminalInputTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
 +		setupTerminalPersistenceTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
 +		setupTerminalProfileTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
 +		setupTerminalTabsTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
 +		setupTerminalShellIntegrationTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
-+		setupTerminalStickyScrollTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd') });
+ 		setupTerminalStickyScrollTests({ skipSuite: true });
  		// https://github.com/microsoft/vscode/pull/141974
  		// Windows is skipped here as well as it was never enabled from the start
 -		setupTerminalSplitCwdTests({ skipSuite: process.platform === 'linux' || process.platform === 'win32' });
-+		setupTerminalSplitCwdTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd' || process.platform === 'win32' });
++		setupTerminalSplitCwdTests({ skipSuite: (process.platform === 'linux' || process.platform === 'freebsd' || process.platform === 'netbsd' || process.platform === 'win32') });
  	});
  }


Home | Main Index | Thread Index | Old Index