Track cloud synced messages (#9518)

This commit is contained in:
Matt Rubens 2025-11-23 13:17:26 -05:00 committed by GitHub
parent 98b06d84be
commit 1558df65b5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -314,6 +314,9 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
private tokenUsageSnapshot?: TokenUsage
private tokenUsageSnapshotAt?: number
// Cloud Sync Tracking
private cloudSyncedMessageTimestamps: Set<number> = new Set()
constructor({
provider,
apiConfiguration,
@ -797,6 +800,8 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
event: TelemetryEventName.TASK_MESSAGE,
properties: { taskId: this.taskId, message },
})
// Track that this message has been synced to cloud
this.cloudSyncedMessageTimestamps.add(message.ts)
}
}
@ -804,6 +809,15 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
this.clineMessages = newMessages
restoreTodoListForTask(this)
await this.saveClineMessages()
// When overwriting messages (e.g., during task resume), repopulate the cloud sync tracking Set
// with timestamps from all non-partial messages to prevent re-syncing previously synced messages
this.cloudSyncedMessageTimestamps.clear()
for (const msg of newMessages) {
if (msg.partial !== true) {
this.cloudSyncedMessageTimestamps.add(msg.ts)
}
}
}
private async updateClineMessage(message: ClineMessage) {
@ -811,13 +825,17 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
await provider?.postMessageToWebview({ type: "messageUpdated", clineMessage: message })
this.emit(RooCodeEventName.Message, { action: "updated", message })
// Check if we should sync to cloud and haven't already synced this message
const shouldCaptureMessage = message.partial !== true && CloudService.isEnabled()
const hasNotBeenSynced = !this.cloudSyncedMessageTimestamps.has(message.ts)
if (shouldCaptureMessage) {
if (shouldCaptureMessage && hasNotBeenSynced) {
CloudService.instance.captureEvent({
event: TelemetryEventName.TASK_MESSAGE,
properties: { taskId: this.taskId, message },
})
// Track that this message has been synced to cloud
this.cloudSyncedMessageTimestamps.add(message.ts)
}
}