Merge pull request #949 from RooVetGit/cte/fix-diff-editor-revert-on-abort

Fix file revert on abort
This commit is contained in:
Chris Estreich 2025-02-11 12:54:17 -08:00 committed by GitHub
commit d264befa32
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

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 we're not streaming then `abortStream` (which reverts the diff
// view changes) won't be called, so we need to revert the changes here.
if (this.isStreaming && this.diffViewProvider.isEditing) {
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