import { ArrowUpCircle, ChevronRight, Check, Cpu, Code } from "lucide-react" import { LucyHealthCard } from "@/components/dashboard/LucyHealthCard" import { SystemStatusCard } from "@/components/dashboard/SystemStatusCard" import { TokenPerformanceCard } from "@/components/dashboard/TokenPerformanceCard" import { useUpdates, useModels } from "@/lib/queries" import { cn } from "@/lib/utils" // MC3-Startseite = der eine „Basisstation"-Blick: Ampel (wiederverwendet) + Updates // (klickbar) + was gerade läuft + die geschätzte Telemetrie (System/Token/Sprach-Latenz). // Bewusst KEINE Wärme/Platte/Speicher-Kacheln — die stehen schon im System-Status. export function Mc3Start() { const { data: updates } = useUpdates(30_000) const { data: modelsResp } = useModels() const upCount = (updates?.os || 0) + (updates?.engine || 0) + (updates?.swap || 0) + (updates?.models || 0) const openUpdates = () => window.dispatchEvent(new CustomEvent("open-system-drawer", { detail: { tab: "maintenance" } })) const models = modelsResp?.models ?? [] const running = modelsResp?.running ?? [] const brain = models.find((m) => m.role === "hermes") const coder = models.find((m) => m.role === "coder-lite") || models.find((m) => m.role === "coder") const isWarm = (name?: string) => (name ? running.includes(name) : false) const shortName = (n?: string) => n?.split("/").pop()?.replace(/\.gguf$/i, "") || "—" return (

Basisstation

Geht's der Box gut, gibt's Updates, was läuft gerade.

{/* Gesamt-Ampel + Fähigkeiten + Speicher (voll wiederverwendet, Box-Rahmen) */} {/* Updates — klickbar, führt direkt zur Liste, was aktualisiert wird */} {/* Was gerade läuft — beide Lanes */}
Was gerade läuft
{[ { icon: Cpu, label: "Lucys Hirn", model: brain?.name, warm: isWarm(brain?.name) }, { icon: Code, label: "Coder (Vibe-Coding)", model: coder?.name, warm: isWarm(coder?.name) }, ].map((r) => (
{r.label} {shortName(r.model)} {r.model ? (r.warm ? "warm" : "bereit") : "nicht gesetzt"}
))}
{/* Geschätzte Telemetrie — 1:1 aus MC2 übernommen */}
) }