feat(overlay): in-game voice overlay window, Windows (#25)

While you're in a call and Lotus isn't the focused window, a small
always-on-top, click-through window lists everyone in the call, lights
up whoever is speaking, and shows your own mute / deafen / PTT state.

- A separate window, nothing injected into the game: no anti-cheat
  surface. Never takes focus (focusable(false), WS_EX_NOACTIVATE,
  SW_SHOWNOACTIVATE) and ignores the mouse.
- Its page is three static files served by the binary over the
  `lotusoverlay` custom protocol, with a strict CSP (no network) and no
  IPC (no capability names the window). Rust pushes state in as a JSON
  literal; the page renders with textContent only.
- New `set_overlay_state` command (main window only) takes the call
  snapshot from cinny's `useTauriOverlay`. Sanitised: bounded list and
  names, known corner. Placed in the chosen corner of the foreground
  window's monitor, DPI-scaled.
- Windows only; a no-op elsewhere (Linux has no in-app calls yet, #21).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
2026-11-09 17:24:01 -05:00
co-authored by Claude Opus 5.5
parent f59b12276e
commit 1674fd273f
8 changed files with 792 additions and 0 deletions
+1
View File
@@ -84,6 +84,7 @@
"allow-set-custom-chrome",
"allow-set-global-hotkeys",
"allow-set-jump-list",
"allow-set-overlay-state",
"allow-set-smtc-call-state",
"allow-set-start-minimized",
"allow-set-taskbar-progress",