← Commit history
v0.16.59 (insiders): nb-bridge#55 REAL caption fix: every export caption was silently rejected because desktop_caption requires a reason arg and the exportSay helpers never passed one - the whole on-screen narration never rendered (John saw no caption across every run). All caption calls now carry a reason
6 files changed
+8−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.58'; // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.59'; // 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.58+0.16.59
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Native Browser",- "version": "0.16.58",+ "version": "0.16.59", "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.58",+ "version": "0.16.59", "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+3−3@@ -3148,7 +3148,7 @@ function writeSecretHandoff(kind, meta, secret) { // cleared at the end - a stale banner over someone's desktop is its own bug. const EXPORT_CAPTION = 'nb-export-logins'; const exportSay = (text, opts2) => abCommand(null, 'desktop_caption',- { text, id: EXPORT_CAPTION, position: 'top', size: 'medium', persist: true, ...(opts2 || {}) }).catch(() => {});+ { text, id: EXPORT_CAPTION, position: 'top', size: 'medium', persist: true, reason: 'nb-bridge#55: walking the user through the password export on screen', ...(opts2 || {}) }).catch(() => {}); // A panel pinned NEXT TO the dialog the user is looking at, rather than a banner somewhere else on the // screen (John, 2026-10-29: "put a window to the right of it ... tell the user what's happening"). // Positions are 0..1 fractions of the screen, so place it just right of the dialog's own rect.@@ -3159,10 +3159,10 @@ const exportSayBeside = async (rect, text) => { const sh = (disp && disp.body && (disp.body.fullHeight || (disp.body.display && disp.body.display.height))) || 1600; const x = Math.min(0.97, Math.max(0.03, ((rect.right || rect.x + rect.w) + 40) / sw)); const y = Math.min(0.9, Math.max(0.05, ((rect.top || rect.y) + 60) / sh));- return abCommand(null, 'desktop_caption', { text, id: EXPORT_CAPTION, x, y, size: 'medium', persist: true }).catch(() => {});+ return abCommand(null, 'desktop_caption', { text, id: EXPORT_CAPTION, x, y, size: 'medium', persist: true, reason: 'nb-bridge#55: narrate the save step beside the dialog the user is looking at' }).catch(() => {}); } catch { return exportSay(text); } };-const exportSayClear = () => abCommand(null, 'desktop_caption', { id: EXPORT_CAPTION, action: 'hide' }).catch(() => {});+const exportSayClear = () => abCommand(null, 'desktop_caption', { id: EXPORT_CAPTION, action: 'hide', reason: 'nb-bridge#55: clear the export narration' }).catch(() => {}); // WATCH FOR THE FILE, NOT THE WINDOW (John, 2026-10-29). Window enumeration is not reliable here: the // save dialog is a modal another agent on the same desktop can dismiss between two scans, and we saw it // present in the user's screenshot and absent in ours seconds later. The file Chrome writes cannot be
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "nb-bridge",- "version": "0.16.58",+ "version": "0.16.59", "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.",