← Commit history
v0.16.60 (insiders): nb-bridge#55: fill and commit the save dialog via UIA (SetValue the filename, Invoke Save) instead of SendInput - on this machine SendInput is refused by Windows because another automation agent holds the input queue, while UIA goes through the accessibility provider and is immune; clipboard stays staged as the human fallback
6 files changed
+15−13
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.59'; // keep in lockstep with package.json (pkg version)+const VERSION = '0.16.60'; // 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.59+0.16.60
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Native Browser",- "version": "0.16.59",+ "version": "0.16.60", "expectedExtensionVersion": "0.2.22", "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.59",+ "version": "0.16.60", "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−8@@ -3399,14 +3399,16 @@ async function exportSavedLogins(opts) { const d = st.dialog; const rect = { x: d.left, y: d.top, w: d.right - d.left, h: d.bottom - d.top, right: d.right, top: d.top }; await exportSayBeside(rect, `Step 3 of 3: ${brand} is asking where to save. Adom is pasting the path and pressing Save for you - nothing for you to do. The file lands where only you can read it, pup imports it, then it is deleted.`);- // Paste the staged path and commit, via SendInput. If Chrome is NOT elevated this lands; if it- // IS elevated Windows blocks our input and the file simply never appears, which we handle below.+ // Fill and commit via UIA, NOT SendInput. On this machine SendInput is "refused by Windows"+ // (another automation agent is holding the input queue), but UIA Invoke clearly works - it is how+ // the Download file button got clicked. UIA goes through the accessibility provider, not the input+ // queue, so it is immune to that contention. Clipboard is already staged as a human fallback. fillTries++;- await abCommand(null, 'desktop_bring_to_front', { hwnd: d.hwnd, reason: 'nb-bridge#55: focus the save dialog to paste the path' }).catch(() => {});- await _sleep(250);- await abCommand(null, 'desktop_press_key', { hwnd: d.hwnd, keys: 'ctrl+a', reason: 'nb-bridge#55: select the file name field' }).catch(() => {});- await abCommand(null, 'desktop_press_key', { hwnd: d.hwnd, keys: 'ctrl+v', reason: 'nb-bridge#55: paste the staged export path' }).catch(() => {});- await abCommand(null, 'desktop_press_key', { hwnd: d.hwnd, keys: 'enter', reason: 'nb-bridge#55: commit the export' }).catch(() => {});+ await abCommand(null, 'desktop_ui_set', { hwnd: d.hwnd, contains: 'File name', value: csvPath,+ reason: 'nb-bridge#55: set the export file name via UIA (SendInput is being refused here)' }).catch(() => null);+ await _sleep(200);+ await abCommand(null, 'desktop_ui_click', { hwnd: d.hwnd, contains: 'Save',+ reason: 'nb-bridge#55: commit the export via UIA so the dialog does not sit in front of the user' }).catch(() => null); filledAt = Date.now(); } else if (st && st.hello && stage === 'hello') { await exportSay(`Step 1 of 3: approve the ${brand} / Windows Hello prompt on your screen - that is the only thing Adom needs from you.`);@@ -3418,7 +3420,7 @@ async function exportSavedLogins(opts) { // If the dialog has been up for a few seconds and our paste-and-enter has not produced a file, // Windows is blocking our input (an elevated browser). Tell the user plainly and let them finish it. if (sawDialogAt && fillTries >= 2 && !foundFile && Date.now() - sawDialogAt > 5000) {- await exportSay(`${brand} is asking where to save, and Windows is not letting Adom press the button (your browser is running elevated). The path is on your clipboard: press Ctrl+V then Enter, or just press Save. Adom picks the file up and deletes it.`, { persist: true });+ await exportSay(`Almost done. ${brand} is asking where to save, and Adom could not press the button for you here. The path is already in the file name box - just press Save (or Ctrl+V then Enter). Adom picks the file up and deletes it straight after.`, { persist: true }); } } steps.push(step('answered the save dialog', saved, saved ? `the save dialog was on screen for ${dialogVisibleMs}ms` : 'no save dialog appeared'));
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "nb-bridge",- "version": "0.16.59",+ "version": "0.16.60", "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.",