import { Check, FileCode2, ShieldAlert, X } from "lucide-react" import type { WorkflowApproval } from "@/lib/agents/api" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card" type ApprovalStatus = "pending" | "approved" | "rejected" | string interface WorkflowApprovalCardProps { approval: WorkflowApproval isOwner: boolean isPending: boolean onApprove: (fingerprint: string) => void onReject: (fingerprint: string) => void } function statusBadgeClass(status: ApprovalStatus) { switch (status) { case "approved": return "bg-green-500/10 text-green-600 dark:text-green-400" case "rejected": return "bg-red-500/10 text-red-600 dark:text-red-400" default: return "bg-amber-500/10 text-amber-600 dark:text-amber-400" } } function statusLabel(status: ApprovalStatus) { switch (status) { case "approved": return "Approved" case "rejected": return "Rejected" default: return "Pending approval" } } export function WorkflowApprovalCard({ approval, isOwner, isPending, onApprove, onReject, }: WorkflowApprovalCardProps) { const actionable = isOwner && approval.status === "pending" && !isPending const decided = approval.status !== "pending" return (
Workflow push approval required
{statusLabel(approval.status)}
Open SWE is trying to push GitHub workflow file changes in{" "} {approval.repo} on {approval.branch} . Approve only if this exact workflow diff is expected.
Changed workflow files
    {approval.files.map((file) => (
  • {file}
  • ))}
Fingerprint:{" "} {approval.fingerprint}
{actionable ? ( ) : decided ? ( This workflow push has been {approval.status}. If the workflow files change, a new fingerprint will be required. ) : null} {!isOwner && approval.status === "pending" && ( Only the thread owner can approve or reject this workflow push. )}
) }