@@ -268,6 +268,7 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
268268
269269 // Message Queue Service
270270 public readonly messageQueueService : MessageQueueService
271+ private messageQueueStateChangedHandler : ( ( ) => void ) | undefined
271272
272273 // Streaming
273274 isWaitingForFirstChunk = false
@@ -370,7 +371,8 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
370371 this . assistantMessageParser = new AssistantMessageParser ( )
371372
372373 this . messageQueueService = new MessageQueueService ( )
373- this . messageQueueService . on ( "stateChanged" , ( ) => this . providerRef . deref ( ) ?. postStateToWebview ( ) )
374+ this . messageQueueStateChangedHandler = ( ) => this . providerRef . deref ( ) ?. postStateToWebview ( )
375+ this . messageQueueService . on ( "stateChanged" , this . messageQueueStateChangedHandler )
374376
375377 // Only set up diff strategy if diff is enabled.
376378 if ( this . diffEnabled ) {
@@ -1448,8 +1450,13 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
14481450 public dispose ( ) : void {
14491451 console . log ( `[Task#dispose] disposing task ${ this . taskId } .${ this . instanceId } ` )
14501452
1451- // Dispose message queue.
1453+ // Dispose message queue and remove event listeners .
14521454 try {
1455+ if ( this . messageQueueStateChangedHandler ) {
1456+ this . messageQueueService . removeListener ( "stateChanged" , this . messageQueueStateChangedHandler )
1457+ this . messageQueueStateChangedHandler = undefined
1458+ }
1459+
14531460 this . messageQueueService . dispose ( )
14541461 } catch ( error ) {
14551462 console . error ( "Error disposing message queue:" , error )
0 commit comments