3.5 KiB
3.5 KiB
v0.2.6 (2026-05-18)
Features
- Foreground-window tracker (cross-platform): New
/api/foregroundendpoint plus liveforeground/foreground_updatemessages on the existing WebSocket feed. Windows uses a ctypesGetForegroundWindowprobe with HANDLE-correctargtypesso 64-bit window handles aren't truncated; macOS uses AppKit'sNSWorkspace.frontmostApplication; Linux uses Xlib's_NET_ACTIVE_WINDOW(Wayland sessions return a structured "unavailable" so the UI can render gracefully). Each platform has a TTL cache and per-platform fallbacks. (61cdce9) - Browser page-title surfacing: When the foreground process is a recognised browser, the window title is stripped of the trailing browser-name suffix and exposed as
browser_page_titlealongsideis_browser. Optional UIA-based URL extraction sits behind theMEDIA_SERVER_BROWSER_UIAenv flag (off by default — Chromium browsers keep their accessibility tree dormant unless something asks, and enabling it has a measurable cost). (61cdce9) - Foreground card in the Web UI: New editorial card under the monitor list on the Display tab renders process name, window title, fullscreen / minimized / monitor chips, the browser block when applicable, exe path, PID, started-ago, geometry, and platform. 16px inter-section gap matches the Settings cadence. 25 new i18n keys added to both
en.jsonandru.json. (61cdce9) - WebSocket integration: The existing 1s status loop now polls foreground every tick, broadcasts
foregroundon connect, and emitsforeground_updateonly when user-visible fields actually change — geometry deltas alone don't spam the channel. (61cdce9)
Security
- Loopback-by-default in the shipped config:
config.example.yamlnow defaultshost: 127.0.0.1. The server still refuses to bind a non-loopback interface without eitherapi_tokensconfigured or an explicitallow_lan_without_auth: trueopt-in — this hardens fresh installs where a user copies the example config verbatim. (0cf49de)
Reliability
- Diagnosable silent boot failures: Pre-uvicorn fatal errors (config parse failures, port conflicts, missing dependencies on Windows) are now mirrored to
startup-errors.login the config directory. Previously, launches viawscript/pythonw(the hidden Startup-folder shortcut path) had no console attached, so any startup crash was effectively invisible — the user just saw "nothing happened". (0cf49de)
Development / Internal
- Lint cleanup: Sorted the Xlib import in
foreground_service.pysoruff checkis clean. Same module, no behaviour change.