diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index 53b8ef5b87d..ccd24b7d71c 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -1442,16 +1442,18 @@ export class Task extends EventEmitter { // could be in (i.e. could have streamed some tools the user // may have executed), so we just resort to replicating a // cancel task. - this.abortTask() - // Check if this was a user-initiated cancellation - // If this.abort is true, it means the user clicked cancel, so we should + // Check if this was a user-initiated cancellation BEFORE calling abortTask + // If this.abort is already true, it means the user clicked cancel, so we should // treat this as "user_cancelled" rather than "streaming_failed" const cancelReason = this.abort ? "user_cancelled" : "streaming_failed" const streamingFailedMessage = this.abort ? undefined : (error.message ?? JSON.stringify(serializeError(error), null, 2)) + // Now call abortTask after determining the cancel reason + await this.abortTask() + await abortStream(cancelReason, streamingFailedMessage) const history = await provider?.getTaskWithId(this.taskId)