/* Copyright 2026 Marimo. All rights reserved. */ import type { RequestPermissionResponse } from "@zed-industries/agent-client-protocol"; import { CheckCircleIcon, Loader2, PlugIcon, ShieldCheckIcon, WifiIcon, WifiOffIcon, XCircleIcon, } from "lucide-react"; import React, { memo } from "react"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { cn } from "@/utils/cn"; import { ToolBodyBlock } from "./blocks"; import type { AgentPendingPermission } from "./types"; interface SimpleAccordionProps { title: string | React.ReactNode; children: React.ReactNode | string; status?: "loading" | "error" | "success"; index?: number; defaultIcon?: React.ReactNode; } export const SimpleAccordion: React.FC = ({ title, children, status, index = 0, defaultIcon, }) => { const getStatusIcon = () => { switch (status) { case "loading": return ; case "error": return ; case "success": return ; default: return defaultIcon; } }; return ( svg]:rotate-180", status === "error" && "text-destructive/80", status === "success" && "text-[var(--blue-8)]", )} > {getStatusIcon()} {title}
{status !== "error" && (
{children}
)} {status === "error" && (
{children}
)}
); }; interface ConnectionStatusProps { status: string; className?: string; } export const ConnectionStatus: React.FC = memo( ({ status, className }) => { const getStatusConfig = () => { switch (status) { case "connected": return { icon: , label: "Connected", variant: "default" as const, className: "bg-[var(--blue-3)] text-[var(--blue-11)] border-[var(--blue-5)]", }; case "connecting": return { icon: , label: "Connecting", variant: "secondary" as const, className: "bg-[var(--yellow-3)] text-[var(--yellow-11)] border-[var(--yellow-5)]", }; case "disconnected": return { icon: , label: "Disconnected", variant: "outline" as const, className: "bg-[var(--red-3)] text-[var(--red-11)] border-[var(--red-5)]", }; default: return { icon: , label: status || "Unknown", variant: "outline" as const, className: "bg-[var(--gray-3)] text-[var(--gray-11)] border-[var(--gray-5)]", }; } }; const config = getStatusConfig(); return ( {config.icon} {config.label} ); }, ); ConnectionStatus.displayName = "ConnectionStatus"; interface PermissionRequestProps { permission: NonNullable; onResolve: (option: RequestPermissionResponse) => void; } export const PermissionRequest: React.FC = memo( ({ permission, onResolve }) => { return (

Permission Request

The AI agent is requesting permission to proceed:

{permission.options.map((option) => ( ))}
); }, ); PermissionRequest.displayName = "PermissionRequest";