AnyBot/mobile
王性驊 02bca39b98 People watch and help on the bots' computer through VNC (noVNC), carried by the account server
The core: the bot works the computer; a person watches it like a colleague, and takes over
when it needs them. VNC is made for that (only what changed, every mouse move and key, touch on
phones), so the pictures sent one by one go, and with them their own input path.

- vnc.rs: a VNC proxy to the box's x11vnc through one docker exec (a Python bridge that ends
  with either side). It signs in to the box with the box's own password (its VNC_PASSWORD) and
  offers the viewer no password, so the password never leaves the brain. The person's clicks
  and keys make the bot's steps wait until 8 s after they stop; text typed in the viewer's box
  (any language) is pasted in the box.
- Account server: /screen (the viewer page) and /novnc.js (noVNC 1.6.0, MPL-2.0, bundled);
  /relay/vnc/<host> takes the browser's WebSocket (account session, or a 10-minute ticket the
  app asks for with POST /relay/screen-ticket; owners and admins) and carries it over that
  AnyBot's lasting connection (vopen / vdata / vtext / vclose). Both ends of that connection
  wait 2 ms instead of 40 ms to read while things move: a request and its answer took up to
  160 ms more than needed.
- Phone page: 看 Bot 的電腦 and 接管 open the viewer page (also on the local network: /api/vnc on
  the AnyBot's own phone server). This Mac's own screen moved to the ⋯ menu.
- Mac app: 看畫面 opens the viewer in the browser (a screen of a brain: the brain's computer by
  ticket; else this computer's box, noVNC straight from it). The in-app picture viewer, the
  live JPEG stream, the person's click/move/scroll/key endpoints and the input shell are gone.
- Opening a Mac app uses LaunchServices (`open -a`): agent-desktop's launch waited on the window
  through accessibility and failed without 輔助使用 now and then.

Measured on this Mac (made-up account, local relay + headless brain + the real box): viewer
signed in in 0.4–0.7 s, a request and its answer through relay + brain + box 25–58 ms median;
headless Chrome shows the desktop live in /screen. remote_e2e 28/28 ×2, 149 unit tests, relay 11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 23:05:44 +08:00
..
icon-180.png One AnyBot icon everywhere; the phone page fills the screen and shows the app's bot faces 2026-11-05 19:20:29 +08:00
icon-192.png One AnyBot icon everywhere; the phone page fills the screen and shows the app's bot faces 2026-11-05 19:20:29 +08:00
icon-512.png One AnyBot icon everywhere; the phone page fills the screen and shows the app's bot faces 2026-11-05 19:20:29 +08:00
icon.svg One AnyBot icon everywhere; the phone page fills the screen and shows the app's bot faces 2026-11-05 19:20:29 +08:00
index.html People watch and help on the bots' computer through VNC (noVNC), carried by the account server 2026-11-05 23:05:44 +08:00
novnc.js People watch and help on the bots' computer through VNC (noVNC), carried by the account server 2026-11-05 23:05:44 +08:00
screen.html People watch and help on the bots' computer through VNC (noVNC), carried by the account server 2026-11-05 23:05:44 +08:00