← Commit history
v0.16.67 (insiders): The password and session exports never read pup's own browser: with no nb extension connected in the user's Chrome or Edge, they now refuse with no_user_browser (and pup falls back on its own) instead of running Chrome's export inside pup's browser (pup-bridge#145).
6 files changed
+15−5
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.66'; // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.67'; // 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.66+0.16.67
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Native Browser",- "version": "0.16.66",+ "version": "0.16.67", "expectedExtensionVersion": "0.2.23", "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.66",+ "version": "0.16.67", "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+10@@ -124,6 +124,14 @@ function drivableConns() { const r = resolvedConns(); return r.length ? r : live // classified by the browser process that spawned its native host (classifyConnOrigin): pup's are never the // default, and readiness / the stale-version nag ignore them. They stay drivable when named explicitly. function isPupConn(c) { return !!(c && c.origin && c.origin.owner === 'pup'); }+// pup-bridge#145: the export verbs read the USER's browser. pup's own browser carries nbe too, and when it was the+// only one connected the export ran there (measured 2026-11-05: chrome://password-manager opened in pup's window).+function exportTargetRefusal(tgt, verb) {+ if (tgt && tgt.conn && !isPupConn(tgt.conn)) return null;+ return { success: false, errorCode: 'no_user_browser',+ error: `${verb}: the nb extension is not connected in the user's own browser${tgt && tgt.conn ? " (only pup's browser is, and it is never the source)" : ''}`,+ _hint: "The user's Chrome or Edge needs the Adom extension connected (nbrowser_readiness says how). pup falls back to Adom Bridge's older import on its own when this happens." };+} function userConns() { return drivableConns().filter(([, c]) => !isPupConn(c)); } // The profile the user last used in that browser (Local State profile.last_used), a tie-break between two // real signed-in profiles of the same Chrome. Cached briefly: it is a file read per ranking otherwise.@@ -2094,6 +2102,7 @@ function dispatch(verb, args) { // This verb WAITS ON A HUMAN (Windows Hello), so it declares 320s in bridge.json's timeouts block. // ab's default is 60s, and the first real run died there before the user ever saw the prompt. const tgt0 = targetConn(a);+ { const no = exportTargetRefusal(tgt0, 'nbrowser_export_saved_logins'); if (no) return resolve(no); } const pkey = (tgt0 && tgt0.key) || defaultConnKey(); const browser = browserOfKey(pkey) || 'chrome'; // Preflight: stop here (do NOT open anything) when the browser is elevated - that is the only@@ -3041,6 +3050,7 @@ function dispatch(verb, args) { } } catch (e) { return resolve({ success: false, error: 'upload staging failed: ' + ((e && e.message) || e) }); } }+ if (verb === 'nbrowser_export_site_session') { const no = exportTargetRefusal(targetConn(args), verb); if (no) return resolve(no); } let crossThreadWarn = null; let tgt = targetConn(args); if (tgt && tgt.mismatch && /^pending-/.test(String(tgt.pin || ''))) {
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "nb-bridge",- "version": "0.16.66",+ "version": "0.16.67", "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.",