import { useState } from 'react'; import { Bot, Check, ChevronDown, Loader2, ShieldAlert, ShieldCheck, X } from 'lucide-react'; import { MarkdownContent } from '@renderer/components/MarkdownContent'; import { permissionDetailSummary, PermissionDetailView } from '@renderer/components/chat/PermissionDetailView'; import type { ApprovalDecision, PendingApprovalRecord } from '@shared/domain/approval'; /* ── ApprovalBanner ────────────────────────────────────────── */ export function ApprovalBanner({ approval, onResolve, isResolving, position, total, }: { approval: PendingApprovalRecord; onResolve: (decision: ApprovalDecision) => void; isResolving: boolean; position?: number; total?: number; }) { const kindLabel = approval.kind === 'final-response' ? 'Final response review' : 'Tool call approval'; const hasMessages = approval.messages && approval.messages.length > 0; const showPosition = position !== undefined && total !== undefined && total > 1; return (
{/* Header */}
{approval.title} {kindLabel} {showPosition && ( {position} of {total} )}
{approval.agentName && Agent: {approval.agentName}} {approval.toolName && Tool: {approval.toolName}} {approval.permissionKind && Permission: {approval.permissionKind}}
{approval.permissionDetail ? : approval.detail && (

{approval.detail}

)}
{/* Final-response message preview */} {hasMessages && (

Pending messages — not yet published

{approval.messages!.map((message) => (
{message.authorName}
))}
)} {/* Actions */}
{showPosition && ( Next approval will appear after this one is resolved )}
); } /* ── QueuedApprovalsList ───────────────────────────────────── */ export function QueuedApprovalsList({ approvals }: { approvals: PendingApprovalRecord[] }) { const [expanded, setExpanded] = useState(false); return (
{expanded && (
{approvals.map((approval) => { const kindLabel = approval.kind === 'final-response' ? 'response' : 'tool'; return (
{(approval.permissionDetail && permissionDetailSummary(approval.permissionDetail)) || approval.title} {kindLabel} {approval.toolName && ( {approval.toolName} )} {approval.agentName && ( {approval.agentName} )}
); })}
)}
); }