import { deriveSessionDisplayTitle, type Session } from "@opengeni/sdk"; import { modelDisplayName } from "@opengeni/sdk/model-display"; import { cn } from "../lib/cn"; import { formatRelativeTime } from "../lib/format"; import { sessionAdmissionBlocked, sessionDisplayStatus } from "../session-status-model"; import { SessionStatus } from "./session-status"; import { useOpenGeniText } from "../messages/runtime"; const SESSION_METADATA_TITLE_KEYS = ["title", "name"] as const; export type FleetTileProps = { session: Session; /** Overrides the derived title (durable title, metadata, prompt preview, or safe fallback). */ title?: string | undefined; /** Extra line under the title — e.g. "drift check" or the worker's task. */ subtitle?: string | undefined; onOpen?: ((session: Session) => void) | undefined; className?: string | undefined; }; /** Best-effort display title for a session. */ export function sessionDisplayTitle(session: Session): string { return deriveSessionDisplayTitle(session, { metadataKeys: SESSION_METADATA_TITLE_KEYS }); } /** * One session in the fleet/manager view: title, live status, model, and * recency — dense but calm. Running sessions carry a breathing status dot * and a faint accent edge so the live ones read at a glance. */ export function FleetTile({ session, title, subtitle, onOpen, className }: FleetTileProps) { const msg = useOpenGeniText(); const running = session.status === "running" || session.status === "queued"; const needsYou = session.status === "requires_action" && !sessionAdmissionBlocked(session); return ( ); }