Skip to content

dsh-browser 0.3.3 — the bridge plugin and the extension

Choose a tag to compare

@DightEndless DightEndless released this 11 Oct 14:11
· 11 commits to main since this release

dsh-browser 0.3.3 — the bridge plugin and the extension

Two artifacts, same release:

  • dightendless-dsh-bridge-browser-0.3.3.tgz — the DSH plugin (bridge-browser),
    prebuilt, so no build step and no allowlisting are needed.
  • dsh-browser-extension-0.3.3.zip — the Chrome/Edge extension, already built.
    Unzip it, then load the folder through Load unpacked.
dsh plugin --profile web add https://github.com/DightEndless/dsh-browser/releases/download/v0.3.3/dightendless-dsh-bridge-browser-0.3.3.tgz

The plugin is also on npm — npm i @dightendless/dsh-bridge-browser — for setups that
resolve plugins from a registry rather than from a release asset.

What changed since 0.3.2

This is the first release in which the extension itself changes. The 0.3.1 and 0.3.2
extension zips differed from their predecessors by the manifest version alone, so if you
installed either of them there was nothing to gain by reinstalling. This one is different:
if you are running the 0.3.2 plugin or older, update the extension too, or none of the
fixes below will reach you.

A page dialog no longer dead-ends the tab

alert, confirm, prompt and beforeunload freeze the tab's JavaScript thread, and the
content script that every browser tool goes through is part of what stops answering. The old
behaviour was a timeout — then a second, identical timeout from the tool the first message
pointed at.

The dialog is now reported while it is still cheap to do so, and answered by the model through
a new tool, browser_dialog:

[Native JS dialog opened: confirm("Delete this record?") — WARNING: Tab is frozen.
 Call browser_dialog with action: 'accept' or 'dismiss', or call browser_reload to abort.]

accept / dismiss, plus promptText for a prompt (an accepted prompt with no text submits
the page's own default). Nothing is answered on your behalf — the call goes through the
same approval prompt as every other state-changing tool, so you see the dialog's question and
the answer before it is sent. If nothing answers within 60 seconds the dialog can no longer be
answered at all; browser_reload then resets the tab.

Controls that were visible but unreachable

A checkbox or radio made invisible the usual way — opacity: 0, or a zero-sized input behind
a styled label, as every component library does it — had no snapshot number of its own, so the
model could read it but never click it. Its visible label is now indexed as the proxy:

[4] checkbox "Custom Styled Switch (via label)"

Clicking or toggling that number drives the real input. Two related gaps are closed in the same
pass: browser_click_at now sends a pointer move first, so a control that ignores a click until
it has seen a hover responds; and an element outside the viewport is scrolled into view,
re-measured, and clicked only once it really landed inside.

Reload is a real escape hatch

browser_reload used to be routed through the content script — the one channel a frozen tab
cannot answer — so the tool the error message recommended was the tool that would fail next.
It now falls back to the browser-level reload, which resets the page in milliseconds. That
makes it the way out of any frozen tab, dialog or not.

Requirements

Chrome 116+ (or Edge); and DSH 0.2.0-rc.2 or newer within 0.2.x, including the 0.2.1-alpha
line. The source-installer route additionally needs Node.js 22+ with pnpm.

Three ways to install

  1. Plugin from this release (one command, nothing to build) — the line above, or
    npm i @dightendless/dsh-bridge-browser.
  2. Extension only — download dsh-browser-extension-0.3.3.zip, unzip, then
    chrome://extensions → Load unpacked → pick the unzipped folder.
  3. Everything from source — the installer in the README clones the repository, builds both
    halves and registers the plugin bundle.

Then open the side panel on any page and ask: the model sees a numbered inventory of what is on
screen and acts through those numbers.