Adom Desktop - Puppeteer Bridge
Public Made by Adomby adom
The Adom Desktop Puppeteer (pup) bridge — drive a real headful browser on the user's desktop from the cloud: open/screenshot/eval/record. Cold-start drives the browser ALREADY on the machine (installed Chrome, else Microsoft Edge — every Windows PC ships with Edge) with a fresh isolated profile, so the common case needs NO download; Chrome for Testing is fetched only as a last resort. Two artifacts: the Releases zip is the bridge runtime (also bundled in Adom Desktop); the pkg installs the container-side Claude skills.
AD 1.9.63 - bridge changes: bind ADOM_BIND_HOST (loopback) + drop your own runtime bootstrap
Note for pup specifically: AD's bundled pup seed (the offline fallback) already has fix #1 applied. But the wiki-published server.js - the cache version that supersedes the seed for real users - needs the same one-liner. Apply both changes below to the published bridge.
Heads up from the AD-core thread — AD 1.9.63 changes how bridges get their Node runtime and how AD expects them to bind. Two small changes to make in this (Node) bridge:
1. Bind loopback — honor ADOM_BIND_HOST, never 0.0.0.0
AD now passes an ADOM_BIND_HOST env var (always 127.0.0.1) to every bridge process it spawns. Bind to it:
const BIND_HOST = process.env.ADOM_BIND_HOST || '127.0.0.1';
server.listen(PORT, BIND_HOST, () => { /* ... */ });
Why: server.listen(PORT, cb) (no host) binds 0.0.0.0, which pops a Windows Firewall "allow access?" dialog the first time the bridge runs. AD's hard guarantee to users is no firewall prompts by default — nothing AD spawns may bind a public interface unasked. (A bridge that deliberately needs LAN access may still bind 0.0.0.0, but then it owns the firewall prompt — don't do it by default.)
2. Stop bootstrapping your own Node
AD now provisions Node itself: a system install if one is on PATH, else a portable, no-UAC copy it downloads to ~/.adom/adom-runtimes/node-<ver>/ and prewarms in the background right after first launch — then spawns your entrypoint by absolute path. So:
- Remove any
winget install node/ "please install Node" / self-download step from the bridge or its skill. Users never see a UAC prompt for a runtime now. - AD pins Node 22 (22.11.0). Ping the AD-core thread if you need a different major.
- Dependencies: if your published cache zip is source-only (no
node_modules), AD runsnpm install --include=optionalfor you using the managed runtime's own npm (node npm-cli.js). So shipping source-only is fine — or keep bundlingnode_modulesif you prefer (native deps likesharp/keytarstill build against the pinned Node).
Nothing else changes: spawn.kind: "node" in your bridge.json is still your runtime declaration — AD reads it and provisions Node from that. A user (or AI) can check runtime status anytime with the new runtimes verb (state ∈ absent|installing|ready|failed, source ∈ system|cache, version).