← Commit history

v1.8.36: snappy auto-flash — fire the taskbar flash the moment the window is backgrounded (after the local welcome page), not after the heavy URL's domcontentloaded

John Lauer ·951983afa9 · ·parent 792c439
4 files changed +17−8
adom-bridge-puppeteer-manifest.json+5−5
@@ -1,10 +1,10 @@ {   "manifest_version": 1,   "name": "puppeteer",-  "version": "1.8.35",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-puppeteer-bridge/1.8.35/adom-bridge-puppeteer-v1.8.35.zip",-  "sha256": "ac811b0b884e2a24f65e28c72da62a20107fbc804d610f85c280faf1a8c847b1",-  "size": 157339,+  "version": "1.8.36",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-puppeteer-bridge/1.8.36/adom-bridge-puppeteer-v1.8.36.zip",+  "sha256": "e335d2cfb7b68a005eb4a31988954c690871e64eb8e9c31e3e4cae6e7c74aea7",+  "size": 157535,   "verbPrefixes": [     "browser_",     "desktop_recorder_",@@ -12,5 +12,5 @@   ],   "healthEndpoint": "/status",   "statusVerb": "browser_readiness",-  "released_at": "2026-07-14T20:37:36Z"+  "released_at": "2026-07-14T20:52:41Z" }\ No newline at end of file
src/BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.8.35+1.8.36
src/bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "puppeteer",   "displayName": "Puppeteer (Chrome for Testing + Native)",-  "version": "1.8.35",+  "version": "1.8.36",   "description": "Drives a browser ALREADY on the machine — installed Chrome, else Microsoft Edge (every Windows PC ships with Edge) — launched with a FRESH isolated profile, so the common case has NO ~150 MB Chrome-for-Testing download and it never touches the user's real tabs/logins. Binds its local server to LOOPBACK (127.0.0.1) only, so no Windows Firewall 'allow Node through the firewall' prompt ever pops. Chrome for Testing is fetched only as a LAST RESORT if the machine has no Chromium browser at all. SPAWN-VERIFIED fallback: pup tries each detected browser (Chrome → Edge → CfT) and actually launches it, falling through to the next if one won't start (and handling browsers like Edge that relaunch onto another PID), so a corrupt/partial install never hard-fails an open. The browser that launches is cached as the default (persisted across restarts) so it isn't re-probed each time. On spawn the bridge SELF-WARMS: detects browsers + disk, and only if the box has no Chrome/Edge and no cached CfT does it background-fetch CfT so the first open is instant. browser_use pins a specific browser (chrome | edge | cft | auto); {browser:'chrome',install:true} downloads & installs REAL Google Chrome (user-scoped, no admin) on an Edge-only box. browser_readiness (READ-ONLY) reports which browser will be used + the full candidate list + the default + free disk. Every failure returns a specific errorCode + _hint (chrome_install_no_disk, chrome_download_network, chrome_install_permission, chrome_stable_not_detected, …). Launches with FULL browser permissions by default for full debug (strictPermissions:true opts out). Headful automation: open/close windows+tabs, navigate, screenshot, eval JS, record. pup is a GENERIC, non-profile browser only — every session is a fresh isolated Chrome/Edge process, never the user's real signed-in browser; profile defaults to sessionId. To drive the user's REAL Chrome/Edge (their profile, cookies, SSO), use the Adom browser EXTENSION's nbrowser_* verbs — a separate bridge, not pup's job.",   "homepage": "https://wiki.adom.inc/adom/adom-desktop",   "author": "Adom Inc.",
src/server.js+10−1
@@ -2096,7 +2096,7 @@ async function getOrLaunchBrowser(profileName, { freshProfile = false, strictPer // Launch a session as a tab in a Chrome browser // profile: which Chrome profile to use (defaults to sessionId) // If another session already uses that profile, this creates a NEW TAB in the same Chrome-async function launchSession(sessionId, url, { freshProfile = false, profile, strictPermissions = false, downloadPath = null, nativeSite = false, owner = null, takeover = false, foreground = false } = {}) {+async function launchSession(sessionId, url, { freshProfile = false, profile, strictPermissions = false, downloadPath = null, nativeSite = false, owner = null, takeover = false, foreground = false, silent = false } = {}) {   const profileName = profile || sessionId;    // If session already exists and page is still alive, just navigate@@ -2214,6 +2214,14 @@ async function launchSession(sessionId, url, { freshProfile = false, profile, st     console.log(`Welcome page failed to load (non-fatal): ${e.message}`);   } +  // v1.8.36: SNAPPY auto-flash. The window already exists + is backgrounded here (the+  // welcome page loaded from a local file), so flash the taskbar NOW — do not wait for the+  // real URL's domcontentloaded, which for heavy sites is another 1–3s. Set _flashState so+  // the open handler's later scheduleAutoFlash debounces (no double flash). Fire-and-forget.+  if (!foreground && !silent && process.platform === 'win32') {+    try { _flashState.set(profileName, Date.now()); osFlashWindow(profileName); } catch (e) {}+  }+   if (url) {     // Apply stored basic-auth creds for this URL's host BEFORE navigating     // so the Chrome native auth dialog never appears. No-op if no match.@@ -2998,6 +3006,7 @@ const server = http.createServer(async (req, res) => {               // back to the user's window the instant pup's window appears) unless the               // caller explicitly wants it foreground.               foreground: !!(args.foreground || args.raise || args.show),+              silent: !!args.silent || args.autoFlash === false,             });           } catch (e) {             if (e && e.code === 'session_owned_by_another_thread') {