← Commit history

v0.16.39 (insiders): the profile_required refusal runs only for a REGISTERED open, so a call with no sessionId still gets session_unregistered first (caught by the ConfRoomROG battery)

John Lauer ·eb66d2ae75 ·27d ago ·parent 697c2b8
7 files changed +11−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.38';           // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.39';           // 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.38\ No newline at end of file+0.16.39\ 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.38",+  "version": "0.16.39",   "expectedExtensionVersion": "0.2.17",   "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.38",+  "version": "0.16.39",   "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+5−1
@@ -2987,7 +2987,11 @@ function dispatch(verb, args) {     // an untracked window, which nb already refuses. So: with MORE THAN ONE identity connected, a window     // or tab opened with no profile and no session pin is REFUSED, naming the exact values to pass. One     // identity connected = defaulting is unambiguous and still allowed.-    if ((verb === 'nbrowser_open_window' || verb === 'nbrowser_open_tab') && !(args && (args.profile || args.profileEmail))+    // Registration first: a call with no sessionId/thread/purpose must still get session_unregistered from+    // the extension, which is the older and more specific refusal (caught by the battery on ConfRoomROG).+    const registered = !!(args && args.sessionId && (verb !== 'nbrowser_open_window' || (args.thread && args.purpose)));+    if ((verb === 'nbrowser_open_window' || verb === 'nbrowser_open_tab') && registered+        && !(args && (args.profile || args.profileEmail))         && !(args && args.sessionId && sessionProfile.get(args.sessionId))) {       const ids = userConns();       if (ids.length > 1) {
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "nb-bridge",-  "version": "0.16.38",+  "version": "0.16.39",   "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.",
tools/verb-battery.mjs+1−1
@@ -80,7 +80,7 @@ const T = {     const r = call('nbrowser_open_window', { sessionId: SID + '-noprof', thread: THREAD, purpose: 'battery: unnamed open must be refused when several identities are connected', url: HARNESS });     if (live.length < 2) { if (r.ok === true) call('nbrowser_close_window', { sessionId: SID + '-noprof' }); return A(true, `[skip] only ${live.length} identity connected - defaulting is unambiguous, guard not applicable`, ''); }     if (r.ok === true) { call('nbrowser_close_window', { sessionId: SID + '-noprof' }); return [false, 'unnamed open was ALLOWED with several identities connected']; }-    return A(r.errorCode === 'profile_required' && Array.isArray(r.profiles) && r.profiles.length === live.length, `refused: ${r.errorCode}, listed ${(r.profiles || []).length} identities`, JSON.stringify(r).slice(0, 200));+    return A(r.errorCode === 'profile_required' && Array.isArray(r.profiles) && r.profiles.length >= 2, `refused: ${r.errorCode}, listed ${(r.profiles || []).length} identities`, `errorCode:${r.errorCode} listed:${(r.profiles || []).length}`);   },   // nb-bridge#52: a window can be opened OUT OF SIGHT in one step and stays drivable there.   open_minimized: () => {