← Commit history

nb 0.4.13: Edge disabled-detection (disable_reasons, Edge writes no state field) + disabled-is-a-choice hints - a user-disabled nbe is respected like profile_block, never nagged or enabled

John Lauer ·01afdb9a33 ·2mo ago ·parent 80f5b9a
5 files changed +20−10
bridge/BRIDGE_VERSION+1−1
@@ -1 +1 @@-0.4.12+0.4.13
bridge/bridge.json+1−1
@@ -2,7 +2,7 @@   "manifest_version": 1,   "name": "native-browser",   "displayName": "Adom Native Browser",-  "version": "0.4.12",+  "version": "0.4.13",   "expectedExtensionVersion": "0.2.8",   "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.4.12",+  "version": "0.4.13",   "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+12−2
@@ -2761,7 +2761,14 @@ function adomExtStateForProfile(browser, profileDir) {         // Match on our pinned extension ID or the source path too.         const hit = /adom/i.test(nm) || id.startsWith(ADOM_EXT_ID_PREFIX) || /adom-native-browser|adom-browser-extension|[\\/]adom[\\/]/i.test(pth);         if (!hit) continue;-        return { checked: true, installed: true, id, name: nm || 'Adom (unpacked)', version: (ent.manifest && ent.manifest.version) || null, enabled: ent.state !== 0, unpackedPath: ent.path || null, unpacked: !nm };+        // ENABLED detection differs per browser (measured 2026-08-23 on John's laptop): Chrome writes+        // state:1/0; EDGE writes NO state field at all and marks a user-disabled extension with+        // disable_reasons:[1]. `ent.state !== 0` therefore called John's deliberately-disabled Edge+        // nbe "enabled" - and we nagged a choice he had made on purpose. Disabled truth:+        // state===0 OR a non-empty disable_reasons (array or bitmask).+        const dr = ent.disable_reasons;+        const disabled = ent.state === 0 || (Array.isArray(dr) ? dr.length > 0 : (typeof dr === 'number' && dr !== 0));+        return { checked: true, installed: true, id, name: nm || 'Adom (unpacked)', version: (ent.manifest && ent.manifest.version) || null, enabled: !disabled, disableReasons: dr || null, unpackedPath: ent.path || null, unpacked: !nm };       }     }     return { checked: true, installed: false };@@ -2815,7 +2822,10 @@ function extFixHint(browser, profileDir, st) {     const src = adomExtKnownPath();     return `The Adom extension is NOT INSTALLED in this ${browser} profile (${profileDir}) - extensions are per-profile. Fix: install it into THAT profile via the installing-the-extension skill (open ${scheme} in a window of that profile -> Developer mode -> Load unpacked${src ? ` -> "${src}" (the same source dir the working profile uses)` : ''}).`;   }-  if (!st.enabled) return `The Adom extension IS installed in this ${browser} profile (${st.name} v${st.version}) but it is DISABLED. Fix: enable its toggle on ${scheme} in that profile (driving-the-desktop can do this in the background via UIA), or ask the user to flip it on.`;+  // A DISABLED extension is not a fault to fix - it is the USER'S OWN OFF SWITCH (John keeps nbe+  // disabled in Edge precisely so it can never be driven). Telling the AI to "fix" it taught the AI+  // to nag and even background-enable a control the user set on purpose. Treat like profile_block.+  if (!st.enabled) return `The Adom extension is installed in this ${browser} profile (${st.name} v${st.version}) but the USER has DISABLED it - that is their explicit choice, the browser-native equivalent of nbrowser_profile_block. Do NOT enable it, do NOT nag, do NOT work around it; drive a different profile or offer layer-1 only. Mention it at most once if directly relevant, and only as "you have it switched off in ${browser}; say the word if you ever want it back on."`;   return `The Adom extension is installed AND enabled in this ${browser} profile (v${st.version}) but its service worker has not dialed the bridge. Fix: retry nbrowser_wake_profile (SWs can be slow), and if it still never connects, verify the native-messaging host manifest allows THIS browser's extension id (nbrowser_add_extension_origin {id:"${st.id}"}).`; } // On startup, undo any STALE "Adom is driving" badge a PRIOR bridge left behind (bridges are KILLED, not
native-browser-bridge-manifest.json+5−5
@@ -1,8 +1,8 @@ {   "manifest_version": 1,-  "version": "0.4.12",-  "url": "https://wiki.adom.inc/download/adom/nb-bridge/0.4.12/native-browser-bridge-v0.4.12.zip",-  "sha256": "7b35d68cca60f2dada0dbdbebbcdf6b58382773ce1dcf8cb7e70d3fe5bddb1e3",-  "size": 107092,-  "released_at": "2026-08-23T12:16:51Z"+  "version": "0.4.13",+  "url": "https://wiki.adom.inc/download/adom/nb-bridge/0.4.13/native-browser-bridge-v0.4.13.zip",+  "sha256": "6295a09b99e8869b7e8ae9c270f6f22c2b003e76ef6fe74ca442bced7dc833f4",+  "size": 107568,+  "released_at": "2026-08-23T13:24:01Z" }