@@ -65,7 +65,7 @@ import { IChatContentPart, IChatContentPartRenderContext } from './chatContentPa
6565import { ChatErrorConfirmationContentPart } from './chatContentParts/chatErrorConfirmationPart.js' ;
6666import { ChatExtensionsContentPart } from './chatContentParts/chatExtensionsContentPart.js' ;
6767import { ChatMarkdownContentPart , EditorPool } from './chatContentParts/chatMarkdownContentPart.js' ;
68- import { ChatProgressContentPart } from './chatContentParts/chatProgressContentPart.js' ;
68+ import { ChatProgressContentPart , ChatWorkingProgressContentPart } from './chatContentParts/chatProgressContentPart.js' ;
6969import { ChatQuotaExceededPart } from './chatContentParts/chatQuotaExceededPart.js' ;
7070import { ChatCollapsibleListContentPart , ChatUsedReferencesListContentPart , CollapsibleListPool } from './chatContentParts/chatReferencesContentPart.js' ;
7171import { ChatTaskContentPart } from './chatContentParts/chatTaskContentPart.js' ;
@@ -698,6 +698,10 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
698698 if ( element . model . response === element . model . entireResponse && element . errorDetails ?. message && element . errorDetails . message !== canceledName ) {
699699 content . push ( { kind : 'errorDetails' , errorDetails : element . errorDetails , isLast : index === this . delegate . getListLength ( ) - 1 } ) ;
700700 }
701+
702+ if ( ! element . isComplete && this . shouldShowWorkingProgress ( element , content ) ) {
703+ content . push ( { kind : 'working' } ) ;
704+ }
701705 const fileChangesSummaryPart = this . getChatFileChangesSummaryPart ( element ) ;
702706 if ( fileChangesSummaryPart ) {
703707 content . push ( fileChangesSummaryPart ) ;
@@ -709,6 +713,23 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
709713 this . updateItemHeightOnRender ( element , templateData ) ;
710714 }
711715
716+ private shouldShowWorkingProgress ( element : IChatResponseViewModel , partsToRender : IChatRendererContent [ ] ) : boolean {
717+ if ( ! isResponseVM ( element ) || element . isComplete ) {
718+ return false ;
719+ }
720+
721+ if ( ! partsToRender . length ) {
722+ return true ;
723+ }
724+
725+ const lastPart = partsToRender . at ( - 1 ) ! ;
726+ return ! (
727+ lastPart . kind === 'markdownContent' ||
728+ lastPart . kind === 'references' ||
729+ lastPart . kind === 'codeCitations'
730+ ) ;
731+ }
732+
712733 private getChatFileChangesSummaryPart ( element : IChatResponseViewModel ) : IChatChangesSummaryPart | undefined {
713734 if ( ! this . shouldShowFileChangesSummary ( element ) ) {
714735 return undefined ;
@@ -1087,6 +1108,8 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
10871108 return this . renderMultiDiffData ( content , templateData , context ) ;
10881109 } else if ( content . kind === 'progressMessage' ) {
10891110 return this . instantiationService . createInstance ( ChatProgressContentPart , content , this . renderer , context , undefined , undefined , undefined ) ;
1111+ } else if ( content . kind === 'working' ) {
1112+ return this . instantiationService . createInstance ( ChatWorkingProgressContentPart , content , this . renderer , context ) ;
10901113 } else if ( content . kind === 'progressTask' || content . kind === 'progressTaskSerialized' ) {
10911114 return this . renderProgressTask ( content , templateData , context ) ;
10921115 } else if ( content . kind === 'command' ) {
0 commit comments