lollipopkit / lollipopkit/flutter_server_box

feat: show the connected server's status on the terminal page

Open
#1,509 0 comments 0 reactions 1 assignee View on GitHub

@lollipopkit is already working on this.

Since Sep 18, 2026.

enhancement feature
Dominant language
Dart
Stars
8.7k
Forks
558
Avg merge
4h 31m
Merged PRs (30d)
129

Description

## Problem

While a terminal session is open, the readings for the machine being typed on are one tab away. Checking whether a build is eating the CPU or filling the disk means leaving the terminal and coming back — on a phone that also drops the keyboard and the scroll position.

## Proposal

Show the connected server's status (CPU, memory, …) on the terminal page itself, for a session opened on a server. **The UI/UX is undecided** — a floating panel is one candidate among several, see below.

## What is already available

- `serverProvider(spi.id)` already holds the status, and the poll cycle in `home.dart` (`_restartServerRefreshCycle`) is gated on app lifecycle, not on which tab is showing. So a readout on the terminal page reads a value that is already being fetched. It must not open a connection, run a command or start a timer of its own.
- Which transport produced that value is already decided by `ServerNotifier` (SSH or the monitor agent's `/api/v1/metrics`). The terminal page should not care which.
- `SSHPage.args.spi` is null for `LocalSource` (local shell, rootfs). The readout exists only for `ServerSource`.

Two things that would otherwise be silently wrong:

- `serverStatusRefreshInterval()` returns null when `serverStatusUpdateInterval` is 0, i.e. auto refresh is off. The readout then shows whatever was last fetched, with nothing saying how old it is. It has to show its age, or say it is not updating.
- A server may be disconnected or failing in `ServerProvider` while the terminal session on it is still alive (separate `TryLimiter` key). "No data" and "the machine is down" are different states and should not look the same.

## UI candidates

1. **A floating panel**, as `TerminalFloatingShell` and the Agent already are — draggable, collapsible to a pill. Cost: a third floating thing over the tabs, and `FloatingPanels`' phone rule (expanding one collapses the other) becomes a three-way rule.
2. **A strip under the app bar**: one line of text, collapsible. Costs terminal rows permanently unless it can be folded away.
3. **In the app bar**: the subtitle slot, or an action that opens a popover with the full set.
4. **At the bottom**: a status line in the pane on desktop, beside the virtual keys on a phone.

Whatever it is: switchable (and likely off by default), no focus or keystrokes taken from the terminal, and no repaint of the terminal buffer on every poll.

## Open questions

- Which metrics — CPU and memory, and then what? Net speed, disk usage, load, uptime, temperature?
- One layout for phone and desktop, or two?
- On desktop each pane can hold a different server's session. Does the readout follow the focused pane?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.