import { Task, WorkflowContext } from '../../task'; export interface WorkflowHookContext[]> { workflow: Workflow; taskStates: Map; } export interface TaskHookContext { task: Task; taskState: TaskState; ctx?: WorkflowContext; } export interface WorkflowHooks[]> { onWorkflowStart?: (context: WorkflowHookContext) => void; onWorkflowEnd?: (context: WorkflowHookContext) => void; onWorkflowError?: (error: unknown, context: WorkflowHookContext) => void; onTaskStart?: (context: TaskHookContext) => void; onTaskEnd?: (error: unknown | undefined, result: unknown | undefined, context: TaskHookContext) => void; /** * Return true if the error means we should skip retrying the task */ onTaskError?: (error: unknown, context: TaskHookContext) => boolean; onTaskSuccess?: (result: unknown, context: TaskHookContext) => void; onTaskRetry?: (context: TaskHookContext) => void; } export interface Workflow[]> { name: string; uniqueTasks: Map>; hooks?: WorkflowHooks; } export interface WorkflowResult { taskStates: Map; error?: unknown; status: 'completed' | 'failed'; duration: number; } export interface TaskExecutionContext[]> { workflow: Workflow; taskStates: Map; initialData: unknown; context?: WorkflowContext; uniqueTasks: Map>; } export interface TaskExecutionResult { success: boolean; result?: unknown; error?: unknown; task?: Task; } export interface TaskState { status: 'pending' | 'running' | 'completed' | 'failed'; result?: unknown; error?: unknown; attempts: number; }