/** * ToolCallGroup - Collapsible container for grouped tool calls. * * Groups consecutive tool-call messages into a single collapsible section * (Codex-style). While the agent is still working the group stays expanded; * once the assistant responds it auto-collapses to "Used N tools". */ import { ChevronDown, ChevronRight } from 'lucide-react'; import React, { useEffect, useRef, useState } from 'react'; import { useI18n } from '../../application/i18n/I18nProvider'; import { cn } from '../../lib/utils'; interface ToolCallGroupProps { count: number; children: React.ReactNode; /** When true the group starts expanded (e.g. while streaming). */ defaultExpanded?: boolean; } const ToolCallGroup: React.FC = ({ count, children, defaultExpanded = false, }) => { const { t } = useI18n(); const [expanded, setExpanded] = useState(defaultExpanded); const prevDefault = useRef(defaultExpanded); // Auto-collapse when the group transitions from "active" to "resolved" useEffect(() => { if (prevDefault.current && !defaultExpanded) { setExpanded(false); } prevDefault.current = defaultExpanded; }, [defaultExpanded]); return (
{expanded && (
{children}
)}
); }; export default ToolCallGroup;