fix: preserve interrupted bash output in tool results (#21598)
This commit is contained in:
@@ -751,16 +751,32 @@ export namespace MessageV2 {
|
||||
...(differentModel ? {} : { callProviderMetadata: providerMeta(part.metadata) }),
|
||||
})
|
||||
}
|
||||
if (part.state.status === "error")
|
||||
assistantMessage.parts.push({
|
||||
type: ("tool-" + part.tool) as `tool-${string}`,
|
||||
state: "output-error",
|
||||
toolCallId: part.callID,
|
||||
input: part.state.input,
|
||||
errorText: part.state.error,
|
||||
...(part.metadata?.providerExecuted ? { providerExecuted: true } : {}),
|
||||
...(differentModel ? {} : { callProviderMetadata: providerMeta(part.metadata) }),
|
||||
})
|
||||
if (part.state.status === "error") {
|
||||
const output = part.state.metadata?.interrupted === true ? part.state.metadata.output : undefined
|
||||
if (typeof output === "string") {
|
||||
assistantMessage.parts.push({
|
||||
type: ("tool-" + part.tool) as `tool-${string}`,
|
||||
state: "output-available",
|
||||
toolCallId: part.callID,
|
||||
input: part.state.input,
|
||||
output,
|
||||
...(part.metadata?.providerExecuted ? { providerExecuted: true } : {}),
|
||||
...(differentModel ? {} : { callProviderMetadata: providerMeta(part.metadata) }),
|
||||
})
|
||||
} else {
|
||||
assistantMessage.parts.push({
|
||||
type: ("tool-" + part.tool) as `tool-${string}`,
|
||||
state: "output-error",
|
||||
toolCallId: part.callID,
|
||||
input: part.state.input,
|
||||
errorText: part.state.error,
|
||||
...(part.metadata?.providerExecuted ? { providerExecuted: true } : {}),
|
||||
...(differentModel ? {} : { callProviderMetadata: providerMeta(part.metadata) }),
|
||||
})
|
||||
}
|
||||
}
|
||||
// Handle pending/running tool calls to prevent dangling tool_use blocks
|
||||
// Anthropic/Claude APIs require every tool_use to have a corresponding tool_result
|
||||
if (part.state.status === "pending" || part.state.status === "running")
|
||||
assistantMessage.parts.push({
|
||||
type: ("tool-" + part.tool) as `tool-${string}`,
|
||||
|
||||
Reference in New Issue
Block a user