Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion src/core/task/Task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,14 @@ export class Task extends EventEmitter<ClineEvents> {
await this.addToClineMessages({ ts: askTs, type: "ask", ask: type, text, isProtected })
}

await pWaitFor(() => this.askResponse !== undefined || this.lastMessageTs !== askTs, { interval: 100 })
await pWaitFor(() => this.askResponse !== undefined || this.lastMessageTs !== askTs || this.abort, {
interval: 100,
})

// If the task was aborted while waiting for a response, throw an abort error
if (this.abort) {
throw new Error(`[RooCode#ask] task ${this.taskId}.${this.instanceId} aborted while waiting for response`)
}

if (this.lastMessageTs !== askTs) {
// Could happen if we send multiple asks in a row i.e. with
Expand Down Expand Up @@ -785,6 +792,12 @@ export class Task extends EventEmitter<ClineEvents> {
}

private async resumeTaskFromHistory() {
// Clear any lingering ask promise state from previous task instances
// This prevents "Current ask promise was ignored" errors when resuming
this.askResponse = undefined
this.askResponseText = undefined
this.askResponseImages = undefined

const modifiedClineMessages = await this.getSavedClineMessages()

// Remove any resume messages that may have been added before
Expand Down Expand Up @@ -1083,6 +1096,14 @@ export class Task extends EventEmitter<ClineEvents> {
}

this.abort = true

// Clear any pending ask promise state to prevent "Current ask promise was ignored" errors
// when resuming from history
this.askResponse = undefined
this.askResponseText = undefined
this.askResponseImages = undefined
// Don't clear lastMessageTs here as it might be used by other parts of the code

this.emit("taskAborted")

try {
Expand Down
Loading