import { useMemo } from "react"; import { useQuery } from "@tanstack/react-query"; import type { Agent, AcceptedPlanDecompositionSummary } from "@paperclipai/shared"; import { ChevronRight, GitBranch, Repeat, CheckCircle2, Loader2 } from "lucide-react"; import { Link } from "@/lib/router"; import { issuesApi } from "../api/issues"; import { queryKeys } from "../lib/queryKeys"; import { cn, formatDateTime, relativeTime } from "../lib/utils"; interface IssuePlanDecompositionsSectionProps { issueId: string; issueIdentifier: string | null; agentMap?: Map; } function StatusBadge({ status }: { status: AcceptedPlanDecompositionSummary["status"] }) { if (status === "completed") { return ( Completed ); } return ( In flight ); } export function IssuePlanDecompositionsSection({ issueId, issueIdentifier, agentMap, }: IssuePlanDecompositionsSectionProps) { const { data: decompositions } = useQuery({ queryKey: queryKeys.issues.acceptedPlanDecompositions(issueId), queryFn: () => issuesApi.listAcceptedPlanDecompositions(issueId), }); const items = useMemo(() => decompositions ?? [], [decompositions]); if (items.length === 0) return null; return (

Plan decomposition

{items.length === 1 ? "1 accepted plan revision" : `${items.length} accepted plan revisions`}
); }