Skip to content

v1.7.0 — native keyboard input, honest modes

Choose a tag to compare

@slabbdev slabbdev released this 07 Oct 20:16
· 31 commits to main since this release

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 unavailable for 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.