Skip to content

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: OminiPaneViewModel is a keyed child of the Pane ViewModel. It publishes connection state, current path, and typed metric events.
  • OminiService owns 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: OminiBackend trait with cancellation, generation guards, and bounded pre-ready event coalescing.
  • Linux-only: QCS filters Omini to Hosts explicitly marked as Linux. Desktop only.

Lifecycle

  1. User selects an Omini connection from QCS targeting a Linux host.
  2. OminiService.connect() spawns the backend session with a new attempt generation.
  3. The ViewModel projects three surfaces from a single backend stream.
  4. Disconnect, Host change, Pane replacement, or Drop → owned session closes.
  5. 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.

Terminality — Connect Everycorner