@@ -751,16 +751,32 @@ export namespace MessageV2 {
751751 ...( differentModel ? { } : { callProviderMetadata : providerMeta ( part . metadata ) } ) ,
752752 } )
753753 }
754- if ( part . state . status === "error" )
755- assistantMessage . parts . push ( {
756- type : ( "tool-" + part . tool ) as `tool-${string } `,
757- state : "output-error" ,
758- toolCallId : part . callID ,
759- input : part . state . input ,
760- errorText : part . state . error ,
761- ...( part . metadata ?. providerExecuted ? { providerExecuted : true } : { } ) ,
762- ...( differentModel ? { } : { callProviderMetadata : providerMeta ( part . metadata ) } ) ,
763- } )
754+ if ( part . state . status === "error" ) {
755+ const output = part . state . metadata ?. interrupted === true ? part . state . metadata . output : undefined
756+ if ( typeof output === "string" ) {
757+ assistantMessage . parts . push ( {
758+ type : ( "tool-" + part . tool ) as `tool-${string } `,
759+ state : "output-available" ,
760+ toolCallId : part . callID ,
761+ input : part . state . input ,
762+ output,
763+ ...( part . metadata ?. providerExecuted ? { providerExecuted : true } : { } ) ,
764+ ...( differentModel ? { } : { callProviderMetadata : providerMeta ( part . metadata ) } ) ,
765+ } )
766+ } else {
767+ assistantMessage . parts . push ( {
768+ type : ( "tool-" + part . tool ) as `tool-${string } `,
769+ state : "output-error" ,
770+ toolCallId : part . callID ,
771+ input : part . state . input ,
772+ errorText : part . state . error ,
773+ ...( part . metadata ?. providerExecuted ? { providerExecuted : true } : { } ) ,
774+ ...( differentModel ? { } : { callProviderMetadata : providerMeta ( part . metadata ) } ) ,
775+ } )
776+ }
777+ }
778+ // Handle pending/running tool calls to prevent dangling tool_use blocks
779+ // Anthropic/Claude APIs require every tool_use to have a corresponding tool_result
764780 if ( part . state . status === "pending" || part . state . status === "running" )
765781 assistantMessage . parts . push ( {
766782 type : ( "tool-" + part . tool ) as `tool-${string } `,
0 commit comments