diff --git a/src/browser/utils/messages/StreamingMessageAggregator.ts b/src/browser/utils/messages/StreamingMessageAggregator.ts index 4e0c8f9ec1..68768fb55f 100644 --- a/src/browser/utils/messages/StreamingMessageAggregator.ts +++ b/src/browser/utils/messages/StreamingMessageAggregator.ts @@ -54,12 +54,16 @@ function hasSuccessResult(result: unknown): boolean { } /** - * Check if a tool result indicates failure (for tools that return { success: boolean }) + * Check if a tool result indicates failure. + * Handles both explicit failure ({ success: false }) and implicit failure ({ error: "..." }) */ function hasFailureResult(result: unknown): boolean { - return ( - typeof result === "object" && result !== null && "success" in result && result.success === false - ); + if (typeof result !== "object" || result === null) return false; + // Explicit failure + if ("success" in result && result.success === false) return true; + // Implicit failure - error field present + if ("error" in result && result.error) return true; + return false; } export class StreamingMessageAggregator { diff --git a/src/node/services/streamManager.ts b/src/node/services/streamManager.ts index fb22c84b1c..815d8d0210 100644 --- a/src/node/services/streamManager.ts +++ b/src/node/services/streamManager.ts @@ -938,6 +938,7 @@ export class StreamManager extends EventEmitter { // Format error output const errorOutput = { + success: false, error: typeof toolErrorPart.error === "string" ? toolErrorPart.error