@@ -696,21 +696,9 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
696
696
if ( element . model . response === element . model . entireResponse && element . errorDetails ?. message && element . errorDetails . message !== canceledName ) {
697
697
content . push ( { kind : 'errorDetails' , errorDetails : element . errorDetails , isLast : index === this . delegate . getListLength ( ) - 1 } ) ;
698
698
}
699
- if ( this . shouldShowFileChangesSummary ( element ) ) {
700
- const fileChanges : IChatChangesSummary [ ] = [ ] ;
701
- for ( const part of element . model . entireResponse . value ) {
702
- if ( part . kind === 'textEditGroup' ) {
703
- fileChanges . push ( {
704
- kind : 'changesSummary' ,
705
- reference : part . uri ,
706
- sessionId : element . sessionId ,
707
- requestId : element . requestId ,
708
- } ) ;
709
- }
710
- }
711
- if ( fileChanges . length ) {
712
- content . push ( { kind : 'changesSummary' , fileChanges } ) ;
713
- }
699
+ const fileChangesSummaryPart = this . getChatFileChangesSummaryPart ( element ) ;
700
+ if ( fileChangesSummaryPart ) {
701
+ content . push ( fileChangesSummaryPart ) ;
714
702
}
715
703
716
704
const diff = this . diff ( templateData . renderedParts ?? [ ] , content , element ) ;
@@ -719,6 +707,29 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
719
707
this . updateItemHeightOnRender ( element , templateData ) ;
720
708
}
721
709
710
+ private getChatFileChangesSummaryPart ( element : IChatResponseViewModel ) : IChatChangesSummaryPart | undefined {
711
+ if ( ! this . shouldShowFileChangesSummary ( element ) ) {
712
+ return undefined ;
713
+ }
714
+ const consideredFiles : Set < string > = new Set ( ) ;
715
+ const fileChanges : IChatChangesSummary [ ] = [ ] ;
716
+ for ( const part of element . model . entireResponse . value ) {
717
+ if ( part . kind === 'textEditGroup' && ! consideredFiles . has ( part . uri . toString ( true ) ) ) {
718
+ fileChanges . push ( {
719
+ kind : 'changesSummary' ,
720
+ reference : part . uri ,
721
+ sessionId : element . sessionId ,
722
+ requestId : element . requestId ,
723
+ } ) ;
724
+ consideredFiles . add ( part . uri . toString ( true ) ) ;
725
+ }
726
+ }
727
+ if ( ! fileChanges . length ) {
728
+ return undefined ;
729
+ }
730
+ return { kind : 'changesSummary' , fileChanges } ;
731
+ }
732
+
722
733
private renderChatRequest ( element : IChatRequestViewModel , index : number , templateData : IChatListItemTemplate ) {
723
734
templateData . rowContainer . classList . toggle ( 'chat-response-loading' , false ) ;
724
735
if ( element . id === this . viewModel ?. editing ?. id ) {
@@ -1019,21 +1030,9 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
1019
1030
const isPaused = element . model . isPaused . get ( ) ;
1020
1031
partsToRender . push ( { kind : 'working' , isPaused, setPaused : p => element . model . setPaused ( p ) } ) ;
1021
1032
}
1022
- if ( this . shouldShowFileChangesSummary ( element ) ) {
1023
- const fileChanges : IChatChangesSummary [ ] = [ ] ;
1024
- for ( const part of element . model . entireResponse . value ) {
1025
- if ( part . kind === 'textEditGroup' ) {
1026
- fileChanges . push ( {
1027
- kind : 'changesSummary' ,
1028
- reference : part . uri ,
1029
- sessionId : element . sessionId ,
1030
- requestId : element . requestId ,
1031
- } ) ;
1032
- }
1033
- }
1034
- if ( fileChanges . length > 0 ) {
1035
- partsToRender . push ( { kind : 'changesSummary' , fileChanges } ) ;
1036
- }
1033
+ const fileChangesSummaryPart = this . getChatFileChangesSummaryPart ( element ) ;
1034
+ if ( fileChangesSummaryPart ) {
1035
+ partsToRender . push ( fileChangesSummaryPart ) ;
1037
1036
}
1038
1037
1039
1038
return { content : partsToRender , moreContentAvailable } ;
0 commit comments