Skip to content

v7.3.0

Choose a tag to compare

@maltyxx maltyxx released this 02 May 01:31
· 86 commits to main since this release
6f1934f

Highlights

  • app_running MCP tool. Agents now check for already-open windows before app_launch — no more duplicate Firefox / foot / mousepad instances stacked across a session.
  • Idle session watchdog. Server-side cleanup walks the Sway tree and gracefully closes client windows after GHOSTDESK_IDLE_TIMEOUT seconds (default 30 min) of inactivity, sparing Sway / mako / wayvnc / the MCP server itself.
  • Ubuntu 26.04 LTS + noVNC 1.7.0 in both runtime and devcontainer images, with wayvnc / neatvnc / aml switched from master SHAs to upstream release tags (the local wayvnc-async-auth.patch is gone).

Changes

Added

  • app_running — walks the Sway tree and returns one entry per open client window (app, title, pid, focused). Tool count goes from 13 to 14; instructions.py and the app_launch docstring both point at it.
  • Idle session watchdog — when no MCP tool call has been observed for GHOSTDESK_IDLE_TIMEOUT seconds (default 1800), the server asks every client window to close gracefully via swaymsg [con_id=N] kill. Set GHOSTDESK_IDLE_TIMEOUT=0 to disable; the clock is reset on every tool invocation by middleware (mark_activity()).
  • GHOSTDESK_IDLE_TIMEOUT env var — operator-side, not client-side; documented in the README env-var table.
  • ghostdesk._sway IPC helpers — resilient socket discovery that probes swaymsg -s <sock> -t get_version against every sway-ipc.*.sock whose embedded PID resolves to a live sway process. The cached socket is invalidated on any IPC failure and rediscovered once before giving up, so the server self-heals across compositor restarts.

Changed

  • Ubuntu base image bumped to 26.04 LTS (was 24.04) in both docker/base/Dockerfile and .devcontainer/Dockerfile. The wayvnc / neatvnc / aml source pins still build cleanly against the new toolchain.
  • noVNC pinned bump 1.6.0 → 1.7.0 (NOVNC_VERSION). Brings the upstream NPM bundle ES-module conversion, improved H.264 detection, more efficient memory usage (received image data dropped after rendering), and a tab-close warning when not in view-only mode. The wayvnc workaround for VeNCrypt remains — noVNC 1.7 still does not negotiate the X509Plain/262 sub-type.
  • wayvnc / neatvnc / aml switched from master SHAs to release tags (WAYVNC_REF=v0.10.0, NEATVNC_REF=v1.0.0, AML_REF=v1.0.0). neatvnc 1.0.0 ships the async-auth API rework that wayvnc 0.10.0 has migrated to, so the local wayvnc-async-auth.patch is no longer needed and has been deleted along with the now-empty docker/base/patches/. The sed that strips RFB_SECURITY_TYPE_APPLE_DH from neatvnc remains.
  • Python deps refresh via uv lock --upgrade: starlette 0.52.1 → 1.0.0, cryptography 46.0.5 → 47.0.0, rich 14.3.3 → 15.0.0, pydantic 2.12.5 → 2.13.3, uvicorn 0.42.0 → 0.46.0, pillow 12.1.1 → 12.2.0, plus minor bumps. All transitive — 218 tests still pass. Direct pin Pillow>=10.0 → Pillow>=12.0; dev pins tightened (pytest>=9.0, pytest-asyncio>=1.3, pytest-cov>=7.0).
  • app_list filters out Terminal=true .desktop entries (vim, htop, …) — TUIs need a tty and don't belong in a GUI catalogue.
  • app_launch docstring and server instructions now direct the agent to consult app_running() first rather than relying solely on a screenshot.