Select steps to run after task implementation completes
{workflowStepOptions.map((step) => (
))}
{selectedWorkflowSteps.length > 1 && (
Execution order:
{selectedWorkflowSteps.map((stepId, index) => {
const stepInfo = workflowStepLookup.get(stepId);
return (
{index + 1}
{stepInfo?.name || stepId}
);
})}
)}
);
};
const renderResults = () => {
if (loading) {
return (
No workflow steps configured for this task.
Pre-merge steps run after implementation, before merge. Post-merge steps run after merge succeeds.
);
}
const passed = results.filter((r) => r.status === "passed").length;
const failed = results.filter((r) => r.status === "failed").length;
const skipped = results.filter((r) => r.status === "skipped").length;
const pending = results.filter((r) => r.status === "pending").length;
const summaryParts: string[] = [`${results.length} step${results.length !== 1 ? "s" : ""}`];
if (passed > 0) summaryParts.push(`${passed} passed`);
if (failed > 0) summaryParts.push(`${failed} failed`);
if (skipped > 0) summaryParts.push(`${skipped} skipped`);
if (pending > 0) summaryParts.push(`${pending} running`);
return (
{summaryParts.join(" · ")}
{results.map((result, index) => {
const phase = (result.phase || "pre-merge") as "pre-merge" | "post-merge";
const isExpanded = expandedOutputs[result.workflowStepId] ?? false;
return (
{result.workflowStepName}
{phaseBadge(phase, result.workflowStepId, "workflow-result-phase")}
{getStatusLabel(result.status)}
{result.startedAt && (
Started: {formatTimestamp(result.startedAt)}
)}
{result.completedAt && (
{formatDuration(result.startedAt, result.completedAt)}
)}
{result.output && (
Output:
{!isExpanded && (
{getOutputPreview(result.output)}
)}
{isExpanded && (
{result.output}
)}
)}
);
})}
);
};
const editButton = canEdit ? (
{showConfiguredStepsState ? (
Configured Workflow Steps
{configuredSteps.length} step{configuredSteps.length === 1 ? "" : "s"}
{editButton}
{configuredSteps.map((step) => (
{step.name}
{phaseBadge(step.phase, step.id, "workflow-configured-phase")}
{step.description}
))}
Pre-merge steps run after implementation, before merge. Post-merge steps run after merge succeeds.
{renderEditor()}
) : (
<>
{showEditHeaderForResults && (
Workflow Steps
{editButton}
)}
{renderResults()}
{renderEditor()}
>
)}
);
}