import type { WorkflowStepResult } from "@fusion/core"; interface WorkflowResultsTabProps { taskId: string; results: WorkflowStepResult[]; loading?: boolean; } function getStatusColor(status: WorkflowStepResult["status"]): string { switch (status) { case "passed": return "var(--color-success, #3fb950)"; case "failed": return "var(--color-error, #f85149)"; case "skipped": return "var(--text-dim, #484f58)"; case "pending": return "var(--todo, #58a6ff)"; default: return "var(--text-dim, #484f58)"; } } function getStatusLabel(status: WorkflowStepResult["status"]): string { switch (status) { case "passed": return "Passed"; case "failed": return "Failed"; case "skipped": return "Skipped"; case "pending": return "Running…"; default: return status; } } function formatDuration(startedAt?: string, completedAt?: string): string | null { if (!startedAt || !completedAt) return null; const start = new Date(startedAt).getTime(); const end = new Date(completedAt).getTime(); const durationMs = end - start; if (durationMs < 1000) return `${durationMs}ms`; const seconds = Math.round(durationMs / 1000); if (seconds < 60) return `${seconds}s`; const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; return `${minutes}m ${remainingSeconds}s`; } function formatTimestamp(iso?: string): string | null { if (!iso) return null; const date = new Date(iso); return date.toLocaleString(); } export function WorkflowResultsTab({ taskId, results, loading }: WorkflowResultsTabProps) { if (loading) { return (
No workflow steps have run yet.
Workflow steps will execute after the main task implementation completes.
{result.output}