← 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
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" }