7a2ab3fc8d
Two latent bugs that broke input control on any setup: - Data channel was created by the viewer (the answerer), so the agent's offer had no SCTP m-line and the channel never opened -> no input reached the agent. The agent (offerer) now creates the 'input' channel; the viewer receives it. - inject.js used nut.screen.getResolution() which doesn't exist in this nut-js; switched to screen.width()/height() with per-session caching. Verified end-to-end locally: screen streams + mouse injection moves the remote cursor. Also commits desktop/ + mobile/ package-lock.json from client installs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>