-
-
-
-
-
- {/* Summary strip — plain words; ops vocabulary lives in tooltips. */}
-
- 0
- ? `${attentionCount} need${attentionCount === 1 ? "s" : ""} attention`
- : "All working"
- }
- />
- = 10
- ? "slower than usual"
- : "across all apps"
- }
- detail={`Slowest 5% (P95): ${formatTypicalLatency(metrics?.p95ToolLatencyMsLastHour)} · timeout rate ${metrics?.timeoutRateLastHour ?? 0}%`}
- />
-
-
-
- {/* Needs-attention cards — one per firing supervisor alert, in plain words. */}
- {firingAlerts.map((alert) => {
- const action = alertAction(alert);
- const detailsOpen = openAlertDetails[alert.name] ?? false;
- return (
-
-
-
-
-
▲ {plainAlertTitle(alert)}
-
{plainAlertBody(alert)}
-
-
- {action === "restart" && localAttentionRow ? (
-
- ) : action === "reviewApps" ? (
-
- ) : (
-
- )}
-
-
- {detailsOpen ? (
-
- {alert.name}} />
-
-
-
-
- {alert.runbookSection || health.data?.runbookPath}} />
-
- ) : null}
-
-
- );
- })}
-
- {/* Status table — one row per running app. */}
- {totalCount === 0 ? (
-
- ) : (
-
-
-
-
Running apps
-
Click a row to see how the connection is wired up.
-
-
-
-
- | App |
- Status |
- Last used |
- Actions |
-
-
-
- {rows.map((row) => {
- const open = expanded[row.slot.id] ?? false;
- const busy =
- (stopSlot.isPending && stopSlot.variables === row.slot.id) ||
- (restartSlot.isPending && restartSlot.variables === row.slot.id);
- return (
- setExpanded((s) => ({ ...s, [row.slot.id]: !open }))}
- onRestart={() => beginRestart(row)}
- onStop={() => beginStop(row)}
- />
- );
- })}
-
-
-
-
- )}
-
-
- Apps that "connect over the internet" hide Stop and Restart — those run on the provider's side, so there's
- no local process to control here.
-
-
-
setConfirm(null)}
- onConfirm={() => {
- if (!confirm) return;
- if (confirm.kind === "restart") restartSlot.mutate(confirm.slotId);
- else stopSlot.mutate(confirm.slotId);
- }}
- />
-
- );
-}
-
-function Fact({ label, value }: { label: string; value: ReactNode }) {
- return (
-