Skip to content

Neo Desktop — menu-bar app with integrated terminal (our UI) - #18

Open
lam0819 wants to merge 4 commits into
mainfrom
ship-our-ui
Open

Neo Desktop — menu-bar app with integrated terminal (our UI)#18
lam0819 wants to merge 4 commits into
mainfrom
ship-our-ui

Conversation

@lam0819

@lam0819 lam0819 commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

The Neo Desktop menu-bar app: compact Control-Center popover + AppKit source-list dashboard + integrated terminal, plus its CI/release pipeline.

App

  • Popover (300px): live CPU/RAM/disk gauges, apps, alerts.
  • Dashboard (source-list): sidebar servers + detail, metric tiles, per-app instant start/stop/restart (bridge over SSH) with toasts, ⋯ menu (logs, domain/HTTPS, container shell, remove).
  • Terminal: tabbed server SSH + container shells (neo-bridge pty, std::process — no macOS fork abort, raw-byte streaming, live resize).

Backend

  • cmd/neo-bridge: one-shot JSON API (hello/list/snapshot/app.*/logs/domain/sshkey) + pty interactive mode, reusing internal/config+internal/ssh.
  • internal/ssh: Executor.InteractiveShell (PTY + resize control frame).
  • CPU fix: two /proc/stat samples (was stuck 100% from top -bn1).

CI / release

  • desktop-ci.yml: Go + frontend + macOS fmt/clippy/bundle/smoke on PRs.
  • desktop-release.yml: on desktop-v* tag → mac arm64 + x86_64 DMGs → draft Release. Signing gated (unsigned-safe).

Validation

  • npm run build (tsc) ✓, tauri build arm64 ✓, rustfmt + clippy ✓, bridge smoke ✓.
  • Locally installed + tested: terminal (server + container), instant actions, CPU now realistic.

Note: an alternate, separately-productized implementation lives on plan/neo-desktop-tray-app (PR #17 ported this terminal onto it). This PR is the UI direction chosen for shipping.

…erminal

Menu-bar (Accessory) Tauri 2 app for managing neo servers:
- Compact Control-Center popover: live CPU/RAM/disk gauges, apps, alerts
- AppKit source-list dashboard: per-app start/stop/restart (instant GUI ops),
  logs viewer, domain/HTTPS dialog, remove — with confirmations + toasts
- Integrated tabbed terminals (server SSH + container shell), full-screen,
  real PTY over neo's own SSH auth via the neo-bridge sidecar

neo-bridge sidecar (cmd/neo-bridge): one-shot JSON API reusing internal
config/ssh/state + an interactive `pty` mode (remote PTY, resize control frame).
Adds Executor.InteractiveShell.
top -bn1 is a single instantaneous sample — unreliable, jumps, and often
reads ~0 idle → a stuck 100%. Measure the busy fraction across two
/proc/stat reads ~0.3s apart instead, matching htop.

Also: drop the unused `neo` sidecar from externalBin (the terminal uses
neo-bridge pty), and bump desktop to 0.2.0.
- desktop-release.yml: on desktop-v* tags, builds mac arm64 + x86_64,
  version-stamped neo-bridge sidecar, unsigned-safe (signing gated),
  smoke-tests the bundled bridge, publishes a draft Release with DMGs.
- desktop-ci.yml: Go bridge build/test, frontend typecheck/build, macOS
  fmt/clippy/bundle/smoke on PRs.
- rustfmt the Tauri crate.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants