// Modified in AgentDeskFixes: safe, reviewed setup repairs and honest routing diagnostics. "use client" import { AlertTriangleIcon, ArrowRightIcon, CheckCircle2Icon, SparklesIcon, } from "lucide-react" import Link from "next/link" import { useEffect, useState } from "react" import { SETUP_READINESS_UPDATED_EVENT, } from "@/components/operator-readiness-indicator" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { useI18n } from "@/i18n/provider" import { fetchSetupReadiness, type SetupReadinessResponse, } from "@/lib/api/setup-readiness" export function SetupReadinessBanner({ onUpdated }: { onUpdated?: () => void }) { const t = useI18n() const [readiness, setReadiness] = useState(null) useEffect(() => { let active = true let latestRequest = 0 const loadReadiness = () => { const request = ++latestRequest void fetchSetupReadiness().then((data) => { if (active && request === latestRequest) setReadiness(data) }).catch(() => { // Keep this optional background banner quiet on failure. }) } loadReadiness() const handleUpdated = () => { loadReadiness() onUpdated?.() } window.addEventListener(SETUP_READINESS_UPDATED_EVENT, handleUpdated) return () => { active = false window.removeEventListener(SETUP_READINESS_UPDATED_EVENT, handleUpdated) } }, [onUpdated]) if (!readiness) { return null } const allReady = readiness.can_receive_requests_now && readiness.current_operator.can_receive_now && readiness.overall_status === "ok" if (allReady) { return null } const canQuickSetupAll = readiness.steps.some((s) => s.quick_fix_actions.includes("quick_setup_all"), ) const incompleteSteps = readiness.steps.filter((s) => s.status !== "ok") return (

{t("setupWizard.banner.title")}

{t("setupWizard.stepsProgress", { ready: readiness.ready_steps, total: readiness.total_steps, })}

{t("setupWizard.banner.description")}

{incompleteSteps.map((step) => ( {step.step_number}. {t(`setupWizard.steps.${step.key}.title`)} ))} {!readiness.current_operator.can_receive_now ? readiness.current_operator.blocker_codes.map((code) => ( {t(`setupWizard.operatorBlockers.${code}`)} )) : null}
{canQuickSetupAll ? ( ) : null}
) } export { CheckCircle2Icon }