import { formatTimeAgo } from "../infra/format-time/format-relative.ts" ;
import { formatTokenCount } from "../utils/usage-format.js" ;
import { formatContextUsageLine } from "./tui-formatters.js" ;
import type { GatewayStatusSummary } from "./tui-types.js" ;
export function formatStatusSummary(summary: GatewayStatusSummary) {
const lines: string[] = [];
lines.push("Gateway status" );
if (summary.runtimeVersion) {
lines.push(`Version: ${summary.runtimeVersion}`);
}
if (!summary.linkChannel) {
lines.push("Link channel: unknown" );
} else {
const linkLabel = summary.linkChannel.label ?? "Link channel" ;
const linked = summary.linkChannel.linked === true ;
const authAge =
linked && typeof summary.linkChannel.authAgeMs === "number"
? ` (last refreshed ${formatTimeAgo(summary.linkChannel.authAgeMs)})`
: "" ;
lines.push(`${linkLabel}: ${linked ? "linked" : "not linked" }${authAge}`);
}
const providerSummary = Array.isArray(summary.providerSummary) ? summary.providerSummary : [];
if (providerSummary.length > 0 ) {
lines.push("" );
lines.push("System:" );
for (const line of providerSummary) {
lines.push(` ${line}`);
}
}
const heartbeatAgents = summary.heartbeat?.agents ?? [];
if (heartbeatAgents.length > 0 ) {
const heartbeatParts = heartbeatAgents.map((agent) => {
const agentId = agent.agentId ?? "unknown" ;
if (!agent.enabled || !agent.everyMs) {
return `disabled (${agentId})`;
}
return `${agent.every ?? "unknown" } (${agentId})`;
});
lines.push("" );
lines.push(`Heartbeat: ${heartbeatParts.join(", " )}`);
}
const sessionPaths = summary.sessions?.paths ?? [];
if (sessionPaths.length === 1 ) {
lines.push(`Session store: ${sessionPaths[0 ]}`);
} else if (sessionPaths.length > 1 ) {
lines.push(`Session stores: ${sessionPaths.length}`);
}
const defaults = summary.sessions?.defaults;
const defaultModel = defaults?.model ?? "unknown" ;
const defaultCtx =
typeof defaults?.contextTokens === "number"
? ` (${formatTokenCount(defaults.contextTokens)} ctx)`
: "" ;
lines.push(`Default model: ${defaultModel}${defaultCtx}`);
const sessionCount = summary.sessions?.count ?? 0 ;
lines.push(`Active sessions: ${sessionCount}`);
const recent = Array.isArray(summary.sessions?.recent) ? summary.sessions?.recent : [];
if (recent.length > 0 ) {
lines.push("Recent sessions:" );
for (const entry of recent) {
const ageLabel = typeof entry.age === "number" ? formatTimeAgo(entry.age) : "no activity" ;
const model = entry.model ?? "unknown" ;
const usage = formatContextUsageLine({
total: entry.totalTokens ?? null ,
context: entry.contextTokens ?? null ,
remaining: entry.remainingTokens ?? null ,
percent: entry.percentUsed ?? null ,
});
const flags = entry.flags?.length ? ` | flags: ${entry.flags.join(", " )}` : "" ;
lines.push(
`- ${entry.key}${entry.kind ? ` [${entry.kind}]` : "" } | ${ageLabel} | model ${model} | ${usage}${flags}`,
);
}
}
const queued = Array.isArray(summary.queuedSystemEvents) ? summary.queuedSystemEvents : [];
if (queued.length > 0 ) {
const preview = queued.slice(0 , 3 ).join(" | " );
lines.push(`Queued system events (${queued.length}): ${preview}`);
}
return lines;
}
Messung V0.5 in Prozent C=100 H=93 G=96
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland