export type GenerationTaskStatus = 'draft' | 'queued' | 'running' | 'waiting_external' | 'completed' | 'failed' | 'cancelled'; export type GenerationTaskStepStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped'; export interface GenerationTaskStep { id: string; label: string; status: GenerationTaskStepStatus; progress: number; errorMessage?: string; startedAt?: number; finishedAt?: number; retryable?: boolean; } export interface GenerationTaskCost { estimatedCredits: number; reservedCredits?: number; reservationId?: string; status: 'estimated' | 'reserved' | 'committed' | 'refunded' | 'free' | 'unknown'; refundReason?: string; } export interface GenerationTask { id: string; title: string; pipelineId: string; operation: string; status: GenerationTaskStatus; progress: number; currentStepId: string; steps: GenerationTaskStep[]; cost: GenerationTaskCost; createdAt: number; updatedAt: number; resultUrl?: string; errorMessage?: string; failureSuggestion?: string; retryable?: boolean; recoverable?: boolean; externalTaskIds?: Record; snapshot?: any; } export interface LegacyTaskLike { id: string; keyword: string; status: string; step: string; progress: number; cost?: number; created_at: Date | string; updated_at: Date | string; result_url?: string; error_message?: string; original_video_title?: string; duration?: string; type?: string; estimatedCredits?: number; reservedCredits?: number; creditReservationId?: string; creditStatus?: GenerationTaskCost['status']; operation?: string; pipelineId?: string; generationStatus?: GenerationTaskStatus; externalTaskIds?: Record; failureSuggestion?: string; retryable?: boolean; recoverable?: boolean; lastErrorAt?: string; retryCount?: number; steps?: GenerationTaskStep[]; snapshot?: any; vgData?: any; }