← 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

John Lauer ·d69c8d44cc ·13d ago ·parent e5620d5
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\ No newline at end of file+0.16.54\ No newline at end of file
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.",