Closed bug report

Discovery surface: bridge.json lists 55 verbs but pup_describe has 85; pup_screenshot returns filePath instead of ab's fullPath/safePath so the image never auto-pulls

John Lauer · 1mo ago ·closed by John Lauer

Adom Bridge 2.1.144+ (adom/adom-bridge#211, #212) removed every hand-written copy of a bridge's verbs from ab. An AI now discovers pup's verbs ONLY through pup: adom-bridge commands lists each installed bridge from its bridge.json (name, version, prefixes, verb names, describeVerb), and adom-bridge commands '{"bridge":"puppeteer"}' returns pup's own pup_describe answer. Two things on pup's side make that surface disagree with itself, both measured on ConfRoomROG (pup 2.0.671, ab 2.1.148) 2026-09-22:

1. bridge.json lists 55 verbs; pup_describe describes 85. The plain commands listing and verbCount read the manifest (it is what ab routes by and what a not-yet-spawned bridge can be listed from), so a verb that exists only in describe is invisible until the AI asks for the full description. Among the 30 missing from the manifest are ones your skill teaches (pup_credentials, the pup_screen_record_* family, pup_screenshot_element, pup_recorder_open/close). Same class as adom/fusion-bridge#96, which fusion fixed in 1.10.36 (their manifest and describe now both say 160). Regenerating bridge.json's verbs from the same source as describe fixes it.

2. pup_screenshot answers with filePath only, so a container AI cannot read the image. ab's screenshot delivery contract is fullPath (+ optional safePath): when a reply carries those, ab's CLI auto-pulls both to the caller's machine and adds localPath/localSafePath, which is how an AI in a container Reads the picture without a second call. pup returns {filePath: "C:/Users/.../bridges-cache/puppeteer/screenshots/pup-….png"} and no fullPath/safePath/base64, so nothing is pulled and the AI has to notice the path and run pull_file itself. (This is not new in 2.1.14x: ab's old CLI-side pup wrapper only saved a base64 payload, which pup also stopped sending, so the picture has not auto-arrived for a while. Removing the wrapper is what made it visible.) Renaming to fullPath (and adding safePath for the ≤1568px copy) is all it takes; kicad_screenshot_all is the reference shape.

Not urgent, and nothing is broken: every pup verb routes and answers correctly through the generic path (proved on arav-rog, ConfRoomROG and winvm: open_window, navigate, eval, screenshot, a 40 s pup_wait against your declared 125 s budget, close). This is about what an AI can SEE without being told.

1 Reply

John Lauer · 1mo ago

Fixed in 2.0.676 (insiders; measured on ConfRoomROG with ab 2.1.148).

  1. One verb surface. bridge.json's verbs and pup_describe are now written from the same list: every verb the Rust dispatch routes. adom-bridge commands reports verbCount 96 for puppeteer, and pup_describe answers 96 with verbCount and a separate notes block (the two advisory entries that used to sit in the verb list). The build stops if a routed verb has no catalog entry, so they cannot drift again. Fourteen routed verbs had no entry at all (credential_set, pup_dialog, pup_restart_browser...); each has one now.
  2. Screenshots auto-pull. Every image reply carries fullPath and safePath (the file pup writes is already the ≤1568 px copy when the page is larger), keeping filePath for older callers. Verified: pup_screenshot {} through the CLI came back with localSafePath and the PNG was in the container.

Found while testing: ab 2.1.14x no longer lifts the fields of a bridge's output string onto the reply, so ok vanished from pup's error replies and pup_record_stop's durationMs became the call time (the smoke caught it). pup now lifts them itself and always states ok.

John Lauer closed this · 1mo ago

Log in to reply.