import { useState, type JSX } from "react"; import { AlertCircle, CheckCircle2, ChevronDown, ChevronUp, ListChecks, type LucideIcon } from "lucide-react"; import { translate } from "../../../i18n/index"; import { CollapsibleReveal } from "./CollapsibleReveal"; import type { AgentTuttiModeCheckpointWakeVM } from "../contracts/agentMessageRowVM"; // Friendly, collapsed summary for a daemon checkpoint-wake prompt. The agent // still receives the full prompt verbatim; here the user sees a compact card // keyed off the checkpoint kind and Issue, with an expand affordance that // reveals the complete injected text. export function AgentTuttiModeCheckpointWakeCard({ checkpointWake, fullText }: { checkpointWake: AgentTuttiModeCheckpointWakeVM; fullText: string; }): JSX.Element { "use memo"; const [expanded, setExpanded] = useState(false); const title = translate(checkpointWakeTitleKey(checkpointWake.kind)); const Icon = checkpointWakeIcon(checkpointWake.kind); const issueLabel = checkpointWake.issueId ? translate("agentHost.agentGui.tuttiModeCheckpointWakeIssue", { issue: checkpointWake.issueId }) : null; const hasBody = fullText.trim().length > 0; const toggleLabel = translate( expanded ? "agentHost.agentGui.tuttiModeCheckpointWakeCollapse" : "agentHost.agentGui.tuttiModeCheckpointWakeExpand" ); return (
{issueLabel ? (
{issueLabel}
) : null} {hasBody ? (
            {fullText}
          
) : null}
); } function checkpointWakeTitleKey(kind: string): string { switch (kind) { case "task_settled": return "agentHost.agentGui.tuttiModeCheckpointWakeTaskSettled"; case "task_failed": return "agentHost.agentGui.tuttiModeCheckpointWakeTaskFailed"; case "task_canceled": return "agentHost.agentGui.tuttiModeCheckpointWakeTaskCanceled"; case "all_tasks_terminal": return "agentHost.agentGui.tuttiModeCheckpointWakeGoalReview"; case "initial_schedule": return "agentHost.agentGui.tuttiModeCheckpointWakeInitialSchedule"; default: return "agentHost.agentGui.tuttiModeCheckpointWakeDefault"; } } function checkpointWakeIcon(kind: string): LucideIcon { switch (kind) { case "task_failed": case "task_canceled": return AlertCircle; case "task_settled": case "all_tasks_terminal": return CheckCircle2; default: return ListChecks; } }