Repository navigation
v1.7.0 — native keyboard input, honest modes
POST /key now attempts REAL OS-level keyboard events before the synthetic dispatch — and the response says which mode ran.
- Windows: SendInput to the focused WebView2 render widget (child-window focus, VK mapping, proper keyup pairs). The platform where native input is verified end-to-end.
- Linux: XTEST fake-input with a keysym→keycode scan of the live server keymap; the ghost window is brought on-screen and focused first.
- macOS: wired but reports
native unavailablefor now — CGEvents post, but routing into a headless WKWebView needs an app-bundle activation story the Window Server only grants real foreground apps (the experimental on-screen approach is preserved in git history).
Every response carries a mode field: native or synthetic. No lies in the protocol — when the native path refuses (headless CI, missing permissions), the synthetic fallback fires automatically and the caller knows exactly what happened.
Also fixed: the Linux key path no longer pumps GTK from the HTTP thread (a worker-thread gtk::main_iteration deadlocks the main loop — CI exit 52).
Binaries for macOS arm64, Windows x64, Linux x64 + arm64.