From ecf7efb427cc4007700e592c976ed1e61d784c8a Mon Sep 17 00:00:00 2001 From: Steven B Date: Sun, 17 May 2026 14:00:04 -0300 Subject: [PATCH] fix(browse): bump Playwright to ^1.60.0 and pin full Chromium for extension loading MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two related fixes: 1. Playwright bump ^1.58.2 → ^1.60.0 (Chromium 1208/Chrome 145 → 1223/Chrome 148). Chromium 1208 fails Flutter Web's FlutterLoader environment compatibility check in headless mode, producing blank pages with webgl:false and no flt-glass-pane. Chromium 1223 (1.60.0) renders Flutter 3.41+ apps correctly in headless. Verified empirically: same browse source, same args, only Chromium build differs. 2. launchHeaded() now explicitly passes executablePath: executablePath || chromium.executablePath() to launchPersistentContext. Playwright 1.49 changed headless:true to use chrome-headless-shell (which cannot load extensions). The headed path was unaffected, but we were relying on that implicitly. This pin ensures /open-gstack-browser and /pair-agent keep loading the sidebar extension if Playwright ever changes launchPersistentContext defaults. GSTACK_CHROMIUM_PATH still takes priority in both paths. Co-Authored-By: Claude Sonnet 4.6 Co-Authored-By: Claude Opus 4.7 --- browse/src/browser-manager.ts | 5 ++++- bun.lock | 7 ++++--- package.json | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/browse/src/browser-manager.ts b/browse/src/browser-manager.ts index cdbd5fc50..d27e92977 100644 --- a/browse/src/browser-manager.ts +++ b/browse/src/browser-manager.ts @@ -418,7 +418,10 @@ export class BrowserManager { args: launchArgs, viewport: null, // Use browser's default viewport (real window size) userAgent: this.customUserAgent || customUA, - ...(executablePath ? { executablePath } : {}), + // Playwright 1.49+ defaults headless:true to chrome-headless-shell, which + // cannot load Chrome extensions. Explicitly pin the full Chromium binary + // so future Playwright upgrades don't silently break /open-gstack-browser. + executablePath: executablePath || chromium.executablePath(), ...(this.proxyConfig ? { proxy: this.proxyConfig } : {}), // Playwright adds flags that block extension loading ignoreDefaultArgs: [ diff --git a/bun.lock b/bun.lock index 96fda00aa..069cc3c63 100644 --- a/bun.lock +++ b/bun.lock @@ -9,7 +9,8 @@ "@ngrok/ngrok": "^1.7.0", "diff": "^7.0.0", "marked": "^18.0.2", - "playwright": "^1.58.2", + "playwright": "^1.60.0", + "playwright-core": "^1.60.0", "puppeteer-core": "^24.40.0", "socks": "^2.8.8", }, @@ -426,9 +427,9 @@ "platform": ["platform@1.3.6", "", {}, "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="], - "playwright": ["playwright@1.58.2", "", { "dependencies": { "playwright-core": "1.58.2" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A=="], + "playwright": ["playwright@1.60.0", "", { "dependencies": { "playwright-core": "1.60.0" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA=="], - "playwright-core": ["playwright-core@1.58.2", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg=="], + "playwright-core": ["playwright-core@1.60.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA=="], "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], diff --git a/package.json b/package.json index 3851a78bd..efb8e741b 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,8 @@ "@ngrok/ngrok": "^1.7.0", "diff": "^7.0.0", "marked": "^18.0.2", - "playwright": "^1.58.2", + "playwright": "^1.60.0", + "playwright-core": "^1.60.0", "puppeteer-core": "^24.40.0", "socks": "^2.8.8" },