← Commit history

nb 0.4.9 / nbe 0.2.6: a click that opens a dialog reports dialogOpened + changed:true instead of retrying into the frozen page

John Lauer ·efdba2fb4e ·2mo ago ·parent 439e7d3
6 files changed +21−10
bridge/BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.4.8+0.4.9
bridge/bridge.json+2−2
@@ -2,8 +2,8 @@   "manifest_version": 1,   "name": "native-browser",   "displayName": "Adom Native Browser",-  "version": "0.4.8",-  "expectedExtensionVersion": "0.2.5",+  "version": "0.4.9",+  "expectedExtensionVersion": "0.2.6",   "description": "Drives the user's REAL signed-in Chrome/Edge, in two layers. Layer 1 (nb) needs NOTHING installed and works on any machine: nbrowser_open_os_window (open a URL in the user's real profile, background+flashing, the OAuth/consent path), nbrowser_os_windows, nbrowser_profiles, nbrowser_wake_profile, nbrowser_force_close. Layer 2 (nbe, the Adom Native Browser Extension) unlocks the rest: CDP driving (navigate/click/read/screenshot) inside their logged-in profile. The bridge binds an ephemeral loopback port and the native-messaging host pumps stdio <-> bridge.",   "homepage": "https://wiki.adom.inc/adom/nb-bridge",   "author": "Adom Inc.",
bridge/package.json+1−1
@@ -1,6 +1,6 @@ {   "name": "adom-native-browser-bridge",-  "version": "0.4.8",+  "version": "0.4.9",   "private": true,   "description": "Native-browser bridge for Bridge (ab): layer 1 (nb) plus layer 2 via nbe, the Adom Native Browser Extension (Chrome + Edge).",   "main": "server.js",
extension/manifest.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 3,   "name": "Adom Native Browser Extension",   "short_name": "Adom",-  "version": "0.2.5",+  "version": "0.2.6",   "description": "Layer 2 of Adom Native Browser (nb): lets your Adom AI drive your real, signed-in Chrome or Edge, using your own logins.",   "minimum_chrome_version": "116",   "background": {
extension/src/cdp.js+11
@@ -990,6 +990,17 @@ export async function clickChanged(tabId, args) {   // untouched - because the coordinates were resolved a beat before the page settled (late layout,   // font swap, lazy image) so the point no longer hit the element. Re-resolving and dispatching once   // more costs ~600ms only in the failure case and turns a silent miss into a hit.+  // A click that OPENED A DIALOG froze the page - the DOM cannot change, so changed:false is expected+  // and the dialog IS the effect. Retrying here queued a second click into the frozen page, which fired+  // a SECOND confirm() the moment the first auto-dismissed (found by the verb battery, 2026-08-22).+  const dlgNow = _openDialogs.get(Number(tabId));+  const dlgRecent = !changed && [..._recentDialogs].reverse().find((x) => x.tabId === String(tabId) && (Date.now() - x.ts) < 3000);+  if (!changed && (dlgNow || dlgRecent)) {+    const d = dlgNow || dlgRecent;+    return { ...r, changed: true, retried: false, dialogOpened: { type: d.type || d.dialogType, message: d.message },+      urlBefore: before.u, urlAfter: after.u,+      _hint: `The click's effect was a native ${d.type || d.dialogType} dialog ("${String(d.message || '').slice(0, 80)}")${dlgNow ? ' which is OPEN and blocking the page - handle it: nbrowser_handle_dialog {sessionId, accept:true|false}' : ' which was auto-handled (see nbrowser_events)'} - the page DOM did not change and that is expected.` };+  }   if (!changed && args.retry !== false) {     await sleep(350);     const r2 = await inputDispatch(tabId, { ...args, type: 'click' });
native-browser-bridge-manifest.json+5−5
@@ -1,8 +1,8 @@ {   "manifest_version": 1,-  "version": "0.4.8",-  "url": "https://wiki.adom.inc/download/adom/nb-bridge/0.4.8/native-browser-bridge-v0.4.8.zip",-  "sha256": "97c403016f95396b15545e4d609b9edc08c365c6f18822db5b88481d835eaa22",-  "size": 106215,-  "released_at": "2026-08-22T14:37:49Z"+  "version": "0.4.9",+  "url": "https://wiki.adom.inc/download/adom/nb-bridge/0.4.9/native-browser-bridge-v0.4.9.zip",+  "sha256": "27016dfb08c5fa916df6b21b3559f81b3f8e6d3cfd6725224284e5e63fe050c8",+  "size": 106216,+  "released_at": "2026-08-22T14:42:24Z" }