From 3f0adf6b87a0bdadbfe3bbeaf139a7aa6021acbf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 19:40:08 +0000 Subject: [PATCH 01/15] Initial plan From 1eea8f9294518fec985caffbdf76c895089a9579 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 19:44:54 +0000 Subject: [PATCH 02/15] Rebrand Playwright on Codespaces to Playwright Local Browser Server - Renamed directory from playwright-on-codespaces-vscode-extension to playwright-local-browser-server-vscode-extension - Updated rush.json with new package name and project folder - Updated package.json: name, displayName, description, repository path, homepage, command categories - Updated extension.ts: EXTENSION_DISPLAY_NAME and terminal names - Updated utilities.ts: EXTENSION_INSTALLED_FILENAME and comments - Updated README files in vscode extension and playwright-browser-tunnel - Updated main README.md with new paths and descriptions Co-authored-by: TheLarkInn <3408176+TheLarkInn@users.noreply.github.com> --- README.md | 2 +- apps/playwright-browser-tunnel/README.md | 8 ++++---- .../src/utilities.ts | 8 ++++---- rush.json | 4 ++-- .../.npmignore | 0 .../.vscodeignore | 0 .../LICENSE | 0 .../README.md | 12 ++++++------ .../assets/extension-icon.png | Bin .../assets/extension-icon.svg | 0 .../config/heft.json | 0 .../config/rig.json | 0 .../config/rush-project.json | 0 .../eslint.config.js | 0 .../package.json | 18 +++++++++--------- .../src/extension.ts | 4 ++-- .../src/utils/getNormalizedErrorString.ts | 0 .../tsconfig.json | 0 .../webpack.config.js | 0 19 files changed, 28 insertions(+), 28 deletions(-) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/.npmignore (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/.vscodeignore (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/LICENSE (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/README.md (89%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/assets/extension-icon.png (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/assets/extension-icon.svg (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/config/heft.json (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/config/rig.json (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/config/rush-project.json (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/eslint.config.js (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/package.json (83%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/src/extension.ts (99%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/src/utils/getNormalizedErrorString.ts (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/tsconfig.json (100%) rename vscode-extensions/{playwright-on-codespaces-vscode-extension => playwright-local-browser-server-vscode-extension}/webpack.config.js (100%) diff --git a/README.md b/README.md index dbd56229562..a3835b2125e 100644 --- a/README.md +++ b/README.md @@ -234,7 +234,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/rigs/local-web-rig](./rigs/local-web-rig/) | A rig package for Web projects that build using Heft inside the RushStack repository. | | [/rush-plugins/rush-litewatch-plugin](./rush-plugins/rush-litewatch-plugin/) | An experimental alternative approach for multi-project watch mode | | [/vscode-extensions/debug-certificate-manager-vscode-extension](./vscode-extensions/debug-certificate-manager-vscode-extension/) | VS Code extension to manage debug TLS certificates and sync them to the VS Code workspace. Works with VS Code remote development (Codespaces, SSH, Dev Containers, WSL, VS Code Tunnels). | -| [/vscode-extensions/playwright-on-codespaces-vscode-extension](./vscode-extensions/playwright-on-codespaces-vscode-extension/) | VS Code extension to enable Playwright testing in GitHub Codespaces. | +| [/vscode-extensions/playwright-local-browser-server-vscode-extension](./vscode-extensions/playwright-local-browser-server-vscode-extension/) | VS Code extension to enable Playwright testing in remote VS Code environments (such as GitHub Codespaces) while launching and driving the actual browser process on your local machine. | | [/vscode-extensions/rush-vscode-command-webview](./vscode-extensions/rush-vscode-command-webview/) | Part of the Rush Stack VSCode extension, provides a UI for invoking Rush commands | | [/vscode-extensions/rush-vscode-extension](./vscode-extensions/rush-vscode-extension/) | Enhanced experience for monorepos that use the Rush Stack toolchain | | [/vscode-extensions/vscode-shared](./vscode-extensions/vscode-shared/) | | diff --git a/apps/playwright-browser-tunnel/README.md b/apps/playwright-browser-tunnel/README.md index a06c0b31923..dd56ae77dcc 100644 --- a/apps/playwright-browser-tunnel/README.md +++ b/apps/playwright-browser-tunnel/README.md @@ -5,9 +5,9 @@ Run a Playwright browser server in one environment and drive it from another env This package is intended for remote development / CI scenarios (for example: Codespaces, devcontainers, or a separate “browser host” machine) where you want tests to run “here” but the actual browser process to run “there”. -## Relationship to the Playwright on Codespaces VS Code extension +## Relationship to the Playwright Local Browser Server VS Code extension -This package is the core tunneling/runtime layer used by the **Playwright on Codespaces** VS Code extension (located at [vscode-extensions/playwright-on-codespaces-vscode-extension](../../vscode-extensions/playwright-on-codespaces-vscode-extension)). +This package is the core tunneling/runtime layer used by the **Playwright Local Browser Server** VS Code extension (located at [vscode-extensions/playwright-local-browser-server-vscode-extension](../../vscode-extensions/playwright-local-browser-server-vscode-extension)). In a typical Codespaces workflow: @@ -23,7 +23,7 @@ The extension provides a UI wrapper around this library (start/stop commands, st Some remote test fixtures want to detect whether the **Playwright on Codespaces** extension is installed/active (for example, to skip local-browser-only scenarios when the extension isn’t available). -The extension writes a marker file named `.playwright-codespaces-extension-installed.txt` into the remote environment’s `os.tmpdir()` using VS Code’s remote filesystem APIs. +The extension writes a marker file named `.playwright-local-browser-server-extension-installed.txt` into the remote environment’s `os.tmpdir()` using VS Code’s remote filesystem APIs. On the remote side, `isExtensionInstalledAsync()` checks for that marker file and returns `true` if it exists: @@ -31,7 +31,7 @@ On the remote side, `isExtensionInstalledAsync()` checks for that marker file an import { isExtensionInstalledAsync } from '@rushstack/playwright-browser-tunnel'; if (!(await isExtensionInstalledAsync())) { - throw new Error('Playwright on Codespaces extension is not installed/active in this environment'); + throw new Error('Playwright Local Browser Server extension is not installed/active in this environment'); } ``` diff --git a/apps/playwright-browser-tunnel/src/utilities.ts b/apps/playwright-browser-tunnel/src/utilities.ts index a53ec043fce..bd3e9ea3fbd 100644 --- a/apps/playwright-browser-tunnel/src/utilities.ts +++ b/apps/playwright-browser-tunnel/src/utilities.ts @@ -6,18 +6,18 @@ import { tmpdir } from 'node:os'; import { FileSystem } from '@rushstack/node-core-library'; /** - * The filename used to indicate that the Playwright on Codespaces extension is installed. + * The filename used to indicate that the Playwright Local Browser Server extension is installed. * @beta */ -export const EXTENSION_INSTALLED_FILENAME: string = '.playwright-codespaces-extension-installed.txt'; +export const EXTENSION_INSTALLED_FILENAME: string = '.playwright-local-browser-server-extension-installed.txt'; /** - * Helper to determine if the Playwright on Codespaces extension is installed. This check's for the + * Helper to determine if the Playwright Local Browser Server extension is installed. This check's for the * existence of a well-known file in the OS temp directory. * @beta */ export async function isExtensionInstalledAsync(): Promise { - // Read file from os.tempdir() + '/.playwright-codespaces-extension-installed' + // Read file from os.tempdir() + '/.playwright-local-browser-server-extension-installed' const tempDir: string = tmpdir(); const extensionInstalledFilePath: string = `${tempDir}/${EXTENSION_INSTALLED_FILENAME}`; diff --git a/rush.json b/rush.json index 12aee249709..ab816fc21f5 100644 --- a/rush.json +++ b/rush.json @@ -1478,8 +1478,8 @@ "tags": ["vsix"] }, { - "packageName": "playwright-on-codespaces", - "projectFolder": "vscode-extensions/playwright-on-codespaces-vscode-extension", + "packageName": "playwright-local-browser-server", + "projectFolder": "vscode-extensions/playwright-local-browser-server-vscode-extension", "reviewCategory": "vscode-extensions", "tags": ["vsix"] }, diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/.npmignore b/vscode-extensions/playwright-local-browser-server-vscode-extension/.npmignore similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/.npmignore rename to vscode-extensions/playwright-local-browser-server-vscode-extension/.npmignore diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/.vscodeignore b/vscode-extensions/playwright-local-browser-server-vscode-extension/.vscodeignore similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/.vscodeignore rename to vscode-extensions/playwright-local-browser-server-vscode-extension/.vscodeignore diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/LICENSE b/vscode-extensions/playwright-local-browser-server-vscode-extension/LICENSE similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/LICENSE rename to vscode-extensions/playwright-local-browser-server-vscode-extension/LICENSE diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/README.md b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md similarity index 89% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/README.md rename to vscode-extensions/playwright-local-browser-server-vscode-extension/README.md index 2869e1fc8b6..c4615013856 100644 --- a/vscode-extensions/playwright-on-codespaces-vscode-extension/README.md +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md @@ -1,4 +1,4 @@ -# Playwright on Codespaces VS Code Extension +# Playwright Local Browser Server VS Code Extension Enables running Playwright tests in a remote VS Code environment (such as GitHub Codespaces) while launching and driving the actual browser process on your local machine. @@ -42,7 +42,7 @@ export const test = base.extend({ ## How `extensionIsInstalled()` works with this extension -To help remote test code detect whether this extension is installed/active, the extension writes a marker file named `.playwright-codespaces-extension-installed.txt` into the remote environment’s `os.tmpdir()` when VS Code is connected to a remote workspace. +To help remote test code detect whether this extension is installed/active, the extension writes a marker file named `.playwright-local-browser-server-extension-installed.txt` into the remote environment’s `os.tmpdir()` when VS Code is connected to a remote workspace. On the test (remote) side, you can call `extensionIsInstalled()` from `@rushstack/playwright-browser-tunnel`, which simply checks for that marker file: @@ -51,7 +51,7 @@ import { extensionIsInstalled } from '@rushstack/playwright-browser-tunnel'; if (!(await extensionIsInstalled())) { throw new Error( - 'Playwright on Codespaces VS Code extension not detected. Install/enable it and ensure VS Code is connected to the remote workspace.' + 'Playwright Local Browser Server VS Code extension not detected. Install/enable it and ensure VS Code is connected to the remote workspace.' ); } ``` @@ -127,9 +127,9 @@ This extension contributes the following commands: - **Playwright: Start Playwright Browser Tunnel** (`playwright-tunnel.start`) - **Playwright: Stop Playwright Browser Tunnel** (`playwright-tunnel.stop`) -- **Playwright on Codespaces: Show Log** (`playwright-tunnel.showLog`) -- **Playwright on Codespaces: Show Settings** (`playwright-tunnel.showSettings`) -- **Playwright on Codespaces: Show Tunnel Menu** (`playwright-tunnel.showMenu`) — status bar menu +- **Playwright Local Browser Server: Show Log** (`playwright-tunnel.showLog`) +- **Playwright Local Browser Server: Show Settings** (`playwright-tunnel.showSettings`) +- **Playwright Local Browser Server: Show Tunnel Menu** (`playwright-tunnel.showMenu`) — status bar menu ## Settings diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/assets/extension-icon.png b/vscode-extensions/playwright-local-browser-server-vscode-extension/assets/extension-icon.png similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/assets/extension-icon.png rename to vscode-extensions/playwright-local-browser-server-vscode-extension/assets/extension-icon.png diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/assets/extension-icon.svg b/vscode-extensions/playwright-local-browser-server-vscode-extension/assets/extension-icon.svg similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/assets/extension-icon.svg rename to vscode-extensions/playwright-local-browser-server-vscode-extension/assets/extension-icon.svg diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/config/heft.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/config/heft.json similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/config/heft.json rename to vscode-extensions/playwright-local-browser-server-vscode-extension/config/heft.json diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/config/rig.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/config/rig.json similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/config/rig.json rename to vscode-extensions/playwright-local-browser-server-vscode-extension/config/rig.json diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/config/rush-project.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/config/rush-project.json similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/config/rush-project.json rename to vscode-extensions/playwright-local-browser-server-vscode-extension/config/rush-project.json diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/eslint.config.js b/vscode-extensions/playwright-local-browser-server-vscode-extension/eslint.config.js similarity index 100% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/eslint.config.js rename to vscode-extensions/playwright-local-browser-server-vscode-extension/eslint.config.js diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/package.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json similarity index 83% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/package.json rename to vscode-extensions/playwright-local-browser-server-vscode-extension/package.json index a16ecaaa74e..ba3b8101fc2 100644 --- a/vscode-extensions/playwright-on-codespaces-vscode-extension/package.json +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json @@ -1,17 +1,17 @@ { - "name": "playwright-on-codespaces", + "name": "playwright-local-browser-server", "version": "0.0.1", "repository": { "type": "git", "url": "https://github.com/microsoft/rushstack.git", - "directory": "vscode-extensions/playwright-on-codespaces-vscode-extension" + "directory": "vscode-extensions/playwright-local-browser-server-vscode-extension" }, "license": "MIT", "publisher": "ms-RushStack", "preview": true, - "displayName": "Playwright on Codespaces", - "description": "VS Code extension to enable Playwright testing in GitHub Codespaces.", - "homepage": "https://github.com/microsoft/rushstack/tree/main/vscode-extensions/playwright-on-codespaces-vscode-extension", + "displayName": "Playwright Local Browser Server", + "description": "VS Code extension to enable Playwright testing in remote VS Code environments (such as GitHub Codespaces) while launching and driving the actual browser process on your local machine.", + "homepage": "https://github.com/microsoft/rushstack/tree/main/vscode-extensions/playwright-local-browser-server-vscode-extension", "icon": "assets/extension-icon.png", "extensionKind": [ "ui" @@ -52,22 +52,22 @@ { "command": "playwright-tunnel.manageAllowlist", "title": "Manage Launch Options Allowlist", - "category": "Playwright on Codespaces" + "category": "Playwright Local Browser Server" }, { "command": "playwright-tunnel.showLog", "title": "Show Log", - "category": "Playwright on Codespaces" + "category": "Playwright Local Browser Server" }, { "command": "playwright-tunnel.showSettings", "title": "Show Settings", - "category": "Playwright on Codespaces" + "category": "Playwright Local Browser Server" }, { "command": "playwright-tunnel.showMenu", "title": "Show Tunnel Menu", - "category": "Playwright on Codespaces" + "category": "Playwright Local Browser Server" } ], "configuration": { diff --git a/vscode-extensions/playwright-on-codespaces-vscode-extension/src/extension.ts b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts similarity index 99% rename from vscode-extensions/playwright-on-codespaces-vscode-extension/src/extension.ts rename to vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts index fcadde1b218..362a77511c6 100644 --- a/vscode-extensions/playwright-on-codespaces-vscode-extension/src/extension.ts +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts @@ -26,7 +26,7 @@ import { runWorkspaceCommandAsync } from '@rushstack/vscode-shared/lib/runWorksp import { VScodeOutputChannelTerminalProvider } from '@rushstack/vscode-shared/lib/VScodeOutputChannelTerminalProvider'; import packageJson from '../package.json'; -const EXTENSION_DISPLAY_NAME: string = 'Playwright on Codespaces'; +const EXTENSION_DISPLAY_NAME: string = 'Playwright Local Browser Server'; const COMMAND_SHOW_LOG: string = 'playwright-tunnel.showLog'; const COMMAND_SHOW_SETTINGS: string = 'playwright-tunnel.showSettings'; const COMMAND_START_TUNNEL: string = 'playwright-tunnel.start'; @@ -45,7 +45,7 @@ async function writeExtensionInstalledFileAsync(terminal: ITerminal): Promise Date: Fri, 30 Jan 2026 19:48:35 +0000 Subject: [PATCH 03/15] Update pnpm-lock.yaml after rebrand and verify build Co-authored-by: TheLarkInn <3408176+TheLarkInn@users.noreply.github.com> --- .../config/subspaces/default/pnpm-lock.yaml | 36 +++++++++---------- .../config/subspaces/default/repo-state.json | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 1f548223a28..9f5e83a6330 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -783,7 +783,7 @@ importers: version: 6.4.22(@types/react@17.0.74)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/cli': specifier: ~6.4.18 - version: 6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2) + version: 6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2) '@storybook/components': specifier: ~6.4.18 version: 6.4.22(@types/react@17.0.74)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -819,7 +819,7 @@ importers: version: 5.2.7(webpack@4.47.0) jest: specifier: ~29.3.1 - version: 29.3.1(@types/node@20.17.19) + version: 29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0) react: specifier: ~17.0.2 version: 17.0.2 @@ -1005,7 +1005,7 @@ importers: version: 5.2.7(webpack@5.103.0) jest: specifier: ~29.3.1 - version: 29.3.1(@types/node@20.17.19) + version: 29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0) react: specifier: ~19.2.3 version: 19.2.4 @@ -5189,7 +5189,7 @@ importers: specifier: 1.18.8 version: 1.18.8 - ../../../vscode-extensions/playwright-on-codespaces-vscode-extension: + ../../../vscode-extensions/playwright-local-browser-server-vscode-extension: dependencies: '@rushstack/node-core-library': specifier: workspace:* @@ -22376,7 +22376,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -22390,7 +22390,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.9.3) + jest-config: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -25101,7 +25101,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/cli@6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2)': + '@storybook/cli@6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2)': dependencies: '@babel/core': 7.20.12 '@babel/preset-env': 7.28.6(@babel/core@7.20.12) @@ -25121,7 +25121,7 @@ snapshots: fs-extra: 9.1.0 get-port: 5.1.1 globby: 11.1.0 - jest: 29.3.1(@types/node@20.17.19) + jest: 29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0) jscodeshift: 0.13.1(@babel/preset-env@7.28.6(@babel/core@7.20.12)) json5: 2.2.3 leven: 3.1.0 @@ -28714,13 +28714,13 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 - create-jest@29.7.0(@types/node@20.17.19): + create-jest@29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.19) + jest-config: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -32086,16 +32086,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.17.19): + jest-cli@29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0): dependencies: - '@jest/core': 29.7.0 + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) '@jest/test-result': 29.7.0(@types/node@20.17.19) '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.19) + create-jest: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.19) + jest-config: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -32165,7 +32165,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.17.19): + jest-config@29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0): dependencies: '@babel/core': 7.20.12 '@jest/test-sequencer': 29.7.0(@types/node@20.17.19) @@ -32195,7 +32195,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.9.3): + jest-config@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0): dependencies: '@babel/core': 7.20.12 '@jest/test-sequencer': 29.7.0(@types/node@22.9.3) @@ -32583,12 +32583,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.3.1(@types/node@20.17.19): + jest@29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0): dependencies: '@jest/core': 29.5.0(babel-plugin-macros@3.1.0) '@jest/types': 29.5.0 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.19) + jest-cli: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 485952c12d6..22b2e7b7d96 100644 --- a/common/config/subspaces/default/repo-state.json +++ b/common/config/subspaces/default/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "b0dbc9dd6df6e790055edb199b9d85eb3a0f200f", + "pnpmShrinkwrapHash": "a57360b3a8546b77bfad2b8bcb58a05dbad53247", "preferredVersionsHash": "a9b67c38568259823f9cfb8270b31bf6d8470b27" } From 4b985c843b345416682c8de7f4aea39cdf53e73c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 30 Jan 2026 19:51:13 +0000 Subject: [PATCH 04/15] Address code review feedback - Fix autoStart default value documentation (false, not true) - Update LICENSE file with new package name - Update extension.ts marker file comment - Fix remaining "Playwright on Codespaces" reference in README - Fix typo: "check's" -> "checks" in utilities.ts Co-authored-by: TheLarkInn <3408176+TheLarkInn@users.noreply.github.com> --- apps/playwright-browser-tunnel/README.md | 2 +- apps/playwright-browser-tunnel/src/utilities.ts | 5 +++-- .../playwright-local-browser-server-vscode-extension/LICENSE | 2 +- .../README.md | 2 +- .../src/extension.ts | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/playwright-browser-tunnel/README.md b/apps/playwright-browser-tunnel/README.md index dd56ae77dcc..fdf26a20672 100644 --- a/apps/playwright-browser-tunnel/README.md +++ b/apps/playwright-browser-tunnel/README.md @@ -21,7 +21,7 @@ The extension provides a UI wrapper around this library (start/stop commands, st ### Detecting whether the VS Code extension is present -Some remote test fixtures want to detect whether the **Playwright on Codespaces** extension is installed/active (for example, to skip local-browser-only scenarios when the extension isn’t available). +Some remote test fixtures want to detect whether the **Playwright Local Browser Server** extension is installed/active (for example, to skip local-browser-only scenarios when the extension isn’t available). The extension writes a marker file named `.playwright-local-browser-server-extension-installed.txt` into the remote environment’s `os.tmpdir()` using VS Code’s remote filesystem APIs. diff --git a/apps/playwright-browser-tunnel/src/utilities.ts b/apps/playwright-browser-tunnel/src/utilities.ts index bd3e9ea3fbd..f186a6ffe65 100644 --- a/apps/playwright-browser-tunnel/src/utilities.ts +++ b/apps/playwright-browser-tunnel/src/utilities.ts @@ -9,10 +9,11 @@ import { FileSystem } from '@rushstack/node-core-library'; * The filename used to indicate that the Playwright Local Browser Server extension is installed. * @beta */ -export const EXTENSION_INSTALLED_FILENAME: string = '.playwright-local-browser-server-extension-installed.txt'; +export const EXTENSION_INSTALLED_FILENAME: string = + '.playwright-local-browser-server-extension-installed.txt'; /** - * Helper to determine if the Playwright Local Browser Server extension is installed. This check's for the + * Helper to determine if the Playwright Local Browser Server extension is installed. This checks for the * existence of a well-known file in the OS temp directory. * @beta */ diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/LICENSE b/vscode-extensions/playwright-local-browser-server-vscode-extension/LICENSE index 71e4fb5cb8d..abe0b832913 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/LICENSE +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/LICENSE @@ -1,4 +1,4 @@ -playwright-on-codespaces +playwright-local-browser-server Copyright (c) Microsoft Corporation. All rights reserved. diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md index c4615013856..f32dcf9c8de 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md @@ -133,7 +133,7 @@ This extension contributes the following commands: ## Settings -- `playwright-tunnel.autoStart` (default: `true`) — automatically starts the tunnel when the extension activates. +- `playwright-tunnel.autoStart` (default: `false`) — automatically starts the tunnel when the extension activates. - `playwright-tunnel.tunnelPort` (default: `3000`) — port used by the remote tunnel server. ## Notes diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts index 362a77511c6..bb9f32f8555 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts @@ -75,7 +75,7 @@ async function writeExtensionInstalledFileAsync(terminal: ITerminal): Promise Date: Fri, 30 Jan 2026 19:52:49 +0000 Subject: [PATCH 05/15] Complete documentation for commands and settings - Add missing manageAllowlist command to README - Add missing promptBeforeLaunch setting documentation Co-authored-by: TheLarkInn <3408176+TheLarkInn@users.noreply.github.com> --- .../playwright-local-browser-server-vscode-extension/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md index f32dcf9c8de..436f2166d63 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md @@ -127,6 +127,7 @@ This extension contributes the following commands: - **Playwright: Start Playwright Browser Tunnel** (`playwright-tunnel.start`) - **Playwright: Stop Playwright Browser Tunnel** (`playwright-tunnel.stop`) +- **Playwright Local Browser Server: Manage Launch Options Allowlist** (`playwright-tunnel.manageAllowlist`) - **Playwright Local Browser Server: Show Log** (`playwright-tunnel.showLog`) - **Playwright Local Browser Server: Show Settings** (`playwright-tunnel.showSettings`) - **Playwright Local Browser Server: Show Tunnel Menu** (`playwright-tunnel.showMenu`) — status bar menu @@ -134,6 +135,7 @@ This extension contributes the following commands: ## Settings - `playwright-tunnel.autoStart` (default: `false`) — automatically starts the tunnel when the extension activates. +- `playwright-tunnel.promptBeforeLaunch` (default: `true`) — show a confirmation prompt before launching the browser server with the requested launch options. This helps protect against potentially malicious launch options from compromised environments. - `playwright-tunnel.tunnelPort` (default: `3000`) — port used by the remote tunnel server. ## Notes From bcf8ab35cdce0efa0ddbedf20dcd5e092ab8c876 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 20:18:33 +0000 Subject: [PATCH 06/15] fix assets and comment --- .vscode/launch.json | 8 +-- .../assets/extension-icon.png | Bin 7601 -> 6446 bytes .../assets/extension-icon.svg | 50 ++++++++++++------ .../src/extension.ts | 2 +- 4 files changed, 40 insertions(+), 20 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 5cc1c9a526d..08cf41ccf2b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -119,16 +119,16 @@ ] }, { - "name": "Launch Playwright on Codespaces VS Code Extension", + "name": "Launch Playwright Local Browser Server VS Code Extension", "type": "extensionHost", "request": "launch", - "cwd": "${workspaceFolder}/vscode-extensions/playwright-on-codespaces-vscode-extension/dist/vsix/unpacked", + "cwd": "${workspaceFolder}/vscode-extensions/playwright-local-browser-server-vscode-extension/dist/vsix/unpacked", "args": [ - "--extensionDevelopmentPath=${workspaceFolder}/vscode-extensions/playwright-on-codespaces-vscode-extension/dist/vsix/unpacked" + "--extensionDevelopmentPath=${workspaceFolder}/vscode-extensions/playwright-local-browser-server-vscode-extension/dist/vsix/unpacked" ], "sourceMaps": true, "outFiles": [ - "${workspaceFolder}/vscode-extensions/playwright-on-codespaces-vscode-extension/**/*.js" + "${workspaceFolder}/vscode-extensions/playwright-local-browser-server-vscode-extension/**/*.js" ] } ] diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/assets/extension-icon.png b/vscode-extensions/playwright-local-browser-server-vscode-extension/assets/extension-icon.png index a5b08a53ff6b0d5bcfde079545f7218b25f036fc..a8ed50697922e2bea06d75ea2c6aa7cb022467de 100644 GIT binary patch delta 6418 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 V;5M2ViwFw~OI=x8sY1ab_&?bUVPyaS delta 7582 zcmai(Wl+>#*#2qhSW;480qO2WQdmNekOm29B&6gE3rGko(%ni(N=q#Z(%s$Cu{20M z{QfilH_w~rygv7JedfAn&YYR6LZDhQ?kzy4tfnZh=Yx7^>KjLE;QQE`?SDMwVDOGE z`Mp{_Gh>J|8N;t{ucBjM#3odHNn~oJ#doMldT&Y!RaJHJUc3cAvdFoI;;P|7o8p$>h<9L*`(SOZ@W)Nfj4cRJlmfi@(W4|#tWV$^h_*F2rf;m9DfF` z{F(hK+H~_n>cheb=c(z?YQ-fm>^(fON4Iu}bBD$le^F?(q_8W=PEv1`?*O9sh|4SfZPF?yDeH3wyrc>+Uj= zw)J*I74`lqX6dR8!N!WxQ-qBU>#}IvgY00)kQo@WssberJ&nM}Y(# zCoJVevIncL7!+i8j7-xay%j$|o77)J2~pF7OgdB^=H$oG6k>n?PPgxlW_3ZQF1K?$osc#?P(VtOp-A%jk#PHSh!qVUhwe-8Q4 z7=<{BfILQC?i5UFMvH$3mS#T1?S1D;hiP9RLe2YwwCriB5_!q}7ip7Ll-ztVUtj>1?!;^GiiY44j5mitg@sZlRj-wp%MI&4@b<{UPbm6 zwXLj|dffY0(|_g^1<@Evc z!EXX01Bw%rii@dBK>}qix!a*y=@#{j=}$ugC`n-C>u7k8NX?L~xI?sCeRTPzJ^WNO)deizpa&2c8F z>LH40+LfJ24FOz*we51@Qv`vcu`yjS$y;nMcb$#AGr9bST83|>?$cdi-@3Q(O6sNa zU}xV0c{9*1{N8YQXcIlfUJOS{FwC^@!|DoHnDM!#2*(PA5J3g8d5^1OJM7S6Wxnri zpFMJ`I?bqD&FsT9OWZeh_ZxPtLw(KXe9wEZZV&3E0nvsWj|j2Lu)yymrApx_SW8PX zm&*!JbMr|K159&$D*dI`bg+=HpJ8my+m)jj)o4N?q6cUn3k@Cu9Z71D-*-un1KD8` z^aybZwA_o3K=&0l5R>`aPT}2r>(^iVHg9+|iT$ z>I-3(4CM#LlB~`bjPH5+K}z$ElZ0XX>}Y4QumXx&XL^gFAb7dxmR|LrEI0|+SYsty zvPPwoBx-UC!M%cIV^UOao;+CXjZnMUn;DYvGJ~Z5%GaLTmW2EmZo|`JmDG_FUTyLR zJ{^p_pqO&dBLLeaK0{3N7T;o5ED7zS5}Z=!b>`H4jzNbgpiqmH8rLI@~-k z_e?ioipqj{y7sbqq0fv!$ebEk&FRfM%qukKi2dakqgj*vMus#|+Cv{(oSl!md~mmW z;!~vg(gAGTw@-t}P56yIRX;2zCJdxv_2yX+3U^F3o(&pq`J#g4k1QRQf%!(_9&!tm~1@3T5oAuE3a^d)s|psE<)(bR4X z3?y}m-fUp}$SE~FY_{h_L+-37cu)P%$+Ze}4mo5Zl$sAj%CZ-3kG*-Cy@7xp;#^PB zMb37>-*V5;0+JGh_I%GPDV)hM@h?@Xel%F5^C+&y7`tY5oGkp{_1HCC5i_ZP~c4Z z8)AANY{`(x6@l}&tb`((*L!#Nq+n8#b8m9=6fHIzjRWV}1IHpJZo2zSzrapO3f1d2 zTyn2y#;hn9X*_5+0XahFl!=@Y&V|6eE{_x$sZK;Tx+S!!R2=V|0LL((92Cf|Er;mi zHk=*xyt6>F%W)|~PI=`*h-3ULv4#a@P&$de%7iI6`=0-<3=4hyu`-GfP00=8<)}?y z?7W`9@e?w;-ZQahHdGnGl|DxWzr&<>@Ves3wS%y$zW5ndP$=jqhD5JL_N0RYyrk^~ z4fC3l#3k7(=PcHM6*$6tKVy_sK5b+&9O1xtDC;2>EEt~77NG1;9s+gK3SE-wz7#RO zsX?v;jG+DdvZz!5mH7B49TikW#IiGHvL-k`fYBI6wu9u@X-KiB#xcBZ_tV0<2L~AQ z65ie`X~)#^KeAKb6cLJ=U+>M2Dvwrs^`eNEA(}yBrzX3vEzwBKIa}oG4ND3k$zEK@@!UP!PK2&5Zpr(dV39O7%0|oAB8W{+6%0F0T%G)|eY8`kXAh_|TV35lf~M z?K-`iuTyEY(vG`izB& z#g@V{afj}b>YS6>5Pun#)L!^ehRX3plMPJWw2v^4NY=QWsWJm)Uv&rgOn@Vsmq6=R zLEY(dWvjd5R&G|_{%m{e3_^nN`x~3g*HapqGCtXpRl92z#U~IZArxEyd^lKF=PO6c z=a-j5F%xMsEL(nGy*f8W(SU9St&bX&(M8qs8RveJTctt4uE88r%?<$vkU;@e-T$t#V!Tvb7(cYm-byFle|4?Clz03P{#*PR@Fk3Ju1 zklj>A_>ui!cF4(L2XazQld71{X^Y%qT79J7&>Xy{a;qH$Kxj_pq@54h0Xu`wwKT;N z_I=M7%+cweS3V91kPJujS{$Zh&?~2a7LVFmj9&H?CQP-6r+U0zR9joyCgkRk%O*Mh z@h$q~?P48@Mz7kVrY4uOLRpk8>glC}p10s=D<|x1MZvUq-VM3a4yY#A@rAKx@I{{0 z>29XMM7z^~^wfS!9#eP$Df?jjg#9aFVcwMwdz*)c%6ME~8jiT~dDl|7hmM9@4FsXd zZr~e#|MhXP@F|4)2Oz)VO5fkY+?;l%CrUnDUu@*kHk%o8KP4E`YNRXZJGjk4FS9@{ z=Ek@is%wjR8EsPLb?NeLRx;h=&8X%2OyIM?!_7?qG+)4m#s7J?)N6|At(|_A1DeSM zGav1k=q%mE0sbt_ZDrAzTNROewopf(23gS#iDp{-+8#Zt;-d7M3e-zy?zIQgu+x1n ze-wOkGqK$@1VW%ItNHHMc6O%t+1t-GK7*av?^9(PHln3J(;Vk~*ZCI`xmEmnINv?^ zuNp2Jz_6G|c!s{^DKaIcxVuBpDucz&wX7lzA10knyhcgMEoLrZ3`uJBFK?BiwEJH zt`bIne))x{>71@;#UWE@?m6uEeQ`A8VvqLlfX{GV|DYC~Nt$282H)8!+8aSsG{vqL z@uk>t`DF7|27Ij^e!BwXUob_@R!h>hLd7UVQUXIK`BgA*nFb}3KA_t}f0tOp`|i@( zhlg;P;HO54!#Wnfyi9-NCh+$@8ft-yt44c%zt|1_IYHc@ZOcuv?BR_ee$F*KnM_=| z2kc;z3w@D({y;2HwnXH(ztObi-+z_{8m46W5xyKL7y9z-;LywW*Wz3a4yTOEm)HA5 zbY^Lff0#ZbM%!mG@KNd@wmo>>N2Rh3^}xjYW5^Dvl?utp=|IA8lo0{l2 zA3Wj6W_8`~JolH#_Tql_9h2N2?e`17lDgTyx*B5tIj<-O9NZi?D z-UUhF%g1l|s+N#<7NvHPS2Z)k-f01tD`bsSnQD5Dq*X*Go7Cm?D*={cun1G&Th9;K z-U73y&(T2u*XWfI=Rs-G@c7Qw3e9eJv{qips>9lJ;=iTn7vyw$;E>U5T#-$-%mEcQ zA-V#c1&ur)E68=%>e}IN}dx_*kdjOhkN8 zlHCZQM}CuzZe4K{N{huB?`smkDY9Sga6XcJ+;e7enitut=h05K(#wr=DWZf_r`6O{ z`L?<;;<=_&IzGfpR#IwMIA&-L-Rz{1zI)9v$-gv)eVG}-qZV{GfD;{K*H0@t6R5Id z1m-2mYku-r>~&uhZTI-;)W%nklShE0Y0hxPa-rtHTvC~)bi@7D-v>y#3Bd+A0LWp; zzElg)csK2-R4^+}uf)L{7ny?h3;B-L4n|I5YEV3H*=(Xsj(Y0L5RT_=RaIAK34!~W ze}2EeEX;K>vSE+gSa|Dr-^5qFfo+-uw%;BQw3a*vR36*%kfI)t#A~73y>%(Nbec%X>p>~Jfx>M=l(k4o!>znEGYzQc%8`YD| zaQ>|3xu1iR*U65GC~CXxdI@YW@%0)$t9||-X-Lp(#R!y?5TxS}nn0=Fvjt(EZrWes zAIz}?okK28caP1+(HK^uzHCGVV;`9$h)(<__Qq0!^Bf~8foiPcX9fJL0}Gf(G}x{^ zR$!{=o+O-Ee*N3b(6=G^*f$Eio15cjD0do%EA0;bTyeS=omOOcq}4V*PDCq+KvZ^>|!U)BU&ike)E=EWVr0I?!x}c5AKVR2Q3D^Wnlb6K6BC(H0@KYN&YC0PuBM#sw-H?wzuC$*?sNZ9 z(X&DC(D~%&=3H|O1JAF<2d?7v=T{m|BPzQ@KkBqd>Tog33#_koGrQ9+>J(>VaJf;> zbzqwp_5@)Lx9N-Q>+YCxsT;xCTzAEx(FfK4fGzB4jkHKLj_7FbHS>?|cbdO~`jsfc z_zC!g(F1o63ki;xj3t%RSF!)PXR|RCe#QQHxnQs7Qs8$v?b6y7Q|t@9`eAUOIGj~7!e5?-lDUzcIlR^!f`gC8a0Nz?tQKNxv>X*X z%y&`;Z<8I-;HQ5b(yEzX*;JbCV^*kR7?ezOlOkMYFuR;Q6&T1%jEF}%9w%F_$$Cb` zi<5U%yI_ZhW>UQyqipmu`*b0Pmzm)39C%I6%i>14cr5FAECr&`pBA{NpaMl!E7VW_=xm9=Ct7J}*wL1Y~`# z3vDWi{|!6{WWMhpTFx^-kG!l1SbD&u#(tcO@zbV6r5d!V@RUCOla#(pC*0nt%Q*S5 zqfahKB$-rsRzd8z?ypImR^n&P+uc zH$@XuFkAhaB0Jn`LvV2W;c%W~n)qrGVnwZOo&m-)lpYDzE4eG4z+uvK28KWCkL97?N1*kh=>N-;r^ONp$dOedSCmNhz#w|_?si0!>sU&2 z)axE1p+;_|<$GzhpfE7d0)(+)@txGn)0yCnd0b=>G+9+lo&ED^C1X8`N=8;F%Gbs3 z|0-t_bRv^_0!Y)~=t7 zcf1f@8r8$HG+Dd%HdCW@MQFhSP4RjP8jkFvD|0FpC)d7qMd+6+2@lahLy-a@w4zwq zS0x+vLcw*}l^UJ4en6oV1Y3IEw=hBCLOPQJmo|^Kqf4Pr$V12*e6k&rGqBpO;-eIE zT`JU3b7ta?3>nGF>0jp+rKmnB49{bWzwS5Qt9m;HT^MN-h0Y27`ti{HXSCM#QybsU z^i+Ji4HDYOUCab2J0(_IUOV_HW)|^>+ELE6_|=vic#ikq6u=8V1)+|&<}WsJeMQ3} z(i3@3hQH_|6dR*U5^xe5_T3+QA5%0t9=WaMo0w)Q-A8SUmW+ao1t6s0RJ> zdMVO0Wr!N0hq~Fnr05*P=uC>kXrwEms-TTm~v9Jt%zSVlgKx< zkjvYBxCM*O1^7rheEWMVlrM~HLs3$gQ!$)u#Uy+fLFh>~8VWxpq+YSE+C4v_!*Dqw zuy#|2LeJkGqd1};vC2p*zOQUB`l51=+FvwLAQz0~ST$7|__dxT2-ES!=>qc1P~nEj zfCR_tt$hgTrc8@7iVXxzp#cSx$9!yifWRT|30VONAZVjTO*)~d0ry#=?&3DcFB=sv z#{s8IzGuWnheKHNtq2!>Kx@c-qRuIv@`uEa3j3GWdye;+?3uh2C)^yF(g%|2P3{oD z*(^Lp^RxNK9&#$AMoquiBS1|dJmKU;>RB0(Isy3ze zAdQ;M-G%4cxN0AvyYH0ztCTnQMz>r7!w`#ywc8i% za?;@A^kn|HTxaI*cTYg%7K~oseKwV+D&qjbdJxXy-O~>2a*Ezlz)b3A%Bfmo%LYf|<+qEdU`8~C*|8KFEKH6=~O3Iz-3{{XZ9rK - - - - + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + - - - + + + + + + + + + + + - + diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts index bb9f32f8555..691f2fec708 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts @@ -72,7 +72,7 @@ async function writeExtensionInstalledFileAsync(terminal: ITerminal): Promise Date: Fri, 30 Jan 2026 20:19:59 +0000 Subject: [PATCH 07/15] rush change --- ...rebrand-playwright-codespaces_2026-01-30-20-19.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@rushstack/playwright-browser-tunnel/copilot-rebrand-playwright-codespaces_2026-01-30-20-19.json diff --git a/common/changes/@rushstack/playwright-browser-tunnel/copilot-rebrand-playwright-codespaces_2026-01-30-20-19.json b/common/changes/@rushstack/playwright-browser-tunnel/copilot-rebrand-playwright-codespaces_2026-01-30-20-19.json new file mode 100644 index 00000000000..8cc2dd09d48 --- /dev/null +++ b/common/changes/@rushstack/playwright-browser-tunnel/copilot-rebrand-playwright-codespaces_2026-01-30-20-19.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/playwright-browser-tunnel", + "comment": "Update marker file names to reflect Copilot rebranding", + "type": "minor" + } + ], + "packageName": "@rushstack/playwright-browser-tunnel" +} \ No newline at end of file From e8a4f51ac9f0b9afd77c0a6b196f1b20e8758415 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 20:32:25 +0000 Subject: [PATCH 08/15] add publish configuration --- common/config/azure-pipelines/vscode-extension-publish.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/config/azure-pipelines/vscode-extension-publish.yaml b/common/config/azure-pipelines/vscode-extension-publish.yaml index 365d0e75020..eb86e742ae9 100644 --- a/common/config/azure-pipelines/vscode-extension-publish.yaml +++ b/common/config/azure-pipelines/vscode-extension-publish.yaml @@ -17,6 +17,11 @@ parameters: vsixPath: 'extension.vsix' manifestPath: 'extension.signature.manifest' projectPath: '$(Build.SourcesDirectory)/vscode-extensions/debug-certificate-manager-vscode-extension' + - key: 'playwright-local-browser-server-vscode-extension' + projectRelativeAssetsDir: dist/vsix + vsixPath: 'extension.vsix' + manifestPath: 'extension.signature.manifest' + projectPath: '$(Build.SourcesDirectory)/vscode-extensions/playwright-local-browser-server-vscode-extension' - key: 'rush-vscode-extension' projectRelativeAssetsDir: dist/vsix vsixPath: 'extension.vsix' From 2f116bb1b501f3ce56d5e73b4629c6ba9aa35b87 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 12:36:56 -0800 Subject: [PATCH 09/15] reset lockfile changes --- .../config/subspaces/default/pnpm-lock.yaml | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 9f5e83a6330..1f548223a28 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -783,7 +783,7 @@ importers: version: 6.4.22(@types/react@17.0.74)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/cli': specifier: ~6.4.18 - version: 6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2) + version: 6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2) '@storybook/components': specifier: ~6.4.18 version: 6.4.22(@types/react@17.0.74)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -819,7 +819,7 @@ importers: version: 5.2.7(webpack@4.47.0) jest: specifier: ~29.3.1 - version: 29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + version: 29.3.1(@types/node@20.17.19) react: specifier: ~17.0.2 version: 17.0.2 @@ -1005,7 +1005,7 @@ importers: version: 5.2.7(webpack@5.103.0) jest: specifier: ~29.3.1 - version: 29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + version: 29.3.1(@types/node@20.17.19) react: specifier: ~19.2.3 version: 19.2.4 @@ -5189,7 +5189,7 @@ importers: specifier: 1.18.8 version: 1.18.8 - ../../../vscode-extensions/playwright-local-browser-server-vscode-extension: + ../../../vscode-extensions/playwright-on-codespaces-vscode-extension: dependencies: '@rushstack/node-core-library': specifier: workspace:* @@ -22376,7 +22376,7 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)': + '@jest/core@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -22390,7 +22390,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@22.9.3) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -25101,7 +25101,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/cli@6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2)': + '@storybook/cli@6.4.22(eslint@9.37.0)(jest@29.3.1(@types/node@20.17.19))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@5.8.2)': dependencies: '@babel/core': 7.20.12 '@babel/preset-env': 7.28.6(@babel/core@7.20.12) @@ -25121,7 +25121,7 @@ snapshots: fs-extra: 9.1.0 get-port: 5.1.1 globby: 11.1.0 - jest: 29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + jest: 29.3.1(@types/node@20.17.19) jscodeshift: 0.13.1(@babel/preset-env@7.28.6(@babel/core@7.20.12)) json5: 2.2.3 leven: 3.1.0 @@ -28714,13 +28714,13 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 - create-jest@29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0): + create-jest@29.7.0(@types/node@20.17.19): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@20.17.19) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -32086,16 +32086,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0): + jest-cli@29.7.0(@types/node@20.17.19): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0) + '@jest/core': 29.7.0 '@jest/test-result': 29.7.0(@types/node@20.17.19) '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + create-jest: 29.7.0(@types/node@20.17.19) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + jest-config: 29.7.0(@types/node@20.17.19) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -32165,7 +32165,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0): + jest-config@29.7.0(@types/node@20.17.19): dependencies: '@babel/core': 7.20.12 '@jest/test-sequencer': 29.7.0(@types/node@20.17.19) @@ -32195,7 +32195,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@22.9.3)(babel-plugin-macros@3.1.0): + jest-config@29.7.0(@types/node@22.9.3): dependencies: '@babel/core': 7.20.12 '@jest/test-sequencer': 29.7.0(@types/node@22.9.3) @@ -32583,12 +32583,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.3.1(@types/node@20.17.19)(babel-plugin-macros@3.1.0): + jest@29.3.1(@types/node@20.17.19): dependencies: '@jest/core': 29.5.0(babel-plugin-macros@3.1.0) '@jest/types': 29.5.0 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.19)(babel-plugin-macros@3.1.0) + jest-cli: 29.7.0(@types/node@20.17.19) transitivePeerDependencies: - '@types/node' - babel-plugin-macros From 24761507070877e6345fdcbe8e717cf040d0e694 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 12:45:58 -0800 Subject: [PATCH 10/15] update command ids --- .../package.json | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json index ba3b8101fc2..3cf7c90b25e 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json @@ -10,7 +10,7 @@ "publisher": "ms-RushStack", "preview": true, "displayName": "Playwright Local Browser Server", - "description": "VS Code extension to enable Playwright testing in remote VS Code environments (such as GitHub Codespaces) while launching and driving the actual browser process on your local machine.", + "description": "VS Code extension to enable Playwright testing in remote VS Code environments (such as Codespaces, Dev Containers, VS Code Tunnels) while launching and driving the actual browser process on your local machine.", "homepage": "https://github.com/microsoft/rushstack/tree/main/vscode-extensions/playwright-local-browser-server-vscode-extension", "icon": "assets/extension-icon.png", "extensionKind": [ @@ -40,32 +40,32 @@ "contributes": { "commands": [ { - "command": "playwright-tunnel.start", + "command": "playwright-local-browser-server.start", "title": "Start Playwright Browser Tunnel", "category": "Playwright" }, { - "command": "playwright-tunnel.stop", + "command": "playwright-local-browser-server.stop", "title": "Stop Playwright Browser Tunnel", "category": "Playwright" }, { - "command": "playwright-tunnel.manageAllowlist", + "command": "playwright-local-browser-server.manageAllowlist", "title": "Manage Launch Options Allowlist", "category": "Playwright Local Browser Server" }, { - "command": "playwright-tunnel.showLog", + "command": "playwright-local-browser-server.showLog", "title": "Show Log", "category": "Playwright Local Browser Server" }, { - "command": "playwright-tunnel.showSettings", + "command": "playwright-local-browser-server.showSettings", "title": "Show Settings", "category": "Playwright Local Browser Server" }, { - "command": "playwright-tunnel.showMenu", + "command": "playwright-local-browser-server.showMenu", "title": "Show Tunnel Menu", "category": "Playwright Local Browser Server" } @@ -73,17 +73,17 @@ "configuration": { "title": "Playwright Browser Tunnel", "properties": { - "playwright-tunnel.autoStart": { + "playwright-local-browser-server.autoStart": { "type": "boolean", "default": false, "description": "Automatically start the Playwright browser tunnel when the extension activates. For security, this is disabled by default." }, - "playwright-tunnel.promptBeforeLaunch": { + "playwright-local-browser-server.promptBeforeLaunch": { "type": "boolean", "default": true, "description": "Show a confirmation prompt before launching the browser server with the requested launch options. This helps protect against potentially malicious launch options from compromised environments." }, - "playwright-tunnel.tunnelPort": { + "playwright-local-browser-server.tunnelPort": { "type": "number", "default": 3000, "description": "Port for the browser tunnel server" From e867311832dc44ab466e99e9e1760f29c06005b6 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 12:46:11 -0800 Subject: [PATCH 11/15] DROP: rush update --- common/config/subspaces/default/pnpm-lock.yaml | 2 +- common/config/subspaces/default/repo-state.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 1f548223a28..4fbb53f153d 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -5189,7 +5189,7 @@ importers: specifier: 1.18.8 version: 1.18.8 - ../../../vscode-extensions/playwright-on-codespaces-vscode-extension: + ../../../vscode-extensions/playwright-local-browser-server-vscode-extension: dependencies: '@rushstack/node-core-library': specifier: workspace:* diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 22b2e7b7d96..485952c12d6 100644 --- a/common/config/subspaces/default/repo-state.json +++ b/common/config/subspaces/default/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "a57360b3a8546b77bfad2b8bcb58a05dbad53247", + "pnpmShrinkwrapHash": "b0dbc9dd6df6e790055edb199b9d85eb3a0f200f", "preferredVersionsHash": "a9b67c38568259823f9cfb8270b31bf6d8470b27" } From 7f5a12ddcd31df922f797a8e190c5b9468d1dc3d Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 12:51:00 -0800 Subject: [PATCH 12/15] update readme --- .../README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md index 436f2166d63..971add9011d 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md @@ -125,18 +125,18 @@ sequenceDiagram This extension contributes the following commands: -- **Playwright: Start Playwright Browser Tunnel** (`playwright-tunnel.start`) -- **Playwright: Stop Playwright Browser Tunnel** (`playwright-tunnel.stop`) -- **Playwright Local Browser Server: Manage Launch Options Allowlist** (`playwright-tunnel.manageAllowlist`) -- **Playwright Local Browser Server: Show Log** (`playwright-tunnel.showLog`) -- **Playwright Local Browser Server: Show Settings** (`playwright-tunnel.showSettings`) -- **Playwright Local Browser Server: Show Tunnel Menu** (`playwright-tunnel.showMenu`) — status bar menu +- **Playwright: Start Playwright Browser Tunnel** (`playwright-local-browser-server.start`) +- **Playwright: Stop Playwright Browser Tunnel** (`playwright-local-browser-server.stop`) +- **Playwright Local Browser Server: Manage Launch Options Allowlist** (`playwright-local-browser-server.manageAllowlist`) +- **Playwright Local Browser Server: Show Log** (`playwright-local-browser-server.showLog`) +- **Playwright Local Browser Server: Show Settings** (`playwright-local-browser-server.showSettings`) +- **Playwright Local Browser Server: Show Tunnel Menu** (`playwright-local-browser-server.showMenu`) — status bar menu ## Settings -- `playwright-tunnel.autoStart` (default: `false`) — automatically starts the tunnel when the extension activates. -- `playwright-tunnel.promptBeforeLaunch` (default: `true`) — show a confirmation prompt before launching the browser server with the requested launch options. This helps protect against potentially malicious launch options from compromised environments. -- `playwright-tunnel.tunnelPort` (default: `3000`) — port used by the remote tunnel server. +- `playwright-local-browser-server.autoStart` (default: `false`) — automatically starts the tunnel when the extension activates. +- `playwright-local-browser-server.promptBeforeLaunch` (default: `true`) — show a confirmation prompt before launching the browser server with the requested launch options. This helps protect against potentially malicious launch options from compromised environments. +- `playwright-local-browser-server.tunnelPort` (default: `3000`) — port used by the remote tunnel server. ## Notes From 89aeea1103fe93ecf795cf5d15bce4d2d718d797 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 12:52:32 -0800 Subject: [PATCH 13/15] update extension command registration ids --- .../src/extension.ts | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts index 691f2fec708..da89b7a3fd0 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts @@ -27,12 +27,12 @@ import { VScodeOutputChannelTerminalProvider } from '@rushstack/vscode-shared/li import packageJson from '../package.json'; const EXTENSION_DISPLAY_NAME: string = 'Playwright Local Browser Server'; -const COMMAND_SHOW_LOG: string = 'playwright-tunnel.showLog'; -const COMMAND_SHOW_SETTINGS: string = 'playwright-tunnel.showSettings'; -const COMMAND_START_TUNNEL: string = 'playwright-tunnel.start'; -const COMMAND_STOP_TUNNEL: string = 'playwright-tunnel.stop'; -const COMMAND_SHOW_MENU: string = 'playwright-tunnel.showMenu'; -const COMMAND_MANAGE_ALLOWLIST: string = 'playwright-tunnel.manageAllowlist'; +const COMMAND_SHOW_LOG: string = 'playwright-local-browser-server.showLog'; +const COMMAND_SHOW_SETTINGS: string = 'playwright-local-browser-server.showSettings'; +const COMMAND_START_TUNNEL: string = 'playwright-local-browser-server.start'; +const COMMAND_STOP_TUNNEL: string = 'playwright-local-browser-server.stop'; +const COMMAND_SHOW_MENU: string = 'playwright-local-browser-server.showMenu'; +const COMMAND_MANAGE_ALLOWLIST: string = 'playwright-local-browser-server.manageAllowlist'; const VSCODE_COMMAND_WORKSPACE_OPEN_SETTINGS: string = 'workbench.action.openSettings'; const EXTENSION_ID: string = `${packageJson.publisher}.${packageJson.name}`; const VSCODE_SETTINGS_EXTENSION_FILTER: string = `@ext:${EXTENSION_ID}`; @@ -287,7 +287,9 @@ export async function activate(context: vscode.ExtensionContext): Promise return; } - const config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration('playwright-tunnel'); + const config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration( + 'playwright-local-browser-server' + ); const shouldAutoStart: boolean = config.get('autoStart', false); const tunnelPort: number = config.get('tunnelPort', 3000); @@ -523,7 +525,9 @@ export async function activate(context: vscode.ExtensionContext): Promise ); // Auto-start the tunnel on activation if configured - const config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration('playwright-tunnel'); + const config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration( + 'playwright-local-browser-server' + ); const autoStart: boolean = config.get('autoStart', false); if (autoStart) { void handleStartTunnelAsync(true); From 400d38c5f2d404eb4b160bb686629a93f273f712 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 13:02:10 -0800 Subject: [PATCH 14/15] update default ports to 56767 --- apps/playwright-browser-tunnel/README.md | 10 +++++----- apps/playwright-browser-tunnel/playwright.config.ts | 2 +- .../src/tunneledBrowserConnection.ts | 2 +- .../README.md | 6 +++--- .../package.json | 2 +- .../src/extension.ts | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/playwright-browser-tunnel/README.md b/apps/playwright-browser-tunnel/README.md index fdf26a20672..5bbcc9ded3c 100644 --- a/apps/playwright-browser-tunnel/README.md +++ b/apps/playwright-browser-tunnel/README.md @@ -12,9 +12,9 @@ This package is the core tunneling/runtime layer used by the **Playwright Local In a typical Codespaces workflow: - Your **tests** run inside the Codespace and call `tunneledBrowserConnection()`. -- `tunneledBrowserConnection()` starts a WebSocket server (by default on port `3000`) that a browser host can attach to. -- The VS Code extension runs on the **UI side** and starts a `PlaywrightTunnel` which connects to `ws://127.0.0.1:3000`. - - In Codespaces, this works when port `3000` is forwarded to your local machine (VS Code port forwarding makes the remote port reachable as `localhost:3000`). +- `tunneledBrowserConnection()` starts a WebSocket server (by default on port `56767`) that a browser host can attach to. +- The VS Code extension runs on the **UI side** and starts a `PlaywrightTunnel` which connects to `ws://127.0.0.1:56767`. + - In Codespaces, this works when port `56767` is forwarded to your local machine (VS Code port forwarding makes the remote port reachable as `localhost:56767`). - Once connected, the extension hosts the actual Playwright browser process locally, while your tests continue to run remotely. The extension provides a UI wrapper around this library (start/stop commands, status bar state, and logs), while `@rushstack/playwright-browser-tunnel` provides the underlying protocol forwarding and browser lifecycle management. @@ -76,7 +76,7 @@ const terminal = new Terminal(terminalProvider); const tunnel = new PlaywrightTunnel({ mode: 'wait-for-incoming-connection', - listenPort: 3000, + listenPort: 56767, tmpPath: path.join(os.tmpdir(), 'playwright-browser-tunnel'), terminal, onStatusChange: (status) => terminal.writeLine(`status: ${status}`) @@ -97,7 +97,7 @@ Use `tunneledBrowserConnection()` in the environment where your tests run. It starts: -- a **remote** WebSocket server (port `3000`) that the browser host connects to +- a **remote** WebSocket server (port `56767`) that the browser host connects to - a **local** WebSocket endpoint (random port) that your Playwright client connects to ```ts diff --git a/apps/playwright-browser-tunnel/playwright.config.ts b/apps/playwright-browser-tunnel/playwright.config.ts index 2b1968dd3d7..5d826145aa7 100644 --- a/apps/playwright-browser-tunnel/playwright.config.ts +++ b/apps/playwright-browser-tunnel/playwright.config.ts @@ -13,7 +13,7 @@ export default defineConfig({ /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { /* Base URL to use in actions like `await page.goto('/')`. */ - // baseURL: 'http://localhost:3000', + // baseURL: 'http://localhost:56767', /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on' diff --git a/apps/playwright-browser-tunnel/src/tunneledBrowserConnection.ts b/apps/playwright-browser-tunnel/src/tunneledBrowserConnection.ts index 6eec884e5bd..a08b6eeff72 100644 --- a/apps/playwright-browser-tunnel/src/tunneledBrowserConnection.ts +++ b/apps/playwright-browser-tunnel/src/tunneledBrowserConnection.ts @@ -26,7 +26,7 @@ interface IHandshakeAck { action: 'handshakeAck'; } -const DEFAULT_LISTEN_PORT: number = 3000; +const DEFAULT_LISTEN_PORT: number = 56767; /** * Disposable handle returned by {@link tunneledBrowserConnection}. diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md index 971add9011d..a6c8e029918 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/README.md @@ -6,7 +6,7 @@ This extension is a UI wrapper around the tunneling/runtime library [`@rushstack ## How it works -- Remote side (Codespace): your Playwright test fixture starts a WebSocket **tunnel server** on a well-known port (default `3000`) and a small local HTTP endpoint used by the Playwright client. +- Remote side (Codespace): your Playwright test fixture starts a WebSocket **tunnel server** on a well-known port (default `56767`) and a small local HTTP endpoint used by the Playwright client. - Local side (your VS Code UI machine): this extension starts a `PlaywrightTunnel` in `poll-connection` mode and connects to the forwarded tunnel port. - After a handshake (browser type, launch options, Playwright version), the extension installs the requested Playwright/browser as needed, launches a local `browserServer`, and begins bidirectional forwarding. @@ -136,9 +136,9 @@ This extension contributes the following commands: - `playwright-local-browser-server.autoStart` (default: `false`) — automatically starts the tunnel when the extension activates. - `playwright-local-browser-server.promptBeforeLaunch` (default: `true`) — show a confirmation prompt before launching the browser server with the requested launch options. This helps protect against potentially malicious launch options from compromised environments. -- `playwright-local-browser-server.tunnelPort` (default: `3000`) — port used by the remote tunnel server. +- `playwright-local-browser-server.tunnelPort` (default: `56767`) — port used by the remote tunnel server. ## Notes -- The extension currently connects to `ws://127.0.0.1:3000` on the local machine. In Codespaces, make sure the remote port is forwarded so it is reachable as `localhost` from your VS Code UI environment. +- The extension currently connects to `ws://127.0.0.1:56767` on the local machine. In Codespaces, make sure the remote port is forwarded so it is reachable as `localhost` from your VS Code UI environment. - For the underlying API and examples, see [`@rushstack/playwright-browser-tunnel`](../../apps/playwright-browser-tunnel). diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json index 3cf7c90b25e..93655a27441 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/package.json @@ -85,7 +85,7 @@ }, "playwright-local-browser-server.tunnelPort": { "type": "number", - "default": 3000, + "default": 56767, "description": "Port for the browser tunnel server" } } diff --git a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts index da89b7a3fd0..1b776e7fe77 100644 --- a/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts +++ b/vscode-extensions/playwright-local-browser-server-vscode-extension/src/extension.ts @@ -291,7 +291,7 @@ export async function activate(context: vscode.ExtensionContext): Promise 'playwright-local-browser-server' ); const shouldAutoStart: boolean = config.get('autoStart', false); - const tunnelPort: number = config.get('tunnelPort', 3000); + const tunnelPort: number = config.get('tunnelPort', 56767); // If this is a manual start and autoStart is not enabled, prompt the user if (!isAutoStart && !shouldAutoStart) { From a51e533a297a3b44a651e25e1108161ef5a86754 Mon Sep 17 00:00:00 2001 From: Sean Larkin Date: Fri, 30 Jan 2026 13:17:53 -0800 Subject: [PATCH 15/15] repo-toolbox --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a3835b2125e..f02752f9405 100644 --- a/README.md +++ b/README.md @@ -234,7 +234,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/rigs/local-web-rig](./rigs/local-web-rig/) | A rig package for Web projects that build using Heft inside the RushStack repository. | | [/rush-plugins/rush-litewatch-plugin](./rush-plugins/rush-litewatch-plugin/) | An experimental alternative approach for multi-project watch mode | | [/vscode-extensions/debug-certificate-manager-vscode-extension](./vscode-extensions/debug-certificate-manager-vscode-extension/) | VS Code extension to manage debug TLS certificates and sync them to the VS Code workspace. Works with VS Code remote development (Codespaces, SSH, Dev Containers, WSL, VS Code Tunnels). | -| [/vscode-extensions/playwright-local-browser-server-vscode-extension](./vscode-extensions/playwright-local-browser-server-vscode-extension/) | VS Code extension to enable Playwright testing in remote VS Code environments (such as GitHub Codespaces) while launching and driving the actual browser process on your local machine. | +| [/vscode-extensions/playwright-local-browser-server-vscode-extension](./vscode-extensions/playwright-local-browser-server-vscode-extension/) | VS Code extension to enable Playwright testing in remote VS Code environments (such as Codespaces, Dev Containers, VS Code Tunnels) while launching and driving the actual browser process on your local machine. | | [/vscode-extensions/rush-vscode-command-webview](./vscode-extensions/rush-vscode-command-webview/) | Part of the Rush Stack VSCode extension, provides a UI for invoking Rush commands | | [/vscode-extensions/rush-vscode-extension](./vscode-extensions/rush-vscode-extension/) | Enhanced experience for monorepos that use the Rush Stack toolchain | | [/vscode-extensions/vscode-shared](./vscode-extensions/vscode-shared/) | |