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.
Releases 572
Standalone per-platform binaries to download and run, no tools needed. The newest is pinned on top.
Fixes a data-loss race in pup_quit_idle_browsers that could close a browser holding live windows. It judged idle purely by adopted in-memory sessions, so right after a bridge restart, before re-adoption runs, a warm browser still holding real windows looked session-less and got closed, taking every window with it. It now inspects the browsers ACTUAL open pages before closing and skips any browser that still holds a non-blank page, or that cannot be inspected, so a browser mid-re-adoption or user-held is never reaped
All releases showing 381-400 of 572
Survive renderer crashes (issue #16): detect a crashed tab renderer (page error + Inspector.targetCrashed), fast-fail its verbs with a reload-to-recover hint instead of hanging the window, clear the flag when reload/navigate respawns it, and reap orphaned/crashed renderers scoped to the session profile on close
Never block browser_open_window on a Chrome-for-Testing download when a system browser is available (issue #15): a machine with working Edge and Chrome could not open a window because the gate ignored system candidates, contradicting the documented last-resort behaviour
Power fix: Chrome power-saving flags are now OPT-IN via highFps instead of applied to every window forever (issue #14 battery drain). A highFps window holds a lease (default 20 min, max 120), an active recording holds it open indefinitely so a take is never cut off, and on lapse the window is DOWNGRADED by relaunch carrying its tabs rather than closed. Adds browser_highfps_extend, plus hints on every open so an AI discovers the capability
Self-heal a half-populated Chrome-for-Testing cache dir: delete the versioned folder when it exists without its executable, so a partial or interrupted download stops failing every later install attempt
Keep the log janitor (dedupe plus quieter drag and overlay lines) and record why the bridge owns log VOLUME while AD owns the file and its rotation
Log the missing-favicon case once per session instead of on every tab-badge update
Log janitor: collapse consecutive identical lines into one plus a repeat count, and stop the drag check emitting one line per tab when nothing moved
Park windows on RECOVERY and on RECLAIM (background-by-default was only enforced on the launch path, so after a reboot every recovered window sat in the foreground), and log every incoming verb for auditability
Let AD desktop_bring_to_front perform the raise after PowerShell clears WS_EX_NOACTIVATE, since SetForegroundWindow is silently ignored under the Windows foreground lock
Use PowerShell only to clear WS_EX_NOACTIVATE and un-minimize, then have AD desktop_bring_to_front perform the real raise, because SetForegroundWindow is silently ignored under the Windows foreground lock
Raise a pup window by resolving its hwnd from the session title and clearing WS_EX_NOACTIVATE before SetForegroundWindow, so a backgrounded Edge window actually surfaces (the PID path was skipped on every detached launch and only ever matched chrome.exe)
Raise a pup window by resolving its hwnd and calling desktop_bring_to_front, instead of relying on CDP setWindowBounds plus bringToFront which never raises an Edge window from the bottom of the z-order
Bake the deep-link into the minted magic URL by appending next= client-side (the endpoint ignores next, the CLI appends it), so an in-place view toggle lands back on the same wiki page instead of the root
In-place wiki view toggle: mint a single-use magic link from an already-logged-in page (browser-session endpoint works with just the session cookie, so the desktop needs no token) and navigate the window, instead of closing and relaunching it under another profile
Wiki view toggle now switches IN PLACE using Colby's browser-session magic link (a logged-in page mints its own single-use link, so the desktop needs no token) instead of closing and relaunching the window under another profile
Claim the jump-list dedupe key before the await so two concurrent callers cannot both commit (a redundant CommitList rebuilds the menu and dismisses one the user is opening)
Brand the jump-list header BEFORE stamping the new appId (Win11 bakes button art at creation, so branding after had no visible effect), and dedupe jump-list commits on appId+view so a CommitList cannot dismiss a menu the user is opening
Brand the jump-list header row: pass hwnd plus headerIcon to desktop_set_window_jumplist (AD 1.9.153). hwnd is required, titleContains silently no-ops. Log headerBranded and iconCheck so it is verifiable in code
Set the thumbnail tooltip from updateTabCountBadge so the normal open path gets one (it was only wired into refreshWindowChrome and the category-change hook, so freshly opened windows had no tooltip)