import { Spinner, WorktreeLinedIcon } from "@tutti-os/ui-system"; import { AskLinedIcon } from "@tutti-os/ui-system/icons"; import { resolveAgentGUIConversationSortTimeUnixMs } from "./model/agentGuiConversationModel"; import type { AgentGUINodeViewModel } from "./model/agentGuiNodeTypes"; import type { AgentGUIViewLabels } from "./AgentGUINodeView"; import styles from "./AgentGUINode.styles"; export interface ConversationSection { id: string; kind: "pinned" | "project" | "conversations"; label: string; project: AgentGUINodeViewModel["rail"]["conversations"][number]["project"]; items: AgentGUINodeViewModel["rail"]["conversations"]; } export function ConversationMeta({ item, nowMs, labels, hideTime = false }: { item: AgentGUINodeViewModel["rail"]["conversations"][number]; nowMs: number; hideTime?: boolean; labels: Pick< AgentGUIViewLabels, | "relativeTimeJustNow" | "relativeTimeMinutes" | "relativeTimeHours" | "relativeTimeDays" | "relativeTimeMonths" | "relativeTimeYears" >; }): React.JSX.Element | null { "use memo"; const kind = conversationMetaKind(item); const worktreeGlyph = item.isolation?.mode === "worktree" ? : null; const worktreeData = worktreeGlyph ? "true" : undefined; if (kind === "loading") { return ( {worktreeGlyph} ); } if (kind === "waiting") { return ( {worktreeGlyph} ); } if (kind === "failed") { return ( {worktreeGlyph} ); } if (kind === "unread-complete") { return ( {worktreeGlyph} ); } return hideTime ? ( worktreeGlyph ? ( {worktreeGlyph} ) : null ) : ( {worktreeGlyph} {formatConversationRelativeTime( resolveAgentGUIConversationSortTimeUnixMs(item), nowMs, labels )} ); } function WorktreeGlyph(): React.JSX.Element { return (