← 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
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" }