Skip to content

Commit 1558df6

Browse files
authored
Track cloud synced messages (#9518)
1 parent 98b06d8 commit 1558df6

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/core/task/Task.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,9 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
314314
private tokenUsageSnapshot?: TokenUsage
315315
private tokenUsageSnapshotAt?: number
316316

317+
// Cloud Sync Tracking
318+
private cloudSyncedMessageTimestamps: Set<number> = new Set()
319+
317320
constructor({
318321
provider,
319322
apiConfiguration,
@@ -797,27 +800,42 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
797800
event: TelemetryEventName.TASK_MESSAGE,
798801
properties: { taskId: this.taskId, message },
799802
})
803+
// Track that this message has been synced to cloud
804+
this.cloudSyncedMessageTimestamps.add(message.ts)
800805
}
801806
}
802807

803808
public async overwriteClineMessages(newMessages: ClineMessage[]) {
804809
this.clineMessages = newMessages
805810
restoreTodoListForTask(this)
806811
await this.saveClineMessages()
812+
813+
// When overwriting messages (e.g., during task resume), repopulate the cloud sync tracking Set
814+
// with timestamps from all non-partial messages to prevent re-syncing previously synced messages
815+
this.cloudSyncedMessageTimestamps.clear()
816+
for (const msg of newMessages) {
817+
if (msg.partial !== true) {
818+
this.cloudSyncedMessageTimestamps.add(msg.ts)
819+
}
820+
}
807821
}
808822

809823
private async updateClineMessage(message: ClineMessage) {
810824
const provider = this.providerRef.deref()
811825
await provider?.postMessageToWebview({ type: "messageUpdated", clineMessage: message })
812826
this.emit(RooCodeEventName.Message, { action: "updated", message })
813827

828+
// Check if we should sync to cloud and haven't already synced this message
814829
const shouldCaptureMessage = message.partial !== true && CloudService.isEnabled()
830+
const hasNotBeenSynced = !this.cloudSyncedMessageTimestamps.has(message.ts)
815831

816-
if (shouldCaptureMessage) {
832+
if (shouldCaptureMessage && hasNotBeenSynced) {
817833
CloudService.instance.captureEvent({
818834
event: TelemetryEventName.TASK_MESSAGE,
819835
properties: { taskId: this.taskId, message },
820836
})
837+
// Track that this message has been synced to cloud
838+
this.cloudSyncedMessageTimestamps.add(message.ts)
821839
}
822840
}
823841

0 commit comments

Comments
 (0)