"use client"; import { Loader2, CheckCircle, XCircle, GitBranch, ChevronDown, } from "lucide-react"; import { useState, useEffect, useRef } from "react"; import { cn } from "@/lib/utils"; import { Step } from "@open-swe/shared/open-swe/custom-node-events"; import { Button } from "../ui/button"; type InitializeStepProps = { status: "loading" | "generating" | "done"; success?: boolean; steps?: Step[]; collapse?: boolean; }; export function InitializeStep({ status, success, steps, collapse: collapseProp, }: InitializeStepProps) { const [collapsed, setCollapsed] = useState(collapseProp ?? false); const wasDone = useRef(false); // Auto-collapse when status is 'done' and success is true useEffect(() => { if (status === "done" && success && !collapsed && !wasDone.current) { setCollapsed(true); wasDone.current = true; } if (status !== "done") { wasDone.current = false; } }, [status, success, collapsed]); const stepStatusIcon = { waiting: (
), generating: , success: , error: , }; const getStatusIcon = () => { switch (status) { case "loading": return (
); case "generating": return ; case "done": return success ? ( ) : ( ); } }; const getStatusText = () => { switch (status) { case "loading": return "Preparing environment..."; case "generating": return "Initializing environment..."; case "done": return success ? "Environment ready" : "Initialization failed"; } }; return (
{/* Collapse/Expand Icon */}
{getStatusText()} {getStatusIcon()}
{/* Only render the rest if not collapsed */} {!collapsed && steps && steps.length > 0 && (
    {steps .filter((step) => step.status !== "skipped") .map((step, index) => (
  • {stepStatusIcon[ step.status as keyof typeof stepStatusIcon ] ?? (
    )} {step.name} {step.error && ( ({step.error}) )}
  • ))}
)}
); }