VA-24: native assistance-mode GUI in egui (Linux first) #61
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/VA-24-agent-gui"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Linux-first slice of the native assistance-mode GUI (VA-24). Adds a native, in-process agent UI plus an in-process consent dialog that replaces the
zenity/kdialogshell-out when a GUI is attached. macOS and Windows window/capture backends are split into follow-ups VA-55 and VA-56.Decisions (resolved with the maintainer before coding)
vervain-agent assistancesubcommand (not daemon auto-launch), talking to the daemon over a local unix socket.ConsentOutcome::NoUiuntil a GUI connects. This reconciles the GUI with the hardened system-service default.What landed
crates/vervain-agent-guicrate: an egui/eframe app (status window + consent dialog), a gtk system-tray icon on its own main-loop thread showing connection state (disconnected / connected / operator-attached) with a "disconnect now" item, desktop notifications on operator attach, and an async IPC client. The newline-delimited JSON IPC contract lives in a dependency-lightprotomodule so the daemon links just the wire types, not eframe.crates/vervain-agent/src/status.rs: process-global connection status (state watch + active-tunnel count + a disconnect signal), wired into the connection loop (net::run_reconnecting/idle_loop) and the tunnel spawner (host::tunnel::spawn).crates/vervain-agent/src/gui_ipc.rs(behindagent-gui): a unix-socket server that pushes status to the GUI, routes consent prompts to it and awaits the reply, and handles "disconnect now" by dropping the server connection (which tears down every active tunnel, since tunnels die with the relay).host/consent.rs: prefers the attached GUI over IPC, falling back to the existing host helpers and ultimatelyNoUi, so headless installs are unchanged.agent-guifeature is off by default; the standard build stays headless.CI
--workspacelanes build the new crate (it links the egui/gtk stack), so the desktop dev libs are added to the check image.--features agent-gui.vervain-agent-guiis excluded from the windows-gnu cross-check until its Windows backend lands (VA-56).--workspace, windows-gnu cross-check, theagent-guilane, and the existing swtpm TPM lane.Acceptance criteria
vervain-agent-guiworkspace member builds on Linux (X11 + Wayland).host/consent.rsover IPC, removing the shell-out when a GUI is attached.agent-guifeature cleanly excludes the GUI for headless builds; default stays headless.NSWindowSharingNone/WDA_EXCLUDEFROMCAPTURE): deferred to VA-55 / VA-56.Not runtime-tested here
The tray, consent dialog, and notifications compile and pass unit tests (IPC proto round-trip, status transitions) but cannot be exercised in headless CI (no display / tray). Runtime validation on a real Linux desktop is a manual step, like the deferred macOS/Windows GUI work.
Follow-ups
NSWindowSharingNone).WDA_EXCLUDEFROMCAPTURE).#VA-24