← Commit history

v0.16.12 (insiders): chrome_status.notifications: try both ab base URLs for /status and report how the read went (abRead, _abDiag) so a missing permissions block is diagnosable instead of a silent null.

John Lauer ·3a7bc4845f ·2mo ago ·parent a18e4ac
6 files changed +11−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.11';           // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.12';           // 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.11\ No newline at end of file+0.16.12\ 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.11",+  "version": "0.16.12",   "expectedExtensionVersion": "0.2.10",   "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.11",+  "version": "0.16.12",   "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+6−5
@@ -1280,20 +1280,21 @@ async function notificationSwitches() {   let ab = null;   // ab's /status is a plain GET on its direct API (the CLI's `status`), not a command verb.   const pick = (out) => (out && out.desktop && out.desktop.permissions && out.desktop.permissions.notifications) || (out && out.data && out.data.desktop && out.data.desktop.permissions && out.data.desktop.permissions.notifications) || null;+  const diag = { tried: [] };   const getJson = (url) => new Promise((resolve) => {     try {       const u = new URL(url);-      const rq = http.get({ host: u.hostname, port: u.port, path: u.pathname, timeout: 4000 }, (rs) => { let b = ''; rs.on('data', (c) => (b += c)); rs.on('end', () => { try { resolve(JSON.parse(b)); } catch { resolve(null); } }); });-      rq.on('error', () => resolve(null)); rq.on('timeout', () => { rq.destroy(); resolve(null); });-    } catch { resolve(null); }+      const rq = http.get({ host: u.hostname, port: u.port || 80, path: u.pathname, timeout: 4000, headers: (typeof abAuthHeaders === 'function') ? abAuthHeaders() : {} }, (rs) => { let b = ''; rs.on('data', (c) => (b += c)); rs.on('end', () => { diag.tried.push({ url, code: rs.statusCode, bytes: b.length, hasPerms: /"permissions"/.test(b) }); try { resolve(JSON.parse(b)); } catch { resolve(null); } }); });+      rq.on('error', (e) => { diag.tried.push({ url, error: e.message }); resolve(null); }); rq.on('timeout', () => { rq.destroy(); diag.tried.push({ url, error: 'timeout' }); resolve(null); });+    } catch (e) { diag.tried.push({ url, error: String(e && e.message || e) }); resolve(null); }   });-  try { ab = pick(await getJson(discoverAdBase() + '/status')); } catch {}+  for (const base of [discoverAdBase(), discoverAdBase(true)]) { if (ab) break; try { ab = pick(await getJson(base + '/status')); } catch {} }   if (!ab) { try { const r = await abCommand('desktop', 'status', {}); let out = r && r.body; if (out && typeof out.output === 'string') { try { out = JSON.parse(out.output); } catch {} } ab = pick(out); } catch {} }   const bannersEnabled = ab ? ab.bannersEnabled !== false : true;   const urgentAllowed = ab ? ab.urgentAllowed === true : null;   const toastMayBeMuted = !(toastsEnabled && adomBridgeEnabled && bannersEnabled);   const mayBeHiddenByDnd = !toastMayBeMuted && urgentAllowed === false;-  const v = { checked: true, toastsEnabled, adomBridgeEnabled, bannersEnabled, urgentAllowed, toastMayBeMuted, mayBeHiddenByDnd,+  const v = { checked: true, toastsEnabled, adomBridgeEnabled, bannersEnabled, urgentAllowed, toastMayBeMuted, mayBeHiddenByDnd, abRead: !!ab, _abDiag: ab ? undefined : diag,     _hint: !toastsEnabled ? 'All Windows notifications are OFF on this PC: toasts fold into the notification center unseen. Ask the user to turn notifications back on.'          : (!adomBridgeEnabled || !bannersEnabled) ? 'Notifications for Adom Bridge are switched OFF in Windows Settings > Notifications: its toasts never show. Ask the user to turn them on (ab notification_settings_open opens that page).'          : mayBeHiddenByDnd ? 'This PC has never granted Adom Bridge the one-time "Allow important notifications" permission, so while Do Not Disturb is on (a fresh Windows 11 keeps it on) every ab toast, including the Approve-now one, is hidden. A human clicks Allow on Windows\' prompt or enables the priority option under Settings > System > Notifications > Adom Bridge (ab notification_settings_open); until then do not rely on the toast.'
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "nb-bridge",-  "version": "0.16.11",+  "version": "0.16.12",   "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.",