@@ -238,16 +238,14 @@ function ChatMessageToolContent({ part }: { part: ToolUIPart }): ReactNode {
238238
239239export function ChatMessageTool ( { part, className } : { part : ToolUIPart , className ?: string } ) {
240240 const loading = part . state === 'input-streaming' || part . state === 'input-available'
241- const error = part . state === 'output-error'
242-
243- const errorMsg = error ? extractErrorMessage ( part . output ) : null
241+ const error = part . state === 'output-error' ? extractErrorMessage ( part . output ) : null
244242
245243 const Icon = ICONS [ part . state ]
246244 const title = getTitle ( part )
247245
248- const [ open , setOpen ] = useState ( error )
246+ const [ open , setOpen ] = useState ( ! ! error )
249247
250- if ( error && ! open ) {
248+ if ( ! ! error && ! open ) {
251249 setOpen ( true )
252250 }
253251
@@ -273,9 +271,9 @@ export function ChatMessageTool({ part, className }: { part: ToolUIPart, classNa
273271 open = { open }
274272 onOpenChange = { error ? undefined : setOpen }
275273 >
276- < SingleAccordionTrigger className = "gap-2 py-2" disabled = { error } >
274+ < SingleAccordionTrigger className = "gap-2 py-2" disabled = { ! ! error } >
277275 < div className = "flex min-w-0 flex-1 items-center gap-2" >
278- < Icon className = { cn ( 'size-4 shrink-0' , error && 'text-red-600' ) } part = { part } />
276+ < Icon className = { cn ( 'size-4 shrink-0' , ! ! error && 'text-red-600' ) } part = { part } />
279277 < span className = "truncate text-sm" >
280278 { title }
281279 </ span >
@@ -284,26 +282,24 @@ export function ChatMessageTool({ part, className }: { part: ToolUIPart, classNa
284282 </ SingleAccordionTrigger >
285283
286284 < SingleAccordionContent >
287- < div className = "mt-2 space-y-4 text-sm" >
288- { errorMsg
289- ? (
290- < div className = "space-y-2" >
291- < div className = "text-xs text-muted-foreground uppercase" >
292- Error
293- </ div >
294- < div
295- className = { `
296- rounded-md border border-destructive/20 bg-destructive/10
297- px-3 py-2 text-sm text-destructive
298- ` }
299- role = "alert"
300- >
301- { errorMsg }
302- </ div >
285+ { error
286+ ? (
287+ < div className = "space-y-2" >
288+ < div className = "text-xs text-muted-foreground uppercase" >
289+ Error
303290 </ div >
304- )
305- : < ChatMessageToolContent part = { part } /> }
306- </ div >
291+ < div
292+ className = { `
293+ rounded-md border border-destructive/20 bg-destructive/10
294+ px-3 py-2 text-sm text-destructive
295+ ` }
296+ role = "alert"
297+ >
298+ { error }
299+ </ div >
300+ </ div >
301+ )
302+ : < ChatMessageToolContent part = { part } /> }
307303 </ SingleAccordionContent >
308304 </ SingleAccordion >
309305 )
0 commit comments