From f9ad474749bae48ed9805a29c4370ebcbad5f380 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 20 Feb 2025 18:44:17 -0800
Subject: [PATCH 01/33] Update Ubuntu CI info

It runs on 24.04 LTS now.
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 8d11bef44a..70f7df3726 100644
--- a/README.md
+++ b/README.md
@@ -66,7 +66,7 @@ The extension should work everywhere [Visual Studio Code](https://code.visualstu
 We actively test the following configurations [in Github Actions on every commit](https://github.com/PowerShell/vscode-powershell/actions/workflows/ci-test.yml):
 - **Windows Server 2022** with Windows PowerShell 5.1 and PowerShell 7+
 - **macOS 14.7** with PowerShell 7+
-- **Ubuntu 22.04** with PowerShell 7+
+- **Ubuntu 24.04** with PowerShell 7+
 
 On Windows, we also test with and without Constrained Language Mode enabled.
 

From cfecb21aa1444b8282b6be01d9f11f76449e57da Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 26 Feb 2025 11:10:14 -0800
Subject: [PATCH 02/33] Fix tests and update OneBranch pipeline

PowerShell 7.5 was released so the update test needed its usual fix.
Ironically, OneBranch now uses 7.4 so we can rely on PSResourceGet existing.
---
 .pipelines/vscode-powershell-Official.yml |  5 +-
 test/features/UpdatePowerShell.test.ts    | 76 +++++++++++------------
 tools/installPSResources.ps1              | 15 ++++-
 3 files changed, 52 insertions(+), 44 deletions(-)

diff --git a/.pipelines/vscode-powershell-Official.yml b/.pipelines/vscode-powershell-Official.yml
index 1bfcd22fa8..c7a0759964 100644
--- a/.pipelines/vscode-powershell-Official.yml
+++ b/.pipelines/vscode-powershell-Official.yml
@@ -107,10 +107,7 @@ extends:
               $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
               Write-Host Using PowerShellEditorServices v$($manifest.Version)
             displayName: PowerShellEditorServices version
-          - pwsh: |
-              Register-PSRepository -Name CFS -SourceLocation "https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/powershell/nuget/v2" -InstallationPolicy Trusted
-              Install-Module -Repository CFS -Name Microsoft.PowerShell.PSResourceGet
-              ./tools/installPSResources.ps1 -PSRepository CFS
+          - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
             displayName: Install PSResources
           - pwsh: Invoke-Build Build -Configuration $(BuildConfiguration)
             displayName: Build
diff --git a/test/features/UpdatePowerShell.test.ts b/test/features/UpdatePowerShell.test.ts
index 7d080b3078..b2b6efe90e 100644
--- a/test/features/UpdatePowerShell.test.ts
+++ b/test/features/UpdatePowerShell.test.ts
@@ -28,10 +28,10 @@ describe("UpdatePowerShell feature", function () {
         it("Won't check if 'promptToUpdatePowerShell' is false", function () {
             settings.promptToUpdatePowerShell = false;
             const version: IPowerShellVersionDetails = {
-                "version": "7.3.0",
-                "edition": "Core",
-                "commit": "7.3.0",
-                "architecture": "X64"
+                version: "7.3.0",
+                edition: "Core",
+                commit: "7.3.0",
+                architecture: "X64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
@@ -40,10 +40,10 @@ describe("UpdatePowerShell feature", function () {
 
         it("Won't check for Windows PowerShell", function () {
             const version: IPowerShellVersionDetails = {
-                "version": "5.1.22621",
-                "edition": "Desktop",
-                "commit": "5.1.22621",
-                "architecture": "X64"
+                version: "5.1.22621",
+                edition: "Desktop",
+                commit: "5.1.22621",
+                architecture: "X64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
@@ -52,10 +52,10 @@ describe("UpdatePowerShell feature", function () {
 
         it("Won't check for a development build of PowerShell", function () {
             const version: IPowerShellVersionDetails = {
-                "version": "7.3.0-preview.3",
-                "edition": "Core",
-                "commit": "7.3.0-preview.3-508-g07175ae0ff8eb7306fe0b0fc7d19bdef4fbf2d67",
-                "architecture": "Arm64"
+                version: "7.3.0-preview.3",
+                edition: "Core",
+                commit: "7.3.0-preview.3-508-g07175ae0ff8eb7306fe0b0fc7d19bdef4fbf2d67",
+                architecture: "Arm64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
@@ -64,10 +64,10 @@ describe("UpdatePowerShell feature", function () {
 
         it("Won't check for a daily build of PowerShell", function () {
             const version: IPowerShellVersionDetails = {
-                "version": "7.3.0-daily20221206.1",
-                "edition": "Core",
-                "commit": "7.3.0-daily20221206.1",
-                "architecture": "Arm64"
+                version: "7.3.0-daily20221206.1",
+                edition: "Core",
+                commit: "7.3.0-daily20221206.1",
+                architecture: "Arm64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
@@ -77,22 +77,22 @@ describe("UpdatePowerShell feature", function () {
         it("Won't check if POWERSHELL_UPDATECHECK is 'Off'", function () {
             process.env.POWERSHELL_UPDATECHECK = "Off";
             const version: IPowerShellVersionDetails = {
-                "version": "7.3.0",
-                "edition": "Core",
-                "commit": "7.3.0",
-                "architecture": "X64"
+                version: "7.3.0",
+                edition: "Core",
+                commit: "7.3.0",
+                architecture: "X64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
             assert(!updater.shouldCheckForUpdate());
         });
 
-        it ("Should otherwise check to update PowerShell", function () {
+        it("Should otherwise check to update PowerShell", function () {
             const version: IPowerShellVersionDetails = {
-                "version": "7.3.0",
-                "edition": "Core",
-                "commit": "7.3.0",
-                "architecture": "X64"
+                version: "7.3.0",
+                edition: "Core",
+                commit: "7.3.0",
+                architecture: "X64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
@@ -101,34 +101,34 @@ describe("UpdatePowerShell feature", function () {
     });
 
     describe("Which version it gets", function () {
-        it("Would update to LTS", async function() {
+        it("Would update to LTS", async function () {
             process.env.POWERSHELL_UPDATECHECK = "LTS";
             const version: IPowerShellVersionDetails = {
-                "version": "7.0.0",
-                "edition": "Core",
-                "commit": "7.0.0",
-                "architecture": "X64"
+                version: "7.2.0",
+                edition: "Core",
+                commit: "7.2.0",
+                architecture: "X64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
-            const tag: string = await updater.maybeGetNewRelease() ?? "";
+            const tag: string = (await updater.maybeGetNewRelease()) ?? "";
             // NOTE: This will need to be updated each time an LTS is released.
             // Also sometimes the prior LTS is more recently updated than the latest LTS.
-            assert(tag.startsWith("v7.4") || tag.startsWith("v7.2"));
+            assert(tag.startsWith("v7.4"));
         });
 
-        it("Would update to stable", async function() {
+        it("Would update to stable", async function () {
             const version: IPowerShellVersionDetails = {
-                "version": "7.3.0",
-                "edition": "Core",
-                "commit": "7.3.0",
-                "architecture": "X64"
+                version: "7.3.0",
+                edition: "Core",
+                commit: "7.3.0",
+                architecture: "X64",
             };
             const updater = new UpdatePowerShell(settings, testLogger, version);
             // @ts-expect-error method is private.
             const tag: string | undefined = await updater.maybeGetNewRelease();
             // NOTE: This will need to be updated each new major stable.
-            assert(tag?.startsWith("v7.4"));
+            assert(tag?.startsWith("v7.5"));
         });
     });
 });
diff --git a/tools/installPSResources.ps1 b/tools/installPSResources.ps1
index e98910d70a..97fed8bc38 100644
--- a/tools/installPSResources.ps1
+++ b/tools/installPSResources.ps1
@@ -9,5 +9,16 @@ if ($PSRepository -eq "CFS" -and -not (Get-PSResourceRepository -Name CFS -Error
     Register-PSResourceRepository -Name CFS -Uri "https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/powershell/nuget/v3/index.json"
 }
 
-Install-PSResource -Repository $PSRepository -TrustRepository -Name InvokeBuild
-Install-PSResource -Repository $PSRepository -TrustRepository -Name platyPS
+# NOTE: Due to a bug in Install-PSResource with upstream feeds, we have to
+# request an exact version. Otherwise, if a newer version is available in the
+# upstream feed, it will fail to install any version at all.
+Install-PSResource -Verbose -TrustRepository -RequiredResource  @{
+    InvokeBuild = @{
+        version = "5.12.1"
+        repository = $PSRepository
+      }
+    platyPS = @{
+        version = "0.14.2"
+        repository = $PSRepository
+    }
+}

From 5e1e91b9e9d9d75352862d7acabea287f4f02501 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 26 Feb 2025 11:39:10 -0800
Subject: [PATCH 03/33] Bump packages and stop checking out `package.json`
 during tests

---
 package-lock.json           | 486 ++++++++++++++++++++++--------------
 package.json                |  16 +-
 vscode-powershell.build.ps1 |   2 +-
 3 files changed, 312 insertions(+), 192 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 89e85d48e8..27afce26b2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,24 +1,24 @@
 {
   "name": "powershell",
-  "version": "2024.5.2",
+  "version": "2025.0.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "powershell",
-      "version": "2024.5.2",
+      "version": "2025.0.0",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
         "@vscode/extension-telemetry": "^0.9.8",
         "node-fetch": "^2.7.0",
-        "semver": "^7.6.3",
+        "semver": "^7.7.1",
         "untildify": "^4.0.0",
         "uuid": "^9.0.1",
         "vscode-languageclient": "^9.0.1",
         "vscode-languageserver-protocol": "^3.17.5"
       },
       "devDependencies": {
-        "@vscode/vsce": "^3.2.1",
+        "@vscode/vsce": "^3.2.2",
         "esbuild": "^0.21.5"
       },
       "engines": {
@@ -28,17 +28,17 @@
         "@tsconfig/node20": "^20.1.4",
         "@types/mocha": "^10.0.10",
         "@types/mock-fs": "^4.13.4",
-        "@types/node": "^20.17.14",
+        "@types/node": "^20.17.19",
         "@types/node-fetch": "^2.6.12",
         "@types/rewire": "^2.5.30",
         "@types/semver": "^7.5.8",
-        "@types/sinon": "^17.0.3",
+        "@types/sinon": "^17.0.4",
         "@types/ungap__structured-clone": "^1.2.0",
         "@types/uuid": "^9.0.8",
         "@types/vscode": "~1.96.0",
-        "@typescript-eslint/eslint-plugin": "^8.20.0",
-        "@typescript-eslint/parser": "^8.20.0",
-        "@ungap/structured-clone": "^1.2.1",
+        "@typescript-eslint/eslint-plugin": "^8.25.0",
+        "@typescript-eslint/parser": "^8.25.0",
+        "@ungap/structured-clone": "^1.3.0",
         "@vscode/debugprotocol": "^1.68.0",
         "@vscode/test-electron": "^2.4.1",
         "eslint": "^8.57.0",
@@ -47,7 +47,7 @@
         "mocha": "^10.8.2",
         "mocha-explorer-launcher-scripts": "^0.4.0",
         "mocha-multi-reporters": "^1.5.1",
-        "mock-fs": "^5.4.1",
+        "mock-fs": "^5.5.0",
         "rewire": "^7.0.0",
         "sinon": "^18.0.1",
         "source-map-support": "^0.5.21",
@@ -96,8 +96,8 @@
       }
     },
     "node_modules/@azure/core-rest-pipeline": {
-      "version": "1.18.2",
-      "integrity": "sha1-+jqDtBLUs+M+3KMKcbHVg4MGwHU=",
+      "version": "1.19.0",
+      "integrity": "sha1-TMYNPy7mjPDvN5hRtO0XX3kyyMU=",
       "dev": true,
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
@@ -137,8 +137,8 @@
       }
     },
     "node_modules/@azure/identity": {
-      "version": "4.6.0",
-      "integrity": "sha1-J2lXtZ/tls9I1eUPxyjDwibk8QU=",
+      "version": "4.7.0",
+      "integrity": "sha1-s7xXrsQEMomRCP1BF36BaOe7YiM=",
       "dev": true,
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
@@ -148,11 +148,11 @@
         "@azure/core-tracing": "^1.0.0",
         "@azure/core-util": "^1.11.0",
         "@azure/logger": "^1.0.0",
-        "@azure/msal-browser": "^4.0.1",
-        "@azure/msal-node": "^2.15.0",
+        "@azure/msal-browser": "^4.2.0",
+        "@azure/msal-node": "^3.2.1",
         "events": "^3.0.0",
         "jws": "^4.0.0",
-        "open": "^8.0.0",
+        "open": "^10.1.0",
         "stoppable": "^1.1.0",
         "tslib": "^2.2.0"
       },
@@ -172,30 +172,30 @@
       }
     },
     "node_modules/@azure/msal-browser": {
-      "version": "4.0.1",
-      "integrity": "sha1-YNyEqAPBPGKT33tkL+oLCe/oMnY=",
+      "version": "4.5.0",
+      "integrity": "sha1-+9xPWPDzelSHGZ9HBuX4oEzQAjQ=",
       "dev": true,
       "dependencies": {
-        "@azure/msal-common": "15.0.1"
+        "@azure/msal-common": "15.2.0"
       },
       "engines": {
         "node": ">=0.8.0"
       }
     },
     "node_modules/@azure/msal-common": {
-      "version": "15.0.1",
-      "integrity": "sha1-6cAZ909HXs0h3meRksujMeVLEVY=",
+      "version": "15.2.0",
+      "integrity": "sha1-9OOLqFwKMiCLcEbgEcIf9ie2dVw=",
       "dev": true,
       "engines": {
         "node": ">=0.8.0"
       }
     },
     "node_modules/@azure/msal-node": {
-      "version": "2.16.2",
-      "integrity": "sha1-Prdo02iD6m+ak5wLW0Z7UY54//w=",
+      "version": "3.2.3",
+      "integrity": "sha1-x0LWbTqRg8HfpBYGMtiJHGmve8w=",
       "dev": true,
       "dependencies": {
-        "@azure/msal-common": "14.16.0",
+        "@azure/msal-common": "15.2.0",
         "jsonwebtoken": "^9.0.0",
         "uuid": "^8.3.0"
       },
@@ -203,14 +203,6 @@
         "node": ">=16"
       }
     },
-    "node_modules/@azure/msal-node/node_modules/@azure/msal-common": {
-      "version": "14.16.0",
-      "integrity": "sha1-80cPyux4jb5QhZlSzUmTQL2iPXo=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
     "node_modules/@azure/msal-node/node_modules/uuid": {
       "version": "8.3.2",
       "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=",
@@ -731,63 +723,63 @@
       }
     },
     "node_modules/@microsoft/1ds-core-js": {
-      "version": "4.3.4",
-      "integrity": "sha1-g2zxPwrNbe6tqEFBN/yJ57RsX8g=",
+      "version": "4.3.5",
+      "integrity": "sha1-b/GUKFC+fBAp87anEIx50IRD48c=",
       "dependencies": {
-        "@microsoft/applicationinsights-core-js": "3.3.4",
+        "@microsoft/applicationinsights-core-js": "3.3.5",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-async": ">= 0.5.2 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.3 < 2.x"
+        "@nevware21/ts-async": ">= 0.5.4 < 2.x",
+        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       }
     },
     "node_modules/@microsoft/1ds-post-js": {
-      "version": "4.3.4",
-      "integrity": "sha1-5O0cNpHHst0z+N14vtlzA6m8VQw=",
+      "version": "4.3.5",
+      "integrity": "sha1-QtNJKShsmpfya3jlMl0zMZGBe9Y=",
       "dependencies": {
-        "@microsoft/1ds-core-js": "4.3.4",
+        "@microsoft/1ds-core-js": "4.3.5",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-async": ">= 0.5.2 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.3 < 2.x"
+        "@nevware21/ts-async": ">= 0.5.4 < 2.x",
+        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       }
     },
     "node_modules/@microsoft/applicationinsights-channel-js": {
-      "version": "3.3.4",
-      "integrity": "sha1-FC90ky04SOESN/8cT0hMCtPaShU=",
+      "version": "3.3.5",
+      "integrity": "sha1-nEcRvbc8eGNzVjY6DI6K2z77Yc8=",
       "dependencies": {
-        "@microsoft/applicationinsights-common": "3.3.4",
-        "@microsoft/applicationinsights-core-js": "3.3.4",
+        "@microsoft/applicationinsights-common": "3.3.5",
+        "@microsoft/applicationinsights-core-js": "3.3.5",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-async": ">= 0.5.2 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.3 < 2.x"
+        "@nevware21/ts-async": ">= 0.5.4 < 2.x",
+        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
       }
     },
     "node_modules/@microsoft/applicationinsights-common": {
-      "version": "3.3.4",
-      "integrity": "sha1-STTbpg5sxM2gTGmAQhXVt3BwWbk=",
+      "version": "3.3.5",
+      "integrity": "sha1-qDtKWl+4Flb2OEqc0Q5gqdrX0go=",
       "dependencies": {
-        "@microsoft/applicationinsights-core-js": "3.3.4",
+        "@microsoft/applicationinsights-core-js": "3.3.5",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-utils": ">= 0.11.3 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
       }
     },
     "node_modules/@microsoft/applicationinsights-core-js": {
-      "version": "3.3.4",
-      "integrity": "sha1-r5wrUwhkeKBTn/C0ap9oGZ+RmsI=",
+      "version": "3.3.5",
+      "integrity": "sha1-ncG+u/2voxYgsMKkO0+sOZYcNHE=",
       "dependencies": {
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-async": ">= 0.5.2 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.3 < 2.x"
+        "@nevware21/ts-async": ">= 0.5.4 < 2.x",
+        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
@@ -801,16 +793,16 @@
       }
     },
     "node_modules/@microsoft/applicationinsights-web-basic": {
-      "version": "3.3.4",
-      "integrity": "sha1-k2K2StVrz7U6gPciLYkZOwq4+2s=",
+      "version": "3.3.5",
+      "integrity": "sha1-pQKxulAJTcMaMQ9fpa+bmAhL01k=",
       "dependencies": {
-        "@microsoft/applicationinsights-channel-js": "3.3.4",
-        "@microsoft/applicationinsights-common": "3.3.4",
-        "@microsoft/applicationinsights-core-js": "3.3.4",
+        "@microsoft/applicationinsights-channel-js": "3.3.5",
+        "@microsoft/applicationinsights-common": "3.3.5",
+        "@microsoft/applicationinsights-core-js": "3.3.5",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-async": ">= 0.5.2 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.3 < 2.x"
+        "@nevware21/ts-async": ">= 0.5.4 < 2.x",
+        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
@@ -831,8 +823,8 @@
       }
     },
     "node_modules/@nevware21/ts-utils": {
-      "version": "0.11.6",
-      "integrity": "sha1-SfQ9DEiPzxJ+9L3RNWY3CS7Qx+I="
+      "version": "0.11.8",
+      "integrity": "sha1-WMk0qcPOq900v6AFVQOaYlV4Blw="
     },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
@@ -924,8 +916,8 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "20.17.14",
-      "integrity": "sha1-V559de611Gt1xzyYghY55ktolgg=",
+      "version": "20.17.19",
+      "integrity": "sha1-DyhpVVcZvvJmym4YJ/zcqQPBppc=",
       "optional": true,
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -951,8 +943,8 @@
       "optional": true
     },
     "node_modules/@types/sinon": {
-      "version": "17.0.3",
-      "integrity": "sha1-mqfmLwoyO56tF37SOjbqdXFBpfo=",
+      "version": "17.0.4",
+      "integrity": "sha1-/Zo+jgfuoaP0pvgqlyyJnld482k=",
       "optional": true,
       "dependencies": {
         "@types/sinonjs__fake-timers": "*"
@@ -979,19 +971,19 @@
       "optional": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.20.0",
-      "integrity": "sha1-tHo5jg5VHLAIxgGQuAQ5TmhSyGM=",
+      "version": "8.25.0",
+      "integrity": "sha1-Xh1W8GflgI+oLRt1vO2COW6GihQ=",
       "optional": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.20.0",
-        "@typescript-eslint/type-utils": "8.20.0",
-        "@typescript-eslint/utils": "8.20.0",
-        "@typescript-eslint/visitor-keys": "8.20.0",
+        "@typescript-eslint/scope-manager": "8.25.0",
+        "@typescript-eslint/type-utils": "8.25.0",
+        "@typescript-eslint/utils": "8.25.0",
+        "@typescript-eslint/visitor-keys": "8.25.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
-        "ts-api-utils": "^2.0.0"
+        "ts-api-utils": "^2.0.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1007,14 +999,14 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.20.0",
-      "integrity": "sha1-XK8iMKNwlNwOZxz4Nrlt05tYfO0=",
+      "version": "8.25.0",
+      "integrity": "sha1-WPuBx7ejUYS6F1g/PXrGxPPZW+g=",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.20.0",
-        "@typescript-eslint/types": "8.20.0",
-        "@typescript-eslint/typescript-estree": "8.20.0",
-        "@typescript-eslint/visitor-keys": "8.20.0",
+        "@typescript-eslint/scope-manager": "8.25.0",
+        "@typescript-eslint/types": "8.25.0",
+        "@typescript-eslint/typescript-estree": "8.25.0",
+        "@typescript-eslint/visitor-keys": "8.25.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -1030,12 +1022,12 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.20.0",
-      "integrity": "sha1-qvQZi1CfuHplJ8As+/r4kBF551w=",
+      "version": "8.25.0",
+      "integrity": "sha1-rDgFB3qt6JjpjKgkKUyZhUVZffM=",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.20.0",
-        "@typescript-eslint/visitor-keys": "8.20.0"
+        "@typescript-eslint/types": "8.25.0",
+        "@typescript-eslint/visitor-keys": "8.25.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1046,14 +1038,14 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.20.0",
-      "integrity": "sha1-lYFx2GshOj8ytbFrkdsmeWik7xk=",
+      "version": "8.25.0",
+      "integrity": "sha1-7g0vZ8gK9a50tdb5d+D43tAFlnc=",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.20.0",
-        "@typescript-eslint/utils": "8.20.0",
+        "@typescript-eslint/typescript-estree": "8.25.0",
+        "@typescript-eslint/utils": "8.25.0",
         "debug": "^4.3.4",
-        "ts-api-utils": "^2.0.0"
+        "ts-api-utils": "^2.0.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1068,8 +1060,8 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.20.0",
-      "integrity": "sha1-SH3lMUtUFd7gdelVaLh6daPnMM8=",
+      "version": "8.25.0",
+      "integrity": "sha1-+RUSwvUysdaogmyt0LDlzVPPl+A=",
       "optional": true,
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1080,18 +1072,18 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.20.0",
-      "integrity": "sha1-ZYzqB7flmB8ZvOXPFmLLcK1Z8ms=",
+      "version": "8.25.0",
+      "integrity": "sha1-2ECcY6vd1M9bk8Axskue3Bx8Epk=",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.20.0",
-        "@typescript-eslint/visitor-keys": "8.20.0",
+        "@typescript-eslint/types": "8.25.0",
+        "@typescript-eslint/visitor-keys": "8.25.0",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.4",
         "semver": "^7.6.0",
-        "ts-api-utils": "^2.0.0"
+        "ts-api-utils": "^2.0.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1105,14 +1097,14 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.20.0",
-      "integrity": "sha1-UxJ+zTFLOwiDa0SYtxzbhvTvOqI=",
+      "version": "8.25.0",
+      "integrity": "sha1-PqL5GWqRXvTaosjq/UStvX1W0Io=",
       "optional": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.20.0",
-        "@typescript-eslint/types": "8.20.0",
-        "@typescript-eslint/typescript-estree": "8.20.0"
+        "@typescript-eslint/scope-manager": "8.25.0",
+        "@typescript-eslint/types": "8.25.0",
+        "@typescript-eslint/typescript-estree": "8.25.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1127,11 +1119,11 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.20.0",
-      "integrity": "sha1-LfbiS8aQhLgfBqqqSNGYsQ04K+0=",
+      "version": "8.25.0",
+      "integrity": "sha1-6GRjJM0Xk/luAmactxegUxlAMWQ=",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.20.0",
+        "@typescript-eslint/types": "8.25.0",
         "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
@@ -1154,8 +1146,8 @@
       }
     },
     "node_modules/@ungap/structured-clone": {
-      "version": "1.2.1",
-      "integrity": "sha1-KPoYX2far3t6GowdRFEyxdl5+L0=",
+      "version": "1.3.0",
+      "integrity": "sha1-0Gu7OE689sUF/eHD0O1N3/4Kr/g=",
       "optional": true
     },
     "node_modules/@vscode/debugprotocol": {
@@ -1191,8 +1183,8 @@
       }
     },
     "node_modules/@vscode/vsce": {
-      "version": "3.2.1",
-      "integrity": "sha1-e/qGnqQ/59eH8J4WTw8OI534+x0=",
+      "version": "3.2.2",
+      "integrity": "sha1-z2UGjj3VG3R1ZnDyMaqa0rvu8N4=",
       "dev": true,
       "dependencies": {
         "@azure/identity": "^4.1.0",
@@ -1201,7 +1193,7 @@
         "chalk": "^2.4.2",
         "cheerio": "^1.0.0-rc.9",
         "cockatiel": "^3.1.2",
-        "commander": "^6.2.1",
+        "commander": "^12.1.0",
         "form-data": "^4.0.0",
         "glob": "^11.0.0",
         "hosted-git-info": "^4.0.2",
@@ -1601,10 +1593,24 @@
       "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=",
       "optional": true
     },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.1",
-      "integrity": "sha1-MuWJLmNhspsLVFum93YzeNrKKEA=",
+    "node_modules/bundle-name": {
+      "version": "4.1.0",
+      "integrity": "sha1-87lrNBYNZDGhnXaIE1r3z7h5eIk=",
       "dev": true,
+      "dependencies": {
+        "run-applescript": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "integrity": "sha1-S1QowiK+mF15w9gmV0edvgtZstY=",
+      "devOptional": true,
       "dependencies": {
         "es-errors": "^1.3.0",
         "function-bind": "^1.1.2"
@@ -1872,11 +1878,11 @@
       }
     },
     "node_modules/commander": {
-      "version": "6.2.1",
-      "integrity": "sha1-B5LraC37wyWZm7K4T93duhEKxzw=",
+      "version": "12.1.0",
+      "integrity": "sha1-AUI7NvUBJZ/arE0OTWDJbJkVhdM=",
       "dev": true,
       "engines": {
-        "node": ">= 6"
+        "node": ">=18"
       }
     },
     "node_modules/concat-map": {
@@ -1984,12 +1990,41 @@
       "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=",
       "optional": true
     },
+    "node_modules/default-browser": {
+      "version": "5.2.1",
+      "integrity": "sha1-e3umEgT/PkJbVWhprm0+nZ8XEs8=",
+      "dev": true,
+      "dependencies": {
+        "bundle-name": "^4.1.0",
+        "default-browser-id": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-browser-id": {
+      "version": "5.0.0",
+      "integrity": "sha1-odmL+WDBUILYo/pp6DFQzMzDryY=",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/define-lazy-prop": {
-      "version": "2.0.0",
-      "integrity": "sha1-P3rkIRKbyqrJvHSQXJigAJ7J7n8=",
+      "version": "3.0.0",
+      "integrity": "sha1-27Ga37dG1/xtc0oGty9KANAhJV8=",
       "dev": true,
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/delayed-stream": {
@@ -2082,7 +2117,7 @@
     "node_modules/dunder-proto": {
       "version": "1.0.1",
       "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=",
-      "dev": true,
+      "devOptional": true,
       "dependencies": {
         "call-bind-apply-helpers": "^1.0.1",
         "es-errors": "^1.3.0",
@@ -2145,7 +2180,7 @@
     "node_modules/es-define-property": {
       "version": "1.0.1",
       "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=",
-      "dev": true,
+      "devOptional": true,
       "engines": {
         "node": ">= 0.4"
       }
@@ -2153,7 +2188,7 @@
     "node_modules/es-errors": {
       "version": "1.3.0",
       "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=",
-      "dev": true,
+      "devOptional": true,
       "engines": {
         "node": ">= 0.4"
       }
@@ -2161,7 +2196,7 @@
     "node_modules/es-object-atoms": {
       "version": "1.1.1",
       "integrity": "sha1-HE8sSDcydZfOadLKGQp/3RcjOME=",
-      "dev": true,
+      "devOptional": true,
       "dependencies": {
         "es-errors": "^1.3.0"
       },
@@ -2169,6 +2204,20 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "integrity": "sha1-8x274MGDsAptJutjJcgQwP0YvU0=",
+      "devOptional": true,
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/esbuild": {
       "version": "0.21.5",
       "integrity": "sha1-nKMBsSCSKVm3ZjYNisgw2g0CmX0=",
@@ -2518,8 +2567,8 @@
       "optional": true
     },
     "node_modules/fastq": {
-      "version": "1.18.0",
-      "integrity": "sha1-1jHX4l+v/qgYh/5eqMkBDhs2/uA=",
+      "version": "1.19.1",
+      "integrity": "sha1-1Q6rqAPIhGqIPBZJKCHrzSzaVfU=",
       "optional": true,
       "dependencies": {
         "reusify": "^1.0.4"
@@ -2592,16 +2641,16 @@
       }
     },
     "node_modules/flatted": {
-      "version": "3.3.2",
-      "integrity": "sha1-rboUSKmEG+xytCxTLqI9u+3vGic=",
+      "version": "3.3.3",
+      "integrity": "sha1-Z8j62VRUp8er6/dLt47nSkQCM1g=",
       "optional": true
     },
     "node_modules/foreground-child": {
-      "version": "3.3.0",
-      "integrity": "sha1-CshkTAbkMUOfhWHbjs8pp7VRnHc=",
+      "version": "3.3.1",
+      "integrity": "sha1-Mujp7Rtoo0l777msK2rfkqY4V28=",
       "devOptional": true,
       "dependencies": {
-        "cross-spawn": "^7.0.0",
+        "cross-spawn": "^7.0.6",
         "signal-exit": "^4.0.1"
       },
       "engines": {
@@ -2612,12 +2661,13 @@
       }
     },
     "node_modules/form-data": {
-      "version": "4.0.1",
-      "integrity": "sha1-uhB22qqlv9fpnBpssCqgpc/5DUg=",
+      "version": "4.0.2",
+      "integrity": "sha1-Ncq73TDDznPessQtPI0+2cpReUw=",
       "devOptional": true,
       "dependencies": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
         "mime-types": "^2.1.12"
       },
       "engines": {
@@ -2650,7 +2700,7 @@
     "node_modules/function-bind": {
       "version": "1.1.2",
       "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=",
-      "dev": true,
+      "devOptional": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -2664,16 +2714,16 @@
       }
     },
     "node_modules/get-intrinsic": {
-      "version": "1.2.7",
-      "integrity": "sha1-3PyzPTJy4V9EXRUSS8CiFhibkEQ=",
-      "dev": true,
+      "version": "1.3.0",
+      "integrity": "sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=",
+      "devOptional": true,
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
+        "call-bind-apply-helpers": "^1.0.2",
         "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
+        "es-object-atoms": "^1.1.1",
         "function-bind": "^1.1.2",
-        "get-proto": "^1.0.0",
+        "get-proto": "^1.0.1",
         "gopd": "^1.2.0",
         "has-symbols": "^1.1.0",
         "hasown": "^2.0.2",
@@ -2689,7 +2739,7 @@
     "node_modules/get-proto": {
       "version": "1.0.1",
       "integrity": "sha1-FQs/J0OGnvPoUewMSdFbHRTQDuE=",
-      "dev": true,
+      "devOptional": true,
       "dependencies": {
         "dunder-proto": "^1.0.1",
         "es-object-atoms": "^1.0.0"
@@ -2768,7 +2818,7 @@
     "node_modules/gopd": {
       "version": "1.2.0",
       "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=",
-      "dev": true,
+      "devOptional": true,
       "engines": {
         "node": ">= 0.4"
       },
@@ -2792,7 +2842,21 @@
     "node_modules/has-symbols": {
       "version": "1.1.0",
       "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=",
-      "dev": true,
+      "devOptional": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "integrity": "sha1-LNxC1AvvLltO6rfAGnPFTOerWrw=",
+      "devOptional": true,
+      "dependencies": {
+        "has-symbols": "^1.0.3"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -2803,7 +2867,7 @@
     "node_modules/hasown": {
       "version": "2.0.2",
       "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=",
-      "dev": true,
+      "devOptional": true,
       "dependencies": {
         "function-bind": "^1.1.2"
       },
@@ -2916,8 +2980,8 @@
       "optional": true
     },
     "node_modules/import-fresh": {
-      "version": "3.3.0",
-      "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=",
+      "version": "3.3.1",
+      "integrity": "sha1-nOy1ZQPAraHydB271lRuSxO1fM8=",
       "optional": true,
       "dependencies": {
         "parent-module": "^1.0.0",
@@ -2970,14 +3034,14 @@
       }
     },
     "node_modules/is-docker": {
-      "version": "2.2.1",
-      "integrity": "sha1-M+6r4jz+hvFL3kQIoCwM+4U6zao=",
+      "version": "3.0.0",
+      "integrity": "sha1-kAk6oxBid9inelkQ265xdH4VogA=",
       "dev": true,
       "bin": {
         "is-docker": "cli.js"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -3010,6 +3074,23 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/is-inside-container": {
+      "version": "1.0.0",
+      "integrity": "sha1-6B+6aZZi6zHb2vJnZqYdSBRxfqQ=",
+      "dev": true,
+      "dependencies": {
+        "is-docker": "^3.0.0"
+      },
+      "bin": {
+        "is-inside-container": "cli.js"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/is-interactive": {
       "version": "2.0.0",
       "integrity": "sha1-QMV2FFk4JtoRAK3mBZd41ZfxbpA=",
@@ -3057,14 +3138,17 @@
       }
     },
     "node_modules/is-wsl": {
-      "version": "2.2.0",
-      "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
+      "version": "3.1.0",
+      "integrity": "sha1-4cZX45wQCQr8vt7GFyD2uSTDy9I=",
       "dev": true,
       "dependencies": {
-        "is-docker": "^2.0.0"
+        "is-inside-container": "^1.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/isarray": {
@@ -3078,8 +3162,8 @@
       "devOptional": true
     },
     "node_modules/jackspeak": {
-      "version": "4.0.2",
-      "integrity": "sha1-EflGijcwxv9vVoI6gg1+O+m+8BU=",
+      "version": "4.1.0",
+      "integrity": "sha1-xInAefK2NtxMvpsDEqE/8SguVhs=",
       "devOptional": true,
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
@@ -3425,7 +3509,7 @@
     "node_modules/math-intrinsics": {
       "version": "1.1.0",
       "integrity": "sha1-oN10voHiqlwvJ+Zc4oNgXuTit/k=",
-      "dev": true,
+      "devOptional": true,
       "engines": {
         "node": ">= 0.4"
       }
@@ -3662,8 +3746,8 @@
       }
     },
     "node_modules/mock-fs": {
-      "version": "5.4.1",
-      "integrity": "sha1-sAq8ZYyxnbvygv3i8Fu3Uc0eEqU=",
+      "version": "5.5.0",
+      "integrity": "sha1-lKRtKZqqWI5zWiAcvoI8h26R84U=",
       "optional": true,
       "engines": {
         "node": ">=12.0.0"
@@ -3680,8 +3764,8 @@
       "dev": true
     },
     "node_modules/napi-build-utils": {
-      "version": "1.0.2",
-      "integrity": "sha1-sf3cCyxG44Cgt6dvmE3UfEGhOAY=",
+      "version": "2.0.0",
+      "integrity": "sha1-E8IsAYf8/MzhRhhEE2NypH3cAn4=",
       "dev": true,
       "optional": true
     },
@@ -3711,8 +3795,8 @@
       }
     },
     "node_modules/node-abi": {
-      "version": "3.73.0",
-      "integrity": "sha1-RFnqd+cZae26hYg4fuywXiws/zs=",
+      "version": "3.74.0",
+      "integrity": "sha1-W/tEJCZOrrkUMtKtudojxjowHtA=",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -3766,8 +3850,8 @@
       }
     },
     "node_modules/object-inspect": {
-      "version": "1.13.3",
-      "integrity": "sha1-8UwYPeURMCQ9bRiuFJN1/1DqSIo=",
+      "version": "1.13.4",
+      "integrity": "sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=",
       "dev": true,
       "engines": {
         "node": ">= 0.4"
@@ -3799,16 +3883,17 @@
       }
     },
     "node_modules/open": {
-      "version": "8.4.2",
-      "integrity": "sha1-W1/+Ko95Pc0qrXPlUMuHtZywhPk=",
+      "version": "10.1.0",
+      "integrity": "sha1-p3lebl1Rmr5ChtmTe7JLURIlmOE=",
       "dev": true,
       "dependencies": {
-        "define-lazy-prop": "^2.0.0",
-        "is-docker": "^2.1.1",
-        "is-wsl": "^2.2.0"
+        "default-browser": "^5.2.1",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "is-wsl": "^3.1.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -4106,8 +4191,8 @@
       }
     },
     "node_modules/prebuild-install": {
-      "version": "7.1.2",
-      "integrity": "sha1-pf2ZhvWmJR+8R+Hlxl3nHmjAoFY=",
+      "version": "7.1.3",
+      "integrity": "sha1-1jCrrSsUdEPyCiEpF76uaLgJLuw=",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -4116,7 +4201,7 @@
         "github-from-package": "0.0.0",
         "minimist": "^1.2.3",
         "mkdirp-classic": "^0.5.3",
-        "napi-build-utils": "^1.0.1",
+        "napi-build-utils": "^2.0.0",
         "node-abi": "^3.3.0",
         "pump": "^3.0.0",
         "rc": "^1.2.7",
@@ -4260,6 +4345,11 @@
         "util-deprecate": "~1.0.1"
       }
     },
+    "node_modules/readable-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "optional": true
+    },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
@@ -4308,8 +4398,8 @@
       "optional": true
     },
     "node_modules/reusify": {
-      "version": "1.0.4",
-      "integrity": "sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=",
+      "version": "1.1.0",
+      "integrity": "sha1-D+E7lSLhRz9RtVjueW4I8R+bSJ8=",
       "optional": true,
       "engines": {
         "iojs": ">=1.0.0",
@@ -4377,6 +4467,17 @@
         "node": "*"
       }
     },
+    "node_modules/run-applescript": {
+      "version": "7.0.0",
+      "integrity": "sha1-5aVTwr/9Yg4WnSdsHNjxtkd4++s=",
+      "dev": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "integrity": "sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=",
@@ -4400,9 +4501,23 @@
       }
     },
     "node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
-      "devOptional": true
+      "version": "5.2.1",
+      "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+      "devOptional": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
     },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
@@ -4415,8 +4530,8 @@
       "dev": true
     },
     "node_modules/semver": {
-      "version": "7.6.3",
-      "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=",
+      "version": "7.7.1",
+      "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -4675,6 +4790,11 @@
         "safe-buffer": "~5.1.0"
       }
     },
+    "node_modules/string_decoder/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "optional": true
+    },
     "node_modules/string-width": {
       "version": "5.1.2",
       "integrity": "sha1-FPja7G2B5yIdKjV+Zoyrc728p5Q=",
@@ -4891,8 +5011,8 @@
       "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
     },
     "node_modules/ts-api-utils": {
-      "version": "2.0.0",
-      "integrity": "sha1-udfV9+yfc29NDwl1i4YHl5BEqQA=",
+      "version": "2.0.1",
+      "integrity": "sha1-ZgcpOFtiW5OaqlgFT0XAWPM/EM0=",
       "optional": true,
       "engines": {
         "node": ">=18.12"
diff --git a/package.json b/package.json
index 59bae72db2..f95e789a3a 100644
--- a/package.json
+++ b/package.json
@@ -62,31 +62,31 @@
   "dependencies": {
     "@vscode/extension-telemetry": "^0.9.8",
     "node-fetch": "^2.7.0",
-    "semver": "^7.6.3",
+    "semver": "^7.7.1",
     "untildify": "^4.0.0",
     "uuid": "^9.0.1",
     "vscode-languageclient": "^9.0.1",
     "vscode-languageserver-protocol": "^3.17.5"
   },
   "devDependencies": {
-    "@vscode/vsce": "^3.2.1",
+    "@vscode/vsce": "^3.2.2",
     "esbuild": "^0.21.5"
   },
   "optionalDependencies": {
     "@tsconfig/node20": "^20.1.4",
     "@types/mocha": "^10.0.10",
     "@types/mock-fs": "^4.13.4",
-    "@types/node": "^20.17.14",
+    "@types/node": "^20.17.19",
     "@types/node-fetch": "^2.6.12",
     "@types/rewire": "^2.5.30",
     "@types/semver": "^7.5.8",
-    "@types/sinon": "^17.0.3",
+    "@types/sinon": "^17.0.4",
     "@types/ungap__structured-clone": "^1.2.0",
     "@types/uuid": "^9.0.8",
     "@types/vscode": "~1.96.0",
-    "@typescript-eslint/eslint-plugin": "^8.20.0",
-    "@typescript-eslint/parser": "^8.20.0",
-    "@ungap/structured-clone": "^1.2.1",
+    "@typescript-eslint/eslint-plugin": "^8.25.0",
+    "@typescript-eslint/parser": "^8.25.0",
+    "@ungap/structured-clone": "^1.3.0",
     "@vscode/debugprotocol": "^1.68.0",
     "@vscode/test-electron": "^2.4.1",
     "eslint": "^8.57.0",
@@ -95,7 +95,7 @@
     "mocha": "^10.8.2",
     "mocha-explorer-launcher-scripts": "^0.4.0",
     "mocha-multi-reporters": "^1.5.1",
-    "mock-fs": "^5.4.1",
+    "mock-fs": "^5.5.0",
     "rewire": "^7.0.0",
     "sinon": "^18.0.1",
     "source-map-support": "^0.5.21",
diff --git a/vscode-powershell.build.ps1 b/vscode-powershell.build.ps1
index 8f297ba4fe..7006cd1a73 100644
--- a/vscode-powershell.build.ps1
+++ b/vscode-powershell.build.ps1
@@ -111,7 +111,7 @@ task Test Lint, Build, {
     Write-Build DarkMagenta "Running extension tests"
     Invoke-BuildExec { & npm run test }
     # Reset the state of files modified by tests
-    Invoke-BuildExec { git checkout package.json test/TestEnvironment.code-workspace }
+    Invoke-BuildExec { git checkout test/TestEnvironment.code-workspace }
 }
 
 task TestEditorServices -If (Get-EditorServicesPath) {

From 3920717ef8c857059b1ae86fe5a70d4547c2f076 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 26 Feb 2025 11:53:36 -0800
Subject: [PATCH 04/33] Update more packages where possible

---
 package-lock.json | 376 +++++++++++++++++++++++++++++-----------------
 package.json      |   6 +-
 2 files changed, 237 insertions(+), 145 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 27afce26b2..6c4d6f2c67 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,7 +19,7 @@
       },
       "devDependencies": {
         "@vscode/vsce": "^3.2.2",
-        "esbuild": "^0.21.5"
+        "esbuild": "^0.25.0"
       },
       "engines": {
         "vscode": "^1.96.0"
@@ -44,12 +44,12 @@
         "eslint": "^8.57.0",
         "eslint-plugin-header": "^3.1.1",
         "glob": "^11.0.1",
-        "mocha": "^10.8.2",
+        "mocha": "^11.1.0",
         "mocha-explorer-launcher-scripts": "^0.4.0",
         "mocha-multi-reporters": "^1.5.1",
         "mock-fs": "^5.5.0",
         "rewire": "^7.0.0",
-        "sinon": "^18.0.1",
+        "sinon": "^19.0.2",
         "source-map-support": "^0.5.21",
         "typescript": "^5.7.3"
       }
@@ -212,8 +212,8 @@
       }
     },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.21.5",
-      "integrity": "sha1-xxhKMmUz/N8bjuBzPiHHE7l1V18=",
+      "version": "0.25.0",
+      "integrity": "sha1-SZYAxeF1elJJkNXZJgHwrDzof2Q=",
       "cpu": [
         "ppc64"
       ],
@@ -223,12 +223,12 @@
         "aix"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.21.5",
-      "integrity": "sha1-mwQ4T7dxkm36bXrQQyTssqubLig=",
+      "version": "0.25.0",
+      "integrity": "sha1-ym54iJQlBfE+iKyfX30qcvn6zSs=",
       "cpu": [
         "arm"
       ],
@@ -238,12 +238,12 @@
         "android"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.21.5",
-      "integrity": "sha1-Cdm0NXeA2p6jp9+4M6Hx/0ObQFI=",
+      "version": "0.25.0",
+      "integrity": "sha1-ubgjFWGh37lOsx9O4Fa5KphcMk8=",
       "cpu": [
         "arm64"
       ],
@@ -253,12 +253,12 @@
         "android"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-KZGOwtt1TO3LbBsE3ozWVHr2Rh4=",
+      "version": "0.25.0",
+      "integrity": "sha1-52XqdTusRC38nLU2Us6L050z4WM=",
       "cpu": [
         "x64"
       ],
@@ -268,12 +268,12 @@
         "android"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.21.5",
-      "integrity": "sha1-5JW1OWYOUWkPOSivUKdvsKbM/yo=",
+      "version": "0.25.0",
+      "integrity": "sha1-+jlBZLDYnU/cOoohmJr3DvV5+iw=",
       "cpu": [
         "arm64"
       ],
@@ -283,12 +283,12 @@
         "darwin"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-wTg4+lc3KDmr3dyR1xVCzuouHiI=",
+      "version": "0.25.0",
+      "integrity": "sha1-kZedmNMLpufWmyLGF8yCva1g5Ho=",
       "cpu": [
         "x64"
       ],
@@ -298,12 +298,12 @@
         "darwin"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.21.5",
-      "integrity": "sha1-ZGuYmqIL+J/Qcd1dv61po1QuVQ4=",
+      "version": "0.25.0",
+      "integrity": "sha1-uX6XBzMQc2tDCgewmdg3CEuF6c4=",
       "cpu": [
         "arm64"
       ],
@@ -313,12 +313,12 @@
         "freebsd"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-qmFc/ICvlU00WJBuOMoiwYz1wmE=",
+      "version": "0.25.0",
+      "integrity": "sha1-87aU0Nph2ZEOx97/eU1ETPvztuc=",
       "cpu": [
         "x64"
       ],
@@ -328,12 +328,12 @@
         "freebsd"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.21.5",
-      "integrity": "sha1-/G/RGorKVsH284lPK+oEefj2Jrk=",
+      "version": "0.25.0",
+      "integrity": "sha1-zEkwWzxtoxfJAGiJlaQFDmzJHKM=",
       "cpu": [
         "arm"
       ],
@@ -343,12 +343,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.21.5",
-      "integrity": "sha1-cKxvoU9ct+H3+Ie8/7aArQmSK1s=",
+      "version": "0.25.0",
+      "integrity": "sha1-+SH2mfFi8zIDbVZXytkDb3qZP3M=",
       "cpu": [
         "arm64"
       ],
@@ -358,12 +358,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.21.5",
-      "integrity": "sha1-MnH1Oz+T49CT1RjRZJ1taNNG7eI=",
+      "version": "0.25.0",
+      "integrity": "sha1-Pgc2/PqxbP8ELeyAYkfix24Qnhk=",
       "cpu": [
         "ia32"
       ],
@@ -373,12 +373,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.21.5",
-      "integrity": "sha1-7WLgQjjFcCauqDHFoTC3PA+fJt8=",
+      "version": "0.25.0",
+      "integrity": "sha1-6iv3MIg83bnfuFEkIytah1uAIMc=",
       "cpu": [
         "loong64"
       ],
@@ -388,12 +388,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.21.5",
-      "integrity": "sha1-55uOtIvzsQb63sGsgkD7l7TmTL4=",
+      "version": "0.25.0",
+      "integrity": "sha1-TKursU7t4JJImAotLYuWZGQpT/E=",
       "cpu": [
         "mips64el"
       ],
@@ -403,12 +403,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.21.5",
-      "integrity": "sha1-XyIDhgoUO5kZ04PvdXNSH7FUw+Q=",
+      "version": "0.25.0",
+      "integrity": "sha1-iGCkYJkUwGU3OnckLphReWWOGVE=",
       "cpu": [
         "ppc64"
       ],
@@ -418,12 +418,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.21.5",
-      "integrity": "sha1-B7yv2ZMi1a9i9hjLnmqbf0u4Jdw=",
+      "version": "0.25.0",
+      "integrity": "sha1-uvJuILstOM+4buKC3/hAwE9O2Yc=",
       "cpu": [
         "riscv64"
       ],
@@ -433,12 +433,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.21.5",
-      "integrity": "sha1-t8z2hnUdaj5EuGJ6uryL4+9i2N4=",
+      "version": "0.25.0",
+      "integrity": "sha1-gyOvwNbLG23G6f0h79nhVCw2QKQ=",
       "cpu": [
         "s390x"
       ],
@@ -448,12 +448,12 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-bY8Mdo4HDmQwmvgAS7lOaKsrs7A=",
+      "version": "0.25.0",
+      "integrity": "sha1-CPz2DLQA7SOC6fjg9VkLrIgQRpo=",
       "cpu": [
         "x64"
       ],
@@ -463,12 +463,27 @@
         "linux"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.25.0",
+      "integrity": "sha1-k1xsdOIPciSRj74ubG/oZbbG6ls=",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-u+Qw9g03jsuI3sshnGAmZzh6YEc=",
+      "version": "0.25.0",
+      "integrity": "sha1-QUZ3zvZtFsWk0hB1HrKIG7nBtis=",
       "cpu": [
         "x64"
       ],
@@ -478,12 +493,27 @@
         "netbsd"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.25.0",
+      "integrity": "sha1-j9VaTQjSXNxXKETxPIjWeMhNE/c=",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-mdHPKTcnlWDSEEgh9czOIgyyr3A=",
+      "version": "0.25.0",
+      "integrity": "sha1-DEjdsUlLvC1ry6oUKaf0Zfod7d4=",
       "cpu": [
         "x64"
       ],
@@ -493,12 +523,12 @@
         "openbsd"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-CHQVEsENUpVmurqDe0/gUsjzSHs=",
+      "version": "0.25.0",
+      "integrity": "sha1-hv+Qddd5YrYN0mID1zUvkmhMjJI=",
       "cpu": [
         "x64"
       ],
@@ -508,12 +538,12 @@
         "sunos"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.21.5",
-      "integrity": "sha1-Z1tzhTmEESQHNQFhRKsumaYPx10=",
+      "version": "0.25.0",
+      "integrity": "sha1-hJxiMnwyKUZ/W1zWgb9QWIRC6Ww=",
       "cpu": [
         "arm64"
       ],
@@ -523,12 +553,12 @@
         "win32"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.21.5",
-      "integrity": "sha1-G/w86YqmypoJaeTSr3IUTFnBGTs=",
+      "version": "0.25.0",
+      "integrity": "sha1-9i60gM18ygiMtlu0am2yW3JdwHk=",
       "cpu": [
         "ia32"
       ],
@@ -538,12 +568,12 @@
         "win32"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.21.5",
-      "integrity": "sha1-rK01HVgtFXuxRVNdsqb/U91RS1w=",
+      "version": "0.25.0",
+      "integrity": "sha1-yOEZowp8jWC50uItIHNyLd47cQs=",
       "cpu": [
         "x64"
       ],
@@ -553,7 +583,7 @@
         "win32"
       ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
@@ -858,6 +888,14 @@
         "node": ">= 8"
       }
     },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "integrity": "sha1-p36nQvqyV3UUVDTrHSMoz1ATrDM=",
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
     "node_modules/@sinonjs/commons": {
       "version": "3.0.1",
       "integrity": "sha1-ECk1fkTKkBphVYX20nc428iQhM0=",
@@ -867,11 +905,11 @@
       }
     },
     "node_modules/@sinonjs/fake-timers": {
-      "version": "11.2.2",
-      "integrity": "sha1-UAY8w1dPSie9hFMYCgQXHIXMlpk=",
+      "version": "13.0.5",
+      "integrity": "sha1-NrnbwhrVVGSG6pFz1r6gY+sXF9U=",
       "optional": true,
       "dependencies": {
-        "@sinonjs/commons": "^3.0.0"
+        "@sinonjs/commons": "^3.0.1"
       }
     },
     "node_modules/@sinonjs/samsam": {
@@ -1772,13 +1810,16 @@
       }
     },
     "node_modules/cliui": {
-      "version": "7.0.4",
-      "integrity": "sha1-oCZe5lVHb8gHrqnfPfjfd4OAi08=",
+      "version": "8.0.1",
+      "integrity": "sha1-DASwddsCy/5g3I5s8vVIaxo2CKo=",
       "optional": true,
       "dependencies": {
         "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
+        "strip-ansi": "^6.0.1",
         "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
     "node_modules/cliui/node_modules/ansi-styles": {
@@ -2219,40 +2260,42 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.21.5",
-      "integrity": "sha1-nKMBsSCSKVm3ZjYNisgw2g0CmX0=",
+      "version": "0.25.0",
+      "integrity": "sha1-DeF4encgbFp57rY0piPTm1AGzpI=",
       "dev": true,
       "hasInstallScript": true,
       "bin": {
         "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.21.5",
-        "@esbuild/android-arm": "0.21.5",
-        "@esbuild/android-arm64": "0.21.5",
-        "@esbuild/android-x64": "0.21.5",
-        "@esbuild/darwin-arm64": "0.21.5",
-        "@esbuild/darwin-x64": "0.21.5",
-        "@esbuild/freebsd-arm64": "0.21.5",
-        "@esbuild/freebsd-x64": "0.21.5",
-        "@esbuild/linux-arm": "0.21.5",
-        "@esbuild/linux-arm64": "0.21.5",
-        "@esbuild/linux-ia32": "0.21.5",
-        "@esbuild/linux-loong64": "0.21.5",
-        "@esbuild/linux-mips64el": "0.21.5",
-        "@esbuild/linux-ppc64": "0.21.5",
-        "@esbuild/linux-riscv64": "0.21.5",
-        "@esbuild/linux-s390x": "0.21.5",
-        "@esbuild/linux-x64": "0.21.5",
-        "@esbuild/netbsd-x64": "0.21.5",
-        "@esbuild/openbsd-x64": "0.21.5",
-        "@esbuild/sunos-x64": "0.21.5",
-        "@esbuild/win32-arm64": "0.21.5",
-        "@esbuild/win32-ia32": "0.21.5",
-        "@esbuild/win32-x64": "0.21.5"
+        "@esbuild/aix-ppc64": "0.25.0",
+        "@esbuild/android-arm": "0.25.0",
+        "@esbuild/android-arm64": "0.25.0",
+        "@esbuild/android-x64": "0.25.0",
+        "@esbuild/darwin-arm64": "0.25.0",
+        "@esbuild/darwin-x64": "0.25.0",
+        "@esbuild/freebsd-arm64": "0.25.0",
+        "@esbuild/freebsd-x64": "0.25.0",
+        "@esbuild/linux-arm": "0.25.0",
+        "@esbuild/linux-arm64": "0.25.0",
+        "@esbuild/linux-ia32": "0.25.0",
+        "@esbuild/linux-loong64": "0.25.0",
+        "@esbuild/linux-mips64el": "0.25.0",
+        "@esbuild/linux-ppc64": "0.25.0",
+        "@esbuild/linux-riscv64": "0.25.0",
+        "@esbuild/linux-s390x": "0.25.0",
+        "@esbuild/linux-x64": "0.25.0",
+        "@esbuild/netbsd-arm64": "0.25.0",
+        "@esbuild/netbsd-x64": "0.25.0",
+        "@esbuild/openbsd-arm64": "0.25.0",
+        "@esbuild/openbsd-x64": "0.25.0",
+        "@esbuild/sunos-x64": "0.25.0",
+        "@esbuild/win32-arm64": "0.25.0",
+        "@esbuild/win32-ia32": "0.25.0",
+        "@esbuild/win32-x64": "0.25.0"
       }
     },
     "node_modules/escalade": {
@@ -3627,8 +3670,8 @@
       "optional": true
     },
     "node_modules/mocha": {
-      "version": "10.8.2",
-      "integrity": "sha1-jYNC0BbtQRsSpCnrcxuCX5Ya+5Y=",
+      "version": "11.1.0",
+      "integrity": "sha1-INfGrE1ta8tgqKpHlx/KdMZcPGY=",
       "optional": true,
       "dependencies": {
         "ansi-colors": "^4.1.3",
@@ -3638,7 +3681,7 @@
         "diff": "^5.2.0",
         "escape-string-regexp": "^4.0.0",
         "find-up": "^5.0.0",
-        "glob": "^8.1.0",
+        "glob": "^10.4.5",
         "he": "^1.2.0",
         "js-yaml": "^4.1.0",
         "log-symbols": "^4.1.0",
@@ -3648,8 +3691,8 @@
         "strip-json-comments": "^3.1.1",
         "supports-color": "^8.1.1",
         "workerpool": "^6.5.1",
-        "yargs": "^16.2.0",
-        "yargs-parser": "^20.2.9",
+        "yargs": "^17.7.2",
+        "yargs-parser": "^21.1.1",
         "yargs-unparser": "^2.0.0"
       },
       "bin": {
@@ -3657,7 +3700,7 @@
         "mocha": "bin/mocha.js"
       },
       "engines": {
-        "node": ">= 14.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
     "node_modules/mocha-explorer-launcher-scripts": {
@@ -3695,18 +3738,33 @@
       }
     },
     "node_modules/mocha/node_modules/glob": {
-      "version": "8.1.0",
-      "integrity": "sha1-04j2Vlk+9wjuPjRkD9+5mp/Rwz4=",
+      "version": "10.4.5",
+      "integrity": "sha1-9NnwuQ/9urCcnXf18ptCYlF7CVY=",
       "optional": true,
       "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
+      "version": "9.0.5",
+      "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=",
+      "optional": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=16 || 14 >=14.17"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
@@ -3720,6 +3778,25 @@
         "node": ">=8"
       }
     },
+    "node_modules/mocha/node_modules/jackspeak": {
+      "version": "3.4.3",
+      "integrity": "sha1-iDOp2Jq0rN5hiJQr0cU7Y5DtWoo=",
+      "optional": true,
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/mocha/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=",
+      "optional": true
+    },
     "node_modules/mocha/node_modules/minimatch": {
       "version": "5.1.6",
       "integrity": "sha1-HPy4z1Ui6mmVLNKvla4JR38SKpY=",
@@ -3731,6 +3808,21 @@
         "node": ">=10"
       }
     },
+    "node_modules/mocha/node_modules/path-scurry": {
+      "version": "1.11.1",
+      "integrity": "sha1-eWCmaIiFlKByCxKpEdGnQqufEdI=",
+      "optional": true,
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/mocha/node_modules/supports-color": {
       "version": "8.1.1",
       "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=",
@@ -3786,14 +3878,6 @@
         "path-to-regexp": "^8.1.0"
       }
     },
-    "node_modules/nise/node_modules/@sinonjs/fake-timers": {
-      "version": "13.0.5",
-      "integrity": "sha1-NrnbwhrVVGSG6pFz1r6gY+sXF9U=",
-      "optional": true,
-      "dependencies": {
-        "@sinonjs/commons": "^3.0.1"
-      }
-    },
     "node_modules/node-abi": {
       "version": "3.74.0",
       "integrity": "sha1-W/tEJCZOrrkUMtKtudojxjowHtA=",
@@ -4696,22 +4780,30 @@
       }
     },
     "node_modules/sinon": {
-      "version": "18.0.1",
-      "integrity": "sha1-RkM0zf6izdxe2ppOp+Lj8MepHF4=",
+      "version": "19.0.2",
+      "integrity": "sha1-lEz3cdIiNqqE/Bq3DOW//DohXa0=",
       "optional": true,
       "dependencies": {
         "@sinonjs/commons": "^3.0.1",
-        "@sinonjs/fake-timers": "11.2.2",
-        "@sinonjs/samsam": "^8.0.0",
-        "diff": "^5.2.0",
-        "nise": "^6.0.0",
-        "supports-color": "^7"
+        "@sinonjs/fake-timers": "^13.0.2",
+        "@sinonjs/samsam": "^8.0.1",
+        "diff": "^7.0.0",
+        "nise": "^6.1.1",
+        "supports-color": "^7.2.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/sinon"
       }
     },
+    "node_modules/sinon/node_modules/diff": {
+      "version": "7.0.0",
+      "integrity": "sha1-P7NNOHzXbYA/buvqZ7kh2rAYKpo=",
+      "optional": true,
+      "engines": {
+        "node": ">=0.3.1"
+      }
+    },
     "node_modules/sinon/node_modules/has-flag": {
       "version": "4.0.0",
       "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
@@ -5429,28 +5521,28 @@
       "dev": true
     },
     "node_modules/yargs": {
-      "version": "16.2.0",
-      "integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
+      "version": "17.7.2",
+      "integrity": "sha1-mR3zmspnWhkrgW4eA2P5110qomk=",
       "optional": true,
       "dependencies": {
-        "cliui": "^7.0.2",
+        "cliui": "^8.0.1",
         "escalade": "^3.1.1",
         "get-caller-file": "^2.0.5",
         "require-directory": "^2.1.1",
-        "string-width": "^4.2.0",
+        "string-width": "^4.2.3",
         "y18n": "^5.0.5",
-        "yargs-parser": "^20.2.2"
+        "yargs-parser": "^21.1.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       }
     },
     "node_modules/yargs-parser": {
-      "version": "20.2.9",
-      "integrity": "sha1-LrfcOwKJcY/ClfNidThFxBoMlO4=",
+      "version": "21.1.1",
+      "integrity": "sha1-kJa87r+ZDSG7MfqVFuDt4pSnfTU=",
       "optional": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       }
     },
     "node_modules/yargs-unparser": {
diff --git a/package.json b/package.json
index f95e789a3a..c6f7d30c22 100644
--- a/package.json
+++ b/package.json
@@ -70,7 +70,7 @@
   },
   "devDependencies": {
     "@vscode/vsce": "^3.2.2",
-    "esbuild": "^0.21.5"
+    "esbuild": "^0.25.0"
   },
   "optionalDependencies": {
     "@tsconfig/node20": "^20.1.4",
@@ -92,12 +92,12 @@
     "eslint": "^8.57.0",
     "eslint-plugin-header": "^3.1.1",
     "glob": "^11.0.1",
-    "mocha": "^10.8.2",
+    "mocha": "^11.1.0",
     "mocha-explorer-launcher-scripts": "^0.4.0",
     "mocha-multi-reporters": "^1.5.1",
     "mock-fs": "^5.5.0",
     "rewire": "^7.0.0",
-    "sinon": "^18.0.1",
+    "sinon": "^19.0.2",
     "source-map-support": "^0.5.21",
     "typescript": "^5.7.3"
   },

From 43c8bff8bd316684fb4bc82cdbed36ceb7988904 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Mon, 3 Mar 2025 15:45:16 -0800
Subject: [PATCH 05/33] Switch to PowerShell Gallery mirror (#5150)

---
 .pipelines/vscode-powershell-Official.yml | 5 +----
 tools/installPSResources.ps1              | 2 +-
 2 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/.pipelines/vscode-powershell-Official.yml b/.pipelines/vscode-powershell-Official.yml
index c7a0759964..018e598c0e 100644
--- a/.pipelines/vscode-powershell-Official.yml
+++ b/.pipelines/vscode-powershell-Official.yml
@@ -172,10 +172,7 @@ extends:
               $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
               Write-Host Using PowerShellEditorServices v$($manifest.Version)
             displayName: PowerShellEditorServices version
-          - pwsh: |
-              Register-PSRepository -Name CFS -SourceLocation "https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/powershell/nuget/v2" -InstallationPolicy Trusted
-              Install-Module -Repository CFS -Name Microsoft.PowerShell.PSResourceGet
-              ./tools/installPSResources.ps1 -PSRepository CFS
+          - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
             displayName: Install PSResources
           - pwsh: Invoke-Build Test -Configuration $(BuildConfiguration)
             displayName: Run tests
diff --git a/tools/installPSResources.ps1 b/tools/installPSResources.ps1
index 97fed8bc38..3bb642aced 100644
--- a/tools/installPSResources.ps1
+++ b/tools/installPSResources.ps1
@@ -6,7 +6,7 @@ param(
 )
 
 if ($PSRepository -eq "CFS" -and -not (Get-PSResourceRepository -Name CFS -ErrorAction SilentlyContinue)) {
-    Register-PSResourceRepository -Name CFS -Uri "https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/powershell/nuget/v3/index.json"
+    Register-PSResourceRepository -Name CFS -Uri "https://pkgs.dev.azure.com/powershell/PowerShell/_packaging/PowerShellGalleryMirror/nuget/v3/index.json"
 }
 
 # NOTE: Due to a bug in Install-PSResource with upstream feeds, we have to

From 5e66d50c53026c1589305bd1c1c851a736a84028 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Tue, 18 Mar 2025 12:52:47 -0700
Subject: [PATCH 06/33] Update NPM packages

---
 package-lock.json | 942 +++++++++++++++++++++++++++++++++++-----------
 package.json      |  12 +-
 src/session.ts    |   4 +-
 3 files changed, 732 insertions(+), 226 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 6c4d6f2c67..3f4322f053 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,8 +18,8 @@
         "vscode-languageserver-protocol": "^3.17.5"
       },
       "devDependencies": {
-        "@vscode/vsce": "^3.2.2",
-        "esbuild": "^0.25.0"
+        "@vscode/vsce": "^3.3.0",
+        "esbuild": "^0.25.1"
       },
       "engines": {
         "vscode": "^1.96.0"
@@ -28,7 +28,7 @@
         "@tsconfig/node20": "^20.1.4",
         "@types/mocha": "^10.0.10",
         "@types/mock-fs": "^4.13.4",
-        "@types/node": "^20.17.19",
+        "@types/node": "^20.17.24",
         "@types/node-fetch": "^2.6.12",
         "@types/rewire": "^2.5.30",
         "@types/semver": "^7.5.8",
@@ -36,8 +36,8 @@
         "@types/ungap__structured-clone": "^1.2.0",
         "@types/uuid": "^9.0.8",
         "@types/vscode": "~1.96.0",
-        "@typescript-eslint/eslint-plugin": "^8.25.0",
-        "@typescript-eslint/parser": "^8.25.0",
+        "@typescript-eslint/eslint-plugin": "^8.26.1",
+        "@typescript-eslint/parser": "^8.26.1",
         "@ungap/structured-clone": "^1.3.0",
         "@vscode/debugprotocol": "^1.68.0",
         "@vscode/test-electron": "^2.4.1",
@@ -51,13 +51,14 @@
         "rewire": "^7.0.0",
         "sinon": "^19.0.2",
         "source-map-support": "^0.5.21",
-        "typescript": "^5.7.3"
+        "typescript": "^5.8.2"
       }
     },
     "node_modules/@azure/abort-controller": {
       "version": "2.1.2",
       "integrity": "sha1-Qv4MyrI4QdmQWBLFjxCC0neEVm0=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "tslib": "^2.6.2"
       },
@@ -69,6 +70,7 @@
       "version": "1.9.0",
       "integrity": "sha1-rHJbA/q+PIkjcQZe6eIEG+4P0aw=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
         "@azure/core-util": "^1.11.0",
@@ -79,9 +81,10 @@
       }
     },
     "node_modules/@azure/core-client": {
-      "version": "1.9.2",
-      "integrity": "sha1-b8ac7igWiDq2xc3WU+5PL/l3T3Q=",
+      "version": "1.9.3",
+      "integrity": "sha1-nKjzvccw0Q1Y9lycLJypkrwVu2c=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
         "@azure/core-auth": "^1.4.0",
@@ -96,9 +99,10 @@
       }
     },
     "node_modules/@azure/core-rest-pipeline": {
-      "version": "1.19.0",
-      "integrity": "sha1-TMYNPy7mjPDvN5hRtO0XX3kyyMU=",
+      "version": "1.19.1",
+      "integrity": "sha1-50BnZER3egTcVWVthmATHf2SaSQ=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
         "@azure/core-auth": "^1.8.0",
@@ -117,6 +121,7 @@
       "version": "1.2.0",
       "integrity": "sha1-e+XVPDUi1jnPGQQsvNsZ9xvDWrI=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "tslib": "^2.6.2"
       },
@@ -128,6 +133,7 @@
       "version": "1.11.0",
       "integrity": "sha1-9TD8Z+c4rqhy+90cyEFucCGfrac=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
         "tslib": "^2.6.2"
@@ -137,9 +143,10 @@
       }
     },
     "node_modules/@azure/identity": {
-      "version": "4.7.0",
-      "integrity": "sha1-s7xXrsQEMomRCP1BF36BaOe7YiM=",
+      "version": "4.8.0",
+      "integrity": "sha1-aGaCaDpHDM9NuyWX7iNPnFxIOkA=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
         "@azure/core-auth": "^1.9.0",
@@ -149,7 +156,7 @@
         "@azure/core-util": "^1.11.0",
         "@azure/logger": "^1.0.0",
         "@azure/msal-browser": "^4.2.0",
-        "@azure/msal-node": "^3.2.1",
+        "@azure/msal-node": "^3.2.3",
         "events": "^3.0.0",
         "jws": "^4.0.0",
         "open": "^10.1.0",
@@ -164,6 +171,7 @@
       "version": "1.1.4",
       "integrity": "sha1-Ijy/K0JN+mZHjOmk9XX1nG83l2g=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "tslib": "^2.6.2"
       },
@@ -172,30 +180,33 @@
       }
     },
     "node_modules/@azure/msal-browser": {
-      "version": "4.5.0",
-      "integrity": "sha1-+9xPWPDzelSHGZ9HBuX4oEzQAjQ=",
+      "version": "4.7.0",
+      "integrity": "sha1-Zw2paD8QRqyzbuLYdJHz8suQrAE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@azure/msal-common": "15.2.0"
+        "@azure/msal-common": "15.2.1"
       },
       "engines": {
         "node": ">=0.8.0"
       }
     },
     "node_modules/@azure/msal-common": {
-      "version": "15.2.0",
-      "integrity": "sha1-9OOLqFwKMiCLcEbgEcIf9ie2dVw=",
+      "version": "15.2.1",
+      "integrity": "sha1-XgVifQOLahGT7px3hsWMaQMeuOs=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.0"
       }
     },
     "node_modules/@azure/msal-node": {
-      "version": "3.2.3",
-      "integrity": "sha1-x0LWbTqRg8HfpBYGMtiJHGmve8w=",
+      "version": "3.3.0",
+      "integrity": "sha1-mW/uUq0neuBVj3SCrCZX9RZPyfE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@azure/msal-common": "15.2.0",
+        "@azure/msal-common": "15.2.1",
         "jsonwebtoken": "^9.0.0",
         "uuid": "^8.3.0"
       },
@@ -207,17 +218,19 @@
       "version": "8.3.2",
       "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "uuid": "dist/bin/uuid"
       }
     },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.0",
-      "integrity": "sha1-SZYAxeF1elJJkNXZJgHwrDzof2Q=",
+      "version": "0.25.1",
+      "integrity": "sha1-wzz2u+40l1YmsBuARRy7crTGyR0=",
       "cpu": [
         "ppc64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "aix"
@@ -227,12 +240,13 @@
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.25.0",
-      "integrity": "sha1-ym54iJQlBfE+iKyfX30qcvn6zSs=",
+      "version": "0.25.1",
+      "integrity": "sha1-6E0r8v4uYXeg+s2jpXWyE5/Ty5w=",
       "cpu": [
         "arm"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "android"
@@ -242,12 +256,13 @@
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-ubgjFWGh37lOsx9O4Fa5KphcMk8=",
+      "version": "0.25.1",
+      "integrity": "sha1-6nZgFcfSZVFk8iEA0z1/AwiijW0=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "android"
@@ -257,12 +272,13 @@
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-52XqdTusRC38nLU2Us6L050z4WM=",
+      "version": "0.25.1",
+      "integrity": "sha1-WDN77jvG140QQl5VAL0RNwz9++0=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "android"
@@ -272,12 +288,13 @@
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-+jlBZLDYnU/cOoohmJr3DvV5+iw=",
+      "version": "0.25.1",
+      "integrity": "sha1-pGgFwcWF1FGqg75yUAvW6Eld1ZE=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
@@ -287,12 +304,13 @@
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-kZedmNMLpufWmyLGF8yCva1g5Ho=",
+      "version": "0.25.1",
+      "integrity": "sha1-BkPgA7sjjGP8k92+59JqADvjzZg=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
@@ -302,12 +320,13 @@
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-uX6XBzMQc2tDCgewmdg3CEuF6c4=",
+      "version": "0.25.1",
+      "integrity": "sha1-z/GNpUacCZhrk+h5ed5daHL+j44=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "freebsd"
@@ -317,12 +336,13 @@
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-87aU0Nph2ZEOx97/eU1ETPvztuc=",
+      "version": "0.25.1",
+      "integrity": "sha1-Ni/AnC3hSYdiHBh4rxkgPEY2Xd4=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "freebsd"
@@ -332,12 +352,13 @@
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.0",
-      "integrity": "sha1-zEkwWzxtoxfJAGiJlaQFDmzJHKM=",
+      "version": "0.25.1",
+      "integrity": "sha1-3878usYKIJGLGVabS2V4RNOds1o=",
       "cpu": [
         "arm"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -347,12 +368,13 @@
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-+SH2mfFi8zIDbVZXytkDb3qZP3M=",
+      "version": "0.25.1",
+      "integrity": "sha1-qpDVsC78l6Jx4STm0c6kkGNPdJg=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -362,12 +384,13 @@
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.0",
-      "integrity": "sha1-Pgc2/PqxbP8ELeyAYkfix24Qnhk=",
+      "version": "0.25.1",
+      "integrity": "sha1-b5UnB3zLeVPtKvAuAT1LrGnxN1Q=",
       "cpu": [
         "ia32"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -377,12 +400,13 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.0",
-      "integrity": "sha1-6iv3MIg83bnfuFEkIytah1uAIMc=",
+      "version": "0.25.1",
+      "integrity": "sha1-KH0kEqVFblhgwoOdQqS1EoTRaXw=",
       "cpu": [
         "loong64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -392,12 +416,13 @@
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.0",
-      "integrity": "sha1-TKursU7t4JJImAotLYuWZGQpT/E=",
+      "version": "0.25.1",
+      "integrity": "sha1-UwV0ueG8XSD3pPRMXwReJvN4PVc=",
       "cpu": [
         "mips64el"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -407,12 +432,13 @@
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.0",
-      "integrity": "sha1-iGCkYJkUwGU3OnckLphReWWOGVE=",
+      "version": "0.25.1",
+      "integrity": "sha1-XX5rKDoLMh6kLGvAq+ueuZwfVYk=",
       "cpu": [
         "ppc64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -422,12 +448,13 @@
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.0",
-      "integrity": "sha1-uvJuILstOM+4buKC3/hAwE9O2Yc=",
+      "version": "0.25.1",
+      "integrity": "sha1-FPoM0HPCa07iRl0YzR4Y7qeFn6g=",
       "cpu": [
         "riscv64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -437,12 +464,13 @@
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.0",
-      "integrity": "sha1-gyOvwNbLG23G6f0h79nhVCw2QKQ=",
+      "version": "0.25.1",
+      "integrity": "sha1-5ne0udGzhAmHUiZsyqDVKkINwao=",
       "cpu": [
         "s390x"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -452,12 +480,13 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-CPz2DLQA7SOC6fjg9VkLrIgQRpo=",
+      "version": "0.25.1",
+      "integrity": "sha1-8ceWt4//XOOTZYMT6MWGExmNmVQ=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
@@ -467,12 +496,13 @@
       }
     },
     "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-k1xsdOIPciSRj74ubG/oZbbG6ls=",
+      "version": "0.25.1",
+      "integrity": "sha1-DSgLff45c/ERsC1f6fMGO5J5bSk=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "netbsd"
@@ -482,12 +512,13 @@
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-QUZ3zvZtFsWk0hB1HrKIG7nBtis=",
+      "version": "0.25.1",
+      "integrity": "sha1-vmY4k5MaS7PzoAnFzCT6loHMccA=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "netbsd"
@@ -497,12 +528,13 @@
       }
     },
     "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-j9VaTQjSXNxXKETxPIjWeMhNE/c=",
+      "version": "0.25.1",
+      "integrity": "sha1-2QIbiEIzZzoF3BzCbeC/Ml2CQhc=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "openbsd"
@@ -512,12 +544,13 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-DEjdsUlLvC1ry6oUKaf0Zfod7d4=",
+      "version": "0.25.1",
+      "integrity": "sha1-nx3BeG7S4pOMQEsGvMSL6aEyUN4=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "openbsd"
@@ -527,12 +560,13 @@
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-hv+Qddd5YrYN0mID1zUvkmhMjJI=",
+      "version": "0.25.1",
+      "integrity": "sha1-iarCSktBFZWbP3kBks8TA5ZpbCc=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "sunos"
@@ -542,12 +576,13 @@
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.0",
-      "integrity": "sha1-hJxiMnwyKUZ/W1zWgb9QWIRC6Ww=",
+      "version": "0.25.1",
+      "integrity": "sha1-NUNYZHpuqY6m0kO/SL3XpDSZlYI=",
       "cpu": [
         "arm64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "win32"
@@ -557,12 +592,13 @@
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.0",
-      "integrity": "sha1-9i60gM18ygiMtlu0am2yW3JdwHk=",
+      "version": "0.25.1",
+      "integrity": "sha1-jOpzQPJkfrqVGgQdyVZR45CM1Ms=",
       "cpu": [
         "ia32"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "win32"
@@ -572,12 +608,13 @@
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.0",
-      "integrity": "sha1-yOEZowp8jWC50uItIHNyLd47cQs=",
+      "version": "0.25.1",
+      "integrity": "sha1-fXmSLLLYj5BI8GOT2/YtLkrMtYQ=",
       "cpu": [
         "x64"
       ],
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "win32"
@@ -587,8 +624,9 @@
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.4.1",
-      "integrity": "sha1-0RRb8sIBMtZABJXW30v1k2L9nVY=",
+      "version": "4.5.1",
+      "integrity": "sha1-sPx+BtDJT4AVN/1CN+3CcG07jkw=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "eslint-visitor-keys": "^3.4.3"
@@ -606,6 +644,7 @@
     "node_modules/@eslint-community/regexpp": {
       "version": "4.12.1",
       "integrity": "sha1-z8bP/jnfOQo4Qc3iq8z5Lqp64OA=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -614,6 +653,7 @@
     "node_modules/@eslint/eslintrc": {
       "version": "2.1.4",
       "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "ajv": "^6.12.4",
@@ -636,6 +676,7 @@
     "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
       "version": "1.1.11",
       "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "balanced-match": "^1.0.0",
@@ -645,6 +686,7 @@
     "node_modules/@eslint/eslintrc/node_modules/minimatch": {
       "version": "3.1.2",
       "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^1.1.7"
@@ -656,6 +698,7 @@
     "node_modules/@eslint/js": {
       "version": "8.57.0",
       "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -664,6 +707,7 @@
     "node_modules/@humanwhocodes/config-array": {
       "version": "0.11.14",
       "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=",
+      "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
         "@humanwhocodes/object-schema": "^2.0.2",
@@ -677,6 +721,7 @@
     "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
       "version": "1.1.11",
       "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "balanced-match": "^1.0.0",
@@ -686,6 +731,7 @@
     "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
       "version": "3.1.2",
       "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^1.1.7"
@@ -697,6 +743,7 @@
     "node_modules/@humanwhocodes/module-importer": {
       "version": "1.0.1",
       "integrity": "sha1-r1smkaIrRL6EewyoFkHF+2rQFyw=",
+      "license": "Apache-2.0",
       "optional": true,
       "engines": {
         "node": ">=12.22"
@@ -709,12 +756,14 @@
     "node_modules/@humanwhocodes/object-schema": {
       "version": "2.0.3",
       "integrity": "sha1-Siho111taWPkI7z5C3/RvjQ0CdM=",
+      "license": "BSD-3-Clause",
       "optional": true
     },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
       "integrity": "sha1-s3Znt7wYHBaHgiWbq0JHT79StVA=",
       "devOptional": true,
+      "license": "ISC",
       "dependencies": {
         "string-width": "^5.1.2",
         "string-width-cjs": "npm:string-width@^4.2.0",
@@ -731,6 +780,7 @@
       "version": "6.1.0",
       "integrity": "sha1-lexAnGlhnWyxuLNPFLZg7yjr1lQ=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -742,6 +792,7 @@
       "version": "7.1.0",
       "integrity": "sha1-1bZWjKaJ2FYTcLBwdoXSJDT6/0U=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^6.0.1"
       },
@@ -753,63 +804,68 @@
       }
     },
     "node_modules/@microsoft/1ds-core-js": {
-      "version": "4.3.5",
-      "integrity": "sha1-b/GUKFC+fBAp87anEIx50IRD48c=",
+      "version": "4.3.6",
+      "integrity": "sha1-ij5kU7+tdRYWVXVuaFV3ADBkTLI=",
+      "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-core-js": "3.3.5",
+        "@microsoft/applicationinsights-core-js": "3.3.6",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
       }
     },
     "node_modules/@microsoft/1ds-post-js": {
-      "version": "4.3.5",
-      "integrity": "sha1-QtNJKShsmpfya3jlMl0zMZGBe9Y=",
+      "version": "4.3.6",
+      "integrity": "sha1-LqtgfXjzvgbo7sENHdj+LfCYW44=",
+      "license": "MIT",
       "dependencies": {
-        "@microsoft/1ds-core-js": "4.3.5",
+        "@microsoft/1ds-core-js": "4.3.6",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
       }
     },
     "node_modules/@microsoft/applicationinsights-channel-js": {
-      "version": "3.3.5",
-      "integrity": "sha1-nEcRvbc8eGNzVjY6DI6K2z77Yc8=",
+      "version": "3.3.6",
+      "integrity": "sha1-j2Xy0nKjoQzmLiQbvwxU4ggl9LA=",
+      "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-common": "3.3.5",
-        "@microsoft/applicationinsights-core-js": "3.3.5",
+        "@microsoft/applicationinsights-common": "3.3.6",
+        "@microsoft/applicationinsights-core-js": "3.3.6",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
       }
     },
     "node_modules/@microsoft/applicationinsights-common": {
-      "version": "3.3.5",
-      "integrity": "sha1-qDtKWl+4Flb2OEqc0Q5gqdrX0go=",
+      "version": "3.3.6",
+      "integrity": "sha1-ztsTFhkPULKJ7qdwpA5m13dvLQo=",
+      "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-core-js": "3.3.5",
+        "@microsoft/applicationinsights-core-js": "3.3.6",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
-        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
       }
     },
     "node_modules/@microsoft/applicationinsights-core-js": {
-      "version": "3.3.5",
-      "integrity": "sha1-ncG+u/2voxYgsMKkO0+sOZYcNHE=",
+      "version": "3.3.6",
+      "integrity": "sha1-H67qk13J6gu4UNdivPzPwBxvvXE=",
+      "license": "MIT",
       "dependencies": {
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
@@ -818,21 +874,23 @@
     "node_modules/@microsoft/applicationinsights-shims": {
       "version": "3.0.1",
       "integrity": "sha1-OGW3Os6EBbnEYYzFxXHy/jh28G8=",
+      "license": "MIT",
       "dependencies": {
         "@nevware21/ts-utils": ">= 0.9.4 < 2.x"
       }
     },
     "node_modules/@microsoft/applicationinsights-web-basic": {
-      "version": "3.3.5",
-      "integrity": "sha1-pQKxulAJTcMaMQ9fpa+bmAhL01k=",
+      "version": "3.3.6",
+      "integrity": "sha1-pbzH8lkvh50hs5BASydJPaz4aQ0=",
+      "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-channel-js": "3.3.5",
-        "@microsoft/applicationinsights-common": "3.3.5",
-        "@microsoft/applicationinsights-core-js": "3.3.5",
+        "@microsoft/applicationinsights-channel-js": "3.3.6",
+        "@microsoft/applicationinsights-common": "3.3.6",
+        "@microsoft/applicationinsights-core-js": "3.3.6",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
-        "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
+        "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
       },
       "peerDependencies": {
         "tslib": ">= 1.0.0"
@@ -841,6 +899,7 @@
     "node_modules/@microsoft/dynamicproto-js": {
       "version": "2.0.3",
       "integrity": "sha1-ritAgGHj/wGpcHhCn8doMx4jklY=",
+      "license": "MIT",
       "dependencies": {
         "@nevware21/ts-utils": ">= 0.10.4 < 2.x"
       }
@@ -848,17 +907,20 @@
     "node_modules/@nevware21/ts-async": {
       "version": "0.5.4",
       "integrity": "sha1-UvhEndCzsWqjF6GLRmL2+xOhNfE=",
+      "license": "MIT",
       "dependencies": {
         "@nevware21/ts-utils": ">= 0.11.6 < 2.x"
       }
     },
     "node_modules/@nevware21/ts-utils": {
       "version": "0.11.8",
-      "integrity": "sha1-WMk0qcPOq900v6AFVQOaYlV4Blw="
+      "integrity": "sha1-WMk0qcPOq900v6AFVQOaYlV4Blw=",
+      "license": "MIT"
     },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "integrity": "sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@nodelib/fs.stat": "2.0.5",
@@ -871,6 +933,7 @@
     "node_modules/@nodelib/fs.stat": {
       "version": "2.0.5",
       "integrity": "sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">= 8"
@@ -879,6 +942,7 @@
     "node_modules/@nodelib/fs.walk": {
       "version": "1.2.8",
       "integrity": "sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@nodelib/fs.scandir": "2.1.5",
@@ -891,6 +955,7 @@
     "node_modules/@pkgjs/parseargs": {
       "version": "0.11.0",
       "integrity": "sha1-p36nQvqyV3UUVDTrHSMoz1ATrDM=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=14"
@@ -899,6 +964,7 @@
     "node_modules/@sinonjs/commons": {
       "version": "3.0.1",
       "integrity": "sha1-ECk1fkTKkBphVYX20nc428iQhM0=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "type-detect": "4.0.8"
@@ -907,6 +973,7 @@
     "node_modules/@sinonjs/fake-timers": {
       "version": "13.0.5",
       "integrity": "sha1-NrnbwhrVVGSG6pFz1r6gY+sXF9U=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "@sinonjs/commons": "^3.0.1"
@@ -915,6 +982,7 @@
     "node_modules/@sinonjs/samsam": {
       "version": "8.0.2",
       "integrity": "sha1-5Dhr9mj/NslZSeVaONxfWJL8Jok=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "@sinonjs/commons": "^3.0.1",
@@ -925,6 +993,7 @@
     "node_modules/@sinonjs/samsam/node_modules/type-detect": {
       "version": "4.1.0",
       "integrity": "sha1-3rJFPo8I3K566YxiaxPd2wFVkGw=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=4"
@@ -933,29 +1002,34 @@
     "node_modules/@sinonjs/text-encoding": {
       "version": "0.7.3",
       "integrity": "sha1-KCBG8D6IbjUrLV9dpet1XgFFfz8=",
+      "license": "(Unlicense OR Apache-2.0)",
       "optional": true
     },
     "node_modules/@tsconfig/node20": {
       "version": "20.1.4",
       "integrity": "sha1-NFfULt3xLTveOXYYarDNIrhd+Sg=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/mocha": {
       "version": "10.0.10",
       "integrity": "sha1-kfYpBejSPL1mIlMS8jlFSiO+v6A=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/mock-fs": {
       "version": "4.13.4",
       "integrity": "sha1-5z7bS0iJ1E0j8eoC1u6+UKowsJo=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@types/node": "*"
       }
     },
     "node_modules/@types/node": {
-      "version": "20.17.19",
-      "integrity": "sha1-DyhpVVcZvvJmym4YJ/zcqQPBppc=",
+      "version": "20.17.24",
+      "integrity": "sha1-IyVHaVTm/IwvEbnGHia6brfT9bY=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -964,6 +1038,7 @@
     "node_modules/@types/node-fetch": {
       "version": "2.6.12",
       "integrity": "sha1-irXD74Mw8TEAp0eeLNVtM4aDCgM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@types/node": "*",
@@ -973,16 +1048,19 @@
     "node_modules/@types/rewire": {
       "version": "2.5.30",
       "integrity": "sha1-da8QbSlOyIriEij+/jqlee/sJ24=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/semver": {
       "version": "7.5.8",
       "integrity": "sha1-gmioxXo+Sr0lwWXs02I323lIpV4=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/sinon": {
       "version": "17.0.4",
       "integrity": "sha1-/Zo+jgfuoaP0pvgqlyyJnld482k=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@types/sinonjs__fake-timers": "*"
@@ -991,33 +1069,38 @@
     "node_modules/@types/sinonjs__fake-timers": {
       "version": "8.1.5",
       "integrity": "sha1-X9NZL/EMHpaV03cCDAMxFswoifI=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/ungap__structured-clone": {
       "version": "1.2.0",
       "integrity": "sha1-Ern9SrPmqCKS1gBISSsF63W0pI8=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/uuid": {
       "version": "9.0.8",
       "integrity": "sha1-dUW6T8PAA9bHVvZR878WPY8PKbo=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@types/vscode": {
       "version": "1.96.0",
       "integrity": "sha1-MYEAS/JdcWd65KrN12BaP9ft8I4=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.25.0",
-      "integrity": "sha1-Xh1W8GflgI+oLRt1vO2COW6GihQ=",
+      "version": "8.26.1",
+      "integrity": "sha1-PkjrhHkkFhhDsJLIeptlF2tTeC8=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.25.0",
-        "@typescript-eslint/type-utils": "8.25.0",
-        "@typescript-eslint/utils": "8.25.0",
-        "@typescript-eslint/visitor-keys": "8.25.0",
+        "@typescript-eslint/scope-manager": "8.26.1",
+        "@typescript-eslint/type-utils": "8.26.1",
+        "@typescript-eslint/utils": "8.26.1",
+        "@typescript-eslint/visitor-keys": "8.26.1",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -1033,18 +1116,19 @@
       "peerDependencies": {
         "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
         "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.8.0"
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.25.0",
-      "integrity": "sha1-WPuBx7ejUYS6F1g/PXrGxPPZW+g=",
+      "version": "8.26.1",
+      "integrity": "sha1-Di+RWkl1GfxD9Szy7L+mB/9W9y4=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.25.0",
-        "@typescript-eslint/types": "8.25.0",
-        "@typescript-eslint/typescript-estree": "8.25.0",
-        "@typescript-eslint/visitor-keys": "8.25.0",
+        "@typescript-eslint/scope-manager": "8.26.1",
+        "@typescript-eslint/types": "8.26.1",
+        "@typescript-eslint/typescript-estree": "8.26.1",
+        "@typescript-eslint/visitor-keys": "8.26.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -1056,16 +1140,17 @@
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.8.0"
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.25.0",
-      "integrity": "sha1-rDgFB3qt6JjpjKgkKUyZhUVZffM=",
+      "version": "8.26.1",
+      "integrity": "sha1-XmrQrCWMz3lGLpHD9Do/H38xpsw=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.25.0",
-        "@typescript-eslint/visitor-keys": "8.25.0"
+        "@typescript-eslint/types": "8.26.1",
+        "@typescript-eslint/visitor-keys": "8.26.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1076,12 +1161,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.25.0",
-      "integrity": "sha1-7g0vZ8gK9a50tdb5d+D43tAFlnc=",
+      "version": "8.26.1",
+      "integrity": "sha1-Ri8Lrgnecqxujhry6+WIwjIk1/g=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.25.0",
-        "@typescript-eslint/utils": "8.25.0",
+        "@typescript-eslint/typescript-estree": "8.26.1",
+        "@typescript-eslint/utils": "8.26.1",
         "debug": "^4.3.4",
         "ts-api-utils": "^2.0.1"
       },
@@ -1094,12 +1180,13 @@
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.8.0"
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.25.0",
-      "integrity": "sha1-+RUSwvUysdaogmyt0LDlzVPPl+A=",
+      "version": "8.26.1",
+      "integrity": "sha1-1ZeHIWcM/yYzSNUGJ3M4kjGmQTI=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1110,12 +1197,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.25.0",
-      "integrity": "sha1-2ECcY6vd1M9bk8Axskue3Bx8Epk=",
+      "version": "8.26.1",
+      "integrity": "sha1-6w5M4xdTaD2DvlNEGkCf1fCzSv0=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.25.0",
-        "@typescript-eslint/visitor-keys": "8.25.0",
+        "@typescript-eslint/types": "8.26.1",
+        "@typescript-eslint/visitor-keys": "8.26.1",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
@@ -1131,18 +1219,19 @@
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "typescript": ">=4.8.4 <5.8.0"
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.25.0",
-      "integrity": "sha1-PqL5GWqRXvTaosjq/UStvX1W0Io=",
+      "version": "8.26.1",
+      "integrity": "sha1-VMxYRplV8lV39ll1O3Gg4RegU58=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.25.0",
-        "@typescript-eslint/types": "8.25.0",
-        "@typescript-eslint/typescript-estree": "8.25.0"
+        "@typescript-eslint/scope-manager": "8.26.1",
+        "@typescript-eslint/types": "8.26.1",
+        "@typescript-eslint/typescript-estree": "8.26.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1153,15 +1242,16 @@
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.8.0"
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.25.0",
-      "integrity": "sha1-6GRjJM0Xk/luAmactxegUxlAMWQ=",
+      "version": "8.26.1",
+      "integrity": "sha1-xSZ/zIJ5XPECgDYwI4N96srSZHw=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.25.0",
+        "@typescript-eslint/types": "8.26.1",
         "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
@@ -1175,6 +1265,7 @@
     "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
       "version": "4.2.0",
       "integrity": "sha1-aHussq+IT83aim59ZcYG9GoUzUU=",
+      "license": "Apache-2.0",
       "optional": true,
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1186,16 +1277,19 @@
     "node_modules/@ungap/structured-clone": {
       "version": "1.3.0",
       "integrity": "sha1-0Gu7OE689sUF/eHD0O1N3/4Kr/g=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/@vscode/debugprotocol": {
       "version": "1.68.0",
       "integrity": "sha1-5Vi6av/hvnr/TsgkWZ8xa2HZpp0=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/@vscode/extension-telemetry": {
       "version": "0.9.8",
       "integrity": "sha1-EJqdteCdWwX5QDo/72DVljtmj8M=",
+      "license": "MIT",
       "dependencies": {
         "@microsoft/1ds-core-js": "^4.3.4",
         "@microsoft/1ds-post-js": "^4.3.4",
@@ -1208,6 +1302,7 @@
     "node_modules/@vscode/test-electron": {
       "version": "2.4.1",
       "integrity": "sha1-XCdgZAv2ku+9qhi6/NNftRloiUE=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "http-proxy-agent": "^7.0.2",
@@ -1221,9 +1316,10 @@
       }
     },
     "node_modules/@vscode/vsce": {
-      "version": "3.2.2",
-      "integrity": "sha1-z2UGjj3VG3R1ZnDyMaqa0rvu8N4=",
+      "version": "3.3.0",
+      "integrity": "sha1-gD5BNoqV01aTzgSQdlA/NPif3gk=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "@azure/identity": "^4.1.0",
         "@vscode/vsce-sign": "^2.0.0",
@@ -1265,6 +1361,7 @@
       "integrity": "sha1-iFADZHbcDU4IDZwtgyXj6X7/UZM=",
       "dev": true,
       "hasInstallScript": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optionalDependencies": {
         "@vscode/vsce-sign-alpine-arm64": "2.0.2",
         "@vscode/vsce-sign-alpine-x64": "2.0.2",
@@ -1284,6 +1381,7 @@
         "arm64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "alpine"
@@ -1296,6 +1394,7 @@
         "x64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "alpine"
@@ -1308,6 +1407,7 @@
         "arm64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "darwin"
@@ -1320,6 +1420,7 @@
         "x64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "darwin"
@@ -1332,6 +1433,7 @@
         "arm"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "linux"
@@ -1344,6 +1446,7 @@
         "arm64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "linux"
@@ -1356,6 +1459,7 @@
         "x64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "linux"
@@ -1368,6 +1472,7 @@
         "arm64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "win32"
@@ -1380,6 +1485,7 @@
         "x64"
       ],
       "dev": true,
+      "license": "SEE LICENSE IN LICENSE.txt",
       "optional": true,
       "os": [
         "win32"
@@ -1389,6 +1495,7 @@
       "version": "1.1.11",
       "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -1398,6 +1505,7 @@
       "version": "3.1.2",
       "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -1406,8 +1514,9 @@
       }
     },
     "node_modules/acorn": {
-      "version": "8.14.0",
-      "integrity": "sha1-Bj4scMrF+09kZ/CxEVLgTGgnlbA=",
+      "version": "8.14.1",
+      "integrity": "sha1-ch1dwQ99W1YJqJF3PUdzF5aTXfs=",
+      "license": "MIT",
       "optional": true,
       "bin": {
         "acorn": "bin/acorn"
@@ -1419,6 +1528,7 @@
     "node_modules/acorn-jsx": {
       "version": "5.3.2",
       "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=",
+      "license": "MIT",
       "optional": true,
       "peerDependencies": {
         "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
@@ -1428,6 +1538,7 @@
       "version": "7.1.3",
       "integrity": "sha1-KUNeuCG8QZRjOluJ5bxHA7r8JaE=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 14"
       }
@@ -1435,6 +1546,7 @@
     "node_modules/ajv": {
       "version": "6.12.6",
       "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
@@ -1450,6 +1562,7 @@
     "node_modules/ansi-colors": {
       "version": "4.1.3",
       "integrity": "sha1-N2ETQOsiQ+cMxgTK011jJw1IeBs=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -1459,6 +1572,7 @@
       "version": "5.0.1",
       "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -1467,6 +1581,7 @@
       "version": "3.2.1",
       "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-convert": "^1.9.0"
       },
@@ -1477,6 +1592,7 @@
     "node_modules/anymatch": {
       "version": "3.1.3",
       "integrity": "sha1-eQxYsZuhcgqEIFtXxhjVrYUklz4=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "normalize-path": "^3.0.0",
@@ -1489,17 +1605,20 @@
     "node_modules/argparse": {
       "version": "2.0.1",
       "integrity": "sha1-JG9Q88p4oyQPbJl+ipvR6sSeSzg=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "Python-2.0"
     },
     "node_modules/asynckit": {
       "version": "0.4.0",
       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/azure-devops-node-api": {
       "version": "12.5.0",
       "integrity": "sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "tunnel": "0.0.6",
         "typed-rest-client": "^1.8.4"
@@ -1507,7 +1626,8 @@
     },
     "node_modules/balanced-match": {
       "version": "1.0.2",
-      "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4="
+      "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=",
+      "license": "MIT"
     },
     "node_modules/base64-js": {
       "version": "1.5.1",
@@ -1526,11 +1646,13 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true
     },
     "node_modules/binary-extensions": {
       "version": "2.3.0",
       "integrity": "sha1-9uFKl4WNMnJSIAJC1Mz+UixEVSI=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -1542,6 +1664,7 @@
     "node_modules/bl": {
       "version": "5.1.0",
       "integrity": "sha1-GDcV9njHGI7O+f5HXZAglABiQnM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "buffer": "^6.0.3",
@@ -1552,6 +1675,7 @@
     "node_modules/bl/node_modules/readable-stream": {
       "version": "3.6.2",
       "integrity": "sha1-VqmzbqllwAxak+8x6xEaDxEFaWc=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "inherits": "^2.0.3",
@@ -1565,11 +1689,13 @@
     "node_modules/boolbase": {
       "version": "1.0.0",
       "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/brace-expansion": {
       "version": "2.0.1",
       "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=",
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0"
       }
@@ -1577,6 +1703,7 @@
     "node_modules/braces": {
       "version": "3.0.3",
       "integrity": "sha1-SQMy9AkZRSJy1VqEgK3AxEE1h4k=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "fill-range": "^7.1.1"
@@ -1588,6 +1715,7 @@
     "node_modules/browser-stdout": {
       "version": "1.3.1",
       "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/buffer": {
@@ -1607,6 +1735,7 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "base64-js": "^1.3.1",
@@ -1617,6 +1746,7 @@
       "version": "0.2.13",
       "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": "*"
       }
@@ -1624,17 +1754,20 @@
     "node_modules/buffer-equal-constant-time": {
       "version": "1.0.1",
       "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
     "node_modules/buffer-from": {
       "version": "1.1.2",
       "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/bundle-name": {
       "version": "4.1.0",
       "integrity": "sha1-87lrNBYNZDGhnXaIE1r3z7h5eIk=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "run-applescript": "^7.0.0"
       },
@@ -1649,6 +1782,7 @@
       "version": "1.0.2",
       "integrity": "sha1-S1QowiK+mF15w9gmV0edvgtZstY=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
         "function-bind": "^1.1.2"
@@ -1658,12 +1792,13 @@
       }
     },
     "node_modules/call-bound": {
-      "version": "1.0.3",
-      "integrity": "sha1-Qc/QMrWT45F2pxUzq084SqBP1oE=",
+      "version": "1.0.4",
+      "integrity": "sha1-I43pNdKippKSjFOMfM+pEGf9Bio=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "get-intrinsic": "^1.2.6"
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -1675,6 +1810,7 @@
     "node_modules/callsites": {
       "version": "3.1.0",
       "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -1683,6 +1819,7 @@
     "node_modules/camelcase": {
       "version": "6.3.0",
       "integrity": "sha1-VoW5XrIJrJwMF3Rnd4ychN9Yupo=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -1695,6 +1832,7 @@
       "version": "2.4.2",
       "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
@@ -1708,6 +1846,7 @@
       "version": "1.0.0",
       "integrity": "sha1-Ht5IlagvJuivcQCflhqbjLYNaoE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "cheerio-select": "^2.1.0",
         "dom-serializer": "^2.0.0",
@@ -1732,6 +1871,7 @@
       "version": "2.1.0",
       "integrity": "sha1-TYZzKGuBJsoqjkJ0DV48SISuIbQ=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0",
         "css-select": "^5.1.0",
@@ -1747,6 +1887,7 @@
     "node_modules/chokidar": {
       "version": "3.6.0",
       "integrity": "sha1-GXxsxmnvKo3F57TZfuTgksPrDVs=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "anymatch": "~3.1.2",
@@ -1770,6 +1911,7 @@
     "node_modules/chokidar/node_modules/glob-parent": {
       "version": "5.1.2",
       "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "is-glob": "^4.0.1"
@@ -1782,11 +1924,13 @@
       "version": "1.1.4",
       "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
       "dev": true,
+      "license": "ISC",
       "optional": true
     },
     "node_modules/cli-cursor": {
       "version": "4.0.0",
       "integrity": "sha1-POz+NzS/T+Aqg2HL3A9v4oxqV+o=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "restore-cursor": "^4.0.0"
@@ -1801,6 +1945,7 @@
     "node_modules/cli-spinners": {
       "version": "2.9.2",
       "integrity": "sha1-F3Oo9LnE1qwxVj31Oz/B15Ri/kE=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -1812,6 +1957,7 @@
     "node_modules/cliui": {
       "version": "8.0.1",
       "integrity": "sha1-DASwddsCy/5g3I5s8vVIaxo2CKo=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "string-width": "^4.2.0",
@@ -1825,6 +1971,7 @@
     "node_modules/cliui/node_modules/ansi-styles": {
       "version": "4.3.0",
       "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "color-convert": "^2.0.1"
@@ -1839,6 +1986,7 @@
     "node_modules/cliui/node_modules/color-convert": {
       "version": "2.0.1",
       "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "color-name": "~1.1.4"
@@ -1850,16 +1998,19 @@
     "node_modules/cliui/node_modules/color-name": {
       "version": "1.1.4",
       "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/cliui/node_modules/emoji-regex": {
       "version": "8.0.0",
       "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/cliui/node_modules/string-width": {
       "version": "4.2.3",
       "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "emoji-regex": "^8.0.0",
@@ -1873,6 +2024,7 @@
     "node_modules/cliui/node_modules/wrap-ansi": {
       "version": "7.0.0",
       "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "ansi-styles": "^4.0.0",
@@ -1890,6 +2042,7 @@
       "version": "3.2.1",
       "integrity": "sha1-V1+Te8QECiCuJzUqbQfJxadBmB8=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=16"
       }
@@ -1898,6 +2051,7 @@
       "version": "1.9.3",
       "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "color-name": "1.1.3"
       }
@@ -1905,12 +2059,14 @@
     "node_modules/color-name": {
       "version": "1.1.3",
       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/combined-stream": {
       "version": "1.0.8",
       "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "delayed-stream": "~1.0.0"
       },
@@ -1922,6 +2078,7 @@
       "version": "12.1.0",
       "integrity": "sha1-AUI7NvUBJZ/arE0OTWDJbJkVhdM=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18"
       }
@@ -1929,17 +2086,20 @@
     "node_modules/concat-map": {
       "version": "0.0.1",
       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/core-util-is": {
       "version": "1.0.3",
       "integrity": "sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/cross-spawn": {
       "version": "7.0.6",
       "integrity": "sha1-ilj+ePANzXDDcEUXWd+/rwPo7p8=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "path-key": "^3.1.0",
         "shebang-command": "^2.0.0",
@@ -1953,6 +2113,7 @@
       "version": "5.1.0",
       "integrity": "sha1-uOvWVUw2N8zHZoiAStP2pv2uqKY=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0",
         "css-what": "^6.1.0",
@@ -1968,6 +2129,7 @@
       "version": "6.1.0",
       "integrity": "sha1-+17/z3bx3eosgb36pN5E55uscPQ=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">= 6"
       },
@@ -1979,6 +2141,7 @@
       "version": "4.4.0",
       "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ms": "^2.1.3"
       },
@@ -1994,6 +2157,7 @@
     "node_modules/decamelize": {
       "version": "4.0.0",
       "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -2006,6 +2170,7 @@
       "version": "6.0.0",
       "integrity": "sha1-yjh2Et234QS9FthaqwDV7PCcZvw=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "mimic-response": "^3.1.0"
@@ -2021,6 +2186,7 @@
       "version": "0.6.0",
       "integrity": "sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=4.0.0"
@@ -2029,12 +2195,14 @@
     "node_modules/deep-is": {
       "version": "0.1.4",
       "integrity": "sha1-pvLc5hL63S7x9Rm3NVHxfoUZmDE=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/default-browser": {
       "version": "5.2.1",
       "integrity": "sha1-e3umEgT/PkJbVWhprm0+nZ8XEs8=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "bundle-name": "^4.1.0",
         "default-browser-id": "^5.0.0"
@@ -2050,6 +2218,7 @@
       "version": "5.0.0",
       "integrity": "sha1-odmL+WDBUILYo/pp6DFQzMzDryY=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18"
       },
@@ -2061,6 +2230,7 @@
       "version": "3.0.0",
       "integrity": "sha1-27Ga37dG1/xtc0oGty9KANAhJV8=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -2072,6 +2242,7 @@
       "version": "1.0.0",
       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.4.0"
       }
@@ -2080,6 +2251,7 @@
       "version": "2.0.3",
       "integrity": "sha1-8M1QO0D5k5uJRpfRmtUIleMM9wA=",
       "dev": true,
+      "license": "Apache-2.0",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -2088,6 +2260,7 @@
     "node_modules/diff": {
       "version": "5.2.0",
       "integrity": "sha1-Jt7QR80RebeLlTfV73JVA84a5TE=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "engines": {
         "node": ">=0.3.1"
@@ -2096,6 +2269,7 @@
     "node_modules/doctrine": {
       "version": "3.0.0",
       "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
+      "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
         "esutils": "^2.0.2"
@@ -2108,6 +2282,7 @@
       "version": "2.0.0",
       "integrity": "sha1-5BuALh7t+fbK4YPOXmIteJ19jlM=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "domelementtype": "^2.3.0",
         "domhandler": "^5.0.2",
@@ -2126,12 +2301,14 @@
           "type": "github",
           "url": "https://github.com/sponsors/fb55"
         }
-      ]
+      ],
+      "license": "BSD-2-Clause"
     },
     "node_modules/domhandler": {
       "version": "5.0.3",
       "integrity": "sha1-zDhff3UfHR/GUMITdIBCVFOMfTE=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "domelementtype": "^2.3.0"
       },
@@ -2146,6 +2323,7 @@
       "version": "3.2.2",
       "integrity": "sha1-7b/itmiwwdl8JLrw8QYrEyIhvHg=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "dom-serializer": "^2.0.0",
         "domelementtype": "^2.3.0",
@@ -2159,6 +2337,7 @@
       "version": "1.0.1",
       "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind-apply-helpers": "^1.0.1",
         "es-errors": "^1.3.0",
@@ -2171,12 +2350,14 @@
     "node_modules/eastasianwidth": {
       "version": "0.2.0",
       "integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/ecdsa-sig-formatter": {
       "version": "1.0.11",
       "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=",
       "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
         "safe-buffer": "^5.0.1"
       }
@@ -2184,12 +2365,14 @@
     "node_modules/emoji-regex": {
       "version": "9.2.2",
       "integrity": "sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/encoding-sniffer": {
       "version": "0.2.0",
       "integrity": "sha1-eZVp1m1EO6voKvGMn0A0mDZe8dU=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "iconv-lite": "^0.6.3",
         "whatwg-encoding": "^3.1.1"
@@ -2202,6 +2385,7 @@
       "version": "1.4.4",
       "integrity": "sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "once": "^1.4.0"
@@ -2211,6 +2395,7 @@
       "version": "4.5.0",
       "integrity": "sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
       },
@@ -2222,6 +2407,7 @@
       "version": "1.0.1",
       "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       }
@@ -2230,6 +2416,7 @@
       "version": "1.3.0",
       "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       }
@@ -2238,6 +2425,7 @@
       "version": "1.1.1",
       "integrity": "sha1-HE8sSDcydZfOadLKGQp/3RcjOME=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0"
       },
@@ -2249,6 +2437,7 @@
       "version": "2.1.0",
       "integrity": "sha1-8x274MGDsAptJutjJcgQwP0YvU0=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
         "get-intrinsic": "^1.2.6",
@@ -2260,10 +2449,11 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.25.0",
-      "integrity": "sha1-DeF4encgbFp57rY0piPTm1AGzpI=",
+      "version": "0.25.1",
+      "integrity": "sha1-oWuNBwtq1IcZNSd72mzP6FLj+i8=",
       "dev": true,
       "hasInstallScript": true,
+      "license": "MIT",
       "bin": {
         "esbuild": "bin/esbuild"
       },
@@ -2271,36 +2461,37 @@
         "node": ">=18"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.0",
-        "@esbuild/android-arm": "0.25.0",
-        "@esbuild/android-arm64": "0.25.0",
-        "@esbuild/android-x64": "0.25.0",
-        "@esbuild/darwin-arm64": "0.25.0",
-        "@esbuild/darwin-x64": "0.25.0",
-        "@esbuild/freebsd-arm64": "0.25.0",
-        "@esbuild/freebsd-x64": "0.25.0",
-        "@esbuild/linux-arm": "0.25.0",
-        "@esbuild/linux-arm64": "0.25.0",
-        "@esbuild/linux-ia32": "0.25.0",
-        "@esbuild/linux-loong64": "0.25.0",
-        "@esbuild/linux-mips64el": "0.25.0",
-        "@esbuild/linux-ppc64": "0.25.0",
-        "@esbuild/linux-riscv64": "0.25.0",
-        "@esbuild/linux-s390x": "0.25.0",
-        "@esbuild/linux-x64": "0.25.0",
-        "@esbuild/netbsd-arm64": "0.25.0",
-        "@esbuild/netbsd-x64": "0.25.0",
-        "@esbuild/openbsd-arm64": "0.25.0",
-        "@esbuild/openbsd-x64": "0.25.0",
-        "@esbuild/sunos-x64": "0.25.0",
-        "@esbuild/win32-arm64": "0.25.0",
-        "@esbuild/win32-ia32": "0.25.0",
-        "@esbuild/win32-x64": "0.25.0"
+        "@esbuild/aix-ppc64": "0.25.1",
+        "@esbuild/android-arm": "0.25.1",
+        "@esbuild/android-arm64": "0.25.1",
+        "@esbuild/android-x64": "0.25.1",
+        "@esbuild/darwin-arm64": "0.25.1",
+        "@esbuild/darwin-x64": "0.25.1",
+        "@esbuild/freebsd-arm64": "0.25.1",
+        "@esbuild/freebsd-x64": "0.25.1",
+        "@esbuild/linux-arm": "0.25.1",
+        "@esbuild/linux-arm64": "0.25.1",
+        "@esbuild/linux-ia32": "0.25.1",
+        "@esbuild/linux-loong64": "0.25.1",
+        "@esbuild/linux-mips64el": "0.25.1",
+        "@esbuild/linux-ppc64": "0.25.1",
+        "@esbuild/linux-riscv64": "0.25.1",
+        "@esbuild/linux-s390x": "0.25.1",
+        "@esbuild/linux-x64": "0.25.1",
+        "@esbuild/netbsd-arm64": "0.25.1",
+        "@esbuild/netbsd-x64": "0.25.1",
+        "@esbuild/openbsd-arm64": "0.25.1",
+        "@esbuild/openbsd-x64": "0.25.1",
+        "@esbuild/sunos-x64": "0.25.1",
+        "@esbuild/win32-arm64": "0.25.1",
+        "@esbuild/win32-ia32": "0.25.1",
+        "@esbuild/win32-x64": "0.25.1"
       }
     },
     "node_modules/escalade": {
       "version": "3.2.0",
       "integrity": "sha1-ARo/aYVroYnf+n3I/M6Z0qh5A+U=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -2310,6 +2501,7 @@
       "version": "1.0.5",
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.0"
       }
@@ -2317,6 +2509,7 @@
     "node_modules/eslint": {
       "version": "8.57.0",
       "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
@@ -2371,6 +2564,7 @@
     "node_modules/eslint-plugin-header": {
       "version": "3.1.1",
       "integrity": "sha1-bOUSQy1XZ1Jl+sRykrUNHv8RrNY=",
+      "license": "MIT",
       "optional": true,
       "peerDependencies": {
         "eslint": ">=7.7.0"
@@ -2379,6 +2573,7 @@
     "node_modules/eslint-scope": {
       "version": "7.2.2",
       "integrity": "sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8=",
+      "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
         "esrecurse": "^4.3.0",
@@ -2394,6 +2589,7 @@
     "node_modules/eslint-visitor-keys": {
       "version": "3.4.3",
       "integrity": "sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA=",
+      "license": "Apache-2.0",
       "optional": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -2405,6 +2601,7 @@
     "node_modules/eslint/node_modules/ansi-styles": {
       "version": "4.3.0",
       "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "color-convert": "^2.0.1"
@@ -2419,6 +2616,7 @@
     "node_modules/eslint/node_modules/brace-expansion": {
       "version": "1.1.11",
       "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "balanced-match": "^1.0.0",
@@ -2428,6 +2626,7 @@
     "node_modules/eslint/node_modules/chalk": {
       "version": "4.1.2",
       "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -2443,6 +2642,7 @@
     "node_modules/eslint/node_modules/color-convert": {
       "version": "2.0.1",
       "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "color-name": "~1.1.4"
@@ -2454,11 +2654,13 @@
     "node_modules/eslint/node_modules/color-name": {
       "version": "1.1.4",
       "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/eslint/node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -2470,6 +2672,7 @@
     "node_modules/eslint/node_modules/has-flag": {
       "version": "4.0.0",
       "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -2478,6 +2681,7 @@
     "node_modules/eslint/node_modules/minimatch": {
       "version": "3.1.2",
       "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^1.1.7"
@@ -2489,6 +2693,7 @@
     "node_modules/eslint/node_modules/supports-color": {
       "version": "7.2.0",
       "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "has-flag": "^4.0.0"
@@ -2500,6 +2705,7 @@
     "node_modules/espree": {
       "version": "9.6.1",
       "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=",
+      "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
         "acorn": "^8.9.0",
@@ -2516,6 +2722,7 @@
     "node_modules/esquery": {
       "version": "1.6.0",
       "integrity": "sha1-kUGSNPgE2FKoLc7sPhbNwiz52uc=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "estraverse": "^5.1.0"
@@ -2527,6 +2734,7 @@
     "node_modules/esrecurse": {
       "version": "4.3.0",
       "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+      "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
         "estraverse": "^5.2.0"
@@ -2538,6 +2746,7 @@
     "node_modules/estraverse": {
       "version": "5.3.0",
       "integrity": "sha1-LupSkHAvJquP5TcDcP+GyWXSESM=",
+      "license": "BSD-2-Clause",
       "optional": true,
       "engines": {
         "node": ">=4.0"
@@ -2546,6 +2755,7 @@
     "node_modules/esutils": {
       "version": "2.0.3",
       "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
+      "license": "BSD-2-Clause",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -2555,6 +2765,7 @@
       "version": "3.3.0",
       "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.8.x"
       }
@@ -2563,6 +2774,7 @@
       "version": "2.0.3",
       "integrity": "sha1-bhSz/O4POmNA7LV9LokYaSBSpHw=",
       "dev": true,
+      "license": "(MIT OR WTFPL)",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -2571,11 +2783,13 @@
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
       "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/fast-glob": {
       "version": "3.3.3",
       "integrity": "sha1-0G1YXOjbqQoWsFBcVDw8z7OuuBg=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -2591,6 +2805,7 @@
     "node_modules/fast-glob/node_modules/glob-parent": {
       "version": "5.1.2",
       "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "is-glob": "^4.0.1"
@@ -2602,16 +2817,19 @@
     "node_modules/fast-json-stable-stringify": {
       "version": "2.1.0",
       "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/fast-levenshtein": {
       "version": "2.0.6",
       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/fastq": {
       "version": "1.19.1",
       "integrity": "sha1-1Q6rqAPIhGqIPBZJKCHrzSzaVfU=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "reusify": "^1.0.4"
@@ -2621,6 +2839,7 @@
       "version": "1.1.0",
       "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "pend": "~1.2.0"
       }
@@ -2628,6 +2847,7 @@
     "node_modules/file-entry-cache": {
       "version": "6.0.1",
       "integrity": "sha1-IRst2WWcsDlLBz5zI6w8kz1SICc=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "flat-cache": "^3.0.4"
@@ -2639,6 +2859,7 @@
     "node_modules/fill-range": {
       "version": "7.1.1",
       "integrity": "sha1-RCZdPKwH4+p9wkdRY4BkN1SgUpI=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "to-regex-range": "^5.0.1"
@@ -2650,6 +2871,7 @@
     "node_modules/find-up": {
       "version": "5.0.0",
       "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "locate-path": "^6.0.0",
@@ -2665,6 +2887,7 @@
     "node_modules/flat": {
       "version": "5.0.2",
       "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "bin": {
         "flat": "cli.js"
@@ -2673,6 +2896,7 @@
     "node_modules/flat-cache": {
       "version": "3.2.0",
       "integrity": "sha1-LAwtUEDJmxYydxqdEFclwBFTY+4=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "flatted": "^3.2.9",
@@ -2686,12 +2910,14 @@
     "node_modules/flatted": {
       "version": "3.3.3",
       "integrity": "sha1-Z8j62VRUp8er6/dLt47nSkQCM1g=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/foreground-child": {
       "version": "3.3.1",
       "integrity": "sha1-Mujp7Rtoo0l777msK2rfkqY4V28=",
       "devOptional": true,
+      "license": "ISC",
       "dependencies": {
         "cross-spawn": "^7.0.6",
         "signal-exit": "^4.0.1"
@@ -2707,6 +2933,7 @@
       "version": "4.0.2",
       "integrity": "sha1-Ncq73TDDznPessQtPI0+2cpReUw=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "asynckit": "^0.4.0",
         "combined-stream": "^1.0.8",
@@ -2721,17 +2948,20 @@
       "version": "1.0.0",
       "integrity": "sha1-a+Dem+mYzhavivwkSXue6bfM2a0=",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/fsevents": {
       "version": "2.3.3",
       "integrity": "sha1-ysZAd4XQNnWipeGlMFxpezR9kNY=",
       "hasInstallScript": true,
+      "license": "MIT",
       "optional": true,
       "os": [
         "darwin"
@@ -2744,6 +2974,7 @@
       "version": "1.1.2",
       "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=",
       "devOptional": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
@@ -2751,6 +2982,7 @@
     "node_modules/get-caller-file": {
       "version": "2.0.5",
       "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+      "license": "ISC",
       "optional": true,
       "engines": {
         "node": "6.* || 8.* || >= 10.*"
@@ -2760,6 +2992,7 @@
       "version": "1.3.0",
       "integrity": "sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "call-bind-apply-helpers": "^1.0.2",
         "es-define-property": "^1.0.1",
@@ -2783,6 +3016,7 @@
       "version": "1.0.1",
       "integrity": "sha1-FQs/J0OGnvPoUewMSdFbHRTQDuE=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "dunder-proto": "^1.0.1",
         "es-object-atoms": "^1.0.0"
@@ -2795,12 +3029,14 @@
       "version": "0.0.0",
       "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/glob": {
       "version": "11.0.1",
       "integrity": "sha1-HDrvmlnWgOYRtT3NJLuGOc7wZNk=",
       "devOptional": true,
+      "license": "ISC",
       "dependencies": {
         "foreground-child": "^3.1.0",
         "jackspeak": "^4.0.1",
@@ -2822,6 +3058,7 @@
     "node_modules/glob-parent": {
       "version": "6.0.2",
       "integrity": "sha1-bSN9mQg5UMeSkPJMdkKj3poo+eM=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "is-glob": "^4.0.3"
@@ -2834,6 +3071,7 @@
       "version": "10.0.1",
       "integrity": "sha1-zgUhhWtFPIbiXyxMDQPm/33cRAs=",
       "devOptional": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^2.0.1"
       },
@@ -2847,6 +3085,7 @@
     "node_modules/globals": {
       "version": "13.24.0",
       "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "type-fest": "^0.20.2"
@@ -2862,6 +3101,7 @@
       "version": "1.2.0",
       "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -2872,12 +3112,14 @@
     "node_modules/graphemer": {
       "version": "1.4.0",
       "integrity": "sha1-+y8dVeDjoYSa7/yQxPoN1ToOZsY=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/has-flag": {
       "version": "3.0.0",
       "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4"
       }
@@ -2886,6 +3128,7 @@
       "version": "1.1.0",
       "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -2897,6 +3140,7 @@
       "version": "1.0.2",
       "integrity": "sha1-LNxC1AvvLltO6rfAGnPFTOerWrw=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "has-symbols": "^1.0.3"
       },
@@ -2911,6 +3155,7 @@
       "version": "2.0.2",
       "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "function-bind": "^1.1.2"
       },
@@ -2921,6 +3166,7 @@
     "node_modules/he": {
       "version": "1.2.0",
       "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
+      "license": "MIT",
       "optional": true,
       "bin": {
         "he": "bin/he"
@@ -2930,6 +3176,7 @@
       "version": "4.1.0",
       "integrity": "sha1-gnuChn6f8cjQxNnVOIA5fSyG0iQ=",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "lru-cache": "^6.0.0"
       },
@@ -2948,6 +3195,7 @@
           "url": "https://github.com/sponsors/fb55"
         }
       ],
+      "license": "MIT",
       "dependencies": {
         "domelementtype": "^2.3.0",
         "domhandler": "^5.0.3",
@@ -2959,6 +3207,7 @@
       "version": "7.0.2",
       "integrity": "sha1-mosfJGhmwChQlIZYX2K48sGMJw4=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "agent-base": "^7.1.0",
         "debug": "^4.3.4"
@@ -2971,6 +3220,7 @@
       "version": "7.0.6",
       "integrity": "sha1-2o3+rH2hMLBcK6S1nJts1mYRprk=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "agent-base": "^7.1.2",
         "debug": "4"
@@ -2983,6 +3233,7 @@
       "version": "0.6.3",
       "integrity": "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "safer-buffer": ">= 2.1.2 < 3.0.0"
       },
@@ -3007,11 +3258,13 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "BSD-3-Clause",
       "optional": true
     },
     "node_modules/ignore": {
       "version": "5.3.2",
       "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">= 4"
@@ -3020,11 +3273,13 @@
     "node_modules/immediate": {
       "version": "3.0.6",
       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/import-fresh": {
       "version": "3.3.1",
       "integrity": "sha1-nOy1ZQPAraHydB271lRuSxO1fM8=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "parent-module": "^1.0.0",
@@ -3040,6 +3295,7 @@
     "node_modules/imurmurhash": {
       "version": "0.1.4",
       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.8.19"
@@ -3048,6 +3304,7 @@
     "node_modules/inflight": {
       "version": "1.0.6",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "once": "^1.3.0",
@@ -3057,17 +3314,20 @@
     "node_modules/inherits": {
       "version": "2.0.4",
       "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/ini": {
       "version": "1.3.8",
       "integrity": "sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=",
       "dev": true,
+      "license": "ISC",
       "optional": true
     },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
       "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "binary-extensions": "^2.0.0"
@@ -3080,6 +3340,7 @@
       "version": "3.0.0",
       "integrity": "sha1-kAk6oxBid9inelkQ265xdH4VogA=",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "is-docker": "cli.js"
       },
@@ -3093,6 +3354,7 @@
     "node_modules/is-extglob": {
       "version": "2.1.1",
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -3102,6 +3364,7 @@
       "version": "3.0.0",
       "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -3109,6 +3372,7 @@
     "node_modules/is-glob": {
       "version": "4.0.3",
       "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "is-extglob": "^2.1.1"
@@ -3121,6 +3385,7 @@
       "version": "1.0.0",
       "integrity": "sha1-6B+6aZZi6zHb2vJnZqYdSBRxfqQ=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-docker": "^3.0.0"
       },
@@ -3137,6 +3402,7 @@
     "node_modules/is-interactive": {
       "version": "2.0.0",
       "integrity": "sha1-QMV2FFk4JtoRAK3mBZd41ZfxbpA=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=12"
@@ -3148,6 +3414,7 @@
     "node_modules/is-number": {
       "version": "7.0.0",
       "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.12.0"
@@ -3156,6 +3423,7 @@
     "node_modules/is-path-inside": {
       "version": "3.0.3",
       "integrity": "sha1-0jE2LlOgf/Kw4Op/7QSRYf/RYoM=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -3164,6 +3432,7 @@
     "node_modules/is-plain-obj": {
       "version": "2.1.0",
       "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -3172,6 +3441,7 @@
     "node_modules/is-unicode-supported": {
       "version": "0.1.0",
       "integrity": "sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -3184,6 +3454,7 @@
       "version": "3.1.0",
       "integrity": "sha1-4cZX45wQCQr8vt7GFyD2uSTDy9I=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "is-inside-container": "^1.0.0"
       },
@@ -3197,17 +3468,20 @@
     "node_modules/isarray": {
       "version": "1.0.0",
       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/isexe": {
       "version": "2.0.0",
       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "ISC"
     },
     "node_modules/jackspeak": {
       "version": "4.1.0",
       "integrity": "sha1-xInAefK2NtxMvpsDEqE/8SguVhs=",
       "devOptional": true,
+      "license": "BlueOak-1.0.0",
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
       },
@@ -3221,6 +3495,7 @@
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "integrity": "sha1-wftl+PUBeQHN0slRhkuhhFihBgI=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "argparse": "^2.0.1"
@@ -3232,27 +3507,32 @@
     "node_modules/json-buffer": {
       "version": "3.0.1",
       "integrity": "sha1-kziAKjDTtmBfvgYT4JQAjKjAWhM=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/jsonc-parser": {
       "version": "3.3.1",
       "integrity": "sha1-8qUktPf9EePXkeVZl3rWC5i3mLQ=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/jsonwebtoken": {
       "version": "9.0.2",
       "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "jws": "^3.2.2",
         "lodash.includes": "^4.3.0",
@@ -3274,6 +3554,7 @@
       "version": "1.4.1",
       "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "buffer-equal-constant-time": "1.0.1",
         "ecdsa-sig-formatter": "1.0.11",
@@ -3284,6 +3565,7 @@
       "version": "3.2.2",
       "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "jwa": "^1.4.1",
         "safe-buffer": "^5.0.1"
@@ -3292,6 +3574,7 @@
     "node_modules/jszip": {
       "version": "3.10.1",
       "integrity": "sha1-NK7nDrGOofrsL1iSCKFX0f6wkcI=",
+      "license": "(MIT OR GPL-3.0-or-later)",
       "optional": true,
       "dependencies": {
         "lie": "~3.3.0",
@@ -3303,12 +3586,14 @@
     "node_modules/just-extend": {
       "version": "6.2.0",
       "integrity": "sha1-uBar+z1n7oYEgudAFWRnJVgWOUc=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/jwa": {
       "version": "2.0.0",
       "integrity": "sha1-p+nD8p2ulAJ+vK9Jl1yTRVk0EPw=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "buffer-equal-constant-time": "1.0.1",
         "ecdsa-sig-formatter": "1.0.11",
@@ -3319,6 +3604,7 @@
       "version": "4.0.0",
       "integrity": "sha1-LU6M9qMY/6oSYV6d7H6G5slzEPQ=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "jwa": "^2.0.0",
         "safe-buffer": "^5.0.1"
@@ -3329,6 +3615,7 @@
       "integrity": "sha1-TGIlcI9RtQy/d8Wq6BchlkwpGMs=",
       "dev": true,
       "hasInstallScript": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "node-addon-api": "^4.3.0",
@@ -3338,6 +3625,7 @@
     "node_modules/keyv": {
       "version": "4.5.4",
       "integrity": "sha1-qHmpnilFL5QkOfKkBeOvizHU3pM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "json-buffer": "3.0.1"
@@ -3347,6 +3635,7 @@
       "version": "3.1.0",
       "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -3354,6 +3643,7 @@
     "node_modules/levn": {
       "version": "0.4.1",
       "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "prelude-ls": "^1.2.1",
@@ -3366,6 +3656,7 @@
     "node_modules/lie": {
       "version": "3.3.0",
       "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "immediate": "~3.0.5"
@@ -3375,6 +3666,7 @@
       "version": "5.0.0",
       "integrity": "sha1-nvI4v6bccL2Of5VytS02mvVptCE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "uc.micro": "^2.0.0"
       }
@@ -3382,6 +3674,7 @@
     "node_modules/locate-path": {
       "version": "6.0.0",
       "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "p-locate": "^5.0.0"
@@ -3396,56 +3689,67 @@
     "node_modules/lodash": {
       "version": "4.17.21",
       "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/lodash.get": {
       "version": "4.4.2",
       "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/lodash.includes": {
       "version": "4.3.0",
       "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.isboolean": {
       "version": "3.0.3",
       "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.isinteger": {
       "version": "4.0.4",
       "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.isnumber": {
       "version": "3.0.3",
       "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.isplainobject": {
       "version": "4.0.6",
       "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.isstring": {
       "version": "4.0.1",
       "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/lodash.merge": {
       "version": "4.6.2",
       "integrity": "sha1-VYqlO0O2YeGSWgr9+japoQhf5Xo=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/lodash.once": {
       "version": "4.1.1",
       "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/log-symbols": {
       "version": "4.1.0",
       "integrity": "sha1-P727lbRoOsn8eFER55LlWNSr1QM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "chalk": "^4.1.0",
@@ -3461,6 +3765,7 @@
     "node_modules/log-symbols/node_modules/ansi-styles": {
       "version": "4.3.0",
       "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "color-convert": "^2.0.1"
@@ -3475,6 +3780,7 @@
     "node_modules/log-symbols/node_modules/chalk": {
       "version": "4.1.2",
       "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "ansi-styles": "^4.1.0",
@@ -3490,6 +3796,7 @@
     "node_modules/log-symbols/node_modules/color-convert": {
       "version": "2.0.1",
       "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "color-name": "~1.1.4"
@@ -3501,11 +3808,13 @@
     "node_modules/log-symbols/node_modules/color-name": {
       "version": "1.1.4",
       "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/log-symbols/node_modules/has-flag": {
       "version": "4.0.0",
       "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -3514,6 +3823,7 @@
     "node_modules/log-symbols/node_modules/supports-color": {
       "version": "7.2.0",
       "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "has-flag": "^4.0.0"
@@ -3526,6 +3836,7 @@
       "version": "6.0.0",
       "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "yallist": "^4.0.0"
       },
@@ -3537,6 +3848,7 @@
       "version": "14.1.0",
       "integrity": "sha1-PDxZkog8Yz20cUzLTXtZNdmLfUU=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "argparse": "^2.0.1",
         "entities": "^4.4.0",
@@ -3553,6 +3865,7 @@
       "version": "1.1.0",
       "integrity": "sha1-oN10voHiqlwvJ+Zc4oNgXuTit/k=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       }
@@ -3560,11 +3873,13 @@
     "node_modules/mdurl": {
       "version": "2.0.0",
       "integrity": "sha1-gGduwEMwJd0+F+6YPQ/o3loiN+A=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/merge2": {
       "version": "1.4.1",
       "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">= 8"
@@ -3573,6 +3888,7 @@
     "node_modules/micromatch": {
       "version": "4.0.8",
       "integrity": "sha1-1m+hjzpHB2eJMgubGvMr2G2fogI=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "braces": "^3.0.3",
@@ -3586,6 +3902,7 @@
       "version": "1.6.0",
       "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
       "dev": true,
+      "license": "MIT",
       "bin": {
         "mime": "cli.js"
       },
@@ -3597,6 +3914,7 @@
       "version": "1.52.0",
       "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.6"
       }
@@ -3605,6 +3923,7 @@
       "version": "2.1.35",
       "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "mime-db": "1.52.0"
       },
@@ -3615,6 +3934,7 @@
     "node_modules/mimic-fn": {
       "version": "2.1.0",
       "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -3624,6 +3944,7 @@
       "version": "3.1.0",
       "integrity": "sha1-LR1Zr5wbEpgVrMwsRqAipc4fo8k=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -3635,6 +3956,7 @@
     "node_modules/minimatch": {
       "version": "9.0.5",
       "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^2.0.1"
@@ -3650,6 +3972,7 @@
       "version": "1.2.8",
       "integrity": "sha1-waRk52kzAuCCoHXO4MBXdBrEdyw=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -3659,6 +3982,7 @@
       "version": "7.1.2",
       "integrity": "sha1-k6libOXl5mvU24aEnnUV6SNApwc=",
       "devOptional": true,
+      "license": "ISC",
       "engines": {
         "node": ">=16 || 14 >=14.17"
       }
@@ -3667,11 +3991,13 @@
       "version": "0.5.3",
       "integrity": "sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM=",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/mocha": {
       "version": "11.1.0",
       "integrity": "sha1-INfGrE1ta8tgqKpHlx/KdMZcPGY=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "ansi-colors": "^4.1.3",
@@ -3706,6 +4032,7 @@
     "node_modules/mocha-explorer-launcher-scripts": {
       "version": "0.4.0",
       "integrity": "sha1-kVauKTxShWU3XHnD+5O2tbEIgSY=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "vscode-test-adapter-remoting-util": "^0.13.0"
@@ -3714,6 +4041,7 @@
     "node_modules/mocha-multi-reporters": {
       "version": "1.5.1",
       "integrity": "sha1-xzSGvtVRnh1Zyc45rHqXkmAOVnY=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "debug": "^4.1.1",
@@ -3729,6 +4057,7 @@
     "node_modules/mocha/node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -3740,6 +4069,7 @@
     "node_modules/mocha/node_modules/glob": {
       "version": "10.4.5",
       "integrity": "sha1-9NnwuQ/9urCcnXf18ptCYlF7CVY=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "foreground-child": "^3.1.0",
@@ -3759,6 +4089,7 @@
     "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
       "version": "9.0.5",
       "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^2.0.1"
@@ -3773,6 +4104,7 @@
     "node_modules/mocha/node_modules/has-flag": {
       "version": "4.0.0",
       "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -3781,6 +4113,7 @@
     "node_modules/mocha/node_modules/jackspeak": {
       "version": "3.4.3",
       "integrity": "sha1-iDOp2Jq0rN5hiJQr0cU7Y5DtWoo=",
+      "license": "BlueOak-1.0.0",
       "optional": true,
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
@@ -3795,11 +4128,13 @@
     "node_modules/mocha/node_modules/lru-cache": {
       "version": "10.4.3",
       "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/mocha/node_modules/minimatch": {
       "version": "5.1.6",
       "integrity": "sha1-HPy4z1Ui6mmVLNKvla4JR38SKpY=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^2.0.1"
@@ -3811,6 +4146,7 @@
     "node_modules/mocha/node_modules/path-scurry": {
       "version": "1.11.1",
       "integrity": "sha1-eWCmaIiFlKByCxKpEdGnQqufEdI=",
+      "license": "BlueOak-1.0.0",
       "optional": true,
       "dependencies": {
         "lru-cache": "^10.2.0",
@@ -3826,6 +4162,7 @@
     "node_modules/mocha/node_modules/supports-color": {
       "version": "8.1.1",
       "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "has-flag": "^4.0.0"
@@ -3840,6 +4177,7 @@
     "node_modules/mock-fs": {
       "version": "5.5.0",
       "integrity": "sha1-lKRtKZqqWI5zWiAcvoI8h26R84U=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=12.0.0"
@@ -3848,27 +4186,32 @@
     "node_modules/ms": {
       "version": "2.1.3",
       "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/mute-stream": {
       "version": "0.0.8",
       "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/napi-build-utils": {
       "version": "2.0.0",
       "integrity": "sha1-E8IsAYf8/MzhRhhEE2NypH3cAn4=",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/natural-compare": {
       "version": "1.4.0",
       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/nise": {
       "version": "6.1.1",
       "integrity": "sha1-eOqTzEm+Ei5Ey3yP31l7Dod4tko=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "@sinonjs/commons": "^3.0.1",
@@ -3882,6 +4225,7 @@
       "version": "3.74.0",
       "integrity": "sha1-W/tEJCZOrrkUMtKtudojxjowHtA=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "semver": "^7.3.5"
@@ -3894,11 +4238,13 @@
       "version": "4.3.0",
       "integrity": "sha1-UqGgtHUZPgko6Y4EJqDRJUeCt38=",
       "dev": true,
+      "license": "MIT",
       "optional": true
     },
     "node_modules/node-fetch": {
       "version": "2.7.0",
       "integrity": "sha1-0PD6bj4twdJ+/NitmdVQvalNGH0=",
+      "license": "MIT",
       "dependencies": {
         "whatwg-url": "^5.0.0"
       },
@@ -3917,6 +4263,7 @@
     "node_modules/normalize-path": {
       "version": "3.0.0",
       "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -3926,6 +4273,7 @@
       "version": "2.1.1",
       "integrity": "sha1-yeq0KO/842zWuSySS9sADvHx7R0=",
       "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
         "boolbase": "^1.0.0"
       },
@@ -3937,6 +4285,7 @@
       "version": "1.13.4",
       "integrity": "sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">= 0.4"
       },
@@ -3947,6 +4296,7 @@
     "node_modules/once": {
       "version": "1.4.0",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "wrappy": "1"
@@ -3955,6 +4305,7 @@
     "node_modules/onetime": {
       "version": "5.1.2",
       "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "mimic-fn": "^2.1.0"
@@ -3970,6 +4321,7 @@
       "version": "10.1.0",
       "integrity": "sha1-p3lebl1Rmr5ChtmTe7JLURIlmOE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "default-browser": "^5.2.1",
         "define-lazy-prop": "^3.0.0",
@@ -3986,6 +4338,7 @@
     "node_modules/optionator": {
       "version": "0.9.4",
       "integrity": "sha1-fqHBpdkddk+yghOciP4R4YKjpzQ=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "deep-is": "^0.1.3",
@@ -4002,6 +4355,7 @@
     "node_modules/ora": {
       "version": "7.0.1",
       "integrity": "sha1-zdUw7Nhl/jnkUaDnaXhlZpyxGTA=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "chalk": "^5.3.0",
@@ -4024,6 +4378,7 @@
     "node_modules/ora/node_modules/ansi-regex": {
       "version": "6.1.0",
       "integrity": "sha1-lexAnGlhnWyxuLNPFLZg7yjr1lQ=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=12"
@@ -4035,6 +4390,7 @@
     "node_modules/ora/node_modules/chalk": {
       "version": "5.4.1",
       "integrity": "sha1-G0i/CWPsFY3OKqz2nAk64t0gktg=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": "^12.17.0 || ^14.13 || >=16.0.0"
@@ -4046,11 +4402,13 @@
     "node_modules/ora/node_modules/emoji-regex": {
       "version": "10.4.0",
       "integrity": "sha1-A1U6/qgLOXV0nPyzb3dsomjkE9Q=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/ora/node_modules/is-unicode-supported": {
       "version": "1.3.0",
       "integrity": "sha1-2CSYS2FsKSouGYIH1KYJmDhC9xQ=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=12"
@@ -4062,6 +4420,7 @@
     "node_modules/ora/node_modules/log-symbols": {
       "version": "5.1.0",
       "integrity": "sha1-og47ml9T+sauuOK7IsB88sjxbZM=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "chalk": "^5.0.0",
@@ -4077,6 +4436,7 @@
     "node_modules/ora/node_modules/string-width": {
       "version": "6.1.0",
       "integrity": "sha1-lkiNbtI/mtXYLRNSKvnkxMP9dRg=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "eastasianwidth": "^0.2.0",
@@ -4093,6 +4453,7 @@
     "node_modules/ora/node_modules/strip-ansi": {
       "version": "7.1.0",
       "integrity": "sha1-1bZWjKaJ2FYTcLBwdoXSJDT6/0U=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "ansi-regex": "^6.0.1"
@@ -4107,6 +4468,7 @@
     "node_modules/p-limit": {
       "version": "3.1.0",
       "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "yocto-queue": "^0.1.0"
@@ -4121,6 +4483,7 @@
     "node_modules/p-locate": {
       "version": "5.0.0",
       "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "p-limit": "^3.0.2"
@@ -4135,16 +4498,19 @@
     "node_modules/package-json-from-dist": {
       "version": "1.0.1",
       "integrity": "sha1-TxRxoBCCeob5TP2bByfjbSZ95QU=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "BlueOak-1.0.0"
     },
     "node_modules/pako": {
       "version": "1.0.11",
       "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+      "license": "(MIT AND Zlib)",
       "optional": true
     },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "callsites": "^3.0.0"
@@ -4157,6 +4523,7 @@
       "version": "1.1.1",
       "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "semver": "^5.1.0"
       }
@@ -4165,6 +4532,7 @@
       "version": "5.7.2",
       "integrity": "sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=",
       "dev": true,
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver"
       }
@@ -4173,6 +4541,7 @@
       "version": "7.2.1",
       "integrity": "sha1-iSj1WRXmEl9DDMRDCXZb8XVWozo=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "entities": "^4.5.0"
       },
@@ -4184,6 +4553,7 @@
       "version": "7.1.0",
       "integrity": "sha1-tagGVI7Yk6Q+JMy0L7t4BpMR6Bs=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "domhandler": "^5.0.3",
         "parse5": "^7.0.0"
@@ -4196,6 +4566,7 @@
       "version": "7.1.2",
       "integrity": "sha1-18IOrcN5aNJy4sAmYP/5LdJ+YOE=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "parse5": "^7.0.0"
       },
@@ -4206,6 +4577,7 @@
     "node_modules/path-exists": {
       "version": "4.0.0",
       "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -4214,6 +4586,7 @@
     "node_modules/path-is-absolute": {
       "version": "1.0.1",
       "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -4223,6 +4596,7 @@
       "version": "3.1.1",
       "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -4231,6 +4605,7 @@
       "version": "2.0.0",
       "integrity": "sha1-nwUiifI62L+Tl6KgQl57hhXFhYA=",
       "devOptional": true,
+      "license": "BlueOak-1.0.0",
       "dependencies": {
         "lru-cache": "^11.0.0",
         "minipass": "^7.1.2"
@@ -4246,6 +4621,7 @@
       "version": "11.0.2",
       "integrity": "sha1-+9jnz4IR9efl2RkFxBWj9VdVyjk=",
       "devOptional": true,
+      "license": "ISC",
       "engines": {
         "node": "20 || >=22"
       }
@@ -4253,6 +4629,7 @@
     "node_modules/path-to-regexp": {
       "version": "8.2.0",
       "integrity": "sha1-c5kMwp5Xo/8qDZFAlRVt9dt56LQ=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=16"
@@ -4261,11 +4638,13 @@
     "node_modules/pend": {
       "version": "1.2.0",
       "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/picomatch": {
       "version": "2.3.1",
       "integrity": "sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8.6"
@@ -4278,6 +4657,7 @@
       "version": "7.1.3",
       "integrity": "sha1-1jCrrSsUdEPyCiEpF76uaLgJLuw=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "detect-libc": "^2.0.0",
@@ -4303,6 +4683,7 @@
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">= 0.8.0"
@@ -4311,12 +4692,14 @@
     "node_modules/process-nextick-args": {
       "version": "2.0.1",
       "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/pump": {
       "version": "3.0.2",
       "integrity": "sha1-g28+3WvC7lmSVskk/+DYhXPdy/g=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "end-of-stream": "^1.1.0",
@@ -4326,6 +4709,7 @@
     "node_modules/punycode": {
       "version": "2.3.1",
       "integrity": "sha1-AnQi4vrsCyXhVJw+G9gwm5EztuU=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=6"
@@ -4335,6 +4719,7 @@
       "version": "2.3.1",
       "integrity": "sha1-a1PlatdViCNOefSv+pCXLH3Yzbc=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=6"
       }
@@ -4343,6 +4728,7 @@
       "version": "6.14.0",
       "integrity": "sha1-xj+kBoDSxclBQSoOiZyJr2DAqTA=",
       "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
         "side-channel": "^1.1.0"
       },
@@ -4370,11 +4756,13 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true
     },
     "node_modules/randombytes": {
       "version": "2.1.0",
       "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "safe-buffer": "^5.1.0"
@@ -4384,6 +4772,7 @@
       "version": "1.2.8",
       "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=",
       "dev": true,
+      "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
       "optional": true,
       "dependencies": {
         "deep-extend": "^0.6.0",
@@ -4399,6 +4788,7 @@
       "version": "2.0.1",
       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -4408,6 +4798,7 @@
       "version": "1.0.7",
       "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "mute-stream": "~0.0.4"
       },
@@ -4418,6 +4809,7 @@
     "node_modules/readable-stream": {
       "version": "2.3.8",
       "integrity": "sha1-kRJegEK7obmIf0k0X2J3Anzovps=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "core-util-is": "~1.0.0",
@@ -4432,11 +4824,13 @@
     "node_modules/readable-stream/node_modules/safe-buffer": {
       "version": "5.1.2",
       "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "picomatch": "^2.2.1"
@@ -4448,6 +4842,7 @@
     "node_modules/require-directory": {
       "version": "2.1.1",
       "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -4456,6 +4851,7 @@
     "node_modules/resolve-from": {
       "version": "4.0.0",
       "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=4"
@@ -4464,6 +4860,7 @@
     "node_modules/restore-cursor": {
       "version": "4.0.0",
       "integrity": "sha1-UZVgpDGJdQlt725gnUQQDtqkzLk=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "onetime": "^5.1.0",
@@ -4479,11 +4876,13 @@
     "node_modules/restore-cursor/node_modules/signal-exit": {
       "version": "3.0.7",
       "integrity": "sha1-qaF2f4r4QVURTqq9c/mSc8j1mtk=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/reusify": {
       "version": "1.1.0",
       "integrity": "sha1-D+E7lSLhRz9RtVjueW4I8R+bSJ8=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "iojs": ">=1.0.0",
@@ -4493,6 +4892,7 @@
     "node_modules/rewire": {
       "version": "7.0.0",
       "integrity": "sha1-QdtUgjcMiHWP/Jpxn3ySp2H6j78=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "eslint": "^8.47.0"
@@ -4501,6 +4901,7 @@
     "node_modules/rimraf": {
       "version": "3.0.2",
       "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "glob": "^7.1.3"
@@ -4515,6 +4916,7 @@
     "node_modules/rimraf/node_modules/brace-expansion": {
       "version": "1.1.11",
       "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "balanced-match": "^1.0.0",
@@ -4524,6 +4926,7 @@
     "node_modules/rimraf/node_modules/glob": {
       "version": "7.2.3",
       "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
@@ -4543,6 +4946,7 @@
     "node_modules/rimraf/node_modules/minimatch": {
       "version": "3.1.2",
       "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
         "brace-expansion": "^1.1.7"
@@ -4555,6 +4959,7 @@
       "version": "7.0.0",
       "integrity": "sha1-5aVTwr/9Yg4WnSdsHNjxtkd4++s=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18"
       },
@@ -4579,6 +4984,7 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "queue-microtask": "^1.2.2"
@@ -4601,21 +5007,25 @@
           "type": "consulting",
           "url": "https://feross.org/support"
         }
-      ]
+      ],
+      "license": "MIT"
     },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/sax": {
       "version": "1.4.1",
       "integrity": "sha1-RMyJiDd/EmME07P8EBDHM7kp7w8=",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/semver": {
       "version": "7.7.1",
       "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=",
+      "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
       },
@@ -4626,6 +5036,7 @@
     "node_modules/serialize-javascript": {
       "version": "6.0.2",
       "integrity": "sha1-3voeBVyDv21Z6oBdjahiJU62psI=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "randombytes": "^2.1.0"
@@ -4634,12 +5045,14 @@
     "node_modules/setimmediate": {
       "version": "1.0.5",
       "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/shebang-command": {
       "version": "2.0.0",
       "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "shebang-regex": "^3.0.0"
       },
@@ -4651,6 +5064,7 @@
       "version": "3.0.0",
       "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -4659,6 +5073,7 @@
       "version": "1.1.0",
       "integrity": "sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
         "object-inspect": "^1.13.3",
@@ -4677,6 +5092,7 @@
       "version": "1.0.0",
       "integrity": "sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
         "object-inspect": "^1.13.3"
@@ -4692,6 +5108,7 @@
       "version": "1.0.1",
       "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bound": "^1.0.2",
         "es-errors": "^1.3.0",
@@ -4709,6 +5126,7 @@
       "version": "1.0.2",
       "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "call-bound": "^1.0.2",
         "es-errors": "^1.3.0",
@@ -4727,6 +5145,7 @@
       "version": "4.1.0",
       "integrity": "sha1-lSGIwcvVRgcOLdIND0HArgUwywQ=",
       "devOptional": true,
+      "license": "ISC",
       "engines": {
         "node": ">=14"
       },
@@ -4752,6 +5171,7 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true
     },
     "node_modules/simple-get": {
@@ -4772,6 +5192,7 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "decompress-response": "^6.0.0",
@@ -4782,6 +5203,7 @@
     "node_modules/sinon": {
       "version": "19.0.2",
       "integrity": "sha1-lEz3cdIiNqqE/Bq3DOW//DohXa0=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "@sinonjs/commons": "^3.0.1",
@@ -4799,6 +5221,7 @@
     "node_modules/sinon/node_modules/diff": {
       "version": "7.0.0",
       "integrity": "sha1-P7NNOHzXbYA/buvqZ7kh2rAYKpo=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "engines": {
         "node": ">=0.3.1"
@@ -4807,6 +5230,7 @@
     "node_modules/sinon/node_modules/has-flag": {
       "version": "4.0.0",
       "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -4815,6 +5239,7 @@
     "node_modules/sinon/node_modules/supports-color": {
       "version": "7.2.0",
       "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "has-flag": "^4.0.0"
@@ -4826,6 +5251,7 @@
     "node_modules/source-map": {
       "version": "0.6.1",
       "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+      "license": "BSD-3-Clause",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -4834,6 +5260,7 @@
     "node_modules/source-map-support": {
       "version": "0.5.21",
       "integrity": "sha1-BP58f54e0tZiIzwoyys1ufY/bk8=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "buffer-from": "^1.0.0",
@@ -4843,6 +5270,7 @@
     "node_modules/split": {
       "version": "1.0.1",
       "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "through": "2"
@@ -4854,6 +5282,7 @@
     "node_modules/stdin-discarder": {
       "version": "0.1.0",
       "integrity": "sha1-IrPkADk6jijr9T+ZWPOIBiLv3iE=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "bl": "^5.0.0"
@@ -4869,6 +5298,7 @@
       "version": "1.1.0",
       "integrity": "sha1-MtpWjoPqSIsI5NfqLDvMnXUBXVs=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4",
         "npm": ">=6"
@@ -4877,6 +5307,7 @@
     "node_modules/string_decoder": {
       "version": "1.1.1",
       "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "safe-buffer": "~5.1.0"
@@ -4885,12 +5316,14 @@
     "node_modules/string_decoder/node_modules/safe-buffer": {
       "version": "5.1.2",
       "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/string-width": {
       "version": "5.1.2",
       "integrity": "sha1-FPja7G2B5yIdKjV+Zoyrc728p5Q=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "eastasianwidth": "^0.2.0",
         "emoji-regex": "^9.2.2",
@@ -4908,6 +5341,7 @@
       "version": "4.2.3",
       "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "emoji-regex": "^8.0.0",
         "is-fullwidth-code-point": "^3.0.0",
@@ -4920,12 +5354,14 @@
     "node_modules/string-width-cjs/node_modules/emoji-regex": {
       "version": "8.0.0",
       "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/string-width/node_modules/ansi-regex": {
       "version": "6.1.0",
       "integrity": "sha1-lexAnGlhnWyxuLNPFLZg7yjr1lQ=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -4937,6 +5373,7 @@
       "version": "7.1.0",
       "integrity": "sha1-1bZWjKaJ2FYTcLBwdoXSJDT6/0U=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^6.0.1"
       },
@@ -4951,6 +5388,7 @@
       "version": "6.0.1",
       "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^5.0.1"
       },
@@ -4963,6 +5401,7 @@
       "version": "6.0.1",
       "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^5.0.1"
       },
@@ -4973,6 +5412,7 @@
     "node_modules/strip-json-comments": {
       "version": "3.1.1",
       "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=8"
@@ -4985,6 +5425,7 @@
       "version": "5.5.0",
       "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "has-flag": "^3.0.0"
       },
@@ -4996,6 +5437,7 @@
       "version": "2.1.2",
       "integrity": "sha1-Ql8VTzQEyxbLj/bmcdRasu2VlsU=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "chownr": "^1.1.1",
@@ -5008,6 +5450,7 @@
       "version": "2.2.0",
       "integrity": "sha1-rK2EwoQTawYNw/qmRHSqmuvXcoc=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "bl": "^4.0.3",
@@ -5024,6 +5467,7 @@
       "version": "4.1.0",
       "integrity": "sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "buffer": "^5.5.0",
@@ -5049,6 +5493,7 @@
           "url": "https://feross.org/support"
         }
       ],
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "base64-js": "^1.3.1",
@@ -5059,6 +5504,7 @@
       "version": "3.6.2",
       "integrity": "sha1-VqmzbqllwAxak+8x6xEaDxEFaWc=",
       "dev": true,
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "inherits": "^2.0.3",
@@ -5072,17 +5518,20 @@
     "node_modules/text-table": {
       "version": "0.2.0",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/through": {
       "version": "2.3.8",
       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/tmp": {
       "version": "0.2.3",
       "integrity": "sha1-63g8wivB6L69BnFHbUbqTrMqea4=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=14.14"
       }
@@ -5090,6 +5539,7 @@
     "node_modules/to-regex-range": {
       "version": "5.0.1",
       "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "is-number": "^7.0.0"
@@ -5100,11 +5550,13 @@
     },
     "node_modules/tr46": {
       "version": "0.0.3",
-      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
+      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+      "license": "MIT"
     },
     "node_modules/ts-api-utils": {
       "version": "2.0.1",
       "integrity": "sha1-ZgcpOFtiW5OaqlgFT0XAWPM/EM0=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=18.12"
@@ -5115,12 +5567,14 @@
     },
     "node_modules/tslib": {
       "version": "2.8.1",
-      "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8="
+      "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=",
+      "license": "0BSD"
     },
     "node_modules/tunnel": {
       "version": "0.0.6",
       "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
       }
@@ -5129,6 +5583,7 @@
       "version": "0.6.0",
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
       "dev": true,
+      "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
         "safe-buffer": "^5.0.1"
@@ -5140,6 +5595,7 @@
     "node_modules/type-check": {
       "version": "0.4.0",
       "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "prelude-ls": "^1.2.1"
@@ -5151,6 +5607,7 @@
     "node_modules/type-detect": {
       "version": "4.0.8",
       "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=4"
@@ -5159,6 +5616,7 @@
     "node_modules/type-fest": {
       "version": "0.20.2",
       "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=",
+      "license": "(MIT OR CC0-1.0)",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -5171,6 +5629,7 @@
       "version": "1.8.11",
       "integrity": "sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "qs": "^6.9.1",
         "tunnel": "0.0.6",
@@ -5178,8 +5637,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.7.3",
-      "integrity": "sha1-kZtEp9u4WDqbhW0WK+JKVL+ABz4=",
+      "version": "5.8.2",
+      "integrity": "sha1-gXCzcC90t52y5aliB8FeZYB5meQ=",
+      "license": "Apache-2.0",
       "optional": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -5192,17 +5652,20 @@
     "node_modules/uc.micro": {
       "version": "2.1.0",
       "integrity": "sha1-+NP30OxMPeo1p+PI76TLi0XJ5+4=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/underscore": {
       "version": "1.13.7",
       "integrity": "sha1-lw4zljr5p92iKPF+voOZ5fvmOhA=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/undici": {
-      "version": "6.21.1",
-      "integrity": "sha1-M2AloUFi5oN+RK17gZs1tsavDgU=",
+      "version": "6.21.2",
+      "integrity": "sha1-ScWITo+QOcZaie6QGO88ji8fSSg=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18.17"
       }
@@ -5210,11 +5673,13 @@
     "node_modules/undici-types": {
       "version": "6.19.8",
       "integrity": "sha1-NREcnRQ3q4OnzcCrri8m2I7aCgI=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/untildify": {
       "version": "4.0.0",
       "integrity": "sha1-K8lHuVNlJIfkYAlJ+wkeOujNkZs=",
+      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -5222,6 +5687,7 @@
     "node_modules/uri-js": {
       "version": "4.4.1",
       "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+      "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
         "punycode": "^2.1.0"
@@ -5230,11 +5696,13 @@
     "node_modules/url-join": {
       "version": "4.0.1",
       "integrity": "sha1-tkLiGiZGgI/6F4xMX9o5hE4Szec=",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/uuid": {
@@ -5244,6 +5712,7 @@
         "https://github.com/sponsors/broofa",
         "https://github.com/sponsors/ctavan"
       ],
+      "license": "MIT",
       "bin": {
         "uuid": "dist/bin/uuid"
       }
@@ -5251,6 +5720,7 @@
     "node_modules/vscode-jsonrpc": {
       "version": "8.2.0",
       "integrity": "sha1-9D36NftR52PRfNlNzKDJRY81q/k=",
+      "license": "MIT",
       "engines": {
         "node": ">=14.0.0"
       }
@@ -5258,6 +5728,7 @@
     "node_modules/vscode-languageclient": {
       "version": "9.0.1",
       "integrity": "sha1-zf4gJncmyNTbg53B6dGBbhKW6FQ=",
+      "license": "MIT",
       "dependencies": {
         "minimatch": "^5.1.0",
         "semver": "^7.3.7",
@@ -5270,6 +5741,7 @@
     "node_modules/vscode-languageclient/node_modules/minimatch": {
       "version": "5.1.6",
       "integrity": "sha1-HPy4z1Ui6mmVLNKvla4JR38SKpY=",
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^2.0.1"
       },
@@ -5280,6 +5752,7 @@
     "node_modules/vscode-languageserver-protocol": {
       "version": "3.17.5",
       "integrity": "sha1-hkqLjzkINVcvThO9n4MT0OOsS+o=",
+      "license": "MIT",
       "dependencies": {
         "vscode-jsonrpc": "8.2.0",
         "vscode-languageserver-types": "3.17.5"
@@ -5287,11 +5760,13 @@
     },
     "node_modules/vscode-languageserver-types": {
       "version": "3.17.5",
-      "integrity": "sha1-MnNnbwzy6rQLP0TQhay7fwijnYo="
+      "integrity": "sha1-MnNnbwzy6rQLP0TQhay7fwijnYo=",
+      "license": "MIT"
     },
     "node_modules/vscode-test-adapter-api": {
       "version": "1.9.0",
       "integrity": "sha1-D9Ff7Z8mFZZwmWyz349WGJAKAHk=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "vscode": "^1.23.0"
@@ -5300,6 +5775,7 @@
     "node_modules/vscode-test-adapter-remoting-util": {
       "version": "0.13.0",
       "integrity": "sha1-5BNv1y0pK1dul6ZvRLdPkB9PJj8=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "split": "^1.0.1",
@@ -5309,12 +5785,14 @@
     },
     "node_modules/webidl-conversions": {
       "version": "3.0.1",
-      "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
+      "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
+      "license": "BSD-2-Clause"
     },
     "node_modules/whatwg-encoding": {
       "version": "3.1.1",
       "integrity": "sha1-0PTvdpkF1CbhaI8+NDgambYLduU=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "iconv-lite": "0.6.3"
       },
@@ -5326,6 +5804,7 @@
       "version": "4.0.0",
       "integrity": "sha1-vBv5SphdxQOI1UqSWKxAXDyi/Ao=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=18"
       }
@@ -5333,6 +5812,7 @@
     "node_modules/whatwg-url": {
       "version": "5.0.0",
       "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
+      "license": "MIT",
       "dependencies": {
         "tr46": "~0.0.3",
         "webidl-conversions": "^3.0.0"
@@ -5342,6 +5822,7 @@
       "version": "2.0.2",
       "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
       "devOptional": true,
+      "license": "ISC",
       "dependencies": {
         "isexe": "^2.0.0"
       },
@@ -5355,6 +5836,7 @@
     "node_modules/word-wrap": {
       "version": "1.2.5",
       "integrity": "sha1-0sRcbdT7zmIaZvE2y+Mor9BBCzQ=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
@@ -5363,12 +5845,14 @@
     "node_modules/workerpool": {
       "version": "6.5.1",
       "integrity": "sha1-Bg9zs50Mr5fG22TaAEzQG0wJlUQ=",
+      "license": "Apache-2.0",
       "optional": true
     },
     "node_modules/wrap-ansi": {
       "version": "8.1.0",
       "integrity": "sha1-VtwiNo7lcPrOG0mBmXXZuaXq0hQ=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^6.1.0",
         "string-width": "^5.0.1",
@@ -5386,6 +5870,7 @@
       "version": "7.0.0",
       "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
@@ -5402,6 +5887,7 @@
       "version": "4.3.0",
       "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "color-convert": "^2.0.1"
       },
@@ -5416,6 +5902,7 @@
       "version": "2.0.1",
       "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "color-name": "~1.1.4"
       },
@@ -5426,17 +5913,20 @@
     "node_modules/wrap-ansi-cjs/node_modules/color-name": {
       "version": "1.1.4",
       "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
       "version": "8.0.0",
       "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
-      "devOptional": true
+      "devOptional": true,
+      "license": "MIT"
     },
     "node_modules/wrap-ansi-cjs/node_modules/string-width": {
       "version": "4.2.3",
       "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "emoji-regex": "^8.0.0",
         "is-fullwidth-code-point": "^3.0.0",
@@ -5450,6 +5940,7 @@
       "version": "6.1.0",
       "integrity": "sha1-lexAnGlhnWyxuLNPFLZg7yjr1lQ=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -5461,6 +5952,7 @@
       "version": "6.2.1",
       "integrity": "sha1-DmIyDPmcIa//OzASGSVGqsv7BcU=",
       "devOptional": true,
+      "license": "MIT",
       "engines": {
         "node": ">=12"
       },
@@ -5472,6 +5964,7 @@
       "version": "7.1.0",
       "integrity": "sha1-1bZWjKaJ2FYTcLBwdoXSJDT6/0U=",
       "devOptional": true,
+      "license": "MIT",
       "dependencies": {
         "ansi-regex": "^6.0.1"
       },
@@ -5485,12 +5978,14 @@
     "node_modules/wrappy": {
       "version": "1.0.2",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+      "license": "ISC",
       "optional": true
     },
     "node_modules/xml2js": {
       "version": "0.5.0",
       "integrity": "sha1-2UQGMfuy7YACA/rRBvJyT2LEk7c=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "sax": ">=0.6.0",
         "xmlbuilder": "~11.0.0"
@@ -5503,6 +5998,7 @@
       "version": "11.0.1",
       "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=",
       "dev": true,
+      "license": "MIT",
       "engines": {
         "node": ">=4.0"
       }
@@ -5510,6 +6006,7 @@
     "node_modules/y18n": {
       "version": "5.0.8",
       "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=",
+      "license": "ISC",
       "optional": true,
       "engines": {
         "node": ">=10"
@@ -5518,11 +6015,13 @@
     "node_modules/yallist": {
       "version": "4.0.0",
       "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
     "node_modules/yargs": {
       "version": "17.7.2",
       "integrity": "sha1-mR3zmspnWhkrgW4eA2P5110qomk=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "cliui": "^8.0.1",
@@ -5540,6 +6039,7 @@
     "node_modules/yargs-parser": {
       "version": "21.1.1",
       "integrity": "sha1-kJa87r+ZDSG7MfqVFuDt4pSnfTU=",
+      "license": "ISC",
       "optional": true,
       "engines": {
         "node": ">=12"
@@ -5548,6 +6048,7 @@
     "node_modules/yargs-unparser": {
       "version": "2.0.0",
       "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "camelcase": "^6.0.0",
@@ -5562,11 +6063,13 @@
     "node_modules/yargs/node_modules/emoji-regex": {
       "version": "8.0.0",
       "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
+      "license": "MIT",
       "optional": true
     },
     "node_modules/yargs/node_modules/string-width": {
       "version": "4.2.3",
       "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=",
+      "license": "MIT",
       "optional": true,
       "dependencies": {
         "emoji-regex": "^8.0.0",
@@ -5581,6 +6084,7 @@
       "version": "2.10.0",
       "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "buffer-crc32": "~0.2.3",
         "fd-slicer": "~1.1.0"
@@ -5590,6 +6094,7 @@
       "version": "2.5.1",
       "integrity": "sha1-o9ZdPdZZpbCTeFDoYJ8i//orXDU=",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "buffer-crc32": "~0.2.3"
       }
@@ -5597,6 +6102,7 @@
     "node_modules/yocto-queue": {
       "version": "0.1.0",
       "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=",
+      "license": "MIT",
       "optional": true,
       "engines": {
         "node": ">=10"
diff --git a/package.json b/package.json
index c6f7d30c22..2746972927 100644
--- a/package.json
+++ b/package.json
@@ -69,14 +69,14 @@
     "vscode-languageserver-protocol": "^3.17.5"
   },
   "devDependencies": {
-    "@vscode/vsce": "^3.2.2",
-    "esbuild": "^0.25.0"
+    "@vscode/vsce": "^3.3.0",
+    "esbuild": "^0.25.1"
   },
   "optionalDependencies": {
     "@tsconfig/node20": "^20.1.4",
     "@types/mocha": "^10.0.10",
     "@types/mock-fs": "^4.13.4",
-    "@types/node": "^20.17.19",
+    "@types/node": "^20.17.24",
     "@types/node-fetch": "^2.6.12",
     "@types/rewire": "^2.5.30",
     "@types/semver": "^7.5.8",
@@ -84,8 +84,8 @@
     "@types/ungap__structured-clone": "^1.2.0",
     "@types/uuid": "^9.0.8",
     "@types/vscode": "~1.96.0",
-    "@typescript-eslint/eslint-plugin": "^8.25.0",
-    "@typescript-eslint/parser": "^8.25.0",
+    "@typescript-eslint/eslint-plugin": "^8.26.1",
+    "@typescript-eslint/parser": "^8.26.1",
     "@ungap/structured-clone": "^1.3.0",
     "@vscode/debugprotocol": "^1.68.0",
     "@vscode/test-electron": "^2.4.1",
@@ -99,7 +99,7 @@
     "rewire": "^7.0.0",
     "sinon": "^19.0.2",
     "source-map-support": "^0.5.21",
-    "typescript": "^5.7.3"
+    "typescript": "^5.8.2"
   },
   "extensionDependencies": [
     "vscode.powershell"
diff --git a/src/session.ts b/src/session.ts
index 34794a5d3e..ed96dae80f 100644
--- a/src/session.ts
+++ b/src/session.ts
@@ -726,9 +726,9 @@ export class SessionManager implements Middleware {
         // NOTE: We don't currently send any events from PSES, but may again in
         // the future so we're leaving this side wired up.
         languageClient.onTelemetry((event) => {
-            const eventName: string = event.eventName ? event.eventName : "PSESEvent";
+            const eventName: string = event.eventName ?? "PSESEvent";
             // eslint-disable-next-line @typescript-eslint/no-explicit-any
-            const data: any = event.data ? event.data : event;
+            const data: any = event.data ?? event;
             this.sendTelemetryEvent(eventName, data);
         });
 

From ea22697b6529297a58db27c85fdb75a6840568dc Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Tue, 18 Mar 2025 12:54:43 -0700
Subject: [PATCH 07/33] v2025.3.0-preview: New PowerShell Editor Services and
 bundled modules!

---
 CHANGELOG.md | 10 ++++++++++
 package.json |  2 +-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e4a9829b1e..0bfb89e178 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
 # PowerShell Extension Release History
 
+## v2025.3.0-preview
+### Tuesday, March 18, 2025
+
+With PowerShell Editor Services [v4.3.0](https://github.com/PowerShell/PowerShellEditorServices/releases/tag/v4.3.0)!
+
+Now with [PSScriptAnalyzer v1.2.4](https://github.com/PowerShell/PSScriptAnalyzer/releases/tag/1.24.0)
+and [PSReadLine v2.4.1-beta1](https://github.com/PowerShell/PSReadLine/releases/tag/v2.4.1-beta1).
+
+See more details at the GitHub Release for [v2025.3.0-preview](https://github.com/PowerShell/vscode-powershell/releases/tag/v2025.3.0-preview).
+
 ## v2025.0.0
 ### Tuesday, January 21, 2025
 
diff --git a/package.json b/package.json
index 2746972927..07a84d1130 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "powershell",
   "displayName": "PowerShell",
-  "version": "2025.0.0",
+  "version": "2025.3.0",
   "preview": false,
   "publisher": "ms-vscode",
   "description": "Develop PowerShell modules, commands and scripts in Visual Studio Code!",

From f172092abd6d245ad7fdc68c91b34c19c7bcc13d Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 26 Mar 2025 16:04:10 -0700
Subject: [PATCH 08/33] Teach client to find Homebrew installations on Apple
 Silicon (#5164)

Since `/opt/homebrew` is now used instead of `/usr/local`.
---
 src/platform.ts            | 32 +++++++++++++++++++++++++++++++-
 test/core/platform.test.ts | 20 ++++++++++++++++++++
 2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/src/platform.ts b/src/platform.ts
index 360fea1613..74f2bb94df 100644
--- a/src/platform.ts
+++ b/src/platform.ts
@@ -26,6 +26,10 @@ const SnapPreviewExePath = "/snap/bin/pwsh-preview";
 const MacOSExePath = "/usr/local/bin/pwsh";
 const MacOSPreviewExePath = "/usr/local/bin/pwsh-preview";
 
+const MacOSHomebrewExePath = "/opt/homebrew/bin/pwsh";
+const MacOSHomebrewLTSExePath = "/opt/homebrew/bin/pwsh-lts";
+const MacOSHomebrewPreviewExePath = "/opt/homebrew/bin/pwsh-preview";
+
 export enum OperatingSystem {
     Unknown,
     Windows,
@@ -169,6 +173,7 @@ export class PowerShellExeFinder {
      * Iterates through all the possible well-known PowerShell installations on a machine.
      * Returned values may not exist, but come with an .exists property
      * which will check whether the executable exists.
+     * TODO: We really need to define the order in which we search for stable/LTS/preview/daily
      */
     private async *enumerateDefaultPowerShellInstallations(): AsyncIterable<IPossiblePowerShellExe | undefined> {
         // Find PSCore stable first
@@ -183,10 +188,14 @@ export class PowerShellExeFinder {
         case OperatingSystem.Windows:
             // Windows may have a 32-bit pwsh.exe
             yield this.findPSCoreWindowsInstallation({ useAlternateBitness: true });
-
             // Also look for the MSIX/UWP installation
             yield await this.findPSCoreMsix();
+            break;
 
+        case OperatingSystem.MacOS:
+            // On MacOS, find the Homebrew installations
+            yield this.findPSCoreHomebrewStable();
+            yield this.findPSCoreHomebrewLTS();
             break;
         }
 
@@ -220,6 +229,11 @@ export class PowerShellExeFinder {
             yield this.findWinPS({ useAlternateBitness: true });
 
             break;
+
+        case OperatingSystem.MacOS:
+            // On MacOS, find the Homebrew preview
+            yield this.findPSCoreHomebrewPreview();
+            break;
         }
 
         // Look for PSCore daily
@@ -336,6 +350,8 @@ export class PowerShellExeFinder {
     * if ($Daily) {
     *     $Destination = "${Destination}-daily"
     * }
+    *
+    * TODO: Remove this after the daily is officially no longer supported.
     */
     private findPSCoreDaily(): IPossiblePowerShellExe | undefined {
         switch (this.platformDetails.operatingSystem) {
@@ -359,6 +375,19 @@ export class PowerShellExeFinder {
         }
     }
 
+    // The Homebrew installations of PowerShell on Apple Silicon are no longer in the default PATH.
+    private findPSCoreHomebrewStable(): IPossiblePowerShellExe {
+        return new PossiblePowerShellExe(MacOSHomebrewExePath, "PowerShell (Homebrew)");
+    }
+
+    private findPSCoreHomebrewLTS(): IPossiblePowerShellExe {
+        return new PossiblePowerShellExe(MacOSHomebrewLTSExePath, "PowerShell LTS (Homebrew)");
+    }
+
+    private findPSCoreHomebrewPreview(): IPossiblePowerShellExe {
+        return new PossiblePowerShellExe(MacOSHomebrewPreviewExePath, "PowerShell Preview (Homebrew)");
+    }
+
     private findPSCoreDotnetGlobalTool(): IPossiblePowerShellExe {
         const exeName: string = this.platformDetails.operatingSystem === OperatingSystem.Windows
             ? "pwsh.exe"
@@ -398,6 +427,7 @@ export class PowerShellExeFinder {
         return undefined;
     }
 
+    // TODO: Are snaps still a thing?
     private findPSCoreStableSnap(): IPossiblePowerShellExe {
         return new PossiblePowerShellExe(SnapExePath, "PowerShell Snap");
     }
diff --git a/test/core/platform.test.ts b/test/core/platform.test.ts
index 0953379639..f5c22941cc 100644
--- a/test/core/platform.test.ts
+++ b/test/core/platform.test.ts
@@ -595,11 +595,26 @@ if (process.platform === "win32") {
                     displayName: "PowerShell",
                     supportsProperArguments: true
                 },
+                {
+                    exePath: "/opt/homebrew/bin/pwsh",
+                    displayName: "PowerShell (Homebrew)",
+                    supportsProperArguments: true
+                },
+                {
+                    exePath: "/opt/homebrew/bin/pwsh-lts",
+                    displayName: "PowerShell LTS (Homebrew)",
+                    supportsProperArguments: true
+                },
                 {
                     exePath: "/usr/local/bin/pwsh-preview",
                     displayName: "PowerShell Preview",
                     supportsProperArguments: true
                 },
+                {
+                    exePath: "/opt/homebrew/bin/pwsh-preview",
+                    displayName: "PowerShell Preview (Homebrew)",
+                    supportsProperArguments: true
+                },
                 {
                     exePath: path.join(pwshDailyDir, "pwsh"),
                     displayName: "PowerShell Daily",
@@ -611,6 +626,11 @@ if (process.platform === "win32") {
                     "pwsh": "",
                     "pwsh-preview": "",
                 },
+                "/opt/homebrew/bin/": {
+                    "pwsh": "",
+                    "pwsh-lts": "",
+                    "pwsh-preview": "",
+                },
                 [pwshDailyDir]: {
                     "pwsh": ""
                 }

From 80f7940eceab8505aa4a47c2b371fb002f03f79f Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 14 May 2025 12:50:34 -0700
Subject: [PATCH 09/33] Update recommended PowerShell LTS (#5186)

---
 docs/troubleshooting.md                | 4 ++--
 test/features/UpdatePowerShell.test.ts | 4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md
index c6ccb7dbdc..4c2b6195dd 100644
--- a/docs/troubleshooting.md
+++ b/docs/troubleshooting.md
@@ -15,7 +15,7 @@ active editor's language mode is PowerShell.
 
 ### Using Windows PowerShell 5.1
 
-While we _highly encourage_ the use of [PowerShell Core 7.2][], if you must use Windows
+While we _highly encourage_ the use of [PowerShell 7.4 LTS][], if you must use Windows
 PowerShell 5.1 we attempt to support it on a best-effort basis. Unfortunately, being two
 major versions behind and in maintenance mode, Windows PowerShell is missing many of the
 bug fixes and APIs we use to make the extension experience great. So please, if you can,
@@ -410,7 +410,7 @@ WSManStackVersion              3.0
 [more information]: #providing-information-about-your-environment
 [open a new issue]: https://github.com/PowerShell/vscode-powershell/issues/new/choose
 [open an issue there]: https://github.com/PowerShell/PSScriptAnalyzer/issues/new/choose
-[PowerShell Core 7.2]: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.2
+[PowerShell 7.4 LTS]: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4
 [semantic highlighting]: https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide
 [tackling an issue]: ./development.md
 [v2021.2.2]: https://github.com/PowerShell/vscode-powershell/releases/tag/v2021.2.2
diff --git a/test/features/UpdatePowerShell.test.ts b/test/features/UpdatePowerShell.test.ts
index b2b6efe90e..6023e56bbd 100644
--- a/test/features/UpdatePowerShell.test.ts
+++ b/test/features/UpdatePowerShell.test.ts
@@ -128,7 +128,9 @@ describe("UpdatePowerShell feature", function () {
             // @ts-expect-error method is private.
             const tag: string | undefined = await updater.maybeGetNewRelease();
             // NOTE: This will need to be updated each new major stable.
-            assert(tag?.startsWith("v7.5"));
+            // TODO: Upstream bug causes LTS releases to update the stable info.
+            // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
+            assert(tag?.startsWith("v7.5") || tag?.startsWith("v7.4"));
         });
     });
 });

From 338c21a9067d3eaa9baa7f03805132e66eefa6aa Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 09:41:30 -0700
Subject: [PATCH 10/33] Upgrade ESLint to v9, remove rewire, add
 @vscode/test-cli

---
 package-lock.json | 2996 ++++++++++++++++++++++++++++++---------------
 package.json      |   44 +-
 2 files changed, 1997 insertions(+), 1043 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 3f4322f053..993b41a621 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,57 +1,52 @@
 {
   "name": "powershell",
-  "version": "2025.0.0",
+  "version": "2025.3.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "powershell",
-      "version": "2025.0.0",
+      "version": "2025.3.0",
       "license": "SEE LICENSE IN LICENSE.txt",
       "dependencies": {
-        "@vscode/extension-telemetry": "^0.9.8",
+        "@vscode/extension-telemetry": "^0.9.9",
         "node-fetch": "^2.7.0",
-        "semver": "^7.7.1",
+        "semver": "^7.7.2",
         "untildify": "^4.0.0",
         "uuid": "^9.0.1",
         "vscode-languageclient": "^9.0.1",
         "vscode-languageserver-protocol": "^3.17.5"
       },
       "devDependencies": {
-        "@vscode/vsce": "^3.3.0",
-        "esbuild": "^0.25.1"
+        "@vscode/vsce": "^3.3.2",
+        "esbuild": "^0.25.4"
       },
       "engines": {
         "vscode": "^1.96.0"
       },
       "optionalDependencies": {
-        "@tsconfig/node20": "^20.1.4",
-        "@types/mocha": "^10.0.10",
+        "@eslint/js": "^9.26.0",
         "@types/mock-fs": "^4.13.4",
-        "@types/node": "^20.17.24",
+        "@types/node": "^20.17.47",
         "@types/node-fetch": "^2.6.12",
-        "@types/rewire": "^2.5.30",
-        "@types/semver": "^7.5.8",
+        "@types/semver": "^7.7.0",
         "@types/sinon": "^17.0.4",
         "@types/ungap__structured-clone": "^1.2.0",
         "@types/uuid": "^9.0.8",
         "@types/vscode": "~1.96.0",
-        "@typescript-eslint/eslint-plugin": "^8.26.1",
-        "@typescript-eslint/parser": "^8.26.1",
         "@ungap/structured-clone": "^1.3.0",
         "@vscode/debugprotocol": "^1.68.0",
-        "@vscode/test-electron": "^2.4.1",
-        "eslint": "^8.57.0",
-        "eslint-plugin-header": "^3.1.1",
-        "glob": "^11.0.1",
-        "mocha": "^11.1.0",
-        "mocha-explorer-launcher-scripts": "^0.4.0",
-        "mocha-multi-reporters": "^1.5.1",
+        "@vscode/test-cli": "^0.0.10",
+        "@vscode/test-electron": "^2.5.2",
+        "esbuild-register": "^3.6.0",
+        "eslint": "^9.26.0",
+        "eslint-config-prettier": "^10.1.5",
         "mock-fs": "^5.5.0",
-        "rewire": "^7.0.0",
-        "sinon": "^19.0.2",
-        "source-map-support": "^0.5.21",
-        "typescript": "^5.8.2"
+        "prettier": "^3.5.3",
+        "prettier-plugin-organize-imports": "^4.1.0",
+        "sinon": "^19.0.5",
+        "typescript": "^5.8.3",
+        "typescript-eslint": "^8.32.1"
       }
     },
     "node_modules/@azure/abort-controller": {
@@ -81,14 +76,14 @@
       }
     },
     "node_modules/@azure/core-client": {
-      "version": "1.9.3",
-      "integrity": "sha1-nKjzvccw0Q1Y9lycLJypkrwVu2c=",
+      "version": "1.9.4",
+      "integrity": "sha1-u5u4Xtx4D8ZWMLbY/6Fyw2M8qP4=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
         "@azure/core-auth": "^1.4.0",
-        "@azure/core-rest-pipeline": "^1.9.1",
+        "@azure/core-rest-pipeline": "^1.20.0",
         "@azure/core-tracing": "^1.0.0",
         "@azure/core-util": "^1.6.1",
         "@azure/logger": "^1.0.0",
@@ -99,8 +94,8 @@
       }
     },
     "node_modules/@azure/core-rest-pipeline": {
-      "version": "1.19.1",
-      "integrity": "sha1-50BnZER3egTcVWVthmATHf2SaSQ=",
+      "version": "1.20.0",
+      "integrity": "sha1-kW2NbJz/a1VvCwv9W5I1JtWQ4tk=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -109,8 +104,7 @@
         "@azure/core-tracing": "^1.0.1",
         "@azure/core-util": "^1.11.0",
         "@azure/logger": "^1.0.0",
-        "http-proxy-agent": "^7.0.0",
-        "https-proxy-agent": "^7.0.0",
+        "@typespec/ts-http-runtime": "^0.2.2",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -130,12 +124,13 @@
       }
     },
     "node_modules/@azure/core-util": {
-      "version": "1.11.0",
-      "integrity": "sha1-9TD8Z+c4rqhy+90cyEFucCGfrac=",
+      "version": "1.12.0",
+      "integrity": "sha1-C4woN+bWfD+66uIN80zwf2azSA0=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@azure/abort-controller": "^2.0.0",
+        "@typespec/ts-http-runtime": "^0.2.2",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -143,8 +138,8 @@
       }
     },
     "node_modules/@azure/identity": {
-      "version": "4.8.0",
-      "integrity": "sha1-aGaCaDpHDM9NuyWX7iNPnFxIOkA=",
+      "version": "4.9.1",
+      "integrity": "sha1-7kuUNfG5a+pZhefeyYl2CmfZoRk=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -156,11 +151,8 @@
         "@azure/core-util": "^1.11.0",
         "@azure/logger": "^1.0.0",
         "@azure/msal-browser": "^4.2.0",
-        "@azure/msal-node": "^3.2.3",
-        "events": "^3.0.0",
-        "jws": "^4.0.0",
+        "@azure/msal-node": "^3.5.0",
         "open": "^10.1.0",
-        "stoppable": "^1.1.0",
         "tslib": "^2.2.0"
       },
       "engines": {
@@ -168,11 +160,12 @@
       }
     },
     "node_modules/@azure/logger": {
-      "version": "1.1.4",
-      "integrity": "sha1-Ijy/K0JN+mZHjOmk9XX1nG83l2g=",
+      "version": "1.2.0",
+      "integrity": "sha1-p5rvzdV9KpZgP6tZyaZuDZAipWQ=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
+        "@typespec/ts-http-runtime": "^0.2.2",
         "tslib": "^2.6.2"
       },
       "engines": {
@@ -180,20 +173,20 @@
       }
     },
     "node_modules/@azure/msal-browser": {
-      "version": "4.7.0",
-      "integrity": "sha1-Zw2paD8QRqyzbuLYdJHz8suQrAE=",
+      "version": "4.12.0",
+      "integrity": "sha1-D2VoxA/BvvQVOh8p/OH8b/CddbQ=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@azure/msal-common": "15.2.1"
+        "@azure/msal-common": "15.6.0"
       },
       "engines": {
         "node": ">=0.8.0"
       }
     },
     "node_modules/@azure/msal-common": {
-      "version": "15.2.1",
-      "integrity": "sha1-XgVifQOLahGT7px3hsWMaQMeuOs=",
+      "version": "15.6.0",
+      "integrity": "sha1-B2TWRG7v85cCIZleJfJl/bIY2mY=",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -201,12 +194,12 @@
       }
     },
     "node_modules/@azure/msal-node": {
-      "version": "3.3.0",
-      "integrity": "sha1-mW/uUq0neuBVj3SCrCZX9RZPyfE=",
+      "version": "3.5.3",
+      "integrity": "sha1-AveiNEosKZQ1SgzsElue+ajnEJs=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@azure/msal-common": "15.2.1",
+        "@azure/msal-common": "15.6.0",
         "jsonwebtoken": "^9.0.0",
         "uuid": "^8.3.0"
       },
@@ -223,13 +216,18 @@
         "uuid": "dist/bin/uuid"
       }
     },
+    "node_modules/@bcoe/v8-coverage": {
+      "version": "0.2.3",
+      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.1",
-      "integrity": "sha1-wzz2u+40l1YmsBuARRy7crTGyR0=",
+      "version": "0.25.4",
+      "integrity": "sha1-gw1kdsu8oMAFE2rwcwNka0GfEWI=",
       "cpu": [
         "ppc64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -240,12 +238,11 @@
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.25.1",
-      "integrity": "sha1-6E0r8v4uYXeg+s2jpXWyE5/Ty5w=",
+      "version": "0.25.4",
+      "integrity": "sha1-VmC9JQgFU90qKEOPKkAaKZWb2bE=",
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -256,12 +253,11 @@
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-6nZgFcfSZVFk8iEA0z1/AwiijW0=",
+      "version": "0.25.4",
+      "integrity": "sha1-0R1PwpkiTnKeIZDKytvMAOep/Wc=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -272,12 +268,11 @@
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-WDN77jvG140QQl5VAL0RNwz9++0=",
+      "version": "0.25.4",
+      "integrity": "sha1-GN3ecFv5hOjNnv7FThmawYvHvuE=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -288,12 +283,11 @@
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-pGgFwcWF1FGqg75yUAvW6Eld1ZE=",
+      "version": "0.25.4",
+      "integrity": "sha1-sLf7VduPxvXeWgIHrphuucR2bmc=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -304,12 +298,11 @@
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-BkPgA7sjjGP8k92+59JqADvjzZg=",
+      "version": "0.25.4",
+      "integrity": "sha1-5oE/3roLujVss1CkuAVD++Zr8m8=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -320,12 +313,11 @@
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-z/GNpUacCZhrk+h5ed5daHL+j44=",
+      "version": "0.25.4",
+      "integrity": "sha1-3BGnPTzNwwhWe5CLQ8ZpjoUHWb4=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -336,12 +328,11 @@
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-Ni/AnC3hSYdiHBh4rxkgPEY2Xd4=",
+      "version": "0.25.4",
+      "integrity": "sha1-kdoI24vRv/XzGSTFeoHasm6ToUM=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -352,12 +343,11 @@
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.1",
-      "integrity": "sha1-3878usYKIJGLGVabS2V4RNOds1o=",
+      "version": "0.25.4",
+      "integrity": "sha1-m5PD5UrEmi7eb5BucF1dkG9tueg=",
       "cpu": [
         "arm"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -368,12 +358,11 @@
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-qpDVsC78l6Jx4STm0c6kkGNPdJg=",
+      "version": "0.25.4",
+      "integrity": "sha1-78FeRclFoIJwj5qfc7+o1NtJcoo=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -384,12 +373,11 @@
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.1",
-      "integrity": "sha1-b5UnB3zLeVPtKvAuAT1LrGnxN1Q=",
+      "version": "0.25.4",
+      "integrity": "sha1-vo7yw+HZn8otJcQWspfQA2BiNZY=",
       "cpu": [
         "ia32"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -400,12 +388,11 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.1",
-      "integrity": "sha1-KH0kEqVFblhgwoOdQqS1EoTRaXw=",
+      "version": "0.25.4",
+      "integrity": "sha1-sIQKJwfD/ALuwojT+d76OCfNeoc=",
       "cpu": [
         "loong64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -416,12 +403,11 @@
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.1",
-      "integrity": "sha1-UwV0ueG8XSD3pPRMXwReJvN4PVc=",
+      "version": "0.25.4",
+      "integrity": "sha1-KhmOWkWMnw51iBpOY9JroM+d858=",
       "cpu": [
         "mips64el"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -432,12 +418,11 @@
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.1",
-      "integrity": "sha1-XX5rKDoLMh6kLGvAq+ueuZwfVYk=",
+      "version": "0.25.4",
+      "integrity": "sha1-ZPSuC5I9fdcvuGC5si7bQgB8+PU=",
       "cpu": [
         "ppc64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -448,12 +433,11 @@
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.1",
-      "integrity": "sha1-FPoM0HPCa07iRl0YzR4Y7qeFn6g=",
+      "version": "0.25.4",
+      "integrity": "sha1-+yhEsR/d3TninSkcfPgPmbDVFY0=",
       "cpu": [
         "riscv64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -464,12 +448,11 @@
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.1",
-      "integrity": "sha1-5ne0udGzhAmHUiZsyqDVKkINwao=",
+      "version": "0.25.4",
+      "integrity": "sha1-FGaHbgqjVgx2c+Y/3ryCeHB7x1A=",
       "cpu": [
         "s390x"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -480,12 +463,11 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-8ceWt4//XOOTZYMT6MWGExmNmVQ=",
+      "version": "0.25.4",
+      "integrity": "sha1-wQ/eiZRV23y6XxGzvM+g5Bv00M0=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -496,12 +478,11 @@
       }
     },
     "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-DSgLff45c/ERsC1f6fMGO5J5bSk=",
+      "version": "0.25.4",
+      "integrity": "sha1-AuSD+8vj8Y8LAmEqlBt3vnbBEaQ=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -512,12 +493,11 @@
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-vmY4k5MaS7PzoAnFzCT6loHMccA=",
+      "version": "0.25.4",
+      "integrity": "sha1-7EAfsLHtCsAdl4VkxfyGNO0dwu0=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -528,12 +508,11 @@
       }
     },
     "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-2QIbiEIzZzoF3BzCbeC/Ml2CQhc=",
+      "version": "0.25.4",
+      "integrity": "sha1-8nLC9Bz+odkbk9SHpRtcXKeoyMQ=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -544,12 +523,11 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-nx3BeG7S4pOMQEsGvMSL6aEyUN4=",
+      "version": "0.25.4",
+      "integrity": "sha1-LiWVC8EPqdseXIaOPVDET3wVD9c=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -560,12 +538,11 @@
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-iarCSktBFZWbP3kBks8TA5ZpbCc=",
+      "version": "0.25.4",
+      "integrity": "sha1-zVlvplpns7etxezVLZ9XM4MuGr0=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -576,12 +553,11 @@
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.1",
-      "integrity": "sha1-NUNYZHpuqY6m0kO/SL3XpDSZlYI=",
+      "version": "0.25.4",
+      "integrity": "sha1-tNvLV7Ie6vgzHkJMOZm4nYlR3Ig=",
       "cpu": [
         "arm64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -592,12 +568,11 @@
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.1",
-      "integrity": "sha1-jOpzQPJkfrqVGgQdyVZR45CM1Ms=",
+      "version": "0.25.4",
+      "integrity": "sha1-QQhC5dZtTs4XV2NOKXqHY164L3o=",
       "cpu": [
         "ia32"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -608,12 +583,11 @@
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.1",
-      "integrity": "sha1-fXmSLLLYj5BI8GOT2/YtLkrMtYQ=",
+      "version": "0.25.4",
+      "integrity": "sha1-CxfsinCyOFgn1SMUwSUxYKC5usw=",
       "cpu": [
         "x64"
       ],
-      "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
@@ -624,8 +598,8 @@
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.5.1",
-      "integrity": "sha1-sPx+BtDJT4AVN/1CN+3CcG07jkw=",
+      "version": "4.7.0",
+      "integrity": "sha1-YHCEYwxsAzmSoILebm+8GotSF1o=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -650,16 +624,73 @@
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/config-array": {
+      "version": "0.20.0",
+      "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "@eslint/object-schema": "^2.1.6",
+        "debug": "^4.3.1",
+        "minimatch": "^3.1.2"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@eslint/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@eslint/config-helpers": {
+      "version": "0.2.2",
+      "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/core": {
+      "version": "0.13.0",
+      "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "@types/json-schema": "^7.0.15"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "integrity": "sha1-OIomnw8lwbatwxe1osVXFIlMcK0=",
+      "version": "3.3.1",
+      "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -667,7 +698,7 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -675,7 +706,7 @@
     },
     "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
       "version": "1.1.11",
-      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -683,9 +714,18 @@
         "concat-map": "0.0.1"
       }
     },
+    "node_modules/@eslint/eslintrc/node_modules/ignore": {
+      "version": "5.3.2",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 4"
+      }
+    },
     "node_modules/@eslint/eslintrc/node_modules/minimatch": {
       "version": "3.1.2",
-      "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -696,48 +736,69 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "integrity": "sha1-pUF66EJ4c/HdCLcLNXS0U+Z7X38=",
+      "version": "9.26.0",
+      "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==",
       "license": "MIT",
       "optional": true,
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.6",
+      "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "integrity": "sha1-145IGgOfdWbsyWYLTqf+ax/sRCs=",
+    "node_modules/@eslint/plugin-kit": {
+      "version": "0.2.8",
+      "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==",
       "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
+        "@eslint/core": "^0.13.0",
+        "levn": "^0.4.1"
       },
       "engines": {
-        "node": ">=10.10.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
-      "license": "MIT",
+    "node_modules/@humanfs/core": {
+      "version": "0.19.1",
+      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+      "license": "Apache-2.0",
       "optional": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+      "engines": {
+        "node": ">=18.18.0"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
-      "version": "3.1.2",
-      "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
-      "license": "ISC",
+    "node_modules/@humanfs/node": {
+      "version": "0.16.6",
+      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+      "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "@humanfs/core": "^0.19.1",
+        "@humanwhocodes/retry": "^0.3.0"
       },
       "engines": {
-        "node": "*"
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+      "version": "0.3.1",
+      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
       }
     },
     "node_modules/@humanwhocodes/module-importer": {
@@ -753,11 +814,18 @@
         "url": "https://github.com/sponsors/nzakas"
       }
     },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.3",
-      "integrity": "sha1-Siho111taWPkI7z5C3/RvjQ0CdM=",
-      "license": "BSD-3-Clause",
-      "optional": true
+    "node_modules/@humanwhocodes/retry": {
+      "version": "0.4.3",
+      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
     },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
@@ -803,12 +871,46 @@
         "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
+    "node_modules/@istanbuljs/schema": {
+      "version": "0.1.3",
+      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
     "node_modules/@microsoft/1ds-core-js": {
-      "version": "4.3.6",
-      "integrity": "sha1-ij5kU7+tdRYWVXVuaFV3ADBkTLI=",
+      "version": "4.3.7",
+      "integrity": "sha1-FJxFFfZdj+8/rUFHBAPCXyjBtTg=",
       "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-core-js": "3.3.6",
+        "@microsoft/applicationinsights-core-js": "3.3.7",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
@@ -816,11 +918,11 @@
       }
     },
     "node_modules/@microsoft/1ds-post-js": {
-      "version": "4.3.6",
-      "integrity": "sha1-LqtgfXjzvgbo7sENHdj+LfCYW44=",
+      "version": "4.3.7",
+      "integrity": "sha1-WZMmulgiDEvJ15mv6qpIUTYMOmI=",
       "license": "MIT",
       "dependencies": {
-        "@microsoft/1ds-core-js": "4.3.6",
+        "@microsoft/1ds-core-js": "4.3.7",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
@@ -828,12 +930,12 @@
       }
     },
     "node_modules/@microsoft/applicationinsights-channel-js": {
-      "version": "3.3.6",
-      "integrity": "sha1-j2Xy0nKjoQzmLiQbvwxU4ggl9LA=",
+      "version": "3.3.7",
+      "integrity": "sha1-L2bpGOKmpj04dFVHVTV+B4iAwoM=",
       "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-common": "3.3.6",
-        "@microsoft/applicationinsights-core-js": "3.3.6",
+        "@microsoft/applicationinsights-common": "3.3.7",
+        "@microsoft/applicationinsights-core-js": "3.3.7",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
@@ -844,11 +946,11 @@
       }
     },
     "node_modules/@microsoft/applicationinsights-common": {
-      "version": "3.3.6",
-      "integrity": "sha1-ztsTFhkPULKJ7qdwpA5m13dvLQo=",
+      "version": "3.3.7",
+      "integrity": "sha1-9DMqFxRh6rcEnAMuhWsFxCORQoE=",
       "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-core-js": "3.3.6",
+        "@microsoft/applicationinsights-core-js": "3.3.7",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-utils": ">= 0.11.8 < 2.x"
@@ -858,8 +960,8 @@
       }
     },
     "node_modules/@microsoft/applicationinsights-core-js": {
-      "version": "3.3.6",
-      "integrity": "sha1-H67qk13J6gu4UNdivPzPwBxvvXE=",
+      "version": "3.3.7",
+      "integrity": "sha1-K1qgXl8bq9kIctqkzhIHU5gHxrE=",
       "license": "MIT",
       "dependencies": {
         "@microsoft/applicationinsights-shims": "3.0.1",
@@ -880,13 +982,13 @@
       }
     },
     "node_modules/@microsoft/applicationinsights-web-basic": {
-      "version": "3.3.6",
-      "integrity": "sha1-pbzH8lkvh50hs5BASydJPaz4aQ0=",
+      "version": "3.3.7",
+      "integrity": "sha1-k+LmSE7JmUgmWI+aROu84lQs2uU=",
       "license": "MIT",
       "dependencies": {
-        "@microsoft/applicationinsights-channel-js": "3.3.6",
-        "@microsoft/applicationinsights-common": "3.3.6",
-        "@microsoft/applicationinsights-core-js": "3.3.6",
+        "@microsoft/applicationinsights-channel-js": "3.3.7",
+        "@microsoft/applicationinsights-common": "3.3.7",
+        "@microsoft/applicationinsights-core-js": "3.3.7",
         "@microsoft/applicationinsights-shims": "3.0.1",
         "@microsoft/dynamicproto-js": "^2.0.3",
         "@nevware21/ts-async": ">= 0.5.4 < 2.x",
@@ -904,6 +1006,27 @@
         "@nevware21/ts-utils": ">= 0.10.4 < 2.x"
       }
     },
+    "node_modules/@modelcontextprotocol/sdk": {
+      "version": "1.11.2",
+      "integrity": "sha512-H9vwztj5OAqHg9GockCQC06k1natgcxWQSRpQcPJf6i5+MWBzfKkRtxGbjQf0X2ihii0ffLZCRGbYV2f2bjNCQ==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "content-type": "^1.0.5",
+        "cors": "^2.8.5",
+        "cross-spawn": "^7.0.3",
+        "eventsource": "^3.0.2",
+        "express": "^5.0.1",
+        "express-rate-limit": "^7.5.0",
+        "pkce-challenge": "^5.0.0",
+        "raw-body": "^3.0.0",
+        "zod": "^3.23.8",
+        "zod-to-json-schema": "^3.24.1"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/@nevware21/ts-async": {
       "version": "0.5.4",
       "integrity": "sha1-UvhEndCzsWqjF6GLRmL2+xOhNfE=",
@@ -913,8 +1036,8 @@
       }
     },
     "node_modules/@nevware21/ts-utils": {
-      "version": "0.11.8",
-      "integrity": "sha1-WMk0qcPOq900v6AFVQOaYlV4Blw=",
+      "version": "0.12.3",
+      "integrity": "sha1-Rh/QUF/VeUh8hLNjzbtWvmFUid0=",
       "license": "MIT"
     },
     "node_modules/@nodelib/fs.scandir": {
@@ -1005,9 +1128,21 @@
       "license": "(Unlicense OR Apache-2.0)",
       "optional": true
     },
-    "node_modules/@tsconfig/node20": {
-      "version": "20.1.4",
-      "integrity": "sha1-NFfULt3xLTveOXYYarDNIrhd+Sg=",
+    "node_modules/@types/estree": {
+      "version": "1.0.7",
+      "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/@types/istanbul-lib-coverage": {
+      "version": "2.0.6",
+      "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "license": "MIT",
       "optional": true
     },
@@ -1027,8 +1162,8 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "20.17.24",
-      "integrity": "sha1-IyVHaVTm/IwvEbnGHia6brfT9bY=",
+      "version": "20.17.47",
+      "integrity": "sha1-+cs3WZP//a5gnI4X0rPdjTxL+hQ=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -1045,15 +1180,9 @@
         "form-data": "^4.0.0"
       }
     },
-    "node_modules/@types/rewire": {
-      "version": "2.5.30",
-      "integrity": "sha1-da8QbSlOyIriEij+/jqlee/sJ24=",
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/@types/semver": {
-      "version": "7.5.8",
-      "integrity": "sha1-gmioxXo+Sr0lwWXs02I323lIpV4=",
+      "version": "7.7.0",
+      "integrity": "sha1-ZMRBva4DOzeLbu99DD13wym5N44=",
       "license": "MIT",
       "optional": true
     },
@@ -1091,20 +1220,20 @@
       "optional": true
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.26.1",
-      "integrity": "sha1-PkjrhHkkFhhDsJLIeptlF2tTeC8=",
+      "version": "8.32.1",
+      "integrity": "sha1-kYWz6qOwg9gxiRDhLVbGizxPRbQ=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.26.1",
-        "@typescript-eslint/type-utils": "8.26.1",
-        "@typescript-eslint/utils": "8.26.1",
-        "@typescript-eslint/visitor-keys": "8.26.1",
+        "@typescript-eslint/scope-manager": "8.32.1",
+        "@typescript-eslint/type-utils": "8.32.1",
+        "@typescript-eslint/utils": "8.32.1",
+        "@typescript-eslint/visitor-keys": "8.32.1",
         "graphemer": "^1.4.0",
-        "ignore": "^5.3.1",
+        "ignore": "^7.0.0",
         "natural-compare": "^1.4.0",
-        "ts-api-utils": "^2.0.1"
+        "ts-api-utils": "^2.1.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1120,15 +1249,15 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.26.1",
-      "integrity": "sha1-Di+RWkl1GfxD9Szy7L+mB/9W9y4=",
+      "version": "8.32.1",
+      "integrity": "sha1-GLDlMxXgvCKyYZ05iuSaloNwk14=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.26.1",
-        "@typescript-eslint/types": "8.26.1",
-        "@typescript-eslint/typescript-estree": "8.26.1",
-        "@typescript-eslint/visitor-keys": "8.26.1",
+        "@typescript-eslint/scope-manager": "8.32.1",
+        "@typescript-eslint/types": "8.32.1",
+        "@typescript-eslint/typescript-estree": "8.32.1",
+        "@typescript-eslint/visitor-keys": "8.32.1",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -1144,13 +1273,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.26.1",
-      "integrity": "sha1-XmrQrCWMz3lGLpHD9Do/H38xpsw=",
+      "version": "8.32.1",
+      "integrity": "sha1-mmv1+yxTgOFP6dOMysbku+F+ivw=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.26.1",
-        "@typescript-eslint/visitor-keys": "8.26.1"
+        "@typescript-eslint/types": "8.32.1",
+        "@typescript-eslint/visitor-keys": "8.32.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1161,15 +1290,15 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.26.1",
-      "integrity": "sha1-Ri8Lrgnecqxujhry6+WIwjIk1/g=",
+      "version": "8.32.1",
+      "integrity": "sha1-uSkqRfaezbfbdNFpblfRqJUU0h4=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.26.1",
-        "@typescript-eslint/utils": "8.26.1",
+        "@typescript-eslint/typescript-estree": "8.32.1",
+        "@typescript-eslint/utils": "8.32.1",
         "debug": "^4.3.4",
-        "ts-api-utils": "^2.0.1"
+        "ts-api-utils": "^2.1.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1184,8 +1313,8 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.26.1",
-      "integrity": "sha1-1ZeHIWcM/yYzSNUGJ3M4kjGmQTI=",
+      "version": "8.32.1",
+      "integrity": "sha1-sZ/krA3Agxe64M6ewRaBI1dsHUs=",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -1197,19 +1326,19 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.26.1",
-      "integrity": "sha1-6w5M4xdTaD2DvlNEGkCf1fCzSv0=",
+      "version": "8.32.1",
+      "integrity": "sha1-kCNyDKTs9PWcJ1oFtf7WmxJ2+s4=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.26.1",
-        "@typescript-eslint/visitor-keys": "8.26.1",
+        "@typescript-eslint/types": "8.32.1",
+        "@typescript-eslint/visitor-keys": "8.32.1",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.4",
         "semver": "^7.6.0",
-        "ts-api-utils": "^2.0.1"
+        "ts-api-utils": "^2.1.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1223,15 +1352,15 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.26.1",
-      "integrity": "sha1-VMxYRplV8lV39ll1O3Gg4RegU58=",
+      "version": "8.32.1",
+      "integrity": "sha1-TW1dKbnlGemoXpp06fe9tYq+lwQ=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.26.1",
-        "@typescript-eslint/types": "8.26.1",
-        "@typescript-eslint/typescript-estree": "8.26.1"
+        "@eslint-community/eslint-utils": "^4.7.0",
+        "@typescript-eslint/scope-manager": "8.32.1",
+        "@typescript-eslint/types": "8.32.1",
+        "@typescript-eslint/typescript-estree": "8.32.1"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1246,12 +1375,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.26.1",
-      "integrity": "sha1-xSZ/zIJ5XPECgDYwI4N96srSZHw=",
+      "version": "8.32.1",
+      "integrity": "sha1-QyE5XMVcLrRgNsu7A+EBmU0R3co=",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "@typescript-eslint/types": "8.26.1",
+        "@typescript-eslint/types": "8.32.1",
         "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
@@ -1274,6 +1403,20 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/@typespec/ts-http-runtime": {
+      "version": "0.2.2",
+      "integrity": "sha1-oMdFjtmarm1+si78F6g5zsC0obM=",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "http-proxy-agent": "^7.0.0",
+        "https-proxy-agent": "^7.0.0",
+        "tslib": "^2.6.2"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
     "node_modules/@ungap/structured-clone": {
       "version": "1.3.0",
       "integrity": "sha1-0Gu7OE689sUF/eHD0O1N3/4Kr/g=",
@@ -1287,8 +1430,8 @@
       "optional": true
     },
     "node_modules/@vscode/extension-telemetry": {
-      "version": "0.9.8",
-      "integrity": "sha1-EJqdteCdWwX5QDo/72DVljtmj8M=",
+      "version": "0.9.9",
+      "integrity": "sha1-WIROcqx4YOsEl4mFRcLE9YCWRl4=",
       "license": "MIT",
       "dependencies": {
         "@microsoft/1ds-core-js": "^4.3.4",
@@ -1299,64 +1442,415 @@
         "vscode": "^1.75.0"
       }
     },
-    "node_modules/@vscode/test-electron": {
-      "version": "2.4.1",
-      "integrity": "sha1-XCdgZAv2ku+9qhi6/NNftRloiUE=",
+    "node_modules/@vscode/test-cli": {
+      "version": "0.0.10",
+      "integrity": "sha512-B0mMH4ia+MOOtwNiLi79XhA+MLmUItIC8FckEuKrVAVriIuSWjt7vv4+bF8qVFiNFe4QRfzPaIZk39FZGWEwHA==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "http-proxy-agent": "^7.0.2",
-        "https-proxy-agent": "^7.0.5",
-        "jszip": "^3.10.1",
-        "ora": "^7.0.1",
-        "semver": "^7.6.2"
+        "@types/mocha": "^10.0.2",
+        "c8": "^9.1.0",
+        "chokidar": "^3.5.3",
+        "enhanced-resolve": "^5.15.0",
+        "glob": "^10.3.10",
+        "minimatch": "^9.0.3",
+        "mocha": "^10.2.0",
+        "supports-color": "^9.4.0",
+        "yargs": "^17.7.2"
+      },
+      "bin": {
+        "vscode-test": "out/bin.mjs"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       }
     },
-    "node_modules/@vscode/vsce": {
-      "version": "3.3.0",
-      "integrity": "sha1-gD5BNoqV01aTzgSQdlA/NPif3gk=",
-      "dev": true,
+    "node_modules/@vscode/test-cli/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "license": "MIT",
+      "optional": true,
       "dependencies": {
-        "@azure/identity": "^4.1.0",
-        "@vscode/vsce-sign": "^2.0.0",
-        "azure-devops-node-api": "^12.5.0",
-        "chalk": "^2.4.2",
-        "cheerio": "^1.0.0-rc.9",
-        "cockatiel": "^3.1.2",
-        "commander": "^12.1.0",
-        "form-data": "^4.0.0",
-        "glob": "^11.0.0",
-        "hosted-git-info": "^4.0.2",
-        "jsonc-parser": "^3.2.0",
-        "leven": "^3.1.0",
-        "markdown-it": "^14.1.0",
-        "mime": "^1.3.4",
-        "minimatch": "^3.0.3",
-        "parse-semver": "^1.1.1",
-        "read": "^1.0.7",
-        "semver": "^7.5.2",
-        "tmp": "^0.2.3",
-        "typed-rest-client": "^1.8.4",
-        "url-join": "^4.0.1",
-        "xml2js": "^0.5.0",
-        "yauzl": "^2.3.1",
-        "yazl": "^2.2.2"
+        "color-convert": "^2.0.1"
       },
-      "bin": {
-        "vsce": "vsce"
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/chokidar": {
+      "version": "3.6.0",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
       },
       "engines": {
-        "node": ">= 20"
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
       },
       "optionalDependencies": {
-        "keytar": "^7.7.0"
+        "fsevents": "~2.3.2"
       }
     },
-    "node_modules/@vscode/vsce-sign": {
+    "node_modules/@vscode/test-cli/node_modules/cliui": {
+      "version": "7.0.4",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/color-convert": {
+      "version": "2.0.1",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/color-name": {
+      "version": "1.1.4",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/@vscode/test-cli/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/@vscode/test-cli/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/glob": {
+      "version": "10.4.5",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/has-flag": {
+      "version": "4.0.0",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/jackspeak": {
+      "version": "3.4.3",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+      "license": "BlueOak-1.0.0",
+      "optional": true,
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "license": "ISC",
+      "optional": true
+    },
+    "node_modules/@vscode/test-cli/node_modules/mocha": {
+      "version": "10.8.2",
+      "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "ansi-colors": "^4.1.3",
+        "browser-stdout": "^1.3.1",
+        "chokidar": "^3.5.3",
+        "debug": "^4.3.5",
+        "diff": "^5.2.0",
+        "escape-string-regexp": "^4.0.0",
+        "find-up": "^5.0.0",
+        "glob": "^8.1.0",
+        "he": "^1.2.0",
+        "js-yaml": "^4.1.0",
+        "log-symbols": "^4.1.0",
+        "minimatch": "^5.1.6",
+        "ms": "^2.1.3",
+        "serialize-javascript": "^6.0.2",
+        "strip-json-comments": "^3.1.1",
+        "supports-color": "^8.1.1",
+        "workerpool": "^6.5.1",
+        "yargs": "^16.2.0",
+        "yargs-parser": "^20.2.9",
+        "yargs-unparser": "^2.0.0"
+      },
+      "bin": {
+        "_mocha": "bin/_mocha",
+        "mocha": "bin/mocha.js"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/mocha/node_modules/glob": {
+      "version": "8.1.0",
+      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/mocha/node_modules/minimatch": {
+      "version": "5.1.6",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/mocha/node_modules/supports-color": {
+      "version": "8.1.1",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/mocha/node_modules/yargs": {
+      "version": "16.2.0",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/path-scurry": {
+      "version": "1.11.1",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "license": "BlueOak-1.0.0",
+      "optional": true,
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/readdirp": {
+      "version": "3.6.0",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/string-width": {
+      "version": "4.2.3",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/supports-color": {
+      "version": "9.4.0",
+      "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/@vscode/test-cli/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "license": "ISC",
+      "optional": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@vscode/test-electron": {
+      "version": "2.5.2",
+      "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "http-proxy-agent": "^7.0.2",
+        "https-proxy-agent": "^7.0.5",
+        "jszip": "^3.10.1",
+        "ora": "^8.1.0",
+        "semver": "^7.6.2"
+      },
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/@vscode/vsce": {
+      "version": "3.3.2",
+      "integrity": "sha1-G7hiIph4FNuzIXw/i+/WPyScgQE=",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@azure/identity": "^4.1.0",
+        "@vscode/vsce-sign": "^2.0.0",
+        "azure-devops-node-api": "^12.5.0",
+        "chalk": "^2.4.2",
+        "cheerio": "^1.0.0-rc.9",
+        "cockatiel": "^3.1.2",
+        "commander": "^12.1.0",
+        "form-data": "^4.0.0",
+        "glob": "^11.0.0",
+        "hosted-git-info": "^4.0.2",
+        "jsonc-parser": "^3.2.0",
+        "leven": "^3.1.0",
+        "markdown-it": "^14.1.0",
+        "mime": "^1.3.4",
+        "minimatch": "^3.0.3",
+        "parse-semver": "^1.1.1",
+        "read": "^1.0.7",
+        "semver": "^7.5.2",
+        "tmp": "^0.2.3",
+        "typed-rest-client": "^1.8.4",
+        "url-join": "^4.0.1",
+        "xml2js": "^0.5.0",
+        "yauzl": "^2.3.1",
+        "yazl": "^2.2.2"
+      },
+      "bin": {
+        "vsce": "vsce"
+      },
+      "engines": {
+        "node": ">= 20"
+      },
+      "optionalDependencies": {
+        "keytar": "^7.7.0"
+      }
+    },
+    "node_modules/@vscode/vsce-sign": {
       "version": "2.0.5",
       "integrity": "sha1-iFADZHbcDU4IDZwtgyXj6X7/UZM=",
       "dev": true,
@@ -1513,9 +2007,43 @@
         "node": "*"
       }
     },
+    "node_modules/accepts": {
+      "version": "2.0.0",
+      "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "mime-types": "^3.0.0",
+        "negotiator": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/accepts/node_modules/mime-db": {
+      "version": "1.54.0",
+      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/accepts/node_modules/mime-types": {
+      "version": "3.0.1",
+      "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "mime-db": "^1.54.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/acorn": {
       "version": "8.14.1",
-      "integrity": "sha1-ch1dwQ99W1YJqJF3PUdzF5aTXfs=",
+      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
       "license": "MIT",
       "optional": true,
       "bin": {
@@ -1527,7 +2055,7 @@
     },
     "node_modules/acorn-jsx": {
       "version": "5.3.2",
-      "integrity": "sha1-ftW7VZCLOy8bxVxq8WU7rafweTc=",
+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "license": "MIT",
       "optional": true,
       "peerDependencies": {
@@ -1545,7 +2073,7 @@
     },
     "node_modules/ajv": {
       "version": "6.12.6",
-      "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -1561,7 +2089,7 @@
     },
     "node_modules/ansi-colors": {
       "version": "4.1.3",
-      "integrity": "sha1-N2ETQOsiQ+cMxgTK011jJw1IeBs=",
+      "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -1591,7 +2119,7 @@
     },
     "node_modules/anymatch": {
       "version": "3.1.3",
-      "integrity": "sha1-eQxYsZuhcgqEIFtXxhjVrYUklz4=",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -1632,6 +2160,7 @@
     "node_modules/base64-js": {
       "version": "1.5.1",
       "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -1651,7 +2180,7 @@
     },
     "node_modules/binary-extensions": {
       "version": "2.3.0",
-      "integrity": "sha1-9uFKl4WNMnJSIAJC1Mz+UixEVSI=",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -1662,12 +2191,13 @@
       }
     },
     "node_modules/bl": {
-      "version": "5.1.0",
-      "integrity": "sha1-GDcV9njHGI7O+f5HXZAglABiQnM=",
+      "version": "4.1.0",
+      "integrity": "sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=",
+      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "buffer": "^6.0.3",
+        "buffer": "^5.5.0",
         "inherits": "^2.0.4",
         "readable-stream": "^3.4.0"
       }
@@ -1675,6 +2205,7 @@
     "node_modules/bl/node_modules/readable-stream": {
       "version": "3.6.2",
       "integrity": "sha1-VqmzbqllwAxak+8x6xEaDxEFaWc=",
+      "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -1686,6 +2217,26 @@
         "node": ">= 6"
       }
     },
+    "node_modules/body-parser": {
+      "version": "2.2.0",
+      "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "bytes": "^3.1.2",
+        "content-type": "^1.0.5",
+        "debug": "^4.4.0",
+        "http-errors": "^2.0.0",
+        "iconv-lite": "^0.6.3",
+        "on-finished": "^2.4.1",
+        "qs": "^6.14.0",
+        "raw-body": "^3.0.0",
+        "type-is": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
     "node_modules/boolbase": {
       "version": "1.0.0",
       "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
@@ -1719,8 +2270,9 @@
       "optional": true
     },
     "node_modules/buffer": {
-      "version": "6.0.3",
-      "integrity": "sha1-Ks5XhFnMj74qcKqo9S7mO2p0xsY=",
+      "version": "5.7.1",
+      "integrity": "sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -1739,7 +2291,7 @@
       "optional": true,
       "dependencies": {
         "base64-js": "^1.3.1",
-        "ieee754": "^1.2.1"
+        "ieee754": "^1.1.13"
       }
     },
     "node_modules/buffer-crc32": {
@@ -1757,12 +2309,6 @@
       "dev": true,
       "license": "BSD-3-Clause"
     },
-    "node_modules/buffer-from": {
-      "version": "1.1.2",
-      "integrity": "sha1-KxRqb9cugLT1XSVfNe1Zo6mkG9U=",
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/bundle-name": {
       "version": "4.1.0",
       "integrity": "sha1-87lrNBYNZDGhnXaIE1r3z7h5eIk=",
@@ -1778,6 +2324,40 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/bytes": {
+      "version": "3.1.2",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/c8": {
+      "version": "9.1.0",
+      "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "@bcoe/v8-coverage": "^0.2.3",
+        "@istanbuljs/schema": "^0.1.3",
+        "find-up": "^5.0.0",
+        "foreground-child": "^3.1.1",
+        "istanbul-lib-coverage": "^3.2.0",
+        "istanbul-lib-report": "^3.0.1",
+        "istanbul-reports": "^3.1.6",
+        "test-exclude": "^6.0.0",
+        "v8-to-istanbul": "^9.0.0",
+        "yargs": "^17.7.2",
+        "yargs-parser": "^21.1.1"
+      },
+      "bin": {
+        "c8": "bin/c8.js"
+      },
+      "engines": {
+        "node": ">=14.14.0"
+      }
+    },
     "node_modules/call-bind-apply-helpers": {
       "version": "1.0.2",
       "integrity": "sha1-S1QowiK+mF15w9gmV0edvgtZstY=",
@@ -1794,7 +2374,7 @@
     "node_modules/call-bound": {
       "version": "1.0.4",
       "integrity": "sha1-I43pNdKippKSjFOMfM+pEGf9Bio=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "call-bind-apply-helpers": "^1.0.2",
@@ -1809,7 +2389,7 @@
     },
     "node_modules/callsites": {
       "version": "3.1.0",
-      "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -1884,42 +2464,6 @@
         "url": "https://github.com/sponsors/fb55"
       }
     },
-    "node_modules/chokidar": {
-      "version": "3.6.0",
-      "integrity": "sha1-GXxsxmnvKo3F57TZfuTgksPrDVs=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "anymatch": "~3.1.2",
-        "braces": "~3.0.2",
-        "glob-parent": "~5.1.2",
-        "is-binary-path": "~2.1.0",
-        "is-glob": "~4.0.1",
-        "normalize-path": "~3.0.0",
-        "readdirp": "~3.6.0"
-      },
-      "engines": {
-        "node": ">= 8.10.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/chokidar/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/chownr": {
       "version": "1.1.4",
       "integrity": "sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=",
@@ -1928,15 +2472,15 @@
       "optional": true
     },
     "node_modules/cli-cursor": {
-      "version": "4.0.0",
-      "integrity": "sha1-POz+NzS/T+Aqg2HL3A9v4oxqV+o=",
+      "version": "5.0.0",
+      "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "restore-cursor": "^4.0.0"
+        "restore-cursor": "^5.0.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -1944,7 +2488,7 @@
     },
     "node_modules/cli-spinners": {
       "version": "2.9.2",
-      "integrity": "sha1-F3Oo9LnE1qwxVj31Oz/B15Ri/kE=",
+      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -2089,12 +2633,70 @@
       "devOptional": true,
       "license": "MIT"
     },
+    "node_modules/content-disposition": {
+      "version": "1.0.0",
+      "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/content-type": {
+      "version": "1.0.5",
+      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/cookie": {
+      "version": "0.7.2",
+      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/cookie-signature": {
+      "version": "1.2.2",
+      "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=6.6.0"
+      }
+    },
     "node_modules/core-util-is": {
       "version": "1.0.3",
-      "integrity": "sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
       "license": "MIT",
       "optional": true
     },
+    "node_modules/cors": {
+      "version": "2.8.5",
+      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "object-assign": "^4",
+        "vary": "^1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.6",
       "integrity": "sha1-ilj+ePANzXDDcEUXWd+/rwPo7p8=",
@@ -2138,8 +2740,8 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.4.0",
-      "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=",
+      "version": "4.4.1",
+      "integrity": "sha1-5ai8bLxMbNPmQwiwaTo9T6VQGJs=",
       "devOptional": true,
       "license": "MIT",
       "dependencies": {
@@ -2247,9 +2849,18 @@
         "node": ">=0.4.0"
       }
     },
+    "node_modules/depd": {
+      "version": "2.0.0",
+      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/detect-libc": {
-      "version": "2.0.3",
-      "integrity": "sha1-8M1QO0D5k5uJRpfRmtUIleMM9wA=",
+      "version": "2.0.4",
+      "integrity": "sha1-8EcVuLqBXlO02BCWVbZQimhlp+g=",
       "dev": true,
       "license": "Apache-2.0",
       "optional": true,
@@ -2266,18 +2877,6 @@
         "node": ">=0.3.1"
       }
     },
-    "node_modules/doctrine": {
-      "version": "3.0.0",
-      "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
-      "license": "Apache-2.0",
-      "optional": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
     "node_modules/dom-serializer": {
       "version": "2.0.0",
       "integrity": "sha1-5BuALh7t+fbK4YPOXmIteJ19jlM=",
@@ -2362,12 +2961,27 @@
         "safe-buffer": "^5.0.1"
       }
     },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/emoji-regex": {
       "version": "9.2.2",
       "integrity": "sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI=",
       "devOptional": true,
       "license": "MIT"
     },
+    "node_modules/encodeurl": {
+      "version": "2.0.0",
+      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/encoding-sniffer": {
       "version": "0.2.0",
       "integrity": "sha1-eZVp1m1EO6voKvGMn0A0mDZe8dU=",
@@ -2391,6 +3005,19 @@
         "once": "^1.4.0"
       }
     },
+    "node_modules/enhanced-resolve": {
+      "version": "5.18.1",
+      "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "node_modules/entities": {
       "version": "4.5.0",
       "integrity": "sha1-XSaOpecRPsdMTQM7eepaNaSI+0g=",
@@ -2449,9 +3076,9 @@
       }
     },
     "node_modules/esbuild": {
-      "version": "0.25.1",
-      "integrity": "sha1-oWuNBwtq1IcZNSd72mzP6FLj+i8=",
-      "dev": true,
+      "version": "0.25.4",
+      "integrity": "sha1-u5oWM01O8sM8cwGpJLi4YzUaCFQ=",
+      "devOptional": true,
       "hasInstallScript": true,
       "license": "MIT",
       "bin": {
@@ -2460,32 +3087,44 @@
       "engines": {
         "node": ">=18"
       },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.1",
-        "@esbuild/android-arm": "0.25.1",
-        "@esbuild/android-arm64": "0.25.1",
-        "@esbuild/android-x64": "0.25.1",
-        "@esbuild/darwin-arm64": "0.25.1",
-        "@esbuild/darwin-x64": "0.25.1",
-        "@esbuild/freebsd-arm64": "0.25.1",
-        "@esbuild/freebsd-x64": "0.25.1",
-        "@esbuild/linux-arm": "0.25.1",
-        "@esbuild/linux-arm64": "0.25.1",
-        "@esbuild/linux-ia32": "0.25.1",
-        "@esbuild/linux-loong64": "0.25.1",
-        "@esbuild/linux-mips64el": "0.25.1",
-        "@esbuild/linux-ppc64": "0.25.1",
-        "@esbuild/linux-riscv64": "0.25.1",
-        "@esbuild/linux-s390x": "0.25.1",
-        "@esbuild/linux-x64": "0.25.1",
-        "@esbuild/netbsd-arm64": "0.25.1",
-        "@esbuild/netbsd-x64": "0.25.1",
-        "@esbuild/openbsd-arm64": "0.25.1",
-        "@esbuild/openbsd-x64": "0.25.1",
-        "@esbuild/sunos-x64": "0.25.1",
-        "@esbuild/win32-arm64": "0.25.1",
-        "@esbuild/win32-ia32": "0.25.1",
-        "@esbuild/win32-x64": "0.25.1"
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.4",
+        "@esbuild/android-arm": "0.25.4",
+        "@esbuild/android-arm64": "0.25.4",
+        "@esbuild/android-x64": "0.25.4",
+        "@esbuild/darwin-arm64": "0.25.4",
+        "@esbuild/darwin-x64": "0.25.4",
+        "@esbuild/freebsd-arm64": "0.25.4",
+        "@esbuild/freebsd-x64": "0.25.4",
+        "@esbuild/linux-arm": "0.25.4",
+        "@esbuild/linux-arm64": "0.25.4",
+        "@esbuild/linux-ia32": "0.25.4",
+        "@esbuild/linux-loong64": "0.25.4",
+        "@esbuild/linux-mips64el": "0.25.4",
+        "@esbuild/linux-ppc64": "0.25.4",
+        "@esbuild/linux-riscv64": "0.25.4",
+        "@esbuild/linux-s390x": "0.25.4",
+        "@esbuild/linux-x64": "0.25.4",
+        "@esbuild/netbsd-arm64": "0.25.4",
+        "@esbuild/netbsd-x64": "0.25.4",
+        "@esbuild/openbsd-arm64": "0.25.4",
+        "@esbuild/openbsd-x64": "0.25.4",
+        "@esbuild/sunos-x64": "0.25.4",
+        "@esbuild/win32-arm64": "0.25.4",
+        "@esbuild/win32-ia32": "0.25.4",
+        "@esbuild/win32-x64": "0.25.4"
+      }
+    },
+    "node_modules/esbuild-register": {
+      "version": "3.6.0",
+      "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "debug": "^4.3.4"
+      },
+      "peerDependencies": {
+        "esbuild": ">=0.12 <1"
       }
     },
     "node_modules/escalade": {
@@ -2497,6 +3136,12 @@
         "node": ">=6"
       }
     },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/escape-string-regexp": {
       "version": "1.0.5",
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
@@ -2507,72 +3152,85 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.57.0",
-      "integrity": "sha1-x4am/Q4LaJQar2JFlvuYcIkZVmg=",
+      "version": "9.26.0",
+      "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.6.1",
-        "@eslint/eslintrc": "^2.1.4",
-        "@eslint/js": "8.57.0",
-        "@humanwhocodes/config-array": "^0.11.14",
+        "@eslint-community/regexpp": "^4.12.1",
+        "@eslint/config-array": "^0.20.0",
+        "@eslint/config-helpers": "^0.2.1",
+        "@eslint/core": "^0.13.0",
+        "@eslint/eslintrc": "^3.3.1",
+        "@eslint/js": "9.26.0",
+        "@eslint/plugin-kit": "^0.2.8",
+        "@humanfs/node": "^0.16.6",
         "@humanwhocodes/module-importer": "^1.0.1",
-        "@nodelib/fs.walk": "^1.2.8",
-        "@ungap/structured-clone": "^1.2.0",
+        "@humanwhocodes/retry": "^0.4.2",
+        "@modelcontextprotocol/sdk": "^1.8.0",
+        "@types/estree": "^1.0.6",
+        "@types/json-schema": "^7.0.15",
         "ajv": "^6.12.4",
         "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
+        "cross-spawn": "^7.0.6",
         "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.2.2",
-        "eslint-visitor-keys": "^3.4.3",
-        "espree": "^9.6.1",
-        "esquery": "^1.4.2",
+        "eslint-scope": "^8.3.0",
+        "eslint-visitor-keys": "^4.2.0",
+        "espree": "^10.3.0",
+        "esquery": "^1.5.0",
         "esutils": "^2.0.2",
         "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
+        "file-entry-cache": "^8.0.0",
         "find-up": "^5.0.0",
         "glob-parent": "^6.0.2",
-        "globals": "^13.19.0",
-        "graphemer": "^1.4.0",
         "ignore": "^5.2.0",
         "imurmurhash": "^0.1.4",
         "is-glob": "^4.0.0",
-        "is-path-inside": "^3.0.3",
-        "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
         "lodash.merge": "^4.6.2",
         "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
         "optionator": "^0.9.3",
-        "strip-ansi": "^6.0.1",
-        "text-table": "^0.2.0"
+        "zod": "^3.24.2"
       },
       "bin": {
         "eslint": "bin/eslint.js"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "url": "https://eslint.org/donate"
+      },
+      "peerDependencies": {
+        "jiti": "*"
+      },
+      "peerDependenciesMeta": {
+        "jiti": {
+          "optional": true
+        }
       }
     },
-    "node_modules/eslint-plugin-header": {
-      "version": "3.1.1",
-      "integrity": "sha1-bOUSQy1XZ1Jl+sRykrUNHv8RrNY=",
+    "node_modules/eslint-config-prettier": {
+      "version": "10.1.5",
+      "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
       "license": "MIT",
       "optional": true,
+      "bin": {
+        "eslint-config-prettier": "bin/cli.js"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint-config-prettier"
+      },
       "peerDependencies": {
-        "eslint": ">=7.7.0"
+        "eslint": ">=7.0.0"
       }
     },
     "node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "integrity": "sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8=",
+      "version": "8.3.0",
+      "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
       "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
@@ -2580,7 +3238,7 @@
         "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -2669,6 +3327,18 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "4.2.0",
+      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/has-flag": {
       "version": "4.0.0",
       "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
@@ -2678,6 +3348,15 @@
         "node": ">=8"
       }
     },
+    "node_modules/eslint/node_modules/ignore": {
+      "version": "5.3.2",
+      "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 4"
+      }
+    },
     "node_modules/eslint/node_modules/minimatch": {
       "version": "3.1.2",
       "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
@@ -2703,17 +3382,29 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.6.1",
-      "integrity": "sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8=",
+      "version": "10.3.0",
+      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
       "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
-        "acorn": "^8.9.0",
+        "acorn": "^8.14.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
+        "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/espree/node_modules/eslint-visitor-keys": {
+      "version": "4.2.0",
+      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -2733,7 +3424,7 @@
     },
     "node_modules/esrecurse": {
       "version": "4.3.0",
-      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
@@ -2754,20 +3445,41 @@
     },
     "node_modules/esutils": {
       "version": "2.0.3",
-      "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
       "license": "BSD-2-Clause",
       "optional": true,
       "engines": {
         "node": ">=0.10.0"
       }
     },
-    "node_modules/events": {
-      "version": "3.3.0",
-      "integrity": "sha1-Mala0Kkk4tLEGagTrrLE6HjqdAA=",
-      "dev": true,
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
       "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/eventsource": {
+      "version": "3.0.7",
+      "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "eventsource-parser": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
+    "node_modules/eventsource-parser": {
+      "version": "3.0.2",
+      "integrity": "sha512-6RxOBZ/cYgd8usLwsEl+EC09Au/9BcmCKYF2/xbml6DNczf7nv0MQb+7BA2F+li6//I+28VNlQR37XfQtcAJuA==",
+      "license": "MIT",
+      "optional": true,
       "engines": {
-        "node": ">=0.8.x"
+        "node": ">=18.0.0"
       }
     },
     "node_modules/expand-template": {
@@ -2780,9 +3492,87 @@
         "node": ">=6"
       }
     },
+    "node_modules/express": {
+      "version": "5.1.0",
+      "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "accepts": "^2.0.0",
+        "body-parser": "^2.2.0",
+        "content-disposition": "^1.0.0",
+        "content-type": "^1.0.5",
+        "cookie": "^0.7.1",
+        "cookie-signature": "^1.2.1",
+        "debug": "^4.4.0",
+        "encodeurl": "^2.0.0",
+        "escape-html": "^1.0.3",
+        "etag": "^1.8.1",
+        "finalhandler": "^2.1.0",
+        "fresh": "^2.0.0",
+        "http-errors": "^2.0.0",
+        "merge-descriptors": "^2.0.0",
+        "mime-types": "^3.0.0",
+        "on-finished": "^2.4.1",
+        "once": "^1.4.0",
+        "parseurl": "^1.3.3",
+        "proxy-addr": "^2.0.7",
+        "qs": "^6.14.0",
+        "range-parser": "^1.2.1",
+        "router": "^2.2.0",
+        "send": "^1.1.0",
+        "serve-static": "^2.2.0",
+        "statuses": "^2.0.1",
+        "type-is": "^2.0.1",
+        "vary": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 18"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/express-rate-limit": {
+      "version": "7.5.0",
+      "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/express-rate-limit"
+      },
+      "peerDependencies": {
+        "express": "^4.11 || 5 || ^5.0.0-beta.1"
+      }
+    },
+    "node_modules/express/node_modules/mime-db": {
+      "version": "1.54.0",
+      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/express/node_modules/mime-types": {
+      "version": "3.0.1",
+      "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "mime-db": "^1.54.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/fast-deep-equal": {
       "version": "3.1.3",
-      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
       "license": "MIT",
       "optional": true
     },
@@ -2816,7 +3606,7 @@
     },
     "node_modules/fast-json-stable-stringify": {
       "version": "2.1.0",
-      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
       "license": "MIT",
       "optional": true
     },
@@ -2845,15 +3635,15 @@
       }
     },
     "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "integrity": "sha1-IRst2WWcsDlLBz5zI6w8kz1SICc=",
+      "version": "8.0.0",
+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "flat-cache": "^3.0.4"
+        "flat-cache": "^4.0.0"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=16.0.0"
       }
     },
     "node_modules/fill-range": {
@@ -2868,6 +3658,23 @@
         "node": ">=8"
       }
     },
+    "node_modules/finalhandler": {
+      "version": "2.1.0",
+      "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "debug": "^4.4.0",
+        "encodeurl": "^2.0.0",
+        "escape-html": "^1.0.3",
+        "on-finished": "^2.4.1",
+        "parseurl": "^1.3.3",
+        "statuses": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/find-up": {
       "version": "5.0.0",
       "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=",
@@ -2894,22 +3701,21 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "3.2.0",
-      "integrity": "sha1-LAwtUEDJmxYydxqdEFclwBFTY+4=",
+      "version": "4.0.1",
+      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
         "flatted": "^3.2.9",
-        "keyv": "^4.5.3",
-        "rimraf": "^3.0.2"
+        "keyv": "^4.5.4"
       },
       "engines": {
-        "node": "^10.12.0 || >=12.0.0"
+        "node": ">=16"
       }
     },
     "node_modules/flatted": {
       "version": "3.3.3",
-      "integrity": "sha1-Z8j62VRUp8er6/dLt47nSkQCM1g=",
+      "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
       "license": "ISC",
       "optional": true
     },
@@ -2944,6 +3750,24 @@
         "node": ">= 6"
       }
     },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "2.0.0",
+      "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/fs-constants": {
       "version": "1.0.0",
       "integrity": "sha1-a+Dem+mYzhavivwkSXue6bfM2a0=",
@@ -2953,13 +3777,13 @@
     },
     "node_modules/fs.realpath": {
       "version": "1.0.0",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
       "license": "ISC",
       "optional": true
     },
     "node_modules/fsevents": {
       "version": "2.3.3",
-      "integrity": "sha1-ysZAd4XQNnWipeGlMFxpezR9kNY=",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
       "hasInstallScript": true,
       "license": "MIT",
       "optional": true,
@@ -2988,6 +3812,18 @@
         "node": "6.* || 8.* || >= 10.*"
       }
     },
+    "node_modules/get-east-asian-width": {
+      "version": "1.3.0",
+      "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/get-intrinsic": {
       "version": "1.3.0",
       "integrity": "sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=",
@@ -3033,9 +3869,9 @@
       "optional": true
     },
     "node_modules/glob": {
-      "version": "11.0.1",
-      "integrity": "sha1-HDrvmlnWgOYRtT3NJLuGOc7wZNk=",
-      "devOptional": true,
+      "version": "11.0.2",
+      "integrity": "sha1-MmHjiXu8YDAwsEH9d7pjYCLVHOA=",
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "foreground-child": "^3.1.0",
@@ -3070,7 +3906,7 @@
     "node_modules/glob/node_modules/minimatch": {
       "version": "10.0.1",
       "integrity": "sha1-zgUhhWtFPIbiXyxMDQPm/33cRAs=",
-      "devOptional": true,
+      "dev": true,
       "license": "ISC",
       "dependencies": {
         "brace-expansion": "^2.0.1"
@@ -3083,15 +3919,12 @@
       }
     },
     "node_modules/globals": {
-      "version": "13.24.0",
-      "integrity": "sha1-hDKhnXjODB6DOUnDats0VAC7EXE=",
+      "version": "14.0.0",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
       "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -3109,6 +3942,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "license": "ISC",
+      "optional": true
+    },
     "node_modules/graphemer": {
       "version": "1.4.0",
       "integrity": "sha1-+y8dVeDjoYSa7/yQxPoN1ToOZsY=",
@@ -3184,6 +4023,12 @@
         "node": ">=10"
       }
     },
+    "node_modules/html-escaper": {
+      "version": "2.0.2",
+      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/htmlparser2": {
       "version": "9.1.0",
       "integrity": "sha1-zbSY2KdaUfc5th0/cYE2w2m8jCM=",
@@ -3203,6 +4048,22 @@
         "entities": "^4.5.0"
       }
     },
+    "node_modules/http-errors": {
+      "version": "2.0.0",
+      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/http-proxy-agent": {
       "version": "7.0.2",
       "integrity": "sha1-mosfJGhmwChQlIZYX2K48sGMJw4=",
@@ -3232,7 +4093,7 @@
     "node_modules/iconv-lite": {
       "version": "0.6.3",
       "integrity": "sha1-pS+AvzjaGVLrXGgXkHGYcaGnJQE=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "safer-buffer": ">= 2.1.2 < 3.0.0"
@@ -3244,6 +4105,7 @@
     "node_modules/ieee754": {
       "version": "1.2.1",
       "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=",
+      "dev": true,
       "funding": [
         {
           "type": "github",
@@ -3262,8 +4124,8 @@
       "optional": true
     },
     "node_modules/ignore": {
-      "version": "5.3.2",
-      "integrity": "sha1-PNQOcp82Q/2HywTlC/DrcivFlvU=",
+      "version": "7.0.4",
+      "integrity": "sha1-oSxw0PJgfFv1CPtlpAx18DfXoHg=",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -3272,13 +4134,13 @@
     },
     "node_modules/immediate": {
       "version": "3.0.6",
-      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
+      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
       "license": "MIT",
       "optional": true
     },
     "node_modules/import-fresh": {
       "version": "3.3.1",
-      "integrity": "sha1-nOy1ZQPAraHydB271lRuSxO1fM8=",
+      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3303,7 +4165,8 @@
     },
     "node_modules/inflight": {
       "version": "1.0.6",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
       "license": "ISC",
       "optional": true,
       "dependencies": {
@@ -3324,9 +4187,18 @@
       "license": "ISC",
       "optional": true
     },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
     "node_modules/is-binary-path": {
       "version": "2.1.0",
-      "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3401,7 +4273,7 @@
     },
     "node_modules/is-interactive": {
       "version": "2.0.0",
-      "integrity": "sha1-QMV2FFk4JtoRAK3mBZd41ZfxbpA=",
+      "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -3420,15 +4292,6 @@
         "node": ">=0.12.0"
       }
     },
-    "node_modules/is-path-inside": {
-      "version": "3.0.3",
-      "integrity": "sha1-0jE2LlOgf/Kw4Op/7QSRYf/RYoM=",
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-plain-obj": {
       "version": "2.1.0",
       "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=",
@@ -3438,49 +4301,112 @@
         "node": ">=8"
       }
     },
+    "node_modules/is-promise": {
+      "version": "4.0.0",
+      "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/is-unicode-supported": {
       "version": "0.1.0",
       "integrity": "sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=",
       "license": "MIT",
       "optional": true,
-      "engines": {
-        "node": ">=10"
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-wsl": {
+      "version": "3.1.0",
+      "integrity": "sha1-4cZX45wQCQr8vt7GFyD2uSTDy9I=",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-inside-container": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/isarray": {
+      "version": "1.0.0",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "devOptional": true,
+      "license": "ISC"
+    },
+    "node_modules/istanbul-lib-coverage": {
+      "version": "3.2.2",
+      "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+      "license": "BSD-3-Clause",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-report": {
+      "version": "3.0.1",
+      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+      "license": "BSD-3-Clause",
+      "optional": true,
+      "dependencies": {
+        "istanbul-lib-coverage": "^3.0.0",
+        "make-dir": "^4.0.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/istanbul-lib-report/node_modules/has-flag": {
+      "version": "4.0.0",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-report/node_modules/supports-color": {
+      "version": "7.2.0",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "node_modules/is-wsl": {
-      "version": "3.1.0",
-      "integrity": "sha1-4cZX45wQCQr8vt7GFyD2uSTDy9I=",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/istanbul-reports": {
+      "version": "3.1.7",
+      "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
+      "license": "BSD-3-Clause",
+      "optional": true,
       "dependencies": {
-        "is-inside-container": "^1.0.0"
+        "html-escaper": "^2.0.0",
+        "istanbul-lib-report": "^3.0.0"
       },
       "engines": {
-        "node": ">=16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
-    "node_modules/isarray": {
-      "version": "1.0.0",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "license": "MIT",
-      "optional": true
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "devOptional": true,
-      "license": "ISC"
-    },
     "node_modules/jackspeak": {
       "version": "4.1.0",
       "integrity": "sha1-xInAefK2NtxMvpsDEqE/8SguVhs=",
-      "devOptional": true,
+      "dev": true,
       "license": "BlueOak-1.0.0",
       "dependencies": {
         "@isaacs/cliui": "^8.0.2"
@@ -3506,13 +4432,13 @@
     },
     "node_modules/json-buffer": {
       "version": "3.0.1",
-      "integrity": "sha1-kziAKjDTtmBfvgYT4JQAjKjAWhM=",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
       "license": "MIT",
       "optional": true
     },
     "node_modules/json-schema-traverse": {
       "version": "0.4.1",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
       "license": "MIT",
       "optional": true
     },
@@ -3550,30 +4476,9 @@
         "npm": ">=6"
       }
     },
-    "node_modules/jsonwebtoken/node_modules/jwa": {
-      "version": "1.4.1",
-      "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "buffer-equal-constant-time": "1.0.1",
-        "ecdsa-sig-formatter": "1.0.11",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "node_modules/jsonwebtoken/node_modules/jws": {
-      "version": "3.2.2",
-      "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "jwa": "^1.4.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
     "node_modules/jszip": {
       "version": "3.10.1",
-      "integrity": "sha1-NK7nDrGOofrsL1iSCKFX0f6wkcI=",
+      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
       "license": "(MIT OR GPL-3.0-or-later)",
       "optional": true,
       "dependencies": {
@@ -3590,23 +4495,23 @@
       "optional": true
     },
     "node_modules/jwa": {
-      "version": "2.0.0",
-      "integrity": "sha1-p+nD8p2ulAJ+vK9Jl1yTRVk0EPw=",
+      "version": "1.4.2",
+      "integrity": "sha1-FgEaxttI3nsQJ3fleJeQFSDux7k=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "buffer-equal-constant-time": "1.0.1",
+        "buffer-equal-constant-time": "^1.0.1",
         "ecdsa-sig-formatter": "1.0.11",
         "safe-buffer": "^5.0.1"
       }
     },
     "node_modules/jws": {
-      "version": "4.0.0",
-      "integrity": "sha1-LU6M9qMY/6oSYV6d7H6G5slzEPQ=",
+      "version": "3.2.2",
+      "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "jwa": "^2.0.0",
+        "jwa": "^1.4.1",
         "safe-buffer": "^5.0.1"
       }
     },
@@ -3624,7 +4529,7 @@
     },
     "node_modules/keyv": {
       "version": "4.5.4",
-      "integrity": "sha1-qHmpnilFL5QkOfKkBeOvizHU3pM=",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3655,7 +4560,7 @@
     },
     "node_modules/lie": {
       "version": "3.3.0",
-      "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=",
+      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -3686,12 +4591,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "integrity": "sha1-Z5WRxWTDv/quhFTPCz3zcMPWkRw=",
-      "license": "MIT",
-      "optional": true
-    },
     "node_modules/lodash.get": {
       "version": "4.4.2",
       "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
@@ -3844,6 +4743,21 @@
         "node": ">=10"
       }
     },
+    "node_modules/make-dir": {
+      "version": "4.0.0",
+      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/markdown-it": {
       "version": "14.1.0",
       "integrity": "sha1-PDxZkog8Yz20cUzLTXtZNdmLfUU=",
@@ -3876,6 +4790,27 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/media-typer": {
+      "version": "1.1.0",
+      "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/merge-descriptors": {
+      "version": "2.0.0",
+      "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/merge2": {
       "version": "1.4.1",
       "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
@@ -3931,249 +4866,72 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/mimic-fn": {
-      "version": "2.1.0",
-      "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/mimic-response": {
-      "version": "3.1.0",
-      "integrity": "sha1-LR1Zr5wbEpgVrMwsRqAipc4fo8k=",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "9.0.5",
-      "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "integrity": "sha1-waRk52kzAuCCoHXO4MBXdBrEdyw=",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/minipass": {
-      "version": "7.1.2",
-      "integrity": "sha1-k6libOXl5mvU24aEnnUV6SNApwc=",
-      "devOptional": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      }
-    },
-    "node_modules/mkdirp-classic": {
-      "version": "0.5.3",
-      "integrity": "sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM=",
-      "dev": true,
-      "license": "MIT",
-      "optional": true
-    },
-    "node_modules/mocha": {
-      "version": "11.1.0",
-      "integrity": "sha1-INfGrE1ta8tgqKpHlx/KdMZcPGY=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "browser-stdout": "^1.3.1",
-        "chokidar": "^3.5.3",
-        "debug": "^4.3.5",
-        "diff": "^5.2.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-up": "^5.0.0",
-        "glob": "^10.4.5",
-        "he": "^1.2.0",
-        "js-yaml": "^4.1.0",
-        "log-symbols": "^4.1.0",
-        "minimatch": "^5.1.6",
-        "ms": "^2.1.3",
-        "serialize-javascript": "^6.0.2",
-        "strip-json-comments": "^3.1.1",
-        "supports-color": "^8.1.1",
-        "workerpool": "^6.5.1",
-        "yargs": "^17.7.2",
-        "yargs-parser": "^21.1.1",
-        "yargs-unparser": "^2.0.0"
-      },
-      "bin": {
-        "_mocha": "bin/_mocha",
-        "mocha": "bin/mocha.js"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/mocha-explorer-launcher-scripts": {
-      "version": "0.4.0",
-      "integrity": "sha1-kVauKTxShWU3XHnD+5O2tbEIgSY=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "vscode-test-adapter-remoting-util": "^0.13.0"
-      }
-    },
-    "node_modules/mocha-multi-reporters": {
-      "version": "1.5.1",
-      "integrity": "sha1-xzSGvtVRnh1Zyc45rHqXkmAOVnY=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "debug": "^4.1.1",
-        "lodash": "^4.17.15"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      },
-      "peerDependencies": {
-        "mocha": ">=3.1.2"
-      }
-    },
-    "node_modules/mocha/node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=",
+    "node_modules/mimic-function": {
+      "version": "5.0.1",
+      "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
       "license": "MIT",
       "optional": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/mocha/node_modules/glob": {
-      "version": "10.4.5",
-      "integrity": "sha1-9NnwuQ/9urCcnXf18ptCYlF7CVY=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
-      "version": "9.0.5",
-      "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/mocha/node_modules/has-flag": {
-      "version": "4.0.0",
-      "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/mocha/node_modules/jackspeak": {
-      "version": "3.4.3",
-      "integrity": "sha1-iDOp2Jq0rN5hiJQr0cU7Y5DtWoo=",
-      "license": "BlueOak-1.0.0",
-      "optional": true,
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
-      }
-    },
-    "node_modules/mocha/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=",
-      "license": "ISC",
-      "optional": true
-    },
-    "node_modules/mocha/node_modules/minimatch": {
-      "version": "5.1.6",
-      "integrity": "sha1-HPy4z1Ui6mmVLNKvla4JR38SKpY=",
-      "license": "ISC",
+    "node_modules/mimic-response": {
+      "version": "3.1.0",
+      "integrity": "sha1-LR1Zr5wbEpgVrMwsRqAipc4fo8k=",
+      "dev": true,
+      "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
       "engines": {
         "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/mocha/node_modules/path-scurry": {
-      "version": "1.11.1",
-      "integrity": "sha1-eWCmaIiFlKByCxKpEdGnQqufEdI=",
-      "license": "BlueOak-1.0.0",
+    "node_modules/minimatch": {
+      "version": "9.0.5",
+      "integrity": "sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU=",
+      "license": "ISC",
       "optional": true,
       "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+        "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.18"
+        "node": ">=16 || 14 >=14.17"
       },
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/mocha/node_modules/supports-color": {
-      "version": "8.1.1",
-      "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=",
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "integrity": "sha1-waRk52kzAuCCoHXO4MBXdBrEdyw=",
+      "dev": true,
       "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
       "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "7.1.2",
+      "integrity": "sha1-k6libOXl5mvU24aEnnUV6SNApwc=",
+      "devOptional": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
       }
     },
+    "node_modules/mkdirp-classic": {
+      "version": "0.5.3",
+      "integrity": "sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM=",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
     "node_modules/mock-fs": {
       "version": "5.5.0",
       "integrity": "sha1-lKRtKZqqWI5zWiAcvoI8h26R84U=",
@@ -4208,6 +4966,15 @@
       "license": "MIT",
       "optional": true
     },
+    "node_modules/negotiator": {
+      "version": "1.0.0",
+      "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/nise": {
       "version": "6.1.1",
       "integrity": "sha1-eOqTzEm+Ei5Ey3yP31l7Dod4tko=",
@@ -4222,8 +4989,8 @@
       }
     },
     "node_modules/node-abi": {
-      "version": "3.74.0",
-      "integrity": "sha1-W/tEJCZOrrkUMtKtudojxjowHtA=",
+      "version": "3.75.0",
+      "integrity": "sha1-L5KakakKDQKzJcQ3MTFIAjV+12Q=",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -4262,7 +5029,7 @@
     },
     "node_modules/normalize-path": {
       "version": "3.0.0",
-      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -4281,10 +5048,19 @@
         "url": "https://github.com/fb55/nth-check?sponsor=1"
       }
     },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/object-inspect": {
       "version": "1.13.4",
       "integrity": "sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
@@ -4293,6 +5069,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/once": {
       "version": "1.4.0",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
@@ -4303,23 +5091,23 @@
       }
     },
     "node_modules/onetime": {
-      "version": "5.1.2",
-      "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+      "version": "7.0.0",
+      "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "mimic-fn": "^2.1.0"
+        "mimic-function": "^5.0.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/open": {
-      "version": "10.1.0",
-      "integrity": "sha1-p3lebl1Rmr5ChtmTe7JLURIlmOE=",
+      "version": "10.1.2",
+      "integrity": "sha1-1d9AmEdVyanDyT34FWoSRn6IKSU=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4353,23 +5141,23 @@
       }
     },
     "node_modules/ora": {
-      "version": "7.0.1",
-      "integrity": "sha1-zdUw7Nhl/jnkUaDnaXhlZpyxGTA=",
+      "version": "8.2.0",
+      "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
         "chalk": "^5.3.0",
-        "cli-cursor": "^4.0.0",
-        "cli-spinners": "^2.9.0",
+        "cli-cursor": "^5.0.0",
+        "cli-spinners": "^2.9.2",
         "is-interactive": "^2.0.0",
-        "is-unicode-supported": "^1.3.0",
-        "log-symbols": "^5.1.0",
-        "stdin-discarder": "^0.1.0",
-        "string-width": "^6.1.0",
+        "is-unicode-supported": "^2.0.0",
+        "log-symbols": "^6.0.0",
+        "stdin-discarder": "^0.2.2",
+        "string-width": "^7.2.0",
         "strip-ansi": "^7.1.0"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -4377,7 +5165,7 @@
     },
     "node_modules/ora/node_modules/ansi-regex": {
       "version": "6.1.0",
-      "integrity": "sha1-lexAnGlhnWyxuLNPFLZg7yjr1lQ=",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -4389,7 +5177,7 @@
     },
     "node_modules/ora/node_modules/chalk": {
       "version": "5.4.1",
-      "integrity": "sha1-G0i/CWPsFY3OKqz2nAk64t0gktg=",
+      "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -4401,31 +5189,43 @@
     },
     "node_modules/ora/node_modules/emoji-regex": {
       "version": "10.4.0",
-      "integrity": "sha1-A1U6/qgLOXV0nPyzb3dsomjkE9Q=",
+      "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
       "license": "MIT",
       "optional": true
     },
     "node_modules/ora/node_modules/is-unicode-supported": {
-      "version": "1.3.0",
-      "integrity": "sha1-2CSYS2FsKSouGYIH1KYJmDhC9xQ=",
+      "version": "2.1.0",
+      "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
       "license": "MIT",
       "optional": true,
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/ora/node_modules/log-symbols": {
-      "version": "5.1.0",
-      "integrity": "sha1-og47ml9T+sauuOK7IsB88sjxbZM=",
+      "version": "6.0.0",
+      "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "chalk": "^5.0.0",
-        "is-unicode-supported": "^1.1.0"
+        "chalk": "^5.3.0",
+        "is-unicode-supported": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=18"
       },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": {
+      "version": "1.3.0",
+      "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+      "license": "MIT",
+      "optional": true,
       "engines": {
         "node": ">=12"
       },
@@ -4434,17 +5234,17 @@
       }
     },
     "node_modules/ora/node_modules/string-width": {
-      "version": "6.1.0",
-      "integrity": "sha1-lkiNbtI/mtXYLRNSKvnkxMP9dRg=",
+      "version": "7.2.0",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^10.2.1",
-        "strip-ansi": "^7.0.1"
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -4452,7 +5252,7 @@
     },
     "node_modules/ora/node_modules/strip-ansi": {
       "version": "7.1.0",
-      "integrity": "sha1-1bZWjKaJ2FYTcLBwdoXSJDT6/0U=",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -4503,13 +5303,13 @@
     },
     "node_modules/pako": {
       "version": "1.0.11",
-      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
       "license": "(MIT AND Zlib)",
       "optional": true
     },
     "node_modules/parent-module": {
       "version": "1.0.1",
-      "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -4538,12 +5338,12 @@
       }
     },
     "node_modules/parse5": {
-      "version": "7.2.1",
-      "integrity": "sha1-iSj1WRXmEl9DDMRDCXZb8XVWozo=",
+      "version": "7.3.0",
+      "integrity": "sha1-1+Ik+nI5nHoXUJn0X8KtAksF7AU=",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "entities": "^4.5.0"
+        "entities": "^6.0.0"
       },
       "funding": {
         "url": "https://github.com/inikulin/parse5?sponsor=1"
@@ -4574,6 +5374,27 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
+    "node_modules/parse5/node_modules/entities": {
+      "version": "6.0.0",
+      "integrity": "sha1-CcninLebCmRZqbnbnvtBisW7jlE=",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
@@ -4585,7 +5406,7 @@
     },
     "node_modules/path-is-absolute": {
       "version": "1.0.1",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -4604,7 +5425,7 @@
     "node_modules/path-scurry": {
       "version": "2.0.0",
       "integrity": "sha1-nwUiifI62L+Tl6KgQl57hhXFhYA=",
-      "devOptional": true,
+      "dev": true,
       "license": "BlueOak-1.0.0",
       "dependencies": {
         "lru-cache": "^11.0.0",
@@ -4618,9 +5439,9 @@
       }
     },
     "node_modules/path-scurry/node_modules/lru-cache": {
-      "version": "11.0.2",
-      "integrity": "sha1-+9jnz4IR9efl2RkFxBWj9VdVyjk=",
-      "devOptional": true,
+      "version": "11.1.0",
+      "integrity": "sha1-r6+wYGBxCBMtvBz4rmYa+2lIYRc=",
+      "dev": true,
       "license": "ISC",
       "engines": {
         "node": "20 || >=22"
@@ -4653,6 +5474,15 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
+    "node_modules/pkce-challenge": {
+      "version": "5.0.0",
+      "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=16.20.0"
+      }
+    },
     "node_modules/prebuild-install": {
       "version": "7.1.3",
       "integrity": "sha1-1jCrrSsUdEPyCiEpF76uaLgJLuw=",
@@ -4689,12 +5519,56 @@
         "node": ">= 0.8.0"
       }
     },
+    "node_modules/prettier": {
+      "version": "3.5.3",
+      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "prettier": "bin/prettier.cjs"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
+    "node_modules/prettier-plugin-organize-imports": {
+      "version": "4.1.0",
+      "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
+      "license": "MIT",
+      "optional": true,
+      "peerDependencies": {
+        "prettier": ">=2.0",
+        "typescript": ">=2.9",
+        "vue-tsc": "^2.1.0"
+      },
+      "peerDependenciesMeta": {
+        "vue-tsc": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/process-nextick-args": {
       "version": "2.0.1",
-      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
       "license": "MIT",
       "optional": true
     },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
     "node_modules/pump": {
       "version": "3.0.2",
       "integrity": "sha1-g28+3WvC7lmSVskk/+DYhXPdy/g=",
@@ -4708,7 +5582,7 @@
     },
     "node_modules/punycode": {
       "version": "2.3.1",
-      "integrity": "sha1-AnQi4vrsCyXhVJw+G9gwm5EztuU=",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -4727,7 +5601,7 @@
     "node_modules/qs": {
       "version": "6.14.0",
       "integrity": "sha1-xj+kBoDSxclBQSoOiZyJr2DAqTA=",
-      "dev": true,
+      "devOptional": true,
       "license": "BSD-3-Clause",
       "dependencies": {
         "side-channel": "^1.1.0"
@@ -4768,6 +5642,30 @@
         "safe-buffer": "^5.1.0"
       }
     },
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/raw-body": {
+      "version": "3.0.0",
+      "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.6.3",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/rc": {
       "version": "1.2.8",
       "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=",
@@ -4808,7 +5706,7 @@
     },
     "node_modules/readable-stream": {
       "version": "2.3.8",
-      "integrity": "sha1-kRJegEK7obmIf0k0X2J3Anzovps=",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
@@ -4823,22 +5721,10 @@
     },
     "node_modules/readable-stream/node_modules/safe-buffer": {
       "version": "5.1.2",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
       "license": "MIT",
       "optional": true
     },
-    "node_modules/readdirp": {
-      "version": "3.6.0",
-      "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "picomatch": "^2.2.1"
-      },
-      "engines": {
-        "node": ">=8.10.0"
-      }
-    },
     "node_modules/require-directory": {
       "version": "2.1.1",
       "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
@@ -4850,7 +5736,7 @@
     },
     "node_modules/resolve-from": {
       "version": "4.0.0",
-      "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -4858,27 +5744,21 @@
       }
     },
     "node_modules/restore-cursor": {
-      "version": "4.0.0",
-      "integrity": "sha1-UZVgpDGJdQlt725gnUQQDtqkzLk=",
+      "version": "5.1.0",
+      "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
+        "onetime": "^7.0.0",
+        "signal-exit": "^4.1.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/restore-cursor/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "integrity": "sha1-qaF2f4r4QVURTqq9c/mSc8j1mtk=",
-      "license": "ISC",
-      "optional": true
-    },
     "node_modules/reusify": {
       "version": "1.1.0",
       "integrity": "sha1-D+E7lSLhRz9RtVjueW4I8R+bSJ8=",
@@ -4889,70 +5769,20 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/rewire": {
-      "version": "7.0.0",
-      "integrity": "sha1-QdtUgjcMiHWP/Jpxn3ySp2H6j78=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "eslint": "^8.47.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "integrity": "sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/rimraf/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+    "node_modules/router": {
+      "version": "2.2.0",
+      "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/rimraf/node_modules/glob": {
-      "version": "7.2.3",
-      "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/rimraf/node_modules/minimatch": {
-      "version": "3.1.2",
-      "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=",
-      "license": "ISC",
-      "optional": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "debug": "^4.4.0",
+        "depd": "^2.0.0",
+        "is-promise": "^4.0.0",
+        "parseurl": "^1.3.3",
+        "path-to-regexp": "^8.0.0"
       },
       "engines": {
-        "node": "*"
+        "node": ">= 18"
       }
     },
     "node_modules/run-applescript": {
@@ -5013,7 +5843,7 @@
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/sax": {
@@ -5023,8 +5853,8 @@
       "license": "ISC"
     },
     "node_modules/semver": {
-      "version": "7.7.1",
-      "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=",
+      "version": "7.7.2",
+      "integrity": "sha1-Z9mf3NNc7CHm+Lh6f9UVoz+YK1g=",
       "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
@@ -5033,6 +5863,49 @@
         "node": ">=10"
       }
     },
+    "node_modules/send": {
+      "version": "1.2.0",
+      "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "debug": "^4.3.5",
+        "encodeurl": "^2.0.0",
+        "escape-html": "^1.0.3",
+        "etag": "^1.8.1",
+        "fresh": "^2.0.0",
+        "http-errors": "^2.0.0",
+        "mime-types": "^3.0.1",
+        "ms": "^2.1.3",
+        "on-finished": "^2.4.1",
+        "range-parser": "^1.2.1",
+        "statuses": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 18"
+      }
+    },
+    "node_modules/send/node_modules/mime-db": {
+      "version": "1.54.0",
+      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/send/node_modules/mime-types": {
+      "version": "3.0.1",
+      "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "mime-db": "^1.54.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/serialize-javascript": {
       "version": "6.0.2",
       "integrity": "sha1-3voeBVyDv21Z6oBdjahiJU62psI=",
@@ -5042,12 +5915,33 @@
         "randombytes": "^2.1.0"
       }
     },
+    "node_modules/serve-static": {
+      "version": "2.2.0",
+      "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "encodeurl": "^2.0.0",
+        "escape-html": "^1.0.3",
+        "parseurl": "^1.3.3",
+        "send": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 18"
+      }
+    },
     "node_modules/setimmediate": {
       "version": "1.0.5",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
       "license": "MIT",
       "optional": true
     },
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+      "license": "ISC",
+      "optional": true
+    },
     "node_modules/shebang-command": {
       "version": "2.0.0",
       "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
@@ -5072,7 +5966,7 @@
     "node_modules/side-channel": {
       "version": "1.1.0",
       "integrity": "sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
@@ -5091,7 +5985,7 @@
     "node_modules/side-channel-list": {
       "version": "1.0.0",
       "integrity": "sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "es-errors": "^1.3.0",
@@ -5107,7 +6001,7 @@
     "node_modules/side-channel-map": {
       "version": "1.0.1",
       "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "call-bound": "^1.0.2",
@@ -5125,7 +6019,7 @@
     "node_modules/side-channel-weakmap": {
       "version": "1.0.2",
       "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
         "call-bound": "^1.0.2",
@@ -5201,13 +6095,13 @@
       }
     },
     "node_modules/sinon": {
-      "version": "19.0.2",
-      "integrity": "sha1-lEz3cdIiNqqE/Bq3DOW//DohXa0=",
+      "version": "19.0.5",
+      "integrity": "sha1-ZP0vhHhqBD9yEkbECza+9MS3azw=",
       "license": "BSD-3-Clause",
       "optional": true,
       "dependencies": {
         "@sinonjs/commons": "^3.0.1",
-        "@sinonjs/fake-timers": "^13.0.2",
+        "@sinonjs/fake-timers": "^13.0.5",
         "@sinonjs/samsam": "^8.0.1",
         "diff": "^7.0.0",
         "nise": "^6.1.1",
@@ -5248,62 +6142,27 @@
         "node": ">=8"
       }
     },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-      "license": "BSD-3-Clause",
-      "optional": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.5.21",
-      "integrity": "sha1-BP58f54e0tZiIzwoyys1ufY/bk8=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "node_modules/split": {
-      "version": "1.0.1",
-      "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=",
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "through": "2"
-      },
       "engines": {
-        "node": "*"
+        "node": ">= 0.8"
       }
     },
     "node_modules/stdin-discarder": {
-      "version": "0.1.0",
-      "integrity": "sha1-IrPkADk6jijr9T+ZWPOIBiLv3iE=",
+      "version": "0.2.2",
+      "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
       "license": "MIT",
       "optional": true,
-      "dependencies": {
-        "bl": "^5.0.0"
-      },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stoppable": {
-      "version": "1.1.0",
-      "integrity": "sha1-MtpWjoPqSIsI5NfqLDvMnXUBXVs=",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4",
-        "npm": ">=6"
-      }
-    },
     "node_modules/string_decoder": {
       "version": "1.1.1",
       "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
@@ -5433,6 +6292,15 @@
         "node": ">=4"
       }
     },
+    "node_modules/tapable": {
+      "version": "2.2.1",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/tar-fs": {
       "version": "2.1.2",
       "integrity": "sha1-Ql8VTzQEyxbLj/bmcdRasu2VlsU=",
@@ -5463,43 +6331,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/tar-stream/node_modules/bl": {
-      "version": "4.1.0",
-      "integrity": "sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "buffer": "^5.5.0",
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.4.0"
-      }
-    },
-    "node_modules/tar-stream/node_modules/buffer": {
-      "version": "5.7.1",
-      "integrity": "sha1-umLnwTEzBTWCGXFghRqPZI6Z7tA=",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.1.13"
-      }
-    },
     "node_modules/tar-stream/node_modules/readable-stream": {
       "version": "3.6.2",
       "integrity": "sha1-VqmzbqllwAxak+8x6xEaDxEFaWc=",
@@ -5515,17 +6346,62 @@
         "node": ">= 6"
       }
     },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-      "license": "MIT",
-      "optional": true
+    "node_modules/test-exclude": {
+      "version": "6.0.0",
+      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^7.1.4",
+        "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "node_modules/through": {
-      "version": "2.3.8",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+    "node_modules/test-exclude/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "license": "MIT",
-      "optional": true
+      "optional": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/test-exclude/node_modules/glob": {
+      "version": "7.2.3",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/test-exclude/node_modules/minimatch": {
+      "version": "3.1.2",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
     },
     "node_modules/tmp": {
       "version": "0.2.3",
@@ -5548,14 +6424,23 @@
         "node": ">=8.0"
       }
     },
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
     "node_modules/tr46": {
       "version": "0.0.3",
       "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
       "license": "MIT"
     },
     "node_modules/ts-api-utils": {
-      "version": "2.0.1",
-      "integrity": "sha1-ZgcpOFtiW5OaqlgFT0XAWPM/EM0=",
+      "version": "2.1.0",
+      "integrity": "sha1-WV9wlORu7TZME/0j51+VE9Kbr5E=",
       "license": "MIT",
       "optional": true,
       "engines": {
@@ -5613,16 +6498,39 @@
         "node": ">=4"
       }
     },
-    "node_modules/type-fest": {
-      "version": "0.20.2",
-      "integrity": "sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ=",
-      "license": "(MIT OR CC0-1.0)",
+    "node_modules/type-is": {
+      "version": "2.0.1",
+      "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "content-type": "^1.0.5",
+        "media-typer": "^1.1.0",
+        "mime-types": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/type-is/node_modules/mime-db": {
+      "version": "1.54.0",
+      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+      "license": "MIT",
       "optional": true,
       "engines": {
-        "node": ">=10"
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/type-is/node_modules/mime-types": {
+      "version": "3.0.1",
+      "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "mime-db": "^1.54.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": ">= 0.6"
       }
     },
     "node_modules/typed-rest-client": {
@@ -5637,8 +6545,8 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.8.2",
-      "integrity": "sha1-gXCzcC90t52y5aliB8FeZYB5meQ=",
+      "version": "5.8.3",
+      "integrity": "sha1-kvij5ePPSXNW9BeMNM1lp/XoRA4=",
       "license": "Apache-2.0",
       "optional": true,
       "bin": {
@@ -5649,6 +6557,28 @@
         "node": ">=14.17"
       }
     },
+    "node_modules/typescript-eslint": {
+      "version": "8.32.1",
+      "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@typescript-eslint/eslint-plugin": "8.32.1",
+        "@typescript-eslint/parser": "8.32.1",
+        "@typescript-eslint/utils": "8.32.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.9.0"
+      }
+    },
     "node_modules/uc.micro": {
       "version": "2.1.0",
       "integrity": "sha1-+NP30OxMPeo1p+PI76TLi0XJ5+4=",
@@ -5662,8 +6592,8 @@
       "license": "MIT"
     },
     "node_modules/undici": {
-      "version": "6.21.2",
-      "integrity": "sha1-ScWITo+QOcZaie6QGO88ji8fSSg=",
+      "version": "6.21.3",
+      "integrity": "sha1-GFdSrZLD0O/np9H2hUpQ+DtVLXo=",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5676,6 +6606,15 @@
       "license": "MIT",
       "optional": true
     },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/untildify": {
       "version": "4.0.0",
       "integrity": "sha1-K8lHuVNlJIfkYAlJ+wkeOujNkZs=",
@@ -5686,7 +6625,7 @@
     },
     "node_modules/uri-js": {
       "version": "4.4.1",
-      "integrity": "sha1-mxpSWVIlhZ5V9mnZKPiMbFfyp34=",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
       "license": "BSD-2-Clause",
       "optional": true,
       "dependencies": {
@@ -5717,6 +6656,29 @@
         "uuid": "dist/bin/uuid"
       }
     },
+    "node_modules/v8-to-istanbul": {
+      "version": "9.3.0",
+      "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
+      "license": "ISC",
+      "optional": true,
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.12",
+        "@types/istanbul-lib-coverage": "^2.0.1",
+        "convert-source-map": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10.12.0"
+      }
+    },
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/vscode-jsonrpc": {
       "version": "8.2.0",
       "integrity": "sha1-9D36NftR52PRfNlNzKDJRY81q/k=",
@@ -5763,26 +6725,6 @@
       "integrity": "sha1-MnNnbwzy6rQLP0TQhay7fwijnYo=",
       "license": "MIT"
     },
-    "node_modules/vscode-test-adapter-api": {
-      "version": "1.9.0",
-      "integrity": "sha1-D9Ff7Z8mFZZwmWyz349WGJAKAHk=",
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "vscode": "^1.23.0"
-      }
-    },
-    "node_modules/vscode-test-adapter-remoting-util": {
-      "version": "0.13.0",
-      "integrity": "sha1-5BNv1y0pK1dul6ZvRLdPkB9PJj8=",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "split": "^1.0.1",
-        "tslib": "^2.0.0",
-        "vscode-test-adapter-api": "^1.9.0"
-      }
-    },
     "node_modules/webidl-conversions": {
       "version": "3.0.1",
       "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=",
@@ -6110,6 +7052,24 @@
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
+    },
+    "node_modules/zod": {
+      "version": "3.24.4",
+      "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==",
+      "license": "MIT",
+      "optional": true,
+      "funding": {
+        "url": "https://github.com/sponsors/colinhacks"
+      }
+    },
+    "node_modules/zod-to-json-schema": {
+      "version": "3.24.5",
+      "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==",
+      "license": "ISC",
+      "optional": true,
+      "peerDependencies": {
+        "zod": "^3.24.1"
+      }
     }
   }
 }
diff --git a/package.json b/package.json
index 07a84d1130..05691dda85 100644
--- a/package.json
+++ b/package.json
@@ -60,46 +60,41 @@
     "onCommand:PowerShell.SpecifyScriptArgs"
   ],
   "dependencies": {
-    "@vscode/extension-telemetry": "^0.9.8",
+    "@vscode/extension-telemetry": "^0.9.9",
     "node-fetch": "^2.7.0",
-    "semver": "^7.7.1",
+    "semver": "^7.7.2",
     "untildify": "^4.0.0",
     "uuid": "^9.0.1",
     "vscode-languageclient": "^9.0.1",
     "vscode-languageserver-protocol": "^3.17.5"
   },
   "devDependencies": {
-    "@vscode/vsce": "^3.3.0",
-    "esbuild": "^0.25.1"
+    "@vscode/vsce": "^3.3.2",
+    "esbuild": "^0.25.4"
   },
   "optionalDependencies": {
-    "@tsconfig/node20": "^20.1.4",
-    "@types/mocha": "^10.0.10",
+    "@eslint/js": "^9.26.0",
     "@types/mock-fs": "^4.13.4",
-    "@types/node": "^20.17.24",
+    "@types/node": "^20.17.47",
     "@types/node-fetch": "^2.6.12",
-    "@types/rewire": "^2.5.30",
-    "@types/semver": "^7.5.8",
+    "@types/semver": "^7.7.0",
     "@types/sinon": "^17.0.4",
     "@types/ungap__structured-clone": "^1.2.0",
     "@types/uuid": "^9.0.8",
     "@types/vscode": "~1.96.0",
-    "@typescript-eslint/eslint-plugin": "^8.26.1",
-    "@typescript-eslint/parser": "^8.26.1",
     "@ungap/structured-clone": "^1.3.0",
     "@vscode/debugprotocol": "^1.68.0",
-    "@vscode/test-electron": "^2.4.1",
-    "eslint": "^8.57.0",
-    "eslint-plugin-header": "^3.1.1",
-    "glob": "^11.0.1",
-    "mocha": "^11.1.0",
-    "mocha-explorer-launcher-scripts": "^0.4.0",
-    "mocha-multi-reporters": "^1.5.1",
+    "@vscode/test-cli": "^0.0.10",
+    "@vscode/test-electron": "^2.5.2",
+    "esbuild-register": "^3.6.0",
+    "eslint": "^9.26.0",
+    "eslint-config-prettier": "^10.1.5",
     "mock-fs": "^5.5.0",
-    "rewire": "^7.0.0",
-    "sinon": "^19.0.2",
-    "source-map-support": "^0.5.21",
-    "typescript": "^5.8.2"
+    "prettier": "^3.5.3",
+    "prettier-plugin-organize-imports": "^4.1.0",
+    "sinon": "^19.0.5",
+    "typescript": "^5.8.3",
+    "typescript-eslint": "^8.32.1"
   },
   "extensionDependencies": [
     "vscode.powershell"
@@ -111,9 +106,8 @@
     "lint": "eslint src test --ext .ts",
     "package": "vsce package --out out/ --no-gitHubIssueLinking",
     "publish": "vsce publish",
-    "compile-test": "npm run compile && tsc --incremental",
-    "watch-tests": "npm run compile-test -- --watch",
-    "test": "npm run compile-test && node ./test/runTests.js"
+    "pretest": "npm run compile",
+    "test": "vscode-test"
   },
   "contributes": {
     "breakpoints": [

From 5631f4166445d01698a68c3273745c437c60d5c4 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 10:09:01 -0700
Subject: [PATCH 11/33] Convert ESLint config and add Prettier

---
 .editorconfig                     |  1 +
 .eslintrc.json                    | 75 -------------------------------
 .prettierignore                   |  3 ++
 eslint.config.mjs                 | 49 ++++++++++++++++++++
 package.json                      |  3 ++
 pwsh-extension-dev.code-workspace | 59 ++++++++----------------
 6 files changed, 75 insertions(+), 115 deletions(-)
 delete mode 100644 .eslintrc.json
 create mode 100644 .prettierignore
 create mode 100644 eslint.config.mjs

diff --git a/.editorconfig b/.editorconfig
index 9ad197dff6..31cbf8b559 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -5,6 +5,7 @@ charset = utf-8
 indent_style = space
 indent_size = 4
 insert_final_newline = true
+trim_trailing_whitespace = true
 
 [*.{json,yaml,yml,code-workspace}]
 indent_size = 2
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 369478b085..0000000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-  "env": {
-    "browser": true,
-    "es2021": true
-  },
-  "extends": [
-    "eslint:recommended",
-    "plugin:@typescript-eslint/stylistic-type-checked",
-    "plugin:@typescript-eslint/strict-type-checked"
-  ],
-  "overrides": [],
-  "parser": "@typescript-eslint/parser",
-  "parserOptions": {
-    "ecmaVersion": "latest",
-    "sourceType": "module",
-    "tsconfigRootDir": ".",
-    "project": true
-  },
-  "plugins": [
-    "@typescript-eslint",
-    "header"
-  ],
-  "rules": {
-    "indent": [
-      "error",
-      4
-    ],
-    "quotes": [
-      "error",
-      "double"
-    ],
-    "semi": [
-      "error",
-      "always"
-    ],
-    "@typescript-eslint/explicit-function-return-type": "error",
-    "@typescript-eslint/no-empty-object-type": "off",
-    "@typescript-eslint/no-floating-promises": [
-      "error",
-      {
-        "ignoreVoid": true
-      }
-    ],
-    "@typescript-eslint/no-non-null-assertion": "off",
-    "@typescript-eslint/no-require-imports": "off",
-    "@typescript-eslint/no-unused-vars": [
-      "error",
-      {
-        "argsIgnorePattern": "^_"
-      }
-    ],
-    "@typescript-eslint/no-unsafe-argument": "off",
-    "@typescript-eslint/no-unsafe-assignment": "off",
-    "@typescript-eslint/no-unsafe-call": "off",
-    "@typescript-eslint/no-unsafe-member-access": "off",
-    "@typescript-eslint/no-unsafe-return": "off",
-    "@typescript-eslint/restrict-template-expressions": "off",
-    "@typescript-eslint/prefer-nullish-coalescing": [
-      "error",
-      {
-        "ignoreConditionalTests": true,
-        "ignoreMixedLogicalExpressions": true
-      }
-    ],
-    "header/header": [
-      2,
-      "line",
-      [
-        " Copyright (c) Microsoft Corporation.",
-        " Licensed under the MIT License."
-      ],
-      2
-    ]
-  }
-}
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000..3772289cad
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,3 @@
+dist/
+modules/
+out/
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000000..bf3be9452a
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,49 @@
+import eslint from "@eslint/js";
+import eslintConfigPrettier from "eslint-config-prettier/flat";
+import tseslint from "typescript-eslint";
+
+export default tseslint.config(
+    eslint.configs.recommended,
+    tseslint.configs.strictTypeChecked,
+    tseslint.configs.stylisticTypeChecked,
+    eslintConfigPrettier,
+    {
+        languageOptions: {
+            parserOptions: {
+                projectService: true,
+                tsconfigRootDir: import.meta.dirname,
+            },
+        },
+        rules: {
+            "@typescript-eslint/explicit-function-return-type": "error",
+            "@typescript-eslint/no-empty-object-type": "off",
+            "@typescript-eslint/no-floating-promises": [
+                "error",
+                {
+                    ignoreVoid: true,
+                },
+            ],
+            "@typescript-eslint/no-non-null-assertion": "off",
+            "@typescript-eslint/no-require-imports": "off",
+            "@typescript-eslint/no-unused-vars": [
+                "error",
+                {
+                    argsIgnorePattern: "^_",
+                },
+            ],
+            "@typescript-eslint/no-unsafe-argument": "off",
+            "@typescript-eslint/no-unsafe-assignment": "off",
+            "@typescript-eslint/no-unsafe-call": "off",
+            "@typescript-eslint/no-unsafe-member-access": "off",
+            "@typescript-eslint/no-unsafe-return": "off",
+            "@typescript-eslint/restrict-template-expressions": "off",
+            "@typescript-eslint/prefer-nullish-coalescing": [
+                "error",
+                {
+                    ignoreConditionalTests: true,
+                    ignoreMixedLogicalExpressions: true,
+                },
+            ],
+        },
+    },
+);
diff --git a/package.json b/package.json
index 05691dda85..456153fee8 100644
--- a/package.json
+++ b/package.json
@@ -109,6 +109,9 @@
     "pretest": "npm run compile",
     "test": "vscode-test"
   },
+  "prettier": {
+    "plugins": ["prettier-plugin-organize-imports"]
+  },
   "contributes": {
     "breakpoints": [
       {
diff --git a/pwsh-extension-dev.code-workspace b/pwsh-extension-dev.code-workspace
index 51083c21ad..5dddd29e64 100644
--- a/pwsh-extension-dev.code-workspace
+++ b/pwsh-extension-dev.code-workspace
@@ -9,7 +9,6 @@
       "path": "../PowerShellEditorServices"
     }
   ],
-
   "extensions": {
     "recommendations": [
       "davidanson.vscode-markdownlint",
@@ -18,17 +17,22 @@
       "esbenp.prettier-vscode",
       "ms-dotnettools.csharp",
       "ms-vscode.powershell",
-      "hbenl.vscode-mocha-test-adapter",
-      "connor4312.esbuild-problem-matchers"
+      "connor4312.esbuild-problem-matchers",
+      "ms-vscode.extension-test-runner"
     ]
   },
   "settings": {
     "window.title": "PowerShell VS Code Extension Development",
     "debug.onTaskErrors": "prompt",
-    "editor.tabSize": 4,
-    "editor.insertSpaces": true,
-    "files.trimTrailingWhitespace": true,
-    "files.insertFinalNewline": true,
+    "editor.codeActionsOnSave": {
+      "source.fixAll": "explicit",
+    },
+    "[typescript][javascript][json]": {
+      "editor.defaultFormatter": "esbenp.prettier-vscode",
+      "editor.formatOnPaste": true,
+      "editor.formatOnSave": true,
+      "editor.formatOnSaveMode": "modificationsIfAvailable",
+    },
     "files.associations": {
       "**/snippets/*.json": "jsonc", // Use JSONC instead of JSON because that's how VS Code interprets snippet files, and it enables better source documentation.
     },
@@ -46,25 +50,8 @@
     "powershell.codeFormatting.whitespaceBetweenParameters": true,
     "powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline",
     "typescript.tsdk": "Client/node_modules/typescript/lib", // Lock the TypeScript SDK path to the version we use
-    "typescript.format.semicolons": "insert", // Code actions like "organize imports" ignore ESLint, so we need this here
-    "eslint.format.enable": true, // Enable ESLint as defaut formatter so quick fixes can be applied directly
-    "[typescript]": {
-      "editor.defaultFormatter": "esbenp.prettier-vscode",
-      "editor.formatOnPaste": true,
-      "editor.formatOnSave": true,
-      "editor.formatOnSaveMode": "modificationsIfAvailable"
-    },
-    "mochaExplorer.configFile": ".mocharc.json",
-    "mochaExplorer.launcherScript": "test/runTests",
-    "mochaExplorer.autoload": false, // The test instance pops up every time discovery or run is done, this could be annoying on startup.
-    "mochaExplorer.debuggerPort": 59229, // Matches the launch config, we dont want to use the default port as we are launching a duplicate instance of vscode and it might conflict.
-    "mochaExplorer.ipcRole": "server",
-    "mochaExplorer.ipcTimeout": 30000, // 30 seconds
+    "typescript.tsserver.experimental.enableProjectDiagnostics": true,
     "testExplorer.useNativeTesting": true,
-    "mochaExplorer.env": {
-      "VSCODE_VERSION": "insiders",
-      "ELECTRON_RUN_AS_NODE": null
-    }
   },
   "tasks": {
     "version": "2.0.0",
@@ -95,7 +82,7 @@
     "osx": {
       "options": {
         "shell": {
-          "executable": "/usr/local/bin/pwsh",
+          "executable": "pwsh",
           "args": [
             "-NoProfile",
             "-Command"
@@ -324,15 +311,13 @@
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
         "outFiles": [
-          "${workspaceFolder:Client}/**/*.js",
-          "!**/node_modules/**",
-          "!**/.vscode-test/**"
+          "${workspaceFolder:Client}/dist/*.js"
         ],
         "skipFiles": [
           "<node_internals>/**",
           "**/node_modules/**",
           "**/.vscode-test/**",
-          "**/app/out/vs/**" //Skips Extension Host internals
+          "**/app/out/vs/**" // Skips Extension Host internals
         ],
         "presentation": {
           "hidden": true
@@ -356,9 +341,7 @@
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
         "outFiles": [
-          "${workspaceFolder:Client}/**/*.js",
-          "!**/node_modules/**",
-          "!**/.vscode-test/**"
+          "${workspaceFolder:Client}/dist/*.js"
         ],
         "skipFiles": [
           "<node_internals>/**",
@@ -388,15 +371,13 @@
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
         "outFiles": [
-          "${workspaceFolder:Client}/**/*.js",
-          "!**/node_modules/**",
-          "!**/.vscode-test/**",
+          "${workspaceFolder:Client}/dist/*.js"
         ],
         "skipFiles": [
           "<node_internals>/**",
           "**/node_modules/**",
           "**/.vscode-test/**",
-          "**/app/out/vs/**" //Skips Extension Host internals
+          "**/app/out/vs/**" // Skips Extension Host internals
         ],
         "presentation": {
           "hidden": true
@@ -460,9 +441,7 @@
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
         "outFiles": [
-          "${workspaceFolder:Client}/**/*.js",
-          "!**/node_modules/**",
-          "!**/.vscode-test/**"
+          "${workspaceFolder:Client}/dist/*.js"
         ],
         "skipFiles": [
           "<node_internals>/**",

From 25c4f7b0ee384003279e880eda40545d293af5b1 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 10:09:36 -0700
Subject: [PATCH 12/33] Update TypeScript config for just type-checking

---
 tsconfig.json | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/tsconfig.json b/tsconfig.json
index 638345adf1..33ba7e18aa 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,18 +1,17 @@
-// NOTE: The TypeScript compiler is only used for building the tests (and
-// the sources which the tests need). The extension is built with `esbuild`.
 {
-  "extends": "@tsconfig/node20/tsconfig.json",
   "compilerOptions": {
-    "sourceMap": true,
-    "rootDir": ".",
-    "noFallthroughCasesInSwitch": true,
-    "noImplicitOverride": true,
-    "noImplicitReturns": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
-    "allowSyntheticDefaultImports": true,
-    "useUnknownInCatchVariables": true
+    "target": "ESNext",
+    "esModuleInterop": true,
+    "skipLibCheck": true,
+    "allowJs": true,
+    "checkJs": true,
+    "resolveJsonModule": true,
+    "moduleDetection": "force",
+    "verbatimModuleSyntax": true,
+    "strict": true,
+    "noEmit": true,
+    "module": "Preserve"
   },
-  "include": [ "src", "test" ],
-  "exclude": [ "node_modules/@ungap/structured-clone" ]
+  "include": ["**/*.ts", "eslint.config.mjs", ".vscode-test.mjs"],
+  "exclude": ["node_modules"]
 }

From 15c069f10be541468452548a0856bf9cea75e3b4 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 10:22:08 -0700
Subject: [PATCH 13/33] Setup vscode-test and deprecate Mocha

---
 .mocharc.json         |  12 -----
 .vscode-test.mjs      |  20 ++++++++
 test/runTests.ts      | 115 ------------------------------------------
 test/runTestsInner.ts |  71 --------------------------
 4 files changed, 20 insertions(+), 198 deletions(-)
 delete mode 100644 .mocharc.json
 create mode 100644 .vscode-test.mjs
 delete mode 100644 test/runTests.ts
 delete mode 100644 test/runTestsInner.ts

diff --git a/.mocharc.json b/.mocharc.json
deleted file mode 100644
index 38eeea86ca..0000000000
--- a/.mocharc.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "color": true,
-  "enable-source-maps": true,
-  "extensions": [
-    ".js",
-    ".jsx"
-  ],
-  "require": "source-map-support/register",
-  "timeout": 600000,
-  "slow": 2000,
-  "spec": "test/**/*.test.js"
-}
diff --git a/.vscode-test.mjs b/.vscode-test.mjs
new file mode 100644
index 0000000000..8a277d94d2
--- /dev/null
+++ b/.vscode-test.mjs
@@ -0,0 +1,20 @@
+import { defineConfig } from "@vscode/test-cli";
+import os from "os";
+import path from "path";
+
+export default defineConfig({
+    files: "test/**/*.test.ts",
+    // The default user data directory had too many characters for the IPC connection on macOS in CI.
+    launchArgs: [
+        "--profile-temp",
+        "--user-data-dir",
+        path.join(os.tmpdir(), "vscode-user-data"),
+    ],
+    workspaceFolder: "test/TestEnvironment.code-workspace",
+    mocha: {
+        ui: "bdd", // describe, it, etc.
+        require: ["esbuild-register"], // transpile TypeScript on-the-fly
+        slow: 2000, // 2 seconds for slow test
+        timeout: 60 * 1000, // 10 minutes to allow for debugging
+    },
+});
diff --git a/test/runTests.ts b/test/runTests.ts
deleted file mode 100644
index 87a27182bd..0000000000
--- a/test/runTests.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-// NOTE: This code is borrowed under permission from:
-// https://github.com/microsoft/vscode-extension-samples/tree/main/helloworld-test-sample/src/test
-
-import * as path from "path";
-import { makeConsoleReporter, downloadAndUnzipVSCode, resolveCliArgsFromVSCodeExecutablePath, runTests } from "@vscode/test-electron";
-import { existsSync } from "fs";
-import { spawnSync } from "child_process";
-
-/** This is the main test entrypoint that:
- * - Prepares the test environment by downloading a testing instance of vscode and any additional extensions
- * - Starts the test environment with runTestsInner injected into the extensionsTestsPath which will in turn start the Mocha test runner inside the environment.
- *
- * Tools like npm run test and vscode tasks should point to this script to begin the testing process. It is assumed you have built the extension prior to this step, it will error if it does not find the built extension or related test scaffolding.
- * */
-async function main(): Promise<void> {
-    // Verify that the extension is built
-    const compiledExtensionPath = path.resolve(__dirname, "../src/extension.js");
-    if (!existsSync(compiledExtensionPath)) {
-        console.error("ERROR: The extension is not built yet. Please run a build first, using either the 'Run Build Task' in VSCode or ./build.ps1 in PowerShell.");
-        process.exit(1);
-    }
-
-    try {
-        /** The folder containing the Extension Manifest package.json. Passed to `--extensionDevelopmentPath */
-        const extensionDevelopmentPath = path.resolve(__dirname, "../");
-
-        /** The path to the test script that will run inside the vscode instance. Passed to --extensionTestsPath */
-        const extensionTestsPath = path.resolve(__dirname, "./runTestsInner");
-
-        /** The starting workspace/folder to open in vscode. By default this is a testing instance pointed to the Examples folder */
-        const workspacePath = process.env.__TEST_WORKSPACE_PATH ?? "test/TestEnvironment.code-workspace";
-        const workspaceToOpen = path.resolve(extensionDevelopmentPath, workspacePath);
-
-        /** The version to test. By default we test on insiders. */
-        const vsCodeVersion = process.env.__TEST_VSCODE_VERSION ?? "insiders";
-
-        /** Install a temporary vscode. This must be done ahead of RunTests in order to install extensions ahead of time. @see https://github.com/microsoft/vscode-test/blob/addc23e100b744de598220adbbf0761da870eda9/README.md?plain=1#L71-L89 **/
-        const testVSCodePath = await downloadAndUnzipVSCode(vsCodeVersion, undefined, await makeConsoleReporter());
-        InstallExtension(testVSCodePath, "ms-dotnettools.csharp");
-
-        const launchArgs = [
-            workspaceToOpen
-        ];
-
-        /** This is fed to runTestsInner so it knows the extension context to find config files */
-        const extensionTestsEnv: Record<string, string | undefined> = {
-            __TEST_EXTENSION_DEVELOPMENT_PATH: extensionDevelopmentPath
-        };
-
-        // This info is provided by the Mocha test explorer so it can communicate with the mocha running inside the vscode test instance.
-        // Adapted from: https://github.com/hbenl/mocha-explorer-launcher-scripts/blob/bd3ace403e729de1be31f46afddccc477f82a178/vscode-test/index.ts#L33-L37
-        if (process.argv[2]) {
-            const mochaIPCInfo = JSON.parse(process.argv[2]);
-            extensionTestsEnv.MOCHA_WORKER_IPC_ROLE = mochaIPCInfo.role;
-            extensionTestsEnv.MOCHA_WORKER_IPC_HOST = mochaIPCInfo.host;
-            extensionTestsEnv.MOCHA_WORKER_IPC_PORT = String(mochaIPCInfo.port);
-        }
-
-        /** This env var should be passed by launch configurations for debugging the extension tests. If specified, we should wait for it to connect because it means something explicitly asked for debugging **/
-        const debugPort = process.env.__TEST_DEBUG_INSPECT_PORT;
-        console.log("DebugPort", debugPort);
-        if (debugPort !== undefined) {
-            console.log(`__TEST_DEBUG_INSPECT_PORT is set to ${debugPort}`);
-            launchArgs.push(`--inspect-brk-extensions=${debugPort}`);
-        } else {
-            // Make debugger optionally available. Mocha Test adapter will use this when debugging because it provides no indicator when it is debugging vs. just running
-            // FIXME: Because the mocha test explorer often doesn't attach until after the tests start and it provides no indicator of debug vs run, it may be flaky for debug until https://github.com/hbenl/vscode-mocha-test-adapter/pull/240 is merged. To workaround, start debugging sessions using "Test Extensions" launch config. We could use a timeout here but it would slow down everything including normal runs.
-            launchArgs.push("--inspect-extensions=59229");
-        }
-
-        // Download VS Code, unzip it and run the integration test
-        await runTests({
-            extensionDevelopmentPath,
-            extensionTestsPath,
-            launchArgs: launchArgs,
-            // This is necessary because the tests fail if more than once
-            // instance of Code is running.
-            version: vsCodeVersion,
-            extensionTestsEnv: extensionTestsEnv
-        });
-    } catch (err) {
-        console.error(`RunTests failed to run tests: ${err}`);
-        process.exit(1);
-    } finally {
-        // Clean this up because runTests sets it on the current process, not the child one.
-        process.env.__TEST_DEBUG_INSPECT_PORT = undefined;
-    }
-}
-
-/** Installs an extension into an existing vscode instance. Returns the output result */
-function InstallExtension(vscodeExePath: string, extensionIdOrVSIXPath: string): string {
-    // Install the csharp extension which is required for the dotnet debugger testing
-    const [cli, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExePath);
-
-    args.push("--install-extension", extensionIdOrVSIXPath);
-
-    // Install the extension. There is no API for this, we must use the executable. This is the recommended sample in the vscode-test repo.
-    console.log(`Installing extension: ${cli} ${args.join(" ")}`);
-    const installResult = spawnSync(cli, args, {
-        encoding: "utf8",
-        stdio: "inherit"
-    });
-
-    if (installResult.status !== 0) {
-        console.error(`Failed to install extension: ${installResult.stderr}`);
-        console.log("Binary Module Tests will fail if not skipped!");
-    }
-
-    return installResult.stdout;
-}
-
-void main();
diff --git a/test/runTestsInner.ts b/test/runTestsInner.ts
deleted file mode 100644
index ea3d46f0ef..0000000000
--- a/test/runTestsInner.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) Microsoft Corporation.
-// Licensed under the MIT License.
-
-import { globSync } from "glob";
-import path from "path";
-import Mocha from "mocha";
-/** This is the entrypoint into the standalone vscode instance that should be passed to the --extensionsTestPath parameter of the test VSCode instance. */
-export function run(testsRoot: string): Promise<void> {
-    return runTestsInner(testsRoot);
-}
-
-/** Runs inside of the test vscode instance, and should set up and activate the test runner */
-function runTestsInner(testsRoot: string): Promise<void> {
-    // Allow tools like Mocha Test Explorer to inject their own Mocha worker
-    if (process.env.MOCHA_WORKER_PATH) {
-        return require(process.env.MOCHA_WORKER_PATH);
-    }
-
-    console.log(`\n\n=====\nTest Runner START\n${testsRoot}\n=====`);
-
-    /** Passed from RunTests */
-    const rootDir = process.env.__TEST_EXTENSION_DEVELOPMENT_PATH;
-    if (!rootDir) {
-        throw new Error("Missing environment variable __TEST_EXTENSIONDEVELOPMENTPATH, this is probably a bug in runTests.ts");
-    }
-
-    interface MochaOptionsWithFiles extends Mocha.MochaOptions {
-        spec?: string;
-    }
-
-    // eslint-disable-next-line @typescript-eslint/no-var-requires
-    const config: MochaOptionsWithFiles = require(path.resolve(rootDir, ".mocharc.json"));
-    if (config.spec === undefined) {
-        throw new Error("spec must be specified in the config options when running vscode launch tests");
-    }
-
-    const mocha = new Mocha(config);
-
-    // Test if files is empty
-    const files = globSync(config.spec, { cwd: rootDir });
-    if (files.length === 0) {
-        console.log("No tests found for glob pattern: test.ts in directory: " + rootDir);
-        throw new Error("No tests found for glob pattern: test.ts in directory: " + rootDir);
-    }
-
-    // Add files to the test suite
-    for (const file of files) {
-        const testFile = path.resolve(rootDir, file);
-        mocha.addFile(testFile);
-    }
-
-    mocha.reporter("mocha-multi-reporters", {
-        reporterEnabled: "spec, xunit",
-        xunitReporterOptions: {
-            output: path.resolve(rootDir, "test-results.xml"),
-        }
-    });
-
-    return new Promise((resolve) => {
-        mocha.run(failures => {
-            console.log(`Mocha Run Finished with ${failures} failures.`);
-            if (failures > 0) {
-                throw new Error(`${failures} tests failed.`);
-            } else {
-                console.log("\n\n=====\nTest Runner STOP\n=====");
-                resolve();
-                return;
-            }
-        });
-    });
-}

From 499221972311182cf203b8dc2244dc380c00a965 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 10:46:25 -0700
Subject: [PATCH 14/33] Fix type imports and ESLint directives

---
 src/extension.ts                       |  5 +--
 src/features/CodeActions.ts            |  2 +-
 src/features/Console.ts                |  7 +++-
 src/features/DebugSession.ts           | 54 +++++++++++++-------------
 src/features/ExpandAlias.ts            |  2 -
 src/features/ExtensionCommands.ts      |  3 +-
 src/features/ExternalApi.ts            |  2 +-
 src/features/HelpCompletion.ts         |  4 +-
 src/features/PesterTests.ts            |  6 +--
 src/features/ShowHelp.ts               |  1 -
 src/features/UpdatePowerShell.ts       |  4 +-
 src/logging.ts                         |  6 +--
 src/platform.ts                        |  9 ++---
 src/process.ts                         |  4 +-
 src/session.ts                         | 45 ++++++++++++++++-----
 src/settings.ts                        |  2 +-
 test/core/paths.test.ts                |  2 +-
 test/features/DebugSession.test.ts     | 34 +++++++++++++---
 test/features/ExternalApi.test.ts      |  2 +-
 test/features/UpdatePowerShell.test.ts |  2 +-
 test/utils.ts                          | 10 ++---
 21 files changed, 120 insertions(+), 86 deletions(-)

diff --git a/src/extension.ts b/src/extension.ts
index 80a13657a2..c311d06e7c 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -10,7 +10,7 @@ import { DebugSessionFeature } from "./features/DebugSession";
 import { ExamplesFeature } from "./features/Examples";
 import { ExpandAliasFeature } from "./features/ExpandAlias";
 import { ExtensionCommandsFeature } from "./features/ExtensionCommands";
-import { ExternalApiFeature, IPowerShellExtensionClient } from "./features/ExternalApi";
+import { ExternalApiFeature, type IPowerShellExtensionClient } from "./features/ExternalApi";
 import { GenerateBugReportFeature } from "./features/GenerateBugReport";
 import { GetCommandsFeature } from "./features/GetCommands";
 import { HelpCompletionFeature } from "./features/HelpCompletion";
@@ -82,7 +82,6 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
                     // e.g. /** | */
                     // eslint-disable-next-line no-useless-escape
                     beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
-                    // eslint-disable-next-line no-useless-escape
                     afterText: /^\s*\*\/$/,
                     action: { indentAction: vscode.IndentAction.IndentOutdent, appendText: " * " },
                 },
@@ -201,7 +200,7 @@ function registerWaitForPsesActivationCommand(context: vscode.ExtensionContext):
             const pidFile = vscode.Uri.joinPath(context.globalStorageUri, "sessions", pidFileName);
             const fs = vscode.workspace.fs;
             // Wait for the file to be created
-            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-constant-condition
+            // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
             while (true) {
                 try {
                     const pidContent = await fs.readFile(pidFile);
diff --git a/src/features/CodeActions.ts b/src/features/CodeActions.ts
index 23aac14986..f9b022ed8c 100644
--- a/src/features/CodeActions.ts
+++ b/src/features/CodeActions.ts
@@ -2,7 +2,7 @@
 // Licensed under the MIT License.
 
 import vscode = require("vscode");
-import { ILogger } from "../logging";
+import type { ILogger } from "../logging";
 
 export class CodeActionsFeature implements vscode.Disposable {
     private command: vscode.Disposable;
diff --git a/src/features/Console.ts b/src/features/Console.ts
index 01cb5c6915..4063e2bbe5 100644
--- a/src/features/Console.ts
+++ b/src/features/Console.ts
@@ -4,8 +4,11 @@
 import vscode = require("vscode");
 import { NotificationType, RequestType } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
-import { ICheckboxQuickPickItem, showCheckboxQuickPick } from "../controls/checkboxQuickPick";
-import { ILogger } from "../logging";
+import {
+  type ICheckboxQuickPickItem,
+  showCheckboxQuickPick,
+} from "../controls/checkboxQuickPick";
+import type { ILogger } from "../logging";
 import { getSettings } from "../settings";
 import { LanguageClientConsumer } from "../languageClientConsumer";
 
diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts
index 4af8c83b89..e5dbf4984d 100644
--- a/src/features/DebugSession.ts
+++ b/src/features/DebugSession.ts
@@ -2,39 +2,39 @@
 // Licensed under the MIT License.
 
 import {
-    debug,
-    CancellationToken,
-    CancellationTokenSource,
-    DebugAdapterDescriptor,
-    DebugAdapterDescriptorFactory,
-    DebugAdapterExecutable,
-    DebugAdapterNamedPipeServer,
-    DebugConfiguration,
-    DebugConfigurationProvider,
-    DebugSession,
-    ExtensionContext,
-    WorkspaceFolder,
-    Disposable,
-    window,
-    extensions,
-    workspace,
-    commands,
-    InputBoxOptions,
-    QuickPickItem,
-    QuickPickOptions,
-    DebugConfigurationProviderTriggerKind,
-    DebugAdapterTrackerFactory,
-    DebugAdapterTracker,
-    LogOutputChannel
+  debug,
+  type CancellationToken,
+  CancellationTokenSource,
+  type DebugAdapterDescriptor,
+  type DebugAdapterDescriptorFactory,
+  DebugAdapterExecutable,
+  DebugAdapterNamedPipeServer,
+  type DebugConfiguration,
+  type DebugConfigurationProvider,
+  type DebugSession,
+  type ExtensionContext,
+  type WorkspaceFolder,
+  Disposable,
+  window,
+  extensions,
+  workspace,
+  commands,
+  type InputBoxOptions,
+  type QuickPickItem,
+  type QuickPickOptions,
+  DebugConfigurationProviderTriggerKind,
+  type DebugAdapterTrackerFactory,
+  type DebugAdapterTracker,
+  type LogOutputChannel,
 } from "vscode";
 import type { DebugProtocol } from "@vscode/debugprotocol";
 import { NotificationType, RequestType } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
 import { LanguageClientConsumer } from "../languageClientConsumer";
-import { ILogger } from "../logging";
+import type { ILogger } from "../logging";
 import { OperatingSystem, getPlatformDetails } from "../platform";
 import { PowerShellProcess } from "../process";
-import { IEditorServicesSessionDetails, SessionManager } from "../session";
+import { type IEditorServicesSessionDetails, SessionManager } from "../session";
 import { getSettings } from "../settings";
 import path from "path";
 import { checkIfFileExists } from "../utils";
@@ -703,7 +703,6 @@ interface IProcessItem extends QuickPickItem {
     processId: number; // payload for the QuickPick UI
 }
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface IGetPSHostProcessesArguments {
 }
 
@@ -722,7 +721,6 @@ interface IRunspaceItem extends QuickPickItem {
     id: number; // payload for the QuickPick UI
 }
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface IGetRunspaceRequestArguments {
 }
 
diff --git a/src/features/ExpandAlias.ts b/src/features/ExpandAlias.ts
index 94ad8f95ab..652be565c3 100644
--- a/src/features/ExpandAlias.ts
+++ b/src/features/ExpandAlias.ts
@@ -6,11 +6,9 @@ import { RequestType } from "vscode-languageclient";
 import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { LanguageClient } from "vscode-languageclient/node";
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface IExpandAliasRequestArguments {
 }
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface IExpandAliasRequestResponse {
     text: string
 }
diff --git a/src/features/ExtensionCommands.ts b/src/features/ExtensionCommands.ts
index c0f4804c78..3f445199d4 100644
--- a/src/features/ExtensionCommands.ts
+++ b/src/features/ExtensionCommands.ts
@@ -8,7 +8,7 @@ import {
     Position, Range, RequestType
 } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
-import { ILogger } from "../logging";
+import type { ILogger } from "../logging";
 import { getSettings, validateCwdSetting } from "../settings";
 import { LanguageClientConsumer } from "../languageClientConsumer";
 import { DebugConfig, DebugConfigurations } from "./DebugSession";
@@ -64,7 +64,6 @@ export const GetEditorContextRequestType =
     new RequestType<IGetEditorContextRequestArguments, IEditorContext, void>(
         "editor/getEditorContext");
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 export interface IGetEditorContextRequestArguments {
 }
 
diff --git a/src/features/ExternalApi.ts b/src/features/ExternalApi.ts
index 29e3427f88..974436da4e 100644
--- a/src/features/ExternalApi.ts
+++ b/src/features/ExternalApi.ts
@@ -3,7 +3,7 @@
 
 import * as vscode from "vscode";
 import { v4 as uuidv4 } from "uuid";
-import { ILogger } from "../logging";
+import type { ILogger } from "../logging";
 import { SessionManager } from "../session";
 
 export interface IExternalPowerShellDetails {
diff --git a/src/features/HelpCompletion.ts b/src/features/HelpCompletion.ts
index a5dc47459d..9711b93f35 100644
--- a/src/features/HelpCompletion.ts
+++ b/src/features/HelpCompletion.ts
@@ -3,18 +3,16 @@
 
 import {
     Disposable, EndOfLine, Range, SnippetString,
-    TextDocument, TextDocumentChangeEvent, window, workspace
+    type TextDocument, type TextDocumentChangeEvent, window, workspace
 } from "vscode";
 import { RequestType } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
 import { Settings, CommentType, getSettings } from "../settings";
 import { LanguageClientConsumer } from "../languageClientConsumer";
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface ICommentHelpRequestArguments {
 }
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface ICommentHelpRequestResponse {
     content: string[]
 }
diff --git a/src/features/PesterTests.ts b/src/features/PesterTests.ts
index f5bd839c94..a2f4c10148 100644
--- a/src/features/PesterTests.ts
+++ b/src/features/PesterTests.ts
@@ -3,7 +3,7 @@
 
 import * as path from "path";
 import vscode = require("vscode");
-import { ILogger } from "../logging";
+import type { ILogger } from "../logging";
 import { SessionManager } from "../session";
 import { getSettings, getChosenWorkspace } from "../settings";
 import utils = require("../utils");
@@ -53,9 +53,7 @@ export class PesterTestsFeature implements vscode.Disposable {
         launchType: LaunchType,
         fileUri?: vscode.Uri): Promise<boolean> {
 
-        if (fileUri === undefined) {
-            fileUri = vscode.window.activeTextEditor?.document.uri;
-        }
+        fileUri ??= vscode.window.activeTextEditor?.document.uri;
 
         if (fileUri === undefined) {
             return false;
diff --git a/src/features/ShowHelp.ts b/src/features/ShowHelp.ts
index 6e73050924..59616e5274 100644
--- a/src/features/ShowHelp.ts
+++ b/src/features/ShowHelp.ts
@@ -6,7 +6,6 @@ import { NotificationType } from "vscode-languageclient";
 import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { LanguageClient } from "vscode-languageclient/node";
 
-// eslint-disable-next-line @typescript-eslint/no-empty-interface
 interface IShowHelpNotificationArguments {
 }
 
diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts
index 6805272cc8..adc5194912 100644
--- a/src/features/UpdatePowerShell.ts
+++ b/src/features/UpdatePowerShell.ts
@@ -5,8 +5,8 @@ import fetch from "node-fetch";
 import { SemVer } from "semver";
 import vscode = require("vscode");
 
-import { ILogger } from "../logging";
-import { IPowerShellVersionDetails } from "../session";
+import type { ILogger } from "../logging";
+import type { IPowerShellVersionDetails } from "../session";
 import { changeSetting, Settings } from "../settings";
 
 interface IUpdateMessageItem extends vscode.MessageItem {
diff --git a/src/logging.ts b/src/logging.ts
index 7ce8d09e16..37fc74072f 100644
--- a/src/logging.ts
+++ b/src/logging.ts
@@ -1,7 +1,7 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-import { LogOutputChannel, LogLevel, window, Event } from "vscode";
+import { type LogOutputChannel, LogLevel, window, type Event } from "vscode";
 
 /** Interface for logging operations. New features should use this interface for the "type" of logger.
  *  This will allow for easy mocking of the logger during unit tests.
@@ -140,9 +140,7 @@ export class Logger implements ILogger {
 export class LanguageClientOutputChannelAdapter implements LogOutputChannel {
     private _channel: LogOutputChannel | undefined;
     private get channel(): LogOutputChannel {
-        if (!this._channel) {
-            this._channel = window.createOutputChannel(this.channelName, {log: true});
-        }
+        this._channel ??= window.createOutputChannel(this.channelName, {log: true});
         return this._channel;
     }
 
diff --git a/src/platform.ts b/src/platform.ts
index 74f2bb94df..d827be6cc4 100644
--- a/src/platform.ts
+++ b/src/platform.ts
@@ -6,12 +6,11 @@ import * as path from "path";
 import * as process from "process";
 import vscode = require("vscode");
 import { integer } from "vscode-languageserver-protocol";
-import { ILogger } from "./logging";
-import { changeSetting, getSettings, PowerShellAdditionalExePathSettings } from "./settings";
+import type { ILogger } from "./logging";
+import { changeSetting, getSettings, type PowerShellAdditionalExePathSettings } from "./settings";
 import untildify from "untildify";
 
 // This uses require so we can rewire it in unit tests!
-// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-var-requires
 const utils = require("./utils");
 
 const WindowsPowerShell64BitLabel = "Windows PowerShell (x64)";
@@ -631,9 +630,7 @@ class PossiblePowerShellExe implements IPossiblePowerShellExe {
         public readonly suppressWarning = false) { }
 
     public async exists(): Promise<boolean> {
-        if (this.knownToExist === undefined) {
-            this.knownToExist = await utils.checkIfFileExists(this.exePath);
-        }
+        this.knownToExist ??= await utils.checkIfFileExists(this.exePath);
         return this.knownToExist ?? false;
     }
 }
diff --git a/src/process.ts b/src/process.ts
index f99b0cfa1b..38bba0bc42 100644
--- a/src/process.ts
+++ b/src/process.ts
@@ -4,10 +4,10 @@
 import cp = require("child_process");
 import path = require("path");
 import vscode = require("vscode");
-import { ILogger } from "./logging";
+import type { ILogger } from "./logging";
 import { Settings, validateCwdSetting } from "./settings";
 import utils = require("./utils");
-import { IEditorServicesSessionDetails } from "./session";
+import type { IEditorServicesSessionDetails } from "./session";
 import { promisify } from "util";
 
 export class PowerShellProcess {
diff --git a/src/session.ts b/src/session.ts
index ed96dae80f..1928d26ded 100644
--- a/src/session.ts
+++ b/src/session.ts
@@ -4,25 +4,49 @@
 import net = require("net");
 import path = require("path");
 import vscode = require("vscode");
-import TelemetryReporter, { TelemetryEventProperties, TelemetryEventMeasurements } from "@vscode/extension-telemetry";
+import TelemetryReporter, {
+  type TelemetryEventProperties,
+  type TelemetryEventMeasurements,
+} from "@vscode/extension-telemetry";
 import { Message } from "vscode-jsonrpc";
-import { ILogger, LanguageClientOutputChannelAdapter, LspTraceParser, PsesParser } from "./logging";
+import {
+  type ILogger,
+  LanguageClientOutputChannelAdapter,
+  LspTraceParser,
+  PsesParser,
+} from "./logging";
 import { PowerShellProcess } from "./process";
-import { Settings, changeSetting, getSettings, getEffectiveConfigurationTarget, validateCwdSetting } from "./settings";
+import {
+  Settings,
+  changeSetting,
+  getSettings,
+  getEffectiveConfigurationTarget,
+  validateCwdSetting,
+} from "./settings";
 import utils = require("./utils");
 
 import {
-    CloseAction, CloseHandlerResult, DocumentSelector, ErrorAction, ErrorHandlerResult,
-    LanguageClientOptions, Middleware, NotificationType,
-    RequestType0, ResolveCodeLensSignature,
-    RevealOutputChannelOn,
+  CloseAction,
+  type CloseHandlerResult,
+  DocumentSelector,
+  ErrorAction,
+  type ErrorHandlerResult,
+  type LanguageClientOptions,
+  type Middleware,
+  NotificationType,
+  RequestType0,
+  type ResolveCodeLensSignature,
+  RevealOutputChannelOn,
 } from "vscode-languageclient";
-import { LanguageClient, StreamInfo } from "vscode-languageclient/node";
+import { LanguageClient, type StreamInfo } from "vscode-languageclient/node";
 
 import { UpdatePowerShell } from "./features/UpdatePowerShell";
 import {
-    getPlatformDetails, IPlatformDetails, IPowerShellExeDetails,
-    OperatingSystem, PowerShellExeFinder
+  getPlatformDetails,
+  type IPlatformDetails,
+  type IPowerShellExeDetails,
+  OperatingSystem,
+  PowerShellExeFinder,
 } from "./platform";
 import { LanguageClientConsumer } from "./languageClientConsumer";
 import { SemVer, satisfies } from "semver";
@@ -1067,6 +1091,7 @@ class SessionMenuItem implements vscode.QuickPickItem {
 
     constructor(
         public readonly label: string,
+
         // eslint-disable-next-line @typescript-eslint/no-empty-function
         public readonly callback = async (): Promise<void> => { }) {
     }
diff --git a/src/settings.ts b/src/settings.ts
index f29079846a..943b4c27ab 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -4,7 +4,7 @@
 import vscode = require("vscode");
 import utils = require("./utils");
 import os = require("os");
-import { ILogger } from "./logging";
+import type { ILogger } from "./logging";
 import untildify from "untildify";
 import path = require("path");
 
diff --git a/test/core/paths.test.ts b/test/core/paths.test.ts
index 703b22a53f..e3d6de49a7 100644
--- a/test/core/paths.test.ts
+++ b/test/core/paths.test.ts
@@ -3,7 +3,7 @@
 
 import assert from "assert";
 import * as vscode from "vscode";
-import { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
+import type { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
 import utils = require("../utils");
 import { checkIfDirectoryExists, checkIfFileExists, ShellIntegrationScript } from "../../src/utils";
 
diff --git a/test/features/DebugSession.test.ts b/test/features/DebugSession.test.ts
index e27ef85274..42895739c7 100644
--- a/test/features/DebugSession.test.ts
+++ b/test/features/DebugSession.test.ts
@@ -4,13 +4,37 @@
 import structuredClone from "@ungap/structured-clone"; //Polyfill for structuredClone which will be present in Node 17.
 import * as assert from "assert";
 import Sinon from "sinon";
-import { DebugAdapterNamedPipeServer, DebugConfiguration, DebugSession, Extension, ExtensionContext, Range, SourceBreakpoint, TextDocument, TextEditor, Uri, commands, debug, extensions, window, workspace } from "vscode";
+import {
+  DebugAdapterNamedPipeServer,
+  type DebugConfiguration,
+  type DebugSession,
+  type Extension,
+  type ExtensionContext,
+  Range,
+  SourceBreakpoint,
+  type TextDocument,
+  type TextEditor,
+  Uri,
+  commands,
+  debug,
+  extensions,
+  window,
+  workspace,
+} from "vscode";
 import { Disposable } from "vscode-languageserver-protocol";
-import { DebugConfig, DebugSessionFeature, DebugConfigurations } from "../../src/features/DebugSession";
-import { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
+import {
+  DebugConfig,
+  DebugSessionFeature,
+  DebugConfigurations,
+} from "../../src/features/DebugSession";
+import type { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
 import * as platform from "../../src/platform";
-import { IPlatformDetails } from "../../src/platform";
-import { IEditorServicesSessionDetails, IPowerShellVersionDetails, SessionManager } from "../../src/session";
+import type { IPlatformDetails } from "../../src/platform";
+import {
+  type IEditorServicesSessionDetails,
+  type IPowerShellVersionDetails,
+  SessionManager,
+} from "../../src/session";
 import * as utils from "../../src/utils";
 import { BuildBinaryModuleMock, WaitEvent, ensureEditorServicesIsConnected, stubInterface, testLogger } from "../utils";
 
diff --git a/test/features/ExternalApi.test.ts b/test/features/ExternalApi.test.ts
index 84fe48af96..6d82b17cba 100644
--- a/test/features/ExternalApi.test.ts
+++ b/test/features/ExternalApi.test.ts
@@ -3,7 +3,7 @@
 
 import * as assert from "assert";
 import utils = require("../utils");
-import { IExternalPowerShellDetails, IPowerShellExtensionClient } from "../../src/features/ExternalApi";
+import type { IExternalPowerShellDetails, IPowerShellExtensionClient } from "../../src/features/ExternalApi";
 
 describe("ExternalApi feature", function () {
     describe("External extension registration", function () {
diff --git a/test/features/UpdatePowerShell.test.ts b/test/features/UpdatePowerShell.test.ts
index 6023e56bbd..c4eff1aa11 100644
--- a/test/features/UpdatePowerShell.test.ts
+++ b/test/features/UpdatePowerShell.test.ts
@@ -4,7 +4,7 @@
 import assert from "assert";
 import { UpdatePowerShell } from "../../src/features/UpdatePowerShell";
 import { Settings } from "../../src/settings";
-import { IPowerShellVersionDetails } from "../../src/session";
+import type { IPowerShellVersionDetails } from "../../src/session";
 import { testLogger } from "../utils";
 
 describe("UpdatePowerShell feature", function () {
diff --git a/test/utils.ts b/test/utils.ts
index e62de2d87e..ff270fe929 100644
--- a/test/utils.ts
+++ b/test/utils.ts
@@ -3,16 +3,14 @@
 
 import * as path from "path";
 import * as vscode from "vscode";
-import { ILogger } from "../src/logging";
-import { IPowerShellExtensionClient } from "../src/features/ExternalApi";
+import type { ILogger } from "../src/logging";
+import type { IPowerShellExtensionClient } from "../src/features/ExternalApi";
 import { execSync } from "child_process";
 
 // This lets us test the rest of our path assumptions against the baseline of
 // this test file existing at `<root>/test/utils.js`.
-export const rootPath = path.resolve(__dirname, "../");
-// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-var-requires
-const packageJSON: any = require(path.resolve(rootPath, "package.json"));
-export const extensionId = `${packageJSON.publisher}.${packageJSON.name}`;
+import { publisher, name } from "../package.json"
+export const extensionId = `${publisher}.${name}`;
 
 export class TestLogger implements ILogger {
     logDirectoryPath: vscode.Uri = vscode.Uri.file("");

From 669ac8b5d628656cc03fa7e67a71a3dbc3f9c688 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 10:59:57 -0700
Subject: [PATCH 15/33] Remove unnecessary stub in tests

---
 src/platform.ts                    | 10 ++--
 test/core/platform.test.ts         | 92 ++++++------------------------
 test/features/DebugSession.test.ts |  1 +
 3 files changed, 22 insertions(+), 81 deletions(-)

diff --git a/src/platform.ts b/src/platform.ts
index d827be6cc4..b4b032e204 100644
--- a/src/platform.ts
+++ b/src/platform.ts
@@ -8,11 +8,9 @@ import vscode = require("vscode");
 import { integer } from "vscode-languageserver-protocol";
 import type { ILogger } from "./logging";
 import { changeSetting, getSettings, type PowerShellAdditionalExePathSettings } from "./settings";
+import * as utils from "./utils";
 import untildify from "untildify";
 
-// This uses require so we can rewire it in unit tests!
-const utils = require("./utils");
-
 const WindowsPowerShell64BitLabel = "Windows PowerShell (x64)";
 const WindowsPowerShell32BitLabel = "Windows PowerShell (x86)";
 
@@ -91,7 +89,7 @@ export class PowerShellExeFinder {
         private platformDetails: IPlatformDetails,
         // Additional configured PowerShells
         private additionalPowerShellExes: PowerShellAdditionalExePathSettings,
-        private logger: ILogger) { }
+        private logger?: ILogger) { }
 
     /**
      * Returns the first available PowerShell executable found in the search order.
@@ -156,7 +154,7 @@ export class PowerShellExeFinder {
                 yield additionalPwsh;
             } else if (!additionalPwsh.suppressWarning) {
                 const message = `Additional PowerShell '${additionalPwsh.displayName}' not found at '${additionalPwsh.exePath}'!`;
-                this.logger.writeWarning(message);
+                this.logger?.writeWarning(message);
 
                 if (!getSettings().suppressAdditionalExeNotFoundWarning) {
                     const selection = await vscode.window.showWarningMessage(message, "Don't Show Again");
@@ -243,7 +241,7 @@ export class PowerShellExeFinder {
      * Iterates through the configured additional PowerShell executable locations,
      * without checking for their existence.
      */
-    private async *enumerateAdditionalPowerShellInstallations(): AsyncIterable<IPossiblePowerShellExe> {
+    public async *enumerateAdditionalPowerShellInstallations(): AsyncIterable<IPossiblePowerShellExe> {
         for (const versionName in this.additionalPowerShellExes) {
             if (Object.prototype.hasOwnProperty.call(this.additionalPowerShellExes, versionName)) {
                 let exePath: string | undefined = utils.stripQuotePair(this.additionalPowerShellExes[versionName]);
diff --git a/test/core/platform.test.ts b/test/core/platform.test.ts
index f5c22941cc..27a43dcd7a 100644
--- a/test/core/platform.test.ts
+++ b/test/core/platform.test.ts
@@ -6,50 +6,8 @@ import mockFS = require("mock-fs");
 import FileSystem = require("mock-fs/lib/filesystem");
 import * as os from "os";
 import * as path from "path";
-import rewire = require("rewire");
 import * as sinon from "sinon";
 import * as platform from "../../src/platform";
-import * as fs from "fs"; // NOTE: Necessary for mock-fs.
-import * as vscode from "vscode";
-import { stripQuotePair } from "../../src/utils";
-
-// We have to rewire the platform module so that mock-fs can be used, as it
-// overrides the fs module but not the vscode.workspace.fs module.
-const platformMock = rewire("../../src/platform");
-
-// eslint-disable-next-line @typescript-eslint/require-await
-async function fakeCheckIfFileExists(targetPath: string | vscode.Uri): Promise<boolean> {
-    try {
-        const stat = fs.lstatSync(targetPath instanceof vscode.Uri ? targetPath.fsPath : targetPath);
-        return stat.isFile();
-    } catch {
-        return false;
-    }
-}
-
-// eslint-disable-next-line @typescript-eslint/require-await
-async function fakeCheckIfDirectoryExists(targetPath: string | vscode.Uri): Promise<boolean> {
-    try {
-        const stat = fs.lstatSync(targetPath instanceof vscode.Uri ? targetPath.fsPath : targetPath);
-        return stat.isDirectory();
-    } catch {
-        return false;
-    }
-}
-
-// eslint-disable-next-line @typescript-eslint/require-await
-async function fakeReadDirectory(targetPath: string | vscode.Uri): Promise<string[]> {
-    return fs.readdirSync(targetPath instanceof vscode.Uri ? targetPath.fsPath : targetPath);
-}
-
-const utilsMock = {
-    checkIfFileExists: fakeCheckIfFileExists,
-    checkIfDirectoryExists: fakeCheckIfDirectoryExists,
-    readDirectory: fakeReadDirectory,
-    stripQuotePair: stripQuotePair
-};
-
-platformMock.__set__("utils", utilsMock);
 
 /**
  * Describes a platform on which the PowerShell extension should work,
@@ -847,8 +805,12 @@ function setupTestEnvironment(testPlatform: ITestPlatform): void {
 }
 
 describe("Platform module", function () {
+    afterEach(function () {
+      mockFS.restore();
+    });
+
     it("Gets the correct platform details", function () {
-        const platformDetails: platform.IPlatformDetails = platformMock.getPlatformDetails();
+        const platformDetails: platform.IPlatformDetails = platform.getPlatformDetails();
         switch (process.platform) {
         case "darwin":
             assert.strictEqual(
@@ -901,23 +863,18 @@ describe("Platform module", function () {
     });
 
     describe("Default PowerShell installation", function () {
-        afterEach(function () {
-            sinon.restore();
-            mockFS.restore();
-        });
-
         for (const testPlatform of successTestCases) {
             it(`Finds it on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platformMock.PowerShellExeFinder(testPlatform.platformDetails);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
 
                 const defaultPowerShell = await powerShellExeFinder.getFirstAvailablePowerShellInstallation();
                 const expectedPowerShell = testPlatform.expectedPowerShellSequence[0];
 
-                assert.strictEqual(defaultPowerShell.exePath, expectedPowerShell.exePath);
-                assert.strictEqual(defaultPowerShell.displayName, expectedPowerShell.displayName);
-                assert.strictEqual(defaultPowerShell.supportsProperArguments, expectedPowerShell.supportsProperArguments);
+                assert.strictEqual(defaultPowerShell!.exePath, expectedPowerShell.exePath);
+                assert.strictEqual(defaultPowerShell!.displayName, expectedPowerShell.displayName);
+                assert.strictEqual(defaultPowerShell!.supportsProperArguments, expectedPowerShell.supportsProperArguments);
             });
         }
 
@@ -925,7 +882,7 @@ describe("Platform module", function () {
             it(`Fails gracefully on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platformMock.PowerShellExeFinder(testPlatform.platformDetails);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
 
                 const defaultPowerShell = await powerShellExeFinder.getFirstAvailablePowerShellInstallation();
                 assert.strictEqual(defaultPowerShell, undefined);
@@ -934,16 +891,11 @@ describe("Platform module", function () {
     });
 
     describe("Expected PowerShell installation list", function () {
-        afterEach(function () {
-            sinon.restore();
-            mockFS.restore();
-        });
-
         for (const testPlatform of successTestCases) {
             it(`Finds them on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platformMock.PowerShellExeFinder(testPlatform.platformDetails);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
 
                 const foundPowerShells = await powerShellExeFinder.getAllAvailablePowerShellInstallations();
 
@@ -951,9 +903,9 @@ describe("Platform module", function () {
                     const foundPowerShell = foundPowerShells[i];
                     const expectedPowerShell = testPlatform.expectedPowerShellSequence[i];
 
-                    assert.strictEqual(foundPowerShell?.exePath, expectedPowerShell.exePath);
-                    assert.strictEqual(foundPowerShell?.displayName, expectedPowerShell.displayName);
-                    assert.strictEqual(foundPowerShell?.supportsProperArguments, expectedPowerShell.supportsProperArguments);
+                    assert.strictEqual(foundPowerShell.exePath, expectedPowerShell.exePath);
+                    assert.strictEqual(foundPowerShell.displayName, expectedPowerShell.displayName);
+                    assert.strictEqual(foundPowerShell.supportsProperArguments, expectedPowerShell.supportsProperArguments);
                 }
 
                 assert.strictEqual(
@@ -967,7 +919,7 @@ describe("Platform module", function () {
             it(`Fails gracefully on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platformMock.PowerShellExeFinder(testPlatform.platformDetails);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
 
                 const foundPowerShells = await powerShellExeFinder.getAllAvailablePowerShellInstallations();
                 assert.strictEqual(foundPowerShells.length, 0);
@@ -976,11 +928,6 @@ describe("Platform module", function () {
     });
 
     describe("Windows PowerShell path fix", function () {
-        afterEach(function () {
-            sinon.restore();
-            mockFS.restore();
-        });
-
         for (const testPlatform of successTestCases
             .filter((tp) => tp.platformDetails.operatingSystem === platform.OperatingSystem.Windows)) {
 
@@ -1007,7 +954,7 @@ describe("Platform module", function () {
                     altWinPSPath = null;
                 }
 
-                const powerShellExeFinder = new platformMock.PowerShellExeFinder(testPlatform.platformDetails);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
 
                 assert.strictEqual(powerShellExeFinder.fixWindowsPowerShellPath(winPSPath), winPSPath);
 
@@ -1019,16 +966,11 @@ describe("Platform module", function () {
     });
 
     describe("PowerShell executables from 'powerShellAdditionalExePaths' are found", function () {
-        afterEach(function () {
-            sinon.restore();
-            mockFS.restore();
-        });
-
         for (const testPlatform of successAdditionalTestCases) {
             it(`Guesses for ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platformMock.PowerShellExeFinder(testPlatform.platformDetails, additionalPowerShellExes);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, additionalPowerShellExes);
 
                 let i = 0;
                 for await (const additionalPwsh of powerShellExeFinder.enumerateAdditionalPowerShellInstallations()) {
diff --git a/test/features/DebugSession.test.ts b/test/features/DebugSession.test.ts
index 42895739c7..9ddcd5ac87 100644
--- a/test/features/DebugSession.test.ts
+++ b/test/features/DebugSession.test.ts
@@ -191,6 +191,7 @@ describe("DebugSessionFeature", () => {
 
             assert.equal(actual, undefined);
             assert.match(logger.writeAndShowError.firstCall.args[0], /debugging this file type/);
+            Sinon.restore();
         });
 
         it("Prevents debugging untitled files in a temp console", async () => {

From 2d322d337019556cbc7d2820195524729983c95d Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 13:26:09 -0700
Subject: [PATCH 16/33] Skip two tests that need stubs fixed

---
 test/features/DebugSession.test.ts | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/test/features/DebugSession.test.ts b/test/features/DebugSession.test.ts
index 9ddcd5ac87..dfc9a5806e 100644
--- a/test/features/DebugSession.test.ts
+++ b/test/features/DebugSession.test.ts
@@ -178,7 +178,8 @@ describe("DebugSessionFeature", () => {
             assert.match(logger.writeAndShowError.firstCall.args[0], /debugging this language mode/);
         });
 
-        it("LaunchScript: Rejects scripts without a powershell script extension", async () => {
+        // Skipped until we can fix the stub
+        it.skip("LaunchScript: Rejects scripts without a powershell script extension", async () => {
             const currentDocConfig: DebugConfiguration = defaultDebugConfig;
             currentDocConfig.current_document = true;
             currentDocConfig.script = "file:///notPowerShell.txt";
@@ -223,7 +224,8 @@ describe("DebugSessionFeature", () => {
             assert.ok(sessionManager.getPowerShellVersionDetails.calledOnce);
         });
 
-        it("Attach: Prevents attach on non-windows if not PS7.0 or higher", async() => {
+        // Skipped until we can fix the stub
+        it.skip("Attach: Prevents attach on non-windows if not PS7.0 or higher", async() => {
             const attachConfig: DebugConfiguration = defaultDebugConfig;
             attachConfig.request = "attach";
             const logger = Sinon.stub(testLogger);

From 722af375b0aa6fc6872bea3a6e9260349c8eed3d Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 13:47:34 -0700
Subject: [PATCH 17/33] Remove broken tests around daily build

---
 test/core/platform.test.ts | 82 +++++++++++++-------------------------
 1 file changed, 27 insertions(+), 55 deletions(-)

diff --git a/test/core/platform.test.ts b/test/core/platform.test.ts
index 27a43dcd7a..30147054bc 100644
--- a/test/core/platform.test.ts
+++ b/test/core/platform.test.ts
@@ -40,8 +40,6 @@ if (process.platform === "win32") {
     const msixAppDir = path.join(process.env.LOCALAPPDATA!, "Microsoft", "WindowsApps");
     const pwshMsixPath = path.join(msixAppDir, "Microsoft.PowerShell_8wekyb3d8bbwe", "pwsh.exe");
     const pwshPreviewMsixPath = path.join(msixAppDir, "Microsoft.PowerShellPreview_8wekyb3d8bbwe", "pwsh.exe");
-    const pwshDailyDir = path.join(process.env.LOCALAPPDATA!, "Microsoft", "powershell-daily");
-    const pwshDailyPath = path.join(pwshDailyDir, "pwsh.exe");
 
     successTestCases = [
         {
@@ -96,11 +94,6 @@ if (process.platform === "win32") {
                     exePath: "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
                     supportsProperArguments: true
-                },
-                {
-                    exePath: pwshDailyPath,
-                    displayName: "PowerShell Daily",
-                    supportsProperArguments: true
                 }
             ],
             filesystem: {
@@ -133,9 +126,6 @@ if (process.platform === "win32") {
                 },
                 "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0": {
                     "powershell.exe": "",
-                },
-                [pwshDailyDir]: {
-                    "pwsh.exe": "",
                 }
             },
         },
@@ -487,8 +477,6 @@ if (process.platform === "win32") {
         }
     ];
 } else {
-    const pwshDailyDir = path.join(os.homedir(), ".powershell-daily");
-
     successTestCases = [
         {
             name: "Linux (all installations)",
@@ -502,41 +490,33 @@ if (process.platform === "win32") {
                 {
                     exePath: "/usr/bin/pwsh",
                     displayName: "PowerShell",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/snap/bin/pwsh",
                     displayName: "PowerShell Snap",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/usr/bin/pwsh-preview",
                     displayName: "PowerShell Preview",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/snap/bin/pwsh-preview",
                     displayName: "PowerShell Preview Snap",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
-                {
-                    exePath: path.join(pwshDailyDir, "pwsh"),
-                    displayName: "PowerShell Daily",
-                    supportsProperArguments: true
-                }
             ],
             filesystem: {
                 "/usr/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                     "pwsh-preview": "",
                 },
                 "/snap/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                     "pwsh-preview": "",
                 },
-                [pwshDailyDir]: {
-                    "pwsh": ""
-                }
             },
         },
         {
@@ -551,47 +531,39 @@ if (process.platform === "win32") {
                 {
                     exePath: "/usr/local/bin/pwsh",
                     displayName: "PowerShell",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/opt/homebrew/bin/pwsh",
                     displayName: "PowerShell (Homebrew)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/opt/homebrew/bin/pwsh-lts",
                     displayName: "PowerShell LTS (Homebrew)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/usr/local/bin/pwsh-preview",
                     displayName: "PowerShell Preview",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/opt/homebrew/bin/pwsh-preview",
                     displayName: "PowerShell Preview (Homebrew)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
-                {
-                    exePath: path.join(pwshDailyDir, "pwsh"),
-                    displayName: "PowerShell Daily",
-                    supportsProperArguments: true
-                }
             ],
             filesystem: {
                 "/usr/local/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                     "pwsh-preview": "",
                 },
                 "/opt/homebrew/bin/": {
-                    "pwsh": "",
+                    pwsh: "",
                     "pwsh-lts": "",
                     "pwsh-preview": "",
                 },
-                [pwshDailyDir]: {
-                    "pwsh": ""
-                }
             },
         },
         {
@@ -606,12 +578,12 @@ if (process.platform === "win32") {
                 {
                     exePath: "/usr/bin/pwsh",
                     displayName: "PowerShell",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
                 "/usr/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                 },
             },
         },
@@ -627,12 +599,12 @@ if (process.platform === "win32") {
                 {
                     exePath: "/snap/bin/pwsh",
                     displayName: "PowerShell Snap",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
                 "/snap/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                 },
             },
         },
@@ -648,12 +620,12 @@ if (process.platform === "win32") {
                 {
                     exePath: "/usr/local/bin/pwsh",
                     displayName: "PowerShell",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
                 "/usr/local/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                 },
             },
         },
@@ -665,19 +637,19 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "USER": "test",
-                "HOME": "/Users/test",
+                USER: "test",
+                HOME: "/Users/test",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "/Users/test/.dotnet/tools/pwsh",
                     displayName: ".NET Core PowerShell Global Tool",
-                    supportsProperArguments: false
+                    supportsProperArguments: false,
                 },
             ],
             filesystem: {
                 "/Users/test/.dotnet/tools": {
-                    "pwsh": "",
+                    pwsh: "",
                 },
             },
         },
@@ -689,19 +661,19 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "USER": "test",
-                "HOME": "/home/test",
+                USER: "test",
+                HOME: "/home/test",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "/home/test/.dotnet/tools/pwsh",
                     displayName: ".NET Core PowerShell Global Tool",
-                    supportsProperArguments: false
+                    supportsProperArguments: false,
                 },
             ],
             filesystem: {
                 "/home/test/.dotnet/tools": {
-                    "pwsh": "",
+                    pwsh: "",
                 },
             },
         },

From ea1b203deb74106fe85093ac432c3c0258114cc1 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 18:20:26 -0700
Subject: [PATCH 18/33] Setup formatting check task

Specificially not using Prettier for Markdown.
---
 package.json                      | 1 +
 pwsh-extension-dev.code-workspace | 9 +++++----
 vscode-powershell.build.ps1       | 2 ++
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/package.json b/package.json
index 456153fee8..7481a7117c 100644
--- a/package.json
+++ b/package.json
@@ -104,6 +104,7 @@
     "compile": "esbuild ./src/extension.ts --outdir=dist --sourcemap --bundle --external:vscode --platform=node",
     "watch": "npm run compile -- --watch",
     "lint": "eslint src test --ext .ts",
+    "format": "prettier --check '**/*.{ts,json,yml,mjs,code-workspace}'",
     "package": "vsce package --out out/ --no-gitHubIssueLinking",
     "publish": "vsce publish",
     "pretest": "npm run compile",
diff --git a/pwsh-extension-dev.code-workspace b/pwsh-extension-dev.code-workspace
index 5dddd29e64..6b0fa67a0a 100644
--- a/pwsh-extension-dev.code-workspace
+++ b/pwsh-extension-dev.code-workspace
@@ -24,14 +24,15 @@
   "settings": {
     "window.title": "PowerShell VS Code Extension Development",
     "debug.onTaskErrors": "prompt",
+    "editor.formatOnSave": true,
+    "editor.formatOnSaveMode": "modifications",
+    "editor.formatOnPaste": true,
     "editor.codeActionsOnSave": {
       "source.fixAll": "explicit",
     },
-    "[typescript][javascript][json]": {
+    "[typescript][javascript][json][jsonc]": {
       "editor.defaultFormatter": "esbenp.prettier-vscode",
-      "editor.formatOnPaste": true,
-      "editor.formatOnSave": true,
-      "editor.formatOnSaveMode": "modificationsIfAvailable",
+      "editor.formatOnSaveMode": "file",
     },
     "files.associations": {
       "**/snippets/*.json": "jsonc", // Use JSONC instead of JSON because that's how VS Code interprets snippet files, and it enables better source documentation.
diff --git a/vscode-powershell.build.ps1 b/vscode-powershell.build.ps1
index 7006cd1a73..4bcc737e33 100644
--- a/vscode-powershell.build.ps1
+++ b/vscode-powershell.build.ps1
@@ -86,6 +86,8 @@ task CleanEditorServices -If (Get-EditorServicesPath) {
 task Lint RestoreNodeOptional, {
     Write-Build DarkMagenta "Linting TypeScript"
     Invoke-BuildExec { & npm run lint }
+    Write-Build DarkMagenta "Checking formatting of TypeScript, JSON, etc."
+    Invoke-BuildExec { & npm run format }
 }
 
 task Build RestoreEditorServices, RestoreNode, {

From f978bae02ad48ddb5f8d4eb21512fe9b17541c5b Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 15 May 2025 18:25:21 -0700
Subject: [PATCH 19/33] Run Prettier across TypeScript, JSON, and YAML

---
 .config/tsaoptions.json                    |    4 +-
 .github/ISSUE_TEMPLATE/bug-report.yml      |  180 ++--
 .github/ISSUE_TEMPLATE/feature-request.yml |   42 +-
 .github/workflows/ci-test.yml              |    6 +-
 .markdownlint.json                         |    8 +-
 .pipelines/vscode-powershell-Official.yml  |  422 ++++----
 eslint.config.mjs                          |    1 +
 examples/.vscode/launch.json               |  114 +--
 examples/.vscode/settings.json             |    8 +-
 examples/.vscode/tasks.json                |  119 +--
 package.json                               |    4 +-
 pwsh-extension-dev.code-workspace          |  212 ++--
 snippets/PowerShell.json                   |  102 +-
 src/controls/checkboxQuickPick.ts          |   31 +-
 src/extension.ts                           |  116 ++-
 src/features/CodeActions.ts                |   20 +-
 src/features/Console.ts                    |  205 ++--
 src/features/DebugSession.ts               |  582 +++++++----
 src/features/Examples.ts                   |   25 +-
 src/features/ExpandAlias.ts                |   91 +-
 src/features/ExtensionCommands.ts          |  493 ++++++----
 src/features/ExternalApi.ts                |   83 +-
 src/features/GenerateBugReport.ts          |   41 +-
 src/features/GetCommands.ts                |   56 +-
 src/features/HelpCompletion.ts             |  122 ++-
 src/features/ISECompatibility.ts           |   72 +-
 src/features/OpenInISE.ts                  |   43 +-
 src/features/PesterTests.ts                |  105 +-
 src/features/RemoteFiles.ts                |   42 +-
 src/features/ShowHelp.ts                   |   58 +-
 src/features/UpdatePowerShell.ts           |   87 +-
 src/languageClientConsumer.ts              |   36 +-
 src/logging.ts                             |  185 +++-
 src/platform.ts                            |  470 ++++++---
 src/process.ts                             |  140 ++-
 src/session.ts                             | 1012 +++++++++++++-------
 src/settings.ts                            |  101 +-
 src/utils.ts                               |   51 +-
 test/TestEnvironment.code-workspace        |    6 +-
 test/core/paths.test.ts                    |   15 +-
 test/core/platform.test.ts                 |  459 +++++----
 test/core/settings.test.ts                 |   48 +-
 test/features/DebugSession.test.ts         |  519 +++++++---
 test/features/ExternalApi.test.ts          |   49 +-
 test/features/ISECompatibility.test.ts     |   81 +-
 test/features/UpdatePowerShell.test.ts     |    2 +-
 test/utils.ts                              |   52 +-
 themes/theme-psise/theme.json              |  396 ++++----
 48 files changed, 4421 insertions(+), 2695 deletions(-)

diff --git a/.config/tsaoptions.json b/.config/tsaoptions.json
index a8ae267f03..44c83732fa 100644
--- a/.config/tsaoptions.json
+++ b/.config/tsaoptions.json
@@ -2,7 +2,7 @@
   "instanceUrl": "https://msazure.visualstudio.com",
   "projectName": "One",
   "areaPath": "One\\MGMT\\Compute\\Powershell\\Powershell",
-  "notificationAliases": [ "andschwa@microsoft.com", "slee@microsoft.com" ],
+  "notificationAliases": ["andschwa@microsoft.com", "slee@microsoft.com"],
   "codebaseName": "PowerShell_vscode-powershell_20240328",
-  "tools": [ "CredScan", "PoliCheck", "BinSkim" ]
+  "tools": ["CredScan", "PoliCheck", "BinSkim"]
 }
diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index 42d40f611f..d90459770a 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -2,98 +2,98 @@ name: 🐛 Bug report
 description: Open an issue about a bug that needs fixing.
 labels: ["Issue-Bug", "Needs: Triage"]
 body:
-- type: checkboxes
-  attributes:
-    label: Prerequisites
-    options:
-    - label: I have written a descriptive issue title.
+  - type: checkboxes
+    attributes:
+      label: Prerequisites
+      options:
+        - label: I have written a descriptive issue title.
+          required: true
+        - label: I have searched all [_open and closed_ issues](https://github.com/PowerShell/vscode-powershell/issues?q=is%3Aissue) to ensure it has not already been reported.
+        - label: I have read the [troubleshooting](https://github.com/PowerShell/vscode-powershell/blob/main/docs/troubleshooting.md) guide.
+        - label: I am sure this issue is with the _extension itself_ and does not reproduce in a standalone [PowerShell](https://github.com/PowerShell/PowerShell/issues/new/choose) instance.
+        - label: I have verified that I am using the latest version of Visual Studio Code and the PowerShell extension.
+        - label: If this is a security issue, I have read the [security issue reporting guidance](https://github.com/PowerShell/vscode-powershell/blob/main/SECURITY.md).
+  - type: textarea
+    id: summary
+    attributes:
+      label: Summary
+      description: Explain the problem briefly below.
+      placeholder: I am experiencing a problem with X. I think Y should be happening but Z is actually happening.
+    validations:
       required: true
-    - label: I have searched all [_open and closed_ issues](https://github.com/PowerShell/vscode-powershell/issues?q=is%3Aissue) to ensure it has not already been reported.
-    - label: I have read the [troubleshooting](https://github.com/PowerShell/vscode-powershell/blob/main/docs/troubleshooting.md) guide.
-    - label: I am sure this issue is with the _extension itself_ and does not reproduce in a standalone [PowerShell](https://github.com/PowerShell/PowerShell/issues/new/choose) instance.
-    - label: I have verified that I am using the latest version of Visual Studio Code and the PowerShell extension.
-    - label: If this is a security issue, I have read the [security issue reporting guidance](https://github.com/PowerShell/vscode-powershell/blob/main/SECURITY.md).
-- type: textarea
-  id: summary
-  attributes:
-    label: Summary
-    description: Explain the problem briefly below.
-    placeholder: I am experiencing a problem with X. I think Y should be happening but Z is actually happening.
-  validations:
-    required: true
-- type: textarea
-  id: powershell-version
-  attributes:
-    label: PowerShell Version
-    description: Paste verbatim output from `$PSVersionTable; $Host` below. **Please include `$Host`** so we know this version is from the Extension Terminal!
-    render: console
-    placeholder: |
-      PS> $PSVersionTable; $Host
+  - type: textarea
+    id: powershell-version
+    attributes:
+      label: PowerShell Version
+      description: Paste verbatim output from `$PSVersionTable; $Host` below. **Please include `$Host`** so we know this version is from the Extension Terminal!
+      render: console
+      placeholder: |
+        PS> $PSVersionTable; $Host
 
-      Name                           Value
-      ----                           -----
-      PSVersion                      7.4.0
-      PSEdition                      Core
-      GitCommitId                    7.4.0
-      OS                             Microsoft Windows 10.0.22631
-      Platform                       Win32NT
-      PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
-      PSRemotingProtocolVersion      2.3
-      SerializationVersion           1.1.0.1
-      WSManStackVersion              3.0
+        Name                           Value
+        ----                           -----
+        PSVersion                      7.4.0
+        PSEdition                      Core
+        GitCommitId                    7.4.0
+        OS                             Microsoft Windows 10.0.22631
+        Platform                       Win32NT
+        PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
+        PSRemotingProtocolVersion      2.3
+        SerializationVersion           1.1.0.1
+        WSManStackVersion              3.0
 
-      Name             : Visual Studio Code Host
-      Version          : 2023.11.0
-      InstanceId       : 803ce61b-6187-4574-9c1f-827ebb11b8b6
-      UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
-      CurrentCulture   : en-US
-      CurrentUICulture : en-US
-      PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
-      DebuggerEnabled  : True
-      IsRunspacePushed : False
-      Runspace         : System.Management.Automation.Runspaces.LocalRunspace
-  validations:
-    required: true
-- type: textarea
-  id: vscode-version
-  attributes:
-    label: Visual Studio Code Version
-    description: Paste verbatim output from `code --version` below.
-    render: console
-    placeholder: |
-      PS> code --version
+        Name             : Visual Studio Code Host
+        Version          : 2023.11.0
+        InstanceId       : 803ce61b-6187-4574-9c1f-827ebb11b8b6
+        UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
+        CurrentCulture   : en-US
+        CurrentUICulture : en-US
+        PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
+        DebuggerEnabled  : True
+        IsRunspacePushed : False
+        Runspace         : System.Management.Automation.Runspaces.LocalRunspace
+    validations:
+      required: true
+  - type: textarea
+    id: vscode-version
+    attributes:
+      label: Visual Studio Code Version
+      description: Paste verbatim output from `code --version` below.
+      render: console
+      placeholder: |
+        PS> code --version
 
-      1.57.1
-      507ce72a4466fbb27b715c3722558bb15afa9f48
-      arm64
-  validations:
-    required: true
-- type: textarea
-  id: extension-version
-  attributes:
-    label: Extension Version
-    description: Paste verbatim output from `code --list-extensions --show-versions | Select-String powershell` below.
-    render: console
-    placeholder: |
-      PS> code --list-extensions --show-versions | Select-String powershell
+        1.57.1
+        507ce72a4466fbb27b715c3722558bb15afa9f48
+        arm64
+    validations:
+      required: true
+  - type: textarea
+    id: extension-version
+    attributes:
+      label: Extension Version
+      description: Paste verbatim output from `code --list-extensions --show-versions | Select-String powershell` below.
+      render: console
+      placeholder: |
+        PS> code --list-extensions --show-versions | Select-String powershell
 
-      ms-vscode.powershell@2021.8.0
-  validations:
-    required: true
-- type: textarea
-  id: steps-to-reproduce
-  attributes:
-    label: Steps to Reproduce
-    description: List of steps, sample code, failing test or link to a project that reproduces the behavior. Make sure you place a stack trace inside a code (```) block to avoid linking unrelated issues.
-  validations:
-    required: true
-- type: textarea
-  id: visuals
-  attributes:
-    label: Visuals
-    description: Please upload images or animations that can be used to reproduce issues in the area below. Try the [Steps Recorder](https://support.microsoft.com/en-us/windows/record-steps-to-reproduce-a-problem-46582a9b-620f-2e36-00c9-04e25d784e47) on Windows or [Screenshot](https://support.apple.com/en-us/HT208721) on macOS.
-- type: textarea
-  id: logs
-  attributes:
-    label: Logs
-    description: Please upload logs collected by following these [instructions](https://github.com/PowerShell/vscode-powershell/blob/main/docs/troubleshooting.md#logs) in the area below. Be careful to scrub sensitive information!
+        ms-vscode.powershell@2021.8.0
+    validations:
+      required: true
+  - type: textarea
+    id: steps-to-reproduce
+    attributes:
+      label: Steps to Reproduce
+      description: List of steps, sample code, failing test or link to a project that reproduces the behavior. Make sure you place a stack trace inside a code (```) block to avoid linking unrelated issues.
+    validations:
+      required: true
+  - type: textarea
+    id: visuals
+    attributes:
+      label: Visuals
+      description: Please upload images or animations that can be used to reproduce issues in the area below. Try the [Steps Recorder](https://support.microsoft.com/en-us/windows/record-steps-to-reproduce-a-problem-46582a9b-620f-2e36-00c9-04e25d784e47) on Windows or [Screenshot](https://support.apple.com/en-us/HT208721) on macOS.
+  - type: textarea
+    id: logs
+    attributes:
+      label: Logs
+      description: Please upload logs collected by following these [instructions](https://github.com/PowerShell/vscode-powershell/blob/main/docs/troubleshooting.md#logs) in the area below. Be careful to scrub sensitive information!
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
index d6b9a6a080..22599f9c7e 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.yml
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -2,25 +2,25 @@ name: ✨ Feature request
 description: Open an issue about a potential new feature or improvement.
 labels: ["Issue-Enhancement", "Needs: Triage"]
 body:
-- type: checkboxes
-  attributes:
-    label: Prerequisites
-    options:
-    - label: I have written a descriptive issue title.
+  - type: checkboxes
+    attributes:
+      label: Prerequisites
+      options:
+        - label: I have written a descriptive issue title.
+          required: true
+        - label: I have searched all [issues](https://github.com/PowerShell/vscode-powershell/issues?q=is%3Aissue) to ensure it has not already been reported.
+          required: true
+  - type: textarea
+    id: summary
+    attributes:
+      label: Summary
+      description: Explain the feature request below.
+      placeholder: I would like to do X because it would be useful for Y and I cannot currently do it with Z.
+    validations:
       required: true
-    - label: I have searched all [issues](https://github.com/PowerShell/vscode-powershell/issues?q=is%3Aissue) to ensure it has not already been reported.
-      required: true
-- type: textarea
-  id: summary
-  attributes:
-    label: Summary
-    description: Explain the feature request below.
-    placeholder: I would like to do X because it would be useful for Y and I cannot currently do it with Z.
-  validations:
-    required: true
-- type: textarea
-  id: proposed-design
-  attributes:
-    label: Proposed Design
-    description: Optionally explain any technical design below.
-    placeholder: We could accomplish this by extending X to take Y and yield Z.
+  - type: textarea
+    id: proposed-design
+    attributes:
+      label: Proposed Design
+      description: Optionally explain any technical design below.
+      placeholder: We could accomplish this by extending X to take Y and yield Z.
diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml
index 8d416d460a..fbd38d1088 100644
--- a/.github/workflows/ci-test.yml
+++ b/.github/workflows/ci-test.yml
@@ -19,7 +19,7 @@ jobs:
     env:
       DOTNET_NOLOGO: true
       DOTNET_GENERATE_ASPNET_CERTIFICATE: false
-      DISPLAY: ':99.0'
+      DISPLAY: ":99.0"
     timeout-minutes: 10
     steps:
       - name: Checkout PowerShellEditorServices
@@ -70,11 +70,11 @@ jobs:
         if: always()
         with:
           name: vscode-powershell-vsix-${{ matrix.os }}
-          path: '**/*.vsix'
+          path: "**/*.vsix"
 
       - name: Upload test results
         uses: actions/upload-artifact@v4
         if: always()
         with:
           name: vscode-powershell-test-results-${{ matrix.os }}
-          path: '**/test-results.xml'
+          path: "**/test-results.xml"
diff --git a/.markdownlint.json b/.markdownlint.json
index e1a57605cd..7f90a5dce8 100644
--- a/.markdownlint.json
+++ b/.markdownlint.json
@@ -1,6 +1,6 @@
 {
-    "MD013": false,
-    "MD033": false,
-    "MD022": false,
-    "MD024": false
+  "MD013": false,
+  "MD033": false,
+  "MD022": false,
+  "MD024": false
 }
diff --git a/.pipelines/vscode-powershell-Official.yml b/.pipelines/vscode-powershell-Official.yml
index 018e598c0e..69d83c9533 100644
--- a/.pipelines/vscode-powershell-Official.yml
+++ b/.pipelines/vscode-powershell-Official.yml
@@ -9,21 +9,21 @@
 #################################################################################
 
 trigger:
-- main
+  - main
 
 schedules:
-- cron: '25 9 * * 3'
-  displayName: Weekly CodeQL
-  branches:
-    include:
-    - main
-  always: true
+  - cron: "25 9 * * 3"
+    displayName: Weekly CodeQL
+    branches:
+      include:
+        - main
+    always: true
 
 parameters:
-- name: debug
-  displayName: Enable debug output
-  type: boolean
-  default: false
+  - name: debug
+    displayName: Enable debug output
+    type: boolean
+    default: false
 
 variables:
   system.debug: ${{ parameters.debug }}
@@ -37,13 +37,13 @@ resources:
       name: OneBranch.Pipelines/GovernedTemplates
       ref: refs/heads/main
   pipelines:
-  - pipeline: PowerShellEditorServices-Official
-    source: PowerShellEditorServices-Official
-    trigger:
-      branches:
-      - main
-      stages:
-      - release
+    - pipeline: PowerShellEditorServices-Official
+      source: PowerShellEditorServices-Official
+      trigger:
+        branches:
+          - main
+        stages:
+          - release
 
 extends:
   # https://aka.ms/obpipelines/templates
@@ -59,198 +59,198 @@ extends:
         Version: 2022
         Network: KS3
     stages:
-    - stage: build
-      jobs:
-      - job: main
-        displayName: Build package
-        pool:
-          type: windows
+      - stage: build
+        jobs:
+          - job: main
+            displayName: Build package
+            pool:
+              type: windows
+            variables:
+              ob_outputDirectory: $(Build.SourcesDirectory)/out
+              ob_sdl_codeSignValidation_excludes: -|**\*.js # Node.js JavaScript signatures are not supported
+            steps:
+              - pwsh: |
+                  $version = (Get-Content -Raw -Path package.json | ConvertFrom-Json).version
+                  Write-Output "##vso[task.setvariable variable=vsixVersion;isOutput=true]$version"
+                  $prerelease = ([semver]$version).Minor % 2 -ne 0
+                  if ($prerelease) { $version += "-preview" }
+                  Write-Output "##vso[task.setvariable variable=version;isOutput=true]$version"
+                  Write-Output "##vso[task.setvariable variable=prerelease;isOutput=true]$prerelease"
+                name: package
+                displayName: Get version from package.json
+              - task: onebranch.pipeline.version@1
+                displayName: Set OneBranch version
+                inputs:
+                  system: Custom
+                  customVersion: $(package.version)
+              - task: UseNode@1
+                displayName: Use Node 20.x
+                inputs:
+                  version: 20.x
+              - task: DownloadPipelineArtifact@2
+                displayName: Download PowerShellEditorServices
+                inputs:
+                  source: specific
+                  project: PowerShellCore
+                  definition: 2905
+                  specificBuildWithTriggering: true
+                  allowPartiallySucceededBuilds: true
+                  buildVersionToDownload: latestFromBranch
+                  branchName: refs/heads/main
+                  artifact: drop_build_main
+              - task: ExtractFiles@1
+                displayName: Extract PowerShellEditorServices
+                inputs:
+                  archiveFilePatterns: $(Pipeline.Workspace)/PowerShellEditorServices.zip
+                  destinationFolder: $(Build.SourcesDirectory)/modules
+              - pwsh: |
+                  $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
+                  Write-Host Using PowerShellEditorServices v$($manifest.Version)
+                displayName: PowerShellEditorServices version
+              - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
+                displayName: Install PSResources
+              - pwsh: Invoke-Build Build -Configuration $(BuildConfiguration)
+                displayName: Build
+              - task: onebranch.pipeline.signing@1
+                displayName: Sign 1st-party example PowerShell files
+                inputs:
+                  command: sign
+                  signing_profile: external_distribution
+                  search_root: $(Build.SourcesDirectory)/examples
+                  files_to_sign: "**/*.ps1;**/*.psd1;**/*.psm1"
+              - pwsh: Invoke-Build Package
+                displayName: Create package
+              - pwsh: |
+                  npx vsce generate-manifest --packagePath out/powershell-$(package.vsixVersion).vsix
+                  cp out/powershell-$(package.vsixVersion).manifest out/powershell-$(package.vsixVersion).signature.p7s
+                displayName: Generate VSIX manifest
+              - task: onebranch.pipeline.signing@1
+                displayName: Sign VSIX manifest
+                inputs:
+                  command: sign
+                  cp_code: "CP-401405-VSCodePublisherSign"
+                  search_root: $(Build.SourcesDirectory)/out
+                  files_to_sign: |
+                    *.signature.p7s;
+          - job: test
+            displayName: Build and run tests
+            pool:
+              type: windows
+              isCustom: true
+              name: Azure Pipelines
+              vmImage: windows-latest
+            variables:
+              ob_outputDirectory: $(Build.SourcesDirectory)/out
+              skipComponentGovernanceDetection: true
+            steps:
+              - task: UseNode@1
+                displayName: Use Node 20.x
+                inputs:
+                  version: 20.x
+              - task: UseDotNet@2
+                displayName: Use .NET 8.x SDK
+                inputs:
+                  packageType: sdk
+                  version: 8.x
+              - task: DownloadPipelineArtifact@2
+                displayName: Download PowerShellEditorServices
+                inputs:
+                  source: specific
+                  project: PowerShellCore
+                  definition: 2905
+                  specificBuildWithTriggering: true
+                  allowPartiallySucceededBuilds: true
+                  buildVersionToDownload: latestFromBranch
+                  branchName: refs/heads/main
+                  artifact: drop_build_main
+              - task: ExtractFiles@1
+                displayName: Extract PowerShellEditorServices
+                inputs:
+                  archiveFilePatterns: $(Pipeline.Workspace)/PowerShellEditorServices.zip
+                  destinationFolder: $(Build.SourcesDirectory)/modules
+              - pwsh: |
+                  $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
+                  Write-Host Using PowerShellEditorServices v$($manifest.Version)
+                displayName: PowerShellEditorServices version
+              - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
+                displayName: Install PSResources
+              - pwsh: Invoke-Build Test -Configuration $(BuildConfiguration)
+                displayName: Run tests
+      - stage: release
+        dependsOn: build
+        condition: eq(variables['Build.Reason'], 'Manual')
         variables:
-          ob_outputDirectory: $(Build.SourcesDirectory)/out
-          ob_sdl_codeSignValidation_excludes: -|**\*.js # Node.js JavaScript signatures are not supported
-        steps:
-          - pwsh: |
-              $version = (Get-Content -Raw -Path package.json | ConvertFrom-Json).version
-              Write-Output "##vso[task.setvariable variable=vsixVersion;isOutput=true]$version"
-              $prerelease = ([semver]$version).Minor % 2 -ne 0
-              if ($prerelease) { $version += "-preview" }
-              Write-Output "##vso[task.setvariable variable=version;isOutput=true]$version"
-              Write-Output "##vso[task.setvariable variable=prerelease;isOutput=true]$prerelease"
-            name: package
-            displayName: Get version from package.json
-          - task: onebranch.pipeline.version@1
-            displayName: Set OneBranch version
-            inputs:
-              system: Custom
-              customVersion: $(package.version)
-          - task: UseNode@1
-            displayName: Use Node 20.x
-            inputs:
-              version: 20.x
-          - task: DownloadPipelineArtifact@2
-            displayName: Download PowerShellEditorServices
-            inputs:
-              source: specific
-              project: PowerShellCore
-              definition: 2905
-              specificBuildWithTriggering: true
-              allowPartiallySucceededBuilds: true
-              buildVersionToDownload: latestFromBranch
-              branchName: refs/heads/main
-              artifact: drop_build_main
-          - task: ExtractFiles@1
-            displayName: Extract PowerShellEditorServices
-            inputs:
-              archiveFilePatterns: $(Pipeline.Workspace)/PowerShellEditorServices.zip
-              destinationFolder: $(Build.SourcesDirectory)/modules
-          - pwsh: |
-              $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
-              Write-Host Using PowerShellEditorServices v$($manifest.Version)
-            displayName: PowerShellEditorServices version
-          - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
-            displayName: Install PSResources
-          - pwsh: Invoke-Build Build -Configuration $(BuildConfiguration)
-            displayName: Build
-          - task: onebranch.pipeline.signing@1
-            displayName: Sign 1st-party example PowerShell files
-            inputs:
-              command: sign
-              signing_profile: external_distribution
-              search_root: $(Build.SourcesDirectory)/examples
-              files_to_sign: '**/*.ps1;**/*.psd1;**/*.psm1'
-          - pwsh: Invoke-Build Package
-            displayName: Create package
-          - pwsh: |
-              npx vsce generate-manifest --packagePath out/powershell-$(package.vsixVersion).vsix
-              cp out/powershell-$(package.vsixVersion).manifest out/powershell-$(package.vsixVersion).signature.p7s
-            displayName: Generate VSIX manifest
-          - task: onebranch.pipeline.signing@1
-            displayName: Sign VSIX manifest
-            inputs:
-              command: sign
-              cp_code: 'CP-401405-VSCodePublisherSign'
-              search_root: $(Build.SourcesDirectory)/out
-              files_to_sign: |
-                *.signature.p7s;
-      - job: test
-        displayName: Build and run tests
-        pool:
-          type: windows
-          isCustom: true
-          name: Azure Pipelines
-          vmImage: windows-latest
-        variables:
-          ob_outputDirectory: $(Build.SourcesDirectory)/out
-          skipComponentGovernanceDetection: true
-        steps:
-          - task: UseNode@1
-            displayName: Use Node 20.x
-            inputs:
-              version: 20.x
-          - task: UseDotNet@2
-            displayName: Use .NET 8.x SDK
-            inputs:
-              packageType: sdk
-              version: 8.x
-          - task: DownloadPipelineArtifact@2
-            displayName: Download PowerShellEditorServices
-            inputs:
-              source: specific
-              project: PowerShellCore
-              definition: 2905
-              specificBuildWithTriggering: true
-              allowPartiallySucceededBuilds: true
-              buildVersionToDownload: latestFromBranch
-              branchName: refs/heads/main
-              artifact: drop_build_main
-          - task: ExtractFiles@1
-            displayName: Extract PowerShellEditorServices
-            inputs:
-              archiveFilePatterns: $(Pipeline.Workspace)/PowerShellEditorServices.zip
-              destinationFolder: $(Build.SourcesDirectory)/modules
-          - pwsh: |
-              $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
-              Write-Host Using PowerShellEditorServices v$($manifest.Version)
-            displayName: PowerShellEditorServices version
-          - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
-            displayName: Install PSResources
-          - pwsh: Invoke-Build Test -Configuration $(BuildConfiguration)
-            displayName: Run tests
-    - stage: release
-      dependsOn: build
-      condition: eq(variables['Build.Reason'], 'Manual')
-      variables:
-        version: $[ stageDependencies.build.main.outputs['package.version'] ]
-        vsixVersion: $[ stageDependencies.build.main.outputs['package.vsixVersion'] ]
-        prerelease: $[ stageDependencies.build.main.outputs['package.prerelease'] ]
-        drop: $(Pipeline.Workspace)/drop_build_main
-      jobs:
-      - job: github
-        displayName: Publish draft to GitHub
-        pool:
-          type: windows
-        variables:
-          ob_outputDirectory: $(Build.SourcesDirectory)/out
-        steps:
-        - download: current
-          displayName: Download artifacts
-        - task: GitHubRelease@1
-          displayName: Create GitHub release
-          inputs:
-            gitHubConnection: GitHub
-            repositoryName: PowerShell/vscode-powershell
-            target: main
-            assets: $(drop)/powershell-$(vsixVersion).vsix
-            tagSource: userSpecifiedTag
-            tag: v$(version)
-            isDraft: true
-            isPreRelease: $(prerelease)
-            addChangeLog: false
-            releaseNotesSource: inline
-            releaseNotesInline: "<!-- TODO: Generate release notes on GitHub! -->"
-      - job: validation
-        displayName: Manual validation
-        pool:
-          type: agentless
-        timeoutInMinutes: 1440
-        steps:
-        - task: ManualValidation@0
-          displayName: Wait 24 hours for validation
-          inputs:
-            notifyUsers: $(Build.RequestedForEmail)
-            instructions: Please validate the release and then publish it!
+          version: $[ stageDependencies.build.main.outputs['package.version'] ]
+          vsixVersion: $[ stageDependencies.build.main.outputs['package.vsixVersion'] ]
+          prerelease: $[ stageDependencies.build.main.outputs['package.prerelease'] ]
+          drop: $(Pipeline.Workspace)/drop_build_main
+        jobs:
+          - job: github
+            displayName: Publish draft to GitHub
+            pool:
+              type: windows
+            variables:
+              ob_outputDirectory: $(Build.SourcesDirectory)/out
+            steps:
+              - download: current
+                displayName: Download artifacts
+              - task: GitHubRelease@1
+                displayName: Create GitHub release
+                inputs:
+                  gitHubConnection: GitHub
+                  repositoryName: PowerShell/vscode-powershell
+                  target: main
+                  assets: $(drop)/powershell-$(vsixVersion).vsix
+                  tagSource: userSpecifiedTag
+                  tag: v$(version)
+                  isDraft: true
+                  isPreRelease: $(prerelease)
+                  addChangeLog: false
+                  releaseNotesSource: inline
+                  releaseNotesInline: "<!-- TODO: Generate release notes on GitHub! -->"
+          - job: validation
+            displayName: Manual validation
+            pool:
+              type: agentless
             timeoutInMinutes: 1440
-      - job: vscode
-        dependsOn: validation
-        displayName: Publish to VS Code Marketplace
-        pool:
-          type: windows
-        variables:
-          ob_outputDirectory: $(Build.SourcesDirectory)/out
-        steps:
-        - download: current
-          displayName: Download artifacts
-        - task: UseNode@1
-          displayName: Use Node 20.x
-          inputs:
-            version: 20.x
-        - pwsh: npm ci
-          displayName: Install NPM packages (for vsce)
-        - task: AzureCLI@2
-          displayName: Run vsce publish
-          inputs:
-            azureSubscription: vscode-marketplace
-            scriptType: pscore
-            scriptLocation: inlineScript
-            inlineScript: |
-              $publishArgs = @(
-                '--azure-credential'
-                '--packagePath'
-                '$(drop)/powershell-$(vsixVersion).vsix'
-                '--manifestPath'
-                '$(drop)/powershell-$(vsixVersion).manifest'
-                '--signaturePath'
-                '$(drop)/powershell-$(vsixVersion).signature.p7s'
-                if ([bool]::Parse('$(prerelease)')) { '--pre-release' }
-              )
-              npm run publish -- @publishArgs
+            steps:
+              - task: ManualValidation@0
+                displayName: Wait 24 hours for validation
+                inputs:
+                  notifyUsers: $(Build.RequestedForEmail)
+                  instructions: Please validate the release and then publish it!
+                  timeoutInMinutes: 1440
+          - job: vscode
+            dependsOn: validation
+            displayName: Publish to VS Code Marketplace
+            pool:
+              type: windows
+            variables:
+              ob_outputDirectory: $(Build.SourcesDirectory)/out
+            steps:
+              - download: current
+                displayName: Download artifacts
+              - task: UseNode@1
+                displayName: Use Node 20.x
+                inputs:
+                  version: 20.x
+              - pwsh: npm ci
+                displayName: Install NPM packages (for vsce)
+              - task: AzureCLI@2
+                displayName: Run vsce publish
+                inputs:
+                  azureSubscription: vscode-marketplace
+                  scriptType: pscore
+                  scriptLocation: inlineScript
+                  inlineScript: |
+                    $publishArgs = @(
+                      '--azure-credential'
+                      '--packagePath'
+                      '$(drop)/powershell-$(vsixVersion).vsix'
+                      '--manifestPath'
+                      '$(drop)/powershell-$(vsixVersion).manifest'
+                      '--signaturePath'
+                      '$(drop)/powershell-$(vsixVersion).signature.p7s'
+                      if ([bool]::Parse('$(prerelease)')) { '--pre-release' }
+                    )
+                    npm run publish -- @publishArgs
diff --git a/eslint.config.mjs b/eslint.config.mjs
index bf3be9452a..9ad447020d 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -29,6 +29,7 @@ export default tseslint.config(
                 "error",
                 {
                     argsIgnorePattern: "^_",
+                    destructuredArrayIgnorePattern: "^_",
                 },
             ],
             "@typescript-eslint/no-unsafe-argument": "off",
diff --git a/examples/.vscode/launch.json b/examples/.vscode/launch.json
index 88687248dd..310016412d 100644
--- a/examples/.vscode/launch.json
+++ b/examples/.vscode/launch.json
@@ -1,59 +1,59 @@
 {
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch Current File",
-            "script": "${file}",
-            "args": [],
-            "cwd": "${file}"
-        },
-        {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch Current File in Temporary Console",
-            "script": "${file}",
-            "args": [],
-            "cwd": "${file}",
-            "createTemporaryIntegratedConsole": true
-        },
-        {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch Current File w/Args Prompt",
-            "script": "${file}",
-            "args": [ "${command:SpecifyScriptArgs}" ],
-            "cwd": "${file}"
-        },
-        {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Launch DebugTest.ps1",
-            "script": "${workspaceRoot}/DebugTest.ps1",
-            "args": ["-Count 55 -DelayMilliseconds 250"],
-            "cwd": "${workspaceRoot}"
-        },
-        {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Interactive Session",
-            "cwd": "${workspaceRoot}"
-        },
-        {
-            "type": "PowerShell",
-            "request": "launch",
-            "name": "PowerShell Pester Tests",
-            "script": "Invoke-Pester",
-            "args": [],
-            "cwd": "${workspaceRoot}"
-        },
-        {
-            "type": "PowerShell",
-            "request": "attach",
-            "name": "PowerShell Attach to Host Process",
-            "processId": "${command:PickPSHostProcess}",
-            "runspaceId": 1
-        }
-    ]
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "type": "PowerShell",
+      "request": "launch",
+      "name": "PowerShell Launch Current File",
+      "script": "${file}",
+      "args": [],
+      "cwd": "${file}"
+    },
+    {
+      "type": "PowerShell",
+      "request": "launch",
+      "name": "PowerShell Launch Current File in Temporary Console",
+      "script": "${file}",
+      "args": [],
+      "cwd": "${file}",
+      "createTemporaryIntegratedConsole": true
+    },
+    {
+      "type": "PowerShell",
+      "request": "launch",
+      "name": "PowerShell Launch Current File w/Args Prompt",
+      "script": "${file}",
+      "args": ["${command:SpecifyScriptArgs}"],
+      "cwd": "${file}"
+    },
+    {
+      "type": "PowerShell",
+      "request": "launch",
+      "name": "PowerShell Launch DebugTest.ps1",
+      "script": "${workspaceRoot}/DebugTest.ps1",
+      "args": ["-Count 55 -DelayMilliseconds 250"],
+      "cwd": "${workspaceRoot}"
+    },
+    {
+      "type": "PowerShell",
+      "request": "launch",
+      "name": "PowerShell Interactive Session",
+      "cwd": "${workspaceRoot}"
+    },
+    {
+      "type": "PowerShell",
+      "request": "launch",
+      "name": "PowerShell Pester Tests",
+      "script": "Invoke-Pester",
+      "args": [],
+      "cwd": "${workspaceRoot}"
+    },
+    {
+      "type": "PowerShell",
+      "request": "attach",
+      "name": "PowerShell Attach to Host Process",
+      "processId": "${command:PickPSHostProcess}",
+      "runspaceId": 1
+    }
+  ]
 }
diff --git a/examples/.vscode/settings.json b/examples/.vscode/settings.json
index a37044b519..23c9990db9 100644
--- a/examples/.vscode/settings.json
+++ b/examples/.vscode/settings.json
@@ -1,6 +1,6 @@
 {
-    // Use a custom PowerShell Script Analyzer settings file for this workspace.
-    // Relative paths for this setting are always relative to the workspace root dir.
-    "powershell.scriptAnalysis.settingsPath": "./PSScriptAnalyzerSettings.psd1",
-    "files.defaultLanguage": "powershell",
+  // Use a custom PowerShell Script Analyzer settings file for this workspace.
+  // Relative paths for this setting are always relative to the workspace root dir.
+  "powershell.scriptAnalysis.settingsPath": "./PSScriptAnalyzerSettings.psd1",
+  "files.defaultLanguage": "powershell"
 }
diff --git a/examples/.vscode/tasks.json b/examples/.vscode/tasks.json
index 9c5bf45ce1..8ae38829cc 100644
--- a/examples/.vscode/tasks.json
+++ b/examples/.vscode/tasks.json
@@ -30,73 +30,60 @@
 // ${cwd} the task runner's current working directory on startup
 // ${lineNumber} the current selected line number in the active file
 {
-    "version": "2.0.0",
-    "windows": {
-        "options": {
-            "shell": {
-                "executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
-                "args": [
-                    "-NoProfile",
-                    "-ExecutionPolicy",
-                    "Bypass",
-                    "-Command"
-                ]
-            }
-        }
+  "version": "2.0.0",
+  "windows": {
+    "options": {
+      "shell": {
+        "executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+        "args": ["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command"]
+      }
+    }
+  },
+  "linux": {
+    "options": {
+      "shell": {
+        "executable": "/usr/bin/pwsh",
+        "args": ["-NoProfile", "-Command"]
+      }
+    }
+  },
+  "osx": {
+    "options": {
+      "shell": {
+        "executable": "/usr/local/bin/pwsh",
+        "args": ["-NoProfile", "-Command"]
+      }
+    }
+  },
+  "tasks": [
+    {
+      "label": "Clean",
+      "type": "shell",
+      "command": "Invoke-PSake build.ps1 -taskList Clean"
     },
-    "linux": {
-        "options": {
-            "shell": {
-                "executable": "/usr/bin/pwsh",
-                "args": [
-                    "-NoProfile",
-                    "-Command"
-                ]
-            }
-        }
+    {
+      "label": "Build",
+      "type": "shell",
+      "command": "Invoke-PSake build.ps1 -taskList Build",
+      "group": {
+        "kind": "build",
+        "isDefault": true
+      }
     },
-    "osx": {
-        "options": {
-            "shell": {
-                "executable": "/usr/local/bin/pwsh",
-                "args": [
-                    "-NoProfile",
-                    "-Command"
-                ]
-            }
-        }
+    {
+      "label": "Test",
+      "type": "shell",
+      "command": "Invoke-Pester -PesterOption @{IncludeVSCodeMarker=$true}",
+      "group": {
+        "kind": "test",
+        "isDefault": true
+      },
+      "problemMatcher": ["$pester"]
     },
-    "tasks": [
-        {
-            "label": "Clean",
-            "type": "shell",
-            "command": "Invoke-PSake build.ps1 -taskList Clean"
-        },
-        {
-            "label": "Build",
-            "type": "shell",
-            "command": "Invoke-PSake build.ps1 -taskList Build",
-            "group": {
-                "kind": "build",
-                "isDefault": true
-            }
-        },
-        {
-            "label": "Test",
-            "type": "shell",
-            "command": "Invoke-Pester -PesterOption @{IncludeVSCodeMarker=$true}",
-            "group": {
-                "kind": "test",
-                "isDefault": true
-            },
-            "problemMatcher": [
-                "$pester"
-            ]
-        },
-        {
-            "label": "Publish",
-            "type": "shell",
-            "command": "Invoke-PSake build.ps1 -taskList Publish"
-        }
-    ]
+    {
+      "label": "Publish",
+      "type": "shell",
+      "command": "Invoke-PSake build.ps1 -taskList Publish"
+    }
+  ]
 }
diff --git a/package.json b/package.json
index 7481a7117c..0f082805ae 100644
--- a/package.json
+++ b/package.json
@@ -111,7 +111,9 @@
     "test": "vscode-test"
   },
   "prettier": {
-    "plugins": ["prettier-plugin-organize-imports"]
+    "plugins": [
+      "prettier-plugin-organize-imports"
+    ]
   },
   "contributes": {
     "breakpoints": [
diff --git a/pwsh-extension-dev.code-workspace b/pwsh-extension-dev.code-workspace
index 6b0fa67a0a..dc4208242f 100644
--- a/pwsh-extension-dev.code-workspace
+++ b/pwsh-extension-dev.code-workspace
@@ -2,12 +2,12 @@
   "folders": [
     {
       "name": "Client",
-      "path": "."
+      "path": ".",
     },
     {
       "name": "Server",
-      "path": "../PowerShellEditorServices"
-    }
+      "path": "../PowerShellEditorServices",
+    },
   ],
   "extensions": {
     "recommendations": [
@@ -18,8 +18,8 @@
       "ms-dotnettools.csharp",
       "ms-vscode.powershell",
       "connor4312.esbuild-problem-matchers",
-      "ms-vscode.extension-test-runner"
-    ]
+      "ms-vscode.extension-test-runner",
+    ],
   },
   "settings": {
     "window.title": "PowerShell VS Code Extension Development",
@@ -39,7 +39,7 @@
     },
     // Ignore the Markdown rule:
     "markdownlint.config": {
-      "MD024": false // no-duplicate-header
+      "MD024": false, // no-duplicate-header
     },
     "powershell.cwd": "Client",
     "powershell.codeFormatting.autoCorrectAliases": true,
@@ -60,36 +60,25 @@
       "options": {
         "shell": {
           "executable": "pwsh.exe",
-          "args": [
-            "-NoProfile",
-            "-ExecutionPolicy",
-            "Bypass",
-            "-Command"
-          ]
-        }
-      }
+          "args": ["-NoProfile", "-ExecutionPolicy", "Bypass", "-Command"],
+        },
+      },
     },
     "linux": {
       "options": {
         "shell": {
           "executable": "pwsh",
-          "args": [
-            "-NoProfile",
-            "-Command"
-          ]
-        }
-      }
+          "args": ["-NoProfile", "-Command"],
+        },
+      },
     },
     "osx": {
       "options": {
         "shell": {
           "executable": "pwsh",
-          "args": [
-            "-NoProfile",
-            "-Command"
-          ]
-        }
-      }
+          "args": ["-NoProfile", "-Command"],
+        },
+      },
     },
     "tasks": [
       {
@@ -99,24 +88,21 @@
         },
         "type": "shell",
         "options": {
-          "cwd": "${workspaceFolder:Client}"
+          "cwd": "${workspaceFolder:Client}",
         },
         "command": "Invoke-Build Build",
-        "problemMatcher": [
-          "$msCompile",
-          "$tsc"
-        ],
+        "problemMatcher": ["$msCompile", "$tsc"],
         "group": {
           "kind": "build",
-          "isDefault": true
-        }
+          "isDefault": true,
+        },
       },
       {
         "label": "Extension: Watch",
         "type": "shell",
         "isBackground": true,
         "options": {
-          "cwd": "${workspaceFolder:Client}"
+          "cwd": "${workspaceFolder:Client}",
         },
         "command": "npm run watch",
         "problemMatcher": {
@@ -131,104 +117,90 @@
           "background": {
             "activeOnStart": true,
             "beginsPattern": "^\\[watch\\] build started",
-            "endsPattern": "^\\[watch\\] build finished"
-          }
+            "endsPattern": "^\\[watch\\] build finished",
+          },
         },
         "icon": {
           "id": "sync",
-          "color": "terminal.ansiCyan"
+          "color": "terminal.ansiCyan",
         },
         "group": {
           "kind": "build",
-        }
+        },
       },
       {
         "label": "PSES: BuildIfChanged",
         "type": "shell",
         "options": {
-          "cwd": "${workspaceFolder:Server}"
+          "cwd": "${workspaceFolder:Server}",
         },
         "command": "Invoke-Build BuildIfChanged",
         "problemMatcher": "$msCompile",
         "icon": {
           "id": "tools",
-          "color": "terminal.ansiCyan"
+          "color": "terminal.ansiCyan",
         },
         "group": {
           "kind": "build",
-        }
+        },
       },
       {
         "label": "PreLaunch",
-        "dependsOn": [
-          "Extension: Watch",
-          "PSES: BuildIfChanged"
-        ],
-        "dependsOrder": "parallel"
+        "dependsOn": ["Extension: Watch", "PSES: BuildIfChanged"],
+        "dependsOrder": "parallel",
       },
       {
         "label": "Test Client",
         "type": "shell",
         "options": {
-          "cwd": "${workspaceFolder:Client}"
+          "cwd": "${workspaceFolder:Client}",
         },
         "command": "Invoke-Build Test",
-        "problemMatcher": [
-          "$msCompile",
-          "$tsc"
-        ],
+        "problemMatcher": ["$msCompile", "$tsc"],
         "group": {
           "kind": "test",
-          "isDefault": true
-        }
+          "isDefault": true,
+        },
       },
       {
         "label": "Test Server",
         "type": "shell",
         "options": {
-          "cwd": "${workspaceFolder:Server}"
+          "cwd": "${workspaceFolder:Server}",
         },
-        "problemMatcher": [
-          "$msCompile"
-        ],
+        "problemMatcher": ["$msCompile"],
         "command": "Invoke-Build TestPS74",
         "group": {
           "kind": "test",
-          "isDefault": true
-        }
+          "isDefault": true,
+        },
       },
       {
         "label": "Invoke-Build Client",
         "type": "shell",
         "options": {
-          "cwd": "${workspaceFolder:Client}"
+          "cwd": "${workspaceFolder:Client}",
         },
         "command": "Invoke-Build ${input:clientBuildCommand}",
-        "group": "build"
+        "group": "build",
       },
       {
         "label": "Invoke-Build Server",
         "type": "shell",
         "options": {
-          "cwd": "${workspaceFolder:Server}"
+          "cwd": "${workspaceFolder:Server}",
         },
         "command": "Invoke-Build ${input:serverBuildCommand}",
-        "group": "build"
-      }
+        "group": "build",
+      },
     ],
     "inputs": [
       {
         "type": "pickString",
         "id": "clientBuildCommand",
         "description": "Which Invoke-Build Client Task?",
-        "options": [
-          "Restore",
-          "Clean",
-          "Build",
-          "Test",
-          "Package"
-        ],
-        "default": "Clean"
+        "options": ["Restore", "Clean", "Build", "Test", "Package"],
+        "default": "Clean",
       },
       {
         "type": "pickString",
@@ -245,56 +217,46 @@
           "TestPS51",
           "TestE2EPowerShell",
         ],
-        "default": "Clean"
-      }
+        "default": "Clean",
+      },
     ],
-
   },
   "launch": {
     "version": "0.2.0",
     "compounds": [
       {
         "name": "Launch Extension",
-        "configurations": [
-          "Launch",
-          "PowerShell Editor Services"
-        ],
+        "configurations": ["Launch", "PowerShell Editor Services"],
         "preLaunchTask": "Build",
         "stopAll": true,
         "presentation": {
           "hidden": false,
           "group": "Test",
-          "order": 1
-        }
+          "order": 1,
+        },
       },
       {
         "name": "Launch Extension - Temp Profile",
-        "configurations": [
-          "Launch-Temp",
-          "PowerShell Editor Services"
-        ],
+        "configurations": ["Launch-Temp", "PowerShell Editor Services"],
         "preLaunchTask": "PreLaunch",
         "stopAll": true,
         "presentation": {
           "hidden": false,
           "group": "Test",
-          "order": 2
-        }
+          "order": 2,
+        },
       },
       {
         "name": "Launch Extension - Isolated Profile",
-        "configurations": [
-          "Launch-Isolated",
-          "PowerShell Editor Services"
-        ],
+        "configurations": ["Launch-Isolated", "PowerShell Editor Services"],
         "preLaunchTask": "Build",
         "stopAll": true,
         "presentation": {
           "hidden": false,
           "group": "Test",
-          "order": 3
-        }
-      }
+          "order": 3,
+        },
+      },
     ],
     "configurations": [
       {
@@ -307,22 +269,20 @@
         "runtimeExecutable": "${execPath}",
         "args": [
           "--extensionDevelopmentPath=${workspaceFolder:Client}",
-          "${workspaceFolder:Client}/examples"
+          "${workspaceFolder:Client}/examples",
         ],
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
-        "outFiles": [
-          "${workspaceFolder:Client}/dist/*.js"
-        ],
+        "outFiles": ["${workspaceFolder:Client}/dist/*.js"],
         "skipFiles": [
           "<node_internals>/**",
           "**/node_modules/**",
           "**/.vscode-test/**",
-          "**/app/out/vs/**" // Skips Extension Host internals
+          "**/app/out/vs/**", // Skips Extension Host internals
         ],
         "presentation": {
-          "hidden": true
-        }
+          "hidden": true,
+        },
       },
       {
         "name": "Launch-Temp",
@@ -337,13 +297,11 @@
           // Undocumented: https://github.com/microsoft/vscode-docs/issues/6220
           "--profile-temp",
           "--extensionDevelopmentPath=${workspaceFolder:Client}",
-          "${workspaceFolder:Client}/examples"
+          "${workspaceFolder:Client}/examples",
         ],
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
-        "outFiles": [
-          "${workspaceFolder:Client}/dist/*.js"
-        ],
+        "outFiles": ["${workspaceFolder:Client}/dist/*.js"],
         "skipFiles": [
           "<node_internals>/**",
           "**/node_modules/**",
@@ -351,8 +309,8 @@
           "**/app/out/vs/**", // Skips Extension Host internals
         ],
         "presentation": {
-          "hidden": true
-        }
+          "hidden": true,
+        },
       },
       {
         "name": "Launch-Isolated",
@@ -367,22 +325,20 @@
           // Undocumented: https://github.com/microsoft/vscode-docs/issues/6220
           "--profile=pwsh-debug",
           "--extensionDevelopmentPath=${workspaceFolder:Client}",
-          "${workspaceFolder:Client}/examples"
+          "${workspaceFolder:Client}/examples",
         ],
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
-        "outFiles": [
-          "${workspaceFolder:Client}/dist/*.js"
-        ],
+        "outFiles": ["${workspaceFolder:Client}/dist/*.js"],
         "skipFiles": [
           "<node_internals>/**",
           "**/node_modules/**",
           "**/.vscode-test/**",
-          "**/app/out/vs/**" // Skips Extension Host internals
+          "**/app/out/vs/**", // Skips Extension Host internals
         ],
         "presentation": {
-          "hidden": true
-        }
+          "hidden": true,
+        },
       },
       {
         // https://code.visualstudio.com/docs/csharp/debugger-settings
@@ -395,15 +351,15 @@
         "symbolOptions": {
           "searchPaths": [],
           "searchMicrosoftSymbolServer": false,
-          "searchNuGetOrgSymbolServer": false
+          "searchNuGetOrgSymbolServer": false,
         },
         "presentation": {
           "hidden": false,
           "group": "Test",
-          "order": 5
+          "order": 5,
         },
         "logging": {
-          "moduleLoad": false
+          "moduleLoad": false,
         },
       },
       {
@@ -418,14 +374,14 @@
         "symbolOptions": {
           "searchPaths": [],
           "searchMicrosoftSymbolServer": false,
-          "searchNuGetOrgSymbolServer": false
+          "searchNuGetOrgSymbolServer": false,
         },
         "presentation": {
-          "hidden": true
+          "hidden": true,
         },
         "logging": {
-          "moduleLoad": false
-        }
+          "moduleLoad": false,
+        },
       },
       {
         // Runs the extension in an isolated but persistent profile separate from the user settings
@@ -437,22 +393,20 @@
         "args": [
           "--profile=debug",
           "--extensionDevelopmentPath=${workspaceFolder:Client}",
-          "${workspaceFolder:Server}/test/PowerShellEditorServices.Test.Shared/Refactoring"
+          "${workspaceFolder:Server}/test/PowerShellEditorServices.Test.Shared/Refactoring",
         ],
         "sourceMaps": true,
         // This speeds up source map detection and makes smartStep work correctly
-        "outFiles": [
-          "${workspaceFolder:Client}/dist/*.js"
-        ],
+        "outFiles": ["${workspaceFolder:Client}/dist/*.js"],
         "skipFiles": [
           "<node_internals>/**",
           "**/node_modules/**",
-          "**/.vscode-test/**" // Skips Extension Host internals
+          "**/.vscode-test/**", // Skips Extension Host internals
         ],
         "presentation": {
           "hidden": true,
-        }
+        },
       },
-    ]
-  }
+    ],
+  },
 }
diff --git a/snippets/PowerShell.json b/snippets/PowerShell.json
index d0a94ba30b..61fa010c85 100644
--- a/snippets/PowerShell.json
+++ b/snippets/PowerShell.json
@@ -38,10 +38,7 @@
     ]
   },
   "Class Constructor": {
-    "prefix": [
-      "ctor-class",
-      "class-constructor"
-    ],
+    "prefix": ["ctor-class", "class-constructor"],
     "description": "Set default values and validate object logic at the moment of creating the instance of the class. Constructors have the same name as the class. Constructors might have arguments, to initialize the data members of the new object. More: Get-Help about_Classes",
     "body": [
       "${1:ClassName}(${2:<#OptionalParameters#>}) {",
@@ -61,14 +58,10 @@
   "Class Property": {
     "prefix": "class-property",
     "description": "Properties are variables declared at class scope. A property may be of any built-in type or an instance of another class. Classes have no restriction in the number of properties they have. More: Get-Help about_Classes",
-    "body": [
-      "[${1:propertyType}] $${0:PropertyName}"
-    ]
+    "body": ["[${1:propertyType}] $${0:PropertyName}"]
   },
   "Comment Block": {
-    "prefix": [
-      "block-comment"
-    ],
+    "prefix": ["block-comment"],
     "description": "A multi-line comment.",
     "body": [
       "$BLOCK_COMMENT_START",
@@ -202,10 +195,7 @@
     ]
   },
   "Function Help": {
-    "prefix": [
-      "help-function",
-      "comment-help"
-    ],
+    "prefix": ["help-function", "comment-help"],
     "description": "Comment-based help for an advanced function. More: Get-Help about_Comment_Based_Help",
     "body": [
       "<#",
@@ -226,10 +216,7 @@
     ]
   },
   "Function-Advanced": {
-    "prefix": [
-      "function-advanced",
-      "cmdlet"
-    ],
+    "prefix": ["function-advanced", "cmdlet"],
     "description": "Script advanced function definition snippet. More: Get-Help about_Functions_Advanced",
     "body": [
       "function ${1:Verb-Noun} {",
@@ -262,10 +249,7 @@
     ]
   },
   "Function: Suppress PSScriptAnalyzer Rule": {
-    "prefix": [
-      "suppress-message-rule-function",
-      "[SuppressMessageAttribute]"
-    ],
+    "prefix": ["suppress-message-rule-function", "[SuppressMessageAttribute]"],
     "description": "Suppress a PSScriptAnalyzer rule for a function. More: https://docs.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules#suppressing-rules",
     "body": [
       "[Diagnostics.CodeAnalysis.SuppressMessageAttribute(",
@@ -278,44 +262,22 @@
   "Hashtable": {
     "prefix": "hashtable",
     "description": "A key/value store that are very efficient for finding and retrieving data. More: Get-Help about_Hash_Tables",
-    "body": [
-      "\\$${1:Var} = @{",
-      "\t${2:Name} = ${3:Value}",
-      "}"
-    ]
+    "body": ["\\$${1:Var} = @{", "\t${2:Name} = ${3:Value}", "}"]
   },
   "Here-String": {
-    "prefix": [
-      "hs",
-      "here-string"
-    ],
+    "prefix": ["hs", "here-string"],
     "description": "Escape all text but evaluate variables. More: Get-Help about_Quoting_Rules",
-    "body": [
-      "@\"",
-      "${0:TM_SELECTED_TEXT}",
-      "\"@",
-      ""
-    ]
+    "body": ["@\"", "${0:TM_SELECTED_TEXT}", "\"@", ""]
   },
   "Here-String (Literal)": {
-    "prefix": [
-      "hsl",
-      "literal-here-string"
-    ],
+    "prefix": ["hsl", "literal-here-string"],
     "description": "Escape all text literally. More: Get-Help about_Quoting_Rules",
-    "body": [
-      "@'",
-      "${0:TM_SELECTED_TEXT}",
-      "'@",
-      ""
-    ]
+    "body": ["@'", "${0:TM_SELECTED_TEXT}", "'@", ""]
   },
   "Hidden Property": {
     "prefix": "class-proph-hidden",
     "description": "Useful for creating internal properties and methods within a class that are hidden from users. More: Get-Help about_Hidden",
-    "body": [
-      "hidden [${1:string}] $${0:PropertyName}"
-    ]
+    "body": ["hidden [${1:string}] $${0:PropertyName}"]
   },
   "IArgumentCompleter Class": {
     "prefix": "iargument-completer",
@@ -518,10 +480,7 @@
     ]
   },
   "Parameter: Suppress PSScriptAnalyzer Rule": {
-    "prefix": [
-      "suppress-message-rule-parameter",
-      "[SuppressMessageAttribute]"
-    ],
+    "prefix": ["suppress-message-rule-parameter", "[SuppressMessageAttribute]"],
     "description": "Suppress a PSScriptAnalyzer rule on a parameter. More: https://docs.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules#suppressing-rules",
     "body": [
       "[Diagnostics.CodeAnalysis.SuppressMessageAttribute(",
@@ -548,31 +507,17 @@
     ]
   },
   "PSCustomObject": {
-    "prefix": [
-      "pscustomobject",
-      "[PSCustomObject]"
-    ],
+    "prefix": ["pscustomobject", "[PSCustomObject]"],
     "description": "Create a custom object from a hashtable of properties. More: Get-Help about_PSCustomObject",
-    "body": [
-      "[PSCustomObject]@{",
-      "\t${1:Name} = ${2:Value}",
-      "}"
-    ]
+    "body": ["[PSCustomObject]@{", "\t${1:Name} = ${2:Value}", "}"]
   },
   "Region Block": {
     "prefix": "region",
     "description": "Region block for organizing and folding of your code",
-    "body": [
-      "#region ${1}",
-      "${0:$TM_SELECTED_TEXT}",
-      "#endregion"
-    ]
+    "body": ["#region ${1}", "${0:$TM_SELECTED_TEXT}", "#endregion"]
   },
   "Scope: Suppress PSScriptAnalyzer Rule": {
-    "prefix": [
-      "suppress-message-rule-scope",
-      "[SuppressMessageAttribute]"
-    ],
+    "prefix": ["suppress-message-rule-scope", "[SuppressMessageAttribute]"],
     "description": "Suppress a PSScriptAnalyzer rule based on a function/parameter/class/variable/object's name by setting the SuppressMessageAttribute's Target property to a regular expression or a glob pattern. More: https://docs.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules#suppressing-rules",
     "body": [
       "[Diagnostics.CodeAnalysis.SuppressMessageAttribute(",
@@ -594,10 +539,7 @@
     ]
   },
   "Suppress PSScriptAnalyzer Rule": {
-    "prefix": [
-      "suppress-message-rule",
-      "[SuppressMessageAttribute]"
-    ],
+    "prefix": ["suppress-message-rule", "[SuppressMessageAttribute]"],
     "description": "Suppress a PSScriptAnalyzer rule. More: https://docs.microsoft.com/en-us/powershell/utility-modules/psscriptanalyzer/overview?view=ps-modules#suppressing-rules",
     "body": [
       "[Diagnostics.CodeAnalysis.SuppressMessageAttribute(",
@@ -665,10 +607,6 @@
   "while": {
     "prefix": "while",
     "description": "Repeatedly perform an action after verifying a condition is true first. More: Get-Help about_While",
-    "body": [
-      "while (${1:condition}) {",
-      "\t${0:$TM_SELECTED_TEXT}",
-      "}"
-    ]
+    "body": ["while (${1:condition}) {", "\t${0:$TM_SELECTED_TEXT}", "}"]
   }
-}
\ No newline at end of file
+}
diff --git a/src/controls/checkboxQuickPick.ts b/src/controls/checkboxQuickPick.ts
index e318992365..2c8bf72c07 100644
--- a/src/controls/checkboxQuickPick.ts
+++ b/src/controls/checkboxQuickPick.ts
@@ -6,7 +6,8 @@ import vscode = require("vscode");
 const confirmItemLabel = "$(checklist) Confirm";
 const checkedPrefix = "[ $(check) ]";
 const uncheckedPrefix = "[     ]";
-const defaultPlaceHolder = "Select 'Confirm' to confirm or press 'Esc' key to cancel";
+const defaultPlaceHolder =
+    "Select 'Confirm' to confirm or press 'Esc' key to cancel";
 
 export interface ICheckboxQuickPickItem {
     label: string;
@@ -18,17 +19,21 @@ export interface ICheckboxQuickPickOptions {
     confirmPlaceHolder: string;
 }
 
-const defaultOptions: ICheckboxQuickPickOptions = { confirmPlaceHolder: defaultPlaceHolder };
+const defaultOptions: ICheckboxQuickPickOptions = {
+    confirmPlaceHolder: defaultPlaceHolder,
+};
 
 export async function showCheckboxQuickPick(
     items: ICheckboxQuickPickItem[],
-    options: ICheckboxQuickPickOptions = defaultOptions): Promise<ICheckboxQuickPickItem[] | undefined> {
-
+    options: ICheckboxQuickPickOptions = defaultOptions,
+): Promise<ICheckboxQuickPickItem[] | undefined> {
     const selectedItem = await showInner(items, options);
     return selectedItem !== undefined ? items : undefined;
 }
 
-function getQuickPickItems(items: ICheckboxQuickPickItem[]): vscode.QuickPickItem[] {
+function getQuickPickItems(
+    items: ICheckboxQuickPickItem[],
+): vscode.QuickPickItem[] {
     const quickPickItems: vscode.QuickPickItem[] = [];
     quickPickItems.push({ label: confirmItemLabel, description: "" });
 
@@ -44,15 +49,16 @@ function getQuickPickItems(items: ICheckboxQuickPickItem[]): vscode.QuickPickIte
 
 async function showInner(
     items: ICheckboxQuickPickItem[],
-    options: ICheckboxQuickPickOptions): Promise<vscode.QuickPickItem | undefined> {
-
+    options: ICheckboxQuickPickOptions,
+): Promise<vscode.QuickPickItem | undefined> {
     const selection = await vscode.window.showQuickPick(
         getQuickPickItems(items),
         {
             ignoreFocusOut: true,
             matchOnDescription: true,
             placeHolder: options.confirmPlaceHolder,
-        });
+        },
+    );
 
     if (selection === undefined) {
         return undefined;
@@ -66,13 +72,18 @@ async function showInner(
     if (index >= 0) {
         toggleSelection(items[index]);
     } else {
-        console.log(`Couldn't find CheckboxQuickPickItem for label '${selection.label}'`);
+        console.log(
+            `Couldn't find CheckboxQuickPickItem for label '${selection.label}'`,
+        );
     }
 
     return showInner(items, options);
 }
 
-function getItemIndex(items: ICheckboxQuickPickItem[], itemLabel: string): number {
+function getItemIndex(
+    items: ICheckboxQuickPickItem[],
+    itemLabel: string,
+): number {
     const trimmedLabel = itemLabel.substring(itemLabel.indexOf("]") + 2);
     return items.findIndex((item) => item.label === trimmedLabel);
 }
diff --git a/src/extension.ts b/src/extension.ts
index c311d06e7c..53fe03af19 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -6,11 +6,17 @@ import TelemetryReporter from "@vscode/extension-telemetry";
 import { DocumentSelector } from "vscode-languageclient";
 import { CodeActionsFeature } from "./features/CodeActions";
 import { ConsoleFeature } from "./features/Console";
-import { DebugSessionFeature } from "./features/DebugSession";
+import {
+    DebugSessionFeature,
+    SpecifyScriptArgsFeature,
+} from "./features/DebugSession";
 import { ExamplesFeature } from "./features/Examples";
 import { ExpandAliasFeature } from "./features/ExpandAlias";
 import { ExtensionCommandsFeature } from "./features/ExtensionCommands";
-import { ExternalApiFeature, type IPowerShellExtensionClient } from "./features/ExternalApi";
+import {
+    ExternalApiFeature,
+    type IPowerShellExtensionClient,
+} from "./features/ExternalApi";
 import { GenerateBugReportFeature } from "./features/GenerateBugReport";
 import { GetCommandsFeature } from "./features/GetCommands";
 import { HelpCompletionFeature } from "./features/HelpCompletion";
@@ -19,15 +25,15 @@ import { OpenInISEFeature } from "./features/OpenInISE";
 import { PesterTestsFeature } from "./features/PesterTests";
 import { RemoteFilesFeature } from "./features/RemoteFiles";
 import { ShowHelpFeature } from "./features/ShowHelp";
-import { SpecifyScriptArgsFeature } from "./features/DebugSession";
+import { LanguageClientConsumer } from "./languageClientConsumer";
 import { Logger } from "./logging";
 import { SessionManager } from "./session";
 import { getSettings } from "./settings";
 import { PowerShellLanguageId } from "./utils";
-import { LanguageClientConsumer } from "./languageClientConsumer";
 // The 1DS telemetry key, which is just shared among all Microsoft extensions
 // (and isn't sensitive).
-const TELEMETRY_KEY = "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255";
+const TELEMETRY_KEY =
+    "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255";
 
 let languageConfigurationDisposable: vscode.Disposable;
 let logger: Logger;
@@ -41,7 +47,9 @@ const documentSelector: DocumentSelector = [
     { language: "powershell", scheme: "untitled" },
 ];
 
-export async function activate(context: vscode.ExtensionContext): Promise<IPowerShellExtensionClient> {
+export async function activate(
+    context: vscode.ExtensionContext,
+): Promise<IPowerShellExtensionClient> {
     logger = new Logger();
     if (context.extensionMode === vscode.ExtensionMode.Development) {
         restartOnExtensionFileChanges(context);
@@ -50,14 +58,17 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
     telemetryReporter = new TelemetryReporter(TELEMETRY_KEY);
 
     const settings = getSettings();
-    logger.writeDebug(`Loaded settings:\n${JSON.stringify(settings, undefined, 2)}`);
+    logger.writeDebug(
+        `Loaded settings:\n${JSON.stringify(settings, undefined, 2)}`,
+    );
 
     languageConfigurationDisposable = vscode.languages.setLanguageConfiguration(
         PowerShellLanguageId,
         {
             // TODO: Remove the useless escapes
-            // eslint-disable-next-line no-useless-escape
-            wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\=\+\[\{\]\}\\\|\;\'\"\,\.\<\>\/\?\s]+)/g,
+            wordPattern:
+                // eslint-disable-next-line no-useless-escape
+                /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\=\+\[\{\]\}\\\|\;\'\"\,\.\<\>\/\?\s]+)/g,
 
             indentationRules: {
                 // ^(.*\*/)?\s*\}.*$
@@ -83,34 +94,50 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
                     // eslint-disable-next-line no-useless-escape
                     beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
                     afterText: /^\s*\*\/$/,
-                    action: { indentAction: vscode.IndentAction.IndentOutdent, appendText: " * " },
+                    action: {
+                        indentAction: vscode.IndentAction.IndentOutdent,
+                        appendText: " * ",
+                    },
                 },
                 {
                     // e.g. /** ...|
                     // eslint-disable-next-line no-useless-escape
                     beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
-                    action: { indentAction: vscode.IndentAction.None, appendText: " * " },
+                    action: {
+                        indentAction: vscode.IndentAction.None,
+                        appendText: " * ",
+                    },
                 },
                 {
                     // e.g.  * ...|
                     // eslint-disable-next-line no-useless-escape
                     beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/,
-                    action: { indentAction: vscode.IndentAction.None, appendText: "* " },
+                    action: {
+                        indentAction: vscode.IndentAction.None,
+                        appendText: "* ",
+                    },
                 },
                 {
                     // e.g.  */|
                     // eslint-disable-next-line no-useless-escape
                     beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/,
-                    action: { indentAction: vscode.IndentAction.None, removeText: 1 },
+                    action: {
+                        indentAction: vscode.IndentAction.None,
+                        removeText: 1,
+                    },
                 },
                 {
                     // e.g.  *-----*/|
                     // eslint-disable-next-line no-useless-escape
                     beforeText: /^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/,
-                    action: { indentAction: vscode.IndentAction.None, removeText: 1 },
+                    action: {
+                        indentAction: vscode.IndentAction.None,
+                        removeText: 1,
+                    },
                 },
             ],
-        });
+        },
+    );
 
     interface IPackageInfo {
         name: string;
@@ -118,7 +145,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
         version: string;
         publisher: string;
     }
-    const packageInfo:IPackageInfo = context.extension.packageJSON;
+    const packageInfo: IPackageInfo = context.extension.packageJSON;
 
     sessionManager = new SessionManager(
         context,
@@ -129,7 +156,8 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
         packageInfo.displayName,
         packageInfo.version,
         packageInfo.publisher,
-        telemetryReporter);
+        telemetryReporter,
+    );
 
     // Register commands that do not require Language client
     commandRegistrations = [
@@ -143,22 +171,23 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
 
         vscode.commands.registerCommand(
             "PowerShell.OpenLogFolder",
-            async () => {await vscode.commands.executeCommand(
-                "vscode.openFolder",
-                context.logUri,
-                { forceNewWindow: true }
-            );}
-        ),
-        vscode.commands.registerCommand(
-            "PowerShell.ShowLogs",
-            () => {logger.showLogPanel();}
+            async () => {
+                await vscode.commands.executeCommand(
+                    "vscode.openFolder",
+                    context.logUri,
+                    { forceNewWindow: true },
+                );
+            },
         ),
+        vscode.commands.registerCommand("PowerShell.ShowLogs", () => {
+            logger.showLogPanel();
+        }),
         vscode.commands.registerCommand(
             "GetVsCodeSessionId",
-            () => vscode.env.sessionId
+            () => vscode.env.sessionId,
         ),
         // Register a command that waits for the Extension Terminal to be active. Can be used by .NET Attach Tasks.
-        registerWaitForPsesActivationCommand(context)
+        registerWaitForPsesActivationCommand(context),
     ];
 
     const externalApi = new ExternalApiFeature(context, sessionManager, logger);
@@ -182,22 +211,31 @@ export async function activate(context: vscode.ExtensionContext): Promise<IPower
     }
 
     return {
-        registerExternalExtension: (id: string, apiVersion = "v1") => externalApi.registerExternalExtension(id, apiVersion),
-        unregisterExternalExtension: uuid => externalApi.unregisterExternalExtension(uuid),
-        getPowerShellVersionDetails: uuid => externalApi.getPowerShellVersionDetails(uuid),
-        waitUntilStarted: uuid => externalApi.waitUntilStarted(uuid),
+        registerExternalExtension: (id: string, apiVersion = "v1") =>
+            externalApi.registerExternalExtension(id, apiVersion),
+        unregisterExternalExtension: (uuid) =>
+            externalApi.unregisterExternalExtension(uuid),
+        getPowerShellVersionDetails: (uuid) =>
+            externalApi.getPowerShellVersionDetails(uuid),
+        waitUntilStarted: (uuid) => externalApi.waitUntilStarted(uuid),
         getStorageUri: () => externalApi.getStorageUri(),
         getLogUri: () => externalApi.getLogUri(),
     };
 }
 
 /** Registers a command that waits for PSES Activation and returns the PID, used to auto-attach the PSES debugger */
-function registerWaitForPsesActivationCommand(context: vscode.ExtensionContext): vscode.Disposable {
+function registerWaitForPsesActivationCommand(
+    context: vscode.ExtensionContext,
+): vscode.Disposable {
     return vscode.commands.registerCommand(
         "PowerShell.WaitForPsesActivationAndReturnProcessId",
         async () => {
             const pidFileName = `PSES-${vscode.env.sessionId}.pid`;
-            const pidFile = vscode.Uri.joinPath(context.globalStorageUri, "sessions", pidFileName);
+            const pidFile = vscode.Uri.joinPath(
+                context.globalStorageUri,
+                "sessions",
+                pidFileName,
+            );
             const fs = vscode.workspace.fs;
             // Wait for the file to be created
             // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
@@ -219,22 +257,24 @@ function registerWaitForPsesActivationCommand(context: vscode.ExtensionContext):
                     return pidContent.toString();
                 } catch {
                     // File doesn't exist yet, wait and try again
-                    await new Promise(resolve => setTimeout(resolve, 1000));
+                    await new Promise((resolve) => setTimeout(resolve, 1000));
                 }
             }
-        }
+        },
     );
 }
 
 /** Restarts the extension host when extension file changes are detected. Useful for development. */
 function restartOnExtensionFileChanges(context: vscode.ExtensionContext): void {
     const watcher = vscode.workspace.createFileSystemWatcher(
-        new vscode.RelativePattern(context.extensionPath, "dist/*.js")
+        new vscode.RelativePattern(context.extensionPath, "dist/*.js"),
     );
 
     context.subscriptions.push(watcher);
     watcher.onDidChange(({ fsPath }) => {
-        vscode.window.showInformationMessage(`${fsPath.split(context.extensionPath, 2)[1]} changed. Reloading Extension Host...`);
+        vscode.window.showInformationMessage(
+            `${fsPath.split(context.extensionPath, 2)[1]} changed. Reloading Extension Host...`,
+        );
         vscode.commands.executeCommand("workbench.action.restartExtensionHost");
     });
 }
diff --git a/src/features/CodeActions.ts b/src/features/CodeActions.ts
index f9b022ed8c..825b7941a9 100644
--- a/src/features/CodeActions.ts
+++ b/src/features/CodeActions.ts
@@ -13,10 +13,12 @@ export class CodeActionsFeature implements vscode.Disposable {
         //
         // TODO: In the far future with LSP 3.19 the server can just set a URL
         // and this can go away. See https://github.com/microsoft/language-server-protocol/issues/1548
-        this.command =
-            vscode.commands.registerCommand("PowerShell.ShowCodeActionDocumentation", async (ruleName: string) => {
+        this.command = vscode.commands.registerCommand(
+            "PowerShell.ShowCodeActionDocumentation",
+            async (ruleName: string) => {
                 await this.showRuleDocumentation(ruleName);
-            });
+            },
+        );
     }
 
     public dispose(): void {
@@ -24,10 +26,13 @@ export class CodeActionsFeature implements vscode.Disposable {
     }
 
     private async showRuleDocumentation(ruleId: string): Promise<void> {
-        const pssaDocBaseURL = "https://docs.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/";
+        const pssaDocBaseURL =
+            "https://docs.microsoft.com/powershell/utility-modules/psscriptanalyzer/rules/";
 
         if (!ruleId) {
-            this.log.writeWarning("Cannot show documentation for code action, no ruleName was supplied.");
+            this.log.writeWarning(
+                "Cannot show documentation for code action, no ruleName was supplied.",
+            );
             return;
         }
 
@@ -35,6 +40,9 @@ export class CodeActionsFeature implements vscode.Disposable {
             ruleId = ruleId.substring(2);
         }
 
-        await vscode.commands.executeCommand("vscode.open", vscode.Uri.parse(pssaDocBaseURL + ruleId));
+        await vscode.commands.executeCommand(
+            "vscode.open",
+            vscode.Uri.parse(pssaDocBaseURL + ruleId),
+        );
     }
 }
diff --git a/src/features/Console.ts b/src/features/Console.ts
index 4063e2bbe5..f7038f5ec1 100644
--- a/src/features/Console.ts
+++ b/src/features/Console.ts
@@ -5,23 +5,32 @@ import vscode = require("vscode");
 import { NotificationType, RequestType } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
 import {
-  type ICheckboxQuickPickItem,
-  showCheckboxQuickPick,
+    type ICheckboxQuickPickItem,
+    showCheckboxQuickPick,
 } from "../controls/checkboxQuickPick";
+import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { ILogger } from "../logging";
 import { getSettings } from "../settings";
-import { LanguageClientConsumer } from "../languageClientConsumer";
-
-export const EvaluateRequestType = new RequestType<IEvaluateRequestArguments, void, void>("evaluate");
-export const OutputNotificationType = new NotificationType<IOutputNotificationBody>("output");
-
-export const ShowChoicePromptRequestType =
-    new RequestType<IShowChoicePromptRequestArgs,
-        IShowChoicePromptResponseBody, string>("powerShell/showChoicePrompt");
 
-export const ShowInputPromptRequestType =
-    new RequestType<IShowInputPromptRequestArgs,
-        IShowInputPromptResponseBody, string>("powerShell/showInputPrompt");
+export const EvaluateRequestType = new RequestType<
+    IEvaluateRequestArguments,
+    void,
+    void
+>("evaluate");
+export const OutputNotificationType =
+    new NotificationType<IOutputNotificationBody>("output");
+
+export const ShowChoicePromptRequestType = new RequestType<
+    IShowChoicePromptRequestArgs,
+    IShowChoicePromptResponseBody,
+    string
+>("powerShell/showChoicePrompt");
+
+export const ShowInputPromptRequestType = new RequestType<
+    IShowInputPromptRequestArgs,
+    IShowInputPromptResponseBody,
+    string
+>("powerShell/showInputPrompt");
 
 export interface IEvaluateRequestArguments {
     expression: string;
@@ -60,27 +69,29 @@ interface IShowInputPromptResponseBody {
     promptCancelled: boolean;
 }
 
-
-function showChoicePrompt(promptDetails: IShowChoicePromptRequestArgs): Thenable<IShowChoicePromptResponseBody> {
-
+function showChoicePrompt(
+    promptDetails: IShowChoicePromptRequestArgs,
+): Thenable<IShowChoicePromptResponseBody> {
     let resultThenable: Thenable<IShowChoicePromptResponseBody>;
 
     if (!promptDetails.isMultiChoice) {
-        let quickPickItems =
-            promptDetails.choices.map<vscode.QuickPickItem>((choice) => {
+        let quickPickItems = promptDetails.choices.map<vscode.QuickPickItem>(
+            (choice) => {
                 return {
                     label: choice.label,
                     description: choice.helpMessage,
                 };
-            });
+            },
+        );
 
         if (promptDetails.defaultChoices.length > 0) {
             // Shift the default items to the front of the
             // array so that the user can select it easily
             const defaultChoice = promptDetails.defaultChoices[0];
-            if (defaultChoice > -1 &&
-                defaultChoice < promptDetails.choices.length) {
-
+            if (
+                defaultChoice > -1 &&
+                defaultChoice < promptDetails.choices.length
+            ) {
                 const defaultChoiceItem = quickPickItems[defaultChoice];
                 quickPickItems.splice(defaultChoice, 1);
 
@@ -89,12 +100,11 @@ function showChoicePrompt(promptDetails: IShowChoicePromptRequestArgs): Thenable
             }
         }
 
-        resultThenable =
-            vscode.window
-                .showQuickPick(
-                    quickPickItems,
-                    { placeHolder: promptDetails.message })
-                .then(onItemSelected);
+        resultThenable = vscode.window
+            .showQuickPick(quickPickItems, {
+                placeHolder: promptDetails.message,
+            })
+            .then(onItemSelected);
     } else {
         const checkboxQuickPickItems =
             promptDetails.choices.map<ICheckboxQuickPickItem>((choice) => {
@@ -110,26 +120,33 @@ function showChoicePrompt(promptDetails: IShowChoicePromptRequestArgs): Thenable
             checkboxQuickPickItems[choice].isSelected = true;
         }
 
-        resultThenable =
-            showCheckboxQuickPick(
-                checkboxQuickPickItems,
-                { confirmPlaceHolder: promptDetails.message })
-                .then(onItemsSelected);
+        resultThenable = showCheckboxQuickPick(checkboxQuickPickItems, {
+            confirmPlaceHolder: promptDetails.message,
+        }).then(onItemsSelected);
     }
 
     return resultThenable;
 }
 
-async function showInputPrompt(promptDetails: IShowInputPromptRequestArgs): Promise<IShowInputPromptResponseBody> {
-    const responseText = await vscode.window.showInputBox({ placeHolder: promptDetails.name + ": " });
+async function showInputPrompt(
+    promptDetails: IShowInputPromptRequestArgs,
+): Promise<IShowInputPromptResponseBody> {
+    const responseText = await vscode.window.showInputBox({
+        placeHolder: promptDetails.name + ": ",
+    });
     return onInputEntered(responseText);
 }
 
-function onItemsSelected(chosenItems: ICheckboxQuickPickItem[] | undefined): IShowChoicePromptResponseBody {
+function onItemsSelected(
+    chosenItems: ICheckboxQuickPickItem[] | undefined,
+): IShowChoicePromptResponseBody {
     if (chosenItems !== undefined) {
         return {
             promptCancelled: false,
-            responseText: chosenItems.filter((item) => item.isSelected).map((item) => item.label).join(", "),
+            responseText: chosenItems
+                .filter((item) => item.isSelected)
+                .map((item) => item.label)
+                .join(", "),
         };
     } else {
         // User cancelled the prompt, send the cancellation
@@ -140,7 +157,9 @@ function onItemsSelected(chosenItems: ICheckboxQuickPickItem[] | undefined): ISh
     }
 }
 
-function onItemSelected(chosenItem: vscode.QuickPickItem | undefined): IShowChoicePromptResponseBody {
+function onItemSelected(
+    chosenItem: vscode.QuickPickItem | undefined,
+): IShowChoicePromptResponseBody {
     if (chosenItem !== undefined) {
         return {
             promptCancelled: false,
@@ -155,7 +174,9 @@ function onItemSelected(chosenItem: vscode.QuickPickItem | undefined): IShowChoi
     }
 }
 
-function onInputEntered(responseText: string | undefined): IShowInputPromptResponseBody {
+function onInputEntered(
+    responseText: string | undefined,
+): IShowInputPromptResponseBody {
     if (responseText !== undefined) {
         return {
             promptCancelled: false,
@@ -176,43 +197,69 @@ export class ConsoleFeature extends LanguageClientConsumer {
     constructor(private logger: ILogger) {
         super();
         this.commands = [
-            vscode.commands.registerCommand("PowerShell.RunSelection", async () => {
-                if (vscode.window.activeTerminal &&
-                    vscode.window.activeTerminal.name !== "PowerShell Extension") {
-                    this.logger.write("PowerShell Extension Terminal is not active! Running in current terminal using 'runSelectedText'.");
-                    await vscode.commands.executeCommand("workbench.action.terminal.runSelectedText");
-
-                    // We need to honor the focusConsoleOnExecute setting here too. However, the boolean that `show`
-                    // takes is called `preserveFocus` which when `true` the terminal will not take focus.
-                    // This is the inverse of focusConsoleOnExecute so we have to inverse the boolean.
-                    vscode.window.activeTerminal.show(!getSettings().integratedConsole.focusConsoleOnExecute);
-                    await vscode.commands.executeCommand("workbench.action.terminal.scrollToBottom");
-
-                    return;
-                }
-
-                const editor = vscode.window.activeTextEditor;
-                if (editor === undefined) {
-                    return;
-                }
-
-                let selectionRange: vscode.Range;
-
-                if (!editor.selection.isEmpty) {
-                    selectionRange = new vscode.Range(editor.selection.start, editor.selection.end);
-                } else {
-                    selectionRange = editor.document.lineAt(editor.selection.start.line).range;
-                }
-                const client = await LanguageClientConsumer.getLanguageClient();
-                await client.sendRequest(EvaluateRequestType, {
-                    expression: editor.document.getText(selectionRange),
-                });
-
-                // Show the Extension Terminal if it isn't already visible and
-                // scroll terminal to bottom so new output is visible
-                await vscode.commands.executeCommand("PowerShell.ShowSessionConsole", true);
-                await vscode.commands.executeCommand("workbench.action.terminal.scrollToBottom");
-            }),
+            vscode.commands.registerCommand(
+                "PowerShell.RunSelection",
+                async () => {
+                    if (
+                        vscode.window.activeTerminal &&
+                        vscode.window.activeTerminal.name !==
+                            "PowerShell Extension"
+                    ) {
+                        this.logger.write(
+                            "PowerShell Extension Terminal is not active! Running in current terminal using 'runSelectedText'.",
+                        );
+                        await vscode.commands.executeCommand(
+                            "workbench.action.terminal.runSelectedText",
+                        );
+
+                        // We need to honor the focusConsoleOnExecute setting here too. However, the boolean that `show`
+                        // takes is called `preserveFocus` which when `true` the terminal will not take focus.
+                        // This is the inverse of focusConsoleOnExecute so we have to inverse the boolean.
+                        vscode.window.activeTerminal.show(
+                            !getSettings().integratedConsole
+                                .focusConsoleOnExecute,
+                        );
+                        await vscode.commands.executeCommand(
+                            "workbench.action.terminal.scrollToBottom",
+                        );
+
+                        return;
+                    }
+
+                    const editor = vscode.window.activeTextEditor;
+                    if (editor === undefined) {
+                        return;
+                    }
+
+                    let selectionRange: vscode.Range;
+
+                    if (!editor.selection.isEmpty) {
+                        selectionRange = new vscode.Range(
+                            editor.selection.start,
+                            editor.selection.end,
+                        );
+                    } else {
+                        selectionRange = editor.document.lineAt(
+                            editor.selection.start.line,
+                        ).range;
+                    }
+                    const client =
+                        await LanguageClientConsumer.getLanguageClient();
+                    await client.sendRequest(EvaluateRequestType, {
+                        expression: editor.document.getText(selectionRange),
+                    });
+
+                    // Show the Extension Terminal if it isn't already visible and
+                    // scroll terminal to bottom so new output is visible
+                    await vscode.commands.executeCommand(
+                        "PowerShell.ShowSessionConsole",
+                        true,
+                    );
+                    await vscode.commands.executeCommand(
+                        "workbench.action.terminal.scrollToBottom",
+                    );
+                },
+            ),
         ];
     }
 
@@ -230,11 +277,13 @@ export class ConsoleFeature extends LanguageClientConsumer {
         this.handlers = [
             languageClient.onRequest(
                 ShowChoicePromptRequestType,
-                (promptDetails) => showChoicePrompt(promptDetails)),
+                (promptDetails) => showChoicePrompt(promptDetails),
+            ),
 
             languageClient.onRequest(
                 ShowInputPromptRequestType,
-                (promptDetails) => showInputPrompt(promptDetails)),
+                (promptDetails) => showInputPrompt(promptDetails),
+            ),
         ];
     }
 }
diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts
index e5dbf4984d..f45e674fb9 100644
--- a/src/features/DebugSession.ts
+++ b/src/features/DebugSession.ts
@@ -1,49 +1,51 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+import type { DebugProtocol } from "@vscode/debugprotocol";
+import path from "path";
 import {
-  debug,
-  type CancellationToken,
-  CancellationTokenSource,
-  type DebugAdapterDescriptor,
-  type DebugAdapterDescriptorFactory,
-  DebugAdapterExecutable,
-  DebugAdapterNamedPipeServer,
-  type DebugConfiguration,
-  type DebugConfigurationProvider,
-  type DebugSession,
-  type ExtensionContext,
-  type WorkspaceFolder,
-  Disposable,
-  window,
-  extensions,
-  workspace,
-  commands,
-  type InputBoxOptions,
-  type QuickPickItem,
-  type QuickPickOptions,
-  DebugConfigurationProviderTriggerKind,
-  type DebugAdapterTrackerFactory,
-  type DebugAdapterTracker,
-  type LogOutputChannel,
+    CancellationTokenSource,
+    DebugAdapterExecutable,
+    DebugAdapterNamedPipeServer,
+    DebugConfigurationProviderTriggerKind,
+    Disposable,
+    commands,
+    debug,
+    extensions,
+    window,
+    workspace,
+    type CancellationToken,
+    type DebugAdapterDescriptor,
+    type DebugAdapterDescriptorFactory,
+    type DebugAdapterTracker,
+    type DebugAdapterTrackerFactory,
+    type DebugConfiguration,
+    type DebugConfigurationProvider,
+    type DebugSession,
+    type ExtensionContext,
+    type InputBoxOptions,
+    type LogOutputChannel,
+    type QuickPickItem,
+    type QuickPickOptions,
+    type WorkspaceFolder,
 } from "vscode";
-import type { DebugProtocol } from "@vscode/debugprotocol";
 import { NotificationType, RequestType } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
 import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { ILogger } from "../logging";
 import { OperatingSystem, getPlatformDetails } from "../platform";
 import { PowerShellProcess } from "../process";
-import { type IEditorServicesSessionDetails, SessionManager } from "../session";
+import { SessionManager, type IEditorServicesSessionDetails } from "../session";
 import { getSettings } from "../settings";
-import path from "path";
 import { checkIfFileExists } from "../utils";
 
-export const StartDebuggerNotificationType =
-    new NotificationType<void>("powerShell/startDebugger");
+export const StartDebuggerNotificationType = new NotificationType<void>(
+    "powerShell/startDebugger",
+);
 
-export const StopDebuggerNotificationType =
-    new NotificationType<void>("powerShell/stopDebugger");
+export const StopDebuggerNotificationType = new NotificationType<void>(
+    "powerShell/stopDebugger",
+);
 
 export enum DebugConfig {
     LaunchCurrentFile,
@@ -59,7 +61,10 @@ export enum DebugConfig {
 /** Make the implicit behavior of undefined and null in the debug api more explicit  */
 type PREVENT_DEBUG_START = undefined;
 type PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG = null;
-type ResolveDebugConfigurationResult = DebugConfiguration | PREVENT_DEBUG_START | PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
+type ResolveDebugConfigurationResult =
+    | DebugConfiguration
+    | PREVENT_DEBUG_START
+    | PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
 
 const PREVENT_DEBUG_START = undefined;
 const PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG = null;
@@ -78,7 +83,7 @@ export const DebugConfigurations: Record<DebugConfig, DebugConfiguration> = {
         name: "PowerShell: Launch Script",
         type: "PowerShell",
         request: "launch",
-        script: "Enter path or command to execute, for example: \"${workspaceFolder}/src/foo.ps1\" or \"Invoke-Pester\"",
+        script: 'Enter path or command to execute, for example: "${workspaceFolder}/src/foo.ps1" or "Invoke-Pester"',
         args: [],
     },
     [DebugConfig.InteractiveSession]: {
@@ -103,13 +108,13 @@ export const DebugConfigurations: Record<DebugConfig, DebugConfiguration> = {
         name: "PowerShell: Module Interactive Session",
         type: "PowerShell",
         request: "launch",
-        script: "Enter command to import your binary module, for example: \"Import-Module -Force ${workspaceFolder}/path/to/module.psd1|dll\"",
+        script: 'Enter command to import your binary module, for example: "Import-Module -Force ${workspaceFolder}/path/to/module.psd1|dll"',
     },
     [DebugConfig.BinaryModule]: {
         name: "PowerShell: Binary Module Interactive",
         type: "PowerShell",
         request: "launch",
-        script: "Enter command to import your binary module, for example: \"Import-Module -Force ${workspaceFolder}/path/to/module.psd1|dll\"",
+        script: 'Enter command to import your binary module, for example: "Import-Module -Force ${workspaceFolder}/path/to/module.psd1|dll"',
         createTemporaryIntegratedConsole: true,
         attachDotnetDebugger: true,
     },
@@ -120,18 +125,24 @@ export const DebugConfigurations: Record<DebugConfig, DebugConfiguration> = {
         script: "Invoke-Pester",
         createTemporaryIntegratedConsole: true,
         attachDotnetDebugger: true,
-    }
+    },
 };
 
-export class DebugSessionFeature extends LanguageClientConsumer
-    implements DebugConfigurationProvider, DebugAdapterDescriptorFactory {
+export class DebugSessionFeature
+    extends LanguageClientConsumer
+    implements DebugConfigurationProvider, DebugAdapterDescriptorFactory
+{
     private tempDebugProcess: PowerShellProcess | undefined;
     private tempSessionDetails: IEditorServicesSessionDetails | undefined;
     private commands: Disposable[] = [];
     private handlers: Disposable[] = [];
     private adapterName = "PowerShell";
 
-    constructor(context: ExtensionContext, private sessionManager: SessionManager, private logger: ILogger) {
+    constructor(
+        context: ExtensionContext,
+        private sessionManager: SessionManager,
+        private logger: ILogger,
+    ) {
         super();
 
         this.activateDebugAdaptor(context);
@@ -140,15 +151,22 @@ export class DebugSessionFeature extends LanguageClientConsumer
         // substitutions in VS Code debug configurations are required to return
         // strings. Hence to the `toString()` on these.
         this.commands = [
-            commands.registerCommand("PowerShell.PickPSHostProcess", async () => {
-                const processId = await this.pickPSHostProcess();
-                return processId?.toString();
-            }),
-
-            commands.registerCommand("PowerShell.PickRunspace", async (processId) => {
-                const runspace = await this.pickRunspace(processId);
-                return runspace?.toString();
-            }, this),
+            commands.registerCommand(
+                "PowerShell.PickPSHostProcess",
+                async () => {
+                    const processId = await this.pickPSHostProcess();
+                    return processId?.toString();
+                },
+            ),
+
+            commands.registerCommand(
+                "PowerShell.PickRunspace",
+                async (processId) => {
+                    const runspace = await this.pickRunspace(processId);
+                    return runspace?.toString();
+                },
+                this,
+            ),
         ];
     }
 
@@ -166,19 +184,25 @@ export class DebugSessionFeature extends LanguageClientConsumer
     public activateDebugAdaptor(context: ExtensionContext): void {
         const triggers = [
             DebugConfigurationProviderTriggerKind.Initial,
-            DebugConfigurationProviderTriggerKind.Dynamic
+            DebugConfigurationProviderTriggerKind.Dynamic,
         ];
 
-
         for (const triggerKind of triggers) {
             context.subscriptions.push(
-                debug.registerDebugConfigurationProvider(this.adapterName, this, triggerKind)
+                debug.registerDebugConfigurationProvider(
+                    this.adapterName,
+                    this,
+                    triggerKind,
+                ),
             );
         }
 
         context.subscriptions.push(
-            debug.registerDebugAdapterTrackerFactory(this.adapterName, new PowerShellDebugAdapterTrackerFactory(this.adapterName)),
-            debug.registerDebugAdapterDescriptorFactory(this.adapterName, this)
+            debug.registerDebugAdapterTrackerFactory(
+                this.adapterName,
+                new PowerShellDebugAdapterTrackerFactory(this.adapterName),
+            ),
+            debug.registerDebugAdapterDescriptorFactory(this.adapterName, this),
         );
     }
 
@@ -186,23 +210,30 @@ export class DebugSessionFeature extends LanguageClientConsumer
         this.handlers = [
             languageClient.onNotification(
                 StartDebuggerNotificationType,
-                () => void debug.startDebugging(undefined, DebugConfigurations[DebugConfig.InteractiveSession])),
+                () =>
+                    void debug.startDebugging(
+                        undefined,
+                        DebugConfigurations[DebugConfig.InteractiveSession],
+                    ),
+            ),
 
             languageClient.onNotification(
                 StopDebuggerNotificationType,
-                () => void debug.stopDebugging(undefined))
+                () => void debug.stopDebugging(undefined),
+            ),
         ];
     }
 
     public async provideDebugConfigurations(
         _folder: WorkspaceFolder | undefined,
-        _token?: CancellationToken): Promise<DebugConfiguration[]> {
-
+        _token?: CancellationToken,
+    ): Promise<DebugConfiguration[]> {
         const debugConfigPickItems = [
             {
                 id: DebugConfig.LaunchCurrentFile,
                 label: "Launch Current File",
-                description: "Launch and debug the file in the currently active editor window",
+                description:
+                    "Launch and debug the file in the currently active editor window",
             },
             {
                 id: DebugConfig.LaunchScript,
@@ -212,39 +243,45 @@ export class DebugSessionFeature extends LanguageClientConsumer
             {
                 id: DebugConfig.InteractiveSession,
                 label: "Interactive Session",
-                description: "Debug commands executed from the PowerShell Extension Terminal",
+                description:
+                    "Debug commands executed from the PowerShell Extension Terminal",
             },
             {
                 id: DebugConfig.AttachHostProcess,
                 label: "Attach",
-                description: "Attach the debugger to a running PowerShell Host Process",
+                description:
+                    "Attach the debugger to a running PowerShell Host Process",
             },
             {
                 id: DebugConfig.RunPester,
                 label: "Run Pester Tests",
-                description: "Debug Pester Tests detected in your current directory (runs Invoke-Pester)",
+                description:
+                    "Debug Pester Tests detected in your current directory (runs Invoke-Pester)",
             },
             {
                 id: DebugConfig.ModuleInteractiveSession,
                 label: "Interactive Session (Module)",
-                description: "Debug commands executed from the PowerShell Extension Terminal after auto-loading your module",
+                description:
+                    "Debug commands executed from the PowerShell Extension Terminal after auto-loading your module",
             },
             {
                 id: DebugConfig.BinaryModule,
                 label: "Interactive Session (Binary Module)",
-                description: "Debug a .NET binary or hybrid module loaded into a PowerShell session. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
+                description:
+                    "Debug a .NET binary or hybrid module loaded into a PowerShell session. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
             },
             {
                 id: DebugConfig.RunPester,
                 label: "Run Pester Tests (Binary Module)",
-                description: "Debug a .NET binary or hybrid module by running Pester tests. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
+                description:
+                    "Debug a .NET binary or hybrid module by running Pester tests. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
             },
         ];
 
-        const launchSelection =
-            await window.showQuickPick(
-                debugConfigPickItems,
-                { placeHolder: "Select a PowerShell debug configuration" });
+        const launchSelection = await window.showQuickPick(
+            debugConfigPickItems,
+            { placeHolder: "Select a PowerShell debug configuration" },
+        );
 
         if (launchSelection) {
             return [DebugConfigurations[launchSelection.id]];
@@ -258,21 +295,27 @@ export class DebugSessionFeature extends LanguageClientConsumer
     public async resolveDebugConfiguration(
         _folder: WorkspaceFolder | undefined,
         config: DebugConfiguration,
-        _token?: CancellationToken): Promise<ResolveDebugConfigurationResult> {
-
+        _token?: CancellationToken,
+    ): Promise<ResolveDebugConfigurationResult> {
         // NOTE: We intentionally do not touch the `cwd` setting of the config.
 
         if (!config.request) {
             // No launch.json, create the default configuration for both unsaved
             // (Untitled) and saved documents.
-            const LaunchCurrentFileConfig = DebugConfigurations[DebugConfig.LaunchCurrentFile];
+            const LaunchCurrentFileConfig =
+                DebugConfigurations[DebugConfig.LaunchCurrentFile];
             config = { ...config, ...LaunchCurrentFileConfig };
             config.current_document = true;
         }
 
-        if (config.script === "${file}" || config.script === "${relativeFile}") {
+        if (
+            config.script === "${file}" ||
+            config.script === "${relativeFile}"
+        ) {
             if (window.activeTextEditor === undefined) {
-                void this.logger.writeAndShowError("To debug the 'Current File', you must first open a PowerShell script file in the editor.");
+                void this.logger.writeAndShowError(
+                    "To debug the 'Current File', you must first open a PowerShell script file in the editor.",
+                );
                 return PREVENT_DEBUG_START;
             }
             config.current_document = true;
@@ -290,22 +333,25 @@ export class DebugSessionFeature extends LanguageClientConsumer
     public async resolveDebugConfigurationWithSubstitutedVariables(
         _folder: WorkspaceFolder | undefined,
         config: DebugConfiguration,
-        _token?: CancellationToken): Promise<ResolveDebugConfigurationResult> {
-
+        _token?: CancellationToken,
+    ): Promise<ResolveDebugConfigurationResult> {
         let resolvedConfig: ResolveDebugConfigurationResult;
 
         // Prevent the Debug Console from opening
         config.internalConsoleOptions = "neverOpen";
 
         const settings = getSettings();
-        config.createTemporaryIntegratedConsole ??= settings.debugging.createTemporaryIntegratedConsole;
+        config.createTemporaryIntegratedConsole ??=
+            settings.debugging.createTemporaryIntegratedConsole;
         config.executeMode ??= settings.debugging.executeMode;
         if (config.request === "attach") {
             resolvedConfig = await this.resolveAttachDebugConfiguration(config);
         } else if (config.request === "launch") {
             resolvedConfig = await this.resolveLaunchDebugConfiguration(config);
         } else {
-            void this.logger.writeAndShowError(`PowerShell debug configuration's request type was invalid: '${config.request}'.`);
+            void this.logger.writeAndShowError(
+                `PowerShell debug configuration's request type was invalid: '${config.request}'.`,
+            );
             return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
         }
 
@@ -320,11 +366,12 @@ export class DebugSessionFeature extends LanguageClientConsumer
     // make this method async.
     public async createDebugAdapterDescriptor(
         session: DebugSession,
-        _executable: DebugAdapterExecutable | undefined): Promise<DebugAdapterDescriptor | undefined> {
-
+        _executable: DebugAdapterExecutable | undefined,
+    ): Promise<DebugAdapterDescriptor | undefined> {
         await this.sessionManager.start();
 
-        const sessionDetails = session.configuration.createTemporaryIntegratedConsole
+        const sessionDetails = session.configuration
+            .createTemporaryIntegratedConsole
             ? await this.createTemporaryIntegratedConsole(session)
             : this.sessionManager.getSessionDetails();
 
@@ -335,39 +382,61 @@ export class DebugSessionFeature extends LanguageClientConsumer
         // Create or show the debug terminal (either temporary or session).
         this.sessionManager.showDebugTerminal(true);
 
-        this.logger.writeDebug(`Connecting to pipe: ${sessionDetails.debugServicePipeName}`);
-        this.logger.writeDebug(`Debug configuration: ${JSON.stringify(session.configuration, undefined, 2)}`);
+        this.logger.writeDebug(
+            `Connecting to pipe: ${sessionDetails.debugServicePipeName}`,
+        );
+        this.logger.writeDebug(
+            `Debug configuration: ${JSON.stringify(session.configuration, undefined, 2)}`,
+        );
 
-        return new DebugAdapterNamedPipeServer(sessionDetails.debugServicePipeName);
+        return new DebugAdapterNamedPipeServer(
+            sessionDetails.debugServicePipeName,
+        );
     }
 
-    private async resolveLaunchDebugConfiguration(config: DebugConfiguration): Promise<ResolveDebugConfigurationResult> {
+    private async resolveLaunchDebugConfiguration(
+        config: DebugConfiguration,
+    ): Promise<ResolveDebugConfigurationResult> {
         // Check the languageId and file extension only for current documents
         // (which includes untitled documents). This prevents accidentally
         // running the debugger for an open non-PowerShell file.
         if (config.current_document) {
             const currentDocument = window.activeTextEditor?.document;
             if (currentDocument?.languageId !== "powershell") {
-                void this.logger.writeAndShowError(`PowerShell does not support debugging this language mode: '${currentDocument?.languageId}'.`);
+                void this.logger.writeAndShowError(
+                    `PowerShell does not support debugging this language mode: '${currentDocument?.languageId}'.`,
+                );
                 return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
             }
 
             if (await checkIfFileExists(config.script)) {
                 const ext = path.extname(config.script).toLowerCase();
                 if (!(ext === ".ps1" || ext === ".psm1")) {
-                    void this.logger.writeAndShowError(`PowerShell does not support debugging this file type: '${path.basename(config.script)}'.`);
+                    void this.logger.writeAndShowError(
+                        `PowerShell does not support debugging this file type: '${path.basename(config.script)}'.`,
+                    );
                     return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
                 }
             }
         }
 
-        if (config.untitled_document && config.createTemporaryIntegratedConsole) {
-            void this.logger.writeAndShowError("PowerShell does not support debugging untitled files in a temporary console.");
+        if (
+            config.untitled_document &&
+            config.createTemporaryIntegratedConsole
+        ) {
+            void this.logger.writeAndShowError(
+                "PowerShell does not support debugging untitled files in a temporary console.",
+            );
             return PREVENT_DEBUG_START;
         }
 
-        if (!config.createTemporaryIntegratedConsole && config.attachDotnetDebugger) {
-            void this.logger.writeAndShowError("dotnet debugging without using a temporary console is currently not supported. Please updated your launch config to include createTemporaryIntegratedConsole: true.");
+        if (
+            !config.createTemporaryIntegratedConsole &&
+            config.attachDotnetDebugger
+        ) {
+            void this.logger.writeAndShowError(
+                "dotnet debugging without using a temporary console is currently not supported. Please updated your launch config to include createTemporaryIntegratedConsole: true.",
+            );
             return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
         }
 
@@ -378,16 +447,24 @@ export class DebugSessionFeature extends LanguageClientConsumer
         return config;
     }
 
-    private resolveAttachDotnetDebugConfiguration(config: DebugConfiguration): ResolveDebugConfigurationResult {
+    private resolveAttachDotnetDebugConfiguration(
+        config: DebugConfiguration,
+    ): ResolveDebugConfigurationResult {
         if (!extensions.getExtension("ms-dotnettools.csharp")) {
-            void this.logger.writeAndShowError("You specified attachDotnetDebugger in your PowerShell Launch configuration but the C# extension is not installed. Please install the C# extension and try again.");
+            void this.logger.writeAndShowError(
+                "You specified attachDotnetDebugger in your PowerShell Launch configuration but the C# extension is not installed. Please install the C# extension and try again.",
+            );
             return PREVENT_DEBUG_START;
         }
 
-        const dotnetDebuggerConfig = this.getDotnetNamedConfigOrDefault(config.dotnetDebuggerConfigName);
+        const dotnetDebuggerConfig = this.getDotnetNamedConfigOrDefault(
+            config.dotnetDebuggerConfigName,
+        );
 
         if (dotnetDebuggerConfig === undefined) {
-            void this.logger.writeAndShowError(`You specified dotnetDebuggerConfigName in your PowerShell Launch configuration but a matching launch config was not found. Please ensure you have a coreclr attach config with the name ${config.dotnetDebuggerConfigName} in your launch.json file or remove dotnetDebuggerConfigName from your PowerShell Launch configuration to use the defaults`);
+            void this.logger.writeAndShowError(
+                `You specified dotnetDebuggerConfigName in your PowerShell Launch configuration but a matching launch config was not found. Please ensure you have a coreclr attach config with the name ${config.dotnetDebuggerConfigName} in your launch.json file or remove dotnetDebuggerConfigName from your PowerShell Launch configuration to use the defaults`,
+            );
             return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
         }
 
@@ -395,12 +472,17 @@ export class DebugSessionFeature extends LanguageClientConsumer
         return config;
     }
 
-    private async createTemporaryIntegratedConsole(session: DebugSession): Promise<IEditorServicesSessionDetails | undefined> {
+    private async createTemporaryIntegratedConsole(
+        session: DebugSession,
+    ): Promise<IEditorServicesSessionDetails | undefined> {
         const settings = getSettings();
-        this.tempDebugProcess = await this.sessionManager.createDebugSessionProcess(settings);
+        this.tempDebugProcess =
+            await this.sessionManager.createDebugSessionProcess(settings);
         // TODO: Maybe set a timeout on the cancellation token?
         const cancellationTokenSource = new CancellationTokenSource();
-        this.tempSessionDetails = await this.tempDebugProcess.start(cancellationTokenSource.token);
+        this.tempSessionDetails = await this.tempDebugProcess.start(
+            cancellationTokenSource.token,
+        );
 
         // NOTE: Dotnet attach debugging is only currently supported if a temporary debug terminal is used, otherwise we get lots of lock conflicts from loading the assemblies.
         if (session.configuration.attachDotnetDebugger) {
@@ -409,73 +491,103 @@ export class DebugSessionFeature extends LanguageClientConsumer
             // Will wait until the process is started and available before attaching
             const pid = await this.tempDebugProcess.getPid();
             if (pid === undefined) {
-                void this.logger.writeAndShowError("Attach Dotnet Debugger was specified but the PowerShell temporary debug session failed to start. This is probably a bug.");
+                void this.logger.writeAndShowError(
+                    "Attach Dotnet Debugger was specified but the PowerShell temporary debug session failed to start. This is probably a bug.",
+                );
                 return PREVENT_DEBUG_START;
             }
             dotnetAttachConfig.processId = pid;
 
             // Ensure the .NET session stops before the PowerShell session so that the .NET debug session doesn't emit an error about the process unexpectedly terminating.
             let tempConsoleDotnetAttachSession: DebugSession;
-            const startDebugEvent = debug.onDidStartDebugSession(dotnetAttachSession => {
-                if (dotnetAttachSession.configuration.name != dotnetAttachConfig.name) { return; }
-
-                // Makes the event one-time
-                // HACK: This seems like you would be calling a method on a variable not assigned yet, but it does work in the flow.
-                // The dispose shorthand demonry for making an event one-time courtesy of: https://github.com/OmniSharp/omnisharp-vscode/blob/b8b07bb12557b4400198895f82a94895cb90c461/test/integrationTests/launchConfiguration.integration.test.ts#L41-L45
-                startDebugEvent.dispose();
-
-                this.logger.writeDebug(`Debugger session detected: ${dotnetAttachSession.name} (${dotnetAttachSession.id})`);
-
-                tempConsoleDotnetAttachSession = dotnetAttachSession;
-
-                const stopDebugEvent = debug.onDidTerminateDebugSession(async tempConsoleSession => {
-                    if (tempConsoleDotnetAttachSession.parentSession?.id !== tempConsoleSession.id) { return; }
+            const startDebugEvent = debug.onDidStartDebugSession(
+                (dotnetAttachSession) => {
+                    if (
+                        dotnetAttachSession.configuration.name !=
+                        dotnetAttachConfig.name
+                    ) {
+                        return;
+                    }
 
                     // Makes the event one-time
-                    stopDebugEvent.dispose();
-
-                    this.logger.writeDebug(`Debugger session terminated: ${tempConsoleSession.name} (${tempConsoleSession.id})`);
-
-                    // HACK: As of 2023-08-17, there is no vscode debug API to request the C# debugger to detach, so we send it a custom DAP request instead.
-                    const disconnectRequest: DebugProtocol.DisconnectRequest = {
-                        command: "disconnect",
-                        seq: 0,
-                        type: "request",
-                        arguments: {
-                            restart: false,
-                            terminateDebuggee: false,
-                            suspendDebuggee: false
-                        }
-                    };
-
-                    try {
-                        await dotnetAttachSession.customRequest(
-                            disconnectRequest.command,
-                            disconnectRequest.arguments
-                        );
-                    } catch (err) {
-                        this.logger.writeWarning(`Disconnect request to dotnet debugger failed: ${err}`);
-                    }
-                });
-            });
+                    // HACK: This seems like you would be calling a method on a variable not assigned yet, but it does work in the flow.
+                    // The dispose shorthand demonry for making an event one-time courtesy of: https://github.com/OmniSharp/omnisharp-vscode/blob/b8b07bb12557b4400198895f82a94895cb90c461/test/integrationTests/launchConfiguration.integration.test.ts#L41-L45
+                    startDebugEvent.dispose();
+
+                    this.logger.writeDebug(
+                        `Debugger session detected: ${dotnetAttachSession.name} (${dotnetAttachSession.id})`,
+                    );
+
+                    tempConsoleDotnetAttachSession = dotnetAttachSession;
+
+                    const stopDebugEvent = debug.onDidTerminateDebugSession(
+                        async (tempConsoleSession) => {
+                            if (
+                                tempConsoleDotnetAttachSession.parentSession
+                                    ?.id !== tempConsoleSession.id
+                            ) {
+                                return;
+                            }
+
+                            // Makes the event one-time
+                            stopDebugEvent.dispose();
+
+                            this.logger.writeDebug(
+                                `Debugger session terminated: ${tempConsoleSession.name} (${tempConsoleSession.id})`,
+                            );
+
+                            // HACK: As of 2023-08-17, there is no vscode debug API to request the C# debugger to detach, so we send it a custom DAP request instead.
+                            const disconnectRequest: DebugProtocol.DisconnectRequest =
+                                {
+                                    command: "disconnect",
+                                    seq: 0,
+                                    type: "request",
+                                    arguments: {
+                                        restart: false,
+                                        terminateDebuggee: false,
+                                        suspendDebuggee: false,
+                                    },
+                                };
+
+                            try {
+                                await dotnetAttachSession.customRequest(
+                                    disconnectRequest.command,
+                                    disconnectRequest.arguments,
+                                );
+                            } catch (err) {
+                                this.logger.writeWarning(
+                                    `Disconnect request to dotnet debugger failed: ${err}`,
+                                );
+                            }
+                        },
+                    );
+                },
+            );
 
             // Start a child debug session to attach the dotnet debugger
             // TODO: Accommodate multi-folder workspaces if the C# code is in a different workspace folder
             await debug.startDebugging(undefined, dotnetAttachConfig, session);
-            this.logger.writeDebug(`Dotnet attach debug configuration: ${JSON.stringify(dotnetAttachConfig, undefined, 2)}`);
-            this.logger.writeDebug(`Attached dotnet debugger to process: ${pid}`);
+            this.logger.writeDebug(
+                `Dotnet attach debug configuration: ${JSON.stringify(dotnetAttachConfig, undefined, 2)}`,
+            );
+            this.logger.writeDebug(
+                `Attached dotnet debugger to process: ${pid}`,
+            );
         }
 
         return this.tempSessionDetails;
     }
 
-    private getDotnetNamedConfigOrDefault(configName?: string): ResolveDebugConfigurationResult {
+    private getDotnetNamedConfigOrDefault(
+        configName?: string,
+    ): ResolveDebugConfigurationResult {
         if (configName) {
             const debugConfigs = this.getLaunchConfigurations();
-            return debugConfigs.find(({ type, request, name }) =>
-                type === "coreclr" &&
-                request === "attach" &&
-                name === configName
+            return debugConfigs.find(
+                ({ type, request, name }) =>
+                    type === "coreclr" &&
+                    request === "attach" &&
+                    name === configName,
             );
         }
 
@@ -487,27 +599,41 @@ export class DebugSessionFeature extends LanguageClientConsumer
             request: "attach",
             processId: undefined,
             logging: {
-                moduleLoad: false
-            }
+                moduleLoad: false,
+            },
         };
     }
 
     /** Fetches all available vscode launch configurations. This is abstracted out for easier testing. */
     private getLaunchConfigurations(): DebugConfiguration[] {
-        return workspace.getConfiguration("launch").get<DebugConfiguration[]>("configurations") ?? [];
+        return (
+            workspace
+                .getConfiguration("launch")
+                .get<DebugConfiguration[]>("configurations") ?? []
+        );
     }
 
-    private async resolveAttachDebugConfiguration(config: DebugConfiguration): Promise<ResolveDebugConfigurationResult> {
+    private async resolveAttachDebugConfiguration(
+        config: DebugConfiguration,
+    ): Promise<ResolveDebugConfigurationResult> {
         const platformDetails = getPlatformDetails();
-        const versionDetails = this.sessionManager.getPowerShellVersionDetails();
+        const versionDetails =
+            this.sessionManager.getPowerShellVersionDetails();
         if (versionDetails === undefined) {
-            void this.logger.writeAndShowError(`PowerShell session version details were not found for '${config.name}'.`);
+            void this.logger.writeAndShowError(
+                `PowerShell session version details were not found for '${config.name}'.`,
+            );
             return PREVENT_DEBUG_START;
         }
 
         // Cross-platform attach to process was added in 6.2.0-preview.4.
-        if (versionDetails.version < "7.0.0" && platformDetails.operatingSystem !== OperatingSystem.Windows) {
-            void this.logger.writeAndShowError(`Attaching to a PowerShell Host Process on ${OperatingSystem[platformDetails.operatingSystem]} requires PowerShell 7.0 or higher (Current Version: ${versionDetails.version}).`);
+        if (
+            versionDetails.version < "7.0.0" &&
+            platformDetails.operatingSystem !== OperatingSystem.Windows
+        ) {
+            void this.logger.writeAndShowError(
+                `Attaching to a PowerShell Host Process on ${OperatingSystem[platformDetails.operatingSystem]} requires PowerShell 7.0 or higher (Current Version: ${versionDetails.version}).`,
+            );
             return PREVENT_DEBUG_START;
         }
 
@@ -522,18 +648,27 @@ export class DebugSessionFeature extends LanguageClientConsumer
 
         // If we were given a stringified int from the user, or from the picker
         // command, we need to parse it here.
-        if (typeof config.processId === "string" && config.processId != "current") {
+        if (
+            typeof config.processId === "string" &&
+            config.processId != "current"
+        ) {
             config.processId = parseInt(config.processId);
         }
 
         // NOTE: We don't support attaching to the Extension Terminal, even
         // though in the past it looked like we did. The implementation was
         // half-baked and left things unusable.
-        if (config.processId === "current" || config.processId === await this.sessionManager.getLanguageServerPid()) {
+        if (
+            config.processId === "current" ||
+            config.processId ===
+                (await this.sessionManager.getLanguageServerPid())
+        ) {
             // TODO: When (if ever) it's supported, we need to convert 0 and the
             // old notion of "current" to the actual process ID, like this:
             // config.processId = await this.sessionManager.getLanguageServerPid();
-            void this.logger.writeAndShowError("Attaching to the PowerShell Extension terminal is not supported. Please use the 'PowerShell: Interactive Session' debug configuration instead.");
+            void this.logger.writeAndShowError(
+                "Attaching to the PowerShell Extension terminal is not supported. Please use the 'PowerShell: Interactive Session' debug configuration instead.",
+            );
             return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
         }
 
@@ -550,7 +685,10 @@ export class DebugSessionFeature extends LanguageClientConsumer
 
     private async pickPSHostProcess(): Promise<number | undefined> {
         const client = await LanguageClientConsumer.getLanguageClient();
-        const response = await client.sendRequest(GetPSHostProcessesRequestType, {});
+        const response = await client.sendRequest(
+            GetPSHostProcessesRequestType,
+            {},
+        );
         const items: IProcessItem[] = [];
         for (const process of response) {
             let windowTitle = "";
@@ -566,7 +704,9 @@ export class DebugSessionFeature extends LanguageClientConsumer
         }
 
         if (items.length === 0) {
-            return Promise.reject(new Error("There are no PowerShell host processes to attach."));
+            return Promise.reject(
+                new Error("There are no PowerShell host processes to attach."),
+            );
         }
 
         const options: QuickPickOptions = {
@@ -582,7 +722,9 @@ export class DebugSessionFeature extends LanguageClientConsumer
 
     private async pickRunspace(processId: number): Promise<number | undefined> {
         const client = await LanguageClientConsumer.getLanguageClient();
-        const response = await client.sendRequest(GetRunspaceRequestType, { processId });
+        const response = await client.sendRequest(GetRunspaceRequestType, {
+            processId,
+        });
         const items: IRunspaceItem[] = [];
         for (const runspace of response) {
             items.push({
@@ -604,23 +746,32 @@ export class DebugSessionFeature extends LanguageClientConsumer
     }
 }
 
-class PowerShellDebugAdapterTrackerFactory implements DebugAdapterTrackerFactory, Disposable {
+class PowerShellDebugAdapterTrackerFactory
+    implements DebugAdapterTrackerFactory, Disposable
+{
     disposables: Disposable[] = [];
     constructor(private adapterName = "PowerShell") {}
 
-
     _log: LogOutputChannel | undefined;
     /** Lazily creates a {@link LogOutputChannel} for debug tracing, and presents it only when DAP logging is enabled.
-    *
-    * We want to use a shared output log for separate debug sessions as usually only one is running at a time and we
-    * dont need an output window for every debug session. We also want to leave it active so user can copy and paste
-    * even on run end. When user changes the setting and disables it getter will return undefined, which will result
-    * in a noop for the logging activities, effectively pausing logging but not disposing the output channel. If the
-    * user re-enables, then logging resumes.
-    */
+     *
+     * We want to use a shared output log for separate debug sessions as usually only one is running at a time and we
+     * dont need an output window for every debug session. We also want to leave it active so user can copy and paste
+     * even on run end. When user changes the setting and disables it getter will return undefined, which will result
+     * in a noop for the logging activities, effectively pausing logging but not disposing the output channel. If the
+     * user re-enables, then logging resumes.
+     */
     get log(): LogOutputChannel | undefined {
-        if (workspace.getConfiguration("powershell.developer").get<boolean>("traceDap") && this._log === undefined) {
-            this._log = window.createOutputChannel(`${this.adapterName}: Trace DAP`, { log: true });
+        if (
+            workspace
+                .getConfiguration("powershell.developer")
+                .get<boolean>("traceDap") &&
+            this._log === undefined
+        ) {
+            this._log = window.createOutputChannel(
+                `${this.adapterName}: Trace DAP`,
+                { log: true },
+            );
             this.disposables.push(this._log);
         }
         return this._log;
@@ -630,32 +781,50 @@ class PowerShellDebugAdapterTrackerFactory implements DebugAdapterTrackerFactory
     createDebugAdapterTracker(session: DebugSession): DebugAdapterTracker {
         const sessionInfo = `${this.adapterName} Debug Session: ${session.name} [${session.id}]`;
         return {
-            onWillStartSession: () => this.log?.info(`Starting ${sessionInfo}. Set log level to trace to see DAP messages beyond errors`),
+            onWillStartSession: () =>
+                this.log?.info(
+                    `Starting ${sessionInfo}. Set log level to trace to see DAP messages beyond errors`,
+                ),
             onWillStopSession: () => this.log?.info(`Stopping ${sessionInfo}`),
-            onExit: code => this.log?.info(`${sessionInfo} exited with code ${code}`),
+            onExit: (code) =>
+                this.log?.info(`${sessionInfo} exited with code ${code}`),
             onWillReceiveMessage: (m): void => {
                 this.log?.debug(`➡️${m.seq} ${m.type}: ${m.command}`);
-                if (m.arguments && (Array.isArray(m.arguments) ? m.arguments.length > 0 : Object.keys(m.arguments).length > 0)) {
-                    this.log?.trace(`${m.seq}: ` + JSON.stringify(m.arguments, undefined, 2));
+                if (
+                    m.arguments &&
+                    (Array.isArray(m.arguments)
+                        ? m.arguments.length > 0
+                        : Object.keys(m.arguments).length > 0)
+                ) {
+                    this.log?.trace(
+                        `${m.seq}: ` +
+                            JSON.stringify(m.arguments, undefined, 2),
+                    );
                 }
             },
-            onDidSendMessage: (m):void => {
-                const responseSummary = m.request_seq !== undefined
-                    ? `${m.success ? "✅" : "❌"}${m.request_seq} ${m.type}(${m.seq}): ${m.command}`
-                    : `⬅️${m.seq} ${m.type}: ${m.event ?? m.command}`;
-                this.log?.debug(
-                    responseSummary
-                );
-                if (m.body && (Array.isArray(m.body) ? m.body.length > 0 : Object.keys(m.body).length > 0)) {
-                    this.log?.trace(`${m.seq}: ` + JSON.stringify(m.body, undefined, 2));
+            onDidSendMessage: (m): void => {
+                const responseSummary =
+                    m.request_seq !== undefined
+                        ? `${m.success ? "✅" : "❌"}${m.request_seq} ${m.type}(${m.seq}): ${m.command}`
+                        : `⬅️${m.seq} ${m.type}: ${m.event ?? m.command}`;
+                this.log?.debug(responseSummary);
+                if (
+                    m.body &&
+                    (Array.isArray(m.body)
+                        ? m.body.length > 0
+                        : Object.keys(m.body).length > 0)
+                ) {
+                    this.log?.trace(
+                        `${m.seq}: ` + JSON.stringify(m.body, undefined, 2),
+                    );
                 }
             },
-            onError: e => this.log?.error(e),
+            onError: (e) => this.log?.error(e),
         };
     }
 
     dispose(): void {
-        this.disposables.forEach(d => d.dispose());
+        this.disposables.forEach((d) => d.dispose());
     }
 }
 
@@ -666,9 +835,12 @@ export class SpecifyScriptArgsFeature implements Disposable {
     constructor(context: ExtensionContext) {
         this.context = context;
 
-        this.command = commands.registerCommand("PowerShell.SpecifyScriptArgs", () => {
-            return this.specifyScriptArguments();
-        });
+        this.command = commands.registerCommand(
+            "PowerShell.SpecifyScriptArgs",
+            () => {
+                return this.specifyScriptArguments();
+            },
+        );
     }
 
     public dispose(): void {
@@ -680,10 +852,14 @@ export class SpecifyScriptArgsFeature implements Disposable {
 
         const options: InputBoxOptions = {
             ignoreFocusOut: true,
-            placeHolder: "Enter script arguments or leave empty to pass no args",
+            placeHolder:
+                "Enter script arguments or leave empty to pass no args",
         };
 
-        const prevArgs = this.context.workspaceState.get(powerShellDbgScriptArgsKey, "");
+        const prevArgs = this.context.workspaceState.get(
+            powerShellDbgScriptArgsKey,
+            "",
+        );
         if (prevArgs.length > 0) {
             options.value = prevArgs;
         }
@@ -692,7 +868,10 @@ export class SpecifyScriptArgsFeature implements Disposable {
         // When user cancel's the input box (by pressing Esc), the text value is undefined.
         // Let's not blow away the previous setting.
         if (text !== undefined) {
-            await this.context.workspaceState.update(powerShellDbgScriptArgsKey, text);
+            await this.context.workspaceState.update(
+                powerShellDbgScriptArgsKey,
+                text,
+            );
         }
 
         return text;
@@ -703,8 +882,7 @@ interface IProcessItem extends QuickPickItem {
     processId: number; // payload for the QuickPick UI
 }
 
-interface IGetPSHostProcessesArguments {
-}
+interface IGetPSHostProcessesArguments {}
 
 interface IPSHostProcessInfo {
     processName: string;
@@ -713,16 +891,17 @@ interface IPSHostProcessInfo {
     mainWindowTitle: string;
 }
 
-export const GetPSHostProcessesRequestType =
-    new RequestType<IGetPSHostProcessesArguments, IPSHostProcessInfo[], string>("powerShell/getPSHostProcesses");
-
+export const GetPSHostProcessesRequestType = new RequestType<
+    IGetPSHostProcessesArguments,
+    IPSHostProcessInfo[],
+    string
+>("powerShell/getPSHostProcesses");
 
 interface IRunspaceItem extends QuickPickItem {
     id: number; // payload for the QuickPick UI
 }
 
-interface IGetRunspaceRequestArguments {
-}
+interface IGetRunspaceRequestArguments {}
 
 interface IRunspace {
     id: number;
@@ -730,5 +909,8 @@ interface IRunspace {
     availability: string;
 }
 
-export const GetRunspaceRequestType =
-    new RequestType<IGetRunspaceRequestArguments, IRunspace[], string>("powerShell/getRunspace");
+export const GetRunspaceRequestType = new RequestType<
+    IGetRunspaceRequestArguments,
+    IRunspace[],
+    string
+>("powerShell/getRunspace");
diff --git a/src/features/Examples.ts b/src/features/Examples.ts
index 8dcddbeb79..d3c0b0da56 100644
--- a/src/features/Examples.ts
+++ b/src/features/Examples.ts
@@ -2,7 +2,7 @@
 // Licensed under the MIT License.
 
 import path = require("path");
-import utils = require("../utils")
+import utils = require("../utils");
 import vscode = require("vscode");
 
 export class ExamplesFeature implements vscode.Disposable {
@@ -10,13 +10,22 @@ export class ExamplesFeature implements vscode.Disposable {
     private examplesPath: vscode.Uri;
 
     constructor() {
-        this.examplesPath = vscode.Uri.file(path.resolve(__dirname, "../examples"));
-        this.command = vscode.commands.registerCommand("PowerShell.OpenExamplesFolder", async () => {
-            await vscode.commands.executeCommand("vscode.openFolder", this.examplesPath, true);
-            // Return existence of the path for testing. The `vscode.openFolder`
-            // command should do this, but doesn't (yet).
-            return utils.checkIfFileExists(this.examplesPath);
-        });
+        this.examplesPath = vscode.Uri.file(
+            path.resolve(__dirname, "../examples"),
+        );
+        this.command = vscode.commands.registerCommand(
+            "PowerShell.OpenExamplesFolder",
+            async () => {
+                await vscode.commands.executeCommand(
+                    "vscode.openFolder",
+                    this.examplesPath,
+                    true,
+                );
+                // Return existence of the path for testing. The `vscode.openFolder`
+                // command should do this, but doesn't (yet).
+                return utils.checkIfFileExists(this.examplesPath);
+            },
+        );
     }
 
     public dispose(): void {
diff --git a/src/features/ExpandAlias.ts b/src/features/ExpandAlias.ts
index 652be565c3..45e86be7e1 100644
--- a/src/features/ExpandAlias.ts
+++ b/src/features/ExpandAlias.ts
@@ -3,55 +3,76 @@
 
 import vscode = require("vscode");
 import { RequestType } from "vscode-languageclient";
-import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { LanguageClient } from "vscode-languageclient/node";
+import { LanguageClientConsumer } from "../languageClientConsumer";
 
-interface IExpandAliasRequestArguments {
-}
+interface IExpandAliasRequestArguments {}
 
 interface IExpandAliasRequestResponse {
-    text: string
+    text: string;
 }
 
-export const ExpandAliasRequestType = new RequestType<IExpandAliasRequestArguments, IExpandAliasRequestResponse, void>("powerShell/expandAlias");
+export const ExpandAliasRequestType = new RequestType<
+    IExpandAliasRequestArguments,
+    IExpandAliasRequestResponse,
+    void
+>("powerShell/expandAlias");
 
 export class ExpandAliasFeature extends LanguageClientConsumer {
     private command: vscode.Disposable;
 
     constructor() {
         super();
-        this.command = vscode.commands.registerCommand("PowerShell.ExpandAlias", async () => {
-            const editor = vscode.window.activeTextEditor;
-            if (editor === undefined) {
-                return;
-            }
-
-            const document = editor.document;
-            const selection = editor.selection;
-            const sls = selection.start;
-            const sle = selection.end;
-
-            let text: string;
-            let range: vscode.Range | vscode.Position;
-
-            if ((sls.character === sle.character) && (sls.line === sle.line)) {
-                text = document.getText();
-                range = new vscode.Range(0, 0, document.lineCount, text.length);
-            } else {
-                text = document.getText(selection);
-                range = new vscode.Range(sls.line, sls.character, sle.line, sle.character);
-            }
-
-            const client = await LanguageClientConsumer.getLanguageClient();
-            const result = await client.sendRequest(ExpandAliasRequestType, { text });
-            await editor.edit((editBuilder) => {
-                editBuilder.replace(range, result.text);
-            });
-        });
+        this.command = vscode.commands.registerCommand(
+            "PowerShell.ExpandAlias",
+            async () => {
+                const editor = vscode.window.activeTextEditor;
+                if (editor === undefined) {
+                    return;
+                }
+
+                const document = editor.document;
+                const selection = editor.selection;
+                const sls = selection.start;
+                const sle = selection.end;
+
+                let text: string;
+                let range: vscode.Range | vscode.Position;
+
+                if (sls.character === sle.character && sls.line === sle.line) {
+                    text = document.getText();
+                    range = new vscode.Range(
+                        0,
+                        0,
+                        document.lineCount,
+                        text.length,
+                    );
+                } else {
+                    text = document.getText(selection);
+                    range = new vscode.Range(
+                        sls.line,
+                        sls.character,
+                        sle.line,
+                        sle.character,
+                    );
+                }
+
+                const client = await LanguageClientConsumer.getLanguageClient();
+                const result = await client.sendRequest(
+                    ExpandAliasRequestType,
+                    { text },
+                );
+                await editor.edit((editBuilder) => {
+                    editBuilder.replace(range, result.text);
+                });
+            },
+        );
     }
 
-    // eslint-disable-next-line @typescript-eslint/no-empty-function
-    public override onLanguageClientSet(_languageClient: LanguageClient): void {}
+    public override onLanguageClientSet(
+        _languageClient: LanguageClient,
+        // eslint-disable-next-line @typescript-eslint/no-empty-function
+    ): void {}
 
     public dispose(): void {
         this.command.dispose();
diff --git a/src/features/ExtensionCommands.ts b/src/features/ExtensionCommands.ts
index 3f445199d4..c4ca7203b0 100644
--- a/src/features/ExtensionCommands.ts
+++ b/src/features/ExtensionCommands.ts
@@ -4,13 +4,16 @@
 import * as path from "path";
 import * as vscode from "vscode";
 import {
-    NotificationType, NotificationType0,
-    Position, Range, RequestType
+    NotificationType,
+    NotificationType0,
+    Position,
+    Range,
+    RequestType,
 } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
+import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { ILogger } from "../logging";
 import { getSettings, validateCwdSetting } from "../settings";
-import { LanguageClientConsumer } from "../languageClientConsumer";
 import { DebugConfig, DebugConfigurations } from "./DebugSession";
 
 export interface IExtensionCommand {
@@ -22,9 +25,11 @@ export interface IExtensionCommandQuickPickItem extends vscode.QuickPickItem {
     command: IExtensionCommand;
 }
 
-export const InvokeExtensionCommandRequestType =
-    new RequestType<IInvokeExtensionCommandRequestArguments, void, void>(
-        "powerShell/invokeExtensionCommand");
+export const InvokeExtensionCommandRequestType = new RequestType<
+    IInvokeExtensionCommandRequestArguments,
+    void,
+    void
+>("powerShell/invokeExtensionCommand");
 
 export interface IEditorContext {
     currentFileContent: string;
@@ -41,7 +46,8 @@ export interface IInvokeExtensionCommandRequestArguments {
 
 export const ExtensionCommandAddedNotificationType =
     new NotificationType<IExtensionCommandAddedNotificationBody>(
-        "powerShell/extensionCommandAdded");
+        "powerShell/extensionCommandAdded",
+    );
 
 export interface IExtensionCommandAddedNotificationBody {
     name: string;
@@ -60,23 +66,26 @@ function asCodePosition(value: Position): vscode.Position {
     return new vscode.Position(value.line, value.character);
 }
 
-export const GetEditorContextRequestType =
-    new RequestType<IGetEditorContextRequestArguments, IEditorContext, void>(
-        "editor/getEditorContext");
+export const GetEditorContextRequestType = new RequestType<
+    IGetEditorContextRequestArguments,
+    IEditorContext,
+    void
+>("editor/getEditorContext");
 
-export interface IGetEditorContextRequestArguments {
-}
+export interface IGetEditorContextRequestArguments {}
 
 // NOTE: The server at least now expects this response, but it's not used in any
 // way. In the future we could actually communicate an error to the user.
 enum EditorOperationResponse {
     Completed,
-    Failed
+    Failed,
 }
 
-export const InsertTextRequestType =
-    new RequestType<IInsertTextRequestArguments, EditorOperationResponse, void>(
-        "editor/insertText");
+export const InsertTextRequestType = new RequestType<
+    IInsertTextRequestArguments,
+    EditorOperationResponse,
+    void
+>("editor/insertText");
 
 export interface IInsertTextRequestArguments {
     filePath: string;
@@ -84,53 +93,72 @@ export interface IInsertTextRequestArguments {
     insertRange: Range;
 }
 
-export const SetSelectionRequestType =
-    new RequestType<ISetSelectionRequestArguments, EditorOperationResponse, void>(
-        "editor/setSelection");
+export const SetSelectionRequestType = new RequestType<
+    ISetSelectionRequestArguments,
+    EditorOperationResponse,
+    void
+>("editor/setSelection");
 
 export interface ISetSelectionRequestArguments {
     selectionRange: Range;
 }
 
-export const OpenFileRequestType =
-    new RequestType<IOpenFileDetails, EditorOperationResponse, void>(
-        "editor/openFile");
+export const OpenFileRequestType = new RequestType<
+    IOpenFileDetails,
+    EditorOperationResponse,
+    void
+>("editor/openFile");
 
 export interface IOpenFileDetails {
     filePath: string;
     preview: boolean;
 }
 
-export const NewFileRequestType =
-    new RequestType<string, EditorOperationResponse, void>(
-        "editor/newFile");
-
-export const CloseFileRequestType =
-    new RequestType<string, EditorOperationResponse, void>(
-        "editor/closeFile");
-
-export const SaveFileRequestType =
-    new RequestType<ISaveFileDetails, EditorOperationResponse, void>(
-        "editor/saveFile");
-
-export const ShowErrorMessageRequestType =
-    new RequestType<string, EditorOperationResponse, void>(
-        "editor/showErrorMessage");
-
-export const ShowWarningMessageRequestType =
-    new RequestType<string, EditorOperationResponse, void>(
-        "editor/showWarningMessage");
-
-export const ShowInformationMessageRequestType =
-    new RequestType<string, EditorOperationResponse, void>(
-        "editor/showInformationMessage");
-
-export const SetStatusBarMessageRequestType =
-    new RequestType<IStatusBarMessageDetails, EditorOperationResponse, void>(
-        "editor/setStatusBarMessage");
-
-export const ClearTerminalNotificationType =
-    new NotificationType0("editor/clearTerminal");
+export const NewFileRequestType = new RequestType<
+    string,
+    EditorOperationResponse,
+    void
+>("editor/newFile");
+
+export const CloseFileRequestType = new RequestType<
+    string,
+    EditorOperationResponse,
+    void
+>("editor/closeFile");
+
+export const SaveFileRequestType = new RequestType<
+    ISaveFileDetails,
+    EditorOperationResponse,
+    void
+>("editor/saveFile");
+
+export const ShowErrorMessageRequestType = new RequestType<
+    string,
+    EditorOperationResponse,
+    void
+>("editor/showErrorMessage");
+
+export const ShowWarningMessageRequestType = new RequestType<
+    string,
+    EditorOperationResponse,
+    void
+>("editor/showWarningMessage");
+
+export const ShowInformationMessageRequestType = new RequestType<
+    string,
+    EditorOperationResponse,
+    void
+>("editor/showInformationMessage");
+
+export const SetStatusBarMessageRequestType = new RequestType<
+    IStatusBarMessageDetails,
+    EditorOperationResponse,
+    void
+>("editor/setStatusBarMessage");
+
+export const ClearTerminalNotificationType = new NotificationType0(
+    "editor/clearTerminal",
+);
 
 export interface ISaveFileDetails {
     filePath: string;
@@ -155,40 +183,70 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
     constructor(private logger: ILogger) {
         super();
         this.commands = [
-            vscode.commands.registerCommand("PowerShell.ShowAdditionalCommands", async () => {
-                await this.showExtensionCommands();
-            }),
+            vscode.commands.registerCommand(
+                "PowerShell.ShowAdditionalCommands",
+                async () => {
+                    await this.showExtensionCommands();
+                },
+            ),
 
-            vscode.commands.registerCommand("PowerShell.InvokeRegisteredEditorCommand",
+            vscode.commands.registerCommand(
+                "PowerShell.InvokeRegisteredEditorCommand",
                 async (param: IInvokeRegisteredEditorCommandParameter) => {
                     const commandToExecute = this.extensionCommands.find(
-                        (x) => x.name === param.commandName);
+                        (x) => x.name === param.commandName,
+                    );
 
                     if (commandToExecute) {
-
-                        const client = await LanguageClientConsumer.getLanguageClient();
+                        const client =
+                            await LanguageClientConsumer.getLanguageClient();
                         await client.sendRequest(
                             InvokeExtensionCommandRequestType,
                             {
                                 name: commandToExecute.name,
-                                context: this.getEditorContext()
-                            });
+                                context: this.getEditorContext(),
+                            },
+                        );
                     }
-                }),
-
-            vscode.commands.registerCommand("PowerShell.ClosePanel",
-                async () => { await vscode.commands.executeCommand("workbench.action.togglePanel"); }),
-
-            vscode.commands.registerCommand("PowerShell.PositionPanelLeft",
-                async () => { await vscode.commands.executeCommand("workbench.action.positionPanelLeft"); }),
+                },
+            ),
 
-            vscode.commands.registerCommand("PowerShell.PositionPanelBottom",
-                async () => { await vscode.commands.executeCommand("workbench.action.positionPanelBottom"); }),
-
-            vscode.commands.registerCommand("PowerShell.Debug.Start",
+            vscode.commands.registerCommand(
+                "PowerShell.ClosePanel",
+                async () => {
+                    await vscode.commands.executeCommand(
+                        "workbench.action.togglePanel",
+                    );
+                },
+            ),
+
+            vscode.commands.registerCommand(
+                "PowerShell.PositionPanelLeft",
+                async () => {
+                    await vscode.commands.executeCommand(
+                        "workbench.action.positionPanelLeft",
+                    );
+                },
+            ),
+
+            vscode.commands.registerCommand(
+                "PowerShell.PositionPanelBottom",
                 async () => {
-                    await vscode.debug.startDebugging(undefined, DebugConfigurations[DebugConfig.LaunchCurrentFile]);
-                })
+                    await vscode.commands.executeCommand(
+                        "workbench.action.positionPanelBottom",
+                    );
+                },
+            ),
+
+            vscode.commands.registerCommand(
+                "PowerShell.Debug.Start",
+                async () => {
+                    await vscode.debug.startDebugging(
+                        undefined,
+                        DebugConfigurations[DebugConfig.LaunchCurrentFile],
+                    );
+                },
+            ),
         ];
     }
 
@@ -199,61 +257,68 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
         this.handlers = [
             languageClient.onNotification(
                 ExtensionCommandAddedNotificationType,
-                (command) => { this.addExtensionCommand(command); }),
+                (command) => {
+                    this.addExtensionCommand(command);
+                },
+            ),
 
-            languageClient.onRequest(
-                GetEditorContextRequestType,
-                (_details) => this.getEditorContext()),
+            languageClient.onRequest(GetEditorContextRequestType, (_details) =>
+                this.getEditorContext(),
+            ),
 
-            languageClient.onRequest(
-                InsertTextRequestType,
-                (details) => this.insertText(details)),
+            languageClient.onRequest(InsertTextRequestType, (details) =>
+                this.insertText(details),
+            ),
 
-            languageClient.onRequest(
-                SetSelectionRequestType,
-                (details) => this.setSelection(details)),
+            languageClient.onRequest(SetSelectionRequestType, (details) =>
+                this.setSelection(details),
+            ),
 
-            languageClient.onRequest(
-                NewFileRequestType,
-                (_content) => this.newFile(_content)),
+            languageClient.onRequest(NewFileRequestType, (_content) =>
+                this.newFile(_content),
+            ),
 
-            languageClient.onRequest(
-                OpenFileRequestType,
-                (filePath) => this.openFile(filePath)),
+            languageClient.onRequest(OpenFileRequestType, (filePath) =>
+                this.openFile(filePath),
+            ),
 
-            languageClient.onRequest(
-                CloseFileRequestType,
-                (filePath) => this.closeFile(filePath)),
+            languageClient.onRequest(CloseFileRequestType, (filePath) =>
+                this.closeFile(filePath),
+            ),
 
-            languageClient.onRequest(
-                SaveFileRequestType,
-                (saveFileDetails) => this.saveFile(saveFileDetails)),
+            languageClient.onRequest(SaveFileRequestType, (saveFileDetails) =>
+                this.saveFile(saveFileDetails),
+            ),
 
             languageClient.onRequest(
                 ShowInformationMessageRequestType,
-                (message) => this.showInformationMessage(message)),
+                (message) => this.showInformationMessage(message),
+            ),
 
-            languageClient.onRequest(
-                ShowErrorMessageRequestType,
-                (message) => this.showErrorMessage(message)),
+            languageClient.onRequest(ShowErrorMessageRequestType, (message) =>
+                this.showErrorMessage(message),
+            ),
 
-            languageClient.onRequest(
-                ShowWarningMessageRequestType,
-                (message) => this.showWarningMessage(message)),
+            languageClient.onRequest(ShowWarningMessageRequestType, (message) =>
+                this.showWarningMessage(message),
+            ),
 
             languageClient.onRequest(
                 SetStatusBarMessageRequestType,
-                (messageDetails) => this.setStatusBarMessage(messageDetails)),
-
-            languageClient.onNotification(
-                ClearTerminalNotificationType,
-                () => {
-                    // We check to see if they have TrueClear on. If not, no-op because the
-                    // overriden Clear-Host already calls [System.Console]::Clear()
-                    if (getSettings().integratedConsole.forceClearScrollbackBuffer) {
-                        void vscode.commands.executeCommand("workbench.action.terminal.clear");
-                    }
-                })
+                (messageDetails) => this.setStatusBarMessage(messageDetails),
+            ),
+
+            languageClient.onNotification(ClearTerminalNotificationType, () => {
+                // We check to see if they have TrueClear on. If not, no-op because the
+                // overriden Clear-Host already calls [System.Console]::Clear()
+                if (
+                    getSettings().integratedConsole.forceClearScrollbackBuffer
+                ) {
+                    void vscode.commands.executeCommand(
+                        "workbench.action.terminal.clear",
+                    );
+                }
+            }),
         ];
     }
 
@@ -269,7 +334,9 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
         }
     }
 
-    private addExtensionCommand(command: IExtensionCommandAddedNotificationBody): void {
+    private addExtensionCommand(
+        command: IExtensionCommandAddedNotificationBody,
+    ): void {
         this.extensionCommands.push({
             name: command.name,
             displayName: command.displayName,
@@ -277,59 +344,66 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
 
         this.extensionCommands.sort(
             (a: IExtensionCommand, b: IExtensionCommand) =>
-                a.name.localeCompare(b.name));
+                a.name.localeCompare(b.name),
+        );
     }
 
     private async showExtensionCommands(): Promise<void> {
         // If no extension commands are available, show a message
         if (this.extensionCommands.length === 0) {
-            void this.logger.writeAndShowInformation("No extension commands have been loaded into the current session.");
+            void this.logger.writeAndShowInformation(
+                "No extension commands have been loaded into the current session.",
+            );
             return;
         }
 
         const quickPickItems =
-            this.extensionCommands.map<IExtensionCommandQuickPickItem>((command) => {
-                return {
-                    label: command.displayName,
-                    description: command.name,
-                    command,
-                };
-            });
+            this.extensionCommands.map<IExtensionCommandQuickPickItem>(
+                (command) => {
+                    return {
+                        label: command.displayName,
+                        description: command.name,
+                        command,
+                    };
+                },
+            );
 
         const selectedCommand = await vscode.window.showQuickPick(
             quickPickItems,
-            { placeHolder: "Select a command..." });
+            { placeHolder: "Select a command..." },
+        );
 
         return this.onCommandSelected(selectedCommand);
     }
 
-    private async onCommandSelected(chosenItem?: IExtensionCommandQuickPickItem): Promise<void> {
+    private async onCommandSelected(
+        chosenItem?: IExtensionCommandQuickPickItem,
+    ): Promise<void> {
         if (chosenItem !== undefined) {
             const client = await LanguageClientConsumer.getLanguageClient();
-            await client.sendRequest(
-                InvokeExtensionCommandRequestType,
-                {
-                    name: chosenItem.command.name,
-                    context: this.getEditorContext()
-                });
+            await client.sendRequest(InvokeExtensionCommandRequestType, {
+                name: chosenItem.command.name,
+                context: this.getEditorContext(),
+            });
         }
     }
 
-    private async insertText(details: IInsertTextRequestArguments): Promise<EditorOperationResponse> {
+    private async insertText(
+        details: IInsertTextRequestArguments,
+    ): Promise<EditorOperationResponse> {
         const edit = new vscode.WorkspaceEdit();
 
-        edit.set(
-            vscode.Uri.parse(details.filePath),
-            [
-                new vscode.TextEdit(
-                    new vscode.Range(
-                        details.insertRange.start.line,
-                        details.insertRange.start.character,
-                        details.insertRange.end.line,
-                        details.insertRange.end.character),
-                    details.insertText),
-            ],
-        );
+        edit.set(vscode.Uri.parse(details.filePath), [
+            new vscode.TextEdit(
+                new vscode.Range(
+                    details.insertRange.start.line,
+                    details.insertRange.start.character,
+                    details.insertRange.end.line,
+                    details.insertRange.end.character,
+                ),
+                details.insertText,
+            ),
+        ]);
 
         await vscode.workspace.applyEdit(edit);
 
@@ -342,46 +416,70 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
         }
 
         return {
-            currentFileContent: vscode.window.activeTextEditor.document.getText(),
-            currentFileLanguage: vscode.window.activeTextEditor.document.languageId,
-            currentFilePath: vscode.window.activeTextEditor.document.uri.toString(),
-            cursorPosition: asPosition(vscode.window.activeTextEditor.selection.active),
-            selectionRange:
-                asRange(
-                    new vscode.Range(
-                        vscode.window.activeTextEditor.selection.start,
-                        vscode.window.activeTextEditor.selection.end)),
+            currentFileContent:
+                vscode.window.activeTextEditor.document.getText(),
+            currentFileLanguage:
+                vscode.window.activeTextEditor.document.languageId,
+            currentFilePath:
+                vscode.window.activeTextEditor.document.uri.toString(),
+            cursorPosition: asPosition(
+                vscode.window.activeTextEditor.selection.active,
+            ),
+            selectionRange: asRange(
+                new vscode.Range(
+                    vscode.window.activeTextEditor.selection.start,
+                    vscode.window.activeTextEditor.selection.end,
+                ),
+            ),
         };
     }
 
     private async newFile(content: string): Promise<EditorOperationResponse> {
-        const doc = await vscode.workspace.openTextDocument(
-            { language: "powershell", content: content });
+        const doc = await vscode.workspace.openTextDocument({
+            language: "powershell",
+            content: content,
+        });
         await vscode.window.showTextDocument(doc);
         return EditorOperationResponse.Completed;
     }
 
-    private async openFile(openFileDetails: IOpenFileDetails): Promise<EditorOperationResponse> {
-        const filePath = await this.resolveFilePathWithCwd(openFileDetails.filePath);
+    private async openFile(
+        openFileDetails: IOpenFileDetails,
+    ): Promise<EditorOperationResponse> {
+        const filePath = await this.resolveFilePathWithCwd(
+            openFileDetails.filePath,
+        );
         try {
             const doc = await vscode.workspace.openTextDocument(filePath);
-            await vscode.window.showTextDocument(doc, { preview: openFileDetails.preview });
+            await vscode.window.showTextDocument(doc, {
+                preview: openFileDetails.preview,
+            });
         } catch {
-            void this.logger.writeAndShowWarning(`File to open not found: ${filePath}`);
+            void this.logger.writeAndShowWarning(
+                `File to open not found: ${filePath}`,
+            );
             return EditorOperationResponse.Failed;
         }
         return EditorOperationResponse.Completed;
     }
 
-    private async closeFile(filePath: string): Promise<EditorOperationResponse> {
+    private async closeFile(
+        filePath: string,
+    ): Promise<EditorOperationResponse> {
         filePath = await this.resolveFilePathWithCwd(filePath);
-        const doc = vscode.workspace.textDocuments.find((x) => x.uri.fsPath === filePath);
+        const doc = vscode.workspace.textDocuments.find(
+            (x) => x.uri.fsPath === filePath,
+        );
         if (doc != undefined && !doc.isClosed) {
             await vscode.window.showTextDocument(doc);
-            await vscode.commands.executeCommand("workbench.action.closeActiveEditor");
+            await vscode.commands.executeCommand(
+                "workbench.action.closeActiveEditor",
+            );
             return EditorOperationResponse.Completed;
         }
-        void this.logger.writeAndShowWarning(`File to close not found or already closed: ${filePath}`);
+        void this.logger.writeAndShowWarning(
+            `File to close not found or already closed: ${filePath}`,
+        );
         return EditorOperationResponse.Failed;
     }
 
@@ -389,19 +487,30 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
      * Save a file, possibly to a new path. If the save is not possible, return a completed response
      * @param saveFileDetails the object detailing the path of the file to save and optionally its new path to save to
      */
-    private async saveFile(saveFileDetails: ISaveFileDetails): Promise<EditorOperationResponse> {
+    private async saveFile(
+        saveFileDetails: ISaveFileDetails,
+    ): Promise<EditorOperationResponse> {
         // Try to interpret the filePath as a URI, defaulting to "file://" if we don't succeed
         let currentFileUri: vscode.Uri;
-        if (saveFileDetails.filePath.startsWith("untitled") || saveFileDetails.filePath.startsWith("file")) {
+        if (
+            saveFileDetails.filePath.startsWith("untitled") ||
+            saveFileDetails.filePath.startsWith("file")
+        ) {
             currentFileUri = vscode.Uri.parse(saveFileDetails.filePath);
         } else {
-            const filePath = await this.resolveFilePathWithCwd(saveFileDetails.filePath);
+            const filePath = await this.resolveFilePathWithCwd(
+                saveFileDetails.filePath,
+            );
             currentFileUri = vscode.Uri.file(filePath);
         }
 
-        const doc = vscode.workspace.textDocuments.find((x) => x.uri.fsPath === currentFileUri.fsPath);
+        const doc = vscode.workspace.textDocuments.find(
+            (x) => x.uri.fsPath === currentFileUri.fsPath,
+        );
         if (doc === undefined) {
-            void this.logger.writeAndShowWarning(`File to save not found: ${currentFileUri.fsPath}`);
+            void this.logger.writeAndShowWarning(
+                `File to save not found: ${currentFileUri.fsPath}`,
+            );
             return EditorOperationResponse.Failed;
         }
 
@@ -418,12 +527,17 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
             // Special case where we interpret a path as relative to the current
             // file, not the CWD!
             if (!path.isAbsolute(newFilePath)) {
-                newFilePath = path.join(path.dirname(currentFileUri.fsPath), newFilePath);
+                newFilePath = path.join(
+                    path.dirname(currentFileUri.fsPath),
+                    newFilePath,
+                );
             }
         } else if (currentFileUri.scheme === "untitled") {
             // We need a new name to save an untitled file
             if (newFilePath === undefined) {
-                void this.logger.writeAndShowWarning("Cannot save untitled file! Try SaveAs(\"path/to/file.ps1\") instead.");
+                void this.logger.writeAndShowWarning(
+                    'Cannot save untitled file! Try SaveAs("path/to/file.ps1") instead.',
+                );
                 return EditorOperationResponse.Failed;
             }
 
@@ -433,7 +547,8 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
             const msg = JSON.stringify(saveFileDetails, undefined, 2);
             void this.logger.writeAndShowWarning(
                 `<${ExtensionCommandsFeature.name}>: Saving a document with scheme '${currentFileUri.scheme}' ` +
-                `is currently unsupported. Message: '${msg}'`);
+                    `is currently unsupported. Message: '${msg}'`,
+            );
             return EditorOperationResponse.Failed;
         }
 
@@ -445,16 +560,22 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
      * @param documentUri the URI of the vscode document to save
      * @param filePath the absolute path to save the document contents to
      */
-    private async saveFileAs(doc: vscode.TextDocument, filePath: string): Promise<EditorOperationResponse> {
+    private async saveFileAs(
+        doc: vscode.TextDocument,
+        filePath: string,
+    ): Promise<EditorOperationResponse> {
         // Write the old document's contents to the new document path
         const newFileUri = vscode.Uri.file(filePath);
         try {
             await vscode.workspace.fs.writeFile(
                 newFileUri,
-                Buffer.from(doc.getText()));
+                Buffer.from(doc.getText()),
+            );
         } catch (err) {
-            void this.logger.writeAndShowWarning(`<${ExtensionCommandsFeature.name}>: ` +
-                `Unable to save file to path '${filePath}': ${err}`);
+            void this.logger.writeAndShowWarning(
+                `<${ExtensionCommandsFeature.name}>: ` +
+                    `Unable to save file to path '${filePath}': ${err}`,
+            );
             return EditorOperationResponse.Failed;
         }
 
@@ -473,12 +594,15 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
         return filePath;
     }
 
-    private setSelection(details: ISetSelectionRequestArguments): EditorOperationResponse {
+    private setSelection(
+        details: ISetSelectionRequestArguments,
+    ): EditorOperationResponse {
         if (vscode.window.activeTextEditor !== undefined) {
             vscode.window.activeTextEditor.selections = [
                 new vscode.Selection(
                     asCodePosition(details.selectionRange.start),
-                    asCodePosition(details.selectionRange.end)),
+                    asCodePosition(details.selectionRange.end),
+                ),
             ];
             return EditorOperationResponse.Completed;
         }
@@ -500,13 +624,20 @@ export class ExtensionCommandsFeature extends LanguageClientConsumer {
         return EditorOperationResponse.Completed;
     }
 
-    private setStatusBarMessage(messageDetails: IStatusBarMessageDetails): EditorOperationResponse {
+    private setStatusBarMessage(
+        messageDetails: IStatusBarMessageDetails,
+    ): EditorOperationResponse {
         if (messageDetails.timeout) {
             this.statusBarMessages.push(
-                vscode.window.setStatusBarMessage(messageDetails.message, messageDetails.timeout));
+                vscode.window.setStatusBarMessage(
+                    messageDetails.message,
+                    messageDetails.timeout,
+                ),
+            );
         } else {
             this.statusBarMessages.push(
-                vscode.window.setStatusBarMessage(messageDetails.message));
+                vscode.window.setStatusBarMessage(messageDetails.message),
+            );
         }
         return EditorOperationResponse.Completed;
     }
diff --git a/src/features/ExternalApi.ts b/src/features/ExternalApi.ts
index 974436da4e..cafd856c26 100644
--- a/src/features/ExternalApi.ts
+++ b/src/features/ExternalApi.ts
@@ -1,8 +1,8 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-import * as vscode from "vscode";
 import { v4 as uuidv4 } from "uuid";
+import * as vscode from "vscode";
 import type { ILogger } from "../logging";
 import { SessionManager } from "../session";
 
@@ -16,7 +16,9 @@ export interface IExternalPowerShellDetails {
 export interface IPowerShellExtensionClient {
     registerExternalExtension(id: string, apiVersion?: string): string;
     unregisterExternalExtension(uuid: string): boolean;
-    getPowerShellVersionDetails(uuid: string): Promise<IExternalPowerShellDetails>;
+    getPowerShellVersionDetails(
+        uuid: string,
+    ): Promise<IExternalPowerShellDetails>;
     waitUntilStarted(uuid: string): Promise<void>;
     getStorageUri(): vscode.Uri;
     getLogUri(): vscode.Uri;
@@ -34,13 +36,16 @@ NOTE: At some point, we should release a helper npm package that wraps the API a
 
 */
 export class ExternalApiFeature implements IPowerShellExtensionClient {
-    private static readonly registeredExternalExtension: Map<string, IExternalExtension> = new Map<string, IExternalExtension>();
+    private static readonly registeredExternalExtension: Map<
+        string,
+        IExternalExtension
+    > = new Map<string, IExternalExtension>();
 
     constructor(
         private extensionContext: vscode.ExtensionContext,
         private sessionManager: SessionManager,
-        private logger: ILogger) {
-    }
+        private logger: ILogger,
+    ) {}
 
     /*
     DESCRIPTION:
@@ -56,10 +61,14 @@ export class ExternalApiFeature implements IPowerShellExtensionClient {
         string session uuid
     */
     public registerExternalExtension(id: string, apiVersion = "v1"): string {
-        this.logger.writeDebug(`Registering extension '${id}' for use with API version '${apiVersion}'.`);
-
-        // eslint-disable-next-line @typescript-eslint/no-unused-vars
-        for (const [_name, externalExtension] of ExternalApiFeature.registeredExternalExtension) {
+        this.logger.writeDebug(
+            `Registering extension '${id}' for use with API version '${apiVersion}'.`,
+        );
+
+        for (const [
+            _name,
+            externalExtension,
+        ] of ExternalApiFeature.registeredExternalExtension) {
             if (externalExtension.id === id) {
                 const message = `The extension '${id}' is already registered.`;
                 this.logger.writeWarning(message);
@@ -67,19 +76,26 @@ export class ExternalApiFeature implements IPowerShellExtensionClient {
             }
         }
 
-        if (!vscode.extensions.all.some(ext => ext.id === id)) {
-            throw new Error(`No extension installed with id '${id}'. You must use a valid extension id.`);
+        if (!vscode.extensions.all.some((ext) => ext.id === id)) {
+            throw new Error(
+                `No extension installed with id '${id}'. You must use a valid extension id.`,
+            );
         }
 
         // Our ID is only only allowed to be used in our unit tests.
-        if (id === "ms-vscode.powershell" && !(this.extensionContext.extensionMode === vscode.ExtensionMode.Test)) {
-            throw new Error("You can't use the PowerShell extension's id in this registration.");
+        if (
+            id === "ms-vscode.powershell" &&
+            !(this.extensionContext.extensionMode === vscode.ExtensionMode.Test)
+        ) {
+            throw new Error(
+                "You can't use the PowerShell extension's id in this registration.",
+            );
         }
 
         const uuid = uuidv4();
         ExternalApiFeature.registeredExternalExtension.set(uuid, {
             id,
-            apiVersion
+            apiVersion,
         });
         return uuid;
     }
@@ -97,9 +113,13 @@ export class ExternalApiFeature implements IPowerShellExtensionClient {
         true if it worked, otherwise throws an error.
     */
     public unregisterExternalExtension(uuid = ""): boolean {
-        this.logger.writeDebug(`Unregistering extension with session UUID: ${uuid}`);
+        this.logger.writeDebug(
+            `Unregistering extension with session UUID: ${uuid}`,
+        );
         if (!ExternalApiFeature.registeredExternalExtension.delete(uuid)) {
-            throw new Error(`No extension registered with session UUID: ${uuid}`);
+            throw new Error(
+                `No extension registered with session UUID: ${uuid}`,
+            );
         }
         return true;
     }
@@ -107,7 +127,8 @@ export class ExternalApiFeature implements IPowerShellExtensionClient {
     private getRegisteredExtension(uuid = ""): IExternalExtension {
         if (!ExternalApiFeature.registeredExternalExtension.has(uuid)) {
             throw new Error(
-                "UUID provided was invalid, make sure you ran the 'powershellExtensionClient.registerExternalExtension(extensionId)' method and pass in the UUID that it returns to subsequent methods.");
+                "UUID provided was invalid, make sure you ran the 'powershellExtensionClient.registerExternalExtension(extensionId)' method and pass in the UUID that it returns to subsequent methods.",
+            );
         }
 
         // TODO: When we have more than one API version, make sure to include a check here.
@@ -132,18 +153,26 @@ export class ExternalApiFeature implements IPowerShellExtensionClient {
             architecture: string;
         }
     */
-    public async getPowerShellVersionDetails(uuid = ""): Promise<IExternalPowerShellDetails> {
+    public async getPowerShellVersionDetails(
+        uuid = "",
+    ): Promise<IExternalPowerShellDetails> {
         const extension = this.getRegisteredExtension(uuid);
-        this.logger.writeDebug(`Extension '${extension.id}' called 'getPowerShellVersionDetails'.`);
+        this.logger.writeDebug(
+            `Extension '${extension.id}' called 'getPowerShellVersionDetails'.`,
+        );
 
         await this.sessionManager.waitUntilStarted();
-        const versionDetails = this.sessionManager.getPowerShellVersionDetails();
+        const versionDetails =
+            this.sessionManager.getPowerShellVersionDetails();
 
         return {
-            exePath: this.sessionManager.PowerShellExeDetails?.exePath ?? "unknown",
+            exePath:
+                this.sessionManager.PowerShellExeDetails?.exePath ?? "unknown",
             version: versionDetails?.version ?? "unknown",
-            displayName: this.sessionManager.PowerShellExeDetails?.displayName ?? "unknown", // comes from the Session Menu
-            architecture: versionDetails?.architecture ?? "unknown"
+            displayName:
+                this.sessionManager.PowerShellExeDetails?.displayName ??
+                "unknown", // comes from the Session Menu
+            architecture: versionDetails?.architecture ?? "unknown",
         };
     }
     /*
@@ -162,18 +191,20 @@ export class ExternalApiFeature implements IPowerShellExtensionClient {
     */
     public async waitUntilStarted(uuid = ""): Promise<void> {
         const extension = this.getRegisteredExtension(uuid);
-        this.logger.writeDebug(`Extension '${extension.id}' called 'waitUntilStarted'.`);
+        this.logger.writeDebug(
+            `Extension '${extension.id}' called 'waitUntilStarted'.`,
+        );
         await this.sessionManager.waitUntilStarted();
     }
 
     public getStorageUri(): vscode.Uri {
         // We have to override the scheme because it defaults to
         // 'vscode-userdata' which breaks UNC paths.
-        return this.extensionContext.globalStorageUri.with({ scheme: "file"});
+        return this.extensionContext.globalStorageUri.with({ scheme: "file" });
     }
 
     public getLogUri(): vscode.Uri {
-        return this.extensionContext.logUri.with({ scheme: "file"});
+        return this.extensionContext.logUri.with({ scheme: "file" });
     }
 
     public dispose(): void {
diff --git a/src/features/GenerateBugReport.ts b/src/features/GenerateBugReport.ts
index 4ec7cec571..6539f978d9 100644
--- a/src/features/GenerateBugReport.ts
+++ b/src/features/GenerateBugReport.ts
@@ -8,21 +8,30 @@ import { SessionManager } from "../session";
 const issuesUrl = "https://github.com/PowerShell/vscode-powershell/issues/new?";
 
 export class GenerateBugReportFeature implements vscode.Disposable {
-
     private command: vscode.Disposable;
 
     constructor(private sessionManager: SessionManager) {
-        this.command = vscode.commands.registerCommand("PowerShell.GenerateBugReport", async () => {
-            const params = [
-                "labels=Issue-Bug",
-                "template=bug-report.yml",
-                "powershell-version=" + this.getRuntimeInfo(),
-                "vscode-version=" + vscode.version + "\n" + process.arch,
-                "extension-version=" + sessionManager.Publisher + "." + sessionManager.HostName + "@" + sessionManager.HostVersion,
-            ];
-            const url = vscode.Uri.parse(issuesUrl + encodeURIComponent(params.join("&")));
-            await vscode.env.openExternal(url);
-        });
+        this.command = vscode.commands.registerCommand(
+            "PowerShell.GenerateBugReport",
+            async () => {
+                const params = [
+                    "labels=Issue-Bug",
+                    "template=bug-report.yml",
+                    "powershell-version=" + this.getRuntimeInfo(),
+                    "vscode-version=" + vscode.version + "\n" + process.arch,
+                    "extension-version=" +
+                        sessionManager.Publisher +
+                        "." +
+                        sessionManager.HostName +
+                        "@" +
+                        sessionManager.HostVersion,
+                ];
+                const url = vscode.Uri.parse(
+                    issuesUrl + encodeURIComponent(params.join("&")),
+                );
+                await vscode.env.openExternal(url);
+            },
+        );
     }
 
     public dispose(): void {
@@ -35,7 +44,13 @@ export class GenerateBugReportFeature implements vscode.Disposable {
         }
         const child = child_process.spawnSync(
             this.sessionManager.PowerShellExeDetails.exePath,
-            ["-NoProfile", "-NoLogo", "-Command", "$PSVersionTable | Out-String"]);
+            [
+                "-NoProfile",
+                "-NoLogo",
+                "-Command",
+                "$PSVersionTable | Out-String",
+            ],
+        );
         // Replace semicolons as they'll cause the URI component to truncate
         return child.stdout.toString().trim().replace(";", ",");
     }
diff --git a/src/features/GetCommands.ts b/src/features/GetCommands.ts
index f85aad28f8..52d007532e 100644
--- a/src/features/GetCommands.ts
+++ b/src/features/GetCommands.ts
@@ -19,7 +19,9 @@ interface ICommand {
  * RequestType sent over to PSES.
  * Expects: ICommand to be returned
  */
-export const GetCommandRequestType = new RequestType0<ICommand[], void>("powerShell/getCommand");
+export const GetCommandRequestType = new RequestType0<ICommand[], void>(
+    "powerShell/getCommand",
+);
 
 /**
  * A PowerShell Command listing feature. Implements a treeview control.
@@ -32,14 +34,25 @@ export class GetCommandsFeature extends LanguageClientConsumer {
     constructor() {
         super();
         this.commands = [
-            vscode.commands.registerCommand("PowerShell.RefreshCommandsExplorer",
-                async () => { await this.CommandExplorerRefresh(); }),
-            vscode.commands.registerCommand("PowerShell.InsertCommand", async (item) => { await this.InsertCommand(item); })
+            vscode.commands.registerCommand(
+                "PowerShell.RefreshCommandsExplorer",
+                async () => {
+                    await this.CommandExplorerRefresh();
+                },
+            ),
+            vscode.commands.registerCommand(
+                "PowerShell.InsertCommand",
+                async (item) => {
+                    await this.InsertCommand(item);
+                },
+            ),
         ];
         this.commandsExplorerProvider = new CommandsExplorerProvider();
 
-        this.commandsExplorerTreeView = vscode.window.createTreeView<Command>("PowerShellCommands",
-            { treeDataProvider: this.commandsExplorerProvider });
+        this.commandsExplorerTreeView = vscode.window.createTreeView<Command>(
+            "PowerShellCommands",
+            { treeDataProvider: this.commandsExplorerProvider },
+        );
 
         // Refresh the command explorer when the view is visible
         this.commandsExplorerTreeView.onDidChangeVisibility(async (e) => {
@@ -57,7 +70,9 @@ export class GetCommandsFeature extends LanguageClientConsumer {
 
     public override onLanguageClientSet(_languageClient: LanguageClient): void {
         if (this.commandsExplorerTreeView.visible) {
-            void vscode.commands.executeCommand("PowerShell.RefreshCommandsExplorer");
+            void vscode.commands.executeCommand(
+                "PowerShell.RefreshCommandsExplorer",
+            );
         }
     }
 
@@ -65,13 +80,19 @@ export class GetCommandsFeature extends LanguageClientConsumer {
         const client = await LanguageClientConsumer.getLanguageClient();
         const result = await client.sendRequest(GetCommandRequestType);
         const exclusions = getSettings().sideBar.CommandExplorerExcludeFilter;
-        const excludeFilter = exclusions.map((filter: string) => filter.toLowerCase());
-        const filteredResult = result.filter((command) => (!excludeFilter.includes(command.moduleName.toLowerCase())));
-        this.commandsExplorerProvider.powerShellCommands = filteredResult.map(toCommand);
+        const excludeFilter = exclusions.map((filter: string) =>
+            filter.toLowerCase(),
+        );
+        const filteredResult = result.filter(
+            (command) =>
+                !excludeFilter.includes(command.moduleName.toLowerCase()),
+        );
+        this.commandsExplorerProvider.powerShellCommands =
+            filteredResult.map(toCommand);
         this.commandsExplorerProvider.refresh();
     }
 
-    private async InsertCommand(item: { Name: string; }): Promise<void> {
+    private async InsertCommand(item: { Name: string }): Promise<void> {
         const editor = vscode.window.activeTextEditor;
         if (editor === undefined) {
             return;
@@ -79,7 +100,12 @@ export class GetCommandsFeature extends LanguageClientConsumer {
 
         const sls = editor.selection.start;
         const sle = editor.selection.end;
-        const range = new vscode.Range(sls.line, sls.character, sle.line, sle.character);
+        const range = new vscode.Range(
+            sls.line,
+            sls.character,
+            sle.line,
+            sle.character,
+        );
         await editor.edit((editBuilder) => {
             editBuilder.replace(range, item.Name);
         });
@@ -89,7 +115,8 @@ export class GetCommandsFeature extends LanguageClientConsumer {
 class CommandsExplorerProvider implements vscode.TreeDataProvider<Command> {
     public readonly onDidChangeTreeData: vscode.Event<Command | undefined>;
     public powerShellCommands: Command[] = [];
-    private didChangeTreeData: vscode.EventEmitter<Command | undefined> = new vscode.EventEmitter<Command>();
+    private didChangeTreeData: vscode.EventEmitter<Command | undefined> =
+        new vscode.EventEmitter<Command>();
 
     constructor() {
         this.onDidChangeTreeData = this.didChangeTreeData.event;
@@ -125,7 +152,8 @@ class Command extends vscode.TreeItem {
         public readonly defaultParameterSet: string,
         public readonly ParameterSets: object,
         public readonly Parameters: object,
-        public override readonly collapsibleState = vscode.TreeItemCollapsibleState.None,
+        public override readonly collapsibleState = vscode
+            .TreeItemCollapsibleState.None,
     ) {
         super(Name, collapsibleState);
     }
diff --git a/src/features/HelpCompletion.ts b/src/features/HelpCompletion.ts
index 9711b93f35..bf439748d2 100644
--- a/src/features/HelpCompletion.ts
+++ b/src/features/HelpCompletion.ts
@@ -2,25 +2,37 @@
 // Licensed under the MIT License.
 
 import {
-    Disposable, EndOfLine, Range, SnippetString,
-    type TextDocument, type TextDocumentChangeEvent, window, workspace
+    Disposable,
+    EndOfLine,
+    Range,
+    SnippetString,
+    type TextDocument,
+    type TextDocumentChangeEvent,
+    window,
+    workspace,
 } from "vscode";
 import { RequestType } from "vscode-languageclient";
 import { LanguageClient } from "vscode-languageclient/node";
-import { Settings, CommentType, getSettings } from "../settings";
 import { LanguageClientConsumer } from "../languageClientConsumer";
+import { CommentType, getSettings, Settings } from "../settings";
 
-interface ICommentHelpRequestArguments {
-}
+interface ICommentHelpRequestArguments {}
 
 interface ICommentHelpRequestResponse {
-    content: string[]
+    content: string[];
 }
 
-export const CommentHelpRequestType =
-    new RequestType<ICommentHelpRequestArguments, ICommentHelpRequestResponse, void>("powerShell/getCommentHelp");
+export const CommentHelpRequestType = new RequestType<
+    ICommentHelpRequestArguments,
+    ICommentHelpRequestResponse,
+    void
+>("powerShell/getCommentHelp");
 
-enum SearchState { Searching, Locked, Found }
+enum SearchState {
+    Searching,
+    Locked,
+    Found,
+}
 
 export class HelpCompletionFeature extends LanguageClientConsumer {
     private helpCompletionProvider: HelpCompletionProvider | undefined;
@@ -33,7 +45,9 @@ export class HelpCompletionFeature extends LanguageClientConsumer {
 
         if (this.settings.helpCompletion !== CommentType.Disabled) {
             this.helpCompletionProvider = new HelpCompletionProvider();
-            this.disposable = workspace.onDidChangeTextDocument(async (e) => { await this.onEvent(e); });
+            this.disposable = workspace.onDidChangeTextDocument(async (e) => {
+                await this.onEvent(e);
+            });
         }
     }
 
@@ -58,7 +72,8 @@ export class HelpCompletionFeature extends LanguageClientConsumer {
             this.helpCompletionProvider?.updateState(
                 changeEvent.document,
                 changeEvent.contentChanges[0].text,
-                changeEvent.contentChanges[0].range);
+                changeEvent.contentChanges[0].range,
+            );
 
             // TODO: Raise an event when trigger is found, and attach complete() to the event.
             if (this.helpCompletionProvider?.triggerFound) {
@@ -85,30 +100,37 @@ class TriggerFinder {
 
     public updateState(document: TextDocument, changeText: string): void {
         switch (this.state) {
-        case SearchState.Searching:
-            // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
-            if (changeText.length === 1 && changeText[0] === this.triggerCharacters[this.count]) {
-                this.state = SearchState.Locked;
-                this.document = document;
-                this.count++;
-            }
-            break;
-
-        case SearchState.Locked:
-            // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
-            if (document === this.document && changeText.length === 1 && changeText[0] === this.triggerCharacters[this.count]) {
-                this.count++;
-                if (this.count === this.triggerCharacters.length) {
-                    this.state = SearchState.Found;
+            case SearchState.Searching:
+                if (
+                    changeText.length === 1 &&
+                    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
+                    changeText[0] === this.triggerCharacters[this.count]
+                ) {
+                    this.state = SearchState.Locked;
+                    this.document = document;
+                    this.count++;
                 }
-            } else {
-                this.reset();
-            }
-            break;
+                break;
+
+            case SearchState.Locked:
+                if (
+                    document === this.document &&
+                    changeText.length === 1 &&
+                    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
+                    changeText[0] === this.triggerCharacters[this.count]
+                ) {
+                    this.count++;
+                    if (this.count === this.triggerCharacters.length) {
+                        this.state = SearchState.Found;
+                    }
+                } else {
+                    this.reset();
+                }
+                break;
 
-        default:
-            this.reset();
-            break;
+            default:
+                this.reset();
+                break;
         }
     }
 
@@ -134,10 +156,16 @@ class HelpCompletionProvider extends LanguageClientConsumer {
         return this.triggerFinderHelpComment.found;
     }
 
-    // eslint-disable-next-line @typescript-eslint/no-empty-function
-    public override onLanguageClientSet(_languageClient: LanguageClient): void {}
+    public override onLanguageClientSet(
+        _languageClient: LanguageClient,
+        // eslint-disable-next-line @typescript-eslint/no-empty-function
+    ): void {}
 
-    public updateState(document: TextDocument, changeText: string, changeRange: Range): void {
+    public updateState(
+        document: TextDocument,
+        changeText: string,
+        changeRange: Range,
+    ): void {
         this.lastDocument = document;
         this.lastChangeRange = changeRange;
         this.triggerFinderHelpComment.updateState(document, changeText);
@@ -148,7 +176,10 @@ class HelpCompletionProvider extends LanguageClientConsumer {
     }
 
     public async complete(): Promise<void> {
-        if (this.lastChangeRange === undefined || this.lastDocument === undefined) {
+        if (
+            this.lastChangeRange === undefined ||
+            this.lastDocument === undefined
+        ) {
             return;
         }
 
@@ -159,26 +190,31 @@ class HelpCompletionProvider extends LanguageClientConsumer {
         const result = await client.sendRequest(CommentHelpRequestType, {
             documentUri: doc.uri.toString(),
             triggerPosition: triggerStartPos,
-            blockComment: this.settings.helpCompletion === CommentType.BlockComment,
+            blockComment:
+                this.settings.helpCompletion === CommentType.BlockComment,
         });
 
         if (result.content.length === 0) {
             return;
         }
 
-        const replaceRange = new Range(triggerStartPos.translate(0, -1), triggerStartPos.translate(0, 1));
+        const replaceRange = new Range(
+            triggerStartPos.translate(0, -1),
+            triggerStartPos.translate(0, 1),
+        );
 
         // TODO: add indentation level to the help content
         // Trim leading whitespace (used by the rule for indentation) as VSCode takes care of the indentation.
         // Trim the last empty line and join the strings.
         const lines: string[] = result.content;
-        const text = lines
-            .map((x) => x.trimStart())
-            .join(this.getEOL(doc.eol));
+        const text = lines.map((x) => x.trimStart()).join(this.getEOL(doc.eol));
 
         const snippetString = new SnippetString(text);
 
-        await window.activeTextEditor?.insertSnippet(snippetString, replaceRange);
+        await window.activeTextEditor?.insertSnippet(
+            snippetString,
+            replaceRange,
+        );
     }
 
     private getEOL(eol: EndOfLine): string {
diff --git a/src/features/ISECompatibility.ts b/src/features/ISECompatibility.ts
index 8cb96711fa..747bb4f6f4 100644
--- a/src/features/ISECompatibility.ts
+++ b/src/features/ISECompatibility.ts
@@ -17,13 +17,29 @@ export class ISECompatibilityFeature implements vscode.Disposable {
     public static settings: ISetting[] = [
         { path: "debug", name: "openDebug", value: "neverOpen" },
         { path: "editor", name: "tabCompletion", value: "on" },
-        { path: "powershell.integratedConsole", name: "focusConsoleOnExecute", value: false },
+        {
+            path: "powershell.integratedConsole",
+            name: "focusConsoleOnExecute",
+            value: false,
+        },
         { path: "files", name: "defaultLanguage", value: "powershell" },
         { path: "workbench", name: "colorTheme", value: "PowerShell ISE" },
-        { path: "editor", name: "wordSeparators", value: "`~!@#%^&*()-=+[{]}\\|;:'\",.<>/?" },
-        { path: "powershell.buttons", name: "showPanelMovementButtons", value: true },
+        {
+            path: "editor",
+            name: "wordSeparators",
+            value: "`~!@#%^&*()-=+[{]}\\|;:'\",.<>/?",
+        },
+        {
+            path: "powershell.buttons",
+            name: "showPanelMovementButtons",
+            value: true,
+        },
         { path: "powershell.codeFolding", name: "showLastLine", value: false },
-        { path: "powershell.sideBar", name: "CommandExplorerVisibility", value: true }
+        {
+            path: "powershell.sideBar",
+            name: "CommandExplorerVisibility",
+            value: true,
+        },
     ];
 
     private commands: vscode.Disposable[] = [];
@@ -31,12 +47,33 @@ export class ISECompatibilityFeature implements vscode.Disposable {
     private originalSettings: Record<string, boolean | string | undefined> = {};
 
     constructor() {
-        const testSetting = ISECompatibilityFeature.settings[ISECompatibilityFeature.settings.length - 1];
-        this.iseModeEnabled = vscode.workspace.getConfiguration(testSetting.path).get(testSetting.name) === testSetting.value;
+        const testSetting =
+            ISECompatibilityFeature.settings[
+                ISECompatibilityFeature.settings.length - 1
+            ];
+        this.iseModeEnabled =
+            vscode.workspace
+                .getConfiguration(testSetting.path)
+                .get(testSetting.name) === testSetting.value;
         this.commands = [
-            vscode.commands.registerCommand("PowerShell.EnableISEMode", async () => { await this.EnableISEMode(); }),
-            vscode.commands.registerCommand("PowerShell.DisableISEMode", async () => { await this.DisableISEMode(); }),
-            vscode.commands.registerCommand("PowerShell.ToggleISEMode", async () => { await this.ToggleISEMode(); })
+            vscode.commands.registerCommand(
+                "PowerShell.EnableISEMode",
+                async () => {
+                    await this.EnableISEMode();
+                },
+            ),
+            vscode.commands.registerCommand(
+                "PowerShell.DisableISEMode",
+                async () => {
+                    await this.DisableISEMode();
+                },
+            ),
+            vscode.commands.registerCommand(
+                "PowerShell.ToggleISEMode",
+                async () => {
+                    await this.ToggleISEMode();
+                },
+            ),
         ];
     }
 
@@ -50,8 +87,11 @@ export class ISECompatibilityFeature implements vscode.Disposable {
         this.iseModeEnabled = true;
         for (const iseSetting of ISECompatibilityFeature.settings) {
             try {
-                const config = vscode.workspace.getConfiguration(iseSetting.path);
-                this.originalSettings[iseSetting.path + iseSetting.name] = config.get(iseSetting.name);
+                const config = vscode.workspace.getConfiguration(
+                    iseSetting.path,
+                );
+                this.originalSettings[iseSetting.path + iseSetting.name] =
+                    config.get(iseSetting.name);
                 await config.update(iseSetting.name, iseSetting.value, true);
             } catch {
                 // The `update` call can fail if the setting doesn't exist. This
@@ -63,7 +103,9 @@ export class ISECompatibilityFeature implements vscode.Disposable {
         }
 
         // Show the PowerShell view container which has the Command Explorer view
-        await vscode.commands.executeCommand("workbench.view.extension.PowerShell");
+        await vscode.commands.executeCommand(
+            "workbench.view.extension.PowerShell",
+        );
     }
 
     private async DisableISEMode(): Promise<void> {
@@ -72,7 +114,11 @@ export class ISECompatibilityFeature implements vscode.Disposable {
             const config = vscode.workspace.getConfiguration(iseSetting.path);
             const currently = config.get(iseSetting.name);
             if (currently === iseSetting.value) {
-                await config.update(iseSetting.name, this.originalSettings[iseSetting.path + iseSetting.name], true);
+                await config.update(
+                    iseSetting.name,
+                    this.originalSettings[iseSetting.path + iseSetting.name],
+                    true,
+                );
             }
         }
     }
diff --git a/src/features/OpenInISE.ts b/src/features/OpenInISE.ts
index ffc6993c1b..808ee59db7 100644
--- a/src/features/OpenInISE.ts
+++ b/src/features/OpenInISE.ts
@@ -8,26 +8,29 @@ export class OpenInISEFeature implements vscode.Disposable {
     private command: vscode.Disposable;
 
     constructor() {
-        this.command = vscode.commands.registerCommand("PowerShell.OpenInISE", () => {
-            const editor = vscode.window.activeTextEditor;
-            if (editor === undefined) {
-                return;
-            }
-
-            const document = editor.document;
-            const uri = document.uri;
-            let ISEPath = process.env.windir ?? "C:\\Windows";
-
-            if (process.env.PROCESSOR_ARCHITEW6432 !== undefined) {
-                ISEPath += "\\Sysnative";
-            } else {
-                ISEPath += "\\System32";
-            }
-
-            ISEPath += "\\WindowsPowerShell\\v1.0\\powershell_ise.exe";
-
-            ChildProcess.exec(`${ISEPath} -File "${uri.fsPath}"`).unref();
-        });
+        this.command = vscode.commands.registerCommand(
+            "PowerShell.OpenInISE",
+            () => {
+                const editor = vscode.window.activeTextEditor;
+                if (editor === undefined) {
+                    return;
+                }
+
+                const document = editor.document;
+                const uri = document.uri;
+                let ISEPath = process.env.windir ?? "C:\\Windows";
+
+                if (process.env.PROCESSOR_ARCHITEW6432 !== undefined) {
+                    ISEPath += "\\Sysnative";
+                } else {
+                    ISEPath += "\\System32";
+                }
+
+                ISEPath += "\\WindowsPowerShell\\v1.0\\powershell_ise.exe";
+
+                ChildProcess.exec(`${ISEPath} -File "${uri.fsPath}"`).unref();
+            },
+        );
     }
 
     public dispose(): void {
diff --git a/src/features/PesterTests.ts b/src/features/PesterTests.ts
index a2f4c10148..486bcd8aab 100644
--- a/src/features/PesterTests.ts
+++ b/src/features/PesterTests.ts
@@ -2,10 +2,10 @@
 // Licensed under the MIT License.
 
 import * as path from "path";
-import vscode = require("vscode");
 import type { ILogger } from "../logging";
 import { SessionManager } from "../session";
-import { getSettings, getChosenWorkspace } from "../settings";
+import { getChosenWorkspace, getSettings } from "../settings";
+import vscode = require("vscode");
 import utils = require("../utils");
 
 enum LaunchType {
@@ -17,29 +17,56 @@ export class PesterTestsFeature implements vscode.Disposable {
     private commands: vscode.Disposable[];
     private invokePesterStubScriptPath: string;
 
-    constructor(private sessionManager: SessionManager, private logger: ILogger) {
-        this.invokePesterStubScriptPath = path.resolve(__dirname, "../modules/PowerShellEditorServices/InvokePesterStub.ps1");
+    constructor(
+        private sessionManager: SessionManager,
+        private logger: ILogger,
+    ) {
+        this.invokePesterStubScriptPath = path.resolve(
+            __dirname,
+            "../modules/PowerShellEditorServices/InvokePesterStub.ps1",
+        );
         this.commands = [
             // File context-menu command - Run Pester Tests
             vscode.commands.registerCommand(
                 "PowerShell.RunPesterTestsFromFile",
                 (fileUri?) => {
-                    return this.launchAllTestsInActiveEditor(LaunchType.Run, fileUri);
-                }),
+                    return this.launchAllTestsInActiveEditor(
+                        LaunchType.Run,
+                        fileUri,
+                    );
+                },
+            ),
 
             // File context-menu command - Debug Pester Tests
             vscode.commands.registerCommand(
                 "PowerShell.DebugPesterTestsFromFile",
                 (fileUri?) => {
-                    return this.launchAllTestsInActiveEditor(LaunchType.Debug, fileUri);
-                }),
+                    return this.launchAllTestsInActiveEditor(
+                        LaunchType.Debug,
+                        fileUri,
+                    );
+                },
+            ),
 
             // This command is provided for usage by PowerShellEditorServices (PSES) only
             vscode.commands.registerCommand(
                 "PowerShell.RunPesterTests",
-                (uriString, runInDebugger, describeBlockName?, describeBlockLineNumber?, outputPath?) => {
-                    return this.launchTests(vscode.Uri.parse(uriString), runInDebugger, describeBlockName, describeBlockLineNumber, outputPath);
-                })
+                (
+                    uriString,
+                    runInDebugger,
+                    describeBlockName?,
+                    describeBlockLineNumber?,
+                    outputPath?,
+                ) => {
+                    return this.launchTests(
+                        vscode.Uri.parse(uriString),
+                        runInDebugger,
+                        describeBlockName,
+                        describeBlockLineNumber,
+                        outputPath,
+                    );
+                },
+            ),
         ];
     }
 
@@ -51,8 +78,8 @@ export class PesterTestsFeature implements vscode.Disposable {
 
     private async launchAllTestsInActiveEditor(
         launchType: LaunchType,
-        fileUri?: vscode.Uri): Promise<boolean> {
-
+        fileUri?: vscode.Uri,
+    ): Promise<boolean> {
         fileUri ??= vscode.window.activeTextEditor?.document.uri;
 
         if (fileUri === undefined) {
@@ -68,10 +95,16 @@ export class PesterTestsFeature implements vscode.Disposable {
         runInDebugger: boolean,
         describeBlockName?: string,
         describeBlockLineNumber?: number,
-        outputPath?: string): Promise<boolean> {
-
+        outputPath?: string,
+    ): Promise<boolean> {
         const launchType = runInDebugger ? LaunchType.Debug : LaunchType.Run;
-        const launchConfig = this.createLaunchConfig(fileUri, launchType, describeBlockName, describeBlockLineNumber, outputPath);
+        const launchConfig = this.createLaunchConfig(
+            fileUri,
+            launchType,
+            describeBlockName,
+            describeBlockLineNumber,
+            outputPath,
+        );
         return this.launch(launchConfig);
     }
 
@@ -80,8 +113,8 @@ export class PesterTestsFeature implements vscode.Disposable {
         launchType: LaunchType,
         testName?: string,
         lineNum?: number,
-        outputPath?: string): vscode.DebugConfiguration {
-
+        outputPath?: string,
+    ): vscode.DebugConfiguration {
         const settings = getSettings();
         const launchConfig = {
             request: "launch",
@@ -93,14 +126,18 @@ export class PesterTestsFeature implements vscode.Disposable {
                 `'${utils.escapeSingleQuotes(fileUri.fsPath)}'`,
             ],
             internalConsoleOptions: "neverOpen",
-            noDebug: (launchType === LaunchType.Run),
-            createTemporaryIntegratedConsole: settings.debugging.createTemporaryIntegratedConsole
+            noDebug: launchType === LaunchType.Run,
+            createTemporaryIntegratedConsole:
+                settings.debugging.createTemporaryIntegratedConsole,
         };
 
         if (lineNum) {
             launchConfig.args.push("-LineNumber", `${lineNum}`);
         } else if (testName) {
-            launchConfig.args.push("-TestName", `'${utils.escapeSingleQuotes(testName)}'`);
+            launchConfig.args.push(
+                "-TestName",
+                `'${utils.escapeSingleQuotes(testName)}'`,
+            );
         } else {
             launchConfig.args.push("-All");
         }
@@ -110,10 +147,15 @@ export class PesterTestsFeature implements vscode.Disposable {
         }
 
         if (launchType === LaunchType.Debug) {
-            launchConfig.args.push("-Output", `'${settings.pester.debugOutputVerbosity}'`);
-        }
-        else {
-            launchConfig.args.push("-Output", `'${settings.pester.outputVerbosity}'`);
+            launchConfig.args.push(
+                "-Output",
+                `'${settings.pester.debugOutputVerbosity}'`,
+            );
+        } else {
+            launchConfig.args.push(
+                "-Output",
+                `'${settings.pester.outputVerbosity}'`,
+            );
         }
 
         if (outputPath) {
@@ -123,14 +165,21 @@ export class PesterTestsFeature implements vscode.Disposable {
         return launchConfig;
     }
 
-    private async launch(launchConfig: vscode.DebugConfiguration): Promise<boolean> {
+    private async launch(
+        launchConfig: vscode.DebugConfiguration,
+    ): Promise<boolean> {
         // Create or show the interactive console
         // TODO: #367 Check if "newSession" mode is configured
         this.sessionManager.showDebugTerminal(true);
 
         // Ensure the necessary script exists (for testing). The debugger will
         // start regardless, but we also pass its success along.
-        return await utils.checkIfFileExists(this.invokePesterStubScriptPath)
-            && vscode.debug.startDebugging(await getChosenWorkspace(this.logger), launchConfig);
+        return (
+            (await utils.checkIfFileExists(this.invokePesterStubScriptPath)) &&
+            vscode.debug.startDebugging(
+                await getChosenWorkspace(this.logger),
+                launchConfig,
+            )
+        );
     }
 }
diff --git a/src/features/RemoteFiles.ts b/src/features/RemoteFiles.ts
index 765b6d99a6..46164b5de4 100644
--- a/src/features/RemoteFiles.ts
+++ b/src/features/RemoteFiles.ts
@@ -4,9 +4,12 @@
 import os = require("os");
 import path = require("path");
 import vscode = require("vscode");
-import { NotificationType, TextDocumentIdentifier } from "vscode-languageclient";
-import { LanguageClientConsumer } from "../languageClientConsumer";
+import {
+    NotificationType,
+    TextDocumentIdentifier,
+} from "vscode-languageclient";
 import type { LanguageClient } from "vscode-languageclient/node";
+import { LanguageClientConsumer } from "../languageClientConsumer";
 
 // NOTE: The following two DidSaveTextDocument* types will
 // be removed when #593 gets fixed.
@@ -19,8 +22,7 @@ export interface IDidSaveTextDocumentParams {
 }
 
 export const DidSaveTextDocumentNotificationType =
-    new NotificationType<IDidSaveTextDocumentParams>(
-        "textDocument/didSave");
+    new NotificationType<IDidSaveTextDocumentParams>("textDocument/didSave");
 
 export class RemoteFilesFeature extends LanguageClientConsumer {
     private command: vscode.Disposable;
@@ -30,9 +32,9 @@ export class RemoteFilesFeature extends LanguageClientConsumer {
         super();
         // Get the common PowerShell Editor Services temporary file path
         // so that remote files from previous sessions can be closed.
-        this.tempSessionPathPrefix =
-            path.join(os.tmpdir(), "PSES-")
-                .toLowerCase();
+        this.tempSessionPathPrefix = path
+            .join(os.tmpdir(), "PSES-")
+            .toLowerCase();
 
         // At startup, close any lingering temporary remote files
         this.closeRemoteFiles();
@@ -43,14 +45,19 @@ export class RemoteFilesFeature extends LanguageClientConsumer {
                 await client.sendNotification(
                     DidSaveTextDocumentNotificationType,
                     {
-                        textDocument: TextDocumentIdentifier.create(doc.uri.toString()),
-                    });
+                        textDocument: TextDocumentIdentifier.create(
+                            doc.uri.toString(),
+                        ),
+                    },
+                );
             }
         });
     }
 
-    // eslint-disable-next-line @typescript-eslint/no-empty-function
-    public override onLanguageClientSet(_languageClient: LanguageClient): void {}
+    public override onLanguageClientSet(
+        _languageClient: LanguageClient,
+        // eslint-disable-next-line @typescript-eslint/no-empty-function
+    ): void {}
 
     public dispose(): void {
         this.command.dispose();
@@ -59,12 +66,15 @@ export class RemoteFilesFeature extends LanguageClientConsumer {
     }
 
     private isDocumentRemote(doc: vscode.TextDocument): boolean {
-        return doc.fileName.toLowerCase().startsWith(this.tempSessionPathPrefix);
+        return doc.fileName
+            .toLowerCase()
+            .startsWith(this.tempSessionPathPrefix);
     }
 
     private closeRemoteFiles(): void {
-        const remoteDocuments =
-            vscode.workspace.textDocuments.filter((doc) => this.isDocumentRemote(doc));
+        const remoteDocuments = vscode.workspace.textDocuments.filter((doc) =>
+            this.isDocumentRemote(doc),
+        );
 
         async function innerCloseFiles(): Promise<void> {
             const doc = remoteDocuments.pop();
@@ -73,7 +83,9 @@ export class RemoteFilesFeature extends LanguageClientConsumer {
             }
 
             await vscode.window.showTextDocument(doc);
-            await vscode.commands.executeCommand("workbench.action.closeActiveEditor");
+            await vscode.commands.executeCommand(
+                "workbench.action.closeActiveEditor",
+            );
             await innerCloseFiles();
         }
 
diff --git a/src/features/ShowHelp.ts b/src/features/ShowHelp.ts
index 59616e5274..6af843e53b 100644
--- a/src/features/ShowHelp.ts
+++ b/src/features/ShowHelp.ts
@@ -3,11 +3,10 @@
 
 import vscode = require("vscode");
 import { NotificationType } from "vscode-languageclient";
-import { LanguageClientConsumer } from "../languageClientConsumer";
 import type { LanguageClient } from "vscode-languageclient/node";
+import { LanguageClientConsumer } from "../languageClientConsumer";
 
-interface IShowHelpNotificationArguments {
-}
+interface IShowHelpNotificationArguments {}
 
 export const ShowHelpNotificationType =
     new NotificationType<IShowHelpNotificationArguments>("powerShell/showHelp");
@@ -17,33 +16,42 @@ export class ShowHelpFeature extends LanguageClientConsumer {
 
     constructor() {
         super();
-        this.command = vscode.commands.registerCommand("PowerShell.ShowHelp", async (item?) => {
-            if (!item?.Name) {
-
-                const editor = vscode.window.activeTextEditor;
-                if (editor === undefined) {
-                    return;
+        this.command = vscode.commands.registerCommand(
+            "PowerShell.ShowHelp",
+            async (item?) => {
+                if (!item?.Name) {
+                    const editor = vscode.window.activeTextEditor;
+                    if (editor === undefined) {
+                        return;
+                    }
+
+                    const selection = editor.selection;
+                    const doc = editor.document;
+                    const cwr = doc.getWordRangeAtPosition(selection.active);
+                    const text = doc.getText(cwr);
+
+                    const client =
+                        await LanguageClientConsumer.getLanguageClient();
+                    await client.sendNotification(ShowHelpNotificationType, {
+                        text,
+                    });
+                } else {
+                    const client =
+                        await LanguageClientConsumer.getLanguageClient();
+                    await client.sendNotification(ShowHelpNotificationType, {
+                        text: item.Name,
+                    });
                 }
-
-                const selection = editor.selection;
-                const doc = editor.document;
-                const cwr = doc.getWordRangeAtPosition(selection.active);
-                const text = doc.getText(cwr);
-
-                const client = await LanguageClientConsumer.getLanguageClient();
-                await client.sendNotification(ShowHelpNotificationType, { text });
-            } else {
-                const client = await LanguageClientConsumer.getLanguageClient();
-                await client.sendNotification(ShowHelpNotificationType, { text: item.Name });
-            }
-        });
+            },
+        );
     }
 
-    // eslint-disable-next-line @typescript-eslint/no-empty-function
-    public override onLanguageClientSet(_languageClient: LanguageClient): void {}
+    public override onLanguageClientSet(
+        _languageClient: LanguageClient,
+        // eslint-disable-next-line @typescript-eslint/no-empty-function
+    ): void {}
 
     public dispose(): void {
         this.command.dispose();
     }
-
 }
diff --git a/src/features/UpdatePowerShell.ts b/src/features/UpdatePowerShell.ts
index adc5194912..acd3434fb5 100644
--- a/src/features/UpdatePowerShell.ts
+++ b/src/features/UpdatePowerShell.ts
@@ -19,8 +19,10 @@ interface IUpdateMessageItem extends vscode.MessageItem {
 export class UpdatePowerShell {
     private static LTSBuildInfoURL = "https://aka.ms/pwsh-buildinfo-lts";
     private static StableBuildInfoURL = "https://aka.ms/pwsh-buildinfo-stable";
-    private static PreviewBuildInfoURL = "https://aka.ms/pwsh-buildinfo-preview";
-    private static GitHubWebReleaseURL = "https://github.com/PowerShell/PowerShell/releases/tag/";
+    private static PreviewBuildInfoURL =
+        "https://aka.ms/pwsh-buildinfo-preview";
+    private static GitHubWebReleaseURL =
+        "https://github.com/PowerShell/PowerShell/releases/tag/";
     private static promptOptions: IUpdateMessageItem[] = [
         {
             id: 0,
@@ -40,7 +42,8 @@ export class UpdatePowerShell {
     constructor(
         private sessionSettings: Settings,
         private logger: ILogger,
-        versionDetails: IPowerShellVersionDetails) {
+        versionDetails: IPowerShellVersionDetails,
+    ) {
         // We use the commit field as it's like
         // '7.3.0-preview.3-508-g07175ae0ff8eb7306fe0b0fc7d...' which translates
         // to SemVer. The version handler in PSES handles Windows PowerShell and
@@ -51,20 +54,26 @@ export class UpdatePowerShell {
     private shouldCheckForUpdate(): boolean {
         // Respect user setting.
         if (!this.sessionSettings.promptToUpdatePowerShell) {
-            this.logger.writeDebug("Setting 'promptToUpdatePowerShell' was false.");
+            this.logger.writeDebug(
+                "Setting 'promptToUpdatePowerShell' was false.",
+            );
             return false;
         }
 
         // Respect environment configuration.
         if (process.env.POWERSHELL_UPDATECHECK?.toLowerCase() === "off") {
-            this.logger.writeDebug("Environment variable 'POWERSHELL_UPDATECHECK' was 'Off'.");
+            this.logger.writeDebug(
+                "Environment variable 'POWERSHELL_UPDATECHECK' was 'Off'.",
+            );
             return false;
         }
 
         // Skip prompting when using Windows PowerShell for now.
         if (this.localVersion.compare("6.0.0") === -1) {
             // TODO: Maybe we should announce PowerShell Core?
-            this.logger.writeDebug("Not prompting to update Windows PowerShell.");
+            this.logger.writeDebug(
+                "Not prompting to update Windows PowerShell.",
+            );
             return false;
         }
 
@@ -78,7 +87,9 @@ export class UpdatePowerShell {
 
             // Skip if PowerShell is self-built, that is, this contains a commit hash.
             if (commit.length >= 40) {
-                this.logger.writeDebug("Not prompting to update development build.");
+                this.logger.writeDebug(
+                    "Not prompting to update development build.",
+                );
                 return false;
             }
 
@@ -106,7 +117,9 @@ export class UpdatePowerShell {
         //     "ReleaseTag": "v7.2.7"
         // }
         const data = await response.json();
-        this.logger.writeDebug(`Received from '${url}':\n${JSON.stringify(data, undefined, 2)}`);
+        this.logger.writeDebug(
+            `Received from '${url}':\n${JSON.stringify(data, undefined, 2)}`,
+        );
         return data.ReleaseTag;
     }
 
@@ -120,14 +133,18 @@ export class UpdatePowerShell {
         if (process.env.POWERSHELL_UPDATECHECK?.toLowerCase() === "lts") {
             // Only check for update to LTS.
             this.logger.writeDebug("Checking for LTS update...");
-            const tag = await this.getRemoteVersion(UpdatePowerShell.LTSBuildInfoURL);
+            const tag = await this.getRemoteVersion(
+                UpdatePowerShell.LTSBuildInfoURL,
+            );
             if (tag != undefined) {
                 tags.push(tag);
             }
         } else {
             // Check for update to stable.
             this.logger.writeDebug("Checking for stable update...");
-            const tag = await this.getRemoteVersion(UpdatePowerShell.StableBuildInfoURL);
+            const tag = await this.getRemoteVersion(
+                UpdatePowerShell.StableBuildInfoURL,
+            );
             if (tag != undefined) {
                 tags.push(tag);
             }
@@ -135,7 +152,9 @@ export class UpdatePowerShell {
             // Also check for a preview update.
             if (this.localVersion.prerelease.length > 0) {
                 this.logger.writeDebug("Checking for preview update...");
-                const tag = await this.getRemoteVersion(UpdatePowerShell.PreviewBuildInfoURL);
+                const tag = await this.getRemoteVersion(
+                    UpdatePowerShell.PreviewBuildInfoURL,
+                );
                 if (tag != undefined) {
                     tags.push(tag);
                 }
@@ -161,23 +180,30 @@ export class UpdatePowerShell {
             }
         } catch (err) {
             // Best effort. This probably failed to fetch the data from GitHub.
-            this.logger.writeWarning(err instanceof Error ? err.message : "unknown");
+            this.logger.writeWarning(
+                err instanceof Error ? err.message : "unknown",
+            );
         }
     }
 
     private async openReleaseInBrowser(tag: string): Promise<void> {
-        const url = vscode.Uri.parse(UpdatePowerShell.GitHubWebReleaseURL + tag);
+        const url = vscode.Uri.parse(
+            UpdatePowerShell.GitHubWebReleaseURL + tag,
+        );
         await vscode.env.openExternal(url);
     }
 
     private async promptToUpdate(tag: string): Promise<void> {
         const releaseVersion = new SemVer(tag);
-        this.logger.write(`Prompting to update PowerShell v${this.localVersion.version} to v${releaseVersion.version}.`);
+        this.logger.write(
+            `Prompting to update PowerShell v${this.localVersion.version} to v${releaseVersion.version}.`,
+        );
         const result = await vscode.window.showInformationMessage(
             `PowerShell v${this.localVersion.version} is out-of-date.
              The latest version is v${releaseVersion.version}.
              Would you like to open the GitHub release in your browser?`,
-            ...UpdatePowerShell.promptOptions);
+            ...UpdatePowerShell.promptOptions,
+        );
 
         // If the user cancels the notification.
         if (!result) {
@@ -185,22 +211,29 @@ export class UpdatePowerShell {
             return;
         }
 
-        this.logger.writeDebug(`User said '${UpdatePowerShell.promptOptions[result.id].title}'.`);
+        this.logger.writeDebug(
+            `User said '${UpdatePowerShell.promptOptions[result.id].title}'.`,
+        );
 
         switch (result.id) {
-        // Yes
-        case 0:
-            await this.openReleaseInBrowser(tag);
-            break;
+            // Yes
+            case 0:
+                await this.openReleaseInBrowser(tag);
+                break;
             // Not Now
-        case 1:
-            break;
+            case 1:
+                break;
             // Don't Show Again
-        case 2:
-            await changeSetting("promptToUpdatePowerShell", false, true, this.logger);
-            break;
-        default:
-            break;
+            case 2:
+                await changeSetting(
+                    "promptToUpdatePowerShell",
+                    false,
+                    true,
+                    this.logger,
+                );
+                break;
+            default:
+                break;
         }
     }
 }
diff --git a/src/languageClientConsumer.ts b/src/languageClientConsumer.ts
index 3106d86cc4..e161f5a34e 100644
--- a/src/languageClientConsumer.ts
+++ b/src/languageClientConsumer.ts
@@ -14,7 +14,9 @@ export abstract class LanguageClientConsumer {
 
     // This is called in the session manager when the client is started (so we
     // can wait for that). It's what actually resolves the promise.
-    public static onLanguageClientStarted(languageClient: LanguageClient): void {
+    public static onLanguageClientStarted(
+        languageClient: LanguageClient,
+    ): void {
         // It should have been created earlier, but if not, create and resolve it.
         this.languageClientPromise ??= Promise.resolve(languageClient);
         this.getLanguageClientResolve?.(languageClient);
@@ -34,7 +36,8 @@ export abstract class LanguageClientConsumer {
         LanguageClientConsumer.languageClientPromise?.catch(() => {
             LanguageClientConsumer.languageClientPromise = undefined;
         });
-        LanguageClientConsumer.languageClientPromise ??= LanguageClientConsumer.createLanguageClientPromise();
+        LanguageClientConsumer.languageClientPromise ??=
+            LanguageClientConsumer.createLanguageClientPromise();
         return LanguageClientConsumer.languageClientPromise;
     }
 
@@ -45,22 +48,29 @@ export abstract class LanguageClientConsumer {
             {
                 location: ProgressLocation.Notification,
                 title: "Please wait, starting PowerShell Extension Terminal...",
-                cancellable: true
+                cancellable: true,
             },
             (_progress, token) => {
                 token.onCancellationRequested(() => {
-                    void window.showErrorMessage("Cancelled PowerShell Extension Terminal start-up.");
+                    void window.showErrorMessage(
+                        "Cancelled PowerShell Extension Terminal start-up.",
+                    );
                 });
 
                 // The real promise!
-                return new Promise<LanguageClient>(
-                    (resolve, reject) => {
-                        // Store the resolve function to be called in resetLanguageClient.
-                        LanguageClientConsumer.getLanguageClientResolve = resolve;
-                        // Reject the promise if the operation is cancelled.
-                        token.onCancellationRequested(() => { reject(new Error("Cancelled PowerShell Extension Terminal start-up.")); });
-                    }
-                );
-            });
+                return new Promise<LanguageClient>((resolve, reject) => {
+                    // Store the resolve function to be called in resetLanguageClient.
+                    LanguageClientConsumer.getLanguageClientResolve = resolve;
+                    // Reject the promise if the operation is cancelled.
+                    token.onCancellationRequested(() => {
+                        reject(
+                            new Error(
+                                "Cancelled PowerShell Extension Terminal start-up.",
+                            ),
+                        );
+                    });
+                });
+            },
+        );
     }
 }
diff --git a/src/logging.ts b/src/logging.ts
index 37fc74072f..4a9d9fa54d 100644
--- a/src/logging.ts
+++ b/src/logging.ts
@@ -1,39 +1,60 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
-import { type LogOutputChannel, LogLevel, window, type Event } from "vscode";
+import { LogLevel, window, type Event, type LogOutputChannel } from "vscode";
 
 /** Interface for logging operations. New features should use this interface for the "type" of logger.
  *  This will allow for easy mocking of the logger during unit tests.
  */
 export interface ILogger {
     write(message: string, ...additionalMessages: string[]): void;
-    writeAndShowInformation(message: string, ...additionalMessages: string[]): Promise<void>;
+    writeAndShowInformation(
+        message: string,
+        ...additionalMessages: string[]
+    ): Promise<void>;
     writeTrace(message: string, ...additionalMessages: string[]): void;
     writeDebug(message: string, ...additionalMessages: string[]): void;
     writeWarning(message: string, ...additionalMessages: string[]): void;
-    writeAndShowWarning(message: string, ...additionalMessages: string[]): Promise<void>;
+    writeAndShowWarning(
+        message: string,
+        ...additionalMessages: string[]
+    ): Promise<void>;
     writeError(message: string, ...additionalMessages: string[]): void;
-    writeAndShowError(message: string, ...additionalMessages: string[]): Promise<void>;
+    writeAndShowError(
+        message: string,
+        ...additionalMessages: string[]
+    ): Promise<void>;
     writeAndShowErrorWithActions(
         message: string,
-        actions: { prompt: string; action: (() => Promise<void>) | undefined }[]): Promise<void>;
+        actions: {
+            prompt: string;
+            action: (() => Promise<void>) | undefined;
+        }[],
+    ): Promise<void>;
 }
 
 export class Logger implements ILogger {
     // Log output channel handles all the verbosity management so we don't have to.
     private logChannel: LogOutputChannel;
-    public get logLevel(): LogLevel { return this.logChannel.logLevel;}
+    public get logLevel(): LogLevel {
+        return this.logChannel.logLevel;
+    }
 
     constructor(logChannel?: LogOutputChannel) {
-        this.logChannel = logChannel ?? window.createOutputChannel("PowerShell", {log: true});
+        this.logChannel =
+            logChannel ??
+            window.createOutputChannel("PowerShell", { log: true });
     }
 
     public dispose(): void {
         this.logChannel.dispose();
     }
 
-    private writeAtLevel(logLevel: LogLevel, message: string, ...additionalMessages: string[]): void {
+    private writeAtLevel(
+        logLevel: LogLevel,
+        message: string,
+        ...additionalMessages: string[]
+    ): void {
         if (logLevel >= this.logLevel) {
             void this.writeLine(message, logLevel);
 
@@ -47,10 +68,17 @@ export class Logger implements ILogger {
         this.writeAtLevel(LogLevel.Info, message, ...additionalMessages);
     }
 
-    public async writeAndShowInformation(message: string, ...additionalMessages: string[]): Promise<void> {
+    public async writeAndShowInformation(
+        message: string,
+        ...additionalMessages: string[]
+    ): Promise<void> {
         this.write(message, ...additionalMessages);
 
-        const selection = await window.showInformationMessage(message, "Show Logs", "Okay");
+        const selection = await window.showInformationMessage(
+            message,
+            "Show Logs",
+            "Okay",
+        );
         if (selection === "Show Logs") {
             this.showLogPanel();
         }
@@ -64,11 +92,17 @@ export class Logger implements ILogger {
         this.writeAtLevel(LogLevel.Debug, message, ...additionalMessages);
     }
 
-    public writeWarning(message: string, ...additionalMessages: string[]): void {
+    public writeWarning(
+        message: string,
+        ...additionalMessages: string[]
+    ): void {
         this.writeAtLevel(LogLevel.Warning, message, ...additionalMessages);
     }
 
-    public async writeAndShowWarning(message: string, ...additionalMessages: string[]): Promise<void> {
+    public async writeAndShowWarning(
+        message: string,
+        ...additionalMessages: string[]
+    ): Promise<void> {
         this.writeWarning(message, ...additionalMessages);
 
         const selection = await window.showWarningMessage(message, "Show Logs");
@@ -81,7 +115,10 @@ export class Logger implements ILogger {
         this.writeAtLevel(LogLevel.Error, message, ...additionalMessages);
     }
 
-    public async writeAndShowError(message: string, ...additionalMessages: string[]): Promise<void> {
+    public async writeAndShowError(
+        message: string,
+        ...additionalMessages: string[]
+    ): Promise<void> {
         this.writeError(message, ...additionalMessages);
 
         const choice = await window.showErrorMessage(message, "Show Logs");
@@ -92,12 +129,21 @@ export class Logger implements ILogger {
 
     public async writeAndShowErrorWithActions(
         message: string,
-        actions: { prompt: string; action: (() => Promise<void>) | undefined }[]): Promise<void> {
+        actions: {
+            prompt: string;
+            action: (() => Promise<void>) | undefined;
+        }[],
+    ): Promise<void> {
         this.writeError(message);
 
         const fullActions = [
             ...actions,
-            { prompt: "Show Logs", action: (): void => { this.showLogPanel(); } },
+            {
+                prompt: "Show Logs",
+                action: (): void => {
+                    this.showLogPanel();
+                },
+            },
         ];
 
         const actionKeys: string[] = fullActions.map((action) => action.prompt);
@@ -105,7 +151,7 @@ export class Logger implements ILogger {
         const choice = await window.showErrorMessage(message, ...actionKeys);
         if (choice) {
             for (const action of fullActions) {
-                if (choice === action.prompt && action.action !== undefined ) {
+                if (choice === action.prompt && action.action !== undefined) {
                     await action.action();
                     return;
                 }
@@ -117,16 +163,32 @@ export class Logger implements ILogger {
         this.logChannel.show();
     }
 
-    private async writeLine(message: string, level: LogLevel = LogLevel.Info): Promise<void> {
+    private async writeLine(
+        message: string,
+        level: LogLevel = LogLevel.Info,
+    ): Promise<void> {
         return new Promise<void>((resolve) => {
             switch (level) {
-            case LogLevel.Off: break;
-            case LogLevel.Trace: this.logChannel.trace(message); break;
-            case LogLevel.Debug: this.logChannel.debug(message); break;
-            case LogLevel.Info: this.logChannel.info(message); break;
-            case LogLevel.Warning: this.logChannel.warn(message); break;
-            case LogLevel.Error: this.logChannel.error(message); break;
-            default: this.logChannel.appendLine(message); break;
+                case LogLevel.Off:
+                    break;
+                case LogLevel.Trace:
+                    this.logChannel.trace(message);
+                    break;
+                case LogLevel.Debug:
+                    this.logChannel.debug(message);
+                    break;
+                case LogLevel.Info:
+                    this.logChannel.info(message);
+                    break;
+                case LogLevel.Warning:
+                    this.logChannel.warn(message);
+                    break;
+                case LogLevel.Error:
+                    this.logChannel.error(message);
+                    break;
+                default:
+                    this.logChannel.appendLine(message);
+                    break;
             }
             resolve();
         });
@@ -140,7 +202,9 @@ export class Logger implements ILogger {
 export class LanguageClientOutputChannelAdapter implements LogOutputChannel {
     private _channel: LogOutputChannel | undefined;
     private get channel(): LogOutputChannel {
-        this._channel ??= window.createOutputChannel(this.channelName, {log: true});
+        this._channel ??= window.createOutputChannel(this.channelName, {
+            log: true,
+        });
         return this._channel;
     }
 
@@ -152,9 +216,14 @@ export class LanguageClientOutputChannelAdapter implements LogOutputChannel {
      */
     constructor(
         private channelName: string,
-        private parser: (message: string) => [string, LogLevel] | undefined = LanguageClientOutputChannelAdapter.omnisharpLspParser.bind(this)
-    ) {
-    }
+        private parser: (
+            message: string,
+        ) =>
+            | [string, LogLevel]
+            | undefined = LanguageClientOutputChannelAdapter.omnisharpLspParser.bind(
+            this,
+        ),
+    ) {}
 
     public appendLine(message: string): void {
         this.append(message);
@@ -162,12 +231,17 @@ export class LanguageClientOutputChannelAdapter implements LogOutputChannel {
 
     public append(message: string): void {
         const parseResult = this.parser(message);
-        if (parseResult !== undefined) {this.sendLogMessage(...parseResult);}
+        if (parseResult !== undefined) {
+            this.sendLogMessage(...parseResult);
+        }
     }
 
     /** Converts from Omnisharp logs since middleware for LogMessage does not currently exist **/
     public static omnisharpLspParser(message: string): [string, LogLevel] {
-        const logLevelMatch = /^\[(?<level>Trace|Debug|Info|Warn|Error) +- \d+:\d+:\d+ [AP]M\] (?<message>.+)/.exec(message);
+        const logLevelMatch =
+            /^\[(?<level>Trace|Debug|Info|Warn|Error) +- \d+:\d+:\d+ [AP]M\] (?<message>.+)/.exec(
+                message,
+            );
         const logLevel: LogLevel = logLevelMatch?.groups?.level
             ? LogLevel[logLevelMatch.groups.level as keyof typeof LogLevel]
             : LogLevel.Info;
@@ -178,24 +252,24 @@ export class LanguageClientOutputChannelAdapter implements LogOutputChannel {
 
     protected sendLogMessage(message: string, level: LogLevel): void {
         switch (level) {
-        case LogLevel.Trace:
-            this.channel.trace(message);
-            break;
-        case LogLevel.Debug:
-            this.channel.debug(message);
-            break;
-        case LogLevel.Info:
-            this.channel.info(message);
-            break;
-        case LogLevel.Warning:
-            this.channel.warn(message);
-            break;
-        case LogLevel.Error:
-            this.channel.error(message);
-            break;
-        default:
-            this.channel.error("!UNKNOWN LOG LEVEL!: " + message);
-            break;
+            case LogLevel.Trace:
+                this.channel.trace(message);
+                break;
+            case LogLevel.Debug:
+                this.channel.debug(message);
+                break;
+            case LogLevel.Info:
+                this.channel.info(message);
+                break;
+            case LogLevel.Warning:
+                this.channel.warn(message);
+                break;
+            case LogLevel.Error:
+                this.channel.error(message);
+                break;
+            default:
+                this.channel.error("!UNKNOWN LOG LEVEL!: " + message);
+                break;
         }
     }
 
@@ -250,9 +324,12 @@ export class LanguageClientOutputChannelAdapter implements LogOutputChannel {
 
 /** Special parsing for PowerShell Editor Services LSP messages since the LogLevel cannot be read due to vscode
  * LanguageClient Limitations (https://github.com/microsoft/vscode-languageserver-node/issues/1116)
-  */
+ */
 export function PsesParser(message: string): [string, LogLevel] {
-    const logLevelMatch = /^<(?<level>Trace|Debug|Info|Warning|Error)>(?<message>.+)/.exec(message);
+    const logLevelMatch =
+        /^<(?<level>Trace|Debug|Info|Warning|Error)>(?<message>.+)/.exec(
+            message,
+        );
     const logLevel: LogLevel = logLevelMatch?.groups?.level
         ? LogLevel[logLevelMatch.groups.level as keyof typeof LogLevel]
         : LogLevel.Info;
@@ -263,7 +340,8 @@ export function PsesParser(message: string): [string, LogLevel] {
 
 /** Lsp Trace Parser that does some additional parsing and formatting to make it look nicer */
 export function LspTraceParser(message: string): [string, LogLevel] {
-    let [parsedMessage, level] = LanguageClientOutputChannelAdapter.omnisharpLspParser(message);
+    let [parsedMessage, level] =
+        LanguageClientOutputChannelAdapter.omnisharpLspParser(message);
     if (parsedMessage.startsWith("Sending ")) {
         parsedMessage = parsedMessage.replace("Sending", "➡️");
         level = LogLevel.Debug;
@@ -272,8 +350,9 @@ export function LspTraceParser(message: string): [string, LogLevel] {
         parsedMessage = parsedMessage.replace("Received", "⬅️");
         level = LogLevel.Debug;
     }
-    if (parsedMessage.startsWith("Params:")
-        || parsedMessage.startsWith("Result:")
+    if (
+        parsedMessage.startsWith("Params:") ||
+        parsedMessage.startsWith("Result:")
     ) {
         level = LogLevel.Trace;
     }
diff --git a/src/platform.ts b/src/platform.ts
index b4b032e204..76ca5992ed 100644
--- a/src/platform.ts
+++ b/src/platform.ts
@@ -4,12 +4,16 @@
 import * as os from "os";
 import * as path from "path";
 import * as process from "process";
-import vscode = require("vscode");
+import untildify from "untildify";
 import { integer } from "vscode-languageserver-protocol";
 import type { ILogger } from "./logging";
-import { changeSetting, getSettings, type PowerShellAdditionalExePathSettings } from "./settings";
+import {
+    changeSetting,
+    getSettings,
+    type PowerShellAdditionalExePathSettings,
+} from "./settings";
 import * as utils from "./utils";
-import untildify from "untildify";
+import vscode = require("vscode");
 
 const WindowsPowerShell64BitLabel = "Windows PowerShell (x64)";
 const WindowsPowerShell32BitLabel = "Windows PowerShell (x86)";
@@ -57,11 +61,12 @@ export function getPlatformDetails(): IPlatformDetails {
         operatingSystem = OperatingSystem.Linux;
     }
 
-    const isProcess64Bit = (process.arch === "x64" || process.arch === "arm64");
+    const isProcess64Bit = process.arch === "x64" || process.arch === "arm64";
 
     return {
         operatingSystem,
-        isOS64Bit: isProcess64Bit || (process.env.PROCESSOR_ARCHITEW6432 !== undefined),
+        isOS64Bit:
+            isProcess64Bit || process.env.PROCESSOR_ARCHITEW6432 !== undefined,
         isProcess64Bit,
     };
 }
@@ -89,12 +94,15 @@ export class PowerShellExeFinder {
         private platformDetails: IPlatformDetails,
         // Additional configured PowerShells
         private additionalPowerShellExes: PowerShellAdditionalExePathSettings,
-        private logger?: ILogger) { }
+        private logger?: ILogger,
+    ) {}
 
     /**
      * Returns the first available PowerShell executable found in the search order.
      */
-    public async getFirstAvailablePowerShellInstallation(): Promise<IPowerShellExeDetails | undefined> {
+    public async getFirstAvailablePowerShellInstallation(): Promise<
+        IPowerShellExeDetails | undefined
+    > {
         for await (const pwsh of this.enumeratePowerShellInstallations()) {
             return pwsh;
         }
@@ -104,7 +112,9 @@ export class PowerShellExeFinder {
     /**
      * Get an array of all PowerShell executables found when searching for PowerShell installations.
      */
-    public async getAllAvailablePowerShellInstallations(): Promise<IPowerShellExeDetails[]> {
+    public async getAllAvailablePowerShellInstallations(): Promise<
+        IPowerShellExeDetails[]
+    > {
         const array: IPowerShellExeDetails[] = [];
         for await (const pwsh of this.enumeratePowerShellInstallations()) {
             array.push(pwsh);
@@ -116,7 +126,9 @@ export class PowerShellExeFinder {
      * Fixes PowerShell paths when Windows PowerShell is set to the non-native bitness.
      * @param configuredPowerShellPath the PowerShell path configured by the user.
      */
-    public fixWindowsPowerShellPath(configuredPowerShellPath: string): string | undefined {
+    public fixWindowsPowerShellPath(
+        configuredPowerShellPath: string,
+    ): string | undefined {
         const altWinPS = this.findWinPS({ useAlternateBitness: true });
 
         if (!altWinPS) {
@@ -124,7 +136,8 @@ export class PowerShellExeFinder {
         }
 
         const lowerAltWinPSPath = altWinPS.exePath.toLocaleLowerCase();
-        const lowerConfiguredPath = configuredPowerShellPath.toLocaleLowerCase();
+        const lowerConfiguredPath =
+            configuredPowerShellPath.toLocaleLowerCase();
 
         if (lowerConfiguredPath === lowerAltWinPSPath) {
             return this.findWinPS()?.exePath;
@@ -142,7 +155,7 @@ export class PowerShellExeFinder {
     public async *enumeratePowerShellInstallations(): AsyncIterable<IPowerShellExeDetails> {
         // Get the default PowerShell installations first
         for await (const defaultPwsh of this.enumerateDefaultPowerShellInstallations()) {
-            if (defaultPwsh && await defaultPwsh.exists()) {
+            if (defaultPwsh && (await defaultPwsh.exists())) {
                 yield defaultPwsh;
             }
         }
@@ -157,9 +170,17 @@ export class PowerShellExeFinder {
                 this.logger?.writeWarning(message);
 
                 if (!getSettings().suppressAdditionalExeNotFoundWarning) {
-                    const selection = await vscode.window.showWarningMessage(message, "Don't Show Again");
+                    const selection = await vscode.window.showWarningMessage(
+                        message,
+                        "Don't Show Again",
+                    );
                     if (selection !== undefined) {
-                        await changeSetting("suppressAdditionalExeNotFoundWarning", true, true, this.logger);
+                        await changeSetting(
+                            "suppressAdditionalExeNotFoundWarning",
+                            true,
+                            true,
+                            this.logger,
+                        );
                     }
                 }
             }
@@ -172,28 +193,32 @@ export class PowerShellExeFinder {
      * which will check whether the executable exists.
      * TODO: We really need to define the order in which we search for stable/LTS/preview/daily
      */
-    private async *enumerateDefaultPowerShellInstallations(): AsyncIterable<IPossiblePowerShellExe | undefined> {
+    private async *enumerateDefaultPowerShellInstallations(): AsyncIterable<
+        IPossiblePowerShellExe | undefined
+    > {
         // Find PSCore stable first
         yield this.findPSCoreStable();
 
         switch (this.platformDetails.operatingSystem) {
-        case OperatingSystem.Linux:
-            // On Linux, find the snap
-            yield this.findPSCoreStableSnap();
-            break;
-
-        case OperatingSystem.Windows:
-            // Windows may have a 32-bit pwsh.exe
-            yield this.findPSCoreWindowsInstallation({ useAlternateBitness: true });
-            // Also look for the MSIX/UWP installation
-            yield await this.findPSCoreMsix();
-            break;
-
-        case OperatingSystem.MacOS:
-            // On MacOS, find the Homebrew installations
-            yield this.findPSCoreHomebrewStable();
-            yield this.findPSCoreHomebrewLTS();
-            break;
+            case OperatingSystem.Linux:
+                // On Linux, find the snap
+                yield this.findPSCoreStableSnap();
+                break;
+
+            case OperatingSystem.Windows:
+                // Windows may have a 32-bit pwsh.exe
+                yield this.findPSCoreWindowsInstallation({
+                    useAlternateBitness: true,
+                });
+                // Also look for the MSIX/UWP installation
+                yield await this.findPSCoreMsix();
+                break;
+
+            case OperatingSystem.MacOS:
+                // On MacOS, find the Homebrew installations
+                yield this.findPSCoreHomebrewStable();
+                yield this.findPSCoreHomebrewLTS();
+                break;
         }
 
         // Look for the .NET global tool
@@ -205,32 +230,35 @@ export class PowerShellExeFinder {
         yield this.findPSCorePreview();
 
         switch (this.platformDetails.operatingSystem) {
-        // On Linux, there might be a preview snap
-        case OperatingSystem.Linux:
-            yield this.findPSCorePreviewSnap();
-            break;
+            // On Linux, there might be a preview snap
+            case OperatingSystem.Linux:
+                yield this.findPSCorePreviewSnap();
+                break;
 
-        case OperatingSystem.Windows:
-            // Find a preview MSIX
-            yield this.findPSCoreMsix({ findPreview: true });
+            case OperatingSystem.Windows:
+                // Find a preview MSIX
+                yield this.findPSCoreMsix({ findPreview: true });
 
-            // Look for pwsh-preview with the opposite bitness
-            yield this.findPSCoreWindowsInstallation({ useAlternateBitness: true, findPreview: true });
+                // Look for pwsh-preview with the opposite bitness
+                yield this.findPSCoreWindowsInstallation({
+                    useAlternateBitness: true,
+                    findPreview: true,
+                });
 
-            // Finally, get Windows PowerShell
+                // Finally, get Windows PowerShell
 
-            // Get the natural Windows PowerShell for the process bitness
-            yield this.findWinPS();
+                // Get the natural Windows PowerShell for the process bitness
+                yield this.findWinPS();
 
-            // Get the alternate bitness Windows PowerShell
-            yield this.findWinPS({ useAlternateBitness: true });
+                // Get the alternate bitness Windows PowerShell
+                yield this.findWinPS({ useAlternateBitness: true });
 
-            break;
+                break;
 
-        case OperatingSystem.MacOS:
-            // On MacOS, find the Homebrew preview
-            yield this.findPSCoreHomebrewPreview();
-            break;
+            case OperatingSystem.MacOS:
+                // On MacOS, find the Homebrew preview
+                yield this.findPSCoreHomebrewPreview();
+                break;
         }
 
         // Look for PSCore daily
@@ -243,16 +271,23 @@ export class PowerShellExeFinder {
      */
     public async *enumerateAdditionalPowerShellInstallations(): AsyncIterable<IPossiblePowerShellExe> {
         for (const versionName in this.additionalPowerShellExes) {
-            if (Object.prototype.hasOwnProperty.call(this.additionalPowerShellExes, versionName)) {
-                let exePath: string | undefined = utils.stripQuotePair(this.additionalPowerShellExes[versionName]);
+            if (
+                Object.prototype.hasOwnProperty.call(
+                    this.additionalPowerShellExes,
+                    versionName,
+                )
+            ) {
+                let exePath: string | undefined = utils.stripQuotePair(
+                    this.additionalPowerShellExes[versionName],
+                );
                 if (!exePath) {
                     continue;
                 }
 
                 exePath = untildify(exePath);
-                const args: [string, undefined, boolean, boolean]
+                const args: [string, undefined, boolean, boolean] =
                     // Must be a tuple type and is suppressing the warning
-                    = [versionName, undefined, true, true];
+                    [versionName, undefined, true, true];
 
                 // Always search for what the user gave us first, but with the warning
                 // suppressed so we can display it after all possibilities are exhausted
@@ -263,12 +298,24 @@ export class PowerShellExeFinder {
                 }
 
                 // Also search for `pwsh[.exe]` and `powershell[.exe]` if missing
-                if (this.platformDetails.operatingSystem === OperatingSystem.Windows) {
+                if (
+                    this.platformDetails.operatingSystem ===
+                    OperatingSystem.Windows
+                ) {
                     // Handle Windows where '.exe' and 'powershell' are things
-                    if (!exePath.endsWith("pwsh.exe") && !exePath.endsWith("powershell.exe")) {
-                        if (exePath.endsWith("pwsh") || exePath.endsWith("powershell")) {
+                    if (
+                        !exePath.endsWith("pwsh.exe") &&
+                        !exePath.endsWith("powershell.exe")
+                    ) {
+                        if (
+                            exePath.endsWith("pwsh") ||
+                            exePath.endsWith("powershell")
+                        ) {
                             // Add extension if that was missing
-                            pwsh = new PossiblePowerShellExe(exePath + ".exe", ...args);
+                            pwsh = new PossiblePowerShellExe(
+                                exePath + ".exe",
+                                ...args,
+                            );
                             if (await pwsh.exists()) {
                                 yield pwsh;
                                 continue;
@@ -276,12 +323,18 @@ export class PowerShellExeFinder {
                         }
                         // Also add full exe names (this isn't an else just in case
                         // the folder was named "pwsh" or "powershell")
-                        pwsh = new PossiblePowerShellExe(path.join(exePath, "pwsh.exe"), ...args);
+                        pwsh = new PossiblePowerShellExe(
+                            path.join(exePath, "pwsh.exe"),
+                            ...args,
+                        );
                         if (await pwsh.exists()) {
                             yield pwsh;
                             continue;
                         }
-                        pwsh = new PossiblePowerShellExe(path.join(exePath, "powershell.exe"), ...args);
+                        pwsh = new PossiblePowerShellExe(
+                            path.join(exePath, "powershell.exe"),
+                            ...args,
+                        );
                         if (await pwsh.exists()) {
                             yield pwsh;
                             continue;
@@ -289,7 +342,10 @@ export class PowerShellExeFinder {
                     }
                 } else if (!exePath.endsWith("pwsh")) {
                     // Always just 'pwsh' on non-Windows
-                    pwsh = new PossiblePowerShellExe(path.join(exePath, "pwsh"), ...args);
+                    pwsh = new PossiblePowerShellExe(
+                        path.join(exePath, "pwsh"),
+                        ...args,
+                    );
                     if (await pwsh.exists()) {
                         yield pwsh;
                         continue;
@@ -297,127 +353,191 @@ export class PowerShellExeFinder {
                 }
 
                 // If we're still being iterated over, no permutation of the given path existed so yield an object with the warning unsuppressed
-                yield new PossiblePowerShellExe(exePath, versionName, false, undefined, false);
+                yield new PossiblePowerShellExe(
+                    exePath,
+                    versionName,
+                    false,
+                    undefined,
+                    false,
+                );
             }
         }
     }
 
-    private async findPSCoreStable(): Promise<IPossiblePowerShellExe | undefined> {
+    private async findPSCoreStable(): Promise<
+        IPossiblePowerShellExe | undefined
+    > {
         switch (this.platformDetails.operatingSystem) {
-        case OperatingSystem.Linux:
-            return new PossiblePowerShellExe(LinuxExePath, "PowerShell");
+            case OperatingSystem.Linux:
+                return new PossiblePowerShellExe(LinuxExePath, "PowerShell");
 
-        case OperatingSystem.MacOS:
-            return new PossiblePowerShellExe(MacOSExePath, "PowerShell");
+            case OperatingSystem.MacOS:
+                return new PossiblePowerShellExe(MacOSExePath, "PowerShell");
 
-        case OperatingSystem.Windows:
-            return await this.findPSCoreWindowsInstallation();
+            case OperatingSystem.Windows:
+                return await this.findPSCoreWindowsInstallation();
 
-        case OperatingSystem.Unknown:
-            return undefined;
+            case OperatingSystem.Unknown:
+                return undefined;
         }
     }
 
-    private async findPSCorePreview(): Promise<IPossiblePowerShellExe | undefined> {
+    private async findPSCorePreview(): Promise<
+        IPossiblePowerShellExe | undefined
+    > {
         switch (this.platformDetails.operatingSystem) {
-        case OperatingSystem.Linux:
-            return new PossiblePowerShellExe(LinuxPreviewExePath, "PowerShell Preview");
-
-        case OperatingSystem.MacOS:
-            return new PossiblePowerShellExe(MacOSPreviewExePath, "PowerShell Preview");
-
-        case OperatingSystem.Windows:
-            return await this.findPSCoreWindowsInstallation({ findPreview: true });
-
-        case OperatingSystem.Unknown:
-            return undefined;
+            case OperatingSystem.Linux:
+                return new PossiblePowerShellExe(
+                    LinuxPreviewExePath,
+                    "PowerShell Preview",
+                );
+
+            case OperatingSystem.MacOS:
+                return new PossiblePowerShellExe(
+                    MacOSPreviewExePath,
+                    "PowerShell Preview",
+                );
+
+            case OperatingSystem.Windows:
+                return await this.findPSCoreWindowsInstallation({
+                    findPreview: true,
+                });
+
+            case OperatingSystem.Unknown:
+                return undefined;
         }
     }
 
     /**
-    * If the daily was installed via 'https://aka.ms/install-powershell.ps1', then
-    * this is the default installation location:
-    *
-    * if ($IsWinEnv) {
-    *     $Destination = "$env:LOCALAPPDATA\Microsoft\powershell"
-    * } else {
-    *     $Destination = "~/.powershell"
-    * }
-    *
-    * if ($Daily) {
-    *     $Destination = "${Destination}-daily"
-    * }
-    *
-    * TODO: Remove this after the daily is officially no longer supported.
-    */
+     * If the daily was installed via 'https://aka.ms/install-powershell.ps1', then
+     * this is the default installation location:
+     *
+     * if ($IsWinEnv) {
+     *     $Destination = "$env:LOCALAPPDATA\Microsoft\powershell"
+     * } else {
+     *     $Destination = "~/.powershell"
+     * }
+     *
+     * if ($Daily) {
+     *     $Destination = "${Destination}-daily"
+     * }
+     *
+     * TODO: Remove this after the daily is officially no longer supported.
+     */
     private findPSCoreDaily(): IPossiblePowerShellExe | undefined {
         switch (this.platformDetails.operatingSystem) {
-        case OperatingSystem.Linux:
-        case OperatingSystem.MacOS: {
-            const exePath = path.join(os.homedir(), ".powershell-daily", "pwsh");
-            return new PossiblePowerShellExe(exePath, "PowerShell Daily");
-        }
+            case OperatingSystem.Linux:
+            case OperatingSystem.MacOS: {
+                const exePath = path.join(
+                    os.homedir(),
+                    ".powershell-daily",
+                    "pwsh",
+                );
+                return new PossiblePowerShellExe(exePath, "PowerShell Daily");
+            }
 
-        case OperatingSystem.Windows: {
-            // We can't proceed if there's no LOCALAPPDATA path
-            if (!process.env.LOCALAPPDATA) {
-                return undefined;
+            case OperatingSystem.Windows: {
+                // We can't proceed if there's no LOCALAPPDATA path
+                if (!process.env.LOCALAPPDATA) {
+                    return undefined;
+                }
+                const exePath = path.join(
+                    process.env.LOCALAPPDATA,
+                    "Microsoft",
+                    "powershell-daily",
+                    "pwsh.exe",
+                );
+                return new PossiblePowerShellExe(exePath, "PowerShell Daily");
             }
-            const exePath = path.join(process.env.LOCALAPPDATA, "Microsoft", "powershell-daily", "pwsh.exe");
-            return new PossiblePowerShellExe(exePath, "PowerShell Daily");
-        }
 
-        case OperatingSystem.Unknown:
-            return undefined;
+            case OperatingSystem.Unknown:
+                return undefined;
         }
     }
 
     // The Homebrew installations of PowerShell on Apple Silicon are no longer in the default PATH.
     private findPSCoreHomebrewStable(): IPossiblePowerShellExe {
-        return new PossiblePowerShellExe(MacOSHomebrewExePath, "PowerShell (Homebrew)");
+        return new PossiblePowerShellExe(
+            MacOSHomebrewExePath,
+            "PowerShell (Homebrew)",
+        );
     }
 
     private findPSCoreHomebrewLTS(): IPossiblePowerShellExe {
-        return new PossiblePowerShellExe(MacOSHomebrewLTSExePath, "PowerShell LTS (Homebrew)");
+        return new PossiblePowerShellExe(
+            MacOSHomebrewLTSExePath,
+            "PowerShell LTS (Homebrew)",
+        );
     }
 
     private findPSCoreHomebrewPreview(): IPossiblePowerShellExe {
-        return new PossiblePowerShellExe(MacOSHomebrewPreviewExePath, "PowerShell Preview (Homebrew)");
+        return new PossiblePowerShellExe(
+            MacOSHomebrewPreviewExePath,
+            "PowerShell Preview (Homebrew)",
+        );
     }
 
     private findPSCoreDotnetGlobalTool(): IPossiblePowerShellExe {
-        const exeName: string = this.platformDetails.operatingSystem === OperatingSystem.Windows
-            ? "pwsh.exe"
-            : "pwsh";
-
-        const dotnetGlobalToolExePath: string = path.join(os.homedir(), ".dotnet", "tools", exeName);
+        const exeName: string =
+            this.platformDetails.operatingSystem === OperatingSystem.Windows
+                ? "pwsh.exe"
+                : "pwsh";
+
+        const dotnetGlobalToolExePath: string = path.join(
+            os.homedir(),
+            ".dotnet",
+            "tools",
+            exeName,
+        );
 
         // The dotnet installed version of PowerShell does not support proper argument parsing, and so it fails with our multi-line startup banner.
-        return new PossiblePowerShellExe(dotnetGlobalToolExePath, ".NET Core PowerShell Global Tool", undefined, false);
+        return new PossiblePowerShellExe(
+            dotnetGlobalToolExePath,
+            ".NET Core PowerShell Global Tool",
+            undefined,
+            false,
+        );
     }
 
-    private async findPSCoreMsix({ findPreview }: { findPreview?: boolean } = {}): Promise<IPossiblePowerShellExe | undefined> {
+    private async findPSCoreMsix({
+        findPreview,
+    }: { findPreview?: boolean } = {}): Promise<
+        IPossiblePowerShellExe | undefined
+    > {
         // We can't proceed if there's no LOCALAPPDATA path
         if (!process.env.LOCALAPPDATA) {
             return undefined;
         }
 
         // Find the base directory for MSIX application exe shortcuts
-        const msixAppDir = path.join(process.env.LOCALAPPDATA, "Microsoft", "WindowsApps");
+        const msixAppDir = path.join(
+            process.env.LOCALAPPDATA,
+            "Microsoft",
+            "WindowsApps",
+        );
 
-        if (!await utils.checkIfDirectoryExists(msixAppDir)) {
+        if (!(await utils.checkIfDirectoryExists(msixAppDir))) {
             return undefined;
         }
 
         // Define whether we're looking for the preview or the stable
         const { pwshMsixDirRegex, pwshMsixName } = findPreview
-            ? { pwshMsixDirRegex: PowerShellExeFinder.PwshPreviewMsixRegex, pwshMsixName: "PowerShell Preview (Store)" }
-            : { pwshMsixDirRegex: PowerShellExeFinder.PwshMsixRegex, pwshMsixName: "PowerShell (Store)" };
+            ? {
+                  pwshMsixDirRegex: PowerShellExeFinder.PwshPreviewMsixRegex,
+                  pwshMsixName: "PowerShell Preview (Store)",
+              }
+            : {
+                  pwshMsixDirRegex: PowerShellExeFinder.PwshMsixRegex,
+                  pwshMsixName: "PowerShell (Store)",
+              };
 
         // We should find only one such application, so return on the first one
         for (const name of await utils.readDirectory(msixAppDir)) {
             if (pwshMsixDirRegex.test(name)) {
-                return new PossiblePowerShellExe(path.join(msixAppDir, name, "pwsh.exe"), pwshMsixName);
+                return new PossiblePowerShellExe(
+                    path.join(msixAppDir, name, "pwsh.exe"),
+                    pwshMsixName,
+                );
             }
         }
 
@@ -430,29 +550,41 @@ export class PowerShellExeFinder {
     }
 
     private findPSCorePreviewSnap(): IPossiblePowerShellExe {
-        return new PossiblePowerShellExe(SnapPreviewExePath, "PowerShell Preview Snap");
+        return new PossiblePowerShellExe(
+            SnapPreviewExePath,
+            "PowerShell Preview Snap",
+        );
     }
 
-    private async findPSCoreWindowsInstallation(
-        { useAlternateBitness = false, findPreview = false }:
-            { useAlternateBitness?: boolean; findPreview?: boolean } = {}): Promise<IPossiblePowerShellExe | undefined> {
-
-        const programFilesPath = this.getProgramFilesPath({ useAlternateBitness });
+    private async findPSCoreWindowsInstallation({
+        useAlternateBitness = false,
+        findPreview = false,
+    }: { useAlternateBitness?: boolean; findPreview?: boolean } = {}): Promise<
+        IPossiblePowerShellExe | undefined
+    > {
+        const programFilesPath = this.getProgramFilesPath({
+            useAlternateBitness,
+        });
 
         if (!programFilesPath) {
             return undefined;
         }
 
-        const powerShellInstallBaseDir = path.join(programFilesPath, "PowerShell");
+        const powerShellInstallBaseDir = path.join(
+            programFilesPath,
+            "PowerShell",
+        );
 
         // Ensure the base directory exists
-        if (!await utils.checkIfDirectoryExists(powerShellInstallBaseDir)) {
+        if (!(await utils.checkIfDirectoryExists(powerShellInstallBaseDir))) {
             return undefined;
         }
 
         let highestSeenVersion = -1;
         let pwshExePath: string | undefined;
-        for (const item of await utils.readDirectory(powerShellInstallBaseDir)) {
+        for (const item of await utils.readDirectory(
+            powerShellInstallBaseDir,
+        )) {
             let currentVersion = -1;
             if (findPreview) {
                 // We are looking for something like "7-preview"
@@ -490,8 +622,12 @@ export class PowerShellExeFinder {
             }
 
             // Now look for the file
-            const exePath = path.join(powerShellInstallBaseDir, item, "pwsh.exe");
-            if (!await utils.checkIfFileExists(exePath)) {
+            const exePath = path.join(
+                powerShellInstallBaseDir,
+                item,
+                "pwsh.exe",
+            );
+            if (!(await utils.checkIfFileExists(exePath))) {
                 continue;
             }
 
@@ -509,25 +645,40 @@ export class PowerShellExeFinder {
 
         const preview: string = findPreview ? " Preview" : "";
 
-        return new PossiblePowerShellExe(pwshExePath, `PowerShell${preview} ${bitness}`);
+        return new PossiblePowerShellExe(
+            pwshExePath,
+            `PowerShell${preview} ${bitness}`,
+        );
     }
 
-    private findWinPS({ useAlternateBitness = false }: { useAlternateBitness?: boolean } = {}): IPossiblePowerShellExe | undefined {
-
+    private findWinPS({
+        useAlternateBitness = false,
+    }: { useAlternateBitness?: boolean } = {}):
+        | IPossiblePowerShellExe
+        | undefined {
         // 32-bit OSes only have one WinPS on them
         if (!this.platformDetails.isOS64Bit && useAlternateBitness) {
             return undefined;
         }
 
-        let winPS = useAlternateBitness ? this.alternateBitnessWinPS : this.winPS;
+        let winPS = useAlternateBitness
+            ? this.alternateBitnessWinPS
+            : this.winPS;
         if (winPS === undefined) {
-            const systemFolderPath = this.getSystem32Path({ useAlternateBitness });
+            const systemFolderPath = this.getSystem32Path({
+                useAlternateBitness,
+            });
 
             if (!systemFolderPath) {
                 return undefined;
             }
 
-            const winPSPath = path.join(systemFolderPath, "WindowsPowerShell", "v1.0", "powershell.exe");
+            const winPSPath = path.join(
+                systemFolderPath,
+                "WindowsPowerShell",
+                "v1.0",
+                "powershell.exe",
+            );
 
             let displayName: string;
             if (this.platformDetails.isProcess64Bit) {
@@ -554,9 +705,9 @@ export class PowerShellExeFinder {
         return winPS;
     }
 
-    private getProgramFilesPath(
-        { useAlternateBitness = false }: { useAlternateBitness?: boolean } = {}): string | undefined {
-
+    private getProgramFilesPath({
+        useAlternateBitness = false,
+    }: { useAlternateBitness?: boolean } = {}): string | undefined {
         if (!useAlternateBitness) {
             // Just use the native system bitness
             return process.env.ProgramFiles;
@@ -576,7 +727,9 @@ export class PowerShellExeFinder {
         return undefined;
     }
 
-    private getSystem32Path({ useAlternateBitness = false }: { useAlternateBitness?: boolean } = {}): string | undefined {
+    private getSystem32Path({
+        useAlternateBitness = false,
+    }: { useAlternateBitness?: boolean } = {}): string | undefined {
         const windir = process.env.windir;
 
         if (!windir) {
@@ -603,15 +756,19 @@ export class PowerShellExeFinder {
     }
 }
 
-export function getWindowsSystemPowerShellPath(systemFolderName: string): string | undefined {
+export function getWindowsSystemPowerShellPath(
+    systemFolderName: string,
+): string | undefined {
     if (process.env.windir === undefined) {
         return undefined;
-    } else return path.join(
-        process.env.windir,
-        systemFolderName,
-        "WindowsPowerShell",
-        "v1.0",
-        "powershell.exe");
+    } else
+        return path.join(
+            process.env.windir,
+            systemFolderName,
+            "WindowsPowerShell",
+            "v1.0",
+            "powershell.exe",
+        );
 }
 
 interface IPossiblePowerShellExe extends IPowerShellExeDetails {
@@ -625,7 +782,8 @@ class PossiblePowerShellExe implements IPossiblePowerShellExe {
         public readonly displayName: string,
         private knownToExist?: boolean,
         public readonly supportsProperArguments = true,
-        public readonly suppressWarning = false) { }
+        public readonly suppressWarning = false,
+    ) {}
 
     public async exists(): Promise<boolean> {
         this.knownToExist ??= await utils.checkIfFileExists(this.exePath);
diff --git a/src/process.ts b/src/process.ts
index 38bba0bc42..0f1503d468 100644
--- a/src/process.ts
+++ b/src/process.ts
@@ -4,11 +4,11 @@
 import cp = require("child_process");
 import path = require("path");
 import vscode = require("vscode");
+import { promisify } from "util";
 import type { ILogger } from "./logging";
+import type { IEditorServicesSessionDetails } from "./session";
 import { Settings, validateCwdSetting } from "./settings";
 import utils = require("./utils");
-import type { IEditorServicesSessionDetails } from "./session";
-import { promisify } from "util";
 
 export class PowerShellProcess {
     // This is used to warn the user that the extension is taking longer than expected to startup.
@@ -35,24 +35,27 @@ export class PowerShellProcess {
         private startPsesArgs: string,
         private sessionFilePath: vscode.Uri,
         private sessionSettings: Settings,
-        private devMode = false
+        private devMode = false,
     ) {
-
         this.onExitedEmitter = new vscode.EventEmitter<void>();
         this.onExited = this.onExitedEmitter.event;
         this.pidUpdateEmitter = new vscode.EventEmitter<number | undefined>();
     }
 
-    public async start(cancellationToken: vscode.CancellationToken): Promise<IEditorServicesSessionDetails | undefined> {
-        const psesModulePath =
-            path.resolve(
-                __dirname,
-                this.bundledModulesPath,
-                "PowerShellEditorServices/PowerShellEditorServices.psd1");
+    public async start(
+        cancellationToken: vscode.CancellationToken,
+    ): Promise<IEditorServicesSessionDetails | undefined> {
+        const psesModulePath = path.resolve(
+            __dirname,
+            this.bundledModulesPath,
+            "PowerShellEditorServices/PowerShellEditorServices.psd1",
+        );
 
         const featureFlags =
             this.sessionSettings.developer.featureFlags.length > 0
-                ? this.sessionSettings.developer.featureFlags.map((f) => `'${f}'`).join(", ")
+                ? this.sessionSettings.developer.featureFlags
+                      .map((f) => `'${f}'`)
+                      .join(", ")
                 : "";
 
         this.startPsesArgs +=
@@ -67,8 +70,8 @@ export class PowerShellProcess {
         const powerShellArgs: string[] = [];
 
         const useLoginShell: boolean =
-            (utils.isMacOS && this.sessionSettings.startAsLoginShell.osx)
-            || (utils.isLinux && this.sessionSettings.startAsLoginShell.linux);
+            (utils.isMacOS && this.sessionSettings.startAsLoginShell.osx) ||
+            (utils.isLinux && this.sessionSettings.startAsLoginShell.linux);
 
         if (useLoginShell && this.isLoginShell(this.exePath)) {
             // This MUST be the first argument.
@@ -78,29 +81,37 @@ export class PowerShellProcess {
         powerShellArgs.push("-NoProfile");
 
         // Only add ExecutionPolicy param on Windows
-        if (utils.isWindows && this.sessionSettings.developer.setExecutionPolicy) {
+        if (
+            utils.isWindows &&
+            this.sessionSettings.developer.setExecutionPolicy
+        ) {
             powerShellArgs.push("-ExecutionPolicy", "Bypass");
         }
 
-        const startEditorServices = "Import-Module '" +
+        const startEditorServices =
+            "Import-Module '" +
             utils.escapeSingleQuotes(psesModulePath) +
-            "'; Start-EditorServices " + this.startPsesArgs;
+            "'; Start-EditorServices " +
+            this.startPsesArgs;
 
         // On Windows we unfortunately can't Base64 encode the startup command
         // because it annoys some poorly implemented anti-virus scanners.
         if (utils.isWindows) {
-            powerShellArgs.push(
-                "-Command",
-                startEditorServices);
+            powerShellArgs.push("-Command", startEditorServices);
         } else {
             // Otherwise use -EncodedCommand for better quote support.
-            this.logger.writeDebug("Using Base64 -EncodedCommand but logging as -Command equivalent.");
+            this.logger.writeDebug(
+                "Using Base64 -EncodedCommand but logging as -Command equivalent.",
+            );
             powerShellArgs.push(
                 "-EncodedCommand",
-                Buffer.from(startEditorServices, "utf16le").toString("base64"));
+                Buffer.from(startEditorServices, "utf16le").toString("base64"),
+            );
         }
 
-        this.logger.writeDebug(`Starting process: ${this.exePath} ${powerShellArgs.slice(0, -2).join(" ")} -Command ${startEditorServices}`);
+        this.logger.writeDebug(
+            `Starting process: ${this.exePath} ${powerShellArgs.slice(0, -2).join(" ")} -Command ${startEditorServices}`,
+        );
 
         // Make sure no old session file exists
         await this.deleteSessionFile(this.sessionFilePath);
@@ -110,11 +121,13 @@ export class PowerShellProcess {
         let envMixin = {};
         if (this.shellIntegrationEnabled) {
             envMixin = {
-                "VSCODE_INJECTION": "1",
+                VSCODE_INJECTION: "1",
                 // There is no great way to check if we are running stable VS
                 // Code. Since this is used to disable experimental features, we
                 // default to stable unless we're definitely running Insiders.
-                "VSCODE_STABLE": vscode.env.appName.includes("Insiders") ? "0" : "1",
+                VSCODE_STABLE: vscode.env.appName.includes("Insiders")
+                    ? "0"
+                    : "1",
                 // Maybe one day we can set VSCODE_NONCE...
             };
         }
@@ -122,34 +135,46 @@ export class PowerShellProcess {
         // Enables Hot Reload in .NET for the attached process
         // https://devblogs.microsoft.com/devops/net-enc-support-for-lambdas-and-other-improvements-in-visual-studio-2015/
         if (this.devMode) {
-            (envMixin as Record<string,string>).COMPLUS_FORCEENC = "1";
+            (envMixin as Record<string, string>).COMPLUS_FORCEENC = "1";
         }
 
         // Launch PowerShell in the integrated terminal
         const terminalOptions: vscode.TerminalOptions = {
-            name: this.isTemp ? `${PowerShellProcess.title} (TEMP)` : PowerShellProcess.title,
+            name: this.isTemp
+                ? `${PowerShellProcess.title} (TEMP)`
+                : PowerShellProcess.title,
             shellPath: this.exePath,
             shellArgs: powerShellArgs,
             cwd: await validateCwdSetting(this.logger),
             env: envMixin,
             iconPath: new vscode.ThemeIcon("terminal-powershell"),
             isTransient: true,
-            hideFromUser: this.sessionSettings.integratedConsole.startInBackground,
-            location: vscode.TerminalLocation[this.sessionSettings.integratedConsole.startLocation],
+            hideFromUser:
+                this.sessionSettings.integratedConsole.startInBackground,
+            location:
+                vscode.TerminalLocation[
+                    this.sessionSettings.integratedConsole.startLocation
+                ],
         };
 
         // Subscribe a log event for when the terminal closes (this fires for
         // all terminals and the event itself checks if it's our terminal). This
         // subscription should happen before we create the terminal so if it
         // fails immediately, the event fires.
-        this.consoleCloseSubscription = vscode.window.onDidCloseTerminal((terminal) => { this.onTerminalClose(terminal); });
+        this.consoleCloseSubscription = vscode.window.onDidCloseTerminal(
+            (terminal) => {
+                this.onTerminalClose(terminal);
+            },
+        );
         this.consoleTerminal = vscode.window.createTerminal(terminalOptions);
         this.pid = await this.getPid();
         this.logger.write(`PowerShell process started with PID: ${this.pid}`);
         this.pidUpdateEmitter?.fire(this.pid);
 
-        if (this.sessionSettings.integratedConsole.showOnStartup
-            && !this.sessionSettings.integratedConsole.startInBackground) {
+        if (
+            this.sessionSettings.integratedConsole.showOnStartup &&
+            !this.sessionSettings.integratedConsole.startInBackground
+        ) {
             // We still need to run this to set the active terminal to the extension terminal.
             this.consoleTerminal.show(true);
         }
@@ -171,7 +196,12 @@ export class PowerShellProcess {
     // This function should only be used after a failure has occurred because it is slow!
     public async getVersionCli(): Promise<string> {
         const exec = promisify(cp.execFile);
-        const { stdout } = await exec(this.exePath, ["-NoProfile", "-NoLogo", "-Command", "$PSVersionTable.PSVersion.ToString()"]);
+        const { stdout } = await exec(this.exePath, [
+            "-NoProfile",
+            "-NoLogo",
+            "-Command",
+            "$PSVersionTable.PSVersion.ToString()",
+        ]);
         return stdout.trim();
     }
 
@@ -185,7 +215,9 @@ export class PowerShellProcess {
     }
 
     public dispose(): void {
-        this.logger.writeDebug(`Disposing PowerShell process with PID: ${this.pid}`);
+        this.logger.writeDebug(
+            `Disposing PowerShell process with PID: ${this.pid}`,
+        );
 
         void this.deleteSessionFile(this.sessionFilePath);
 
@@ -216,19 +248,30 @@ export class PowerShellProcess {
             // So we try to start PowerShell with -Login
             // If it exits successfully, we return true
             // If it exits unsuccessfully, node throws, we catch, and return false
-            cp.execFileSync(pwshPath, ["-Login", "-NoProfile", "-NoLogo", "-Command", "exit 0"]);
+            cp.execFileSync(pwshPath, [
+                "-Login",
+                "-NoProfile",
+                "-NoLogo",
+                "-Command",
+                "exit 0",
+            ]);
         } catch {
             return false;
         }
         return true;
     }
 
-    private async readSessionFile(sessionFilePath: vscode.Uri): Promise<IEditorServicesSessionDetails> {
-        const fileContents = await vscode.workspace.fs.readFile(sessionFilePath);
+    private async readSessionFile(
+        sessionFilePath: vscode.Uri,
+    ): Promise<IEditorServicesSessionDetails> {
+        const fileContents =
+            await vscode.workspace.fs.readFile(sessionFilePath);
         return JSON.parse(fileContents.toString());
     }
 
-    private async deleteSessionFile(sessionFilePath: vscode.Uri): Promise<void> {
+    private async deleteSessionFile(
+        sessionFilePath: vscode.Uri,
+    ): Promise<void> {
         try {
             await vscode.workspace.fs.delete(sessionFilePath);
         } catch {
@@ -236,15 +279,22 @@ export class PowerShellProcess {
         }
     }
 
-    private async waitForSessionFile(cancellationToken: vscode.CancellationToken): Promise<IEditorServicesSessionDetails | undefined> {
-        const numOfTries = this.sessionSettings.developer.waitForSessionFileTimeoutSeconds;
+    private async waitForSessionFile(
+        cancellationToken: vscode.CancellationToken,
+    ): Promise<IEditorServicesSessionDetails | undefined> {
+        const numOfTries =
+            this.sessionSettings.developer.waitForSessionFileTimeoutSeconds;
         const warnAt = numOfTries - PowerShellProcess.warnUserThreshold;
 
         // Check every second.
-        this.logger.writeDebug(`Waiting for session file: ${this.sessionFilePath}`);
+        this.logger.writeDebug(
+            `Waiting for session file: ${this.sessionFilePath}`,
+        );
         for (let i = numOfTries; i > 0; i--) {
             if (cancellationToken.isCancellationRequested) {
-                this.logger.writeWarning("Canceled while waiting for session file.");
+                this.logger.writeWarning(
+                    "Canceled while waiting for session file.",
+                );
                 return undefined;
             }
 
@@ -259,7 +309,9 @@ export class PowerShellProcess {
             }
 
             if (warnAt === i) {
-                void this.logger.writeAndShowWarning("Loading the PowerShell extension is taking longer than expected. If you're using privilege enforcement software, this can affect start up performance.");
+                void this.logger.writeAndShowWarning(
+                    "Loading the PowerShell extension is taking longer than expected. If you're using privilege enforcement software, this can affect start up performance.",
+                );
             }
 
             // Wait a bit and try again.
@@ -275,7 +327,9 @@ export class PowerShellProcess {
             return;
         }
 
-        this.logger.writeWarning(`PowerShell process terminated or Extension Terminal was closed, PID: ${this.pid}`);
+        this.logger.writeWarning(
+            `PowerShell process terminated or Extension Terminal was closed, PID: ${this.pid}`,
+        );
         this.dispose();
     }
 }
diff --git a/src/session.ts b/src/session.ts
index 1928d26ded..8ae1624bfb 100644
--- a/src/session.ts
+++ b/src/session.ts
@@ -5,51 +5,51 @@ import net = require("net");
 import path = require("path");
 import vscode = require("vscode");
 import TelemetryReporter, {
-  type TelemetryEventProperties,
-  type TelemetryEventMeasurements,
+    type TelemetryEventMeasurements,
+    type TelemetryEventProperties,
 } from "@vscode/extension-telemetry";
 import { Message } from "vscode-jsonrpc";
 import {
-  type ILogger,
-  LanguageClientOutputChannelAdapter,
-  LspTraceParser,
-  PsesParser,
+    type ILogger,
+    LanguageClientOutputChannelAdapter,
+    LspTraceParser,
+    PsesParser,
 } from "./logging";
 import { PowerShellProcess } from "./process";
 import {
-  Settings,
-  changeSetting,
-  getSettings,
-  getEffectiveConfigurationTarget,
-  validateCwdSetting,
+    Settings,
+    changeSetting,
+    getEffectiveConfigurationTarget,
+    getSettings,
+    validateCwdSetting,
 } from "./settings";
 import utils = require("./utils");
 
 import {
-  CloseAction,
-  type CloseHandlerResult,
-  DocumentSelector,
-  ErrorAction,
-  type ErrorHandlerResult,
-  type LanguageClientOptions,
-  type Middleware,
-  NotificationType,
-  RequestType0,
-  type ResolveCodeLensSignature,
-  RevealOutputChannelOn,
+    CloseAction,
+    type CloseHandlerResult,
+    DocumentSelector,
+    ErrorAction,
+    type ErrorHandlerResult,
+    type LanguageClientOptions,
+    type Middleware,
+    NotificationType,
+    RequestType0,
+    type ResolveCodeLensSignature,
+    RevealOutputChannelOn,
 } from "vscode-languageclient";
 import { LanguageClient, type StreamInfo } from "vscode-languageclient/node";
 
+import { SemVer, satisfies } from "semver";
 import { UpdatePowerShell } from "./features/UpdatePowerShell";
+import { LanguageClientConsumer } from "./languageClientConsumer";
 import {
-  getPlatformDetails,
-  type IPlatformDetails,
-  type IPowerShellExeDetails,
-  OperatingSystem,
-  PowerShellExeFinder,
+    type IPlatformDetails,
+    type IPowerShellExeDetails,
+    OperatingSystem,
+    PowerShellExeFinder,
+    getPlatformDetails,
 } from "./platform";
-import { LanguageClientConsumer } from "./languageClientConsumer";
-import { SemVer, satisfies } from "semver";
 
 enum SessionStatus {
     NotStarted = "Not Started",
@@ -83,17 +83,21 @@ export interface IPowerShellVersionDetails {
     architecture: string;
 }
 
-export type IReadSessionFileCallback = (details: IEditorServicesSessionDetails) => void;
+export type IReadSessionFileCallback = (
+    details: IEditorServicesSessionDetails,
+) => void;
 
-export const SendKeyPressNotificationType =
-    new NotificationType<void>("powerShell/sendKeyPress");
+export const SendKeyPressNotificationType = new NotificationType<void>(
+    "powerShell/sendKeyPress",
+);
 
 export const ExecutionBusyStatusNotificationType =
     new NotificationType<boolean>("powerShell/executionBusyStatus");
 
-export const PowerShellVersionRequestType =
-    new RequestType0<IPowerShellVersionDetails, void>(
-        "powerShell/getVersion");
+export const PowerShellVersionRequestType = new RequestType0<
+    IPowerShellVersionDetails,
+    void
+>("powerShell/getVersion");
 
 export class SessionManager implements Middleware {
     public HostName: string;
@@ -115,7 +119,9 @@ export class SessionManager implements Middleware {
     private sessionsFolder: vscode.Uri;
     private sessionStatus: SessionStatus = SessionStatus.NotStarted;
     private shellIntegrationEnabled = false;
-    private startCancellationTokenSource: vscode.CancellationTokenSource | undefined;
+    private startCancellationTokenSource:
+        | vscode.CancellationTokenSource
+        | undefined;
     private suppressRestartPrompt = false;
     private versionDetails: IPowerShellVersionDetails | undefined;
     private traceLogLevelHandler?: vscode.Disposable;
@@ -129,12 +135,16 @@ export class SessionManager implements Middleware {
         displayName: string,
         hostVersion: string,
         publisher: string,
-        private telemetryReporter: TelemetryReporter) {
+        private telemetryReporter: TelemetryReporter,
+    ) {
         // Create the language status item
         this.languageStatusItem = this.createStatusBarItem();
         // We have to override the scheme because it defaults to
         // 'vscode-userdata' which breaks UNC paths.
-        this.sessionsFolder = vscode.Uri.joinPath(extensionContext.globalStorageUri.with({ scheme: "file" }), "sessions");
+        this.sessionsFolder = vscode.Uri.joinPath(
+            extensionContext.globalStorageUri.with({ scheme: "file" }),
+            "sessions",
+        );
 
         this.platformDetails = getPlatformDetails();
         this.HostName = hostName;
@@ -143,12 +153,15 @@ export class SessionManager implements Middleware {
         this.Publisher = publisher;
 
         const osBitness = this.platformDetails.isOS64Bit ? "64-bit" : "32-bit";
-        const procBitness = this.platformDetails.isProcess64Bit ? "64-bit" : "32-bit";
+        const procBitness = this.platformDetails.isProcess64Bit
+            ? "64-bit"
+            : "32-bit";
 
         this.logger.write(
-            `Visual Studio Code: v${vscode.version} ${procBitness}`
-            + ` on ${OperatingSystem[this.platformDetails.operatingSystem]} ${osBitness}`,
-            `${this.DisplayName} Extension: v${this.HostVersion}`);
+            `Visual Studio Code: v${vscode.version} ${procBitness}` +
+                ` on ${OperatingSystem[this.platformDetails.operatingSystem]} ${osBitness}`,
+            `${this.DisplayName} Extension: v${this.HostVersion}`,
+        );
 
         // Fix the host version so that PowerShell can consume it.
         // This is needed when the extension uses a prerelease
@@ -176,38 +189,41 @@ export class SessionManager implements Middleware {
     // We've made this function idempotent, so it can used to ensure the session has started.
     public async start(): Promise<void> {
         switch (this.sessionStatus) {
-        case SessionStatus.NotStarted:
-            // Go ahead and start.
-            break;
-        case SessionStatus.Starting:
-            // A simple lock because this function isn't re-entrant.
-            this.logger.writeWarning("Re-entered 'start' so waiting...");
-            await this.waitWhileStarting();
-            return;
-        case SessionStatus.Running:
-            // We're started, just return.
-            this.logger.writeDebug("Already started.");
-            return;
-        case SessionStatus.Busy:
-            // We're started but busy so notify and return.
-            // TODO: Make a proper notification for this and when IntelliSense is blocked.
-            this.logger.write("The Extension Terminal is currently busy, please wait for your task to finish!");
-            return;
-        case SessionStatus.Stopping:
-            // Wait until done stopping, then start.
-            this.logger.writeDebug("Still stopping.");
-            await this.waitWhileStopping();
-            break;
-        case SessionStatus.Failed:
-            // Try to start again.
-            this.logger.writeDebug("Previously failed, starting again.");
-            break;
+            case SessionStatus.NotStarted:
+                // Go ahead and start.
+                break;
+            case SessionStatus.Starting:
+                // A simple lock because this function isn't re-entrant.
+                this.logger.writeWarning("Re-entered 'start' so waiting...");
+                await this.waitWhileStarting();
+                return;
+            case SessionStatus.Running:
+                // We're started, just return.
+                this.logger.writeDebug("Already started.");
+                return;
+            case SessionStatus.Busy:
+                // We're started but busy so notify and return.
+                // TODO: Make a proper notification for this and when IntelliSense is blocked.
+                this.logger.write(
+                    "The Extension Terminal is currently busy, please wait for your task to finish!",
+                );
+                return;
+            case SessionStatus.Stopping:
+                // Wait until done stopping, then start.
+                this.logger.writeDebug("Still stopping.");
+                await this.waitWhileStopping();
+                break;
+            case SessionStatus.Failed:
+                // Try to start again.
+                this.logger.writeDebug("Previously failed, starting again.");
+                break;
         }
 
         // This status needs to be set immediately so the above check works
         this.setSessionStatus("Starting...", SessionStatus.Starting);
 
-        this.startCancellationTokenSource = new vscode.CancellationTokenSource();
+        this.startCancellationTokenSource =
+            new vscode.CancellationTokenSource();
         const cancellationToken = this.startCancellationTokenSource.token;
 
         // Create a folder for the session files.
@@ -217,31 +233,41 @@ export class SessionManager implements Middleware {
         await this.migrateWhitespaceAroundPipeSetting();
 
         // Update non-PowerShell settings.
-        this.shellIntegrationEnabled = vscode.workspace.getConfiguration("terminal.integrated.shellIntegration").get<boolean>("enabled") ?? false;
+        this.shellIntegrationEnabled =
+            vscode.workspace
+                .getConfiguration("terminal.integrated.shellIntegration")
+                .get<boolean>("enabled") ?? false;
 
         // Find the PowerShell executable to use for the server.
         this.PowerShellExeDetails = await this.findPowerShell();
 
         if (this.PowerShellExeDetails === undefined) {
-            const message = "Unable to find PowerShell!"
-                + " Do you have it installed?"
-                + " You can also configure custom installations"
-                + " with the 'powershell.powerShellAdditionalExePaths' setting.";
+            const message =
+                "Unable to find PowerShell!" +
+                " Do you have it installed?" +
+                " You can also configure custom installations" +
+                " with the 'powershell.powerShellAdditionalExePaths' setting.";
             void this.setSessionFailedGetPowerShell(message);
             return;
         }
 
         // Refresh the status with the found executable details.
         this.refreshSessionStatus();
-        this.logger.write(`Starting '${this.PowerShellExeDetails.displayName}' at: ${this.PowerShellExeDetails.exePath}`);
+        this.logger.write(
+            `Starting '${this.PowerShellExeDetails.displayName}' at: ${this.PowerShellExeDetails.exePath}`,
+        );
 
         // Start the server.
         this.languageServerProcess = await this.startLanguageServerProcess(
             this.PowerShellExeDetails,
-            cancellationToken);
+            cancellationToken,
+        );
 
         // Check that we got session details and that they had a "started" status.
-        if (this.sessionDetails === undefined || !this.sessionStarted(this.sessionDetails)) {
+        if (
+            this.sessionDetails === undefined ||
+            !this.sessionStarted(this.sessionDetails)
+        ) {
             if (!cancellationToken.isCancellationRequested) {
                 // If it failed but we didn't cancel it, handle the common reasons.
                 await this.handleFailedProcess(this.languageServerProcess);
@@ -252,22 +278,32 @@ export class SessionManager implements Middleware {
         }
 
         // If we got good session details from the server, try to connect to it.
-        this.languageClient = await this.startLanguageClient(this.sessionDetails);
+        this.languageClient = await this.startLanguageClient(
+            this.sessionDetails,
+        );
 
         if (this.languageClient.isRunning()) {
             this.versionDetails = await this.getVersionDetails();
             if (this.versionDetails === undefined) {
-                void this.setSessionFailedOpenBug("Unable to get version details!");
+                void this.setSessionFailedOpenBug(
+                    "Unable to get version details!",
+                );
                 return;
             }
 
-            this.logger.write(`Started PowerShell v${this.versionDetails.version}.`);
+            this.logger.write(
+                `Started PowerShell v${this.versionDetails.version}.`,
+            );
             this.setSessionRunningStatus(); // Yay, we made it!
 
             await this.writePidIfInDevMode(this.languageServerProcess);
 
             // Fire and forget the updater.
-            const updater = new UpdatePowerShell(this.sessionSettings, this.logger, this.versionDetails);
+            const updater = new UpdatePowerShell(
+                this.sessionSettings,
+                this.logger,
+                this.versionDetails,
+            );
             void updater.checkForUpdate();
         } else {
             void this.setSessionFailedOpenBug("Never finished startup!");
@@ -286,7 +322,9 @@ export class SessionManager implements Middleware {
             await this.languageClient?.stop(3000);
             await this.languageClient?.dispose();
         } catch (err) {
-            this.logger.writeError(`Error occurred while stopping language client:\n${err}`);
+            this.logger.writeError(
+                `Error occurred while stopping language client:\n${err}`,
+            );
         }
 
         this.languageClient = undefined;
@@ -320,7 +358,9 @@ export class SessionManager implements Middleware {
         if (exeNameOverride) {
             // Reset the version and PowerShell details since we're launching a
             // new executable.
-            this.logger.writeDebug(`Starting with executable overriden to: ${exeNameOverride}`);
+            this.logger.writeDebug(
+                `Starting with executable overriden to: ${exeNameOverride}`,
+            );
             this.sessionSettings.powerShellDefaultVersion = exeNameOverride;
             this.versionDetails = undefined;
             this.PowerShellExeDetails = undefined;
@@ -330,19 +370,31 @@ export class SessionManager implements Middleware {
     }
 
     /** In Development mode, write the PID to a file where the parent session can find it, to attach the dotnet debugger. */
-    private async writePidIfInDevMode(pwshProcess: PowerShellProcess): Promise<void> {
-        if (this.extensionContext.extensionMode !== vscode.ExtensionMode.Development) { return; }
+    private async writePidIfInDevMode(
+        pwshProcess: PowerShellProcess,
+    ): Promise<void> {
+        if (
+            this.extensionContext.extensionMode !==
+            vscode.ExtensionMode.Development
+        ) {
+            return;
+        }
         const parentSessionId = process.env.VSCODE_PARENT_SESSION_ID;
-        const pidFilePath = vscode.Uri.joinPath(this.sessionsFolder, `PSES-${parentSessionId}.pid`);
+        const pidFilePath = vscode.Uri.joinPath(
+            this.sessionsFolder,
+            `PSES-${parentSessionId}.pid`,
+        );
 
-        if (parentSessionId === undefined) { return; }
+        if (parentSessionId === undefined) {
+            return;
+        }
 
         const fs = vscode.workspace.fs;
         const pid = (await pwshProcess.getPid())!.toString();
         await fs.writeFile(pidFilePath, Buffer.from(pid));
         const deletePidOnExit = pwshProcess.onExited(() => {
             deletePidOnExit.dispose();
-            fs.delete(pidFilePath, {useTrash: false});
+            fs.delete(pidFilePath, { useTrash: false });
             console.log(`Deleted PID file: ${pidFilePath}`);
         });
         this.registeredCommands.push(deletePidOnExit);
@@ -352,32 +404,45 @@ export class SessionManager implements Middleware {
     public getSessionDetails(): IEditorServicesSessionDetails | undefined {
         // This is used by the debugger which should have already called `start`.
         if (this.sessionDetails === undefined) {
-            void this.logger.writeAndShowError("PowerShell session unavailable for debugging!");
+            void this.logger.writeAndShowError(
+                "PowerShell session unavailable for debugging!",
+            );
         }
         return this.sessionDetails;
     }
 
     public async getLanguageServerPid(): Promise<number | undefined> {
         if (this.languageServerProcess === undefined) {
-            void this.logger.writeAndShowError("PowerShell Extension Terminal unavailable!");
+            void this.logger.writeAndShowError(
+                "PowerShell Extension Terminal unavailable!",
+            );
         }
         return this.languageServerProcess?.getPid();
     }
 
-    public getPowerShellVersionDetails(): IPowerShellVersionDetails | undefined {
+    public getPowerShellVersionDetails():
+        | IPowerShellVersionDetails
+        | undefined {
         return this.versionDetails;
     }
 
     private getNewSessionFilePath(): vscode.Uri {
         const uniqueId: number = Math.floor(100000 + Math.random() * 900000);
-        return vscode.Uri.joinPath(this.sessionsFolder, `PSES-VSCode-${process.env.VSCODE_PID}-${uniqueId}.json`);
+        return vscode.Uri.joinPath(
+            this.sessionsFolder,
+            `PSES-VSCode-${process.env.VSCODE_PID}-${uniqueId}.json`,
+        );
     }
 
-    public setLanguageClientConsumers(languageClientConsumers: LanguageClientConsumer[]): void {
+    public setLanguageClientConsumers(
+        languageClientConsumers: LanguageClientConsumer[],
+    ): void {
         this.languageClientConsumers = languageClientConsumers;
     }
 
-    public async createDebugSessionProcess(settings: Settings): Promise<PowerShellProcess> {
+    public async createDebugSessionProcess(
+        settings: Settings,
+    ): Promise<PowerShellProcess> {
         // NOTE: We only support one temporary Extension Terminal at a time. To
         // support more, we need to track each separately, and tie the session
         // for the event handler to the right process (and dispose of the event
@@ -385,7 +450,9 @@ export class SessionManager implements Middleware {
         this.debugSessionProcess?.dispose();
         this.debugEventHandler?.dispose();
         if (this.PowerShellExeDetails === undefined) {
-            return Promise.reject(new Error("Required PowerShellExeDetails undefined!"));
+            return Promise.reject(
+                new Error("Required PowerShellExeDetails undefined!"),
+            );
         }
 
         // TODO: It might not be totally necessary to update the session
@@ -394,28 +461,30 @@ export class SessionManager implements Middleware {
         this.sessionSettings = settings;
 
         const bundledModulesPath = await this.getBundledModulesPath();
-        this.debugSessionProcess =
-            new PowerShellProcess(
-                this.PowerShellExeDetails.exePath,
+        this.debugSessionProcess = new PowerShellProcess(
+            this.PowerShellExeDetails.exePath,
+            bundledModulesPath,
+            true,
+            false,
+            this.logger,
+            this.extensionContext.logUri,
+            this.getEditorServicesArgs(
                 bundledModulesPath,
-                true,
-                false,
-                this.logger,
-                this.extensionContext.logUri,
-                this.getEditorServicesArgs(bundledModulesPath, this.PowerShellExeDetails) + "-DebugServiceOnly ",
-                this.getNewSessionFilePath(),
-                this.sessionSettings);
+                this.PowerShellExeDetails,
+            ) + "-DebugServiceOnly ",
+            this.getNewSessionFilePath(),
+            this.sessionSettings,
+        );
 
         // Similar to the regular Extension Terminal, we need to send a key
         // press to the process spawned for temporary Extension Terminals when
         // the server requests a cancellation os Console.ReadKey.
-        this.debugEventHandler = vscode.debug.onDidReceiveDebugSessionCustomEvent(
-            e => {
+        this.debugEventHandler =
+            vscode.debug.onDidReceiveDebugSessionCustomEvent((e) => {
                 if (e.event === "powerShell/sendKeyPress") {
                     this.debugSessionProcess?.sendKeyPress();
                 }
-            }
-        );
+            });
 
         return this.debugSessionProcess;
     }
@@ -430,31 +499,39 @@ export class SessionManager implements Middleware {
     public resolveCodeLens(
         codeLens: vscode.CodeLens,
         token: vscode.CancellationToken,
-        next: ResolveCodeLensSignature): vscode.ProviderResult<vscode.CodeLens> {
+        next: ResolveCodeLensSignature,
+    ): vscode.ProviderResult<vscode.CodeLens> {
         const resolvedCodeLens = next(codeLens, token);
-        const resolveFunc =
-            (codeLensToFix: vscode.CodeLens): vscode.CodeLens => {
-                if (codeLensToFix.command?.command === "editor.action.showReferences") {
-                    const oldArgs = codeLensToFix.command.arguments;
-                    if (oldArgs === undefined || oldArgs.length < 3) {
-                        this.logger.writeError("Code Lens arguments were malformed!");
-                        return codeLensToFix;
-                    }
-
-                    // Our JSON objects don't get handled correctly by
-                    // VS Code's built in editor.action.showReferences
-                    // command so we need to convert them into the
-                    // appropriate types to send them as command
-                    // arguments.
+        const resolveFunc = (
+            codeLensToFix: vscode.CodeLens,
+        ): vscode.CodeLens => {
+            if (
+                codeLensToFix.command?.command ===
+                "editor.action.showReferences"
+            ) {
+                const oldArgs = codeLensToFix.command.arguments;
+                if (oldArgs === undefined || oldArgs.length < 3) {
+                    this.logger.writeError(
+                        "Code Lens arguments were malformed!",
+                    );
+                    return codeLensToFix;
+                }
 
-                    codeLensToFix.command.arguments = [
-                        vscode.Uri.parse(oldArgs[0]),
-                        new vscode.Position(oldArgs[1].line, oldArgs[1].character),
-                        oldArgs[2].map((position: {
+                // Our JSON objects don't get handled correctly by
+                // VS Code's built in editor.action.showReferences
+                // command so we need to convert them into the
+                // appropriate types to send them as command
+                // arguments.
+
+                codeLensToFix.command.arguments = [
+                    vscode.Uri.parse(oldArgs[0]),
+                    new vscode.Position(oldArgs[1].line, oldArgs[1].character),
+                    oldArgs[2].map(
+                        (position: {
                             uri: string;
                             range: {
-                                start: { line: number; character: number; };
-                                end: { line: number; character: number; };
+                                start: { line: number; character: number };
+                                end: { line: number; character: number };
                             };
                         }) => {
                             return new vscode.Location(
@@ -463,18 +540,23 @@ export class SessionManager implements Middleware {
                                     position.range.start.line,
                                     position.range.start.character,
                                     position.range.end.line,
-                                    position.range.end.character));
-                        }),
-                    ];
-                }
+                                    position.range.end.character,
+                                ),
+                            );
+                        },
+                    ),
+                ];
+            }
 
-                return codeLensToFix;
-            };
+            return codeLensToFix;
+        };
 
         // TODO: This makes zero sense, but appears to be "working" and copied by others per https://github.com/microsoft/vscode-languageserver-node/issues/495. Thing is, ESLint says these conditionals are always truthy.
         // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
         if ((resolvedCodeLens as Thenable<vscode.CodeLens>).then) {
-            return (resolvedCodeLens as Thenable<vscode.CodeLens>).then(resolveFunc);
+            return (resolvedCodeLens as Thenable<vscode.CodeLens>).then(
+                resolveFunc,
+            );
             // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
         } else if (resolvedCodeLens as vscode.CodeLens) {
             return resolveFunc(resolvedCodeLens as vscode.CodeLens);
@@ -487,36 +569,75 @@ export class SessionManager implements Middleware {
     // codeFormatting.whitespaceAroundPipe to new setting
     // codeFormatting.addWhitespaceAroundPipe.
     private async migrateWhitespaceAroundPipeSetting(): Promise<void> {
-        const configuration = vscode.workspace.getConfiguration(utils.PowerShellLanguageId);
+        const configuration = vscode.workspace.getConfiguration(
+            utils.PowerShellLanguageId,
+        );
         const deprecatedSetting = "codeFormatting.whitespaceAroundPipe";
         const newSetting = "codeFormatting.addWhitespaceAroundPipe";
-        const configurationTargetOfNewSetting = getEffectiveConfigurationTarget(newSetting);
-        const configurationTargetOfOldSetting = getEffectiveConfigurationTarget(deprecatedSetting);
-        if (configurationTargetOfOldSetting !== undefined && configurationTargetOfNewSetting === undefined) {
-            this.logger.writeWarning("Deprecated setting: whitespaceAroundPipe");
-            const value = configuration.get(deprecatedSetting, configurationTargetOfOldSetting);
-            await changeSetting(newSetting, value, configurationTargetOfOldSetting, this.logger);
-            await changeSetting(deprecatedSetting, undefined, configurationTargetOfOldSetting, this.logger);
+        const configurationTargetOfNewSetting =
+            getEffectiveConfigurationTarget(newSetting);
+        const configurationTargetOfOldSetting =
+            getEffectiveConfigurationTarget(deprecatedSetting);
+        if (
+            configurationTargetOfOldSetting !== undefined &&
+            configurationTargetOfNewSetting === undefined
+        ) {
+            this.logger.writeWarning(
+                "Deprecated setting: whitespaceAroundPipe",
+            );
+            const value = configuration.get(
+                deprecatedSetting,
+                configurationTargetOfOldSetting,
+            );
+            await changeSetting(
+                newSetting,
+                value,
+                configurationTargetOfOldSetting,
+                this.logger,
+            );
+            await changeSetting(
+                deprecatedSetting,
+                undefined,
+                configurationTargetOfOldSetting,
+                this.logger,
+            );
         }
     }
 
     /** There are some changes we cannot "hot" set, so these require a restart of the session */
-    private async restartOnCriticalConfigChange(changeEvent: vscode.ConfigurationChangeEvent): Promise<void> {
-        if (this.suppressRestartPrompt) {return;}
-        if (this.sessionStatus !== SessionStatus.Running) {return;}
+    private async restartOnCriticalConfigChange(
+        changeEvent: vscode.ConfigurationChangeEvent,
+    ): Promise<void> {
+        if (this.suppressRestartPrompt) {
+            return;
+        }
+        if (this.sessionStatus !== SessionStatus.Running) {
+            return;
+        }
 
         // Restart not needed if shell integration is enabled but the shell is backgrounded.
         const settings = getSettings();
-        if (changeEvent.affectsConfiguration("terminal.integrated.shellIntegration.enabled")) {
-            const shellIntegrationEnabled = vscode.workspace.getConfiguration("terminal.integrated.shellIntegration").get<boolean>("enabled") ?? false;
-            if (shellIntegrationEnabled && !settings.integratedConsole.startInBackground) {
+        if (
+            changeEvent.affectsConfiguration(
+                "terminal.integrated.shellIntegration.enabled",
+            )
+        ) {
+            const shellIntegrationEnabled =
+                vscode.workspace
+                    .getConfiguration("terminal.integrated.shellIntegration")
+                    .get<boolean>("enabled") ?? false;
+            if (
+                shellIntegrationEnabled &&
+                !settings.integratedConsole.startInBackground
+            ) {
                 return this.restartWithPrompt();
             }
         }
 
         // Early return if the change doesn't affect the PowerShell extension settings from this point forward
-        if (!changeEvent.affectsConfiguration("powershell")) {return;}
-
+        if (!changeEvent.affectsConfiguration("powershell")) {
+            return;
+        }
 
         // Detect any setting changes that would affect the session.
         const coldRestartSettingNames = [
@@ -525,20 +646,32 @@ export class SessionManager implements Middleware {
             "developer.editorServicesLogLevel",
         ];
         for (const settingName of coldRestartSettingNames) {
-            if (changeEvent.affectsConfiguration("powershell" + "." + settingName)) {
+            if (
+                changeEvent.affectsConfiguration(
+                    "powershell" + "." + settingName,
+                )
+            ) {
                 return this.restartWithPrompt();
             }
         }
 
         // TODO: Migrate these to affectsConfiguration style above
-        if (settings.cwd !== this.sessionSettings.cwd
-            || settings.powerShellDefaultVersion !== this.sessionSettings.powerShellDefaultVersion
-            || settings.developer.bundledModulesPath !== this.sessionSettings.developer.bundledModulesPath
-            || settings.developer.editorServicesWaitForDebugger !== this.sessionSettings.developer.editorServicesWaitForDebugger
-            || settings.developer.setExecutionPolicy !== this.sessionSettings.developer.setExecutionPolicy
-            || settings.integratedConsole.useLegacyReadLine !== this.sessionSettings.integratedConsole.useLegacyReadLine
-            || settings.integratedConsole.startInBackground !== this.sessionSettings.integratedConsole.startInBackground
-            || settings.integratedConsole.startLocation !== this.sessionSettings.integratedConsole.startLocation
+        if (
+            settings.cwd !== this.sessionSettings.cwd ||
+            settings.powerShellDefaultVersion !==
+                this.sessionSettings.powerShellDefaultVersion ||
+            settings.developer.bundledModulesPath !==
+                this.sessionSettings.developer.bundledModulesPath ||
+            settings.developer.editorServicesWaitForDebugger !==
+                this.sessionSettings.developer.editorServicesWaitForDebugger ||
+            settings.developer.setExecutionPolicy !==
+                this.sessionSettings.developer.setExecutionPolicy ||
+            settings.integratedConsole.useLegacyReadLine !==
+                this.sessionSettings.integratedConsole.useLegacyReadLine ||
+            settings.integratedConsole.startInBackground !==
+                this.sessionSettings.integratedConsole.startInBackground ||
+            settings.integratedConsole.startLocation !==
+                this.sessionSettings.integratedConsole.startLocation
         ) {
             return this.restartWithPrompt();
         }
@@ -548,7 +681,9 @@ export class SessionManager implements Middleware {
         this.logger.writeDebug("Settings changed, prompting to restart...");
         const response = await vscode.window.showInformationMessage(
             "The PowerShell runtime configuration has changed, would you like to start a new session?",
-            "Yes", "No");
+            "Yes",
+            "No",
+        );
 
         if (response === "Yes") {
             await this.restartSession();
@@ -557,11 +692,27 @@ export class SessionManager implements Middleware {
 
     private registerCommands(): void {
         this.registeredCommands = [
-            vscode.commands.registerCommand("PowerShell.RestartSession", async () => { await this.restartSession(); }),
-            vscode.commands.registerCommand(this.ShowSessionMenuCommandName, async () => { await this.showSessionMenu(); }),
-            vscode.workspace.onDidChangeConfiguration((e) => this.restartOnCriticalConfigChange(e)),
             vscode.commands.registerCommand(
-                "PowerShell.ShowSessionConsole", (isExecute?: boolean) => { this.showSessionTerminal(isExecute); })
+                "PowerShell.RestartSession",
+                async () => {
+                    await this.restartSession();
+                },
+            ),
+            vscode.commands.registerCommand(
+                this.ShowSessionMenuCommandName,
+                async () => {
+                    await this.showSessionMenu();
+                },
+            ),
+            vscode.workspace.onDidChangeConfiguration((e) =>
+                this.restartOnCriticalConfigChange(e),
+            ),
+            vscode.commands.registerCommand(
+                "PowerShell.ShowSessionConsole",
+                (isExecute?: boolean) => {
+                    this.showSessionTerminal(isExecute);
+                },
+            ),
         ];
     }
 
@@ -570,7 +721,8 @@ export class SessionManager implements Middleware {
         const powershellExeFinder = new PowerShellExeFinder(
             this.platformDetails,
             this.sessionSettings.powerShellAdditionalExePaths,
-            this.logger);
+            this.logger,
+        );
 
         let foundPowerShell: IPowerShellExeDetails | undefined;
         try {
@@ -579,19 +731,35 @@ export class SessionManager implements Middleware {
             if (wantedName !== "") {
                 for await (const details of powershellExeFinder.enumeratePowerShellInstallations()) {
                     // Need to compare names case-insensitively, from https://stackoverflow.com/a/2140723
-                    if (wantedName.localeCompare(details.displayName, undefined, { sensitivity: "accent" }) === 0) {
+                    if (
+                        wantedName.localeCompare(
+                            details.displayName,
+                            undefined,
+                            { sensitivity: "accent" },
+                        ) === 0
+                    ) {
                         defaultPowerShell = details;
                         break;
                     }
                 }
             }
-            foundPowerShell = defaultPowerShell ?? await powershellExeFinder.getFirstAvailablePowerShellInstallation();
-            if (wantedName !== "" && defaultPowerShell === undefined && foundPowerShell !== undefined) {
-                void this.logger.writeAndShowWarning(`The 'powerShellDefaultVersion' setting was '${wantedName}' but this was not found!`
-                    + ` Instead using first available installation '${foundPowerShell.displayName}' at '${foundPowerShell.exePath}'!`);
+            foundPowerShell =
+                defaultPowerShell ??
+                (await powershellExeFinder.getFirstAvailablePowerShellInstallation());
+            if (
+                wantedName !== "" &&
+                defaultPowerShell === undefined &&
+                foundPowerShell !== undefined
+            ) {
+                void this.logger.writeAndShowWarning(
+                    `The 'powerShellDefaultVersion' setting was '${wantedName}' but this was not found!` +
+                        ` Instead using first available installation '${foundPowerShell.displayName}' at '${foundPowerShell.exePath}'!`,
+                );
             }
         } catch (err) {
-            this.logger.writeError(`Error occurred while searching for a PowerShell executable:\n${err}`);
+            this.logger.writeError(
+                `Error occurred while searching for a PowerShell executable:\n${err}`,
+            );
         }
 
         return foundPowerShell;
@@ -599,104 +767,140 @@ export class SessionManager implements Middleware {
 
     private async startLanguageServerProcess(
         powerShellExeDetails: IPowerShellExeDetails,
-        cancellationToken: vscode.CancellationToken): Promise<PowerShellProcess> {
-
+        cancellationToken: vscode.CancellationToken,
+    ): Promise<PowerShellProcess> {
         const bundledModulesPath = await this.getBundledModulesPath();
 
         // Dispose any stale terminals from previous killed sessions.
         PowerShellProcess.cleanUpTerminals();
-        const languageServerProcess =
-            new PowerShellProcess(
-                powerShellExeDetails.exePath,
+        const languageServerProcess = new PowerShellProcess(
+            powerShellExeDetails.exePath,
+            bundledModulesPath,
+            false,
+            this.shellIntegrationEnabled,
+            this.logger,
+            this.extensionContext.logUri,
+            this.getEditorServicesArgs(
                 bundledModulesPath,
-                false,
-                this.shellIntegrationEnabled,
-                this.logger,
-                this.extensionContext.logUri,
-                this.getEditorServicesArgs(bundledModulesPath, powerShellExeDetails),
-                this.getNewSessionFilePath(),
-                this.sessionSettings,
-                this.extensionContext.extensionMode == vscode.ExtensionMode.Development);
+                powerShellExeDetails,
+            ),
+            this.getNewSessionFilePath(),
+            this.sessionSettings,
+            this.extensionContext.extensionMode ==
+                vscode.ExtensionMode.Development,
+        );
 
-        languageServerProcess.onExited(
-            () => {
-                LanguageClientConsumer.onLanguageClientExited();
+        languageServerProcess.onExited(() => {
+            LanguageClientConsumer.onLanguageClientExited();
 
-                if (this.sessionStatus === SessionStatus.Running
-                    || this.sessionStatus === SessionStatus.Busy) {
-                    this.setSessionStatus("Session Exited!", SessionStatus.Failed);
-                    void this.promptForRestart();
-                }
-            });
+            if (
+                this.sessionStatus === SessionStatus.Running ||
+                this.sessionStatus === SessionStatus.Busy
+            ) {
+                this.setSessionStatus("Session Exited!", SessionStatus.Failed);
+                void this.promptForRestart();
+            }
+        });
 
-        this.sessionDetails = await languageServerProcess.start(cancellationToken);
+        this.sessionDetails =
+            await languageServerProcess.start(cancellationToken);
 
         return languageServerProcess;
     }
 
     // The process failed to start, so check for common user errors (generally
     // out-of-support versions of PowerShell).
-    private async handleFailedProcess(powerShellProcess: PowerShellProcess): Promise<void> {
+    private async handleFailedProcess(
+        powerShellProcess: PowerShellProcess,
+    ): Promise<void> {
         const version = await powerShellProcess.getVersionCli();
         let shouldUpdate = true;
 
         if (satisfies(version, "<5.1.0")) {
-            void this.setSessionFailedGetPowerShell(`PowerShell v${version} is not supported, please update!`);
+            void this.setSessionFailedGetPowerShell(
+                `PowerShell v${version} is not supported, please update!`,
+            );
         } else if (satisfies(version, ">=5.1.0 <6.0.0")) {
-            void this.setSessionFailedGetPowerShell("It looks like you're trying to use Windows PowerShell, which is supported on a best-effort basis. Can you try PowerShell 7?");
+            void this.setSessionFailedGetPowerShell(
+                "It looks like you're trying to use Windows PowerShell, which is supported on a best-effort basis. Can you try PowerShell 7?",
+            );
         } else if (satisfies(version, ">=6.0.0 <7.4.0")) {
-            void this.setSessionFailedGetPowerShell(`PowerShell v${version} has reached end-of-support, please update!`);
+            void this.setSessionFailedGetPowerShell(
+                `PowerShell v${version} has reached end-of-support, please update!`,
+            );
         } else {
             shouldUpdate = false;
-            void this.setSessionFailedOpenBug("PowerShell Language Server process didn't start!");
+            void this.setSessionFailedOpenBug(
+                "PowerShell Language Server process didn't start!",
+            );
         }
 
         if (shouldUpdate) {
             // Run the update notifier since it won't run later as we failed
             // to start, but we have enough details to do so now.
             const versionDetails: IPowerShellVersionDetails = {
-                "version": version,
-                "edition": "", // Unused by UpdatePowerShell
-                "commit": version, // Actually used by UpdatePowerShell
-                "architecture": process.arch // Best guess based off Code's architecture
+                version: version,
+                edition: "", // Unused by UpdatePowerShell
+                commit: version, // Actually used by UpdatePowerShell
+                architecture: process.arch, // Best guess based off Code's architecture
             };
-            const updater = new UpdatePowerShell(this.sessionSettings, this.logger, versionDetails);
+            const updater = new UpdatePowerShell(
+                this.sessionSettings,
+                this.logger,
+                versionDetails,
+            );
             void updater.checkForUpdate();
         }
     }
 
-    private sessionStarted(sessionDetails: IEditorServicesSessionDetails): boolean {
-        this.logger.writeDebug(`Session details: ${JSON.stringify(sessionDetails, undefined, 2)}`);
-        if (sessionDetails.status === "started") { // Successful server start with a session file
+    private sessionStarted(
+        sessionDetails: IEditorServicesSessionDetails,
+    ): boolean {
+        this.logger.writeDebug(
+            `Session details: ${JSON.stringify(sessionDetails, undefined, 2)}`,
+        );
+        if (sessionDetails.status === "started") {
+            // Successful server start with a session file
             return true;
         }
-        if (sessionDetails.status === "failed") { // Server started but indicated it failed
+        if (sessionDetails.status === "failed") {
+            // Server started but indicated it failed
             if (sessionDetails.reason === "powerShellVersion") {
-                void this.setSessionFailedGetPowerShell(`PowerShell ${sessionDetails.powerShellVersion} is not supported, please update!`);
-            } else if (sessionDetails.reason === "dotNetVersion") { // Only applies to PowerShell 5.1
-                void this.setSessionFailedGetDotNet(".NET Framework is out-of-date, please install at least 4.8!");
+                void this.setSessionFailedGetPowerShell(
+                    `PowerShell ${sessionDetails.powerShellVersion} is not supported, please update!`,
+                );
+            } else if (sessionDetails.reason === "dotNetVersion") {
+                // Only applies to PowerShell 5.1
+                void this.setSessionFailedGetDotNet(
+                    ".NET Framework is out-of-date, please install at least 4.8!",
+                );
             } else {
-                void this.setSessionFailedOpenBug(`PowerShell could not be started for an unknown reason: ${sessionDetails.reason}`);
+                void this.setSessionFailedOpenBug(
+                    `PowerShell could not be started for an unknown reason: ${sessionDetails.reason}`,
+                );
             }
         } else {
-            void this.setSessionFailedOpenBug(`PowerShell could not be started with an unknown status: ${sessionDetails.status}, and reason: ${sessionDetails.reason}`);
+            void this.setSessionFailedOpenBug(
+                `PowerShell could not be started with an unknown status: ${sessionDetails.status}, and reason: ${sessionDetails.reason}`,
+            );
         }
         return false;
     }
 
-    private async startLanguageClient(sessionDetails: IEditorServicesSessionDetails): Promise<LanguageClient> {
+    private async startLanguageClient(
+        sessionDetails: IEditorServicesSessionDetails,
+    ): Promise<LanguageClient> {
         this.logger.writeDebug("Connecting to language service...");
         const connectFunc = (): Promise<StreamInfo> => {
-            return new Promise<StreamInfo>(
-                (resolve, _reject) => {
-                    const socket = net.connect(sessionDetails.languageServicePipeName);
-                    socket.on(
-                        "connect",
-                        () => {
-                            this.logger.writeDebug("Language service connected.");
-                            resolve({ writer: socket, reader: socket });
-                        });
+            return new Promise<StreamInfo>((resolve, _reject) => {
+                const socket = net.connect(
+                    sessionDetails.languageServicePipeName,
+                );
+                socket.on("connect", () => {
+                    this.logger.writeDebug("Language service connected.");
+                    resolve({ writer: socket, reader: socket });
                 });
+            });
         };
 
         const clientOptions: LanguageClientOptions = {
@@ -704,7 +908,11 @@ export class SessionManager implements Middleware {
             synchronize: {
                 // TODO: This is deprecated and they should be pulled by the server.
                 // backend uses "files" and "search" to ignore references.
-                configurationSection: [utils.PowerShellLanguageId, "files", "search"],
+                configurationSection: [
+                    utils.PowerShellLanguageId,
+                    "files",
+                    "search",
+                ],
                 // TODO: fileEvents: vscode.workspace.createFileSystemWatcher('**/.eslintrc')
             },
             // NOTE: Some settings are only applicable on startup, so we send them during initialization.
@@ -714,15 +922,22 @@ export class SessionManager implements Middleware {
                 enableProfileLoading: this.sessionSettings.enableProfileLoading,
                 initialWorkingDirectory: await validateCwdSetting(this.logger),
                 shellIntegrationScript: this.shellIntegrationEnabled
-                    ? utils.ShellIntegrationScript : "",
+                    ? utils.ShellIntegrationScript
+                    : "",
             },
             errorHandler: {
                 // Override the default error handler to prevent it from
                 // closing the LanguageClient incorrectly when the socket
                 // hangs up (ECONNRESET errors).
-                error: (_error: Error, _message: Message, _count: number): ErrorHandlerResult => {
+                error: (
+                    _error: Error,
+                    _message: Message,
+                    _count: number,
+                ): ErrorHandlerResult => {
                     // TODO: Is there any error worth terminating on?
-                    this.logger.writeError(`${_error.name}: ${_error.message} ${_error.cause}`);
+                    this.logger.writeError(
+                        `${_error.name}: ${_error.message} ${_error.cause}`,
+                    );
                     return { action: ErrorAction.Continue };
                 },
                 closed: (): CloseHandlerResult => {
@@ -730,18 +945,30 @@ export class SessionManager implements Middleware {
                     // We have our own restart experience
                     return {
                         action: CloseAction.DoNotRestart,
-                        message: "Connection to PowerShell Editor Services (the Extension Terminal) was closed. See below prompt to restart!"
+                        message:
+                            "Connection to PowerShell Editor Services (the Extension Terminal) was closed. See below prompt to restart!",
                     };
                 },
             },
             middleware: this,
-            traceOutputChannel: new LanguageClientOutputChannelAdapter("PowerShell: Trace LSP", LspTraceParser),
+            traceOutputChannel: new LanguageClientOutputChannelAdapter(
+                "PowerShell: Trace LSP",
+                LspTraceParser,
+            ),
             // This is named the same as the Client log to merge the logs, but will be handled and disposed separately.
-            outputChannel: new LanguageClientOutputChannelAdapter("PowerShell", PsesParser),
-            revealOutputChannelOn: RevealOutputChannelOn.Never
+            outputChannel: new LanguageClientOutputChannelAdapter(
+                "PowerShell",
+                PsesParser,
+            ),
+            revealOutputChannelOn: RevealOutputChannelOn.Never,
         };
 
-        const languageClient = new LanguageClient("powershell", "PowerShell Editor Services Client", connectFunc, clientOptions);
+        const languageClient = new LanguageClient(
+            "powershell",
+            "PowerShell Editor Services Client",
+            connectFunc,
+            clientOptions,
+        );
 
         // This enables handling Semantic Highlighting messages in PowerShell Editor Services
         // TODO: We should only turn this on in preview.
@@ -768,16 +995,19 @@ export class SessionManager implements Middleware {
             // Console.ReadKey, since it's not cancellable. On
             // "cancellation" the server asks us to send pretend to
             // press a key, thus mitigating all the quirk.
-            languageClient.onNotification(
-                SendKeyPressNotificationType,
-                () => { this.languageServerProcess?.sendKeyPress(); }),
+            languageClient.onNotification(SendKeyPressNotificationType, () => {
+                this.languageServerProcess?.sendKeyPress();
+            }),
 
             languageClient.onNotification(
                 ExecutionBusyStatusNotificationType,
                 (isBusy: boolean) => {
-                    if (isBusy) { this.setSessionBusyStatus(); }
-                    else { this.setSessionRunningStatus(); }
-                }
+                    if (isBusy) {
+                        this.setSessionBusyStatus();
+                    } else {
+                        this.setSessionRunningStatus();
+                    }
+                },
             ),
         ];
 
@@ -785,7 +1015,10 @@ export class SessionManager implements Middleware {
             await languageClient.start();
             LanguageClientConsumer.onLanguageClientStarted(languageClient);
         } catch (err) {
-            void this.setSessionFailedOpenBug("Language client failed to start: " + (err instanceof Error ? err.message : "unknown"));
+            void this.setSessionFailedOpenBug(
+                "Language client failed to start: " +
+                    (err instanceof Error ? err.message : "unknown"),
+            );
         }
 
         return languageClient;
@@ -795,8 +1028,14 @@ export class SessionManager implements Middleware {
         // Because the extension is always at `<root>/out/main.js`
         let bundledModulesPath = path.resolve(__dirname, "../modules");
 
-        if (this.extensionContext.extensionMode === vscode.ExtensionMode.Development) {
-            const devBundledModulesPath = path.resolve(__dirname, this.sessionSettings.developer.bundledModulesPath);
+        if (
+            this.extensionContext.extensionMode ===
+            vscode.ExtensionMode.Development
+        ) {
+            const devBundledModulesPath = path.resolve(
+                __dirname,
+                this.sessionSettings.developer.bundledModulesPath,
+            );
 
             // Make sure the module's bin path exists
             if (await utils.checkIfDirectoryExists(devBundledModulesPath)) {
@@ -804,14 +1043,18 @@ export class SessionManager implements Middleware {
             } else {
                 void this.logger.writeAndShowWarning(
                     "In development mode but PowerShellEditorServices dev module path cannot be " +
-                    `found (or has not been built yet): ${devBundledModulesPath}\n`);
+                        `found (or has not been built yet): ${devBundledModulesPath}\n`,
+                );
             }
         }
 
         return bundledModulesPath;
     }
 
-    private getEditorServicesArgs(bundledModulesPath: string, powerShellExeDetails: IPowerShellExeDetails): string {
+    private getEditorServicesArgs(
+        bundledModulesPath: string,
+        powerShellExeDetails: IPowerShellExeDetails,
+    ): string {
         let editorServicesArgs =
             "-HostName 'Visual Studio Code Host' " +
             "-HostProfileId 'Microsoft.VSCode' " +
@@ -821,7 +1064,10 @@ export class SessionManager implements Middleware {
 
         if (this.sessionSettings.integratedConsole.suppressStartupBanner) {
             editorServicesArgs += "-StartupBanner '' ";
-        } else if (utils.isWindows && !powerShellExeDetails.supportsProperArguments) {
+        } else if (
+            utils.isWindows &&
+            !powerShellExeDetails.supportsProperArguments
+        ) {
             // NOTE: On Windows we don't Base64 encode the startup command
             // because it annoys some poorly implemented anti-virus scanners.
             // Unfortunately this means that for some installs of PowerShell
@@ -839,28 +1085,40 @@ Type 'help' to get help.
         }
 
         // We guard this here too out of an abundance of precaution.
-        if (this.sessionSettings.developer.editorServicesWaitForDebugger
-            && this.extensionContext.extensionMode === vscode.ExtensionMode.Development) {
+        if (
+            this.sessionSettings.developer.editorServicesWaitForDebugger &&
+            this.extensionContext.extensionMode ===
+                vscode.ExtensionMode.Development
+        ) {
             editorServicesArgs += "-WaitForDebugger ";
         }
-        const logLevel = vscode.workspace.getConfiguration("powershell.developer").get<string>("editorServicesLogLevel");
+        const logLevel = vscode.workspace
+            .getConfiguration("powershell.developer")
+            .get<string>("editorServicesLogLevel");
         editorServicesArgs += `-LogLevel '${logLevel}' `;
 
         return editorServicesArgs;
     }
 
-    private async getVersionDetails(): Promise<IPowerShellVersionDetails | undefined> {
+    private async getVersionDetails(): Promise<
+        IPowerShellVersionDetails | undefined
+    > {
         // Take one minute to get version details, otherwise cancel and fail.
         const timeout = new vscode.CancellationTokenSource();
-        setTimeout(() => { timeout.cancel(); }, 60 * 1000);
+        setTimeout(() => {
+            timeout.cancel();
+        }, 60 * 1000);
 
         const versionDetails = await this.languageClient?.sendRequest(
-            PowerShellVersionRequestType, timeout.token);
+            PowerShellVersionRequestType,
+            timeout.token,
+        );
 
         // This is pretty much the only telemetry event we care about.
         // TODO: We actually could send this earlier from PSES itself.
-        this.sendTelemetryEvent("powershellVersionCheck",
-            { powershellVersion: versionDetails?.version ?? "unknown" });
+        this.sendTelemetryEvent("powershellVersionCheck", {
+            powershellVersion: versionDetails?.version ?? "unknown",
+        });
 
         return versionDetails;
     }
@@ -871,30 +1129,45 @@ Type 'help' to get help.
             [
                 {
                     prompt: "Yes",
-                    action: async (): Promise<void> => { await this.restartSession(); }
+                    action: async (): Promise<void> => {
+                        await this.restartSession();
+                    },
                 },
                 {
                     prompt: "No",
-                    action: undefined
-                }
-            ]
+                    action: undefined,
+                },
+            ],
         );
     }
 
     private sendTelemetryEvent(
         eventName: string,
         properties?: TelemetryEventProperties,
-        measures?: TelemetryEventMeasurements): void {
-
-        if (this.extensionContext.extensionMode === vscode.ExtensionMode.Production) {
-            this.telemetryReporter.sendTelemetryEvent(eventName, properties, measures);
+        measures?: TelemetryEventMeasurements,
+    ): void {
+        if (
+            this.extensionContext.extensionMode ===
+            vscode.ExtensionMode.Production
+        ) {
+            this.telemetryReporter.sendTelemetryEvent(
+                eventName,
+                properties,
+                measures,
+            );
         }
     }
 
     private createStatusBarItem(): vscode.LanguageStatusItem {
         const statusTitle = "Show PowerShell Session Menu";
-        const languageStatusItem = vscode.languages.createLanguageStatusItem("powershell", this.documentSelector);
-        languageStatusItem.command = { title: statusTitle, command: this.ShowSessionMenuCommandName };
+        const languageStatusItem = vscode.languages.createLanguageStatusItem(
+            "powershell",
+            this.documentSelector,
+        );
+        languageStatusItem.command = {
+            title: statusTitle,
+            command: this.ShowSessionMenuCommandName,
+        };
         languageStatusItem.text = "$(terminal-powershell)";
         languageStatusItem.detail = "PowerShell";
         return languageStatusItem;
@@ -902,7 +1175,9 @@ Type 'help' to get help.
 
     private async waitWhileStarting(): Promise<void> {
         while (this.sessionStatus === SessionStatus.Starting) {
-            if (this.startCancellationTokenSource?.token.isCancellationRequested) {
+            if (
+                this.startCancellationTokenSource?.token.isCancellationRequested
+            ) {
                 return;
             }
             await utils.sleep(300);
@@ -916,7 +1191,9 @@ Type 'help' to get help.
     }
 
     private setSessionStatus(detail: string, status: SessionStatus): void {
-        this.logger.writeDebug(`Session status changing from '${this.sessionStatus}' to '${status}'.`);
+        this.logger.writeDebug(
+            `Session status changing from '${this.sessionStatus}' to '${status}'.`,
+        );
         this.sessionStatus = status;
         this.languageStatusItem.text = "$(terminal-powershell)";
         this.languageStatusItem.detail = "PowerShell";
@@ -925,10 +1202,12 @@ Type 'help' to get help.
             const semver = new SemVer(this.versionDetails.version);
             this.languageStatusItem.text += ` ${semver.major}.${semver.minor}`;
             this.languageStatusItem.detail += ` ${this.versionDetails.commit} (${this.versionDetails.architecture.toLowerCase()})`;
-        } else if (this.PowerShellExeDetails?.displayName) { // When it hasn't started yet.
+        } else if (this.PowerShellExeDetails?.displayName) {
+            // When it hasn't started yet.
             this.languageStatusItem.text += ` ${this.PowerShellExeDetails.displayName}`;
             this.languageStatusItem.detail += ` at '${this.PowerShellExeDetails.exePath}'`;
-        } else if (this.sessionSettings.powerShellDefaultVersion) { // When it hasn't been found yet.
+        } else if (this.sessionSettings.powerShellDefaultVersion) {
+            // When it hasn't been found yet.
             this.languageStatusItem.text += ` ${this.sessionSettings.powerShellDefaultVersion}`;
             this.languageStatusItem.detail = `Looking for '${this.sessionSettings.powerShellDefaultVersion}'...`;
         }
@@ -938,24 +1217,28 @@ Type 'help' to get help.
         }
 
         switch (status) {
-        case SessionStatus.Running:
-        case SessionStatus.NotStarted:
-            this.languageStatusItem.busy = false;
-            this.languageStatusItem.severity = vscode.LanguageStatusSeverity.Information;
-            break;
-        case SessionStatus.Busy:
-            this.languageStatusItem.busy = true;
-            this.languageStatusItem.severity = vscode.LanguageStatusSeverity.Information;
-            break;
-        case SessionStatus.Starting:
-        case SessionStatus.Stopping:
-            this.languageStatusItem.busy = true;
-            this.languageStatusItem.severity = vscode.LanguageStatusSeverity.Warning;
-            break;
-        case SessionStatus.Failed:
-            this.languageStatusItem.busy = false;
-            this.languageStatusItem.severity = vscode.LanguageStatusSeverity.Error;
-            break;
+            case SessionStatus.Running:
+            case SessionStatus.NotStarted:
+                this.languageStatusItem.busy = false;
+                this.languageStatusItem.severity =
+                    vscode.LanguageStatusSeverity.Information;
+                break;
+            case SessionStatus.Busy:
+                this.languageStatusItem.busy = true;
+                this.languageStatusItem.severity =
+                    vscode.LanguageStatusSeverity.Information;
+                break;
+            case SessionStatus.Starting:
+            case SessionStatus.Stopping:
+                this.languageStatusItem.busy = true;
+                this.languageStatusItem.severity =
+                    vscode.LanguageStatusSeverity.Warning;
+                break;
+            case SessionStatus.Failed:
+                this.languageStatusItem.busy = false;
+                this.languageStatusItem.severity =
+                    vscode.LanguageStatusSeverity.Error;
+                break;
         }
     }
 
@@ -974,43 +1257,63 @@ Type 'help' to get help.
 
     private async setSessionFailedOpenBug(message: string): Promise<void> {
         this.setSessionStatus("Startup Error!", SessionStatus.Failed);
-        await this.logger.writeAndShowErrorWithActions(message, [{
-            prompt: "Open an Issue",
-            action: async (): Promise<void> => {
-                await vscode.commands.executeCommand("PowerShell.GenerateBugReport");
-            }
-        }]
-        );
+        await this.logger.writeAndShowErrorWithActions(message, [
+            {
+                prompt: "Open an Issue",
+                action: async (): Promise<void> => {
+                    await vscode.commands.executeCommand(
+                        "PowerShell.GenerateBugReport",
+                    );
+                },
+            },
+        ]);
     }
 
-    private async setSessionFailedGetPowerShell(message: string): Promise<void> {
+    private async setSessionFailedGetPowerShell(
+        message: string,
+    ): Promise<void> {
         this.setSessionStatus("Startup Error!", SessionStatus.Failed);
-        await this.logger.writeAndShowErrorWithActions(message, [{
-            prompt: "Open PowerShell Install Documentation",
-            action: async (): Promise<void> => {
-                await vscode.env.openExternal(
-                    vscode.Uri.parse("https://aka.ms/get-powershell-vscode"));
-            }
-        }]
-        );
+        await this.logger.writeAndShowErrorWithActions(message, [
+            {
+                prompt: "Open PowerShell Install Documentation",
+                action: async (): Promise<void> => {
+                    await vscode.env.openExternal(
+                        vscode.Uri.parse(
+                            "https://aka.ms/get-powershell-vscode",
+                        ),
+                    );
+                },
+            },
+        ]);
     }
 
     private async setSessionFailedGetDotNet(message: string): Promise<void> {
         this.setSessionStatus("Startup Error!", SessionStatus.Failed);
-        await this.logger.writeAndShowErrorWithActions(message, [{
-            prompt: "Open .NET Framework Documentation",
-            action: async (): Promise<void> => {
-                await vscode.env.openExternal(
-                    vscode.Uri.parse("https://dotnet.microsoft.com/en-us/download/dotnet-framework"));
-            }
-        }]
-        );
+        await this.logger.writeAndShowErrorWithActions(message, [
+            {
+                prompt: "Open .NET Framework Documentation",
+                action: async (): Promise<void> => {
+                    await vscode.env.openExternal(
+                        vscode.Uri.parse(
+                            "https://dotnet.microsoft.com/en-us/download/dotnet-framework",
+                        ),
+                    );
+                },
+            },
+        ]);
     }
 
-    private async changePowerShellDefaultVersion(exePath: IPowerShellExeDetails): Promise<void> {
+    private async changePowerShellDefaultVersion(
+        exePath: IPowerShellExeDetails,
+    ): Promise<void> {
         this.suppressRestartPrompt = true;
         try {
-            await changeSetting("powerShellDefaultVersion", exePath.displayName, true, this.logger);
+            await changeSetting(
+                "powerShellDefaultVersion",
+                exePath.displayName,
+                true,
+                this.logger,
+            );
         } finally {
             this.suppressRestartPrompt = false;
         }
@@ -1025,15 +1328,26 @@ Type 'help' to get help.
     // Shows the temp debug terminal if it exists, otherwise the session terminal.
     public showDebugTerminal(isExecute?: boolean): void {
         if (this.debugSessionProcess) {
-            this.debugSessionProcess.showTerminal(isExecute && !this.sessionSettings.integratedConsole.focusConsoleOnExecute);
+            this.debugSessionProcess.showTerminal(
+                isExecute &&
+                    !this.sessionSettings.integratedConsole
+                        .focusConsoleOnExecute,
+            );
         } else {
-            this.languageServerProcess?.showTerminal(isExecute && !this.sessionSettings.integratedConsole.focusConsoleOnExecute);
+            this.languageServerProcess?.showTerminal(
+                isExecute &&
+                    !this.sessionSettings.integratedConsole
+                        .focusConsoleOnExecute,
+            );
         }
     }
 
     // Always shows the session terminal.
     private showSessionTerminal(isExecute?: boolean): void {
-        this.languageServerProcess?.showTerminal(isExecute && !this.sessionSettings.integratedConsole.focusConsoleOnExecute);
+        this.languageServerProcess?.showTerminal(
+            isExecute &&
+                !this.sessionSettings.integratedConsole.focusConsoleOnExecute,
+        );
     }
 
     private async showSessionMenu(): Promise<void> {
@@ -1041,47 +1355,67 @@ Type 'help' to get help.
             this.platformDetails,
             // We don't pull from session settings because we want them fresh!
             getSettings().powerShellAdditionalExePaths,
-            this.logger);
-        const availablePowerShellExes = await powershellExeFinder.getAllAvailablePowerShellInstallations();
+            this.logger,
+        );
+        const availablePowerShellExes =
+            await powershellExeFinder.getAllAvailablePowerShellInstallations();
 
         const powerShellItems = availablePowerShellExes
-            .filter((item) => item.displayName !== this.PowerShellExeDetails?.displayName)
+            .filter(
+                (item) =>
+                    item.displayName !== this.PowerShellExeDetails?.displayName,
+            )
             .map((item) => {
                 return new SessionMenuItem(
                     `Switch to: ${item.displayName}`,
-                    async () => { await this.changePowerShellDefaultVersion(item); });
+                    async () => {
+                        await this.changePowerShellDefaultVersion(item);
+                    },
+                );
             });
 
         const menuItems: SessionMenuItem[] = [
             new SessionMenuItem(
                 `Current session: ${this.PowerShellExeDetails?.displayName ?? "Unknown"} (click to show logs)`,
-                async () => { await vscode.commands.executeCommand("PowerShell.ShowLogs"); }),
+                async () => {
+                    await vscode.commands.executeCommand("PowerShell.ShowLogs");
+                },
+            ),
 
             // Add all of the different PowerShell options
             ...powerShellItems,
 
-            new SessionMenuItem(
-                "Restart current session",
-                async () => {
-                    // We pass in the display name so we guarantee that the session
-                    // will be the same PowerShell.
-                    if (this.PowerShellExeDetails) {
-                        await this.restartSession(this.PowerShellExeDetails.displayName);
-                    } else {
-                        await this.restartSession();
-                    }
-                }),
+            new SessionMenuItem("Restart current session", async () => {
+                // We pass in the display name so we guarantee that the session
+                // will be the same PowerShell.
+                if (this.PowerShellExeDetails) {
+                    await this.restartSession(
+                        this.PowerShellExeDetails.displayName,
+                    );
+                } else {
+                    await this.restartSession();
+                }
+            }),
 
-            new SessionMenuItem(
-                "Open session logs folder",
-                async () => { await vscode.commands.executeCommand("PowerShell.OpenLogFolder"); }),
+            new SessionMenuItem("Open session logs folder", async () => {
+                await vscode.commands.executeCommand(
+                    "PowerShell.OpenLogFolder",
+                );
+            }),
 
             new SessionMenuItem(
                 "Modify list of additional PowerShell locations",
-                async () => { await vscode.commands.executeCommand("workbench.action.openSettings", "powerShellAdditionalExePaths"); }),
+                async () => {
+                    await vscode.commands.executeCommand(
+                        "workbench.action.openSettings",
+                        "powerShellAdditionalExePaths",
+                    );
+                },
+            ),
         ];
 
-        const selectedItem = await vscode.window.showQuickPick<SessionMenuItem>(menuItems);
+        const selectedItem =
+            await vscode.window.showQuickPick<SessionMenuItem>(menuItems);
         await selectedItem?.callback();
     }
 }
@@ -1093,6 +1427,6 @@ class SessionMenuItem implements vscode.QuickPickItem {
         public readonly label: string,
 
         // eslint-disable-next-line @typescript-eslint/no-empty-function
-        public readonly callback = async (): Promise<void> => { }) {
-    }
+        public readonly callback = async (): Promise<void> => {},
+    ) {}
 }
diff --git a/src/settings.ts b/src/settings.ts
index 943b4c27ab..9664c10cf1 100644
--- a/src/settings.ts
+++ b/src/settings.ts
@@ -4,8 +4,8 @@
 import vscode = require("vscode");
 import utils = require("./utils");
 import os = require("os");
-import type { ILogger } from "./logging";
 import untildify from "untildify";
+import type { ILogger } from "./logging";
 import path = require("path");
 
 // TODO: Quite a few of these settings are unused in the client and instead
@@ -17,7 +17,7 @@ import path = require("path");
 // Perhaps we just get rid of this entirely?
 
 // eslint-disable-next-line @typescript-eslint/no-extraneous-class
-class PartialSettings { }
+class PartialSettings {}
 
 export class Settings extends PartialSettings {
     powerShellAdditionalExePaths: PowerShellAdditionalExePathSettings = {};
@@ -36,7 +36,7 @@ export class Settings extends PartialSettings {
     sideBar = new SideBarSettings();
     pester = new PesterSettings();
     buttons = new ButtonSettings();
-    cwd = "";  // NOTE: use validateCwdSetting() instead of this directly!
+    cwd = ""; // NOTE: use validateCwdSetting() instead of this directly!
     enableReferencesCodeLens = true;
     analyzeOpenDocumentsOnly = false;
     // TODO: Add (deprecated) useX86Host (for testing)
@@ -64,12 +64,12 @@ export enum CommentType {
 
 export enum StartLocation {
     Editor = "Editor",
-    Panel = "Panel"
+    Panel = "Panel",
 }
 
-export enum ExecuteMode{
+export enum ExecuteMode {
     Call = "Call",
-    DotSource = "DotSource"
+    DotSource = "DotSource",
 }
 
 export type PowerShellAdditionalExePathSettings = Record<string, string>;
@@ -152,7 +152,11 @@ class ButtonSettings extends PartialSettings {
 }
 
 // This is a recursive function which unpacks a WorkspaceConfiguration into our settings.
-function getSetting<TSetting>(key: string | undefined, value: TSetting, configuration: vscode.WorkspaceConfiguration): TSetting {
+function getSetting<TSetting>(
+    key: string | undefined,
+    value: TSetting,
+    configuration: vscode.WorkspaceConfiguration,
+): TSetting {
     // Base case where we're looking at a primitive type (or our special record).
     if (key !== undefined && !(value instanceof PartialSettings)) {
         return configuration.get<TSetting>(key, value);
@@ -175,18 +179,20 @@ export function getSettings(): Settings {
 }
 
 // Get the ConfigurationTarget (read: scope) of where the *effective* setting value comes from
-export function getEffectiveConfigurationTarget(settingName: string): vscode.ConfigurationTarget | undefined {
-    const configuration = vscode.workspace.getConfiguration(utils.PowerShellLanguageId);
+export function getEffectiveConfigurationTarget(
+    settingName: string,
+): vscode.ConfigurationTarget | undefined {
+    const configuration = vscode.workspace.getConfiguration(
+        utils.PowerShellLanguageId,
+    );
     const detail = configuration.inspect(settingName);
     if (detail === undefined) {
         return undefined;
     } else if (typeof detail.workspaceFolderValue !== "undefined") {
         return vscode.ConfigurationTarget.WorkspaceFolder;
-    }
-    else if (typeof detail.workspaceValue !== "undefined") {
+    } else if (typeof detail.workspaceValue !== "undefined") {
         return vscode.ConfigurationTarget.Workspace;
-    }
-    else if (typeof detail.globalValue !== "undefined") {
+    } else if (typeof detail.globalValue !== "undefined") {
         return vscode.ConfigurationTarget.Global;
     }
     return undefined;
@@ -197,12 +203,16 @@ export async function changeSetting(
     // eslint-disable-next-line @typescript-eslint/no-explicit-any
     newValue: any,
     configurationTarget: vscode.ConfigurationTarget | boolean | undefined,
-    logger: ILogger | undefined): Promise<void> {
-
-    logger?.writeDebug(`Changing '${settingName}' at scope '${configurationTarget}' to '${newValue}'.`);
+    logger: ILogger | undefined,
+): Promise<void> {
+    logger?.writeDebug(
+        `Changing '${settingName}' at scope '${configurationTarget}' to '${newValue}'.`,
+    );
 
     try {
-        const configuration = vscode.workspace.getConfiguration(utils.PowerShellLanguageId);
+        const configuration = vscode.workspace.getConfiguration(
+            utils.PowerShellLanguageId,
+        );
         await configuration.update(settingName, newValue, configurationTarget);
     } catch (err) {
         logger?.writeError(`Failed to change setting: ${err}`);
@@ -212,14 +222,18 @@ export async function changeSetting(
 // We don't want to query the user more than once, so this is idempotent.
 let hasChosen = false;
 let chosenWorkspace: vscode.WorkspaceFolder | undefined = undefined;
-export async function getChosenWorkspace(logger: ILogger | undefined): Promise<vscode.WorkspaceFolder | undefined> {
+export async function getChosenWorkspace(
+    logger: ILogger | undefined,
+): Promise<vscode.WorkspaceFolder | undefined> {
     if (hasChosen) {
         return chosenWorkspace;
     }
 
     // If there is no workspace, or there is but it has no folders, fallback.
-    if (vscode.workspace.workspaceFolders === undefined
-        || vscode.workspace.workspaceFolders.length === 0) {
+    if (
+        vscode.workspace.workspaceFolders === undefined ||
+        vscode.workspace.workspaceFolders.length === 0
+    ) {
         chosenWorkspace = undefined;
         // If there is exactly one workspace folder, use that.
     } else if (vscode.workspace.workspaceFolders.length === 1) {
@@ -227,21 +241,31 @@ export async function getChosenWorkspace(logger: ILogger | undefined): Promise<v
         // If there is more than one workspace folder, prompt the user once.
     } else if (vscode.workspace.workspaceFolders.length > 1) {
         const options: vscode.WorkspaceFolderPickOptions = {
-            placeHolder: "Select a workspace folder to use for the PowerShell Extension.",
+            placeHolder:
+                "Select a workspace folder to use for the PowerShell Extension.",
         };
 
         chosenWorkspace = await vscode.window.showWorkspaceFolderPick(options);
 
-        logger?.writeDebug(`User selected workspace: '${chosenWorkspace?.name}'`);
+        logger?.writeDebug(
+            `User selected workspace: '${chosenWorkspace?.name}'`,
+        );
         if (chosenWorkspace === undefined) {
             chosenWorkspace = vscode.workspace.workspaceFolders[0];
         } else {
             const response = await vscode.window.showInformationMessage(
                 `Would you like to save this choice by setting this workspace's 'powershell.cwd' value to '${chosenWorkspace.name}'?`,
-                "Yes", "No");
+                "Yes",
+                "No",
+            );
 
             if (response === "Yes") {
-                await changeSetting("cwd", chosenWorkspace.name, vscode.ConfigurationTarget.Workspace, logger);
+                await changeSetting(
+                    "cwd",
+                    chosenWorkspace.name,
+                    vscode.ConfigurationTarget.Workspace,
+                    logger,
+                );
             }
         }
     }
@@ -253,10 +277,15 @@ export async function getChosenWorkspace(logger: ILogger | undefined): Promise<v
     return chosenWorkspace;
 }
 
-export async function validateCwdSetting(logger: ILogger | undefined): Promise<string> {
-    let cwd = utils.stripQuotePair(
-        vscode.workspace.getConfiguration(utils.PowerShellLanguageId).get<string>("cwd"))
-        ?? "";
+export async function validateCwdSetting(
+    logger: ILogger | undefined,
+): Promise<string> {
+    let cwd =
+        utils.stripQuotePair(
+            vscode.workspace
+                .getConfiguration(utils.PowerShellLanguageId)
+                .get<string>("cwd"),
+        ) ?? "";
 
     // Replace ~ with home directory.
     cwd = untildify(cwd);
@@ -264,7 +293,7 @@ export async function validateCwdSetting(logger: ILogger | undefined): Promise<s
     // Use the cwd setting if it's absolute and exists. We don't use or resolve
     // relative paths here because it'll be relative to the Code process's cwd,
     // which is not what the user is expecting.
-    if (path.isAbsolute(cwd) && await utils.checkIfDirectoryExists(cwd)) {
+    if (path.isAbsolute(cwd) && (await utils.checkIfDirectoryExists(cwd))) {
         return cwd;
     }
 
@@ -307,7 +336,6 @@ export async function validateCwdSetting(logger: ILogger | undefined): Promise<s
     return os.homedir();
 }
 
-
 /**
  * Options for the `onSettingChange` function.
  * @param scope the scope in which the vscode setting should be evaluated.
@@ -338,8 +366,10 @@ export function onSettingChange<T>(
     options?: onSettingChangeOptions,
 ): vscode.Disposable {
     const settingPath = `${section}.${setting}`;
-    const disposable = vscode.workspace.onDidChangeConfiguration(e => {
-        if (!e.affectsConfiguration(settingPath, options?.scope)) { return; }
+    const disposable = vscode.workspace.onDidChangeConfiguration((e) => {
+        if (!e.affectsConfiguration(settingPath, options?.scope)) {
+            return;
+        }
 
         doOnSettingsChange(section, setting, action, options?.scope);
         if (options?.run === "once") {
@@ -362,7 +392,9 @@ function doOnSettingsChange<T>(
     action: (newValue: T | undefined) => void,
     scope?: vscode.ConfigurationScope,
 ): void {
-    const value = vscode.workspace.getConfiguration(section, scope).get<T>(setting);
+    const value = vscode.workspace
+        .getConfiguration(section, scope)
+        .get<T>(setting);
     action(value);
 }
 
@@ -381,8 +413,7 @@ function doOnSettingsChange<T>(
 export function onPowerShellSettingChange<T>(
     setting: string,
     action: (newValue: T | undefined) => void,
-    options?: onSettingChangeOptions
-
+    options?: onSettingChangeOptions,
 ): vscode.Disposable {
     const section = "powershell";
     return onSettingChange(section, setting, action, options);
diff --git a/src/utils.ts b/src/utils.ts
index 7ea266e9c7..b1d4aadfb5 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -10,11 +10,20 @@ export const PowerShellLanguageId = "powershell";
 
 // Path to the shell integration script in the VS Code installation
 // See https://github.com/microsoft/vscode/pull/227244
-const shellIntegrationMoved = satisfies(vscode.version, ">=1.94", { includePrerelease: true });
-export const ShellIntegrationScript = path.join(vscode.env.appRoot, "out", "vs", "workbench", "contrib", "terminal",
+const shellIntegrationMoved = satisfies(vscode.version, ">=1.94", {
+    includePrerelease: true,
+});
+export const ShellIntegrationScript = path.join(
+    vscode.env.appRoot,
+    "out",
+    "vs",
+    "workbench",
+    "contrib",
+    "terminal",
     shellIntegrationMoved ? "common" : "browser",
     shellIntegrationMoved ? "scripts" : "media",
-    "shellIntegration.ps1");
+    "shellIntegration.ps1",
+);
 
 export function escapeSingleQuotes(p: string): string {
     return p.replace(new RegExp("'", "g"), "''");
@@ -26,8 +35,10 @@ export function stripQuotePair(p: string | undefined): string | undefined {
     }
 
     // Remove matching surrounding quotes from p (without regex)
-    if (p.startsWith("'") && p.endsWith("'")
-        || p.startsWith("\"") && p.endsWith("\"")) {
+    if (
+        (p.startsWith("'") && p.endsWith("'")) ||
+        (p.startsWith('"') && p.endsWith('"'))
+    ) {
         return p.slice(1, -1);
     }
 
@@ -46,7 +57,10 @@ export function getPipePath(pipeName: string): string {
 
 // Check that the file or directory exists in an asynchronous manner that relies
 // solely on the VS Code API, not Node's fs library, ignoring symlinks.
-async function checkIfFileOrDirectoryExists(targetPath: string | vscode.Uri, type: vscode.FileType): Promise<boolean> {
+async function checkIfFileOrDirectoryExists(
+    targetPath: string | vscode.Uri,
+    type: vscode.FileType,
+): Promise<boolean> {
     if (targetPath === "") {
         return false;
     }
@@ -54,26 +68,37 @@ async function checkIfFileOrDirectoryExists(targetPath: string | vscode.Uri, typ
         const stat: vscode.FileStat = await vscode.workspace.fs.stat(
             targetPath instanceof vscode.Uri
                 ? targetPath
-                : vscode.Uri.file(targetPath));
+                : vscode.Uri.file(targetPath),
+        );
         return (stat.type & type) !== 0;
     } catch {
         return false;
     }
 }
 
-export async function checkIfFileExists(filePath: string | vscode.Uri): Promise<boolean> {
+export async function checkIfFileExists(
+    filePath: string | vscode.Uri,
+): Promise<boolean> {
     return await checkIfFileOrDirectoryExists(filePath, vscode.FileType.File);
 }
 
-export async function checkIfDirectoryExists(directoryPath: string | vscode.Uri): Promise<boolean> {
-    return await checkIfFileOrDirectoryExists(directoryPath, vscode.FileType.Directory);
+export async function checkIfDirectoryExists(
+    directoryPath: string | vscode.Uri,
+): Promise<boolean> {
+    return await checkIfFileOrDirectoryExists(
+        directoryPath,
+        vscode.FileType.Directory,
+    );
 }
 
-export async function readDirectory(directoryPath: string | vscode.Uri): Promise<string[]> {
+export async function readDirectory(
+    directoryPath: string | vscode.Uri,
+): Promise<string[]> {
     const items = await vscode.workspace.fs.readDirectory(
         directoryPath instanceof vscode.Uri
             ? directoryPath
-            : vscode.Uri.file(directoryPath));
+            : vscode.Uri.file(directoryPath),
+    );
     return items.map(([name, _type]) => name);
 }
 
@@ -83,7 +108,7 @@ export function getTimestampString(): string {
 }
 
 export function sleep(ms: number): Promise<void> {
-    return new Promise(resolve => setTimeout(resolve, ms));
+    return new Promise((resolve) => setTimeout(resolve, ms));
 }
 
 export const isMacOS: boolean = process.platform === "darwin";
diff --git a/test/TestEnvironment.code-workspace b/test/TestEnvironment.code-workspace
index c204beb6d1..4915d16693 100644
--- a/test/TestEnvironment.code-workspace
+++ b/test/TestEnvironment.code-workspace
@@ -2,12 +2,12 @@
   // A simple test environment that suppresses some first start warnings we don't care about.
   "folders": [
     {
-      "path": "mocks"
-    }
+      "path": "mocks",
+    },
   ],
   "settings": {
     "git.openRepositoryInParentFolders": "never",
     "csharp.suppressDotnetRestoreNotification": true,
     "extensions.ignoreRecommendations": true,
-  }
+  },
 }
diff --git a/test/core/paths.test.ts b/test/core/paths.test.ts
index e3d6de49a7..e68fc1a88b 100644
--- a/test/core/paths.test.ts
+++ b/test/core/paths.test.ts
@@ -4,20 +4,29 @@
 import assert from "assert";
 import * as vscode from "vscode";
 import type { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
+import {
+    checkIfDirectoryExists,
+    checkIfFileExists,
+    ShellIntegrationScript,
+} from "../../src/utils";
 import utils = require("../utils");
-import { checkIfDirectoryExists, checkIfFileExists, ShellIntegrationScript } from "../../src/utils";
 
 describe("Path assumptions", function () {
     let globalStorageUri: vscode.Uri;
     let logUri: vscode.Uri;
     before(async () => {
-        const extension: IPowerShellExtensionClient = await utils.ensureEditorServicesIsConnected();
+        const extension: IPowerShellExtensionClient =
+            await utils.ensureEditorServicesIsConnected();
         globalStorageUri = extension.getStorageUri();
         logUri = extension.getLogUri();
     });
 
     it("Creates the session folder at the correct path", async function () {
-        assert(await checkIfDirectoryExists(vscode.Uri.joinPath(globalStorageUri, "sessions")));
+        assert(
+            await checkIfDirectoryExists(
+                vscode.Uri.joinPath(globalStorageUri, "sessions"),
+            ),
+        );
     });
 
     it("Creates the log folder at the correct path", async function () {
diff --git a/test/core/platform.test.ts b/test/core/platform.test.ts
index 30147054bc..e6de6a5f3a 100644
--- a/test/core/platform.test.ts
+++ b/test/core/platform.test.ts
@@ -2,12 +2,12 @@
 // Licensed under the MIT License.
 
 import * as assert from "assert";
-import mockFS = require("mock-fs");
-import FileSystem = require("mock-fs/lib/filesystem");
 import * as os from "os";
 import * as path from "path";
 import * as sinon from "sinon";
 import * as platform from "../../src/platform";
+import mockFS = require("mock-fs");
+import FileSystem = require("mock-fs/lib/filesystem");
 
 /**
  * Describes a platform on which the PowerShell extension should work,
@@ -37,9 +37,21 @@ let additionalPowerShellExes: Record<string, string>;
 let successAdditionalTestCases: ITestPlatformSuccessCase[];
 
 if (process.platform === "win32") {
-    const msixAppDir = path.join(process.env.LOCALAPPDATA!, "Microsoft", "WindowsApps");
-    const pwshMsixPath = path.join(msixAppDir, "Microsoft.PowerShell_8wekyb3d8bbwe", "pwsh.exe");
-    const pwshPreviewMsixPath = path.join(msixAppDir, "Microsoft.PowerShellPreview_8wekyb3d8bbwe", "pwsh.exe");
+    const msixAppDir = path.join(
+        process.env.LOCALAPPDATA!,
+        "Microsoft",
+        "WindowsApps",
+    );
+    const pwshMsixPath = path.join(
+        msixAppDir,
+        "Microsoft.PowerShell_8wekyb3d8bbwe",
+        "pwsh.exe",
+    );
+    const pwshPreviewMsixPath = path.join(
+        msixAppDir,
+        "Microsoft.PowerShellPreview_8wekyb3d8bbwe",
+        "pwsh.exe",
+    );
 
     successTestCases = [
         {
@@ -50,51 +62,55 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "ProgramFiles": "C:\\Program Files",
+                ProgramFiles: "C:\\Program Files",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "C:\\Program Files\\PowerShell\\6\\pwsh.exe",
                     displayName: "PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Program Files (x86)\\PowerShell\\6\\pwsh.exe",
                     displayName: "PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: pwshMsixPath,
                     displayName: "PowerShell (Store)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\Program Files\\PowerShell\\7-preview\\pwsh.exe",
+                    exePath:
+                        "C:\\Program Files\\PowerShell\\7-preview\\pwsh.exe",
                     displayName: "PowerShell Preview (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: pwshPreviewMsixPath,
                     displayName: "PowerShell Preview (Store)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\Program Files (x86)\\PowerShell\\7-preview\\pwsh.exe",
+                    exePath:
+                        "C:\\Program Files (x86)\\PowerShell\\7-preview\\pwsh.exe",
                     displayName: "PowerShell Preview (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
-                }
+                    supportsProperArguments: true,
+                },
             ],
             filesystem: {
                 "C:\\Program Files\\PowerShell": {
@@ -126,7 +142,7 @@ if (process.platform === "win32") {
                 },
                 "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0": {
                     "powershell.exe": "",
-                }
+                },
             },
         },
         {
@@ -137,20 +153,22 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "ProgramFiles": "C:\\Program Files",
+                ProgramFiles: "C:\\Program Files",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -170,50 +188,54 @@ if (process.platform === "win32") {
                 isProcess64Bit: false,
             },
             environmentVars: {
-                "ProgramFiles": "C:\\Program Files (x86)",
+                ProgramFiles: "C:\\Program Files (x86)",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "C:\\Program Files (x86)\\PowerShell\\6\\pwsh.exe",
                     displayName: "PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Program Files\\PowerShell\\6\\pwsh.exe",
                     displayName: "PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: pwshMsixPath,
                     displayName: "PowerShell (Store)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\Program Files (x86)\\PowerShell\\7-preview\\pwsh.exe",
+                    exePath:
+                        "C:\\Program Files (x86)\\PowerShell\\7-preview\\pwsh.exe",
                     displayName: "PowerShell Preview (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: pwshPreviewMsixPath,
                     displayName: "PowerShell Preview (Store)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\Program Files\\PowerShell\\7-preview\\pwsh.exe",
+                    exePath:
+                        "C:\\Program Files\\PowerShell\\7-preview\\pwsh.exe",
                     displayName: "PowerShell Preview (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\Sysnative\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\Sysnative\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -257,20 +279,22 @@ if (process.platform === "win32") {
                 isProcess64Bit: false,
             },
             environmentVars: {
-                "ProgramFiles": "C:\\Program Files (x86)",
+                ProgramFiles: "C:\\Program Files (x86)",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\Sysnative\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\Sysnative\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -290,35 +314,37 @@ if (process.platform === "win32") {
                 isProcess64Bit: false,
             },
             environmentVars: {
-                "ProgramFiles": "C:\\Program Files (x86)",
+                ProgramFiles: "C:\\Program Files (x86)",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "C:\\Program Files (x86)\\PowerShell\\6\\pwsh.exe",
                     displayName: "PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: pwshMsixPath,
                     displayName: "PowerShell (Store)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\Program Files (x86)\\PowerShell\\7-preview\\pwsh.exe",
+                    exePath:
+                        "C:\\Program Files (x86)\\PowerShell\\7-preview\\pwsh.exe",
                     displayName: "PowerShell Preview (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: pwshPreviewMsixPath,
                     displayName: "PowerShell Preview (Store)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -351,15 +377,16 @@ if (process.platform === "win32") {
                 isProcess64Bit: false,
             },
             environmentVars: {
-                "ProgramFiles": "C:\\Program Files (x86)",
+                ProgramFiles: "C:\\Program Files (x86)",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -376,27 +403,29 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "USERNAME": "test",
-                "USERPROFILE": "C:\\Users\\test",
-                "ProgramFiles": "C:\\Program Files",
+                USERNAME: "test",
+                USERPROFILE: "C:\\Users\\test",
+                ProgramFiles: "C:\\Program Files",
                 "ProgramFiles(x86)": "C:\\Program Files (x86)",
-                "windir": "C:\\WINDOWS",
+                windir: "C:\\WINDOWS",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "C:\\Users\\test\\.dotnet\\tools\\pwsh.exe",
                     displayName: ".NET Core PowerShell Global Tool",
-                    supportsProperArguments: false
+                    supportsProperArguments: false,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x64)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
-                    exePath: "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
+                    exePath:
+                        "C:\\WINDOWS\\SysWOW64\\WindowsPowerShell\\v1.0\\powershell.exe",
                     displayName: "Windows PowerShell (x86)",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -408,13 +437,13 @@ if (process.platform === "win32") {
     ];
 
     additionalPowerShellExes = {
-        "pwsh": "C:\\Users\\test\\pwsh\\pwsh.exe",
+        pwsh: "C:\\Users\\test\\pwsh\\pwsh.exe",
         "pwsh-tilde": "~\\pwsh\\pwsh.exe",
         "pwsh-no-exe": "C:\\Users\\test\\pwsh\\pwsh",
         "pwsh-folder": "C:\\Users\\test\\pwsh\\",
         "pwsh-folder-no-slash": "C:\\Users\\test\\pwsh",
         "pwsh-single-quotes": "'C:\\Users\\test\\pwsh\\pwsh.exe'",
-        "pwsh-double-quotes": "\"C:\\Users\\test\\pwsh\\pwsh.exe\"",
+        "pwsh-double-quotes": '"C:\\Users\\test\\pwsh\\pwsh.exe"',
     };
 
     successAdditionalTestCases = [
@@ -426,44 +455,44 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "USERNAME": "test",
-                "USERPROFILE": "C:\\Users\\test",
+                USERNAME: "test",
+                USERPROFILE: "C:\\Users\\test",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "C:\\Users\\test\\pwsh\\pwsh.exe",
                     displayName: "pwsh",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: path.join(os.homedir(), "pwsh", "pwsh.exe"),
                     displayName: "pwsh-tilde",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Users\\test\\pwsh\\pwsh.exe",
                     displayName: "pwsh-no-exe",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Users\\test\\pwsh\\pwsh.exe",
                     displayName: "pwsh-folder",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Users\\test\\pwsh\\pwsh.exe",
                     displayName: "pwsh-folder-no-slash",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Users\\test\\pwsh\\pwsh.exe",
                     displayName: "pwsh-single-quotes",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "C:\\Users\\test\\pwsh\\pwsh.exe",
                     displayName: "pwsh-double-quotes",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
@@ -472,9 +501,9 @@ if (process.platform === "win32") {
                 },
                 [path.join(os.homedir(), "pwsh")]: {
                     "pwsh.exe": "",
-                }
+                },
             },
-        }
+        },
     ];
 } else {
     successTestCases = [
@@ -680,12 +709,12 @@ if (process.platform === "win32") {
     ];
 
     additionalPowerShellExes = {
-        "pwsh": "/home/test/bin/pwsh",
+        pwsh: "/home/test/bin/pwsh",
         "pwsh-tilde": "~/bin/pwsh",
         "pwsh-folder": "/home/test/bin/",
         "pwsh-folder-no-slash": "/home/test/bin",
         "pwsh-single-quotes": "'/home/test/bin/pwsh'",
-        "pwsh-double-quotes": "\"/home/test/bin/pwsh\"",
+        "pwsh-double-quotes": '"/home/test/bin/pwsh"',
     };
 
     successAdditionalTestCases = [
@@ -697,51 +726,51 @@ if (process.platform === "win32") {
                 isProcess64Bit: true,
             },
             environmentVars: {
-                "USER": "test",
-                "HOME": "/home/test",
+                USER: "test",
+                HOME: "/home/test",
             },
             expectedPowerShellSequence: [
                 {
                     exePath: "/home/test/bin/pwsh",
                     displayName: "pwsh",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     // untildify ignores the HOME mock so this is platform-dependent
                     exePath: path.join(os.homedir(), "bin", "pwsh"),
                     displayName: "pwsh-tilde",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/home/test/bin/pwsh",
                     displayName: "pwsh-folder",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/home/test/bin/pwsh",
                     displayName: "pwsh-folder-no-slash",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/home/test/bin/pwsh",
                     displayName: "pwsh-single-quotes",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
                 {
                     exePath: "/home/test/bin/pwsh",
                     displayName: "pwsh-double-quotes",
-                    supportsProperArguments: true
+                    supportsProperArguments: true,
                 },
             ],
             filesystem: {
                 "/home/test/bin": {
-                    "pwsh": "",
+                    pwsh: "",
                 },
                 [path.join(os.homedir(), "bin")]: {
-                    "pwsh": "",
-                }
+                    pwsh: "",
+                },
             },
-        }
+        },
     ];
 }
 
@@ -772,65 +801,80 @@ function setupTestEnvironment(testPlatform: ITestPlatform): void {
     mockFS(testPlatform.filesystem);
 
     for (const envVar of Object.keys(testPlatform.environmentVars)) {
-        sinon.stub(process.env, envVar).value(testPlatform.environmentVars[envVar]);
+        sinon
+            .stub(process.env, envVar)
+            .value(testPlatform.environmentVars[envVar]);
     }
 }
 
 describe("Platform module", function () {
     afterEach(function () {
-      mockFS.restore();
+        mockFS.restore();
     });
 
     it("Gets the correct platform details", function () {
-        const platformDetails: platform.IPlatformDetails = platform.getPlatformDetails();
+        const platformDetails: platform.IPlatformDetails =
+            platform.getPlatformDetails();
         switch (process.platform) {
-        case "darwin":
-            assert.strictEqual(
-                platformDetails.operatingSystem,
-                platform.OperatingSystem.MacOS,
-                "Platform details operating system should be MacOS");
-            assert.strictEqual(
-                platformDetails.isProcess64Bit,
-                true,
-                "VSCode on darwin should be 64-bit");
-            assert.strictEqual(
-                platformDetails.isOS64Bit,
-                true,
-                "Darwin is 64-bit only");
-            break;
-
-        case "linux":
-            assert.strictEqual(
-                platformDetails.operatingSystem,
-                platform.OperatingSystem.Linux,
-                "Platform details operating system should be Linux");
-            assert.strictEqual(
-                platformDetails.isProcess64Bit,
-                true,
-                "Only 64-bit VSCode supported on Linux");
-            assert.strictEqual(
-                platformDetails.isOS64Bit,
-                true,
-                "Only 64-bit Linux supported by PowerShell");
-            return;
-
-        case "win32":
-            assert.strictEqual(
-                platformDetails.operatingSystem,
-                platform.OperatingSystem.Windows,
-                "Platform details operating system should be Windows");
-            assert.strictEqual(
-                platformDetails.isProcess64Bit,
-                process.arch === "x64" || process.arch === "arm64",
-                "Windows process bitness should match process arch");
-            assert.strictEqual(
-                platformDetails.isOS64Bit,
-                !!(platformDetails.isProcess64Bit || process.env.ProgramW6432),
-                "Windows OS arch should match process bitness unless 64-bit env var set");
-            return;
-
-        default:
-            assert.fail("This platform is unsupported");
+            case "darwin":
+                assert.strictEqual(
+                    platformDetails.operatingSystem,
+                    platform.OperatingSystem.MacOS,
+                    "Platform details operating system should be MacOS",
+                );
+                assert.strictEqual(
+                    platformDetails.isProcess64Bit,
+                    true,
+                    "VSCode on darwin should be 64-bit",
+                );
+                assert.strictEqual(
+                    platformDetails.isOS64Bit,
+                    true,
+                    "Darwin is 64-bit only",
+                );
+                break;
+
+            case "linux":
+                assert.strictEqual(
+                    platformDetails.operatingSystem,
+                    platform.OperatingSystem.Linux,
+                    "Platform details operating system should be Linux",
+                );
+                assert.strictEqual(
+                    platformDetails.isProcess64Bit,
+                    true,
+                    "Only 64-bit VSCode supported on Linux",
+                );
+                assert.strictEqual(
+                    platformDetails.isOS64Bit,
+                    true,
+                    "Only 64-bit Linux supported by PowerShell",
+                );
+                return;
+
+            case "win32":
+                assert.strictEqual(
+                    platformDetails.operatingSystem,
+                    platform.OperatingSystem.Windows,
+                    "Platform details operating system should be Windows",
+                );
+                assert.strictEqual(
+                    platformDetails.isProcess64Bit,
+                    process.arch === "x64" || process.arch === "arm64",
+                    "Windows process bitness should match process arch",
+                );
+                assert.strictEqual(
+                    platformDetails.isOS64Bit,
+                    !!(
+                        platformDetails.isProcess64Bit ||
+                        process.env.ProgramW6432
+                    ),
+                    "Windows OS arch should match process bitness unless 64-bit env var set",
+                );
+                return;
+
+            default:
+                assert.fail("This platform is unsupported");
         }
     });
 
@@ -839,14 +883,28 @@ describe("Platform module", function () {
             it(`Finds it on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
+                const powerShellExeFinder = new platform.PowerShellExeFinder(
+                    testPlatform.platformDetails,
+                    {},
+                );
 
-                const defaultPowerShell = await powerShellExeFinder.getFirstAvailablePowerShellInstallation();
-                const expectedPowerShell = testPlatform.expectedPowerShellSequence[0];
+                const defaultPowerShell =
+                    await powerShellExeFinder.getFirstAvailablePowerShellInstallation();
+                const expectedPowerShell =
+                    testPlatform.expectedPowerShellSequence[0];
 
-                assert.strictEqual(defaultPowerShell!.exePath, expectedPowerShell.exePath);
-                assert.strictEqual(defaultPowerShell!.displayName, expectedPowerShell.displayName);
-                assert.strictEqual(defaultPowerShell!.supportsProperArguments, expectedPowerShell.supportsProperArguments);
+                assert.strictEqual(
+                    defaultPowerShell!.exePath,
+                    expectedPowerShell.exePath,
+                );
+                assert.strictEqual(
+                    defaultPowerShell!.displayName,
+                    expectedPowerShell.displayName,
+                );
+                assert.strictEqual(
+                    defaultPowerShell!.supportsProperArguments,
+                    expectedPowerShell.supportsProperArguments,
+                );
             });
         }
 
@@ -854,9 +912,13 @@ describe("Platform module", function () {
             it(`Fails gracefully on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
+                const powerShellExeFinder = new platform.PowerShellExeFinder(
+                    testPlatform.platformDetails,
+                    {},
+                );
 
-                const defaultPowerShell = await powerShellExeFinder.getFirstAvailablePowerShellInstallation();
+                const defaultPowerShell =
+                    await powerShellExeFinder.getFirstAvailablePowerShellInstallation();
                 assert.strictEqual(defaultPowerShell, undefined);
             });
         }
@@ -867,23 +929,42 @@ describe("Platform module", function () {
             it(`Finds them on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
+                const powerShellExeFinder = new platform.PowerShellExeFinder(
+                    testPlatform.platformDetails,
+                    {},
+                );
 
-                const foundPowerShells = await powerShellExeFinder.getAllAvailablePowerShellInstallations();
+                const foundPowerShells =
+                    await powerShellExeFinder.getAllAvailablePowerShellInstallations();
 
-                for (let i = 0; i < testPlatform.expectedPowerShellSequence.length; i++) {
+                for (
+                    let i = 0;
+                    i < testPlatform.expectedPowerShellSequence.length;
+                    i++
+                ) {
                     const foundPowerShell = foundPowerShells[i];
-                    const expectedPowerShell = testPlatform.expectedPowerShellSequence[i];
+                    const expectedPowerShell =
+                        testPlatform.expectedPowerShellSequence[i];
 
-                    assert.strictEqual(foundPowerShell.exePath, expectedPowerShell.exePath);
-                    assert.strictEqual(foundPowerShell.displayName, expectedPowerShell.displayName);
-                    assert.strictEqual(foundPowerShell.supportsProperArguments, expectedPowerShell.supportsProperArguments);
+                    assert.strictEqual(
+                        foundPowerShell.exePath,
+                        expectedPowerShell.exePath,
+                    );
+                    assert.strictEqual(
+                        foundPowerShell.displayName,
+                        expectedPowerShell.displayName,
+                    );
+                    assert.strictEqual(
+                        foundPowerShell.supportsProperArguments,
+                        expectedPowerShell.supportsProperArguments,
+                    );
                 }
 
                 assert.strictEqual(
                     foundPowerShells.length,
                     testPlatform.expectedPowerShellSequence.length,
-                    "Number of expected PowerShells found does not match");
+                    "Number of expected PowerShells found does not match",
+                );
             });
         }
 
@@ -891,18 +972,24 @@ describe("Platform module", function () {
             it(`Fails gracefully on ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
+                const powerShellExeFinder = new platform.PowerShellExeFinder(
+                    testPlatform.platformDetails,
+                    {},
+                );
 
-                const foundPowerShells = await powerShellExeFinder.getAllAvailablePowerShellInstallations();
+                const foundPowerShells =
+                    await powerShellExeFinder.getAllAvailablePowerShellInstallations();
                 assert.strictEqual(foundPowerShells.length, 0);
             });
         }
     });
 
     describe("Windows PowerShell path fix", function () {
-        for (const testPlatform of successTestCases
-            .filter((tp) => tp.platformDetails.operatingSystem === platform.OperatingSystem.Windows)) {
-
+        for (const testPlatform of successTestCases.filter(
+            (tp) =>
+                tp.platformDetails.operatingSystem ===
+                platform.OperatingSystem.Windows,
+        )) {
             it(`Corrects the Windows PowerShell path on ${testPlatform.name}`, function () {
                 setupTestEnvironment(testPlatform);
 
@@ -912,7 +999,8 @@ describe("Platform module", function () {
                         systemDir,
                         "WindowsPowerShell",
                         "v1.0",
-                        "powershell.exe");
+                        "powershell.exe",
+                    );
                 }
 
                 const winPSPath = getWinPSPath("System32");
@@ -926,12 +1014,23 @@ describe("Platform module", function () {
                     altWinPSPath = null;
                 }
 
-                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, {});
+                const powerShellExeFinder = new platform.PowerShellExeFinder(
+                    testPlatform.platformDetails,
+                    {},
+                );
 
-                assert.strictEqual(powerShellExeFinder.fixWindowsPowerShellPath(winPSPath), winPSPath);
+                assert.strictEqual(
+                    powerShellExeFinder.fixWindowsPowerShellPath(winPSPath),
+                    winPSPath,
+                );
 
                 if (altWinPSPath) {
-                    assert.strictEqual(powerShellExeFinder.fixWindowsPowerShellPath(altWinPSPath), winPSPath);
+                    assert.strictEqual(
+                        powerShellExeFinder.fixWindowsPowerShellPath(
+                            altWinPSPath,
+                        ),
+                        winPSPath,
+                    );
                 }
             });
         }
@@ -942,15 +1041,25 @@ describe("Platform module", function () {
             it(`Guesses for ${testPlatform.name}`, async function () {
                 setupTestEnvironment(testPlatform);
 
-                const powerShellExeFinder = new platform.PowerShellExeFinder(testPlatform.platformDetails, additionalPowerShellExes);
+                const powerShellExeFinder = new platform.PowerShellExeFinder(
+                    testPlatform.platformDetails,
+                    additionalPowerShellExes,
+                );
 
                 let i = 0;
                 for await (const additionalPwsh of powerShellExeFinder.enumerateAdditionalPowerShellInstallations()) {
-                    const expectedPowerShell = testPlatform.expectedPowerShellSequence[i];
+                    const expectedPowerShell =
+                        testPlatform.expectedPowerShellSequence[i];
                     i++;
 
-                    assert.strictEqual(additionalPwsh.exePath, expectedPowerShell.exePath);
-                    assert.strictEqual(additionalPwsh.displayName, expectedPowerShell.displayName);
+                    assert.strictEqual(
+                        additionalPwsh.exePath,
+                        expectedPowerShell.exePath,
+                    );
+                    assert.strictEqual(
+                        additionalPwsh.displayName,
+                        expectedPowerShell.displayName,
+                    );
                 }
             });
         }
diff --git a/test/core/settings.test.ts b/test/core/settings.test.ts
index 306872a2dc..91a98a6dc7 100644
--- a/test/core/settings.test.ts
+++ b/test/core/settings.test.ts
@@ -3,21 +3,26 @@
 
 import * as assert from "assert";
 import * as os from "os";
+import path from "path";
 import * as vscode from "vscode";
 import {
-    Settings,
-    getSettings,
-    getEffectiveConfigurationTarget,
     changeSetting,
     CommentType,
-    validateCwdSetting
+    getEffectiveConfigurationTarget,
+    getSettings,
+    Settings,
+    validateCwdSetting,
 } from "../../src/settings";
-import path from "path";
 import { ensureEditorServicesIsConnected } from "../utils";
 
 describe("Settings E2E", function () {
     async function changeCwdSetting(cwd: string | undefined): Promise<void> {
-        await changeSetting("cwd", cwd, vscode.ConfigurationTarget.Workspace, undefined);
+        await changeSetting(
+            "cwd",
+            cwd,
+            vscode.ConfigurationTarget.Workspace,
+            undefined,
+        );
     }
 
     async function resetCwdSetting(): Promise<void> {
@@ -40,20 +45,38 @@ describe("Settings E2E", function () {
 
     describe("The 'changeSetting' method", function () {
         it("Updates correctly", async function () {
-            await changeSetting("helpCompletion", CommentType.LineComment, vscode.ConfigurationTarget.Workspace, undefined);
-            assert.strictEqual(getSettings().helpCompletion, CommentType.LineComment);
+            await changeSetting(
+                "helpCompletion",
+                CommentType.LineComment,
+                vscode.ConfigurationTarget.Workspace,
+                undefined,
+            );
+            assert.strictEqual(
+                getSettings().helpCompletion,
+                CommentType.LineComment,
+            );
         });
     });
 
     describe("The 'getEffectiveConfigurationTarget' method'", function () {
         it("Works for 'Workspace' target", async function () {
-            await changeSetting("helpCompletion", CommentType.LineComment, vscode.ConfigurationTarget.Workspace, undefined);
+            await changeSetting(
+                "helpCompletion",
+                CommentType.LineComment,
+                vscode.ConfigurationTarget.Workspace,
+                undefined,
+            );
             const target = getEffectiveConfigurationTarget("helpCompletion");
             assert.strictEqual(target, vscode.ConfigurationTarget.Workspace);
         });
 
         it("Works for 'undefined' target", async function () {
-            await changeSetting("helpCompletion", undefined, vscode.ConfigurationTarget.Workspace, undefined);
+            await changeSetting(
+                "helpCompletion",
+                undefined,
+                vscode.ConfigurationTarget.Workspace,
+                undefined,
+            );
             const target = getEffectiveConfigurationTarget("helpCompletion");
             assert.strictEqual(target, undefined);
         });
@@ -85,7 +108,10 @@ describe("Settings E2E", function () {
 
         it("Uses the home folder for ~ (tilde)", async function () {
             await changeCwdSetting("~");
-            assert.strictEqual(await validateCwdSetting(undefined), os.homedir());
+            assert.strictEqual(
+                await validateCwdSetting(undefined),
+                os.homedir(),
+            );
         });
 
         it("Accepts relative paths", async function () {
diff --git a/test/features/DebugSession.test.ts b/test/features/DebugSession.test.ts
index dfc9a5806e..815e5155f5 100644
--- a/test/features/DebugSession.test.ts
+++ b/test/features/DebugSession.test.ts
@@ -5,45 +5,53 @@ import structuredClone from "@ungap/structured-clone"; //Polyfill for structured
 import * as assert from "assert";
 import Sinon from "sinon";
 import {
-  DebugAdapterNamedPipeServer,
-  type DebugConfiguration,
-  type DebugSession,
-  type Extension,
-  type ExtensionContext,
-  Range,
-  SourceBreakpoint,
-  type TextDocument,
-  type TextEditor,
-  Uri,
-  commands,
-  debug,
-  extensions,
-  window,
-  workspace,
+    DebugAdapterNamedPipeServer,
+    type DebugConfiguration,
+    type DebugSession,
+    type Extension,
+    type ExtensionContext,
+    Range,
+    SourceBreakpoint,
+    type TextDocument,
+    type TextEditor,
+    Uri,
+    commands,
+    debug,
+    extensions,
+    window,
+    workspace,
 } from "vscode";
 import { Disposable } from "vscode-languageserver-protocol";
 import {
-  DebugConfig,
-  DebugSessionFeature,
-  DebugConfigurations,
+    DebugConfig,
+    DebugConfigurations,
+    DebugSessionFeature,
 } from "../../src/features/DebugSession";
 import type { IPowerShellExtensionClient } from "../../src/features/ExternalApi";
-import * as platform from "../../src/platform";
 import type { IPlatformDetails } from "../../src/platform";
+import * as platform from "../../src/platform";
 import {
-  type IEditorServicesSessionDetails,
-  type IPowerShellVersionDetails,
-  SessionManager,
+    type IEditorServicesSessionDetails,
+    type IPowerShellVersionDetails,
+    SessionManager,
 } from "../../src/session";
 import * as utils from "../../src/utils";
-import { BuildBinaryModuleMock, WaitEvent, ensureEditorServicesIsConnected, stubInterface, testLogger } from "../utils";
+import {
+    BuildBinaryModuleMock,
+    WaitEvent,
+    ensureEditorServicesIsConnected,
+    stubInterface,
+    testLogger,
+} from "../utils";
 
 const TEST_NUMBER = 7357; // 7357 = TEST. Get it? :)
 
 let defaultDebugConfig: DebugConfiguration;
 beforeEach(() => {
     // This prevents state from creeping into the template between test runs
-    defaultDebugConfig = structuredClone(DebugConfigurations[DebugConfig.LaunchCurrentFile]);
+    defaultDebugConfig = structuredClone(
+        DebugConfigurations[DebugConfig.LaunchCurrentFile],
+    );
 });
 
 describe("DebugSessionFeature", () => {
@@ -56,10 +64,10 @@ describe("DebugSessionFeature", () => {
      */
     function createDebugSessionFeatureStub({
         context = stubInterface<ExtensionContext>({
-            subscriptions: Array<Disposable>() //Needed for constructor
+            subscriptions: Array<Disposable>(), //Needed for constructor
         }),
         sessionManager = Sinon.createStubInstance(SessionManager),
-        logger = testLogger
+        logger = testLogger,
     }): DebugSessionFeature {
         return new DebugSessionFeature(context, sessionManager, logger);
     }
@@ -69,15 +77,33 @@ describe("DebugSessionFeature", () => {
         document: stubInterface<TextDocument>({
             uri: Uri.parse("file:///fakeUntitled.ps1"),
             languageId: "powershell",
-            isUntitled: true
-        })
+            isUntitled: true,
+        }),
     });
 
     beforeEach(() => {
         // Because we recreate DebugSessionFeature constantly, we need to avoid registering the same commands over and over.
-        Sinon.stub(commands, "registerCommand").returns(Disposable.create(() => {"Stubbed";}));
-        registerProviderStub = Sinon.stub(debug, "registerDebugConfigurationProvider").returns(Disposable.create(() => {"Stubbed";}));
-        registerFactoryStub = Sinon.stub(debug, "registerDebugAdapterDescriptorFactory").returns(Disposable.create(() => {"Stubbed";}));
+        Sinon.stub(commands, "registerCommand").returns(
+            Disposable.create(() => {
+                "Stubbed";
+            }),
+        );
+        registerProviderStub = Sinon.stub(
+            debug,
+            "registerDebugConfigurationProvider",
+        ).returns(
+            Disposable.create(() => {
+                "Stubbed";
+            }),
+        );
+        registerFactoryStub = Sinon.stub(
+            debug,
+            "registerDebugAdapterDescriptorFactory",
+        ).returns(
+            Disposable.create(() => {
+                "Stubbed";
+            }),
+        );
     });
 
     afterEach(() => {
@@ -87,13 +113,23 @@ describe("DebugSessionFeature", () => {
     describe("Constructor", () => {
         it("Registers debug configuration provider and factory", () => {
             const context = stubInterface<ExtensionContext>({
-                subscriptions: Array<Disposable>()
+                subscriptions: Array<Disposable>(),
             });
 
-            createDebugSessionFeatureStub({context: context});
-            assert.ok(registerFactoryStub.calledOnce, "Debug adapter factory method called");
-            assert.ok(registerProviderStub.calledTwice, "Debug config provider registered for both Initial and Dynamic");
-            assert.equal(context.subscriptions.length, 4, "DebugSessionFeature disposables populated");
+            createDebugSessionFeatureStub({ context: context });
+            assert.ok(
+                registerFactoryStub.calledOnce,
+                "Debug adapter factory method called",
+            );
+            assert.ok(
+                registerProviderStub.calledTwice,
+                "Debug config provider registered for both Initial and Dynamic",
+            );
+            assert.equal(
+                context.subscriptions.length,
+                4,
+                "DebugSessionFeature disposables populated",
+            );
             // TODO: Validate the registration content, such as the language name
         });
     });
@@ -105,26 +141,38 @@ describe("DebugSessionFeature", () => {
             // Need to have an editor window "open" for this not to error out
             Sinon.stub(window, "activeTextEditor").value(untitledEditor);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfiguration(undefined, noRequestConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfiguration(undefined, noRequestConfig);
 
             assert.equal(actual!.current_document, true);
-            assert.equal(actual!.request, DebugConfigurations[DebugConfig.LaunchCurrentFile].request);
+            assert.equal(
+                actual!.request,
+                DebugConfigurations[DebugConfig.LaunchCurrentFile].request,
+            );
         });
 
         it("Errors if current file config was specified but no file is open in the editor", async () => {
             Sinon.stub(window, "activeTextEditor").value(undefined);
             const logger = Sinon.stub(testLogger);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfiguration(undefined, defaultDebugConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfiguration(undefined, defaultDebugConfig);
 
             assert.equal(actual!, undefined);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /you must first open a PowerShell script file/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /you must first open a PowerShell script file/,
+            );
         });
 
         it("Detects an untitled document", async () => {
             Sinon.stub(window, "activeTextEditor").value(untitledEditor);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfiguration(undefined, defaultDebugConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfiguration(undefined, defaultDebugConfig);
 
             assert.equal(actual!.untitled_document, true);
             assert.equal(actual!.script, "file:///fakeUntitled.ps1");
@@ -135,7 +183,12 @@ describe("DebugSessionFeature", () => {
         it("Sets internalConsoleOptions to neverOpen", async () => {
             Sinon.stub(window, "activeTextEditor").value(untitledEditor);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, defaultDebugConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                defaultDebugConfig,
+            );
 
             assert.equal(actual!.internalConsoleOptions, "neverOpen");
         });
@@ -144,19 +197,40 @@ describe("DebugSessionFeature", () => {
             invalidRequestConfig.request = "notAttachOrLaunch";
             const logger = Sinon.stub(testLogger);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, invalidRequestConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                invalidRequestConfig,
+            );
 
             assert.equal(actual, null);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /request type was invalid/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /request type was invalid/,
+            );
         });
 
         it("Uses createTemporaryIntegratedConsole config setting if not explicitly specified", async () => {
             Sinon.stub(window, "activeTextEditor").value(untitledEditor);
-            assert.equal(defaultDebugConfig.createTemporaryIntegratedConsole, undefined, "Default config should have no temp integrated console setting");
+            assert.equal(
+                defaultDebugConfig.createTemporaryIntegratedConsole,
+                undefined,
+                "Default config should have no temp integrated console setting",
+            );
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, defaultDebugConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                defaultDebugConfig,
+            );
 
-            assert.notEqual(actual!.createTemporaryIntegratedConsole, undefined, "createTemporaryIntegratedConsole should have received a value from the settings and no longer be undefined");
+            assert.notEqual(
+                actual!.createTemporaryIntegratedConsole,
+                undefined,
+                "createTemporaryIntegratedConsole should have received a value from the settings and no longer be undefined",
+            );
         });
 
         it("LaunchCurrentFile: Rejects non-Powershell language active editor", async () => {
@@ -164,18 +238,26 @@ describe("DebugSessionFeature", () => {
                 document: stubInterface<TextDocument>({
                     uri: Uri.parse("file:///fakeUntitled.ps1"),
                     languageId: "NotPowerShell",
-                    isUntitled: true
-                })
+                    isUntitled: true,
+                }),
             });
             const currentDocConfig: DebugConfiguration = defaultDebugConfig;
             currentDocConfig.current_document = true;
             Sinon.stub(window, "activeTextEditor").value(nonPSEditor);
             const logger = Sinon.stub(testLogger);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, currentDocConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                currentDocConfig,
+            );
 
             assert.equal(actual, undefined, "Debug session should end");
-            assert.match(logger.writeAndShowError.firstCall.args[0], /debugging this language mode/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /debugging this language mode/,
+            );
         });
 
         // Skipped until we can fix the stub
@@ -188,10 +270,18 @@ describe("DebugSessionFeature", () => {
             Sinon.stub(utils, "checkIfFileExists").resolves(true);
             const logger = Sinon.stub(testLogger);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, currentDocConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                currentDocConfig,
+            );
 
             assert.equal(actual, undefined);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /debugging this file type/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /debugging this file type/,
+            );
             Sinon.restore();
         });
 
@@ -202,13 +292,21 @@ describe("DebugSessionFeature", () => {
             Sinon.stub(window, "activeTextEditor").value(untitledEditor);
             const logger = Sinon.stub(testLogger);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, currentDocConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                currentDocConfig,
+            );
 
             assert.equal(actual, undefined);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /debugging untitled/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /debugging untitled/,
+            );
         });
 
-        it("Attach: Exits if session version details cannot be retrieved", async () =>  {
+        it("Attach: Exits if session version details cannot be retrieved", async () => {
             const attachConfig: DebugConfiguration = defaultDebugConfig;
             attachConfig.request = "attach";
             const logger = Sinon.stub(testLogger);
@@ -216,37 +314,49 @@ describe("DebugSessionFeature", () => {
             sessionManager.getPowerShellVersionDetails.returns(undefined);
 
             const actual = await createDebugSessionFeatureStub({
-                sessionManager: sessionManager
-            }).resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+                sessionManager: sessionManager,
+            }).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                attachConfig,
+            );
 
             assert.equal(actual, undefined);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /session version details were not found/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /session version details were not found/,
+            );
             assert.ok(sessionManager.getPowerShellVersionDetails.calledOnce);
         });
 
         // Skipped until we can fix the stub
-        it.skip("Attach: Prevents attach on non-windows if not PS7.0 or higher", async() => {
+        it.skip("Attach: Prevents attach on non-windows if not PS7.0 or higher", async () => {
             const attachConfig: DebugConfiguration = defaultDebugConfig;
             attachConfig.request = "attach";
             const logger = Sinon.stub(testLogger);
             const sessionManager = Sinon.createStubInstance(SessionManager, {});
             Sinon.stub(platform, "getPlatformDetails").returns(
                 stubInterface<IPlatformDetails>({
-                    operatingSystem: platform.OperatingSystem.MacOS
-                })
+                    operatingSystem: platform.OperatingSystem.MacOS,
+                }),
             );
             sessionManager.getPowerShellVersionDetails.returns(
                 stubInterface<IPowerShellVersionDetails>({
-                    version: "6.2.3"
-                })
+                    version: "6.2.3",
+                }),
             );
 
             const actual = await createDebugSessionFeatureStub({
-                sessionManager: sessionManager
-            }).resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+                sessionManager: sessionManager,
+            }).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                attachConfig,
+            );
 
             assert.equal(actual, undefined);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /requires PowerShell 7/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /requires PowerShell 7/,
+            );
             assert.ok(sessionManager.getPowerShellVersionDetails.calledOnce);
         });
 
@@ -259,17 +369,24 @@ describe("DebugSessionFeature", () => {
             const sessionManager = Sinon.createStubInstance(SessionManager, {});
             sessionManager.getPowerShellVersionDetails.returns(
                 stubInterface<IPowerShellVersionDetails>({
-                    version: "7.2.3"
-                })
+                    version: "7.2.3",
+                }),
             );
             const debugSessionFeatureStub = createDebugSessionFeatureStub({
-                sessionManager: sessionManager
+                sessionManager: sessionManager,
             });
 
-            // eslint-disable-next-line @typescript-eslint/no-explicit-any
-            const pickPSHostProcessStub = Sinon.stub(debugSessionFeatureStub , "pickPSHostProcess" as any).resolves(7357);
+            const pickPSHostProcessStub = Sinon.stub(
+                debugSessionFeatureStub,
+                // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                "pickPSHostProcess" as any,
+            ).resolves(7357);
 
-            const actual = await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const actual =
+                await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(
+                    undefined,
+                    attachConfig,
+                );
 
             assert.equal(actual!.processId, TEST_NUMBER);
             assert.ok(pickPSHostProcessStub.calledOnce);
@@ -284,17 +401,24 @@ describe("DebugSessionFeature", () => {
             const sessionManager = Sinon.createStubInstance(SessionManager, {});
             sessionManager.getPowerShellVersionDetails.returns(
                 stubInterface<IPowerShellVersionDetails>({
-                    version: "7.2.3"
-                })
+                    version: "7.2.3",
+                }),
             );
             const debugSessionFeatureStub = createDebugSessionFeatureStub({
-                sessionManager: sessionManager
+                sessionManager: sessionManager,
             });
 
-            // eslint-disable-next-line @typescript-eslint/no-explicit-any
-            const pickPSHostProcessStub = Sinon.stub(debugSessionFeatureStub, "pickPSHostProcess" as any).resolves(undefined);
+            const pickPSHostProcessStub = Sinon.stub(
+                debugSessionFeatureStub,
+                // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                "pickPSHostProcess" as any,
+            ).resolves(undefined);
 
-            const actual = await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const actual =
+                await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(
+                    undefined,
+                    attachConfig,
+                );
 
             assert.equal(actual, undefined);
             assert.ok(pickPSHostProcessStub.calledOnce);
@@ -308,17 +432,24 @@ describe("DebugSessionFeature", () => {
             const sessionManager = Sinon.createStubInstance(SessionManager, {});
             sessionManager.getPowerShellVersionDetails.returns(
                 stubInterface<IPowerShellVersionDetails>({
-                    version: "7.2.3"
-                })
+                    version: "7.2.3",
+                }),
             );
             const debugSessionFeatureStub = createDebugSessionFeatureStub({
-                sessionManager: sessionManager
+                sessionManager: sessionManager,
             });
 
-            // eslint-disable-next-line @typescript-eslint/no-explicit-any
-            const pickRunspaceStub = Sinon.stub(debugSessionFeatureStub, "pickRunspace" as any).resolves(TEST_NUMBER);
+            const pickRunspaceStub = Sinon.stub(
+                debugSessionFeatureStub,
+                // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                "pickRunspace" as any,
+            ).resolves(TEST_NUMBER);
 
-            const actual = await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const actual =
+                await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(
+                    undefined,
+                    attachConfig,
+                );
 
             assert.equal(actual!.runspaceId, TEST_NUMBER);
             assert.ok(pickRunspaceStub.calledOnceWith(TEST_NUMBER));
@@ -332,17 +463,24 @@ describe("DebugSessionFeature", () => {
             const sessionManager = Sinon.createStubInstance(SessionManager, {});
             sessionManager.getPowerShellVersionDetails.returns(
                 stubInterface<IPowerShellVersionDetails>({
-                    version: "7.2.3"
-                })
+                    version: "7.2.3",
+                }),
             );
             const debugSessionFeatureStub = createDebugSessionFeatureStub({
-                sessionManager: sessionManager
+                sessionManager: sessionManager,
             });
 
-            // eslint-disable-next-line @typescript-eslint/no-explicit-any
-            const pickRunspaceStub = Sinon.stub(debugSessionFeatureStub, "pickRunspace" as any).resolves(undefined);
-
-            const actual = await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const pickRunspaceStub = Sinon.stub(
+                debugSessionFeatureStub,
+                // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                "pickRunspace" as any,
+            ).resolves(undefined);
+
+            const actual =
+                await debugSessionFeatureStub.resolveDebugConfigurationWithSubstitutedVariables(
+                    undefined,
+                    attachConfig,
+                );
             assert.equal(actual, undefined);
             assert.ok(pickRunspaceStub.calledOnceWith(TEST_NUMBER));
         });
@@ -353,13 +491,21 @@ describe("DebugSessionFeature", () => {
             attachConfig.createTemporaryIntegratedConsole = true;
             attachConfig.attachDotnetDebugger = true;
             Sinon.stub(extensions, "getExtension").returns(
-                stubInterface<Extension<IPowerShellExtensionClient>>()
+                stubInterface<Extension<IPowerShellExtensionClient>>(),
             );
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                attachConfig,
+            );
 
             const dotnetAttachConfig = actual!.dotnetAttachConfig;
-            assert.equal(dotnetAttachConfig.name, "Dotnet Debugger: Temporary Extension Terminal");
+            assert.equal(
+                dotnetAttachConfig.name,
+                "Dotnet Debugger: Temporary Extension Terminal",
+            );
             assert.equal(dotnetAttachConfig.request, "attach");
             assert.equal(dotnetAttachConfig.type, "coreclr");
             assert.equal(dotnetAttachConfig.processId, undefined);
@@ -372,10 +518,18 @@ describe("DebugSessionFeature", () => {
             attachConfig.attachDotnetDebugger = true;
             const logger = Sinon.stub(testLogger);
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                attachConfig,
+            );
 
             assert.equal(actual!, null);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /dotnet debugging without using a temporary console/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /dotnet debugging without using a temporary console/,
+            );
         });
 
         it("Errors if dotnetDebuggerConfigName was provided but the config was not found", async () => {
@@ -386,13 +540,21 @@ describe("DebugSessionFeature", () => {
             attachConfig.dotnetDebuggerConfigName = "not a real config";
             const logger = Sinon.stub(testLogger);
             Sinon.stub(extensions, "getExtension").returns(
-                stubInterface<Extension<IPowerShellExtensionClient>>()
+                stubInterface<Extension<IPowerShellExtensionClient>>(),
             );
 
-            const actual = await createDebugSessionFeatureStub({}).resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const actual = await createDebugSessionFeatureStub(
+                {},
+            ).resolveDebugConfigurationWithSubstitutedVariables(
+                undefined,
+                attachConfig,
+            );
 
             assert.equal(actual!, null);
-            assert.match(logger.writeAndShowError.firstCall.args[0], /matching launch config was not found/);
+            assert.match(
+                logger.writeAndShowError.firstCall.args[0],
+                /matching launch config was not found/,
+            );
         });
 
         it("Finds the correct dotnetDebuggerConfigName", async () => {
@@ -405,29 +567,30 @@ describe("DebugSessionFeature", () => {
                 {
                     name: "BadCandidate1",
                     type: "powershell",
-                    request: "attach"
+                    request: "attach",
                 },
                 {
                     name: "BadCandidate2",
                     type: "coreclr",
-                    request: "attach"
+                    request: "attach",
                 },
-                { // This one has launch instead of attach and even tho it has same name, should not be matched
+                {
+                    // This one has launch instead of attach and even tho it has same name, should not be matched
                     name: foundDotnetConfig.name,
                     type: "coreclr",
-                    request: "launch"
+                    request: "launch",
                 },
                 foundDotnetConfig, //This is the one we want to match
                 {
                     name: foundDotnetConfig.name,
                     type: "notcoreclrExactly",
-                    request: "attach"
+                    request: "attach",
                 },
                 {
                     name: `${foundDotnetConfig.name}notexactlythisname`,
                     type: "coreclr",
-                    request: "attach"
-                }
+                    request: "attach",
+                },
             ];
             const attachConfig = defaultDebugConfig;
             attachConfig.script = "test.ps1"; // This bypasses the ${file} logic
@@ -436,15 +599,25 @@ describe("DebugSessionFeature", () => {
             attachConfig.dotnetDebuggerConfigName = foundDotnetConfig.name;
             const debugSessionFeature = createDebugSessionFeatureStub({});
 
-            // eslint-disable-next-line @typescript-eslint/no-explicit-any
-            Sinon.stub(debugSessionFeature, "getLaunchConfigurations" as any).returns(candidateDotnetConfigs);
+            Sinon.stub(
+                debugSessionFeature,
+                // eslint-disable-next-line @typescript-eslint/no-explicit-any
+                "getLaunchConfigurations" as any,
+            ).returns(candidateDotnetConfigs);
 
-            const config = await debugSessionFeature.resolveDebugConfigurationWithSubstitutedVariables(undefined, attachConfig);
+            const config =
+                await debugSessionFeature.resolveDebugConfigurationWithSubstitutedVariables(
+                    undefined,
+                    attachConfig,
+                );
 
             // This config will only be present if the C# extension is installed.
             if (extensions.getExtension("ms-dotnettools.csharp")) {
                 assert.ok(config);
-                assert.deepStrictEqual(config.dotnetAttachConfig, foundDotnetConfig);
+                assert.deepStrictEqual(
+                    config.dotnetAttachConfig,
+                    foundDotnetConfig,
+                );
             } else {
                 assert.ok(!config);
             }
@@ -455,27 +628,34 @@ describe("DebugSessionFeature", () => {
         it("Creates a named pipe server for the debug adapter", async () => {
             const debugSessionFeature = createDebugSessionFeatureStub({
                 sessionManager: Sinon.createStubInstance(SessionManager, {
-                    getSessionDetails: stubInterface<IEditorServicesSessionDetails>({
-                        debugServicePipeName: "testPipeName"
-                    })
+                    getSessionDetails:
+                        stubInterface<IEditorServicesSessionDetails>({
+                            debugServicePipeName: "testPipeName",
+                        }),
                 }),
             });
             const debugSession = stubInterface<DebugSession>({
                 configuration: stubInterface<DebugConfiguration>({
-                    createTemporaryIntegratedConsole: false
-                })
+                    createTemporaryIntegratedConsole: false,
+                }),
             });
 
-            const debugAdapterDescriptor = await debugSessionFeature.createDebugAdapterDescriptor(debugSession, undefined);
+            const debugAdapterDescriptor =
+                await debugSessionFeature.createDebugAdapterDescriptor(
+                    debugSession,
+                    undefined,
+                );
 
             // Confirm debugAdapterDescriptor is of type debugadapternamedpipeserver
-            assert.ok(debugAdapterDescriptor instanceof DebugAdapterNamedPipeServer);
+            assert.ok(
+                debugAdapterDescriptor instanceof DebugAdapterNamedPipeServer,
+            );
             assert.equal(debugAdapterDescriptor.path, "testPipeName");
         });
     });
 });
 
-describe("DebugSessionFeature E2E", function() {
+describe("DebugSessionFeature E2E", function () {
     // E2E tests can take a while to run since the debugger has to start up and attach
     this.slow(20000);
     before(async () => {
@@ -484,7 +664,6 @@ describe("DebugSessionFeature E2E", function() {
     });
 
     it("Starts and stops a debugging session", async () => {
-
         // Inspect the debug session via the started events to ensure it is correct
         const startDebugSession = new Promise<DebugSession>((resolve) => {
             const event = debug.onDidStartDebugSession((session) => {
@@ -500,13 +679,28 @@ describe("DebugSessionFeature E2E", function() {
         });
 
         const config = DebugConfigurations[DebugConfig.InteractiveSession];
-        assert.ok(await debug.startDebugging(undefined, config), "Debug session should start");
-        assert.equal((await startDebugSession).name, config.name, "Debug session name should match when started");
+        assert.ok(
+            await debug.startDebugging(undefined, config),
+            "Debug session should start",
+        );
+        assert.equal(
+            (await startDebugSession).name,
+            config.name,
+            "Debug session name should match when started",
+        );
 
         await debug.stopDebugging(await startDebugSession);
         assert.ok(await stopDebugSession, "Debug session should stop");
-        assert.equal((await stopDebugSession).name, config.name, "Debug session name should match when stopped");
-        assert.equal((await stopDebugSession).configuration.internalConsoleOptions, "neverOpen", "Debug session should always have neverOpen internalConsoleOptions");
+        assert.equal(
+            (await stopDebugSession).name,
+            config.name,
+            "Debug session name should match when stopped",
+        );
+        assert.equal(
+            (await stopDebugSession).configuration.internalConsoleOptions,
+            "neverOpen",
+            "Debug session should always have neverOpen internalConsoleOptions",
+        );
     });
 
     describe("Binary Modules", () => {
@@ -517,7 +711,10 @@ describe("DebugSessionFeature E2E", function() {
                 // These tests require that extension to be installed in the test environment.
                 this.skip();
             }
-            binaryModulePath = Uri.joinPath(workspace.workspaceFolders![0].uri, "BinaryModule");
+            binaryModulePath = Uri.joinPath(
+                workspace.workspaceFolders![0].uri,
+                "BinaryModule",
+            );
             BuildBinaryModuleMock();
             await ensureEditorServicesIsConnected();
         });
@@ -530,13 +727,21 @@ describe("DebugSessionFeature E2E", function() {
         });
 
         it("Debugs a binary module script", async () => {
-            const launchScriptConfig = structuredClone(DebugConfigurations[DebugConfig.LaunchScript]);
-            launchScriptConfig.script = Uri.joinPath(binaryModulePath, "BinaryModuleTest.ps1").fsPath;
+            const launchScriptConfig = structuredClone(
+                DebugConfigurations[DebugConfig.LaunchScript],
+            );
+            launchScriptConfig.script = Uri.joinPath(
+                binaryModulePath,
+                "BinaryModuleTest.ps1",
+            ).fsPath;
             launchScriptConfig.attachDotnetDebugger = true;
             launchScriptConfig.createTemporaryIntegratedConsole = true;
             const startDebugging = Sinon.spy(debug, "startDebugging");
 
-            const debugStarted = await debug.startDebugging(undefined, launchScriptConfig);
+            const debugStarted = await debug.startDebugging(
+                undefined,
+                launchScriptConfig,
+            );
             assert.ok(debugStarted);
 
             await debug.stopDebugging(undefined);
@@ -544,38 +749,62 @@ describe("DebugSessionFeature E2E", function() {
             assert.ok(startDebugging.calledTwice);
             assert.ok(startDebugging.calledWith(undefined, launchScriptConfig));
             // The C# child process
-            assert.ok(startDebugging.calledWithMatch(
-                undefined,
-                Sinon.match.has("type", "coreclr"), // The new child debugger
-                Sinon.match.has("type", "PowerShell") // The parent session
-            ), "The C# debugger child process is created with the PowerShell debugger as the parent");
+            assert.ok(
+                startDebugging.calledWithMatch(
+                    undefined,
+                    Sinon.match.has("type", "coreclr"), // The new child debugger
+                    Sinon.match.has("type", "PowerShell"), // The parent session
+                ),
+                "The C# debugger child process is created with the PowerShell debugger as the parent",
+            );
         });
 
         it("Stops at a binary module breakpoint", async () => {
-            const launchScriptConfig = structuredClone(DebugConfigurations[DebugConfig.LaunchCurrentFile]);
+            const launchScriptConfig = structuredClone(
+                DebugConfigurations[DebugConfig.LaunchCurrentFile],
+            );
             launchScriptConfig.attachDotnetDebugger = true;
             launchScriptConfig.createTemporaryIntegratedConsole = true;
-            const testScriptPath = Uri.joinPath(binaryModulePath, "BinaryModuleTest.ps1");
-            const cmdletSourcePath = Uri.joinPath(binaryModulePath, "TestSampleCmdletCommand.cs");
-            const testScriptDocument = await workspace.openTextDocument(testScriptPath);
+            const testScriptPath = Uri.joinPath(
+                binaryModulePath,
+                "BinaryModuleTest.ps1",
+            );
+            const cmdletSourcePath = Uri.joinPath(
+                binaryModulePath,
+                "TestSampleCmdletCommand.cs",
+            );
+            const testScriptDocument =
+                await workspace.openTextDocument(testScriptPath);
             await window.showTextDocument(testScriptDocument);
 
             // We cant see when a breakpoint is hit because the code we would spy on is in the C# extension or is vscode private, but we can see if the debug session changes which should only happen when the debug session context switches to C#, so that's good enough.
 
             //We wire this up before starting the debug session so the event is registered
-            const dotnetDebugSessionActive = WaitEvent(debug.onDidChangeActiveDebugSession, (session) => {
-                return !!session?.name.match(/Dotnet Debugger/);
-            });
+            const dotnetDebugSessionActive = WaitEvent(
+                debug.onDidChangeActiveDebugSession,
+                (session) => {
+                    return !!session?.name.match(/Dotnet Debugger/);
+                },
+            );
 
             // Break at beginProcessing of the cmdlet
             debug.addBreakpoints([
-                new SourceBreakpoint({
-                    uri: cmdletSourcePath,
-                    range: new Range(26, 0, 26, 0) //BeginProcessing
-                }, true, undefined, undefined, "TEST-BinaryModuleBreakpoint")
+                new SourceBreakpoint(
+                    {
+                        uri: cmdletSourcePath,
+                        range: new Range(26, 0, 26, 0), //BeginProcessing
+                    },
+                    true,
+                    undefined,
+                    undefined,
+                    "TEST-BinaryModuleBreakpoint",
+                ),
             ]);
 
-            const debugStarted = await debug.startDebugging(undefined, launchScriptConfig);
+            const debugStarted = await debug.startDebugging(
+                undefined,
+                launchScriptConfig,
+            );
             console.log(debug.breakpoints);
             const dotnetDebugSession = await dotnetDebugSessionActive;
             console.log(debug.activeDebugSession);
diff --git a/test/features/ExternalApi.test.ts b/test/features/ExternalApi.test.ts
index 6d82b17cba..d0b3e56641 100644
--- a/test/features/ExternalApi.test.ts
+++ b/test/features/ExternalApi.test.ts
@@ -2,8 +2,11 @@
 // Licensed under the MIT License.
 
 import * as assert from "assert";
+import type {
+    IExternalPowerShellDetails,
+    IPowerShellExtensionClient,
+} from "../../src/features/ExternalApi";
 import utils = require("../utils");
-import type { IExternalPowerShellDetails, IPowerShellExtensionClient } from "../../src/features/ExternalApi";
 
 describe("ExternalApi feature", function () {
     describe("External extension registration", function () {
@@ -13,35 +16,48 @@ describe("ExternalApi feature", function () {
         });
 
         it("Registers and unregisters an extension", function () {
-            const sessionId: string = extension.registerExternalExtension(utils.extensionId);
+            const sessionId: string = extension.registerExternalExtension(
+                utils.extensionId,
+            );
             assert.notStrictEqual(sessionId, "");
             assert.notStrictEqual(sessionId, null);
             assert.strictEqual(
                 extension.unregisterExternalExtension(sessionId),
-                true);
+                true,
+            );
         });
 
         it("Registers and unregisters an extension with a version", function () {
-            const sessionId: string = extension.registerExternalExtension(utils.extensionId, "v2");
+            const sessionId: string = extension.registerExternalExtension(
+                utils.extensionId,
+                "v2",
+            );
             assert.notStrictEqual(sessionId, "");
             assert.notStrictEqual(sessionId, null);
             assert.strictEqual(
                 extension.unregisterExternalExtension(sessionId),
-                true);
+                true,
+            );
         });
 
         it("Rejects if not registered", async function () {
-            await assert.rejects(async () => await extension.getPowerShellVersionDetails(""));
+            await assert.rejects(
+                async () => await extension.getPowerShellVersionDetails(""),
+            );
         });
 
         it("Throws if attempting to register an extension more than once", function () {
-            const sessionId: string = extension.registerExternalExtension(utils.extensionId);
+            const sessionId: string = extension.registerExternalExtension(
+                utils.extensionId,
+            );
             try {
                 assert.throws(
-                    () => extension.registerExternalExtension(utils.extensionId),
+                    () =>
+                        extension.registerExternalExtension(utils.extensionId),
                     {
-                        message: `The extension '${utils.extensionId}' is already registered.`
-                    });
+                        message: `The extension '${utils.extensionId}' is already registered.`,
+                    },
+                );
             } finally {
                 extension.unregisterExternalExtension(sessionId);
             }
@@ -51,8 +67,10 @@ describe("ExternalApi feature", function () {
             assert.throws(
                 () => extension.unregisterExternalExtension("not-real"),
                 {
-                    message: "No extension registered with session UUID: not-real"
-                });
+                    message:
+                        "No extension registered with session UUID: not-real",
+                },
+            );
         });
     });
 
@@ -65,10 +83,13 @@ describe("ExternalApi feature", function () {
             sessionId = extension.registerExternalExtension(utils.extensionId);
         });
 
-        after(function () { extension.unregisterExternalExtension(sessionId); });
+        after(function () {
+            extension.unregisterExternalExtension(sessionId);
+        });
 
         it("Gets non-empty version details from the PowerShell Editor Services", async function () {
-            const versionDetails: IExternalPowerShellDetails = await extension.getPowerShellVersionDetails(sessionId);
+            const versionDetails: IExternalPowerShellDetails =
+                await extension.getPowerShellVersionDetails(sessionId);
 
             assert.notStrictEqual(versionDetails.architecture, "");
             assert.notStrictEqual(versionDetails.architecture, null);
diff --git a/test/features/ISECompatibility.test.ts b/test/features/ISECompatibility.test.ts
index 0f2152c1c6..5a71e7986d 100644
--- a/test/features/ISECompatibility.test.ts
+++ b/test/features/ISECompatibility.test.ts
@@ -9,20 +9,33 @@ import utils = require("../utils");
 describe("ISE compatibility feature", function () {
     let currentTheme: string | undefined;
 
-    async function enableISEMode(): Promise<void> { await vscode.commands.executeCommand("PowerShell.EnableISEMode"); }
-    async function disableISEMode(): Promise<void> { await vscode.commands.executeCommand("PowerShell.DisableISEMode"); }
-    async function toggleISEMode(): Promise<void> { await vscode.commands.executeCommand("PowerShell.ToggleISEMode"); }
+    async function enableISEMode(): Promise<void> {
+        await vscode.commands.executeCommand("PowerShell.EnableISEMode");
+    }
+    async function disableISEMode(): Promise<void> {
+        await vscode.commands.executeCommand("PowerShell.DisableISEMode");
+    }
+    async function toggleISEMode(): Promise<void> {
+        await vscode.commands.executeCommand("PowerShell.ToggleISEMode");
+    }
 
     before(async function () {
         // Save user's current theme.
-        currentTheme = await vscode.workspace.getConfiguration("workbench").get("colorTheme");
+        currentTheme = await vscode.workspace
+            .getConfiguration("workbench")
+            .get("colorTheme");
         await utils.ensureEditorServicesIsConnected();
     });
 
     after(async function () {
         // Reset user's current theme.
-        await vscode.workspace.getConfiguration("workbench").update("colorTheme", currentTheme, true);
-        assert.strictEqual(vscode.workspace.getConfiguration("workbench").get("colorTheme"), currentTheme);
+        await vscode.workspace
+            .getConfiguration("workbench")
+            .update("colorTheme", currentTheme, true);
+        assert.strictEqual(
+            vscode.workspace.getConfiguration("workbench").get("colorTheme"),
+            currentTheme,
+        );
     });
 
     describe("Enable ISE Mode updates expected settings", function () {
@@ -30,7 +43,9 @@ describe("ISE compatibility feature", function () {
         after(disableISEMode);
         for (const iseSetting of ISECompatibilityFeature.settings) {
             it(`Sets ${iseSetting.name} correctly`, function () {
-                const currently = vscode.workspace.getConfiguration(iseSetting.path).get(iseSetting.name);
+                const currently = vscode.workspace
+                    .getConfiguration(iseSetting.path)
+                    .get(iseSetting.name);
                 assert.strictEqual(currently, iseSetting.value);
             });
         }
@@ -42,7 +57,9 @@ describe("ISE compatibility feature", function () {
         after(disableISEMode);
         for (const iseSetting of ISECompatibilityFeature.settings) {
             it(`Reverts ${iseSetting.name} correctly`, function () {
-                const currently = vscode.workspace.getConfiguration(iseSetting.path).get(iseSetting.name);
+                const currently = vscode.workspace
+                    .getConfiguration(iseSetting.path)
+                    .get(iseSetting.name);
                 assert.notStrictEqual(currently, iseSetting.value);
             });
         }
@@ -54,7 +71,9 @@ describe("ISE compatibility feature", function () {
         after(disableISEMode);
         for (const iseSetting of ISECompatibilityFeature.settings) {
             it(`Reverts ${iseSetting.name} correctly`, function () {
-                const currently = vscode.workspace.getConfiguration(iseSetting.path).get(iseSetting.name);
+                const currently = vscode.workspace
+                    .getConfiguration(iseSetting.path)
+                    .get(iseSetting.name);
                 assert.notStrictEqual(currently, iseSetting.value);
             });
         }
@@ -66,7 +85,9 @@ describe("ISE compatibility feature", function () {
         after(disableISEMode);
         for (const iseSetting of ISECompatibilityFeature.settings) {
             it(`Sets ${iseSetting.name} correctly`, function () {
-                const currently = vscode.workspace.getConfiguration(iseSetting.path).get(iseSetting.name);
+                const currently = vscode.workspace
+                    .getConfiguration(iseSetting.path)
+                    .get(iseSetting.name);
                 assert.strictEqual(currently, iseSetting.value);
             });
         }
@@ -79,27 +100,53 @@ describe("ISE compatibility feature", function () {
 
         function assertISESettings(): void {
             for (const iseSetting of ISECompatibilityFeature.settings) {
-                const currently = vscode.workspace.getConfiguration(iseSetting.path).get(iseSetting.name);
+                const currently = vscode.workspace
+                    .getConfiguration(iseSetting.path)
+                    .get(iseSetting.name);
                 assert.notStrictEqual(currently, iseSetting.value);
             }
         }
 
         it("Changes the theme back from PowerShell ISE", async function () {
             // Change state to something that DisableISEMode will change
-            await vscode.workspace.getConfiguration("workbench").update("colorTheme", "PowerShell ISE", true);
-            assert.strictEqual(vscode.workspace.getConfiguration("workbench").get("colorTheme"), "PowerShell ISE");
+            await vscode.workspace
+                .getConfiguration("workbench")
+                .update("colorTheme", "PowerShell ISE", true);
+            assert.strictEqual(
+                vscode.workspace
+                    .getConfiguration("workbench")
+                    .get("colorTheme"),
+                "PowerShell ISE",
+            );
             await disableISEMode();
             assertISESettings();
         });
 
         it("Doesn't change theme if it was manually changed", async function () {
-            assert.strictEqual(vscode.workspace.getConfiguration("workbench").get("colorTheme"), "PowerShell ISE");
+            assert.strictEqual(
+                vscode.workspace
+                    .getConfiguration("workbench")
+                    .get("colorTheme"),
+                "PowerShell ISE",
+            );
             // "Manually" change theme after enabling ISE mode. Use a built-in theme but not the default.
-            await vscode.workspace.getConfiguration("workbench").update("colorTheme", "Monokai", true);
-            assert.strictEqual(vscode.workspace.getConfiguration("workbench").get("colorTheme"), "Monokai");
+            await vscode.workspace
+                .getConfiguration("workbench")
+                .update("colorTheme", "Monokai", true);
+            assert.strictEqual(
+                vscode.workspace
+                    .getConfiguration("workbench")
+                    .get("colorTheme"),
+                "Monokai",
+            );
             await disableISEMode();
             assertISESettings();
-            assert.strictEqual(vscode.workspace.getConfiguration("workbench").get("colorTheme"), "Monokai");
+            assert.strictEqual(
+                vscode.workspace
+                    .getConfiguration("workbench")
+                    .get("colorTheme"),
+                "Monokai",
+            );
         });
     });
 });
diff --git a/test/features/UpdatePowerShell.test.ts b/test/features/UpdatePowerShell.test.ts
index c4eff1aa11..ef5049b43e 100644
--- a/test/features/UpdatePowerShell.test.ts
+++ b/test/features/UpdatePowerShell.test.ts
@@ -3,8 +3,8 @@
 
 import assert from "assert";
 import { UpdatePowerShell } from "../../src/features/UpdatePowerShell";
-import { Settings } from "../../src/settings";
 import type { IPowerShellVersionDetails } from "../../src/session";
+import { Settings } from "../../src/settings";
 import { testLogger } from "../utils";
 
 describe("UpdatePowerShell feature", function () {
diff --git a/test/utils.ts b/test/utils.ts
index ff270fe929..15927ce45a 100644
--- a/test/utils.ts
+++ b/test/utils.ts
@@ -1,15 +1,15 @@
 // Copyright (c) Microsoft Corporation.
 // Licensed under the MIT License.
 
+import { execSync } from "child_process";
 import * as path from "path";
 import * as vscode from "vscode";
-import type { ILogger } from "../src/logging";
 import type { IPowerShellExtensionClient } from "../src/features/ExternalApi";
-import { execSync } from "child_process";
+import type { ILogger } from "../src/logging";
 
 // This lets us test the rest of our path assumptions against the baseline of
 // this test file existing at `<root>/test/utils.js`.
-import { publisher, name } from "../package.json"
+import { name, publisher } from "../package.json";
 export const extensionId = `${publisher}.${name}`;
 
 export class TestLogger implements ILogger {
@@ -20,7 +20,10 @@ export class TestLogger implements ILogger {
     write(_message: string, ..._additionalMessages: string[]): void {
         return;
     }
-    writeAndShowInformation(_message: string, ..._additionalMessages: string[]): Promise<void> {
+    writeAndShowInformation(
+        _message: string,
+        ..._additionalMessages: string[]
+    ): Promise<void> {
         return Promise.resolve();
     }
     writeTrace(_message: string, ..._additionalMessages: string[]): void {
@@ -32,18 +35,28 @@ export class TestLogger implements ILogger {
     writeWarning(_message: string, ..._additionalMessages: string[]): void {
         return;
     }
-    writeAndShowWarning(_message: string, ..._additionalMessages: string[]): Promise<void> {
+    writeAndShowWarning(
+        _message: string,
+        ..._additionalMessages: string[]
+    ): Promise<void> {
         return Promise.resolve();
     }
     writeError(_message: string, ..._additionalMessages: string[]): void {
         return;
     }
-    writeAndShowError(_message: string, ..._additionalMessages: string[]): Promise<void> {
+    writeAndShowError(
+        _message: string,
+        ..._additionalMessages: string[]
+    ): Promise<void> {
         return Promise.resolve();
     }
     writeAndShowErrorWithActions(
         _message: string,
-        _actions: { prompt: string; action: (() => Promise<void>) | undefined }[]): Promise<void> {
+        _actions: {
+            prompt: string;
+            action: (() => Promise<void>) | undefined;
+        }[],
+    ): Promise<void> {
         return Promise.resolve();
     }
 }
@@ -52,7 +65,9 @@ export const testLogger = new TestLogger();
 
 export async function ensureExtensionIsActivated(): Promise<IPowerShellExtensionClient> {
     const extension = vscode.extensions.getExtension(extensionId);
-    if (!extension!.isActive) { await extension!.activate(); }
+    if (!extension!.isActive) {
+        await extension!.activate();
+    }
     return extension!.exports as IPowerShellExtensionClient;
 }
 
@@ -66,20 +81,24 @@ export async function ensureEditorServicesIsConnected(): Promise<IPowerShellExte
 
 /**
  * This is a workaround for sinon not being able to stub interfaces. Interfaces are a TypeScript-only concept so this effectively allows us to stub interfaces by not providing the entire implementation but only what matters for the test. "What matters" is not type checked so you must be careful to stub everything you need, otherwise you should provide a default implementation instead if you do not know.
-*/
+ */
 export function stubInterface<T>(object?: Partial<T>): T {
-    return object ? object as T : {} as T;
+    return object ? (object as T) : ({} as T);
 }
 
 /** Builds the sample binary module code. We need to do this because the source maps have absolute paths so they are not portable between machines, and while we could do deterministic with source maps, that's way more complicated and everywhere we build has dotnet already anyways */
 export function BuildBinaryModuleMock(): void {
-    const projectPath = path.resolve(`${__dirname}/../test/mocks/BinaryModule/BinaryModule.csproj`);
+    const projectPath = path.resolve(
+        `${__dirname}/../test/mocks/BinaryModule/BinaryModule.csproj`,
+    );
     try {
         execSync(`dotnet publish ${projectPath}`, {
-            encoding: "utf8"
+            encoding: "utf8",
         });
     } catch (err) {
-        throw new Error(`Failed to build the binary module mock. Please ensure that you have the .NET Core SDK installed: ${err}`);
+        throw new Error(
+            `Failed to build the binary module mock. Please ensure that you have the .NET Core SDK installed: ${err}`,
+        );
     }
 }
 
@@ -87,8 +106,11 @@ export function BuildBinaryModuleMock(): void {
  * @param event The event to wait for
  * @param filter An optional filter to apply to the event TResult. The filter will continue to monitor the event firings until the filter returns true.
  * @returns A promise that resolves when the specified event is fired with the TResult subject of the event. If a filter is specified, the promise will not resolve until the filter returns true.
-*/
-export function WaitEvent<TResult>(event: vscode.Event<TResult>, filter?: (event: TResult) => boolean | undefined): Promise<TResult> {
+ */
+export function WaitEvent<TResult>(
+    event: vscode.Event<TResult>,
+    filter?: (event: TResult) => boolean | undefined,
+): Promise<TResult> {
     return new Promise<TResult>((resolve) => {
         const listener = event((result: TResult) => {
             if (!filter || filter(result)) {
diff --git a/themes/theme-psise/theme.json b/themes/theme-psise/theme.json
index 44474a7289..fcf52d0067 100644
--- a/themes/theme-psise/theme.json
+++ b/themes/theme-psise/theme.json
@@ -1,211 +1,189 @@
 {
-    "name": "PowerShell ISE",
-    "semanticHighlighting": true,
-    "tokenColors": [{
-            "settings": {
-                "background": "#FFFFFF",
-                "foreground": "#000000"
-            }
-        },
-        {
-            "name": "Comments",
-            "scope": [
-                "comment",
-                "punctuation.definition.comment"
-            ],
-            "settings": {
-                "fontStyle": "italic",
-                "foreground": "#006400"
-            }
-        },
-        {
-            "name": "Comments: Preprocessor",
-            "scope": "comment.block.preprocessor",
-            "settings": {
-                "fontStyle": "",
-                "foreground": "#006400"
-            }
-        },
-        {
-            "name": "Comments: Documentation",
-            "scope": [
-                "comment.documentation",
-                "comment.block.documentation"
-            ],
-            "settings": {
-                "foreground": "#006400"
-            }
-        },
-        {
-            "name": "Invalid - Deprecated",
-            "scope": "invalid.deprecated",
-            "settings": {
-                "background": "#96000014"
-            }
-        },
-        {
-            "name": "Invalid - Illegal",
-            "scope": "invalid.illegal",
-            "settings": {
-                "background": "#96000014",
-                "foreground": "#660000"
-            }
-        },
-        {
-            "name": "Operators",
-            "scope": "keyword.operator",
-            "settings": {
-                "foreground": "#A9A9A9"
-            }
-        },
-        {
-            "name": "Keywords",
-            "scope": [
-                "keyword",
-                "storage"
-            ],
-            "settings": {
-                "foreground": "#00008B"
-            }
-        },
-        {
-            "name": "Types",
-            "scope": [
-                "storage.type",
-                "support.type"
-            ],
-            "settings": {
-                "foreground": "#00008B"
-            }
-        },
-        {
-            "name": "Language Constants",
-            "scope": [
-                "constant.language",
-                "support.constant",
-                "variable.language"
-            ],
-            "settings": {
-                "foreground": "#008080"
-            }
-        },
-        {
-            "name": "Keys and Properties",
-            "scope": [
-                "property",
-                "variable.other.property",
-                "variable.other.property.powershell"
-            ],
-            "settings": {
-                "foreground": "#2d2e45"
-            }
-        },
-        {
-            "name": "Variables",
-            "scope": [
-                "variable",
-                "support.variable",
-                "punctuation.definition.variable.powershell",
-                "variable.other.readwrite.powershell"
-            ],
-            "settings": {
-                "foreground": "#FF4500"
-            }
-        },
-        {
-            "name": "Functions",
-            "scope": [
-                "entity.name.function",
-                "support.function"
-            ],
-            "settings": {
-                "foreground": "#0000FF"
-            }
-        },
-        {
-            "name": "Classes",
-            "scope": [
-                "entity.name.type",
-                "entity.other.inherited-class",
-                "support.class"
-            ],
-            "settings": {
-                "foreground": "#7A3E9D"
-            }
-        },
-        {
-            "name": "Exceptions",
-            "scope": "entity.name.exception",
-            "settings": {
-                "foreground": "#660000"
-            }
-        },
-        {
-            "name": "Sections",
-            "scope": "entity.name.section",
-            "settings": {}
-        },
-        {
-            "name": "Numbers, Characters",
-            "scope": [
-                "constant.numeric",
-                "constant.character",
-                "constant"
-            ],
-            "settings": {
-                "foreground": "#800080"
-            }
-        },
-        {
-            "name": "Strings",
-            "scope": "string",
-            "settings": {
-                "foreground": "#8B0000"
-            }
-        },
-        {
-            "name": "Strings: Escape Sequences",
-            "scope": "constant.character.escape",
-            "settings": {
-                "foreground": "#8B0000"
-            }
-        },
-        {
-            "name": "Strings: Regular Expressions",
-            "scope": "string.regexp",
-            "settings": {
-                "foreground": "#8B0000"
-            }
-        },
-        {
-            "name": "Strings: Symbols",
-            "scope": "constant.other.symbol",
-            "settings": {
-                "foreground": "#8B0000"
-            }
-        },
-        {
-            "name": "Punctuation",
-            "scope": "punctuation",
-            "settings": {
-                "foreground": "#000000"
-            }
-        }
-    ],
-    "colors": {
-        "activityBar.background": "#E1ECF9",
-        "activityBar.foreground": "#A9A9A9",
-        "activityBarBadge.background": "#A9A9A9",
-        "editor.lineHighlightBackground": "#add8e6",
-        "editor.selectionBackground": "#94c6f7",
-        "settings.checkboxBorder": "#A9A9A9",
-        "settings.dropdownBorder": "#A9A9A9",
-        "settings.numberInputBorder": "#A9A9A9",
-        "settings.textInputBorder": "#A9A9A9",
-        "statusBar.background": "#999999",
-        "statusBar.debuggingBackground": "#FF4500",
-        "statusBar.noFolderBackground": "#999999",
-        "terminal.background": "#012456",
-        "terminal.foreground": "#F5F5F5"
+  "name": "PowerShell ISE",
+  "semanticHighlighting": true,
+  "tokenColors": [
+    {
+      "settings": {
+        "background": "#FFFFFF",
+        "foreground": "#000000"
+      }
+    },
+    {
+      "name": "Comments",
+      "scope": ["comment", "punctuation.definition.comment"],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#006400"
+      }
+    },
+    {
+      "name": "Comments: Preprocessor",
+      "scope": "comment.block.preprocessor",
+      "settings": {
+        "fontStyle": "",
+        "foreground": "#006400"
+      }
+    },
+    {
+      "name": "Comments: Documentation",
+      "scope": ["comment.documentation", "comment.block.documentation"],
+      "settings": {
+        "foreground": "#006400"
+      }
+    },
+    {
+      "name": "Invalid - Deprecated",
+      "scope": "invalid.deprecated",
+      "settings": {
+        "background": "#96000014"
+      }
+    },
+    {
+      "name": "Invalid - Illegal",
+      "scope": "invalid.illegal",
+      "settings": {
+        "background": "#96000014",
+        "foreground": "#660000"
+      }
+    },
+    {
+      "name": "Operators",
+      "scope": "keyword.operator",
+      "settings": {
+        "foreground": "#A9A9A9"
+      }
+    },
+    {
+      "name": "Keywords",
+      "scope": ["keyword", "storage"],
+      "settings": {
+        "foreground": "#00008B"
+      }
+    },
+    {
+      "name": "Types",
+      "scope": ["storage.type", "support.type"],
+      "settings": {
+        "foreground": "#00008B"
+      }
+    },
+    {
+      "name": "Language Constants",
+      "scope": ["constant.language", "support.constant", "variable.language"],
+      "settings": {
+        "foreground": "#008080"
+      }
+    },
+    {
+      "name": "Keys and Properties",
+      "scope": [
+        "property",
+        "variable.other.property",
+        "variable.other.property.powershell"
+      ],
+      "settings": {
+        "foreground": "#2d2e45"
+      }
+    },
+    {
+      "name": "Variables",
+      "scope": [
+        "variable",
+        "support.variable",
+        "punctuation.definition.variable.powershell",
+        "variable.other.readwrite.powershell"
+      ],
+      "settings": {
+        "foreground": "#FF4500"
+      }
+    },
+    {
+      "name": "Functions",
+      "scope": ["entity.name.function", "support.function"],
+      "settings": {
+        "foreground": "#0000FF"
+      }
+    },
+    {
+      "name": "Classes",
+      "scope": [
+        "entity.name.type",
+        "entity.other.inherited-class",
+        "support.class"
+      ],
+      "settings": {
+        "foreground": "#7A3E9D"
+      }
+    },
+    {
+      "name": "Exceptions",
+      "scope": "entity.name.exception",
+      "settings": {
+        "foreground": "#660000"
+      }
+    },
+    {
+      "name": "Sections",
+      "scope": "entity.name.section",
+      "settings": {}
+    },
+    {
+      "name": "Numbers, Characters",
+      "scope": ["constant.numeric", "constant.character", "constant"],
+      "settings": {
+        "foreground": "#800080"
+      }
+    },
+    {
+      "name": "Strings",
+      "scope": "string",
+      "settings": {
+        "foreground": "#8B0000"
+      }
+    },
+    {
+      "name": "Strings: Escape Sequences",
+      "scope": "constant.character.escape",
+      "settings": {
+        "foreground": "#8B0000"
+      }
+    },
+    {
+      "name": "Strings: Regular Expressions",
+      "scope": "string.regexp",
+      "settings": {
+        "foreground": "#8B0000"
+      }
+    },
+    {
+      "name": "Strings: Symbols",
+      "scope": "constant.other.symbol",
+      "settings": {
+        "foreground": "#8B0000"
+      }
+    },
+    {
+      "name": "Punctuation",
+      "scope": "punctuation",
+      "settings": {
+        "foreground": "#000000"
+      }
     }
-}
\ No newline at end of file
+  ],
+  "colors": {
+    "activityBar.background": "#E1ECF9",
+    "activityBar.foreground": "#A9A9A9",
+    "activityBarBadge.background": "#A9A9A9",
+    "editor.lineHighlightBackground": "#add8e6",
+    "editor.selectionBackground": "#94c6f7",
+    "settings.checkboxBorder": "#A9A9A9",
+    "settings.dropdownBorder": "#A9A9A9",
+    "settings.numberInputBorder": "#A9A9A9",
+    "settings.textInputBorder": "#A9A9A9",
+    "statusBar.background": "#999999",
+    "statusBar.debuggingBackground": "#FF4500",
+    "statusBar.noFolderBackground": "#999999",
+    "terminal.background": "#012456",
+    "terminal.foreground": "#F5F5F5"
+  }
+}

From e866df3ac083d3c3363d3cd551f0e3ef8650996a Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Fri, 16 May 2025 09:24:14 -0700
Subject: [PATCH 20/33] Configure auto end-of-line for Prettier

Which cannot be set in .editorconfig.
Also remove old workaround for NPM.
---
 .gitattributes | 5 -----
 package.json   | 1 +
 2 files changed, 1 insertion(+), 5 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index 2a922ee8df..e6caee9a0c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,8 +3,3 @@
 
 # Set svg to binary type, as SVG is unlikely to be editted by hand. Can be treated as checked in blob
 *.svg binary
-
-# .gitattributes in project root
-# npm now seems to be insisting on LF - see https://github.com/npm/npm/issues/17161
-package.json      text eol=lf
-package-lock.json text eol=lf
diff --git a/package.json b/package.json
index 0f082805ae..593678485a 100644
--- a/package.json
+++ b/package.json
@@ -111,6 +111,7 @@
     "test": "vscode-test"
   },
   "prettier": {
+    "endOfLine": "auto",
     "plugins": [
       "prettier-plugin-organize-imports"
     ]

From 6b0f82fdddce21215192c59d988609959d41f179 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Fri, 16 May 2025 10:08:06 -0700
Subject: [PATCH 21/33] Setup Git blame to ignore reformatting commit (#5192)

---
 .git-blame-ignore-revs | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 .git-blame-ignore-revs

diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000000..d775e01095
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,6 @@
+# Enabled on GitHub automatically
+# Enable this file in your git config:
+# git config blame.ignoreRevsFile .git-blame-ignore-revs
+
+# Prettier reformatting
+f978bae02ad48ddb5f8d4eb21512fe9b17541c5b

From 2c5a6a0ba663e6e99d6e67222882266bc14a3326 Mon Sep 17 00:00:00 2001
From: Justin Grote <15258962+JustinGrote@users.noreply.github.com.>
Date: Fri, 16 May 2025 10:31:48 -0700
Subject: [PATCH 22/33] Add note about git blame ignore revs

---
 docs/development.md | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/docs/development.md b/docs/development.md
index 1d839612bc..3caac3bb01 100644
--- a/docs/development.md
+++ b/docs/development.md
@@ -4,22 +4,24 @@
 
 1. [Fork and clone][fork] the [vscode-powershell repository](https://github.com/PowerShell/vscode-powershell).
 
-2. [Fork and clone][fork] the [PowerShell Editor Services (PSES) repository](https://github.com/PowerShell/PowerShellEditorServices).
+1. [Fork and clone][fork] the [PowerShell Editor Services (PSES) repository](https://github.com/PowerShell/PowerShellEditorServices).
    > The `vscode-powershell` folder and the `PowerShellEditorServices` folder should be next to each other on the file
    > system. Code in `vscode-powershell` looks for PSES at `../PowerShellEditorServices` if you're building locally so
    > PSES must be in that location.
 
-3. Follow the [development instructions](https://github.com/PowerShell/PowerShellEditorServices#development) for
+1. Follow the [development instructions](https://github.com/PowerShell/PowerShellEditorServices#development) for
    PowerShell Editor Services. **You will need to complete this step before proceeding**.
 
-4. Install [Node.js](https://nodejs.org/en/) 18.x or higher.
+1. Install [Node.js](https://nodejs.org/en/) 18.x or higher.
 
-5. Install [Visual Studio Code](https://code.visualstudio.com).
+1. Install [Visual Studio Code](https://code.visualstudio.com).
    Open the multi-root workspace file in this repo, `extension-dev.code-workspace`.
    > This has a set of recommended extensions to install and provides tasks.
    > The ESLint formatter will require you to install ESLint globally, using `npm install -g eslint`.
    > Otherwise VS Code will erroneously complain that it isn't able to use it to format TypeScript files.
 
+1. (optional) Set `git config blame.ignoreRevsFile .git-blame-ignore-revs` to ignore formatting-related commits.
+
 [fork]: https://help.github.com/articles/fork-a-repo/
 
 ## Tracking Upstream Dependencies

From 28dba2429eb7ca63c27385e64ea7c96a0381c49d Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 21 May 2025 16:00:16 -0700
Subject: [PATCH 23/33] Clean up sleeps and unit test settings

---
 .vscode-test.mjs                       | 14 +++++++-------
 src/extension.ts                       |  4 ++--
 src/process.ts                         |  2 +-
 src/session.ts                         |  8 ++++----
 test/features/DebugSession.test.ts     |  2 --
 test/features/ISECompatibility.test.ts |  2 --
 test/utils.ts                          | 17 +++++++++++++----
 7 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/.vscode-test.mjs b/.vscode-test.mjs
index 8a277d94d2..f7d79eefa4 100644
--- a/.vscode-test.mjs
+++ b/.vscode-test.mjs
@@ -1,20 +1,20 @@
 import { defineConfig } from "@vscode/test-cli";
-import os from "os";
-import path from "path";
 
 export default defineConfig({
     files: "test/**/*.test.ts",
-    // The default user data directory had too many characters for the IPC connection on macOS in CI.
+    // It may break CI but we'll know sooner rather than later
+    version: "insiders",
     launchArgs: [
+        // Other extensions are unnecessary while testing
+        "--disable-extensions",
+        // Undocumented but valid option to use a temporary profile for testing
         "--profile-temp",
-        "--user-data-dir",
-        path.join(os.tmpdir(), "vscode-user-data"),
     ],
     workspaceFolder: "test/TestEnvironment.code-workspace",
     mocha: {
         ui: "bdd", // describe, it, etc.
         require: ["esbuild-register"], // transpile TypeScript on-the-fly
-        slow: 2000, // 2 seconds for slow test
-        timeout: 60 * 1000, // 10 minutes to allow for debugging
+        slow: 2 * 1000, // 2 seconds for slow test
+        timeout: 2 * 60 * 1000, // 2 minutes to allow for debugging
     },
 });
diff --git a/src/extension.ts b/src/extension.ts
index 53fe03af19..d89708440f 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -29,7 +29,7 @@ import { LanguageClientConsumer } from "./languageClientConsumer";
 import { Logger } from "./logging";
 import { SessionManager } from "./session";
 import { getSettings } from "./settings";
-import { PowerShellLanguageId } from "./utils";
+import { PowerShellLanguageId, sleep } from "./utils";
 // The 1DS telemetry key, which is just shared among all Microsoft extensions
 // (and isn't sensitive).
 const TELEMETRY_KEY =
@@ -257,7 +257,7 @@ function registerWaitForPsesActivationCommand(
                     return pidContent.toString();
                 } catch {
                     // File doesn't exist yet, wait and try again
-                    await new Promise((resolve) => setTimeout(resolve, 1000));
+                    await sleep(200);
                 }
             }
         },
diff --git a/src/process.ts b/src/process.ts
index 0f1503d468..08ed91e2b4 100644
--- a/src/process.ts
+++ b/src/process.ts
@@ -315,7 +315,7 @@ export class PowerShellProcess {
             }
 
             // Wait a bit and try again.
-            await utils.sleep(1000);
+            await utils.sleep(200);
         }
 
         this.logger.writeError("Timed out waiting for session file!");
diff --git a/src/session.ts b/src/session.ts
index 8ae1624bfb..80ab66c81f 100644
--- a/src/session.ts
+++ b/src/session.ts
@@ -319,7 +319,7 @@ export class SessionManager implements Middleware {
         try {
             // If the stop fails, so will the dispose, I think this is a bug in
             // the client library.
-            await this.languageClient?.stop(3000);
+            await this.languageClient?.stop(2000);
             await this.languageClient?.dispose();
         } catch (err) {
             this.logger.writeError(
@@ -491,7 +491,7 @@ export class SessionManager implements Middleware {
 
     public async waitUntilStarted(): Promise<void> {
         while (this.sessionStatus !== SessionStatus.Running) {
-            await utils.sleep(300);
+            await utils.sleep(200);
         }
     }
 
@@ -1180,13 +1180,13 @@ Type 'help' to get help.
             ) {
                 return;
             }
-            await utils.sleep(300);
+            await utils.sleep(200);
         }
     }
 
     private async waitWhileStopping(): Promise<void> {
         while (this.sessionStatus === SessionStatus.Stopping) {
-            await utils.sleep(300);
+            await utils.sleep(200);
         }
     }
 
diff --git a/test/features/DebugSession.test.ts b/test/features/DebugSession.test.ts
index 815e5155f5..986fbd45f7 100644
--- a/test/features/DebugSession.test.ts
+++ b/test/features/DebugSession.test.ts
@@ -656,8 +656,6 @@ describe("DebugSessionFeature", () => {
 });
 
 describe("DebugSessionFeature E2E", function () {
-    // E2E tests can take a while to run since the debugger has to start up and attach
-    this.slow(20000);
     before(async () => {
         // Registers and warms up the debug adapter and the PowerShell Extension Terminal
         await ensureEditorServicesIsConnected();
diff --git a/test/features/ISECompatibility.test.ts b/test/features/ISECompatibility.test.ts
index 5a71e7986d..19a768c56a 100644
--- a/test/features/ISECompatibility.test.ts
+++ b/test/features/ISECompatibility.test.ts
@@ -94,8 +94,6 @@ describe("ISE compatibility feature", function () {
     });
 
     describe("Color theme interactions", function () {
-        // These tests are slow because they change the user's theme.
-        this.slow(3000);
         beforeEach(enableISEMode);
 
         function assertISESettings(): void {
diff --git a/test/utils.ts b/test/utils.ts
index 15927ce45a..aef25f0e64 100644
--- a/test/utils.ts
+++ b/test/utils.ts
@@ -6,6 +6,7 @@ import * as path from "path";
 import * as vscode from "vscode";
 import type { IPowerShellExtensionClient } from "../src/features/ExternalApi";
 import type { ILogger } from "../src/logging";
+import { sleep } from "../src/utils";
 
 // This lets us test the rest of our path assumptions against the baseline of
 // this test file existing at `<root>/test/utils.js`.
@@ -64,11 +65,19 @@ export class TestLogger implements ILogger {
 export const testLogger = new TestLogger();
 
 export async function ensureExtensionIsActivated(): Promise<IPowerShellExtensionClient> {
-    const extension = vscode.extensions.getExtension(extensionId);
-    if (!extension!.isActive) {
-        await extension!.activate();
+    let extension = vscode.extensions.getExtension(extensionId);
+    while (!extension) {
+        // Wait for VS Code to be ready
+        testLogger.writeDebug(`Extension ${extensionId} not yet found...`);
+        await sleep(200);
+        extension = vscode.extensions.getExtension(extensionId);
+        // Wait for VS Code to be ready
+        await sleep(200);
     }
-    return extension!.exports as IPowerShellExtensionClient;
+    if (!extension.isActive) {
+        await extension.activate();
+    }
+    return extension.exports as IPowerShellExtensionClient;
 }
 
 export async function ensureEditorServicesIsConnected(): Promise<IPowerShellExtensionClient> {

From 0ad7bc833851edb4921ede6b803f8719eadb452d Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 21 May 2025 16:01:26 -0700
Subject: [PATCH 24/33] Run unit tests in OneBranch container

---
 .pipelines/vscode-powershell-Official.yml | 48 +----------------------
 1 file changed, 2 insertions(+), 46 deletions(-)

diff --git a/.pipelines/vscode-powershell-Official.yml b/.pipelines/vscode-powershell-Official.yml
index 69d83c9533..3e7b6be52f 100644
--- a/.pipelines/vscode-powershell-Official.yml
+++ b/.pipelines/vscode-powershell-Official.yml
@@ -109,8 +109,8 @@ extends:
                 displayName: PowerShellEditorServices version
               - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
                 displayName: Install PSResources
-              - pwsh: Invoke-Build Build -Configuration $(BuildConfiguration)
-                displayName: Build
+              - pwsh: Invoke-Build Test -Configuration $(BuildConfiguration)
+                displayName: Build and test
               - task: onebranch.pipeline.signing@1
                 displayName: Sign 1st-party example PowerShell files
                 inputs:
@@ -132,50 +132,6 @@ extends:
                   search_root: $(Build.SourcesDirectory)/out
                   files_to_sign: |
                     *.signature.p7s;
-          - job: test
-            displayName: Build and run tests
-            pool:
-              type: windows
-              isCustom: true
-              name: Azure Pipelines
-              vmImage: windows-latest
-            variables:
-              ob_outputDirectory: $(Build.SourcesDirectory)/out
-              skipComponentGovernanceDetection: true
-            steps:
-              - task: UseNode@1
-                displayName: Use Node 20.x
-                inputs:
-                  version: 20.x
-              - task: UseDotNet@2
-                displayName: Use .NET 8.x SDK
-                inputs:
-                  packageType: sdk
-                  version: 8.x
-              - task: DownloadPipelineArtifact@2
-                displayName: Download PowerShellEditorServices
-                inputs:
-                  source: specific
-                  project: PowerShellCore
-                  definition: 2905
-                  specificBuildWithTriggering: true
-                  allowPartiallySucceededBuilds: true
-                  buildVersionToDownload: latestFromBranch
-                  branchName: refs/heads/main
-                  artifact: drop_build_main
-              - task: ExtractFiles@1
-                displayName: Extract PowerShellEditorServices
-                inputs:
-                  archiveFilePatterns: $(Pipeline.Workspace)/PowerShellEditorServices.zip
-                  destinationFolder: $(Build.SourcesDirectory)/modules
-              - pwsh: |
-                  $manifest = Test-ModuleManifest $(Build.SourcesDirectory)/modules/PowerShellEditorServices/PowerShellEditorServices.psd1
-                  Write-Host Using PowerShellEditorServices v$($manifest.Version)
-                displayName: PowerShellEditorServices version
-              - pwsh: ./tools/installPSResources.ps1 -PSRepository CFS
-                displayName: Install PSResources
-              - pwsh: Invoke-Build Test -Configuration $(BuildConfiguration)
-                displayName: Run tests
       - stage: release
         dependsOn: build
         condition: eq(variables['Build.Reason'], 'Manual')

From 945745bb92d1a2af4d6c20580f66dc222b1f36c6 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 21 May 2025 16:27:58 -0700
Subject: [PATCH 25/33] Handle OneBranch edge case PowerShell install

---
 .vscode-test.mjs              |  3 ++-
 test/OneBranch.code-workspace | 18 ++++++++++++++++++
 test/core/settings.test.ts    |  7 +++++++
 3 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 test/OneBranch.code-workspace

diff --git a/.vscode-test.mjs b/.vscode-test.mjs
index f7d79eefa4..7b14da081f 100644
--- a/.vscode-test.mjs
+++ b/.vscode-test.mjs
@@ -1,4 +1,5 @@
 import { defineConfig } from "@vscode/test-cli";
+import { existsSync } from "fs";
 
 export default defineConfig({
     files: "test/**/*.test.ts",
@@ -10,7 +11,7 @@ export default defineConfig({
         // Undocumented but valid option to use a temporary profile for testing
         "--profile-temp",
     ],
-    workspaceFolder: "test/TestEnvironment.code-workspace",
+    workspaceFolder: `test/${existsSync("C:\\powershell-7\\pwsh.exe") ? "OneBranch" : "TestEnvironment"}.code-workspace`,
     mocha: {
         ui: "bdd", // describe, it, etc.
         require: ["esbuild-register"], // transpile TypeScript on-the-fly
diff --git a/test/OneBranch.code-workspace b/test/OneBranch.code-workspace
new file mode 100644
index 0000000000..d17440aded
--- /dev/null
+++ b/test/OneBranch.code-workspace
@@ -0,0 +1,18 @@
+{
+  // A simple test environment that suppresses some first start warnings we don't care about.
+  "folders": [
+    {
+      "path": "mocks",
+    },
+  ],
+  "settings": {
+    "git.openRepositoryInParentFolders": "never",
+    "csharp.suppressDotnetRestoreNotification": true,
+    "extensions.ignoreRecommendations": true,
+    // The settings tests account for this fix
+    "powershell.powerShellAdditionalExePaths": {
+      "OneBranch": "C:\\powershell-7\\pwsh.exe",
+    },
+    "powershell.powerShellDefaultVersion": "OneBranch",
+  },
+}
diff --git a/test/core/settings.test.ts b/test/core/settings.test.ts
index 91a98a6dc7..117035a390 100644
--- a/test/core/settings.test.ts
+++ b/test/core/settings.test.ts
@@ -2,6 +2,7 @@
 // Licensed under the MIT License.
 
 import * as assert from "assert";
+import { existsSync } from "fs";
 import * as os from "os";
 import path from "path";
 import * as vscode from "vscode";
@@ -38,6 +39,12 @@ describe("Settings E2E", function () {
 
         it("Loads the correct defaults", function () {
             const testSettings = new Settings();
+            if (existsSync("C:\\powershell-7\\pwsh.exe")) {
+                testSettings.powerShellAdditionalExePaths = {
+                    OneBranch: "C:\\powershell-7\\pwsh.exe",
+                };
+                testSettings.powerShellDefaultVersion = "OneBranch";
+            }
             const actualSettings = getSettings();
             assert.deepStrictEqual(actualSettings, testSettings);
         });

From 774127c69bb9b95431d3d4d5868b714ef91f6276 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Thu, 22 May 2025 13:21:23 -0700
Subject: [PATCH 26/33] Fix startup timeout after adjusting sleeps (#5199)

---
 src/process.ts | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/process.ts b/src/process.ts
index 08ed91e2b4..75314d882c 100644
--- a/src/process.ts
+++ b/src/process.ts
@@ -11,9 +11,6 @@ import { Settings, validateCwdSetting } from "./settings";
 import utils = require("./utils");
 
 export class PowerShellProcess {
-    // This is used to warn the user that the extension is taking longer than expected to startup.
-    private static warnUserThreshold = 30;
-
     private static title = "PowerShell Extension";
 
     public onExited: vscode.Event<void>;
@@ -282,9 +279,9 @@ export class PowerShellProcess {
     private async waitForSessionFile(
         cancellationToken: vscode.CancellationToken,
     ): Promise<IEditorServicesSessionDetails | undefined> {
-        const numOfTries =
-            this.sessionSettings.developer.waitForSessionFileTimeoutSeconds;
-        const warnAt = numOfTries - PowerShellProcess.warnUserThreshold;
+        const numOfTries = // We sleep for 1/5 of a second each try
+            5 * this.sessionSettings.developer.waitForSessionFileTimeoutSeconds;
+        const warnAt = numOfTries - 5 * 30; // Warn at 30 seconds
 
         // Check every second.
         this.logger.writeDebug(
@@ -314,7 +311,7 @@ export class PowerShellProcess {
                 );
             }
 
-            // Wait a bit and try again.
+            // Wait 1/5 of a second and try again
             await utils.sleep(200);
         }
 

From d22bf3d34dfec78432abff4f540c38544c20b042 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Fri, 23 May 2025 13:53:19 -0700
Subject: [PATCH 27/33] Fix workflow does not contain permissions (#5201)

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
---
 .github/workflows/ci-test.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.github/workflows/ci-test.yml b/.github/workflows/ci-test.yml
index fbd38d1088..c53d576379 100644
--- a/.github/workflows/ci-test.yml
+++ b/.github/workflows/ci-test.yml
@@ -1,4 +1,6 @@
 name: CI Tests
+permissions:
+  contents: read
 
 on:
   push:

From 58aa029b811fb3df1b1c07581564a77557a74334 Mon Sep 17 00:00:00 2001
From: Justin Grote <JustinGrote@users.noreply.github.com>
Date: Mon, 9 Jun 2025 14:46:46 -0700
Subject: [PATCH 28/33] Feature: Add sessionName debug setting to allow
 different PS for temp console (#5208)

* Add sessionName debug option to specify PowerShell Session for temporary console

* Fix old name reference
---
 package.json                 | 20 +++++++++++++++++++-
 src/features/DebugSession.ts | 29 +++++++++++++++++++++++++++--
 src/session.ts               | 15 ++++++++++++---
 3 files changed, 58 insertions(+), 6 deletions(-)

diff --git a/package.json b/package.json
index 593678485a..9d3dba87a6 100644
--- a/package.json
+++ b/package.json
@@ -519,7 +519,7 @@
             }
           },
           {
-            "label": "Run Pester Tests (Binary Module)",
+            "label": "PowerShell: Run Pester Tests (Binary Module)",
             "description": "Debug a .NET binary or hybrid module by running Pester tests. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
             "body": {
               "name": "PowerShell: Binary Module Pester Tests",
@@ -529,6 +529,16 @@
               "createTemporaryIntegratedConsole": true,
               "attachDotnetDebugger": true
             }
+          },
+          {
+            "label": "PowerShell: Windows PowerShell",
+            "description": "(Windows Only) Launch a temporary Windows PowerShell console for debugging. This is useful for debugging legacy scripts that require Windows PowerShell.",
+            "body": {
+              "name": "PowerShell: Windows PowerShell",
+              "type": "PowerShell",
+              "request": "launch",
+              "sessionName": "Windows PowerShell (x64)"
+            }
           }
         ],
         "configurationAttributes": {
@@ -556,6 +566,14 @@
                 "description": "Determines whether a temporary PowerShell Extension Terminal is created for each debugging session, useful for debugging PowerShell classes and binary modules.  Overrides the user setting 'powershell.debugging.createTemporaryIntegratedConsole'.",
                 "default": false
               },
+              "sessionName": {
+                "type": [
+                  "string",
+                  "null"
+                ],
+                "description": "If specified, uses the PowerShell session name to launch the debug configuration. Will always launch in a temporary console if specified.",
+                "default": null
+              },
               "attachDotnetDebugger": {
                 "type": "boolean",
                 "description": "If specified, a C# debug session will be started and attached to the new temporary extension terminal. This does nothing unless 'powershell.debugging.createTemporaryIntegratedConsole' is also specified.",
diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts
index f45e674fb9..3128db3b46 100644
--- a/src/features/DebugSession.ts
+++ b/src/features/DebugSession.ts
@@ -56,6 +56,7 @@ export enum DebugConfig {
     ModuleInteractiveSession,
     BinaryModule,
     BinaryModulePester,
+    WindowsPowerShell,
 }
 
 /** Make the implicit behavior of undefined and null in the debug api more explicit  */
@@ -126,6 +127,12 @@ export const DebugConfigurations: Record<DebugConfig, DebugConfiguration> = {
         createTemporaryIntegratedConsole: true,
         attachDotnetDebugger: true,
     },
+    [DebugConfig.WindowsPowerShell]: {
+        name: "PowerShell: Windows PowerShell",
+        type: "PowerShell",
+        request: "launch",
+        sessionName: "Windows PowerShell (x64)",
+    },
 };
 
 export class DebugSessionFeature
@@ -271,13 +278,24 @@ export class DebugSessionFeature
                     "Debug a .NET binary or hybrid module loaded into a PowerShell session. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
             },
             {
-                id: DebugConfig.RunPester,
+                id: DebugConfig.BinaryModulePester,
                 label: "Run Pester Tests (Binary Module)",
                 description:
                     "Debug a .NET binary or hybrid module by running Pester tests. Breakpoints you set in your .NET (C#/F#/VB/etc.) code will be hit upon command execution. You may want to add a compile or watch action as a pre-launch task to this configuration.",
             },
         ];
 
+        // Only show the Windows PowerShell option if the platform is Windows
+        const platformDetails = getPlatformDetails();
+        if (platformDetails.operatingSystem === OperatingSystem.Windows) {
+            debugConfigPickItems.push({
+                id: DebugConfig.WindowsPowerShell,
+                label: "Windows PowerShell",
+                description:
+                    "Launch Windows PowerShell in a temporary integrated console for debugging",
+            });
+        }
+
         const launchSelection = await window.showQuickPick(
             debugConfigPickItems,
             { placeHolder: "Select a PowerShell debug configuration" },
@@ -440,6 +458,10 @@ export class DebugSessionFeature
             return PREVENT_DEBUG_START_AND_OPEN_DEBUGCONFIG;
         }
 
+        if (config.sessionName) {
+            config.createTemporaryIntegratedConsole = true;
+        }
+
         if (config.attachDotnetDebugger) {
             return this.resolveAttachDotnetDebugConfiguration(config);
         }
@@ -477,7 +499,10 @@ export class DebugSessionFeature
     ): Promise<IEditorServicesSessionDetails | undefined> {
         const settings = getSettings();
         this.tempDebugProcess =
-            await this.sessionManager.createDebugSessionProcess(settings);
+            await this.sessionManager.createDebugSessionProcess(
+                settings,
+                session.configuration.sessionName,
+            );
         // TODO: Maybe set a timeout on the cancellation token?
         const cancellationTokenSource = new CancellationTokenSource();
         this.tempSessionDetails = await this.tempDebugProcess.start(
diff --git a/src/session.ts b/src/session.ts
index 80ab66c81f..df8fd9fbe9 100644
--- a/src/session.ts
+++ b/src/session.ts
@@ -442,6 +442,7 @@ export class SessionManager implements Middleware {
 
     public async createDebugSessionProcess(
         settings: Settings,
+        powershellExeName?: string,
     ): Promise<PowerShellProcess> {
         // NOTE: We only support one temporary Extension Terminal at a time. To
         // support more, we need to track each separately, and tie the session
@@ -455,6 +456,12 @@ export class SessionManager implements Middleware {
             );
         }
 
+        const debugPowerShellExeDetails =
+            powershellExeName === undefined
+                ? this.PowerShellExeDetails
+                : ((await this.findPowerShell(powershellExeName)) ??
+                  this.PowerShellExeDetails);
+
         // TODO: It might not be totally necessary to update the session
         // settings here, but I don't want to accidentally change this behavior
         // just yet. Working on getting things to be more idempotent!
@@ -462,7 +469,7 @@ export class SessionManager implements Middleware {
 
         const bundledModulesPath = await this.getBundledModulesPath();
         this.debugSessionProcess = new PowerShellProcess(
-            this.PowerShellExeDetails.exePath,
+            debugPowerShellExeDetails.exePath,
             bundledModulesPath,
             true,
             false,
@@ -716,7 +723,9 @@ export class SessionManager implements Middleware {
         ];
     }
 
-    private async findPowerShell(): Promise<IPowerShellExeDetails | undefined> {
+    private async findPowerShell(
+        wantedName?: string,
+    ): Promise<IPowerShellExeDetails | undefined> {
         this.logger.writeDebug("Finding PowerShell...");
         const powershellExeFinder = new PowerShellExeFinder(
             this.platformDetails,
@@ -727,7 +736,7 @@ export class SessionManager implements Middleware {
         let foundPowerShell: IPowerShellExeDetails | undefined;
         try {
             let defaultPowerShell: IPowerShellExeDetails | undefined;
-            const wantedName = this.sessionSettings.powerShellDefaultVersion;
+            wantedName ??= this.sessionSettings.powerShellDefaultVersion;
             if (wantedName !== "") {
                 for await (const details of powershellExeFinder.enumeratePowerShellInstallations()) {
                     // Need to compare names case-insensitively, from https://stackoverflow.com/a/2140723

From 21114288b8877f033ecc9077b5e6f11bb7a476c9 Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Tue, 17 Jun 2025 15:16:39 -0700
Subject: [PATCH 29/33] Find shell integration module (#5217)

---
 src/utils.ts | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/utils.ts b/src/utils.ts
index b1d4aadfb5..ed858192fa 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -9,8 +9,8 @@ import { satisfies } from "semver";
 export const PowerShellLanguageId = "powershell";
 
 // Path to the shell integration script in the VS Code installation
-// See https://github.com/microsoft/vscode/pull/227244
-const shellIntegrationMoved = satisfies(vscode.version, ">=1.94", {
+// See https://github.com/microsoft/vscode/pull/251303
+const shellIntegrationMoved = satisfies(vscode.version, ">=1.102", {
     includePrerelease: true,
 });
 export const ShellIntegrationScript = path.join(
@@ -20,9 +20,9 @@ export const ShellIntegrationScript = path.join(
     "workbench",
     "contrib",
     "terminal",
-    shellIntegrationMoved ? "common" : "browser",
-    shellIntegrationMoved ? "scripts" : "media",
-    "shellIntegration.ps1",
+    "common",
+    "scripts",
+    shellIntegrationMoved ? "shellIntegration.psm1" : "shellIntegration.ps1",
 );
 
 export function escapeSingleQuotes(p: string): string {

From 82dea7d1cd6a13aeb094a2954ec03f3f3cb2495c Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Tue, 24 Jun 2025 16:01:25 -0700
Subject: [PATCH 30/33] Shell integration script moved back (#5220)

Undoes #5217 (except it's not a revert since we don't need the original logic any more).
Since the change only appeared in Insiders, the check doesn't have to stick around
(literally added and removed without a version bump).
---
 src/utils.ts | 10 +++-------
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/src/utils.ts b/src/utils.ts
index ed858192fa..a3236ebceb 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -4,15 +4,11 @@
 import os = require("os");
 import path = require("path");
 import vscode = require("vscode");
-import { satisfies } from "semver";
 
 export const PowerShellLanguageId = "powershell";
 
-// Path to the shell integration script in the VS Code installation
-// See https://github.com/microsoft/vscode/pull/251303
-const shellIntegrationMoved = satisfies(vscode.version, ">=1.102", {
-    includePrerelease: true,
-});
+// Path to the shell integration script in the VS Code installation.
+// See commit 21114288b if it moves again.
 export const ShellIntegrationScript = path.join(
     vscode.env.appRoot,
     "out",
@@ -22,7 +18,7 @@ export const ShellIntegrationScript = path.join(
     "terminal",
     "common",
     "scripts",
-    shellIntegrationMoved ? "shellIntegration.psm1" : "shellIntegration.ps1",
+    "shellIntegration.ps1",
 );
 
 export function escapeSingleQuotes(p: string): string {

From 4f51f5050a2d21d038681d055c48e0eaabbc46ad Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Tue, 24 Jun 2025 16:08:57 -0700
Subject: [PATCH 31/33] Migrate to Deploy Box Product for release stage (#5063)

* Switch to deploy box product release container
* Don't install Node in release container
* Switch to new VSCE publish workflow
---
 .pipelines/vscode-powershell-Official.yml | 74 +++++++++++------------
 1 file changed, 34 insertions(+), 40 deletions(-)

diff --git a/.pipelines/vscode-powershell-Official.yml b/.pipelines/vscode-powershell-Official.yml
index 3e7b6be52f..155e258706 100644
--- a/.pipelines/vscode-powershell-Official.yml
+++ b/.pipelines/vscode-powershell-Official.yml
@@ -58,6 +58,8 @@ extends:
       WindowsHostVersion:
         Version: 2022
         Network: KS3
+    release:
+      category: NonAzure
     stages:
       - stage: build
         jobs:
@@ -130,33 +132,35 @@ extends:
                   command: sign
                   cp_code: "CP-401405-VSCodePublisherSign"
                   search_root: $(Build.SourcesDirectory)/out
-                  files_to_sign: |
-                    *.signature.p7s;
+                  files_to_sign: "*.signature.p7s"
       - stage: release
         dependsOn: build
         condition: eq(variables['Build.Reason'], 'Manual')
         variables:
+          ob_release_environment: Production
           version: $[ stageDependencies.build.main.outputs['package.version'] ]
           vsixVersion: $[ stageDependencies.build.main.outputs['package.vsixVersion'] ]
           prerelease: $[ stageDependencies.build.main.outputs['package.prerelease'] ]
-          drop: $(Pipeline.Workspace)/drop_build_main
         jobs:
           - job: github
             displayName: Publish draft to GitHub
             pool:
-              type: windows
-            variables:
-              ob_outputDirectory: $(Build.SourcesDirectory)/out
+              type: release
+            templateContext:
+              inputs:
+                - input: pipelineArtifact
+                  artifactName: drop_build_main
             steps:
-              - download: current
-                displayName: Download artifacts
               - task: GitHubRelease@1
                 displayName: Create GitHub release
                 inputs:
                   gitHubConnection: GitHub
                   repositoryName: PowerShell/vscode-powershell
                   target: main
-                  assets: $(drop)/powershell-$(vsixVersion).vsix
+                  assets: |
+                    $(Pipeline.Workspace)/powershell-$(vsixVersion).vsix
+                    $(Pipeline.Workspace)/powershell-$(vsixVersion).manifest
+                    $(Pipeline.Workspace)/powershell-$(vsixVersion).signature.p7s
                   tagSource: userSpecifiedTag
                   tag: v$(version)
                   isDraft: true
@@ -167,7 +171,7 @@ extends:
           - job: validation
             displayName: Manual validation
             pool:
-              type: agentless
+              type: server
             timeoutInMinutes: 1440
             steps:
               - task: ManualValidation@0
@@ -175,38 +179,28 @@ extends:
                 inputs:
                   notifyUsers: $(Build.RequestedForEmail)
                   instructions: Please validate the release and then publish it!
-                  timeoutInMinutes: 1440
           - job: vscode
             dependsOn: validation
             displayName: Publish to VS Code Marketplace
             pool:
-              type: windows
-            variables:
-              ob_outputDirectory: $(Build.SourcesDirectory)/out
+              type: release
+            templateContext:
+              inputs:
+                - input: pipelineArtifact
+                  artifactName: drop_build_main
+              workflow: vsce
+              vsce:
+                serviceConnection: vscode-marketplace
+                vsixPath: "$(Pipeline.Workspace)/powershell-$(vsixVersion).vsix"
+                signaturePath: "$(Pipeline.Workspace)/powershell-$(vsixVersion).signature.p7s"
+                manifestPath: "$(Pipeline.Workspace)/powershell-$(vsixVersion).manifest"
+                preRelease: $(prerelease)
+                useCustomVSCE: true
+                feed:
+                  organization: mscodehub
+                  project: PowerShellCore
+                  feedName: PowerShellCore_PublicPackages
             steps:
-              - download: current
-                displayName: Download artifacts
-              - task: UseNode@1
-                displayName: Use Node 20.x
-                inputs:
-                  version: 20.x
-              - pwsh: npm ci
-                displayName: Install NPM packages (for vsce)
-              - task: AzureCLI@2
-                displayName: Run vsce publish
-                inputs:
-                  azureSubscription: vscode-marketplace
-                  scriptType: pscore
-                  scriptLocation: inlineScript
-                  inlineScript: |
-                    $publishArgs = @(
-                      '--azure-credential'
-                      '--packagePath'
-                      '$(drop)/powershell-$(vsixVersion).vsix'
-                      '--manifestPath'
-                      '$(drop)/powershell-$(vsixVersion).manifest'
-                      '--signaturePath'
-                      '$(drop)/powershell-$(vsixVersion).signature.p7s'
-                      if ([bool]::Parse('$(prerelease)')) { '--pre-release' }
-                    )
-                    npm run publish -- @publishArgs
+              - pwsh: |
+                  Write-Host Publishing: $(vsixVersion), pre-release: $(prerelease)
+                displayName: No-op step to satisfy pipeline requirements

From 5d4929e21bfd873a1a8aefce3da3fcf150c31fdb Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Wed, 25 Jun 2025 13:46:47 -0700
Subject: [PATCH 32/33] v2025.3.1-preview: PowerShell installed via `brew` now
 found! (#5222)

---
 CHANGELOG.md | 9 +++++++++
 package.json | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0bfb89e178..30af07ceb6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # PowerShell Extension Release History
 
+## v2025.3.1-preview
+### Wednesday, June 25, 2025
+
+With PowerShell Editor Services [v4.3.0](https://github.com/PowerShell/PowerShellEditorServices/releases/tag/v4.3.0)!
+
+PowerShell installed via `brew` now found!
+
+See more details at the GitHub Release for [v2025.3.1-preview](https://github.com/PowerShell/vscode-powershell/releases/tag/v2025.3.1-preview).
+
 ## v2025.3.0-preview
 ### Tuesday, March 18, 2025
 
diff --git a/package.json b/package.json
index 9d3dba87a6..ffdc066b9b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "powershell",
   "displayName": "PowerShell",
-  "version": "2025.3.0",
+  "version": "2025.3.1",
   "preview": false,
   "publisher": "ms-vscode",
   "description": "Develop PowerShell modules, commands and scripts in Visual Studio Code!",

From de86fecc6a2d40315f92946b0900313a2f996f4b Mon Sep 17 00:00:00 2001
From: Andy Jordan <2226434+andyleejordan@users.noreply.github.com>
Date: Mon, 30 Jun 2025 13:37:37 -0700
Subject: [PATCH 33/33] v2025.2.0: New stable release! (#5232)

---
 CHANGELOG.md | 9 +++++++++
 package.json | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 30af07ceb6..35e51191bb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # PowerShell Extension Release History
 
+## v2025.2.0
+### Monday, June 30, 2025
+
+With PowerShell Editor Services [v4.3.0](https://github.com/PowerShell/PowerShellEditorServices/releases/tag/v4.3.0)!
+
+New stable release!
+
+See more details at the GitHub Release for [v2025.2.0](https://github.com/PowerShell/vscode-powershell/releases/tag/v2025.2.0).
+
 ## v2025.3.1-preview
 ### Wednesday, June 25, 2025
 
diff --git a/package.json b/package.json
index ffdc066b9b..1bb18aa9f0 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "powershell",
   "displayName": "PowerShell",
-  "version": "2025.3.1",
+  "version": "2025.2.0",
   "preview": false,
   "publisher": "ms-vscode",
   "description": "Develop PowerShell modules, commands and scripts in Visual Studio Code!",
