← Commit history

Reduce the jump-list first-right-click blip: stop forcing a redundant CommitList ~1.6s after every stamp (jump lists live on the AUMID and were already committed at stamp time; the re-commit only gave the shell another chance to dismiss a just-opened flyout). Dedup-respecting now. Residual ~200-300ms blip is a shell/AD race (documented in dev-skills/pup-jumplist)

John Lauer ·05ccc24360 ·3mo ago ·parent 0a403b5
4 files changed +18−10
adom-bridge-puppeteer-manifest.json+4−4
@@ -1,10 +1,10 @@ {   "manifest_version": 1,   "name": "puppeteer",-  "version": "1.9.316",-  "url": "https://wiki.adom.inc/download/adom/adom-desktop-puppeteer-bridge/1.9.316/adom-bridge-puppeteer-v1.9.316.zip",-  "sha256": "cdd2766661222609a03669551656898abf6a046828e5a43cfe1530769389c5ef",-  "size": 729447,+  "version": "1.9.317",+  "url": "https://wiki.adom.inc/download/adom/adom-desktop-puppeteer-bridge/1.9.317/adom-bridge-puppeteer-v1.9.317.zip",+  "sha256": "6555e060b5f30d6e6ba67eaf29e37b6e3b088b9a07ea8294066d2715755b4e30",+  "size": 729827,   "verbPrefixes": [     "browser_",     "desktop_recorder_",
src/BRIDGE_VERSION+1−1
@@ -1 +1 @@-1.9.316+1.9.317
src/bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "puppeteer",   "displayName": "Puppeteer (Chrome for Testing + Native)",-  "version": "1.9.316",+  "version": "1.9.317",   "description": "Drives a browser ALREADY on the machine \u2014 installed Chrome, else Microsoft Edge (every Windows PC ships with Edge) \u2014 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 \u2192 Edge \u2192 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, \u2026). 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 \u2014 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 \u2014 a separate bridge, not pup's job. macOS (v1.9.74+): full parity with mac-native mechanics \u2014 background-by-default is the app-level hide (windows stay drivable/screenshottable while hidden), raise/lower map to unhide+activate/hide, browser_alert_window posts a native toast whose click focuses the window, browser_use {browser:'chrome',install:true} installs Chrome from the official dmg, and taskbar identity/badging remains Windows-only.",   "homepage": "https://wiki.adom.inc/adom/adom-desktop",   "author": "Adom Inc.",
src/server.js+12−4
@@ -3206,15 +3206,23 @@ async function stampPupIdentity(sessionId, opts) {         // button is correct hygiene, but do NOT read this as the cure. The blip is UNRESOLVED and is         // tracked on AD (it owns desktop_set_window_identity and the shell interaction) — see the         // pup-bridge-debug skill for the four hypotheses already eliminated, so nobody re-derives them.-        // Idempotent (dedupe key cleared so it really re-attaches) and cheap: one AD call per window.+        // v1.9.317 (John, ~10th time reporting the blip: "the FIRST right-click shows for a blip then+        // goes away, the 2nd ~1s later works"): this forced re-commit (clearing the dedup key so it+        // RE-attaches) fired a REDUNDANT CommitList ~1.6s after every stamp. Jump lists live on the+        // AUMID and were ALREADY committed during the stamp above, so the re-attach was never needed —+        // it only gave the shell one more chance to rebuild-and-dismiss a flyout the user just opened.+        // DO NOT clear the dedup key: let updateWikiJumplist no-op when the tasks are unchanged (same+        // appId+tasks), and only re-commit if the appId genuinely changed (a new button). This removes+        // pup's contribution to the blip. NOTE (honest): prior testing showed even ONE commit blips for+        // ~200-300ms, so a residual race remains that is the Windows shell / AD's (it rebuilds the menu+        // on ANY CommitList that lands while it is shown) — see dev-skills/pup-jumplist. Until that is+        // solved AD-side, a mimic'd right-click must click TWICE (first blips, second holds).         setTimeout(() => {           try {             if (!sessions.has(sessionId)) return;             const s2 = sessions.get(sessionId);             if (!s2 || s2._curAppId !== appId) return;   // superseded by a later stamp — leave it alone-            s2._wikiJumplistKey = undefined;             // force a real re-attach, not a dedupe skip-            updateWikiJumplist(s2, sessionId).catch(() => {});-            console.log(`[jumplist] "${sessionId}" re-committed on the live button (post-stamp settle)`);+            updateWikiJumplist(s2, sessionId).catch(() => {});   // dedup-respecting: no-op unless tasks changed           } catch (e) {}         }, 1600);         // Unregister the superseded appId (cleanup, AD step 3). Never the pinnable base id.