export type SessionProvider = 'claude' | 'cursor' | 'codex' | 'gemini'; export type AppTab = 'chat' | 'files' | 'shell' | 'git' | 'tasks' | 'preview' | `plugin:${string}`; export interface ProjectSession { id: string; title?: string; summary?: string; name?: string; createdAt?: string; created_at?: string; updated_at?: string; lastActivity?: string; messageCount?: number; __provider?: SessionProvider; __projectName?: string; [key: string]: unknown; } export interface ProjectSessionMeta { total?: number; hasMore?: boolean; [key: string]: unknown; } export interface ProjectTaskmasterInfo { hasTaskmaster?: boolean; status?: string; metadata?: Record; [key: string]: unknown; } export interface Project { name: string; displayName: string; fullPath: string; path?: string; sessions?: ProjectSession[]; cursorSessions?: ProjectSession[]; codexSessions?: ProjectSession[]; geminiSessions?: ProjectSession[]; sessionMeta?: ProjectSessionMeta; taskmaster?: ProjectTaskmasterInfo; [key: string]: unknown; } export interface LoadingProgress { type?: 'loading_progress'; phase?: string; current: number; total: number; currentProject?: string; [key: string]: unknown; } export interface ProjectsUpdatedMessage { type: 'projects_updated'; projects: Project[]; changedFile?: string; [key: string]: unknown; } export interface LoadingProgressMessage extends LoadingProgress { type: 'loading_progress'; } export type AppSocketMessage = | LoadingProgressMessage | ProjectsUpdatedMessage | { type?: string;[key: string]: unknown };