import { getRuntimeStartGuard, getRuntimeStateLabel, getRuntimeStatusTone } from "../runtime-utils"; import type { RuntimeSnapshot } from "../types"; import "./RuntimeStatusCard.css"; function summarizePath(path: string | null): string { if (!path) return "No model selected"; const segments = path.split(/[\\/]/).filter(Boolean); return segments[segments.length - 1] || path; } interface Props { snapshot: RuntimeSnapshot; loading: boolean; busy: boolean; onOpenSettings: () => void; onStart: () => void; onStop: () => void; } export default function RuntimeStatusCard({ snapshot, loading, busy, onOpenSettings, onStart, onStop }: Props) { const tone = getRuntimeStatusTone(snapshot); const isLocal = snapshot.config.connection_mode === "local"; const startGuard = getRuntimeStartGuard(snapshot); const needsSetup = isLocal && !snapshot.process_running && !startGuard.canStart; const primaryAction = needsSetup ? onOpenSettings : isLocal && !snapshot.process_running ? onStart : onStop; const primaryLabel = needsSetup ? "Set up" : isLocal && !snapshot.process_running ? "Start" : "Stop"; const primaryDisabled = busy || (isLocal && snapshot.process_running && snapshot.status === "stopping"); return (
Runtime Manager
{loading ? "Loading runtime" : getRuntimeStateLabel(snapshot)}
{snapshot.config.connection_mode === "local" ? "Local" : "Remote"}

{snapshot.config.connection_mode === "local" ? `Managed endpoint ${snapshot.resolved_url}` : snapshot.config.server_url || "Configure a remote API endpoint"}

{isLocal ? summarizePath(snapshot.config.model_path) : "External provider"} {snapshot.config.start_policy === "on_app_launch" ? "Auto-start" : "Manual start"}
{needsSetup &&
{startGuard.reason}
} {snapshot.last_error && (
{snapshot.last_error.message}
)}
{snapshot.config.connection_mode === "local" && ( )}
); }