@@ -971,16 +971,10 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
971971
972972 // keep existing thinking part instance during streaming and update it in place
973973 if ( alreadyRenderedPart && partToRender . kind === 'thinking' && alreadyRenderedPart instanceof ChatThinkingContentPart ) {
974- alreadyRenderedPart . updateThinking ( partToRender ) ;
975- renderedParts [ contentIndex ] = alreadyRenderedPart ;
976- for ( let i = partsToRender . length ; i < renderedParts . length ; i ++ ) {
977- const part = renderedParts [ i ] ;
978- if ( part ) {
979- part . dispose ( ) ;
980- part . domNode ?. remove ( ) ;
981- delete renderedParts [ i ] ;
982- }
974+ if ( ! Array . isArray ( partToRender . value ) ) {
975+ alreadyRenderedPart . updateThinking ( partToRender ) ;
983976 }
977+ renderedParts [ contentIndex ] = alreadyRenderedPart ;
984978 return ;
985979 }
986980
@@ -1509,22 +1503,25 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
15091503
15101504 renderThinkingPart ( content : IChatThinkingPart , context : IChatContentPartRenderContext , templateData : IChatListItemTemplate , ) : IChatContentPart {
15111505
1512- // if array, we do a lazy rendering for now
1506+ // if array, we do a naive part by part rendering for now
15131507 if ( Array . isArray ( content . value ) ) {
15141508 if ( content . value . length < 1 ) {
15151509 this . _currentThinkingPart ?. finalizeTitleIfDefault ( ) ;
15161510 return this . renderNoContent ( other => content . kind === other . kind ) ;
15171511 }
15181512 for ( const item of content . value ) {
15191513 if ( item ) {
1520- const itemContent = { ...content , value : item } ;
1521- const itemPart = templateData . instantiationService . createInstance ( ChatThinkingContentPart , itemContent , context ) ;
1522- itemPart . addDisposable ( itemPart . onDidChangeHeight ( ( ) => this . updateItemHeight ( templateData ) ) ) ;
1523- this . _currentThinkingPart = itemPart ;
1524- return itemPart ;
1514+ if ( this . _currentThinkingPart ) {
1515+ this . _currentThinkingPart . setupThinkingContainer ( { ...content , value : item } , context ) ;
1516+ } else {
1517+ const itemContent = { ...content , value : item } ;
1518+ const itemPart = templateData . instantiationService . createInstance ( ChatThinkingContentPart , itemContent , context ) ;
1519+ itemPart . addDisposable ( itemPart . onDidChangeHeight ( ( ) => this . updateItemHeight ( templateData ) ) ) ;
1520+ this . _currentThinkingPart = itemPart ;
1521+ }
15251522 }
15261523 }
1527-
1524+ return this . _currentThinkingPart ?? this . renderNoContent ( other => content . kind === other . kind ) ;
15281525 // non-array, handle case where we are currently thinking vs. starting a new thinking part
15291526 } else {
15301527 if ( this . _currentThinkingPart ) {
@@ -1537,8 +1534,6 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer<Ch
15371534 return this . _currentThinkingPart ;
15381535
15391536 }
1540-
1541- return this . renderNoContent ( other => content . kind === other . kind ) ;
15421537 }
15431538
15441539 disposeElement ( node : ITreeNode < ChatTreeItem , FuzzyScore > , index : number , templateData : IChatListItemTemplate , details ?: IListElementRenderDetails ) : void {
0 commit comments