Release notes▽0.9.92
Seven changes in this release. Connections recover on their own, every action runs at most once, typing reaches code editors and web components, and a hung page stops receiving input once its deadline passes.
extension 0.9.92mcp 0.11.1chrome 116+node 24MIT
extensionbridge
connectedno reply · no heartbeatsocket reaped · slot freedreconnected
234.5…30
reconnect backoff, seconds
01
Connections recover on their own
- A socket that stops answering both pings and the heartbeat is closed, freeing the bridge's single extension slot.
- The extension reads the close code and backs off by 1.5× toward a 30-second ceiling instead of retrying every two seconds forever.
- A pairing credential the bridge has rejected is dropped, not replayed.
- Keepalive replies are now read, so a half-open socket is noticed and reconnected.
- fsb-mcp-server exits when its host closes the stdio pipe, so an orphaned server no longer ends up owning the bridge port.
- The dashboard relay socket no longer replaces itself every two seconds, which also ends the toolbar icon's gray pulse.
13,328 refusals→1 line / min
02
Bridge failures name their cause
- Refusals, revocations, replacements, reaps, and closes are journaled to bridge-events.jsonl, coalesced to one line a minute per cause.
- A pairing mismatch names both extension origins and the pair --reset fix instead of a bare HTTP 403.
- doctor reports an authorization failure instead of blaming the browser.
- disconnect_reason separates a revoked credential from an evicted service worker.
- Local health shows whether the extension is attached, which Chrome profile it runs in, and its window state.
Send
1×per action
executednot executed · safe to retryuncertain · not repeated
03
Every action runs at most once
- A click is dispatched once, never repeated by a retry layer.
- An action that never reached the page, including one aimed at a closed tab, is reported as not executed and is safe to retry.
- When delivery is uncertain, the result says so instead of repeating the edit.
- Text insertion targets a position and lands at most once.
Ctrl+End / ⌘↓
04
Typing lands where you asked in code editors
- Appending to Monaco, Ace, or CodeMirror moves the editor's own cursor to the end of the document first, so text no longer lands before the existing code.
- Replacing text works in editors that take input through EditContext and expose no text field, such as Monaco 0.57.
- Canvas editors support replacement, and a refused insertion is reported without repeating it.
- Appends to an editor focused inside a frame move the caret to the end first.
- Google Docs confirms formatted edits against saved document text. An uncertain paste is never repeated.
x-editor#shadow-root (closed)
05
Fields inside web components are reachable
- A selector that names a component now reaches the field inside it.
- Focus is detected inside open and closed shadow roots.
- Closed shadow roots are reached through chrome.dom.
- A target inside a shadow root is no longer treated as covered by its own host.
deadline
page not responding
×tab recovery06
Navigation can recover a hung page
- Page probes, script reinjection, and screenshot capture are time-bounded on a tab that stops responding.
- Once a text insertion or screenshot has given up, no further keystrokes, text, or scripts are sent to that page.
- Navigation interrupts stuck JavaScript on controlled tabs and confirms the destination has loaded before reporting success.
- A tab already hung before FSB establishes control may still need to be closed.
127.0.0.1✓[::1]✓192.168.1.20403
loopback only
07
Loopback-only HTTP and smaller fixes
- The MCP HTTP server binds only to a loopback host and answers any other Host header, or any request that carries an Origin header, with a 403. The IPv6 loopback now works instead of answering every request with a 500.
- Selectors keep their CSS conditions, and cached matches are rechecked before use.
- The vault list tells a locked vault apart from one that was never set up.
- Site guidance for X applies only on genuine X hosts.
- Dashboard QR pairing failures show their reason again and keep the camera on the Scan tab.
This release pairs extension and showcase version 0.9.92 with MCP package 0.11.1. After updating, restart your MCP client or native host. Editing and hung-navigation recovery are verified in real Chrome.