export interface Task { id: string; metadata?: Record; run: (context: TaskExecutionContext) => Promise; } export interface TaskExecutionContext { signal: AbortSignal; } export interface TaskResult { taskId: string; success: boolean; value?: T; error?: Error; durationMs: number; startedAt: number; finishedAt: number; metadata?: Record; aborted?: boolean; } export interface TaskCallbacks { onTaskStart?: (task: Task) => void | Promise; onTaskComplete?: (result: TaskResult) => void | Promise; onError?: (task: Task, error: Error, durationMs: number) => void | Promise; } export interface ParallelRunnerOptions { maxConcurrency?: number; timeoutMs?: number; failFast?: boolean; callbacks?: TaskCallbacks; evaluateTaskSuccess?: (value: T, task: Task) => boolean; } export interface ParallelRunnerMetrics { totalTasks: number; startedTasks: number; completedTasks: number; successCount: number; failureCount: number; totalDurationMs: number; averageDurationMs: number; throughput: number; }