- Rebuild the GPUI client against the 1:1 UI spec with all six modules,
terminal context menu, SSE reveal, system tray and standalone windows.
- Add an SFTP session self-healing layer: detect dead channels, drop the
cached session, reconnect and retry across every file and transfer path.
- Add a terminal refresh button that recreates the pane in place, with
proper loading and error feedback in both GPUI and the Web console.
- Route startup and autostart through vps-switch-gpui when it is present,
and make repeated launches wake the existing window via a file lock.
- Strip debuginfo in release, add a GitHub Actions matrix workflow for
macOS and Linux, and refresh the Windows installers and README.
The popover matches the old computed styles: 256px wide, white/95,
16px radius, 14px padding, xl shadow, a three-way status grid with
counts and dots, the amber favourite chip, role chips and dynamic tag
chips. The theme now names Segoe UI explicitly so text metrics stay
stable.
The old front end is still served by the daemon, so its computed styles
are the source of truth: header is 50px with a white/75 ground and a
zinc-200/75 bottom border; buttons are 29px tall, the repository button
is 12px-rounded while search/filter/check are pills; round controls are
32px on white/85. Cards have no fill by default (bg-white/82 is not a
valid Tailwind class, so the old cards render transparent), hover to
95% white; borders zinc-200/80, 16px radius, 14/16 padding, 1px 4px 2%
shadow, status dots carry an 8px glow, and per-card buttons are
25px/28px.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The workspace now mirrors the old front end: a top bar with the brand,
repository button and session tabs, search, filter summary, check-all
and theme/settings/add controls; a host card list with OS badges,
status dots, role and pin chips plus per-card actions; a terminal stage
with split, light/dark terminal, right-wing and popout controls; and
the right-side probe drawer with nameplate, CPU, memory, disk, network
and role/tag cards, sampled every 2.8s. The old DockArea scaffold is
gone; layout and colours follow docs/ui-spec.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The client creates a pane over HTTP, attaches to the terminal
WebSocket, and re-parses the byte stream with the same
alacritty_terminal release the daemon uses. Rendering splits each row
into ASCII runs shaped with a per-cell force width and wide CJK glyphs
shaped individually at their column, because force_width snaps every
glyph to one cell and would overlap Chinese text.
Verified against the live daemon: the local PowerShell prompt and
vip-hk's full MOTD parse correctly (examples/terminal_smoke.rs).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Double-clicking a host (or clicking an already selected one) opens a
terminal tab in the center dock. Three headless tests drive the real
panel with real pointer events. They use gpui-base's test_support
because gpui-kit's test-support feature drags in the gpui-fast
dependency tree, which conflicts with gpui-pre 0.3.9 on Windows.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The workspace now builds two products from one repo: the existing
daemon crate and a new vps-switch-gpui crate that renders the daemon's
HTTP API. The client keeps all networking on a dedicated current-thread
tokio runtime and drains events on the UI thread, so GPUI's executor is
never touched from other threads.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>