@@ -617,12 +617,11 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
617617 { leading : true , trailing : true , maxWait : this . TOKEN_USAGE_EMIT_INTERVAL_MS } ,
618618 )
619619
620- this . startIdleTelemetryCheck ( )
621-
622620 onCreated ?.( this )
623621
624622 if ( startTask ) {
625623 this . _started = true
624+ this . startIdleTelemetryCheck ( )
626625 if ( task || images ) {
627626 void this . startTask ( task , images ) . catch ( ( error ) => {
628627 console . error ( "[Task#constructor] startTask failed:" , error )
@@ -1900,6 +1899,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
19001899 return
19011900 }
19021901 this . _started = true
1902+ this . startIdleTelemetryCheck ( )
19031903
19041904 const { task, images } = this . metadata
19051905
@@ -3697,8 +3697,14 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
36973697 // userMessageWasRemoved so the message (and its count) is restored
36983698 // exactly once when the retry succeeds, keeping the total symmetric
36993699 // regardless of how many empty-response cycles occur first.
3700+ // Guard: only reverse a count this iteration actually added. The
3701+ // popped message may predate this turn (resumed history, or a
3702+ // message appended by flushPendingToolResultsToHistory, neither
3703+ // of which incremented messageCounts.user).
37003704 this . apiConversationHistory . pop ( )
3701- this . messageCounts . user --
3705+ if ( shouldAddUserMessage ) {
3706+ this . messageCounts . user --
3707+ }
37023708 }
37033709 }
37043710
@@ -4755,8 +4761,8 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
47554761 }
47564762
47574763 const messageCountDelta = {
4758- user : this . messageCounts . user - this . telemetryMessageCountsBaseline . user ,
4759- assistant : this . messageCounts . assistant - this . telemetryMessageCountsBaseline . assistant ,
4764+ user : Math . max ( 0 , this . messageCounts . user - this . telemetryMessageCountsBaseline . user ) ,
4765+ assistant : Math . max ( 0 , this . messageCounts . assistant - this . telemetryMessageCountsBaseline . assistant ) ,
47604766 }
47614767
47624768 const hasToolUsageDelta = Object . keys ( toolUsageDelta ) . length > 0
@@ -4774,7 +4780,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
47744780 this . lastTelemetryFlushAt = Date . now ( )
47754781 }
47764782
4777- private startIdleTelemetryCheck ( ) : void {
4783+ startIdleTelemetryCheck ( ) : void {
47784784 this . idleTelemetryCheckInterval = setInterval ( ( ) => {
47794785 // lastMessageTs only moves forward on activity, so comparing it against the
47804786 // last flush tells us whether anything happened since that flush -- if the
0 commit comments