diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatContentParts.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatContentParts.ts index 92b5dc7540f77..c4d1f90c57614 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatContentParts.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatContentParts.ts @@ -8,7 +8,7 @@ import { ChatTreeItem, IChatCodeBlockInfo } from '../chat.js'; import { IChatRendererContent } from '../../common/chatViewModel.js'; export interface IChatContentPart extends IDisposable { - domNode: HTMLElement; + domNode: HTMLElement | undefined; /** * Used to indicate a part's ownership of a code block. diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 9a710ab7f2785..8d1682e18c5ff 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -46,7 +46,7 @@ import { ChatAgentLocation, IChatAgentMetadata } from '../common/chatAgents.js'; import { ChatContextKeys } from '../common/chatContextKeys.js'; import { IChatRequestVariableEntry, IChatTextEditGroup } from '../common/chatModel.js'; import { chatSubcommandLeader } from '../common/chatParserTypes.js'; -import { ChatAgentVoteDirection, ChatAgentVoteDownReason, IChatConfirmation, IChatContentReference, IChatFollowup, IChatMarkdownContent, IChatTask, IChatToolInvocation, IChatToolInvocationSerialized, IChatTreeData } from '../common/chatService.js'; +import { ChatAgentVoteDirection, ChatAgentVoteDownReason, IChatConfirmation, IChatContentReference, IChatFollowup, IChatMarkdownContent, IChatTask, IChatToolInvocation, IChatToolInvocationSerialized, IChatTreeData, IChatUndoStop } from '../common/chatService.js'; import { IChatCodeCitations, IChatReferences, IChatRendererContent, IChatRequestViewModel, IChatResponseViewModel, IChatWorkingProgress, isRequestVM, isResponseVM } from '../common/chatViewModel.js'; import { getNWords } from '../common/chatWordCounter.js'; import { CodeBlockModelCollection } from '../common/codeBlockModelCollection.js'; @@ -565,14 +565,18 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer this._onDidClickRerunWithAgentOrCommandDetection.fire({ sessionId: element.sessionId, requestId: element.id })); templateData.value.appendChild(cmdPart.domNode); parts.push(cmdPart); inlineSlashCommandRendered = true; } - templateData.value.appendChild(newPart.domNode); + if (newPart.domNode) { + templateData.value.appendChild(newPart.domNode); + } parts.push(newPart); } }); @@ -715,21 +719,24 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer(['undoStop']); const partsToRender: IChatRendererContent[] = []; if (element.contentReferences.length) { partsToRender.push({ kind: 'references', references: element.contentReferences }); @@ -763,7 +769,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer other.kind === 'undoStop' && other.id === content.id); + } + + private renderNoContent(equals: (otherContent: IChatRendererContent) => boolean): IChatContentPart { + return { + dispose: () => { }, + domNode: undefined, + hasSameContent: equals, + }; + } + private renderTreeData(content: IChatTreeData, templateData: IChatListItemTemplate, context: IChatContentPartRenderContext): IChatContentPart { const data = content.treeData; const treeDataIndex = context.preceedingContentParts.filter(part => part instanceof ChatTreeContentPart).length;