← Commit history
v0.16.50 (insiders): the export's save dialog is filled by nb within a fraction of a second instead of being left on screen: the poll went from 1.2s to 300ms and matches the dialog by its real title ('Export Passwords From Chrome'), because the only thing a person should ever see in this flow is the Windows Hello prompt
6 files changed
+12−7
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.49'; // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.50'; // 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.49+0.16.50
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Native Browser",- "version": "0.16.49",+ "version": "0.16.50", "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.49",+ "version": "0.16.50", "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+7−2@@ -3236,13 +3236,18 @@ async function exportSavedLogins(opts) { steps.push(step('started the export', true, invoked)); // Chrome now raises Windows Hello, then a Save As dialog. Fill the path, commit, wait for bytes.+ // THE SAVE DIALOG IS NB'S JOB, NOT THE USER'S (John, 2026-10-29: "are you seriously showing me a csv+ // download file save dialog? that's a horrible user experience"). He is right: the only thing a person+ // should ever see here is the Hello prompt. So poll FAST and fill it the moment it exists, and keep+ // waiting the whole budget - the dialog only appears AFTER they answer Hello, which can take a while. const deadline = Date.now() + timeoutSec * 1000; let saved = false; while (Date.now() < deadline) {- await _sleep(1200);+ await _sleep(300); const wins = await abCommand(null, 'desktop_list_windows', {}).catch(() => null); const list = (() => { try { return (wins.body.data || wins.body).windows || []; } catch { return []; } })();- const dlg = list.find((w) => w.className === '#32770' && /save|export/i.test(String(w.title || '')));+ const dlg = list.find((w) => (w.className === '#32770' || /^#32770/.test(String(w.className || '')))+ && /save|export|passwords/i.test(String(w.title || ''))); if (!dlg) continue; await abCommand(null, 'desktop_bring_to_front', { hwnd: dlg.hwnd, reason: 'nb-bridge#55: fill the export file name' }).catch(() => {}); await abCommand(null, 'desktop_press_key', { hwnd: dlg.hwnd, keys: 'ctrl+a', reason: 'nb-bridge#55: clear the file name' }).catch(() => {});
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "nb-bridge",- "version": "0.16.49",+ "version": "0.16.50", "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.",