← Commit history
Update 5 file(s)
5 files changed
+17−9
bridge/BRIDGE_VERSION+1−1@@ -1 +1 @@-0.1.51+0.1.52
bridge/bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "native-browser", "displayName": "Adom Browser Extension",- "version": "0.1.51",+ "version": "0.1.52", "expectedExtensionVersion": "0.1.3", "description": "Drives the user's REAL signed-in Chrome/Edge. MOST verbs require the Adom extension installed in that browser profile (CDP driving: navigate/click/read/screenshot). TWO verbs need NO extension at all and work on any machine: nbrowser_open_os_window (open a URL in the user's real profile, background+flashing - the OAuth/consent path) and nbrowser_os_windows (enumerate browser windows). Also extension-free: nbrowser_profiles, nbrowser_wake_profile, nbrowser_force_close. The bridge binds an ephemeral loopback port and the native-messaging host pumps stdio <-> bridge.", "homepage": "https://wiki.adom.inc/adom/adom-browser-extension",
bridge/package.json+1−1@@ -1,6 +1,6 @@ { "name": "adom-native-browser-bridge",- "version": "0.1.51",+ "version": "0.1.52", "private": true, "description": "adom-desktop bridge for the Adom native-browser extension (Chrome + Edge)", "main": "server.js",
bridge/server.js+10−2@@ -2091,7 +2091,7 @@ function dispatch(verb, args) { pending.delete(id); resolve({ success: false, error: `verb ${verb} timed out`, _hint: 'extension did not reply in time' }); }, timeoutFor(verb));- pending.set(id, { resolve, timer, verb, toFile: !!(args && args.toFile), profileKey: tgt.key, args });+ pending.set(id, { resolve, timer, verb, toFile: !!(args && args.toFile), profileKey: tgt.key, args, caller: currentCaller(), crossThreadWarn }); sock.write(JSON.stringify({ id, verb, args: args || {} }) + '\n'); }; // PIN the session to whatever profile this window opened in, so every later verb carrying this@@ -2117,6 +2117,14 @@ function dispatch(verb, args) { } async function onHostFrame(frame) {+ // Re-enter the ORIGINATING caller's context: this reply arrives on the extension socket, outside the+ // HTTP request's async scope, so ALS is empty here. Without this, every badge paint / window-identity+ // / caption we fire from the reply path would forward "self" instead of the thread that asked.+ const _p0 = (frame && frame.id != null) ? pending.get(frame.id) : null;+ if (_p0 && _p0.caller) return callerCtx.run(_p0.caller, () => onHostFrameInner(frame));+ return onHostFrameInner(frame);+}+async function onHostFrameInner(frame) { if (frame && frame.id != null && pending.has(frame.id)) { const p = pending.get(frame.id); clearTimeout(p.timer);@@ -2212,7 +2220,7 @@ async function onHostFrame(frame) { if (payload.sessionId) touchBadge(payload.sessionId, p.profileKey); else touchProfileBadge(p.profileKey); }- if (crossThreadWarn && payload && typeof payload === 'object') payload._concurrentAgents = crossThreadWarn;+ if (p.crossThreadWarn && payload && typeof payload === 'object') payload._concurrentAgents = p.crossThreadWarn; const sid = payload && payload.sessionId; logActivity({ verb: p.verb, sessionId: sid || null, thread: sessionThread.get(sid) || null, profile: p.profileKey || null, ok: payload && payload.ok !== false, errorCode: (payload && payload.errorCode) || null, ...(p._internal ? { internal: true } : {}) }); resolve_ok(p.resolve, payload);
native-browser-bridge-manifest.json+4−4@@ -1,8 +1,8 @@ { "manifest_version": 1,- "version": "0.1.51",- "url": "https://wiki.adom.inc/download/adom/adom-browser-extension/0.1.51/native-browser-bridge-v0.1.51.zip",- "sha256": "02fa75c3af5cd3f4b4ff7cec6fdff66749d6a35edce356670add923f734072a0",- "size": 98922,+ "version": "0.1.52",+ "url": "https://wiki.adom.inc/download/adom/adom-browser-extension/0.1.52/native-browser-bridge-v0.1.52.zip",+ "sha256": "87eb000def15054aec5d05f05b6b6d13f35d69f927380504fe93968a75236582",+ "size": 99127, "released_at": "2026-07-25T00:00:00Z" }