Skip to content
Open
Show file tree
Hide file tree
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
34 changes: 26 additions & 8 deletions src/core/task/Task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -551,12 +551,9 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
this.emit(RooCodeEventName.QueuedMessagesUpdated, this.taskId, this.messageQueueService.messages)
void this.providerRef
.deref()
?.postStateToWebviewWithoutTaskHistory()
?.postStateToWebviewThrottled()
.catch((error) => {
console.error(
"[Task#messageQueueStateChangedHandler] postStateToWebviewWithoutTaskHistory failed:",
error,
)
console.error("[Task#messageQueueStateChangedHandler] postStateToWebviewThrottled failed:", error)
})
}

Expand Down Expand Up @@ -1047,9 +1044,21 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
private async addToClineMessages(message: ClineMessage) {
this.clineMessages.push(message)
const provider = this.providerRef.deref()
// Avoid resending large, mostly-static fields (notably taskHistory) on every chat message update.
// taskHistory is maintained in-memory in the webview and updated via taskHistoryItemUpdated.
await provider?.postStateToWebviewWithoutTaskHistory()
// Unanswered asks must reach the webview before Message listeners can respond against its state.
const requiresImmediateState =
message.partial === true || (message.type === "ask" && message.isAnswered !== true)
try {
await provider?.postStateToWebviewThrottled()
} catch (error) {
console.error("[Task#addToClineMessages] postStateToWebviewThrottled failed:", error)
}
if (requiresImmediateState) {
try {
await provider?.flushPostStateToWebviewThrottled()
} catch (error) {
console.error("[Task#addToClineMessages] flushPostStateToWebviewThrottled failed:", error)
}
}
this.emit(RooCodeEventName.Message, { action: "created", message })
await this.saveClineMessages()

Expand Down Expand Up @@ -2250,6 +2259,15 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
// Force final token usage update before abort event
this.emitFinalTokenUsageUpdate()

try {
await this.providerRef.deref()?.flushPostStateToWebviewThrottled()
} catch (error) {
console.error(
`[Task#abortTask] flushPostStateToWebviewThrottled failed for ${this.taskId}.${this.instanceId}:`,
error,
)
}

this.emit(RooCodeEventName.TaskAborted)

try {
Expand Down
Loading
Loading