← Commit history
v0.16.54 (insiders): the export's notifications carry ab's focus{hwnd}, so clicking the toast reveals the browser window the export is about (and the save dialog when one is waiting) instead of opening Adom Bridge's own app
6 files changed
+16−10
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.53'; // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.54'; // 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.53+0.16.54
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Native Browser",- "version": "0.16.53",+ "version": "0.16.54", "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.53",+ "version": "0.16.54", "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+11−5@@ -3181,9 +3181,6 @@ async function exportSavedLogins(opts) { const cleanup = () => { try { fs.unlinkSync(csvPath); } catch {} }; const brand = scheme === 'edge' ? 'Edge' : 'Chrome';- await _notify({ id: 'nb-export-logins', level: 'warning', scenario: 'reminder',- title: `${brand} will ask you to confirm`,- body: `Adom is handing your saved ${brand} logins to pup so it can sign you in. ${brand} asks for Windows Hello once - approve it and this finishes by itself.` }).catch(() => {}); await exportSay(`Adom is loading pup with your saved ${brand} logins. ${brand} will ask you to confirm it is you - approve that prompt. Nothing else is needed from you.`); steps.push(step('told the user a Hello prompt is coming', true)); @@ -3195,6 +3192,13 @@ async function exportSavedLogins(opts) { try { hwnd = JSON.parse(open.output).hwnd; } catch {} if (!hwnd) { cleanup(); return { ok: false, errorCode: 'no_window', error: 'could not open a window to drive the export in', steps }; } steps.push(step('opened a background window nb owns', true, `hwnd ${hwnd}`));+ // The toast is ABOUT that browser window, so clicking it must REVEAL THAT WINDOW (John, 2026-10-29:+ // "why when i click it does it open hydrogen?"). ab's `focus` does exactly this; without it a toast+ // click falls back to opening Adom Bridge's own app, which is never what the person wanted.+ await _notify({ id: 'nb-export-logins', level: 'warning', scenario: 'reminder', focus: { hwnd },+ title: `${brand} will ask you to confirm`,+ body: `Adom is handing your saved ${brand} logins to pup so it can sign you in. ${brand} asks for Windows Hello once - approve it and this finishes by itself. Click this to see the window.`,+ buttons: [{ label: 'Show me' }] }).catch(() => {}); const done = async (res) => { await exportSayClear(); try { await dispatch('nbrowser_close_window', { sessionId: sid }); } catch {} return res; }; const nav = await abCommand(null, 'desktop_navigate', { hwnd, url: `${scheme}://password-manager/settings`,@@ -3336,8 +3340,10 @@ async function exportSavedLogins(opts) { } catch {} if (stuck) { await exportSay(`${brand} is asking where to save your logins and Adom could not fill it in. Click Cancel to stop - nothing is exported. (Adom asked for this to load pup with your logins.)`, { persist: true });- await _notify({ id: 'nb-export-logins', level: 'warning', scenario: 'reminder', title: 'A save dialog is waiting on your screen',- body: `${brand} is asking where to save your exported logins. Adom could not fill it in, so click Cancel - nothing will be exported and you can retry later.` }).catch(() => {});+ await _notify({ id: 'nb-export-logins', level: 'warning', scenario: 'reminder', focus: { hwnd: stuck.hwnd },+ title: 'A save dialog is waiting on your screen',+ body: `${brand} is asking where to save your exported logins. Press Save and Adom picks the file up and deletes it, or press Cancel to stop - nothing is exported either way until you choose. Click this to see it.`,+ buttons: [{ label: 'Show me' }] }).catch(() => {}); } else { await exportSay(`Adom stopped waiting for the ${brand} confirmation. Nothing was exported.`, { persist: false, duration: 8000 }); }
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "nb-bridge",- "version": "0.16.53",+ "version": "0.16.54", "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.",