Omini
Omini is an integrated Linux connection experience. One pane, three coordinated surfaces: terminal, file browser, and system monitor.
Layout
┌──────────────────────────┐
│ Terminal (left) │
│ │
│ $ uptime │
│ 14:32:17 up 3 days │
│ $ _ │
│ │
├────────────┬─────────────┤
│ Files │ System │
│ /var/log │ CPU 23% │
│ ▸ nginx │ MEM 57% │
│ ▸ mysql │ DSK 42% │
│ app.log │ NET ↑↓ │
└────────────┴─────────────┘Architecture
- ViewModel-driven:
OminiPaneViewModelis a keyed child of the Pane ViewModel. It publishes connection state, current path, and typed metric events. OminiServiceowns the backend session seam — instance ID, monotonic attempt generation, and stale-event rejection.- Terminal bytes use a specialized binary channel, not JSON state.
- Backend boundary:
OminiBackendtrait with cancellation, generation guards, and bounded pre-ready event coalescing. - Linux-only: QCS filters Omini to Hosts explicitly marked as Linux. Desktop only.
Lifecycle
- User selects an Omini connection from QCS targeting a Linux host.
OminiService.connect()spawns the backend session with a new attempt generation.- The ViewModel projects three surfaces from a single backend stream.
- Disconnect, Host change, Pane replacement, or Drop → owned session closes.
- Late completions and events from a previous generation are silently discarded.
Current Status
The ViewModel, service, backend trait, and default (failing) backend are implemented. The production SSH/SFTP backend — which replaces the default backend — is part of the transport milestone. Until then, Omini lists Linux hosts and renders its shell structure but does not establish live connections.
Design Rationale
Omini is not a "dashboard" bolted onto SSH. It is a single integrated ViewModel so:
- File operations and terminal commands share one authenticated session — no re-authentication.
- System metrics stream on the same connection — no secondary agent or HTTP endpoint.
- Disconnect tears down all three surfaces atomically — no orphaned file handles or metric subscriptions.