← Commit history
v0.16.46 (insiders): nb-bridge#55 first real run: Chrome 156 titles the row 'Export passwords' but labels the button 'Download file', so the export never started; both labels are tried now, and when none match the refusal lists the control names actually on the page so the next rename is a one-line fix
6 files changed
+20−8
bin/nb-dashboard+1−1@@ -20,7 +20,7 @@ const { execFile, spawn } = require('child_process'); const fs = require('fs'); const crypto = require('crypto'); -const VERSION = '0.16.45'; // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.46'; // keep in lockstep with package.json (pkg version) // SEND TO AI IS UN-PARKED (John: "yeah, we are re-enabling the send to ai. it seems to be good now"). // The ah build thread certified the crash family dead on the gate-fixed build and the delivery leg is // proven end to end. The park const is DELETED rather than flipped, so no dead branch can resurrect it.
bridge/BRIDGE_VERSION+1−1@@ -1 +1 @@-0.16.45+0.16.46
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Native Browser",- "version": "0.16.45",+ "version": "0.16.46", "expectedExtensionVersion": "0.2.22", "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",
bridge/package.json+1−1@@ -1,6 +1,6 @@ { "name": "adom-native-browser-bridge",- "version": "0.16.45",+ "version": "0.16.46", "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",
bridge/server.js+15−3@@ -3171,8 +3171,11 @@ async function exportSavedLogins(opts) { await _sleep(1500); // Invoke the button BY NAME. If the name moves, say so with a screenshot instead of clicking blind.+ // Chrome 156 renamed this: the ROW is titled "Export passwords" but the clickable control is+ // "Download file" (first real run on AdomLapper, nb-bridge#55). Try the button labels first, then the+ // older row-as-button wording, so this survives either. let invoked = null;- for (const name of ['Export passwords', 'Export passwords…', 'Export']) {+ for (const name of ['Download file', 'Download File', 'Export passwords', 'Export passwords…', 'Export']) { const r = await abCommand(null, 'desktop_ui_click', { hwnd, contains: name, reason: 'nb-bridge#55: start the browser\'s own consented password export' }).catch(() => null); const okr = r && r.body && (r.body.success !== false);@@ -3181,10 +3184,19 @@ async function exportSavedLogins(opts) { if (!invoked) { const shot = await abCommand(null, 'desktop_screenshot_window', { hwnd, reason: 'nb-bridge#55: the export control was not found' }).catch(() => null); const sp = (shot && shot.body && (shot.body.localSafePath || shot.body.safePath || shot.body.fullPath)) || null;+ // Say WHAT IS actually on the page, so the next rename is a one-line fix instead of another round+ // trip through a screenshot (nb-bridge#55: "Export passwords" -> "Download file" cost exactly that).+ let seen = [];+ try {+ const f = await abCommand(null, 'desktop_find_controls', { hwnd, contains: 'o', reason: 'nb-bridge#55: list the controls actually on the export page' });+ const ms = (f && f.body && (f.body.matches || (f.body.data && f.body.data.matches))) || [];+ seen = ms.map((m) => String(m.name || '').slice(0, 60)).filter(Boolean).slice(0, 25);+ } catch {} steps.push(step('found the Export control', false)); return done({ ok: false, errorCode: 'export_control_not_found', steps,- error: `could not find an "Export passwords" control on ${scheme}://password-manager/settings - the page has probably changed`,- screenshot: sp,+ error: `none of the export controls were found on ${scheme}://password-manager/settings (tried: Download file, Export passwords, Export) - the browser has renamed them again`,+ screenshot: sp, controlsOnPage: seen,+ triedNames: ['Download file', 'Download File', 'Export passwords', 'Export passwords…', 'Export'], _hint: 'This is UI automation against the browser\'s own page, so it drifts when the browser reorganises it. Look at the screenshot, then file it on adom/nb-bridge; the user can still export by hand from that page and hand pup the file.' }); } steps.push(step('started the export', true, invoked));
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "nb-bridge",- "version": "0.16.45",+ "version": "0.16.46", "type": "app", "title": "NB - Native Browser Bridge", "description": "This package installs the SKILLS into your container so your AI knows how to drive your real signed-in Chrome and Edge; Bridge loads the bridge runtime itself from the release zip.",