Save bridge.ts and client.js together. Requires Bun and modern Firefox/Chrome; no package dependencies. HTTP controller + WebSocket browser transport; popup relay is served by the same process.
bun bridge.ts serve 8766
# In another terminal, from the same directory:
pbcopy < inject-popup.js # macOS; paste into target tab's DevTools console
# Or: pbcopy < inject-direct.js # when COOP isolates the popup
# Short localhost loader, where the target page's script-src permits it: