export interface ThreadData { channel: "email" | "linear" | "slack" | "web" | "code"; threadId: string; subject: string; from: string; account: string; status: "processing" | "queued" | "replied" | "no_reply" | "failed" | "stalled" | "skipped" | "archived"; startedAt: number; processingAt?: number; endedAt: number | null; detail: string; sessionFile: string | null; logLines: string[]; linearIssue?: string; linearTitle?: string; linearUrl?: string; tokIn?: number; tokOut?: number; cost?: number; } export interface LinearIssue { identifier: string; title: string; url: string; bucket: string; } export interface SessionEntry { file: string; channel: string; ts: string; type: string; content: string; } export interface DaemonHeartbeat { lastTs: number; lastDaemonStart: number; } export interface Heartbeats { email?: DaemonHeartbeat; linear?: DaemonHeartbeat; slack?: DaemonHeartbeat; } export interface ThreadsResponse { threads: ThreadData[]; heartbeats: Heartbeats; ts: number; }