import type { ProjectRunState } from '../run-state/types.js'; import type { LooseDeliverable } from './discovery.js'; export type { LooseDeliverable }; export interface ProjectSurface { kind: 'preview' | 'review' | 'run' | 'dashboard'; relPath: string; // RELATIVE to workspaceRoot } export interface ProjectRef { slug: string; workspaceRoot: string; displayName: string; isMeaningful: boolean; lastActivity: string | null; // ISO surfaces: ProjectSurface[]; /** Representative image RELATIVE to workspaceRoot, or null when none found. */ thumbRelPath: string | null; } export type SectionKey = 'rendering' | 'needs-you' | 'delivered' | 'all'; export interface MonitorProject extends ProjectRef { run: ProjectRunState; provider: string | null; } export interface WorkspaceModel { generatedAt: string; roots: string[]; counts: { rendering: number; needsYou: number; delivered: number; total: number; scratchHidden: number }; sections: Record; /** Rendered videos found outside any `projects//` workspace, newest-first (capped at 60). */ looseDeliverables: LooseDeliverable[]; }