Pup - the AI's own browser
Public Made by Adomby adom
pup gives your AI a real browser on your desktop that it drives completely, in the background, signed in as you: windows that never jump in front of your work, one shared profile that learns your logins, and every window labeled on the taskbar with its AI thread's name.
WebRTC UDP streaming apps (e.g. Google Project Genie) fail to connect in pup because Preferences sets webrtc.ip_handling_policy=disable_non_proxied_udp
Summary
pup writes "webrtc": {"ip_handling_policy": "disable_non_proxied_udp", "multiple_routes_enabled": false, "nonproxied_udp_enabled": false} into the profile Preferences (~/.adom/pup-profiles/adom-you/Default/Preferences, introduced in 2.0.396 during the investigation in #91).
As documented in #91, disable_non_proxied_udp did not suppress the Windows Firewall UDP prompt (which comes from Chromium's network-service IPv6 reachability sockets during Cloudflare challenge loads, with zero WebRTC PeerConnections), but keeping it in Preferences breaks WebRTC UDP streaming web apps in pup — specifically Google DeepMind's Project Genie (https://labs.google/fx/projectgenie).
Environment
- Bridge version:
rust/2.0.736(shell: "rust") - Browser build:
156.0.8078.73(chrome-for-testing) - OS: Windows (
win64)
Reproduction & Root Cause
- Open
https://labs.google/fx/projectgenie/tools/projectgenie/creationinpup(pup_open_window), sign in with a Google AI Ultra account, enter a world prompt + character prompt, and click Create world. - Project Genie generates the preview image (
createImage), creates a session (bottleCreateSession), and callsbottleConnectSession, which returns Google'sice-liteWebRTC offer (74.125.247.225:19306/74.125.247.237:19306UDP) along withiceServers:stun:74.125.247.128:3478turn:74.125.247.128:3478?transport=udpturn:74.125.247.128:3478?transport=tcp
- Because
Preferenceshas:
Chromium refuses to bind any local UDP sockets for"webrtc": { "allow_legacy_tls_protocols": false, "ip_handling_policy": "disable_non_proxied_udp", "multiple_routes_enabled": false, "nonproxied_udp_enabled": false }RTCPeerConnection. Running a candidate check insidepup_eval:
emits only a bogus TCP active candidate (const pc = new RTCPeerConnection({iceServers: [{urls: "stun:74.125.247.128:3478"}]}); pc.createDataChannel("test");candidate:... 1 tcp ... 0.0.0.0 9 typ host tcptype active) and zerohostorsrflxUDP candidates. - With TURN configured,
puponly gathers theturn:74.125.247.128:3478?transport=tcprelaycandidate (which allocates an internal10.x.x.xaddress). Google's media server (74.125.247.225:19306UDP) never responds to STUN connectivity checks from that TCP relay candidate (requestsSent: 8, responsesReceived: 0, state: "failed"),RTCPeerConnection.connectionStatetransitions to"failed",bottleStartBottleSessionnever fires, and the Project Genie UI hangs on "Creating your world…" indefinitely until the 60-second backend session timeout expires. - Control test: Opening the exact same session in a browser profile where
Preferencesdoes not setwebrtc.ip_handling_policy = "disable_non_proxied_udp"immediately gathers asrflxUDP candidate viastun:74.125.247.128:3478, connects in <500 ms (connectionState: "connected",iceConnectionState: "connected"), callsbottleStartBottleSession, and streams the live 1280×704 interactive 3D world over WebRTC.
Suggested Fix
- Remove
"webrtc": {"ip_handling_policy": "disable_non_proxied_udp", "multiple_routes_enabled": false, "nonproxied_udp_enabled": false}(and--force-webrtc-ip-handling-policy=disable_non_proxied_udpif passed on launch) frompup's profilePreferenceswriter — or reset existingPreferencesto"ip_handling_policy": "default"("multiple_routes_enabled": true,"nonproxied_udp_enabled": true) on startup. - Since #91 already proved that the Windows Firewall prompt on a fresh browser binary is triggered by Chromium's network-service UDP sockets on Cloudflare challenges (with zero WebRTC PeerConnections) and is solved by the elevated firewall rule helper in
adom-bridge, keepingdisable_non_proxied_udpinPreferencesprovides no firewall benefit while breaking WebRTC UDP media/streaming applications inpup.