'use client' import { UseChatHelpers } from '@ai-sdk/react' import type { ToolPart, UIDataTypes, UIMessage, UITools } from '@/lib/types/ai' import FetchSection from './fetch-section' import { QuestionConfirmation } from './question-confirmation' import { SearchSection } from './search-section' import { ToolTodoDisplay } from './tool-todo-display' interface ToolSectionProps { tool: ToolPart isOpen: boolean onOpenChange: (open: boolean) => void status?: UseChatHelpers>['status'] addToolResult?: (params: { toolCallId: string; result: any }) => void borderless?: boolean isFirst?: boolean isLast?: boolean } export function ToolSection({ tool, isOpen, onOpenChange, status, addToolResult, borderless = false, isFirst = false, isLast = false }: ToolSectionProps) { // Special handling for ask_question tool if (tool.type === 'tool-askQuestion') { // When waiting for user input if ( (tool.state === 'input-streaming' || tool.state === 'input-available') && addToolResult ) { return ( } onConfirm={(toolCallId, approved, response) => { addToolResult({ toolCallId, result: approved ? response : { declined: true, skipped: response?.skipped, message: 'User declined this question' } }) }} /> ) } // When result is available, display the result if (tool.state === 'output-available') { return ( } isCompleted={true} onConfirm={() => {}} // Not used in result display mode /> ) } } switch (tool.type) { case 'tool-search': return ( } isOpen={isOpen} onOpenChange={onOpenChange} status={status} borderless={borderless} isFirst={isFirst} isLast={isLast} /> ) case 'tool-fetch': return ( } isOpen={isOpen} onOpenChange={onOpenChange} status={status} borderless={borderless} isFirst={isFirst} isLast={isLast} /> ) case 'tool-todoWrite': return ( ) default: return null } }