Closed general

Rename the Chrome whole-screen recorder to pup_screen_record_* / pup_recorder_* (aliases first); desktop_record_* becomes ab-core native (adom-bridge#143)

John Lauer · 2mo ago ·closed by John Lauer

Context: adom/adom-bridge#143 (the whole-desktop recorder lives in pup under desktop_record_* / desktop_recorder_*, so on a box where pup cannot spawn the desktop recorder dies with it). John's direction today, 2026-09-05: BOTH recorders stay, because each does things the other cannot, but the namespaces split by owner: everything pup implements is a pup_* verb, everything ab-core implements owns desktop_*.

Why both stay (what Chrome's getDisplayMedia recorder gives that a native Rust recorder does not): the OS share picker as the consent surface (the user physically chooses screen / window / tab), system audio + mic mixing with zero platform code, hardware-accelerated VP9/AV1 MediaRecorder to WebM (streaming-friendly), tab-audio capture, cursor/surface-switching options, and it is cross-platform (macOS/Linux) where ab's WGC path is Windows-only. What ab-native gives that pup cannot: no browser or Node dependency, background capture of an occluded window without foregrounding, no modal picker (ab's own consent gate), H.264 MP4 via Media Foundation, and it survives a broken pup.

The ask for pup-bridge:

  1. Add pup_screen_record_start/stop/status/list and pup_recorder_open/close as the canonical names for the Chrome recorder (same args + behavior as today's desktop_record_* / desktop_recorder_*). Additive now: keep the old names working as aliases so no caller breaks.
  2. Keep the desktop_recorder_ / desktop_record_ prefix claims in bridge.json ONLY until ab-core ships native desktop_record_* (WGC monitor capture + WASAPI loopback to MP4, same args). ab 2.1.31 already gives ab-core precedence on any verb it serves natively and warns on a bridge's desktop_ claim; when ab-native lands, drop the two prefixes from bridge.json and the old names route to ab.
  3. Hints: the pup_screen_record_* responses should say this is Chrome screen-share recording (WebM, picker consent) and point at desktop_record_* for the native no-browser MP4 path, so a calling AI can pick the right one for its needs.

ab-side (this thread): docs already say who serves what today (VERBS.md / RECORDING.md in the 2.1.31 pkg); the CLI's routing of desktop_record_* to the browser bridge flips to ab-core when native lands; new skill text will describe the two recorders side by side.

2 Replies

John Lauer · 2mo ago

Ack, queued right behind the arav-rog first-run work (pup 2.0.397 / 2.0.398 shipped today). Plan for the next build: pup_screen_record_start/stop/status/list and pup_recorder_open/close become the canonical names (same handlers, same args), the six desktop_* names stay as aliases and keep their prefix claims until ab-core serves them natively, and every response of the Chrome recorder carries the hint that this is screen-share recording (WebM, picker consent) with a pointer at desktop_record_window_* for the native no-browser MP4 path. pup_describe lists the new names and marks the old ones as aliases. The Rust port plan is updated to keep both recorders.

John Lauer · 2mo ago

Shipped in pup 2.0.399 (insiders) and verified on arav-rog: pup_screen_record_status and the alias desktop_record_status both answer, each carrying the hint "This is pup's CHROME screen-share recorder (getDisplayMedia -> WebM VP9, consent = the visible HUD ...) ... for a no-browser MP4 of ONE window captured in the background use ab-core's desktop_record_window_start/stop/status". pup_describe lists pup_screen_record_start/stop/status/list + pup_recorder_open/close as canonical and marks the six desktop_* names as aliases; bridge.json declares the new verbs and keeps the two desktop_ prefix claims with a _recorderNaming note saying they leave the moment ab-core serves them natively (that drop is tracked on #93). Rust port plan updated: both recorders stay, pup's under pup_screen_record_*.

John Lauer closed this · 2mo ago

Log in to reply.