Pup - Puppeteer Bridge
Public Made by Adomby adom
pup is the AI's own browser: a real, full Chrome on the user's desktop that the AI fully controls (a sandbox, not the user's signed-in browser). Rides Bridge; pup_* verbs open windows and tabs, navigate, screenshot, and eval JS.
pup bridge: startup hang after AD cycle - spawns, never binds port, infinite reap/respawn (issue-31 signature)
Hit live on ADOMLAPPER 2026-08-08 ~18:30 local, still down after multiple recoveries.
Sequence: the Hydrogen 0.1.305 NSIS install ran its POSTINSTALL AD version check while ~4 pup sessions with open Chrome windows existed (hero-review, pupshow, bridge-pages, hd-dev-mirror). After that AD cycle, every pup_* verb returns: "The 'puppeteer' bridge process was running but never bound its port (64230). AD reaped it (0 pid(s)); RETRY."
Observed:
- netstat shows NOTHING holding 64230 (the port is free).
- A node.exe bridge process IS alive each round; AD's reap finds 0 pids (it lost track), so kill/respawn loops forever. bridge_kill confirm:true + a manual process_kill of the hung node both led to the same never-binds respawn.
- The bridge's own _hint names the cause class: blocking startup work before the listen call, i.e. session recovery against stale session/lock state. With several orphaned pup Chrome windows on the desktop, recovery apparently never completes.
Ask (matches the SDK rule 'bind your listener BEFORE startup recovery work'):
- Bind the port first, THEN recover sessions asynchronously.
- Put a timeout on session recovery so stale windows/locks can't hang startup.
- Have AD's reap fall back to killing by port-owner or child-process tree when its tracked pid is gone (reaped 0 pids forever = permanent outage).
Impact: pup show-and-tell is down on the machine; window cleanup left orphaned pup Chrome windows the user has to close by hand.