Fix file revert on abort

This commit is contained in:
cte 2025-02-11 12:44:32 -08:00
parent e39b006330
commit 901adc580f

View file

@ -732,13 +732,18 @@ export class Cline {
}
async abortTask() {
this.abort = true // Will stop any autonomously running promises.
// Will stop any autonomously running promises.
this.abort = true
this.terminalManager.disposeAll()
this.urlContentFetcher.closeBrowser()
this.browserSession.closeBrowser()
// Need to await for when we want to make sure directories/files are
// reverted before re-starting the task from a checkpoint.
await this.diffViewProvider.revertChanges()
if (this.isStreaming && this.diffViewProvider.isEditing) {
// Need to await for when we want to make sure directories/files are
// reverted before re-starting the task from a checkpoint.
await this.diffViewProvider.revertChanges()
}
}
// Tools
@ -2817,6 +2822,8 @@ export class Cline {
}
const abortStream = async (cancelReason: ClineApiReqCancelReason, streamingFailedMessage?: string) => {
console.log(`[Cline#abortStream] cancelReason = ${cancelReason}`)
if (this.diffViewProvider.isEditing) {
await this.diffViewProvider.revertChanges() // closes diff view
}
@ -2871,6 +2878,7 @@ export class Cline {
const stream = this.attemptApiRequest(previousApiReqIndex) // yields only if the first chunk is successful, otherwise will allow the user to retry the request (most likely due to rate limit error, which gets thrown on the first chunk)
let assistantMessage = ""
let reasoningMessage = ""
this.isStreaming = true
try {
for await (const chunk of stream) {
if (!chunk) {
@ -2903,11 +2911,13 @@ export class Cline {
}
if (this.abort) {
console.log("aborting stream...")
console.log(`aborting stream, this.abandoned = ${this.abandoned}`)
if (!this.abandoned) {
// only need to gracefully abort if this instance isn't abandoned (sometimes openrouter stream hangs, in which case this would affect future instances of cline)
await abortStream("user_cancelled")
}
break // aborts the stream
}
@ -2940,6 +2950,8 @@ export class Cline {
// await this.providerRef.deref()?.postStateToWebview()
}
}
} finally {
this.isStreaming = false
}
// need to call here in case the stream was aborted