diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index b0dfc6fb437..150d22a5665 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -7,7 +7,7 @@ import * as dom from 'vs/base/browser/dom'; import { ITreeContextMenuEvent, ITreeElement } from 'vs/base/browser/ui/tree/tree'; import { disposableTimeout, timeout } from 'vs/base/common/async'; import { toErrorMessage } from 'vs/base/common/errorMessage'; -import { Emitter } from 'vs/base/common/event'; +import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, DisposableStore, IDisposable, MutableDisposable, combinedDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { Schemas } from 'vs/base/common/network'; import { isEqual } from 'vs/base/common/resources'; @@ -589,10 +589,15 @@ export class ChatWidget extends Disposable implements IChatWidget { this.container.setAttribute('data-session-id', model.sessionId); this.viewModel = this.instantiationService.createInstance(ChatViewModel, model, this._codeBlockModelCollection); - this.viewModelDisposables.add(this.viewModel.onDidChange(e => { - this.requestInProgress.set(this.viewModel!.requestInProgress); + this.viewModelDisposables.add(Event.accumulate(this.viewModel.onDidChange, 0)(events => { + if (!this.viewModel) { + return; + } + + this.requestInProgress.set(this.viewModel.requestInProgress); + this.onDidChangeItems(); - if (e?.kind === 'addRequest') { + if (events.some(e => e?.kind === 'addRequest')) { revealLastElement(this.tree); this.focusInput(); }