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 (
Loading workflow results…
); } if (results.length === 0) { return (

No workflow steps have run yet.

Workflow steps will execute after the main task implementation completes.

); } return (
{results.map((result, index) => (
{result.workflowStepName}
{getStatusLabel(result.status)}
{result.startedAt && ( Started: {formatTimestamp(result.startedAt)} )} {result.completedAt && ( {formatDuration(result.startedAt, result.completedAt)} )}
{result.output && (
Output:
                {result.output}
              
)}
))}
); }